diff --git a/Testnet/MintableToken/MintableToken.Tests/MintableToken.Tests.csproj b/Testnet/MintableToken/MintableToken.Tests/MintableToken.Tests.csproj index 589fbca6..f6eb1b03 100644 --- a/Testnet/MintableToken/MintableToken.Tests/MintableToken.Tests.csproj +++ b/Testnet/MintableToken/MintableToken.Tests/MintableToken.Tests.csproj @@ -1,7 +1,7 @@ - netcoreapp3.1 + net6.0 false @@ -9,8 +9,7 @@ - - + diff --git a/Testnet/MintableToken/MintableToken.Tests/MintableTokenTests.cs b/Testnet/MintableToken/MintableToken.Tests/MintableTokenTests.cs index fb69896d..0460d868 100644 --- a/Testnet/MintableToken/MintableToken.Tests/MintableTokenTests.cs +++ b/Testnet/MintableToken/MintableToken.Tests/MintableTokenTests.cs @@ -1,10 +1,22 @@ +using System.Linq; using Moq; +using NBitcoin.DataEncoders; +using NBitcoin; using Stratis.SmartContracts; using Stratis.SmartContracts.CLR; +using Stratis.SmartContracts.CLR.Serialization; using Xunit; namespace MintableTokenTests { + public class ChameleonNetwork : Network + { + public ChameleonNetwork(byte base58Prefix) + { + this.Base58Prefixes = new byte[][] { new byte[] { base58Prefix } }; + } + } + /// /// These tests validate the functionality that differs between the original standard token and the extended version. /// @@ -37,6 +49,9 @@ public MintableTokenTests() this.name = "Test Token"; this.symbol = "TST"; this.decimals = 8; + + var serializer = new Serializer(new ContractPrimitiveSerializerV2(null)); // new SmartContractsPoARegTest() + this.mockContractState.Setup(x => x.Serializer).Returns(serializer); } [Fact] @@ -230,5 +245,42 @@ public void BurnWithMetadata_Records_Metadata_In_Log() this.mockContractLogger.Verify(l => l.Log(It.IsAny(), new MintableToken.BurnMetadata() { From = this.sender, Amount = burnAmount, Metadata = "Hello world" })); } + + [Fact] + public void CanPerformDelegatedTransfer() + { + UInt256 balance = 100; + UInt256 burnAmount = 20; + + this.mockContractState.Setup(m => m.Message).Returns(new Message(this.contract, this.sender, 0)); + + var standardToken = new MintableToken(this.mockContractState.Object, 100_000, this.name, this.symbol, "CIRRUS", "Address"); + + // Setup the total supply + this.mockPersistentState.Setup(s => s.GetUInt256($"TotalSupply")).Returns(100_000); + + // Setup the balance of the sender's address in persistent state + this.mockPersistentState.Setup(s => s.GetUInt256($"Balance:{this.sender}")).Returns(balance); + + // Setup the balance of the recipient's address in persistent state + this.mockPersistentState.Setup(s => s.GetUInt256($"Balance:{Address.Zero}")).Returns(0); + + var uniqueNumber = new UInt128("1"); + + var key = new Key(new HexEncoder().DecodeData("c6edd54dd0671f1415a94ad388265c4465a8b328cc51a0a1fe770d910b48b0d1")); + var address = key.PubKey.Hash.ToBytes().ToAddress(); + + var hexUniqueNumber = Encoders.Hex.EncodeData(uniqueNumber.ToBytes().Reverse().ToArray()); + + var contractAddress = this.contract.ToUint160().ToBase58Address(new ChameleonNetwork(1)); + var fromAddress = address.ToUint160().ToBase58Address(new ChameleonNetwork(1)); + var toAddress = this.destination.ToUint160().ToBase58Address(new ChameleonNetwork(1)); + + var url = $"webdemo.stratisplatform.com:7167/api/auth?uid={hexUniqueNumber}&from={fromAddress}&to={toAddress}&amount=1.23&metadata=metadata&contract={contractAddress}"; + var signature = key.SignMessage(url); + byte[] signatureBytes = Encoders.Base64.DecodeData(signature); + + standardToken.DelegatedTransferWithMetadata(url, signatureBytes); + } } } diff --git a/Testnet/MintableToken/MintableToken/MintableToken.cs b/Testnet/MintableToken/MintableToken/MintableToken.cs index 386fcce1..de2a9511 100644 --- a/Testnet/MintableToken/MintableToken/MintableToken.cs +++ b/Testnet/MintableToken/MintableToken/MintableToken.cs @@ -1,4 +1,5 @@ -using Stratis.SmartContracts; +using Stratis.SCL.Crypto; +using Stratis.SmartContracts; using Stratis.SmartContracts.Standards; /// @@ -8,7 +9,8 @@ public class MintableToken : SmartContract, IStandardToken256, IMintable, IBurnable, IMintableWithMetadataForNetwork, IBurnableWithMetadata, IOwnable, IInterflux, IBlackList { /// - /// Constructor used to create a new instance of the token. Assigns the total token supply to the creator of the contract. + /// Initializes a new instance of the class. + /// Assigns the total token supply to the creator of the contract. /// /// The execution state for the contract. /// The total token supply. @@ -34,6 +36,19 @@ public MintableToken(ISmartContractState smartContractState, UInt256 totalSupply Log(new InterfluxChangedLog { PreviousInterflux = Address.Zero, NewInterflux = Message.Sender }); } + /// + /// Function to check for replays of signed transfers. + /// + /// A unique number identifying the transfer. + /// True if the transfer had already been performed, false otherwise. + public bool KnownTransfer(UInt128 transferID) => State.GetBool($"Transfer:{transferID}"); + + /// + /// Records the of a signed transfer. + /// + /// A unique number identifying the transfer. + private void SetKnownTransfer(UInt128 transferID) => State.SetBool($"Transfer:{transferID}", true); + public string Symbol { get => State.GetString(nameof(this.Symbol)); @@ -113,33 +128,39 @@ private void SetBlackListed(Address address, bool value) } /// - public bool TransferTo(Address to, UInt256 amount) + private bool TransferInternal(Address from, Address to, UInt256 amount) { - BeforeTokenTransfer(Message.Sender, to); + BeforeTokenTransfer(from, to); if (amount == 0) { - Log(new TransferLog { From = Message.Sender, To = to, Amount = 0 }); + Log(new TransferLog { From = from, To = to, Amount = 0 }); return true; } - UInt256 senderBalance = GetBalance(Message.Sender); + UInt256 senderBalance = GetBalance(from); if (senderBalance < amount) { return false; } - SetBalance(Message.Sender, senderBalance - amount); + SetBalance(from, senderBalance - amount); SetBalance(to, checked(GetBalance(to) + amount)); - Log(new TransferLog { From = Message.Sender, To = to, Amount = amount }); + Log(new TransferLog { From = from, To = to, Amount = amount }); return true; } + /// + public bool TransferTo(Address to, UInt256 amount) + { + return TransferInternal(Message.Sender, to, amount); + } + public bool TransferToWithMetadata(Address to, UInt256 amount, string metadata) { Log(new MetadataLog { Metadata = metadata }); @@ -178,6 +199,44 @@ public bool TransferFrom(Address from, Address to, UInt256 amount) return true; } + public void DelegatedTransferWithMetadata(string url, byte[] signature) + { + var args = SSAS.GetURLArguments(url, new string[] { "uid", "contract", "from", "to", "amount", "metadata" }); + + Assert(args != null && args.Length == 6, "Invalid url."); + Assert(Serializer.ToAddress(SSAS.ParseAddress(args[1], out byte contractPrefix)) == this.Address, "Invalid 'contract' address."); + + var uniqueNumber = UInt128.Parse($"0x{args[0]}"); + Assert(!KnownTransfer(uniqueNumber), "The 'uid' has already been used."); + + Assert(SSAS.TryGetSignerSHA256(Serializer.Serialize(url), signature, out Address signer), "Could not resolve signer."); + + Address from = Serializer.ToAddress(SSAS.ParseAddress(args[2], out byte fromPrefix)); + Assert(signer == from, "Signer of 'metadata' does not match 'from' address."); + Assert(fromPrefix == contractPrefix, "The 'from' address prefix is different from 'contract' address prefix."); + + Address to = Serializer.ToAddress(SSAS.ParseAddress(args[3], out byte toPrefix)); + Assert(toPrefix == contractPrefix, "The 'to' address prefix is different from 'contract' address prefix."); + + var amount = ParseAmount(args[4]); + + TransferInternal(from, to, amount); + + SetKnownTransfer(uniqueNumber); + + Log(new MetadataLog { Metadata = args[5] }); + } + + private UInt256 ParseAmount(string amount) + { + // Parse amount. + int amountDecimalIndex = amount.IndexOf('.'); + int amountDecimals = amountDecimalIndex >= 0 ? amount.Length - amountDecimalIndex - 1 : 0; + Assert(amountDecimals <= 2, "Too many decimals in amount"); + + return UInt256.Parse(amount.PadRight(amount.Length + 8 - amountDecimals, '0').Replace(".", string.Empty)); + } + private void OnlyOwner() { Assert(Message.Sender == Owner, "Only the owner can call this method"); diff --git a/Testnet/MintableToken/MintableToken/MintableToken.csproj b/Testnet/MintableToken/MintableToken/MintableToken.csproj index 2d3aa2e9..0cc1e552 100644 --- a/Testnet/MintableToken/MintableToken/MintableToken.csproj +++ b/Testnet/MintableToken/MintableToken/MintableToken.csproj @@ -1,10 +1,11 @@  - netcoreapp3.1 + net6.0 + diff --git a/Testnet/MintableToken/README.MD b/Testnet/MintableToken/README.MD index 3d5e3369..7df5b5fe 100644 --- a/Testnet/MintableToken/README.MD +++ b/Testnet/MintableToken/README.MD @@ -8,12 +8,12 @@ v2.0.2 **Contract Hash** ``` -52ccfcd2ecb1f9dfc5b265ca5a54c1ec8422d3dd6219665f8f3007b72e45c11d +12e58f9cdb234e053cbc328814afdd02641f78110e168c1cbb77ca33407c5b97 ``` **Contract Byte Code** ``` -4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C0102004B3CFCCD0000000000000000E00022200B013000002800000002000000000000A2460000002000000060000000000010002000000002000004000000000000000400000000000000008000000002000000000000030040850000100000100000000010000010000000000000100000000000000000000000504600004F000000000000000000000000000000000000000000000000000000006000000C000000344600001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000A8260000002000000028000000020000000000000000000000000000200000602E72656C6F6300000C0000000060000000020000002A000000000000000000000000000040000042000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084460000000000004800000002000500E42A0000501B0000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013300300CE000000010000110203280D00000A0204281C00000602052818000006020E0428160000060202280E00000A6F0F00000A281E000006027E1000000A2820000006020E052822000006020E0628240000060202280E00000A6F0F00000A2826000006021E281A0000060202280E00000A6F0F00000A042828000006021200FE151700000212007E1000000A7D19000004120002280E00000A6F0F00000A7D1A00000406280100002B021201FE151800000212017E1000000A7D1B000004120102280E00000A6F0F00000A7D1C00000407280200002B2A4602281200000A72010000706F1300000A2A4A02281200000A7201000070036F1400000A2A4602281200000A720F0000706F1300000A2A4A02281200000A720F000070036F1400000A2A4E02281200000A72190000706F1500000A16912A6E02281200000A7219000070178D160000012516039C6F1600000A2A4602281200000A722B0000706F1700000A2A4A02281200000A722B000070036F1800000A2A4602281200000A72430000706F1900000A2A4A02281200000A7243000070036F1A00000A2A4602281200000A724F0000706F1900000A2A4A02281200000A724F000070036F1A00000A2A4602281200000A72690000706F1300000A2A4A02281200000A7269000070036F1400000A2A4602281200000A72810000706F1300000A2A4A02281200000A7281000070036F1400000A2A4602281200000A729D0000706F1900000A2A4A02281200000A729D000070036F1A00000A2A7202281200000A72B1000070038C0C000001281B00000A6F1700000A2A7602281200000A72B1000070038C0C000001281B00000A046F1800000A2A7202281200000A72C9000070038C0C000001281B00000A6F1C00000A2A7602281200000A72C9000070038C0C000001281B00000A046F1D00000A2A13300400D4000000020000110202280E00000A6F0F00000A03283F0000060416281E00000A281F00000A2C38021201FE150C000002120102280E00000A6F0F00000A7D010000041201037D02000004120116281E00000A7D0300000407280300002B172A0202280E00000A6F0F00000A28270000060A0604282000000A2C02162A0202280E00000A6F0F00000A0604282100000A282800000602030203282700000604282200000A2828000006021201FE150C000002120102280E00000A6F0F00000A7D010000041201037D020000041201047D0300000407280300002B172A133003002000000003000011021200FE15120000021200057D1300000406280400002B020304282B0000062A13300500D700000004000011020304283F0000060516281E00000A281F00000A2C2E021202FE150C0000021202037D010000041202047D02000004120216281E00000A7D0300000408280300002B172A020302280E00000A6F0F00000A28340000060A020328270000060B0605282000000A2D090705282000000A2C02162A020302280E00000A6F0F00000A0605282100000A283300000602030705282100000A282800000602040204282700000605282200000A2828000006021202FE150C0000021202037D010000041202047D020000041202057D0300000408280300002B172A8A0202280E00000A6F0F00000A02281D000006282300000A72E9000070282400000A2A000013300300260000000500001102282E000006020317282A000006021200FE15140000021200037D1500000406280500002B2A000013300300260000000600001102282E000006020316282A000006021200FE15150000021200037D1600000406280600002B2A0000133004008D0000000700001102282E00000602020328290000067231010070282400000A020328270000060A0203282500000A28280000060202281B00000606282100000A281C000006021201FE1510000002120102281B00000606282200000A7D0F000004120102281B0000067D1000000407280700002B021202FE15160000021202037D170000041202067D1800000408280800002B2A000000133004006A000000080000110202280E00000A6F0F00000A03283400000604282600000A2C02162A0202280E00000A6F0F00000A03052833000006021200FE150D000002120002280E00000A6F0F00000A7D040000041200037D050000041200057D070000041200047D0600000406280900002B172A8E02281200000A724F010070038C0C000001048C0C000001282700000A056F1800000A2A8A02281200000A724F010070038C0C000001048C0C000001282700000A6F1700000A2A00000013300300370000000900001102282E00000602032820000006021200FE1519000002120002281D0000067D1D000004120002281F0000067D1E00000406280A00002B2A0013300300690000000A0000110202280E00000A6F0F00000A02281F000006282300000A7273010070282400000A02281D0000060A0202281F000006281E000006027E1000000A2820000006021201FE15170000021201067D19000004120102280E00000A6F0F00000A7D1A00000407280100002B2A000000133003003E0000000B00001102282E0000060228250000060A02032826000006021201FE15180000021201067D1B000004120102280E00000A6F0F00000A7D1C00000407280200002B2A000013300400980000000C000011020203282900000616FE0172C3010070282400000A020328270000060A02030604282200000A2828000006021201FE150C00000212017E1000000A7D010000041201037D020000041201047D0300000407280300002B0202281B00000604282200000A281C000006021202FE1510000002120202281B00000604282100000A7D0F000004120202281B0000067D1000000408280700002B2AAA0202280E00000A6F0F00000A022825000006282300000A72FB010070282400000A02030428380000062A0013300500520000000D0000110203042838000006021200FE150E0000021200037D080000041200047D0A00000412000E047D090000041200057D0B00000406280B00002B02020302281D00000605282D0000067243020070282400000A2A000013300500950000000E00001102282E000006020228250000067E1000000A282800000A726B020070282400000A020E05282900000A2D1C0E06282900000A2D130E060228210000061B282A00000A16FE012B0116729F020070282400000A020304050E04283A00000602030228250000060405282100000A282D0000062C21021200FE151100000212000E057D1100000412000E067D1200000406280C00002B2A000000133005005C0000000F00001102282E000006020E057E1000000A282800000A729F020070282400000A020304050E04283A000006030E05282800000A2C1102030E050405282100000A282D00000626021200FE151300000212000E057D1400000406280D00002B2A133004005300000010000011027E1000000A03282B0000062C430202281B00000603282100000A281C000006021200FE1510000002120002281B00000603282200000A7D0F000004120002281B0000067D1000000406280700002B172A162A00133003003E000000110000110203283D0000062C33021200FE150F000002120002280E00000A6F0F00000A7D0C0000041200037D0E0000041200047D0D00000406280E00002B172A162A8A02020328290000062D0C0204282900000616FE012B011672C3010070282400000A2A00000042534A4201000100000000000C00000076342E302E33303331390000000005006C000000440C0000237E0000B00C0000D808000023537472696E67730000000088150000C8020000235553005018000010000000234755494400000060180000F002000023426C6F6200000000000000020000015717A201090A000000FA0133001600000100000019000000190000001E0000003F00000059000000080000002A0000001F00000011000000050000000E0000001700000001000000030000000E0000000E0000000000420401000000000006003C0297060600AD0297060600960146060F00B70600000600C101DE0206008402EF0406001D02EF040600DA01EF040600F701EF0406005C02EF040600AA01EF040A00390749070A00210049070A009D0249070A00810749070E00010076060A005E01490706004A0181040A00750249070A00010149070A00850149070600CB02810406000503810406008F07810406000D0581040000000029000000000001000100A1000000F0070000000001000100A100000016010000000001000400A100000032000000000001000500A100000018080000000001000600A100000029010000000001000800A1000000FB030000000001000900A100000023060000000001000B00A100000020010000000001000D00A10000003A05000000000100110001001000A60400003D00010014000A011000A10300004900010040000A011000720300004900040040000A0110008E0000004900080040000A0110008100000049000C0040000A0110006203000049000F0040000A0110007E0300004900110040000A0110000C0300004900130040000A0110008C0300004900140040000A011000C20300004900150040000A011000D40300004900160040000A011000AD0300004900170040000A0110002C0300004900190040000A0110001803000049001B0040000A0110004403000049001D004000060090042C0006002B052C000600DB076E01060007062C00060075052C000600CA076E010600DB076E0106002B052C000600920072010600DB076E010600F9006E01060090042C000600920072010600DB076E010600A1086E01060089086E010600BA07720106002E0472010600920072010600BA072C00060013062C00060013062C00060013062C0006006B066E010600DC052C000600FA052C0006003F082C0006005E082C000600EA052C000600C2052C00000000000000C605FB0775010100000000000000C605080875010200000000000000C605590675010300000000000000C6051E057B010400000000000000C605480081010500000000000000C60D230827000700000000000000C605510875010700000000000000C605AA0788010800000000000000C6051B0490010A00000000000000C60560079D011000000000000000C60D2B0627001500000000000000C605360675011500000000000000C60D990527001600000000000000C60DAD0527001600000000000000C605580575011600000000000000C605490506001700000000000000C60D990527001700000000000000C605F70575011700000000000000C60549050600180050200000000086184006AA0118002A210000000086085404B6011E003C210000000081085F0410001E004F210000000086083301B6011F0061210000000081083C0110001F00742100000000E609D806BA0120008821000000008108E506BE012000A42100000000E6097508C3012100B6210000000081088508C8012100C92100000000E609990527002200DB21000000008108A30575012200EE2100000000E609AD05270023000022000000008108BE05750123001322000000008608B404B60124002522000000008108C404100024003822000000008608F906B60125004A220000000081080B07100025005D2200000000E6092308270026006F22000000008108310875012600822200000000E601D900CE0127009F22000000008100E40088012800BD22000000008100BB00D5012A00DA22000000008100CA00DB012B00F82200000000E6012305E2012D00D8230000000086005900EA012F00042400000000E6018804F3013200E7240000000081000306060035000C2500000000E601FB0775013500402500000000E601080875013600742500000000E601590675013700102600000000E601D602FD0138008626000000008100360407023B00AA2600000000E601EF0011023E00D02600000000E601580575014000142700000000E6014905060041008C2700000000E601510875014100D827000000008100A207880142007C2800000000E601AA0788014400A82800000000810070001A024600082900000000E6011B0490014A00AC2900000000E60160079D015000142A00000000E6011E057B015500742A00000000E601480081015600BE2A00000000810085052502580000000100410700000100410700000100410700000100E20700000100E207000002009B0000000100410700000100C20700000200E20700000100C20700000200E20700000300FD00000004009B0000000500AF0700000600E80300000100C20700000200E20700000300FD00000004009B0000000500AF0700000100410700000100CF05000001004107000001007201000002009508000003004501000004006A0400000500D404000006001D0700000100D00200000100D00200000100D00200000100D00200000100D00200000100D00200000100D00200000100D00200000100D00200000100410700000100410700000200D00200000100410700000100410700000200D00200000100370500000200E20700000100370500000200E207000003009B0000000100950400000200370500000300E207000001004107000001004107000001004107000001007D0500000200D40700000300E207000001000D06000002007D0500000300D002000001000D06000002007D0500000100CF05000001006B0800000100C20700000200E20700000100C20700000200E20700000100C20700000200E20700000300FD00000004009B0000000100C20700000200E20700000300FD00000004009B0000000500AF0700000600E80300000100C20700000200E20700000300FD00000004009B0000000500AF0700000100E20700000100E207000002009B000000010095040000020037050B0041000B0018000B000C000B001C000B0010000B0024000B0014000B000800090040060100110040060600190040060A00290040061000310040061000390040061000410040061000490040061000510040061000590040061000710040060600990040060600790040061C0079000A012200A1006A052700610032052C007900E4033000790054014100A900F8024600A90002034B00A900C6065100A900CF065700A90013005E00A9001E006400A9002B076B00A90036077100B9007A077800A90071047E00A900790483006900960790006900B008960069009A0496006900E004A30069000105A3006100B008BF007900E907C70069002E05EA006900BC089600B9007A0703016100BC08BF00B900CA083A01B900F2063F0121006300E9022E000B003F022E00130048022E001B0067022E00230070022E002B00B3022E003300C6022E003B00D1022E004300DE022E004B00B3022E005300B30241006300E90281006300E902A1006300E90201016300E90221016300E90263015B00E90281016300E902A1016300E90221026300E90241026300E90281026300E902A1026300E902C1026300E902E1026300E90221036300E90241036300E90261036300E90281036300E902A1036300E902C1036300E90215008900AC00B600CD00D700E100F9000A0114011B0122012B0135014C0156015B010500010008000200090003000A0005000B000600000061082D02000039062D02000007062D020000C2052D02000007062D020000630432020000400132020000E9063602000089083A02000007062D020000C2052D020000C804320200000F073202000061082D0202000600030002000B00050002000D00070002000E000900020011000B00020015000D00010016000D00020017000F00010018000F0002001900110001001A00110002001B00130001001C00130002001D00150001001E00150002001F001700010020001700020021001900010022001900020023001B00010024001B00020025001D00010026001D00048000000100000000000000000000000000810700000600000000000000000000006501A40000000000020000000000000000000000000049070000000002000000000000000000000000007606000000000C000B000D000B000E000B000F000B0010000B0011000B0012000B0013000B0014000B0015000B0016000B0017000B0018000B0019000B002300370023003C0023009E002300B1002300D2002300DC002300EF002300F4002300FE0023000F0123003001230047012300510123006001000000495374616E64617264546F6B656E3235360047657455496E743235360053657455496E74323536003C4D6F64756C653E00494275726E61626C65576974684D65746164617461004275726E576974684D65746164617461005472616E73666572546F576974684D65746164617461004D696E74576974684D65746164617461004275726E4D65746164617461004D696E744D65746164617461006D657461646174610053797374656D2E507269766174652E436F72654C696200476574426C61636B4C697374656400536574426C61636B4C69737465640047657442616C616E63650053657442616C616E636500416C6C6F77616E6365004665650066656500494D657373616765006765745F4D65737361676500494275726E61626C6500494F776E61626C6500494D696E7461626C65006765745F4E616D65007365745F4E616D65006E616D650056616C756554797065006765745F53746174650049536D617274436F6E7472616374537461746500736D617274436F6E74726163745374617465004950657273697374656E7453746174650044656275676761626C6541747472696275746500417373656D626C795469746C65417474726962757465005461726765744672616D65776F726B41747472696275746500417373656D626C7946696C6556657273696F6E41747472696275746500417373656D626C79496E666F726D6174696F6E616C56657273696F6E41747472696275746500417373656D626C79436F6E66696775726174696F6E41747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500417373656D626C7950726F6475637441747472696275746500496E64657841747472696275746500417373656D626C79436F6D70616E79417474726962757465004465706C6F794174747269627574650052756E74696D65436F6D7061746962696C69747941747472696275746500427974650076616C756500417070726F76650053797374656D2E52756E74696D652E56657273696F6E696E6700476574537472696E6700536574537472696E67004D657461646174614C6F6700496E746572666C75784368616E6765644C6F67004F776E6572736869705472616E736665727265644C6F67004F776E6572736869705472616E736665725265717565737465644C6F6700537570706C794368616E67654C6F6700417070726F76616C4C6F670043726F7373636861696E4C6F670043697272757344657374696E6174696F6E4C6F67005472616E736665724C6F670044657374726F79426C61636B46756E64734C6F67004164646564426C61636B4C6973744C6F670052656D6F766564426C61636B4C6973744C6F670064657374696E6174696F6E4E6574776F726B00494D696E7461626C65576974684D65746164617461466F724E6574776F726B004D696E74576974684D65746164617461466F724E6574776F726B00536574417070726F76616C00536D617274436F6E74726163742E646C6C006765745F53796D626F6C007365745F53796D626F6C0073796D626F6C00476574426F6F6C00536574426F6F6C0053797374656D005472616E7366657246726F6D0066726F6D006F705F4C6573735468616E004D696E7461626C65546F6B656E006765745F4E6174697665436861696E007365745F4E6174697665436861696E006E6174697665436861696E006F705F5375627472616374696F6E0053797374656D2E5265666C656374696F6E006F705F4164646974696F6E00537472696E67436F6D70617269736F6E004275726E005472616E73666572546F006765745F5A65726F00746F004950756C6C4F776E65727368697000436C61696D4F776E657273686970005472616E736665724F776E657273686970006765745F53656E646572005370656E646572007370656E646572004265666F7265546F6B656E5472616E73666572006765745F4F776E6572007365745F4F776E6572006765745F50656E64696E674F776E6572007365745F50656E64696E674F776E65720070656E64696E674F776E65720050726576696F75734F776E65720043757272656E744F776E6572005365744E65774F776E6572004F6E6C794F776E6572006F776E657200426C61636B4C69737465645573657200494D696E746572006765745F4D696E746572005365744D696E746572002E63746F720053797374656D2E446961676E6F73746963730044657374726F79426C61636B46756E647300446972747946756E647300537472617469732E536D617274436F6E7472616374732E5374616E64617264730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300446562756767696E674D6F646573004765744279746573005365744279746573006765745F446563696D616C73007365745F446563696D616C7300457175616C73006765745F4E617469766541646472657373007365745F4E617469766541646472657373006E61746976654164647265737300476574416464726573730053657441646472657373006164647265737300537472617469732E536D617274436F6E747261637473004D696E74576974684D65746164617461466F7243697272757300466F726D617400536D617274436F6E7472616374004F626A656374006F705F496D706C6963697400496E7465726E616C4D696E740064657374696E6174696F6E4163636F756E74006163636F756E74004F6C64416D6F756E740063757272656E74416D6F756E7400616D6F756E74004173736572740049426C61636B4C69737400416464426C61636B4C6973740052656D6F7665426C61636B4C6973740049496E746572666C7578006765745F496E746572666C7578007365745F496E746572666C75780050726576696F7573496E746572666C757800536574496E746572666C7578004E6577496E746572666C757800696E746572666C7578006765745F546F74616C537570706C79007365745F546F74616C537570706C7900746F74616C537570706C790050726576696F7573537570706C79006F705F457175616C697479006F705F496E657175616C6974790049734E756C6C4F72456D70747900000D530079006D0062006F006C0000094E0061006D006500001144006500630069006D0061006C007300001754006F00740061006C0053007500700070006C007900000B4F0077006E00650072000019500065006E00640069006E0067004F0077006E006500720000174E006100740069007600650043006800610069006E00001B4E00610074006900760065004100640064007200650073007300001349006E0074006500720066006C00750078000017420061006C0061006E00630065003A007B0030007D00001F42006C00610063006B004C00690073007400650064003A007B0030007D0000474F006E006C007900200074006800650020006F0077006E00650072002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F006400001D41007300730065007200740020006600610069006C00650064002E00002341006C006C006F00770061006E00630065003A007B0030007D003A007B0031007D00004F4F006E006C007900200074006800650020006E006500770020006F0077006E00650072002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F0064000037540068006900730020006100640064007200650073007300200069007300200062006C00610063006B006C006900730074006500640000474F006E006C007900200049006E0074006500720066006C00750078002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F006400002746006500650020007400720061006E00730066006500720020006600610069006C0065006400003349006E0074006500720066006C00750078002000610064006400720065007300730020006E006F0074002000730065007400002749006E00760061006C00690064002000640065007300740069006E006100740069006F006E000000AF8F5C2B660D6C46AAF87109503B69CF00042001010803200001052001011111042001010E060702115C1160052001011245042000125104200011310306113106300101011E00040A01115C040A01116004200012550420010E0E052002010E0E0520011D050E062002010E1D0505200111350E062002010E113505200111310E062002010E11310500020E0E1C042001020E052002010E02060702113511300500011135080700020211351135040A0111300800021135113511350407011148040A011148080703113511351130070002021131113105200201020E0407011150040A0111500407011154040A0111540807031135114011580400001135040A011140040A0111580407011134040A0111340600030E0E1C1C0407011164040A0111640607021131115C060702113111600807031135113011400407011138040A0111380407011144040001020E070003020E0E1165040A011144040701114C040A01114C0407011140040701113C040A01113C087CEC85D7BEA7798E0306113502060E0520010111310520010211350620020211350E07200201113111350C2006011131113511350E0E0E0C2005011131113511350E11310B200601124511350E0E0E0E0320000E03200005042001010504200011350520010111350620011135113105200102113106200201113102072002021131113508200302113111350E0920030211311131113509200302113111351135092003011131113111350820021135113111310A2004011131113511350E072002011131113104280011310328000E0328000504280011350801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F777301080100020000000000420100182E4E4554436F72654170702C56657273696F6E3D76332E310100540E144672616D65776F726B446973706C61794E616D650D2E4E455420436F726520332E311201000D4D696E7461626C65546F6B656E00000A010005446562756700000C010007312E302E302E3000000A010005312E302E30000004010000000000000000000000000000000000100000000000000000000000000000007846000000000000000000009246000000200000000000000000000000000000000000000000000084460000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000C000000A43600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +4D5A90000300000004000000FFFF0000B800000000000000400000000000000000000000000000000000000000000000000000000000000000000000800000000E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000504500004C01020071B59CB20000000000000000E00022200B013000002E000000020000000000002A4C0000002000000060000000000010002000000002000004000000000000000400000000000000008000000002000000000000030040850000100000100000000010000010000000000000100000000000000000000000D84B00004F000000000000000000000000000000000000000000000000000000006000000C000000BC4B00001C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000080000000000000000000000082000004800000000000000000000002E74657874000000302C000000200000002E000000020000000000000000000000000000200000602E72656C6F6300000C0000000060000000020000003000000000000000000000000000004000004200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4C0000000000004800000002000500D42C0000E81E0000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013300300CE000000010000110203280600000A0204281E0000060205281A000006020E0428180000060202280700000A6F0800000A2820000006027E0900000A2822000006020E052824000006020E0628260000060202280700000A6F0800000A2828000006021E281C0000060202280700000A6F0800000A04282A000006021200FE151700000212007E0900000A7D19000004120002280700000A6F0800000A7D1A00000406280100002B021201FE151800000212017E0900000A7D1B000004120102280700000A6F0800000A7D1C00000407280200002B2A7202280B00000A7201000070038C0B000001280C00000A6F0D00000A2A7602280B00000A7201000070038C0B000001280C00000A176F0E00000A2A4602280B00000A721B0000706F0F00000A2A4A02280B00000A721B000070036F1000000A2A4602280B00000A72290000706F0F00000A2A4A02280B00000A7229000070036F1000000A2A4E02280B00000A72330000706F1100000A16912A6E02280B00000A7233000070178D120000012516039C6F1200000A2A4602280B00000A72450000706F1300000A2A4A02280B00000A7245000070036F1400000A2A4602280B00000A725D0000706F1500000A2A4A02280B00000A725D000070036F1600000A2A4602280B00000A72690000706F1500000A2A4A02280B00000A7269000070036F1600000A2A4602280B00000A72830000706F0F00000A2A4A02280B00000A7283000070036F1000000A2A4602280B00000A729B0000706F0F00000A2A4A02280B00000A729B000070036F1000000A2A4602280B00000A72B70000706F1500000A2A4A02280B00000A72B7000070036F1600000A2A7202280B00000A72CB000070038C05000001280C00000A6F1300000A2A7602280B00000A72CB000070038C05000001280C00000A046F1400000A2A7202280B00000A72E3000070038C05000001280C00000A6F0D00000A2A7602280B00000A72E3000070038C05000001280C00000A046F0E00000A2A0013300400A20000000200001102030428440000060516281700000A281800000A2C2E021201FE150C0000021201037D010000041201047D02000004120116281700000A7D0300000407280300002B172A020328290000060A0605281900000A2C02162A02030605281A00000A282A00000602040204282900000605281B00000A282A000006021201FE150C0000021201037D010000041201047D020000041201057D0300000407280300002B172A520202280700000A6F0800000A0304282D0000062A00133003002000000003000011021200FE15120000021200057D1300000406280400002B020304282E0000062A13300500D70000000400001102030428440000060516281700000A281800000A2C2E021202FE150C0000021202037D010000041202047D02000004120216281700000A7D0300000408280300002B172A020302280700000A6F0800000A28390000060A020328290000060B0605281900000A2D090705281900000A2C02162A020302280700000A6F0800000A0605281A00000A283800000602030705281A00000A282A00000602040204282900000605281B00000A282A000006021202FE150C0000021202037D010000041202047D020000041202057D0300000408280300002B172A00133005006101000005000011031C8D1000000125167203010070A22517720B010070A22518721D010070A225197227010070A2251A722D010070A2251B723B010070A2281C00000A0A02062C08068E691CFE012B0116724D010070281D00000A0202281E00000A06179A1201281F00000A6F2000000A02282100000A282200000A7267010070281D00000A729F01007006169A280C00000A282300000A0C020208281500000616FE0172AB010070281D00000A0202281E00000A036F2400000A041203282500000A72ED010070281D00000A02281E00000A06189A1205281F00000A6F2000000A130402091104282200000A7221020070281D00000A02110507FE017289020070281D00000A02281E00000A06199A1207281F00000A6F2000000A130602110707FE017218030070281D00000A02061A9A2832000006130802110411061108282D0000062602082816000006021209FE15120000021209061B9A7D130000041109280400002B2A000000133003005400000006000011031F2E6F2600000A0A06162F03162B0A036F2700000A06DA17DA0B020718FE0216FE0172A3030070281D00000A03036F2700000A1ED607DA1F306F2800000A72DB0300707E2900000A6F2A00000A282B00000A2A8A0202280700000A6F0800000A02281F000006282200000A72DF030070281D00000A2A00133003002600000007000011022833000006020317282C000006021200FE15140000021200037D1500000406280500002B2A0000133003002600000008000011022833000006020316282C000006021200FE15150000021200037D1600000406280600002B2A0000133004008D00000009000011022833000006020203282B0000067227040070281D00000A020328290000060A0203282C00000A282A0000060202281D00000606281A00000A281E000006021201FE1510000002120102281D00000606281B00000A7D0F000004120102281D0000067D1000000407280700002B021202FE15160000021202037D170000041202067D1800000408280800002B2A000000133004006A0000000A0000110202280700000A6F0800000A03283900000604282D00000A2C02162A0202280700000A6F0800000A03052838000006021200FE150D000002120002280700000A6F0800000A7D040000041200037D050000041200057D070000041200047D0600000406280900002B172A8E02280B00000A7245040070038C05000001048C05000001282E00000A056F1400000A2A8A02280B00000A7245040070038C05000001048C05000001282E00000A6F1300000A2A00000013300300370000000B00001102283300000602032822000006021200FE1519000002120002281F0000067D1D00000412000228210000067D1E00000406280A00002B2A0013300300690000000C0000110202280700000A6F0800000A022821000006282200000A7269040070281D00000A02281F0000060A020228210000062820000006027E0900000A2822000006021201FE15170000021201067D19000004120102280700000A6F0800000A7D1A00000407280100002B2A000000133003003E0000000D0000110228330000060228270000060A02032828000006021201FE15180000021201067D1B000004120102280700000A6F0800000A7D1C00000407280200002B2A000013300400980000000E000011020203282B00000616FE0172B9040070281D00000A020328290000060A02030604281B00000A282A000006021201FE150C00000212017E0900000A7D010000041201037D020000041201047D0300000407280300002B0202281D00000604281B00000A281E000006021202FE1510000002120202281D00000604281A00000A7D0F000004120202281D0000067D1000000408280700002B2AAA0202280700000A6F0800000A022827000006282200000A72F1040070281D00000A020304283D0000062A0013300500520000000F000011020304283D000006021200FE150E0000021200037D080000041200047D0A00000412000E047D090000041200057D0B00000406280B00002B02020302281F0000060528300000067239050070281D00000A2A0000133005009500000010000011022833000006020228270000067E0900000A282F00000A7261050070281D00000A020E05283000000A2D1C0E06283000000A2D130E060228230000061B283100000A16FE012B01167295050070281D00000A020304050E04283F00000602030228270000060405281A00000A28300000062C21021200FE151100000212000E057D1100000412000E067D1200000406280C00002B2A000000133005005C00000011000011022833000006020E057E0900000A282F00000A7295050070281D00000A020304050E04283F000006030E05282F00000A2C1102030E050405281A00000A283000000626021200FE151300000212000E057D1400000406280D00002B2A133004005300000012000011027E0900000A03282E0000062C430202281D00000603281A00000A281E000006021200FE1510000002120002281D00000603281B00000A7D0F000004120002281D0000067D1000000406280700002B172A162A00133003003E00000013000011020328420000062C33021200FE150F000002120002280700000A6F0800000A7D0C0000041200037D0E0000041200047D0D00000406280E00002B172A162A8A020203282B0000062D0C0204282B00000616FE012B011672B9040070281D00000A2A00000042534A4201000100000000000C00000076342E302E33303331390000000005006C000000BC0C0000237E0000280D00000C09000023537472696E67730000000034160000C005000023555300F41B0000100000002347554944000000041C0000E402000023426C6F6200000000000000020000015717A201090A000000FA0133001600000100000015000000190000001E000000440000006100000008000000310000001800000013000000050000000E0000001700000001000000040000000E0000000E0000000000FF030100000000000600170282060600560282060600030231060F00A20600000A00470757070A00340057070A00460257070A009F0757070E00140061060A00CB0157070A003C0057070600A70142040A00370257070A005E0157070A00F20157070600A60242040600AD07420406007402420412006400E6040A00100657070600BC0442040000000044000000000001000100A100000023080000000001000100A100000073010000000001000400A100000069000000000001000500A10000004B080000000001000600A100000086010000000001000800A1000000A7030000000001000900A1000000F3050000000001000B00A10000007D010000000001000D00A1000000F904000000000100110001001000670400002100010014000A011000420300003100010045000A011000130300003100040045000A011000E30000003100080045000A011000D600000031000C0045000A0110000303000031000F0045000A0110001F0300003100110045000A011000AD0200003100130045000A0110002D0300003100140045000A011000630300003100150045000A011000750300003100160045000A0110004E0300003100170045000A011000CD0200003100190045000A011000B902000031001B0045000A011000E502000031001D0045000600510427000600DA04270006000E08CD010600D70527000600340527000600F107CD0106000E08CD010600DA0427000600E7001D0106000E08CD0106005601CD010600510427000600E7001D0106000E08CD010600D408CD010600BC08CD010600E1071D010600DA031D010600E7001D010600E10727000600E30527000600E30527000600E305270006005606CD010600AC0527000600CA0527000600720827000600910827000600BA052700060092052700000000000000C6052E08D1010100000000000000C6053B08D1010200000000000000C6054406D1010300000000000000C605CD04D7010400000000000000C6057F00DD010500000000000000C60D560822000700000000000000C6058408D1010700000000000000C605D107E4010800000000000000C605C703EC010A00000000000000C6057E07F9011000000000000000C60DFB0522001500000000000000C6050606D1011500000000000000C60D690522001600000000000000C60D7D0522001600000000000000C6051705D1011600000000000000C605080506001700000000000000C60D690522001700000000000000C605C705D1011700000000000000C60508050600180050200000000086182B06060218002A210000000086005B0512021E004721000000008100580518021F00652100000000860811041E02200077210000000081081C04220220008A2100000000860890011E0221009C21000000008108990122022100AF2100000000E609C30627022200C321000000008108D0062B022200DF2100000000E609A80830022300F121000000008108B80835022300042200000000E60969052200240016220000000081087305D1012400292200000000E6097D05220025003B220000000081088E05D10125004E2200000000860875041E02260060220000000081088504220226007322000000008608FD061E02270085220000000081080F0722022700982200000000E609560822002800AA220000000081086408D1012800BD2200000000E60136013B022900DA220000000081004101E4012A00F822000000008100100142022C0015230000000081001F0148022D003423000000008100E2034F022F00E22300000000E601D20459023200F823000000008600900061023400242400000000E60149044F0237000825000000008600A70063003A007826000000008100FB076A003C00D826000000008100D30506003D00FC2600000000E6012E08D1013D00302700000000E6013B08D1013E00642700000000E6014406D1013F00002800000000E6017F026A0240007628000000008100F303740243009A2800000000E6014C017E024600C02800000000E6011705D1014800042900000000E6010805060049007C2900000000E6018408D1014900C829000000008100C907E4014A006C2A00000000E601D107E4014C00982A000000008100C50087024E00F82A00000000E601C703EC0152009C2B00000000E6017E07F9015800042C00000000E601CD04D7015D00642C00000000E6017F00DD015E00AE2C000000008100440592026000000001004F07000001004F07000001004F0700000100150800000100150800000200F000000001004F0700000100E90700000200150800000100E907000002001508000003005A0100000400F00000000500D60700000600940300000100E907000002001508000003005A0100000400F00000000500D607000001004F07000001009F05000001004F0700000100DF0100000200C80800000300A201000004002704000005009504000006002107000001004D00000001004D00000001007902000001007902000001007902000001007902000001007902000001007902000001007902000001007902000001007902000001004F07000001004F07000002007902000001004F07000001004F0700000200790200000100560400000200F60400000300150800000100F60400000200150800000100F60400000200150800000300F00000000100560400000200F604000003001508000001003E0400000200B101000001001508000001004F07000001004F07000001004F07000001003C0500000200070800000300150800000100DD05000002003C0500000300790200000100DD05000002003C05000001009F05000001009E0800000100E90700000200150800000100E90700000200150800000100E907000002001508000003005A0100000400F00000000100E907000002001508000003005A0100000400F00000000500D60700000600940300000100E907000002001508000003005A0100000400F00000000500D60700000100150800000100150800000200F00000000100560400000200F6040B0025000B0018000B000C000B001C000B0010000B0024000B0014000B00080009002B06010011002B06060019002B060A0039002B06060069002B06060041002B061700410067011D007100290522002900E1042700410085032B004100C1013C0081009807410079002E044700790036044C007900990252007900A30257007900B1065D007900BA066300790026006A00790031007000790039077700790044077D003100BD078B003100E308910031005B0491003100A1049E003100B0049E0099006E07CE0041001C08D60041001C06DC009900F006E100A1002F07E9004100E40622002900E308F0005900BB01F800A10087025D0099000100FE00810091020E018100890313018100B4071701810005091D0181002E0120013100BB0126013100DD0449013100EF0891008100980762012900EF08F0008100FD0899018100DD069E0121002B00DD022E000B00AC022E001300B5022E001B00D40241002B00DD0281002B00DD02A1002B00DD0201012B00DD0221012B00DD0263012300DD0281012B00DD02A1012B00DD0221022B00DD0241022B00DD0281022B00DD02A1022B00DD02C1022B00DD02E1022B00DD0221032B00DD0241032B00DD0261032B00DD0281032B00DD02A1032B00DD02C1032B00DD0210008400A700B100BA0009012C01360140015801690173017A0181018A019401AB01B501BA010500010008000200090003000A0005000B000600000094089A02000009069A020000D7059A02000092059A020000D7059A02000020049F0200009D019F020000D406A3020000BC08A7020000D7059A02000092059A02000089049F02000013079F02000094089A0202000600030002000B00050002000D00070002000E000900020011000B00020017000D00010018000D00020019000F0001001A000F0002001B00110001001C00110002001D00130001001E00130002001F001500010020001500020021001700010022001700020023001900010024001900020025001B00010026001B00020027001D00010028001D000480000000000000000000000000000000009F070000060000000000000000000000C401F900000000000200000000000000000000000000570700000000020000000000000000000000000061060000000002000100000000000000000000005800000000000C000B000D000B000E000B000F000B0010000B0011000B0012000B0013000B0014000B0015000B0016000B0017000B0018000B0019000B001500320015003700150099001500AC001500310115003B0115004E011500530115005D0115006E0115008F011500A6011500B0011500BF0100000000005472794765745369676E657253484132353600495374616E64617264546F6B656E3235360047657455496E743235360053657455496E743235360055496E74313238003C4D6F64756C653E007472616E73666572494400537472617469732E53434C005353415300494275726E61626C65576974684D65746164617461004275726E576974684D65746164617461005472616E73666572546F576974684D657461646174610044656C6567617465645472616E73666572576974684D65746164617461004D696E74576974684D65746164617461004275726E4D65746164617461004D696E744D65746164617461006D657461646174610053797374656D2E507269766174652E436F72654C696200476574426C61636B4C697374656400536574426C61636B4C6973746564005265706C6163650047657442616C616E63650053657442616C616E636500416C6C6F77616E6365004665650066656500494D657373616765006765745F4D65737361676500494275726E61626C6500494F776E61626C6500494D696E7461626C65006765745F4E616D65007365745F4E616D65006E616D650056616C756554797065007369676E6174757265005061727365006765745F53746174650049536D617274436F6E7472616374537461746500736D617274436F6E74726163745374617465004950657273697374656E7453746174650044656275676761626C6541747472696275746500436F6D70696C6174696F6E52656C61786174696F6E7341747472696275746500496E646578417474726962757465004465706C6F794174747269627574650052756E74696D65436F6D7061746962696C69747941747472696275746500427974650076616C756500417070726F76650053657269616C697A6500496E6465784F6600476574537472696E6700536574537472696E67004D657461646174614C6F6700496E746572666C75784368616E6765644C6F67004F776E6572736869705472616E736665727265644C6F67004F776E6572736869705472616E736665725265717565737465644C6F6700537570706C794368616E67654C6F6700417070726F76616C4C6F670043726F7373636861696E4C6F670043697272757344657374696E6174696F6E4C6F67005472616E736665724C6F670044657374726F79426C61636B46756E64734C6F67004164646564426C61636B4C6973744C6F670052656D6F766564426C61636B4C6973744C6F67006765745F4C656E6774680064657374696E6174696F6E4E6574776F726B00494D696E7461626C65576974684D65746164617461466F724E6574776F726B004D696E74576974684D65746164617461466F724E6574776F726B005472616E73666572496E7465726E616C00536574417070726F76616C00536D617274436F6E74726163742E646C6C006765745F53796D626F6C007365745F53796D626F6C0073796D626F6C00476574426F6F6C00536574426F6F6C0075726C0053797374656D005472616E7366657246726F6D0066726F6D006F705F4C6573735468616E004D696E7461626C65546F6B656E006765745F4E6174697665436861696E007365745F4E6174697665436861696E006E6174697665436861696E006F705F5375627472616374696F6E006F705F4164646974696F6E00537472696E67436F6D70617269736F6E004275726E005472616E73666572546F006765745F5A65726F00537472617469732E53434C2E43727970746F004950756C6C4F776E65727368697000436C61696D4F776E657273686970005472616E736665724F776E657273686970006765745F53656E646572005370656E646572007370656E646572004265666F7265546F6B656E5472616E73666572005365744B6E6F776E5472616E73666572006765745F4F776E6572007365745F4F776E6572006765745F50656E64696E674F776E6572007365745F50656E64696E674F776E65720070656E64696E674F776E65720050726576696F75734F776E65720043757272656E744F776E6572005365744E65774F776E6572004F6E6C794F776E6572006F776E657200426C61636B4C69737465645573657200494D696E746572006765745F4D696E746572005365744D696E746572004953657269616C697A6572006765745F53657269616C697A6572002E63746F720053797374656D2E446961676E6F73746963730044657374726F79426C61636B46756E647300446972747946756E647300537472617469732E536D617274436F6E7472616374732E5374616E64617264730053797374656D2E52756E74696D652E436F6D70696C6572536572766963657300446562756767696E674D6F646573004765744279746573005365744279746573006765745F446563696D616C73007365745F446563696D616C7300457175616C73006765745F4164647265737300506172736541646472657373006765745F4E617469766541646472657373007365745F4E617469766541646472657373006E61746976654164647265737300546F4164647265737300476574416464726573730053657441646472657373006164647265737300537472617469732E536D617274436F6E7472616374730047657455524C417267756D656E7473004D696E74576974684D65746164617461466F7243697272757300466F726D617400536D617274436F6E7472616374004F626A656374005061645269676874006F705F496D706C6963697400496E7465726E616C4D696E740064657374696E6174696F6E4163636F756E74006163636F756E74004F6C64416D6F756E74005061727365416D6F756E740063757272656E74416D6F756E7400616D6F756E74004173736572740049426C61636B4C69737400416464426C61636B4C6973740052656D6F7665426C61636B4C6973740049496E746572666C7578006765745F496E746572666C7578007365745F496E746572666C75780050726576696F7573496E746572666C757800536574496E746572666C7578004E6577496E746572666C757800696E746572666C7578006765745F546F74616C537570706C79007365745F546F74616C537570706C7900746F74616C537570706C790050726576696F7573537570706C79006F705F457175616C697479006F705F496E657175616C6974790049734E756C6C4F72456D707479000000195400720061006E0073006600650072003A007B0030007D00000D530079006D0062006F006C0000094E0061006D006500001144006500630069006D0061006C007300001754006F00740061006C0053007500700070006C007900000B4F0077006E00650072000019500065006E00640069006E0067004F0077006E006500720000174E006100740069007600650043006800610069006E00001B4E00610074006900760065004100640064007200650073007300001349006E0074006500720066006C00750078000017420061006C0061006E00630065003A007B0030007D00001F42006C00610063006B004C00690073007400650064003A007B0030007D000007750069006400001163006F006E00740072006100630074000009660072006F006D00000574006F00000D61006D006F0075006E00740000116D006500740061006400610074006100001949006E00760061006C00690064002000750072006C002E00003749006E00760061006C00690064002000270063006F006E00740072006100630074002700200061006400640072006500730073002E00010B300078007B0030007D0000415400680065002000270075006900640027002000680061007300200061006C007200650061006400790020006200650065006E00200075007300650064002E00013343006F0075006C00640020006E006F00740020007200650073006F006C007600650020007300690067006E00650072002E0000675300690067006E006500720020006F006600200027006D0065007400610064006100740061002700200064006F006500730020006E006F00740020006D00610074006300680020002700660072006F006D002700200061006400640072006500730073002E0001808D54006800650020002700660072006F006D002700200061006400640072006500730073002000700072006500660069007800200069007300200064006900660066006500720065006E0074002000660072006F006D002000270063006F006E007400720061006300740027002000610064006400720065007300730020007000720065006600690078002E000180895400680065002000270074006F002700200061006400640072006500730073002000700072006500660069007800200069007300200064006900660066006500720065006E0074002000660072006F006D002000270063006F006E007400720061006300740027002000610064006400720065007300730020007000720065006600690078002E00013754006F006F0020006D0061006E007900200064006500630069006D0061006C007300200069006E00200061006D006F0075006E00740000032E0000474F006E006C007900200074006800650020006F0077006E00650072002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F006400001D41007300730065007200740020006600610069006C00650064002E00002341006C006C006F00770061006E00630065003A007B0030007D003A007B0031007D00004F4F006E006C007900200074006800650020006E006500770020006F0077006E00650072002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F0064000037540068006900730020006100640064007200650073007300200069007300200062006C00610063006B006C006900730074006500640000474F006E006C007900200049006E0074006500720066006C00750078002000630061006E002000630061006C006C002000740068006900730020006D006500740068006F006400002746006500650020007400720061006E00730066006500720020006600610069006C0065006400003349006E0074006500720066006C00750078002000610064006400720065007300730020006E006F0074002000730065007400002749006E00760061006C00690064002000640065007300740069006E006100740069006F006E00000000000C4DC34CDAAF6E41A8A44A2A0822AA7D00042001010803200001052001011111060702115C1160052001011229042000123904200011150306111506300101011E00040A01115C040A011160042000123D0500020E0E1C042001020E052002010E020420010E0E052002010E0E0520011D050E062002010E1D0505200111190E062002010E111905200111150E062002010E1115060702111911300500011119080700020211191119040A0111300800021119111911190407011148040A01114808070311191119113013070A1D0E05112D1115111505111505111911480700021D0E0E1D0E05200201020E04200012510700021D050E100506200111151D050700020211151115050001112D0E0A0003021D051D0510111504070208080420010803032000080520020E080302060E0520020E0E0E05000111190E0407011150040A0111500407011154040A0111540807031119114011580400001119040A011140040A0111580407011134040A0111340600030E0E1C1C0407011164040A0111640607021115115C060702111511600807031119113011400407011138040A0111380407011144040001020E070003020E0E1155040A011144040701114C040A01114C0407011140040701113C040A01113C087CEC85D7BEA7798E030611190520010111150520010211190620020211190E07200201111511190C2006011115111911190E0E0E0C2005011115111911190E11150B200601122911190E0E0E0E05200102112D05200101112D0320000E042001010E0320000504200101050420001119052001011119062001111911150520010211150620020111150209200302111511151119072002021115111908200302111511190E09200302111511191119092003011115111511190820021119111511150A2004011115111911190E072002011115111504280011150328000E0328000504280011190801000800000000001E01000100540216577261704E6F6E457863657074696F6E5468726F7773010801000200000000000401000000000000000000000000000000000010000000000000000000000000000000004C000000000000000000001A4C00000020000000000000000000000000000000000000000000000C4C0000000000000000000000005F436F72446C6C4D61696E006D73636F7265652E646C6C0000000000FF25002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000C0000002C3C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ```