tx · Yn7jTiNBWNi5G94z6SCngKNKXUP3d8VDT8A3VAf1UXs

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.06700000 Waves

2023.06.20 21:04 [2631298] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "Yn7jTiNBWNi5G94z6SCngKNKXUP3d8VDT8A3VAf1UXs", "fee": 6700000, "feeAssetId": null, "timestamp": 1687284353244, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "2biwtMw6P5csAgtS8i4bvRDkRDgUPCS94CFL4TJC9GQA1ooFyfNLXb1XnvBAepXaCxS4GXfVYLFD81LBKN9AeiH8" ], "script": "base64:BgKYAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAwAEABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUNwCAreIEAAVNVUxUOACAwtcvAAZNVUxUMTAAgMivoCUACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAJREFZTUlMTElTAIC4mSkADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAMACUVTQlVZQ09FRgAEAApFU1NFTExDT0VGAAoABU1BWEhQAGQACHJlc1R5cGVzCQDMCAICA09pbAkAzAgCAgNPcmUJAMwIAgIEV29vZAkAzAgCAgRTYW5kCQDMCAICBENsYXkJAMwIAgIHT3JnYW5pYwUDbmlsAAhtYXRUeXBlcwkAzAgCAgRGdWVsCQDMCAICBU1ldGFsCQDMCAICBVBsYW5rCQDMCAICBUdsYXNzCQDMCAICB1BsYXN0aWMJAMwIAgIHUHJvdGVpbgUDbmlsAAlwcm9kVHlwZXMJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMQkAzAgCAhBGaXJzdCBBaWQgS2l0IEwyCQDMCAICEEZpcnN0IEFpZCBLaXQgTDMJAMwIAgILQmFja3BhY2sgTDEJAMwIAgILQmFja3BhY2sgTDIJAMwIAgILQmFja3BhY2sgTDMJAMwIAgIORm9vZCBSYXRpb24gTDEJAMwIAgIORm9vZCBSYXRpb24gTDIJAMwIAgIORm9vZCBSYXRpb24gTDMJAMwIAgILSmV0IFBhY2sgTDEJAMwIAgILSmV0IFBhY2sgTDIJAMwIAgILSmV0IFBhY2sgTDMJAMwIAgIJU2hpZWxkIEwxCQDMCAICCVNoaWVsZCBMMgkAzAgCAglTaGllbGQgTDMFA25pbAAKY29udGluZW50cwkAzAgCAghBbWVyaWNhcwkAzAgCAgZFdXJvcGUJAMwIAgIEQXNpYQkAzAgCAgZBZnJpY2EJAMwIAgIHT2NlYW5pYQUDbmlsABBwcm9kdWN0aW9uTWF0cml4CQDMCAICEjFfMV8xXzJfMl81XzFfMTBfMAkAzAgCAhMyXzJfMl80XzRfMTBfMV8xMF8wCQDMCAICEzNfM18zXzZfNl8xNV8xXzEwXzAJAMwIAgITMl81XzVfMl83XzVfMl8xMDBfMQkAzAgCAhc0XzEwXzEwXzRfMTRfMTBfMl8xMDBfMQkAzAgCAhc2XzE1XzE1XzZfMjFfMTVfMl8xMDBfMQkAzAgCAhIxXzFfMV8xXzFfOF8xXzEwXzIJAMwIAgITMl8yXzJfMl8yXzE2XzFfMTBfMgkAzAgCAhMzXzNfM18zXzNfMjRfMV8xMF8yCQDMCAICEzlfOV8xXzVfNV8xXzVfMTAwXzMJAMwIAgIXMThfMThfMl8xMF8xMF8yXzVfMTAwXzMJAMwIAgIXMjdfMjdfM18xNV8xNV8zXzVfMTAwXzMJAMwIAgISMl8yXzFfMl8yXzJfMV8xMF80CQDMCAICEjRfNF8yXzRfNF80XzFfMTBfNAkAzAgCAhI2XzZfM182XzZfNl8xXzEwXzQFA25pbAAPY29udElkeEFtZXJpY2FzAAAADWNvbnRJZHhFdXJvcGUAAQALY29udElkeEFzaWEAAgANY29udElkeEFmcmljYQADAA5jb250SWR4T2NlYW5pYQAEAA1yZWNpcGVJZHhGdWVsAAAADnJlY2lwZUlkeE1ldGFsAAEADnJlY2lwZUlkeFBsYW5rAAIADnJlY2lwZUlkeEdsYXNzAAMAEHJlY2lwZUlkeFBsYXN0aWMABAAQcmVjaXBlSWR4UHJvdGVpbgAFAA9yZWNpcGVJZHhXZWlnaHQABgARcmVjaXBlSWR4UGFja3NpemUABwAScmVjaXBlSWR4Q29udGluZW50AAgACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwEKZ2V0UGtnU2l6ZQEHcHJvZElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQdwcm9kSWR4AgFfBRFyZWNpcGVJZHhQYWNrc2l6ZQEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABDGdldEludE9yRWxzZQIDa2V5CmRlZmF1bHRWYWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5BQpkZWZhdWx0VmFsABFJZHhDZmdTdGFraW5nRGFwcAABABFJZHhDZmdFY29ub215RGFwcAACABRJZHhDZmdHb3Zlcm5hbmNlRGFwcAADAA1JZHhDZmdXbGdEYXBwAAQBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHABEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYbGFuZEN1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAENa2V5RHVja0hlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgILZHVja0hlYWx0aF8FC2R1Y2tBc3NldElkARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEOa2V5T3JkZXJCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICCmxhbmRPcmRlcl8FC2xhbmRBc3NldElkAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEJYXNCb29sZWFuAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXMFByRtYXRjaDAFAXMJAAIBAhlmYWlsIHRvIGNhc3QgaW50byBCb29sZWFuAQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAAtJZHhFZmZUb3RhbAAAAApJZHhFZmZVc2VyAAEBDmdldFZvdGluZ1Bvd2VyARJ1c2VyQWRkclN0ck9yRW1wdHkEBXByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwoBBWFkZGVyAgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAp0b3RhbFBvd2VyCgACJGwFBXByb3BzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQKdXNlcnNQb3dlcgMJAAACBRJ1c2VyQWRkclN0ck9yRW1wdHkCAAAABAhsYW5kc1N0cgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBRJ1c2VyQWRkclN0ck9yRW1wdHkEBWxh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TkRTAPQDARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgxsYW5kVG9Bc3NldF8FB2xhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWxhbmRCeUN1c3RvbU5hbWVfBQRuYW1lAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAhxpbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXJfBQdhc3NldElkAgFfBQlvd25lckFkZHIBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBHR5cGUHYXNzZXRJZAlvd25lckFkZHIJALkJAgkAzAgCAiJsYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAkAzAgCBQlvd25lckFkZHIFA25pbAIBXwERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIKbGFuZE93bmVyXwUHbGFuZE51bQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRZHVja0J5Q3VzdG9tTmFtZV8FBG5hbWUBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBG5hbWUJAKwCAgIUYWNjb3VudEJ5Q3VzdG9tTmFtZV8FBG5hbWUBCWtleU9sZGllcwACCm9sZGllc0xpc3QAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAlmbE1pc3Npb24AAQALZmxPYnN0YWNsZXMAAgAHZmxXaW5kcwADAAZmbFBhdGgABAALZmxUaW1lc3RhbXAABQAHZmxCb251cwAGAAtmbFByb2RzVXNlZAAHAQduZnROYW1lAgdsYW5kTnVtCGxhbmRTaXplCQCsAgIJAKwCAgUKTEFORFBSRUZJWAUHbGFuZE51bQUIbGFuZFNpemUBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxz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cAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEJY3VycmVudFdoBAVnb29kcwkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQoBB3N1bVByb2QCA2FjYwRpdGVtBANpZHgIBQNhY2MCXzEEB3BrZ1NpemUJAQpnZXRQa2dTaXplAQUDaWR4BARwa2dzCQBpAgkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FB3BrZ1NpemUAAQUHcGtnU2l6ZQkAlAoCCQBkAgUDaWR4AAEJAGQCCAUDYWNjAl8yCQBoAgUEcGtncwUFTVVMVDgECHdoUmVzVm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECHdoTWF0Vm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0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aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEJY3VycmVudFdoBAtvY2N1cGllZFZvbAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAkAZQIJAGUCCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMFC29jY3VwaWVkVm9sBQ9jdXJyV2hMb2NrZWRWb2wBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4AQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQD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RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEMZmxpZ2h0Q29tbW9uAwh1c2VyQWRkcgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgE7BAlmbGlnaHRMb2cJALUJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFCWZsaWdodExvZwUIZmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAtuZXdMb2NUeFZlcgkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFC25ld0xvY1R4VmVyAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmbGlnaHRMb2cFC2ZsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAMJAQIhPQIFDG9sZEZyb21TdGF0ZQUFY3VySFAJAAIBCQCsAgIJAKwCAgkArAICAgpvbGRIZWFsdGg9CQCkAwEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEQZXhwZWRpdGlvbkNvbW1vbgQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBCAUBZgJfMgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFmAl8yBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwYFBW1MaXN0BQxFWFBNQVRFUklBTFMCAV8EB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQMJAGcCAAAIBQFmAl8xCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAAACQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFA25pbAIAAAAEAWUJARJleHBlZGl0aW9uSW50ZXJuYWwCBQZjYWxsZXIFBHR4SWQEAmlkCAgFAWUCXzICXzEJAJUKAwkAzQgCCQDNCAIJAM0IAggFAWUCXzEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BCAUBZgJfMgkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIFB25ld1Byb2QFA25pbAIBOgUCaWQIBQFmAl8zAQxhcHBseUJvbnVzZXMCC2xhbmRBc3NldElkBnBpZWNlcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABARhZGQ2CQBpAgUKaW5mcmFMZXZlbAAGBARhZGQ3CQBpAgUKaW5mcmFMZXZlbAAHCQBkAgkAZAIFD0RBSUxZUkVTQllQSUVDRQkAawMFD0RBSUxZUkVTQllQSUVDRQkAZAIJAGQCBQppbmZyYUxldmVsBQRhZGQ2CQBoAgACBQRhZGQ3AAUJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCWFydFBpZWNlcwkAaAIFBnBpZWNlcwAFARRjaGVja0NsYWltQ29uZGl0aW9ucwMEYWRkcgljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgQNJHQwMjQ0MjIyNDk2MQMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCUCgIFDWxhbmRBc3NldElkSW4JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwJAJQKAgkAkQMCBQNsb2MFCGxvY0lkeElkBQtkdWNrQXNzZXRJZAQLbGFuZEFzc2V0SWQIBQ0kdDAyNDQyMjI0OTYxAl8xBAZkdWNrSWQIBQ0kdDAyNDQyMjI0OTYxAl8yBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIFTGFuZCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfCQCWCgQFBmR1Y2tJZAULbGFuZEFzc2V0SWQFAWQFCXNhdmVkVGltZQEQY2xhaW1SZXNJbnRlcm5hbAQEYWRkcgZhbW91bnQJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4DCQBmAgAABQZhbW91bnQJAAIBAg9OZWdhdGl2ZSBhbW91bnQEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFCWNsYWltTW9kZQUNbGFuZEFzc2V0SWRJbgQIbGFuZFNpemUJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAgFAWMCXzQDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBCAUBYwJfNAIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDI3MzM1MjgyMDYDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDI3MzM1MjgyMDYCXzEEBWJwUmVzCAUNJHQwMjczMzUyODIwNgJfMgQFbG9mdE8IBQ0kdDAyNzMzNTI4MjA2Al8zBAVsb2Z0RggFDSR0MDI3MzM1MjgyMDYCXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkAQ11cEluZnJhQ29tbW9uBAxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQLbGFuZEFzc2V0SWQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQtsYW5kQXNzZXRJZAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUECGluZnJhS2V5CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yBAhjdXJMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhpbmZyYUtleQAAAwkAZwIFCGN1ckxldmVsAAMJAAIBAiZDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gMwQIbmV3TGV2ZWwJAGQCBQhjdXJMZXZlbAABBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIAAAESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFBGFkZHIFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgENbWVyZ2VJbnRlcm5hbAcLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwR0eElkB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAkAtQkCCAUDYWNjAl82AgFfBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmgoIBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFB3Byb3BTdHIFB2xhbmRzSW4AAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkBQRhZGRyCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAgFAXICXzYJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZB4BaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzAAAFBnBpZWNlcwkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUHYWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUJYXJ0UGllY2VzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQELdW5zdGFrZUxhbmQBDWxhbmRBc3NldElkSW4EDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAP///////////wEEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQBdAgJAQV2YWx1ZQEJAO0HAQUGaGVpZ2h0CXRpbWVzdGFtcAQLcmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgULcmVsZWFzZVRpbWUFAXQJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQtyZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIAZAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkAZgIAZAUGaGVhbHRoCQACAQImUGxlYXNlIGhlYWwgeW91ciBkdWNrIGJlZm9yZSB1bnN0YWtpbmcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHdGltZUtleQkAzAgCCQELRGVsZXRlRW50cnkBBQlrZXlIZWFsdGgJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBCGNsYWltUmVzAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFDWNsYWltTW9kZUR1Y2sFDmxhbmRBc3NldElkU3RyCQCUCgIJAM0IAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQgFAWYCXzIEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OAwkAAAIIBQFmAl80BQtjdXJMb2NhdGlvbgkAAgECIllvdSBjYW4ndCBmbHkgdG8gdGhlIHNhbWUgbG9jYXRpb24EBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBZgJfMgQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAduZXdQcm9kCQEQc3VidHJhY3RQcm9kdWN0cwIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAgFAWYCXzUJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkDCQBmAggFAWYCXzEAAAgFAWYCXzQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQgFAWYCXzIIBQFmAl8xCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBnAgUJb2xkSGVhbHRoBQVNQVhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFTUFYSFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtl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IHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC1CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkAkQMCBQhtZWRLaXRIcAAABAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECHBhY2tTaXplCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBRFyZWNpcGVJZHhQYWNrc2l6ZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQhwYWNrU2l6ZQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUHbmV3UGFjawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBAgFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBQdtZXNzYWdlBQNzaWcJAJQKAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24JAJQKAggFBnJlc3VsdAJfMggFBnJlc3VsdAJfMwFpAQx1cGdyYWRlSW5mcmEBC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBggFAWkGY2FsbGVyAAAFC2xhbmRBc3NldElkCQCUCgIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBEHVwZ3JhZGVJbmZyYVVzZHQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQHCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgkApQgBCAUBaQZjYWxsZXIFC2xhbmRBc3NldElkCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzQgCBQZyZXN1bHQFDHByb2xvZ0FjdGlvbgFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24FBgkApQgBCAUBaQZjYWxsZXIAAAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBDm1lcmdlTGFuZHNVc2R0AQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQELbWVyZ2VDb21tb24FBwkApQgBCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQhuZXdXaFN0cgFpARJmaXhXYXJlaG91c2VGb3JtYXQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQCd2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVsb2Z0TAkBBWFzSW50AQkA/AcEBQ9lY29ub215Q29udHJhY3QCGnJlY2FsY0xvY2tlZFZvbHVtZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkCQDMCAIFAndoBQNuaWwFA25pbAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCkAwEFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpAQ9maXhTdGFrZWRQaWVjZXMBB2FkZHJlc3MDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEDHN0YWtlZFBpZWNlcwMJAAACBQdhZGRyZXNzAgAAAAQIbGFuZHNTdHIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQIbGFuZFNpemUJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplCQBkAgUDYWNjCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUKAAIkbAUFbGFuZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB29uZUxhbmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwUMc3Rha2VkUGllY2VzBQNuaWwFDHN0YWtlZFBpZWNlcwFpAQ1zZXRDdXN0b21OYW1lAwdhc3NldElkCmN1c3RvbU5hbWUEdHlwZQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ1hZGRyVG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQRhZGRyAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkAwkAAAICBERVQ0sFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQYJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKRFVDS1BSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEcc3BsaXRCeUdsb2JhbFdlaWdodHNSRUFET05MWQEGYW1vdW50CQCUCgIFA25pbAkBEmdldE5lZWRlZE1hdGVyaWFscwEFBmFtb3VudAFpASRzcGxpdEJ5R2xvYmFsQW5kTG9jYWxXZWlnaHRzUkVBRE9OTFkDCW1hdEFtb3VudAlyZXNBbW91bnQIdGVycmFpbnMEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQUIdGVycmFpbnMJAJQKAgUDbmlsCQCUCgIJARJnZXROZWVkZWRNYXRlcmlhbHMBBQltYXRBbW91bnQJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUJcmVzQW1vdW50BQ10ZXJyYWluQ291bnRzAWkBE2dldEJhY2twYWNrUkVBRE9OTFkBC2R1Y2tBc3NldElkCQCUCgIFA25pbAkAuQkCCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAIBOgFpARRnZXRXYXJlaG91c2VSRUFET05MWQELbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAACQCUCgIFA25pbAkAugkCCQEMZ2V0V2FyZWhvdXNlAwkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwCAToBaQEKc2F2ZUxhc3RUeAADCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQDMCAIJAQZwcm9sb2cBBQFpBQNuaWwAKgDSxETy", "height": 2631298, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DqNMsQaMHFX6VTsFzhcgJCp7Vf9ggPeRWDEAkvV2ZQ6c Next: D29kBp3N4g14JqRFvanaL1j4Q5p1Dcy3VdjVk1cMkr6W Diff:
OldNewDifferences
506506
507507 let cP = 6
508508
509-func cQ (cx,bB) = ((k + cx) + bB)
510-
511-
512-func cR (cS,cT) = {
513- let cU = (((((cT[0] + cT[1]) + cT[2]) + cT[3]) + cT[4]) + cT[5])
514- if ((0 >= cU))
509+let cQ = 7
510+
511+func cR (cx,bB) = ((k + cx) + bB)
512+
513+
514+func cS (cT,cU) = {
515+ let cV = (((((cU[0] + cU[1]) + cU[2]) + cU[3]) + cU[4]) + cU[5])
516+ if ((0 >= cV))
515517 then throw("Zero weights sum")
516518 else {
517- let cV = fraction(cS, g, cU)
518- func cW (bI,cX) = (bI :+ fraction(cX, cV, g))
519-
520- let bL = cT
519+ let cW = fraction(cT, g, cV)
520+ func cX (bI,cY) = (bI :+ fraction(cY, cW, g))
521+
522+ let bL = cU
521523 let bM = size(bL)
522524 let bN = nil
523525 func bO (bP,bQ) = if ((bQ >= bM))
524526 then bP
525- else cW(bP, bL[bQ])
527+ else cX(bP, bL[bQ])
526528
527529 func bR (bP,bQ) = if ((bQ >= bM))
528530 then bP
533535 }
534536
535537
536-func cY (cS) = {
538+func cZ (cT) = {
537539 let bG = split(value(getString(bj())), "_")
538540 if ((size(bG) != n))
539541 then throw("Wrong proportions data")
540542 else {
541- let cZ = [parseIntValue(bG[0]), parseIntValue(bG[1]), parseIntValue(bG[2]), parseIntValue(bG[3]), parseIntValue(bG[4]), parseIntValue(bG[5])]
542- cR(cS, cZ)
543- }
544- }
545-
546-
547-func da (db,dc,dd) = {
548- let de = cY(dd)
549- func df (bI,aD) = {
550- let dg = (parseIntValue(dc[aD]) - de[aD])
551- if ((0 > dg))
552- then throw(((((("Not enough material idx=" + toString(aD)) + ", you have ") + dc[aD]) + ", but need ") + toString(de[aD])))
553- else (bI :+ toString(dg))
543+ let da = [parseIntValue(bG[0]), parseIntValue(bG[1]), parseIntValue(bG[2]), parseIntValue(bG[3]), parseIntValue(bG[4]), parseIntValue(bG[5])]
544+ cS(cT, da)
545+ }
546+ }
547+
548+
549+func db (dc,dd,de) = {
550+ let df = cZ(de)
551+ func dg (bI,aD) = {
552+ let dh = (parseIntValue(dd[aD]) - df[aD])
553+ if ((0 > dh))
554+ then throw(((((("Not enough material idx=" + toString(aD)) + ", you have ") + dd[aD]) + ", but need ") + toString(df[aD])))
555+ else (bI :+ toString(dh))
554556 }
555557
556- if (db)
558+ if (dc)
557559 then {
558560 let bL = [0, 1, 2, 3, 4, 5]
559561 let bM = size(bL)
560562 let bN = nil
561563 func bO (bP,bQ) = if ((bQ >= bM))
562564 then bP
563- else df(bP, bL[bQ])
565+ else dg(bP, bL[bQ])
564566
565567 func bR (bP,bQ) = if ((bQ >= bM))
566568 then bP
568570
569571 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
570572 }
571- else dc
572- }
573-
574-
575-func dh (di,dj,dk,dl) = if ((size(di) != n))
573+ else dd
574+ }
575+
576+
577+func di (dj,dk) = if ((dk == ""))
578+ then dj
579+ else {
580+ let dl = if ((dj == ""))
581+ then nil
582+ else split(dj, "_")
583+ func dm (bI,bJ) = {
584+ let cd = bI._1
585+ func dn (cc,do) = {
586+ let dp = split(do, ",")
587+ if ((size(dp) != 2))
588+ then throw("Incorrect format, should be index,amount")
589+ else {
590+ let aD = parseIntValue(dp[0])
591+ if (if ((0 > aD))
592+ then true
593+ else (aD >= size(G)))
594+ then throw("Unknown product idx")
595+ else if ((aD != cd))
596+ then cc
597+ else {
598+ let dq = parseIntValue(dp[1])
599+ if ((0 >= dq))
600+ then throw("Pass only positive amounts")
601+ else (cc + dq)
602+ }
603+ }
604+ }
605+
606+ let dr = {
607+ let bL = split(dk, "_")
608+ let bM = size(bL)
609+ let bN = 0
610+ func bO (bP,bQ) = if ((bQ >= bM))
611+ then bP
612+ else dn(bP, bL[bQ])
613+
614+ func bR (bP,bQ) = if ((bQ >= bM))
615+ then bP
616+ else throw("List size exceeds 10")
617+
618+ bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
619+ }
620+ let ds = if ((size(dl) > cd))
621+ then parseIntValue(dl[cd])
622+ else 0
623+ let dt = if ((dr > ds))
624+ then throw(((((("You have " + toString(ds)) + " of ") + E[cd]) + ", but tried to use ") + toString(dr)))
625+ else (ds - dr)
626+ $Tuple2((cd + 1), (bI._2 :+ toString(dt)))
627+ }
628+
629+ let du = {
630+ let bL = G
631+ let bM = size(bL)
632+ let bN = $Tuple2(0, nil)
633+ func bO (bP,bQ) = if ((bQ >= bM))
634+ then bP
635+ else dm(bP, bL[bQ])
636+
637+ func bR (bP,bQ) = if ((bQ >= bM))
638+ then bP
639+ else throw("List size exceeds 50")
640+
641+ bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
642+ }
643+ makeString(du._2, "_")
644+ }
645+
646+
647+func dv (dw,dx,dy,dz) = if ((size(dw) != n))
576648 then throw("Wrong proportions data")
577649 else {
578- func dm (bI,dn) = {
579- let dg = (parseIntValue(di[dn]) + ((dl * dj[dn]) * dk))
580- if ((0 > dg))
581- then throw(((((((("Panic! Pieces of type=" + toString(dn)) + ", sign=") + toString(dl)) + ", terrainCounts[i]=") + toString(dj[dn])) + ", landSizeIndex=") + toString(dk)))
582- else (bI :+ toString(dg))
583- }
584-
585- let cZ = {
650+ func dA (bI,dB) = {
651+ let dh = (parseIntValue(dw[dB]) + ((dz * dx[dB]) * dy))
652+ if ((0 > dh))
653+ then throw(((((((("Panic! Pieces of type=" + toString(dB)) + ", sign=") + toString(dz)) + ", terrainCounts[i]=") + toString(dx[dB])) + ", landSizeIndex=") + toString(dy)))
654+ else (bI :+ toString(dh))
655+ }
656+
657+ let da = {
586658 let bL = [0, 1, 2, 3, 4, 5]
587659 let bM = size(bL)
588660 let bN = nil
589661 func bO (bP,bQ) = if ((bQ >= bM))
590662 then bP
591- else dm(bP, bL[bQ])
663+ else dA(bP, bL[bQ])
592664
593665 func bR (bP,bQ) = if ((bQ >= bM))
594666 then bP
596668
597669 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
598670 }
599- makeString(cZ, "_")
671+ makeString(da, "_")
600672 }
601673
602674
603-func do (dj,dk,dl) = {
604- let di = split(valueOrElse(getString(bj()), "0_0_0_0_0_0"), "_")
605- dh(di, dj, dk, dl)
606- }
607-
608-
609-func dp (dq) = [(size(split(dq, "A")) - 1), (size(split(dq, "B")) - 1), (size(split(dq, "C")) - 1), (size(split(dq, "D")) - 1), (size(split(dq, "E")) - 1), (size(split(dq, "F")) - 1)]
610-
611-
612-func dr (ds,dj,dt,dk,du) = {
613- func bH (bI,dn) = {
614- let dv = ((fraction(dt, du, u) * dj[dn]) * dk)
615- (bI :+ toString((parseIntValue(ds[dn]) + dv)))
675+func dC (dx,dy,dz) = {
676+ let dw = split(valueOrElse(getString(bj()), "0_0_0_0_0_0"), "_")
677+ dv(dw, dx, dy, dz)
678+ }
679+
680+
681+func dD (dE) = [(size(split(dE, "A")) - 1), (size(split(dE, "B")) - 1), (size(split(dE, "C")) - 1), (size(split(dE, "D")) - 1), (size(split(dE, "E")) - 1), (size(split(dE, "F")) - 1)]
682+
683+
684+func dF (dG,dx,dH,dy,dI) = {
685+ func bH (bI,dB) = {
686+ let dJ = ((fraction(dH, dI, u) * dx[dB]) * dy)
687+ (bI :+ toString((parseIntValue(dG[dB]) + dJ)))
616688 }
617689
618- let cZ = {
690+ let da = {
619691 let bL = [0, 1, 2, 3, 4, 5]
620692 let bM = size(bL)
621693 let bN = nil
629701
630702 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
631703 }
632- makeString(cZ, "_")
633- }
634-
635-
636-func dw (dj,dt,dk,du) = {
637- func bH (bI,dn) = {
638- let dv = ((fraction(dt, du, u) * dj[dn]) * dk)
639- $Tuple2((bI._1 :+ dv), (bI._2 + dv))
704+ makeString(da, "_")
705+ }
706+
707+
708+func dK (dx,dH,dy,dI) = {
709+ func bH (bI,dB) = {
710+ let dJ = ((fraction(dH, dI, u) * dx[dB]) * dy)
711+ $Tuple2((bI._1 :+ dJ), (bI._2 + dJ))
640712 }
641713
642714 let bL = [0, 1, 2, 3, 4, 5]
654726 }
655727
656728
657-func dx (dy,dz,dA,dB) = {
658- let dC = dA._1
659- let dD = dA._2
660- if ((dD == 0))
661- then $Tuple2(makeString(dy, "_"), makeString(dz, "_"))
662- else if ((dB >= dD))
729+func dL (dM,dN,dO,dP) = {
730+ let dQ = dO._1
731+ let dR = dO._2
732+ if ((dR == 0))
733+ then $Tuple2(makeString(dM, "_"), makeString(dN, "_"))
734+ else if ((dP >= dR))
663735 then {
664- func dE (bI,dn) = (bI :+ toString((parseIntValue(dy[dn]) + dC[dn])))
665-
666- let cZ = {
736+ func dS (bI,dB) = (bI :+ toString((parseIntValue(dM[dB]) + dQ[dB])))
737+
738+ let da = {
667739 let bL = [0, 1, 2, 3, 4, 5]
668740 let bM = size(bL)
669741 let bN = nil
670742 func bO (bP,bQ) = if ((bQ >= bM))
671743 then bP
672- else dE(bP, bL[bQ])
744+ else dS(bP, bL[bQ])
673745
674746 func bR (bP,bQ) = if ((bQ >= bM))
675747 then bP
677749
678750 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
679751 }
680- $Tuple2(makeString(cZ, "_"), makeString(dz, "_"))
752+ $Tuple2(makeString(da, "_"), makeString(dN, "_"))
681753 }
682754 else {
683- func dF (bI,dn) = {
684- let dG = fraction(dC[dn], dB, dD)
685- $Tuple2((bI._1 :+ toString((parseIntValue(dy[dn]) + dG))), (bI._2 :+ toString(((parseIntValue(dz[dn]) + dC[dn]) - dG))))
755+ func dT (bI,dB) = {
756+ let dU = fraction(dQ[dB], dP, dR)
757+ $Tuple2((bI._1 :+ toString((parseIntValue(dM[dB]) + dU))), (bI._2 :+ toString(((parseIntValue(dN[dB]) + dQ[dB]) - dU))))
686758 }
687759
688- let cZ = {
760+ let da = {
689761 let bL = [0, 1, 2, 3, 4, 5]
690762 let bM = size(bL)
691763 let bN = $Tuple2(nil, nil)
692764 func bO (bP,bQ) = if ((bQ >= bM))
693765 then bP
694- else dF(bP, bL[bQ])
766+ else dT(bP, bL[bQ])
695767
696768 func bR (bP,bQ) = if ((bQ >= bM))
697769 then bP
699771
700772 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
701773 }
702- $Tuple2(makeString(cZ._1, "_"), makeString(cZ._2, "_"))
774+ $Tuple2(makeString(da._1, "_"), makeString(da._2, "_"))
703775 }
704776 }
705777
706778
707-func dH (dI) = if ((dI >= toBigInt(0)))
708- then dI
709- else -(dI)
710-
711-
712-let dJ = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
713-
714-func dK (bw,dL) = {
715- let dM = toInt((bw % cp))
716- let dN = if ((dL[0] > dM))
779+func dV (dW) = if ((dW >= toBigInt(0)))
780+ then dW
781+ else -(dW)
782+
783+
784+let dX = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
785+
786+func dY (bw,dZ) = {
787+ let ea = toInt((bw % cp))
788+ let eb = if ((dZ[0] > ea))
717789 then "A"
718- else if ((dL[1] > dM))
790+ else if ((dZ[1] > ea))
719791 then "B"
720- else if ((dL[2] > dM))
792+ else if ((dZ[2] > ea))
721793 then "C"
722- else if ((dL[3] > dM))
794+ else if ((dZ[3] > ea))
723795 then "D"
724- else if ((dL[4] > dM))
796+ else if ((dZ[4] > ea))
725797 then "E"
726798 else "F"
727- dN
728- }
729-
730-
731-func dO (dP,dQ) = {
732- let dR = dJ[dQ]
733- func dS (bI,cX) = $Tuple2((((((bI._1 + dK(bI._2, dR)) + dK((bI._2 / cp), dR)) + dK((bI._2 / cq), dR)) + dK((bI._2 / cr), dR)) + dK((bI._2 / cs), dR)), (bI._2 / ct))
734-
735- let dT = {
799+ eb
800+ }
801+
802+
803+func ec (ed,ee) = {
804+ let ef = dX[ee]
805+ func eg (bI,cY) = $Tuple2((((((bI._1 + dY(bI._2, ef)) + dY((bI._2 / cp), ef)) + dY((bI._2 / cq), ef)) + dY((bI._2 / cr), ef)) + dY((bI._2 / cs), ef)), (bI._2 / ct))
806+
807+ let eh = {
736808 let bL = [1, 2, 3, 4, 5]
737809 let bM = size(bL)
738- let bN = $Tuple2("", (dP / co))
810+ let bN = $Tuple2("", (ed / co))
739811 func bO (bP,bQ) = if ((bQ >= bM))
740812 then bP
741- else dS(bP, bL[bQ])
813+ else eg(bP, bL[bQ])
742814
743815 func bR (bP,bQ) = if ((bQ >= bM))
744816 then bP
746818
747819 bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
748820 }
749- dT._1
750- }
751-
752-
753-func dU (dV) = {
754- let dW = split(valueOrElse(getString(dV), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
755-[toString(valueOrElse(parseInt(dW[ai]), 0)), if ((size(split(dW[aj], "_")) == n))
756- then dW[aj]
757- else "0_0_0_0_0_0", if ((size(split(dW[ak], "_")) == n))
758- then dW[ak]
759- else "0_0_0_0_0_0", dW[al]]
760- }
761-
762-
763-func dX (dY) = {
764- let dZ = split(dY, "_")
765- ((v * (parseIntValue(dZ[1]) + 1)) * parseIntValue(dZ[0]))
766- }
767-
768-
769-func ea (eb) = {
770- let ec = eb[ac]
771- func ed (bI,bJ) = (bI + parseIntValue(bJ))
772-
773- func ee (bI,bJ) = {
821+ eh._1
822+ }
823+
824+
825+func ei (ej) = {
826+ let ek = split(valueOrElse(getString(ej), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
827+[toString(valueOrElse(parseInt(ek[ai]), 0)), if ((size(split(ek[aj], "_")) == n))
828+ then ek[aj]
829+ else "0_0_0_0_0_0", if ((size(split(ek[ak], "_")) == n))
830+ then ek[ak]
831+ else "0_0_0_0_0_0", ek[al]]
832+ }
833+
834+
835+func el (em) = {
836+ let dp = split(em, "_")
837+ ((v * (parseIntValue(dp[1]) + 1)) * parseIntValue(dp[0]))
838+ }
839+
840+
841+func en (eo) = {
842+ let ep = eo[ac]
843+ func eq (bI,bJ) = (bI + parseIntValue(bJ))
844+
845+ func er (bI,bJ) = {
774846 let aD = bI._1
775- let ef = am(aD)
776- let eg = (((parseIntValue(bJ) + ef) - 1) / ef)
777- $Tuple2((aD + 1), (bI._2 + (eg * i)))
847+ let es = am(aD)
848+ let et = (((parseIntValue(bJ) + es) - 1) / es)
849+ $Tuple2((aD + 1), (bI._2 + (et * i)))
778850 }
779851
780- let eh = {
781- let bL = split(eb[aa], "_")
852+ let eu = {
853+ let bL = split(eo[aa], "_")
782854 let bM = size(bL)
783855 let bN = 0
784856 func bO (bP,bQ) = if ((bQ >= bM))
785857 then bP
786- else ed(bP, bL[bQ])
858+ else eq(bP, bL[bQ])
787859
788860 func bR (bP,bQ) = if ((bQ >= bM))
789861 then bP
791863
792864 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
793865 }
794- let ei = {
795- let bL = split(eb[ab], "_")
866+ let ev = {
867+ let bL = split(eo[ab], "_")
796868 let bM = size(bL)
797869 let bN = 0
798870 func bX (bP,bQ) = if ((bQ >= bM))
799871 then bP
800- else ed(bP, bL[bQ])
872+ else eq(bP, bL[bQ])
801873
802874 func bY (bP,bQ) = if ((bQ >= bM))
803875 then bP
805877
806878 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
807879 }
808- let ej = if ((ec == ""))
880+ let ew = if ((ep == ""))
809881 then 0
810- else ( let bL = split_4C(ec, "_")
882+ else ( let bL = split_4C(ep, "_")
811883 let bM = size(bL)
812884 let bN = $Tuple2(0, 0)
813- func ek (bP,bQ) = if ((bQ >= bM))
885+ func ex (bP,bQ) = if ((bQ >= bM))
814886 then bP
815- else ee(bP, bL[bQ])
816-
817- func el (bP,bQ) = if ((bQ >= bM))
887+ else er(bP, bL[bQ])
888+
889+ func ey (bP,bQ) = if ((bQ >= bM))
818890 then bP
819891 else throw("List size exceeds 50")
820892
821- el(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
822- ((eh + ei) + ej)
823- }
824-
825-
826-func em (en,eo,ep) = {
827- let dY = ((toString(eo) + "_") + toString(ep))
828- let eq = dX(dY)
829- let er = valueOrElse(getString(en), (dY + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
830- let es = split_4C(er, ":")
831- let et = ea(es)
832- let eu = if ((5 > size(es)))
833- then makeString(["0", toString(et), toString((eq - et)), toString(eq)], "_")
834- else {
835- let ev = split(es[ad], "_")
836- let ew = parseIntValue(ev[ae])
837- let ex = if ((size(ev) > 1))
838- then parseIntValue(ev[af])
839- else et
840- makeString([toString(ew), toString(ex), toString(((eq - ew) - ex)), toString(eq)], "_")
841- }
842-[es[Z], if ((size(split(es[aa], "_")) == n))
843- then es[aa]
844- else "0_0_0_0_0_0", if ((size(split(es[ab], "_")) == n))
845- then es[ab]
846- else "0_0_0_0_0_0", es[ac], eu]
847- }
848-
849-
850-func ey (eb) = {
851- let ez = ea(eb)
852- let eA = parseIntValue(split(eb[ad], "_")[ae])
853- ((dX(eb[Z]) - ez) - eA)
854- }
855-
856-
857-func eB (eC,ef) = {
858- let eg = if ((eC >= 0))
859- then (((eC + ef) - 1) / ef)
860- else -((((-(eC) + ef) - 1) / ef))
861- (eg * i)
862- }
863-
864-
865-func eD (eE,eb,eF) = if ((size(eE) != 3))
893+ ey(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
894+ ((eu + ev) + ew)
895+ }
896+
897+
898+func ez (eA,eB,eC) = {
899+ let em = ((toString(eB) + "_") + toString(eC))
900+ let eD = el(em)
901+ let eE = valueOrElse(getString(eA), (em + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
902+ let eF = split_4C(eE, ":")
903+ let eG = en(eF)
904+ let eH = if ((5 > size(eF)))
905+ then makeString(["0", toString(eG), toString((eD - eG)), toString(eD)], "_")
906+ else {
907+ let eI = split(eF[ad], "_")
908+ let eJ = parseIntValue(eI[ae])
909+ let eK = if ((size(eI) > 1))
910+ then parseIntValue(eI[af])
911+ else eG
912+ makeString([toString(eJ), toString(eK), toString(((eD - eJ) - eK)), toString(eD)], "_")
913+ }
914+[eF[Z], if ((size(split(eF[aa], "_")) == n))
915+ then eF[aa]
916+ else "0_0_0_0_0_0", if ((size(split(eF[ab], "_")) == n))
917+ then eF[ab]
918+ else "0_0_0_0_0_0", eF[ac], eH]
919+ }
920+
921+
922+func eL (eo) = {
923+ let eM = en(eo)
924+ let eN = parseIntValue(split(eo[ad], "_")[ae])
925+ ((el(eo[Z]) - eM) - eN)
926+ }
927+
928+
929+func eO (eP,es) = {
930+ let et = if ((eP >= 0))
931+ then (((eP + es) - 1) / es)
932+ else -((((-(eP) + es) - 1) / es))
933+ (et * i)
934+ }
935+
936+
937+func eQ (eR,eo,eS) = if ((size(eR) != 3))
866938 then throw("cargoListStr should contain exactly 2 ':' separators")
867939 else {
868- let eG = split(eE[0], "_")
869- let eH = split(eE[1], "_")
870- let eI = if ((eE[2] == ""))
940+ let eT = split(eR[0], "_")
941+ let eU = split(eR[1], "_")
942+ let eV = if ((eR[2] == ""))
871943 then nil
872- else split(eE[2], "_")
873- if ((size(eG) != n))
944+ else split(eR[2], "_")
945+ if ((size(eT) != n))
874946 then throw("All 6 resources should be passed")
875- else if ((size(eH) != n))
947+ else if ((size(eU) != n))
876948 then throw("All 6 materials should be passed")
877949 else {
878- let dB = ey(eb)
879- let eJ = split(eb[aa], "_")
880- let eK = split(eb[ab], "_")
881- let eL = if ((eb[ac] == ""))
950+ let dP = eL(eo)
951+ let eW = split(eo[aa], "_")
952+ let eX = split(eo[ab], "_")
953+ let eY = if ((eo[ac] == ""))
882954 then nil
883- else split(eb[ac], "_")
884- let dz = split(eF[aj], "_")
885- let eM = split(eF[ak], "_")
886- let eN = if ((eF[al] == ""))
955+ else split(eo[ac], "_")
956+ let dN = split(eS[aj], "_")
957+ let eZ = split(eS[ak], "_")
958+ let fa = if ((eS[al] == ""))
887959 then nil
888- else split(eF[al], "_")
889- func eO (bI,bJ) = {
890- let dn = bI._1
891- let eP = parseIntValue(bJ)
892- let eQ = parseIntValue(eJ[dn])
893- let eR = parseIntValue(dz[dn])
894- if ((eP == 0))
895- then $Tuple4((dn + 1), (bI._2 :+ eJ[dn]), (bI._3 :+ dz[dn]), bI._4)
896- else if ((eP > 0))
897- then if ((eP > eR))
898- then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eR)) + " available"))
899- else $Tuple4((dn + 1), (bI._2 :+ toString((eQ + eP))), (bI._3 :+ toString((eR - eP))), (bI._4 + eP))
900- else if ((-(eP) > eQ))
901- then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eQ)) + " available"))
902- else $Tuple4((dn + 1), (bI._2 :+ toString((eQ + eP))), (bI._3 :+ toString((eR - eP))), (bI._4 + eP))
960+ else split(eS[al], "_")
961+ func fb (bI,bJ) = {
962+ let dB = bI._1
963+ let fc = parseIntValue(bJ)
964+ let fd = parseIntValue(eW[dB])
965+ let fe = parseIntValue(dN[dB])
966+ if ((fc == 0))
967+ then $Tuple4((dB + 1), (bI._2 :+ eW[dB]), (bI._3 :+ dN[dB]), bI._4)
968+ else if ((fc > 0))
969+ then if ((fc > fe))
970+ then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(fe)) + " available"))
971+ else $Tuple4((dB + 1), (bI._2 :+ toString((fd + fc))), (bI._3 :+ toString((fe - fc))), (bI._4 + fc))
972+ else if ((-(fc) > fd))
973+ then throw((((("Attempt to take " + toString(-(fc))) + " from warehouse, but only ") + toString(fd)) + " available"))
974+ else $Tuple4((dB + 1), (bI._2 :+ toString((fd + fc))), (bI._3 :+ toString((fe - fc))), (bI._4 + fc))
903975 }
904976
905- let cZ = {
906- let bL = eG
977+ let da = {
978+ let bL = eT
907979 let bM = size(bL)
908980 let bN = $Tuple4(0, nil, nil, 0)
909981 func bO (bP,bQ) = if ((bQ >= bM))
910982 then bP
911- else eO(bP, bL[bQ])
983+ else fb(bP, bL[bQ])
912984
913985 func bR (bP,bQ) = if ((bQ >= bM))
914986 then bP
916988
917989 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
918990 }
919- func eS (bI,bJ) = {
920- let dn = bI._1
921- let eP = parseIntValue(bJ)
922- let eT = parseIntValue(eK[dn])
923- let eU = parseIntValue(eM[dn])
924- if ((eP == 0))
925- then $Tuple4((dn + 1), (bI._2 :+ eK[dn]), (bI._3 :+ eM[dn]), bI._4)
926- else if ((eP > 0))
927- then if ((eP > eU))
928- then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eU)) + " available"))
929- else $Tuple4((dn + 1), (bI._2 :+ toString((eT + eP))), (bI._3 :+ toString((eU - eP))), (bI._4 + eP))
930- else if ((-(eP) > eT))
931- then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eT)) + " available"))
932- else $Tuple4((dn + 1), (bI._2 :+ toString((eT + eP))), (bI._3 :+ toString((eU - eP))), (bI._4 + eP))
991+ func ff (bI,bJ) = {
992+ let dB = bI._1
993+ let fc = parseIntValue(bJ)
994+ let fg = parseIntValue(eX[dB])
995+ let fh = parseIntValue(eZ[dB])
996+ if ((fc == 0))
997+ then $Tuple4((dB + 1), (bI._2 :+ eX[dB]), (bI._3 :+ eZ[dB]), bI._4)
998+ else if ((fc > 0))
999+ then if ((fc > fh))
1000+ then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(fh)) + " available"))
1001+ else $Tuple4((dB + 1), (bI._2 :+ toString((fg + fc))), (bI._3 :+ toString((fh - fc))), (bI._4 + fc))
1002+ else if ((-(fc) > fg))
1003+ then throw((((("Attempt to take " + toString(-(fc))) + " from warehouse, but only ") + toString(fg)) + " available"))
1004+ else $Tuple4((dB + 1), (bI._2 :+ toString((fg + fc))), (bI._3 :+ toString((fh - fc))), (bI._4 + fc))
9331005 }
9341006
935- let eV = {
936- let bL = eH
1007+ let fi = {
1008+ let bL = eU
9371009 let bM = size(bL)
938- let bN = $Tuple4(0, nil, nil, cZ._4)
1010+ let bN = $Tuple4(0, nil, nil, da._4)
9391011 func bX (bP,bQ) = if ((bQ >= bM))
9401012 then bP
941- else eS(bP, bL[bQ])
1013+ else ff(bP, bL[bQ])
9421014
9431015 func bY (bP,bQ) = if ((bQ >= bM))
9441016 then bP
9461018
9471019 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
9481020 }
949- func eW (bI,bJ) = {
950- let dn = bI._1
951- let ef = am(dn)
952- let eP = parseIntValue(bJ)
953- let eX = if ((size(eL) > dn))
954- then parseIntValue(eL[dn])
1021+ func fj (bI,bJ) = {
1022+ let dB = bI._1
1023+ let es = am(dB)
1024+ let fc = parseIntValue(bJ)
1025+ let fk = if ((size(eY) > dB))
1026+ then parseIntValue(eY[dB])
9551027 else 0
956- let eY = if ((size(eN) > dn))
957- then parseIntValue(eN[dn])
1028+ let fl = if ((size(fa) > dB))
1029+ then parseIntValue(fa[dB])
9581030 else 0
959- if ((eP == 0))
960- then $Tuple4((dn + 1), (bI._2 :+ toString(eX)), (bI._3 :+ toString(eY)), bI._4)
961- else if ((eP > 0))
962- then if ((eP > eY))
963- then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eY)) + " available"))
1031+ if ((fc == 0))
1032+ then $Tuple4((dB + 1), (bI._2 :+ toString(fk)), (bI._3 :+ toString(fl)), bI._4)
1033+ else if ((fc > 0))
1034+ then if ((fc > fl))
1035+ then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(fl)) + " available"))
9641036 else {
965- let eZ = (eB((eX + eP), ef) - eB(eX, ef))
966- $Tuple4((dn + 1), (bI._2 :+ toString((eX + eP))), (bI._3 :+ toString((eY - eP))), (bI._4 + eZ))
1037+ let fm = (eO((fk + fc), es) - eO(fk, es))
1038+ $Tuple4((dB + 1), (bI._2 :+ toString((fk + fc))), (bI._3 :+ toString((fl - fc))), (bI._4 + fm))
9671039 }
968- else if ((-(eP) > eX))
969- then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eX)) + " available"))
1040+ else if ((-(fc) > fk))
1041+ then throw((((("Attempt to take " + toString(-(fc))) + " from warehouse, but only ") + toString(fk)) + " available"))
9701042 else {
971- let eZ = (eB((eX + eP), ef) - eB(eX, ef))
972- $Tuple4((dn + 1), (bI._2 :+ toString((eX + eP))), (bI._3 :+ toString((eY - eP))), (bI._4 + eZ))
1043+ let fm = (eO((fk + fc), es) - eO(fk, es))
1044+ $Tuple4((dB + 1), (bI._2 :+ toString((fk + fc))), (bI._3 :+ toString((fl - fc))), (bI._4 + fm))
9731045 }
9741046 }
9751047
976- let dW = if ((size(eI) != 0))
1048+ let ek = if ((size(eV) != 0))
9771049 then {
978- let bL = eI
1050+ let bL = eV
9791051 let bM = size(bL)
980- let bN = $Tuple4(0, nil, nil, eV._4)
981- func ek (bP,bQ) = if ((bQ >= bM))
1052+ let bN = $Tuple4(0, nil, nil, fi._4)
1053+ func ex (bP,bQ) = if ((bQ >= bM))
9821054 then bP
983- else eW(bP, bL[bQ])
984-
985- func el (bP,bQ) = if ((bQ >= bM))
1055+ else fj(bP, bL[bQ])
1056+
1057+ func ey (bP,bQ) = if ((bQ >= bM))
9861058 then bP
9871059 else throw("List size exceeds 50")
9881060
989- el(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1061+ ey(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
9901062 }
991- else $Tuple4(0, eL, eN, eV._4)
992- let fa = dW._4
993- if ((fa > dB))
994- then throw((((("Attempt to put total " + toString(fa)) + " stuff, but only ") + toString(dB)) + " warehouse space left"))
995- else $Tuple7(makeString(cZ._2, "_"), makeString(eV._2, "_"), makeString(dW._2, "_"), makeString(cZ._3, "_"), makeString(eV._3, "_"), makeString(dW._3, "_"), fa)
1063+ else $Tuple4(0, eY, fa, fi._4)
1064+ let fn = ek._4
1065+ if ((fn > dP))
1066+ then throw((((("Attempt to put total " + toString(fn)) + " stuff, but only ") + toString(dP)) + " warehouse space left"))
1067+ else $Tuple7(makeString(da._2, "_"), makeString(fi._2, "_"), makeString(ek._2, "_"), makeString(da._3, "_"), makeString(fi._3, "_"), makeString(ek._3, "_"), fn)
9961068 }
9971069 }
9981070
9991071
1000-func fb (fc,fd) = {
1001- let bm = toString(fc)
1002- let fe = dH(toBigInt(fd))
1003- let ff = valueOrElse(getInteger(cv()), (cu + 1))
1004- let cx = toString(ff)
1005- let dQ = toInt((fe % co))
1006- let dq = dO(fe, dQ)
1007- let fg = F[dQ]
1008- let fh = Issue(cQ(cx, "S"), makeString([cx, "S", dq, fg], "_"), 1, 0, false)
1009- let aM = calculateAssetId(fh)
1010- let fi = toBase58String(aM)
1011- $Tuple2([IntegerEntry(cv(), (ff + 1)), fh, StringEntry(cw(cx), fi), StringEntry(aL(fi), bm), StringEntry(cC(cx), bm), IntegerEntry(aP(fi), 0), IntegerEntry(cA(fi, bm), 0), ScriptTransfer(fc, 1, aM)], $Tuple2(fi, fg))
1012- }
1013-
1014-
1015-func fj (db,fc,fd,fk,fl) = if (!(sigVerify_8Kb(fk, fl, cg)))
1072+func fo (fp,fq) = {
1073+ let bm = toString(fp)
1074+ let fr = dV(toBigInt(fq))
1075+ let fs = valueOrElse(getInteger(cv()), (cu + 1))
1076+ let cx = toString(fs)
1077+ let ee = toInt((fr % co))
1078+ let dE = ec(fr, ee)
1079+ let ft = F[ee]
1080+ let fu = Issue(cR(cx, "S"), makeString([cx, "S", dE, ft], "_"), 1, 0, false)
1081+ let aM = calculateAssetId(fu)
1082+ let fv = toBase58String(aM)
1083+ $Tuple2([IntegerEntry(cv(), (fs + 1)), fu, StringEntry(cw(cx), fv), StringEntry(aL(fv), bm), StringEntry(cC(cx), bm), IntegerEntry(aP(fv), 0), IntegerEntry(cA(fv, bm), 0), ScriptTransfer(fp, 1, aM)], $Tuple2(fv, ft))
1084+ }
1085+
1086+
1087+func fw (bm,fx,fy) = if (!(sigVerify_8Kb(fx, fy, cg)))
10161088 then throw("signature does not match")
10171089 else {
1018- let dZ = split(toUtf8String(fk), ";")
1019- let fm = split(dZ[0], "|")
1020- let fn = split(fm[cJ], "_")
1021- let fo = parseIntValue(fn[0])
1022- let fp = parseIntValue(fn[1])
1023- let fq = split(dZ[1], ":")
1024- let fr = fq[0]
1025- let fs = parseIntValue(fm[cO])
1026- if (if ((fs > (lastBlock.timestamp + ci)))
1090+ let dp = split(toUtf8String(fx), ";")
1091+ let fz = split(dp[0], "|")
1092+ let fA = split(fz[cJ], "_")
1093+ let fB = parseIntValue(fA[0])
1094+ let fC = parseIntValue(fA[1])
1095+ let fD = split(dp[1], ":")
1096+ let fE = fD[0]
1097+ let fF = parseIntValue(fz[cO])
1098+ if (if ((fF > (lastBlock.timestamp + ci)))
10271099 then true
1028- else ((lastBlock.timestamp - ci) > fs))
1029- then throw("signature outdated")
1100+ else ((lastBlock.timestamp - ci) > fF))
1101+ then throw(((("signature outdated: logTime=" + toString(fF)) + ", bcTime=") + toString(lastBlock.timestamp)))
10301102 else {
1031- let ft = fq[1]
1032- let bm = toString(fc)
1033- let fu = valueOrElse(getString(aJ(bm)), "")
1034- if ((fu != ft))
1035- then throw(((("Tx ids don't match! In state: " + fu) + ", in msg: ") + ft))
1103+ let fG = fD[1]
1104+ let fH = valueOrElse(getString(aJ(bm)), "")
1105+ if ((fH != fG))
1106+ then throw(((("Tx ids don't match! In state: " + fH) + ", in msg: ") + fG))
10361107 else {
10371108 let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked")
1038- let fv = bi(bg)
1039- let fw = valueOrElse(getInteger(fv), 100)
1040- if ((fw != fo))
1041- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fv), 100))) + " from state does not match one from flight log=") + toString(fo)))
1042- else if ((0 >= fo))
1109+ let fI = bi(bg)
1110+ let fJ = valueOrElse(getInteger(fI), 100)
1111+ if ((fJ != fB))
1112+ then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fI), 100))) + " from state does not match one from flight log=") + toString(fB)))
1113+ else if ((0 >= fB))
10431114 then throw("You can't fly with zero health")
1044- else if ((0 >= fp))
1045- then $Tuple3(((if (!(db))
1046- then [ScriptTransfer(fc, cn, b)]
1047- else nil) :+ IntegerEntry(fv, 0)), "", 0)
1048- else {
1049- let fx = if ((size(fm) > cP))
1050- then fm[cP]
1051- else ""
1052- let fy = if ((fx == "$"))
1053- then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
1054- else 0
1055- let dV = bf(bg)
1056- let eF = dU(dV)
1057- let fz = split(eF[ak], "_")
1058- let fA = makeString(da(db, fz, cm), "_")
1059- let fB = fb(fc, fd)
1060- let fi = fB._2._1
1061- $Tuple3((((fB._1 :+ StringEntry(bh(bg), makeString([fB._2._2, "L", fi], "_"))) :+ IntegerEntry(fv, fp)) :+ StringEntry(dV, makeString([eF[ai], eF[aj], fA, eF[al]], ":"))), fi, fy)
1062- }
1115+ else {
1116+ let fK = if ((size(fz) > cP))
1117+ then fz[cP]
1118+ else ""
1119+ let fL = if ((size(fz) > cQ))
1120+ then fz[cQ]
1121+ else ""
1122+ let fM = if (if ((fC > 0))
1123+ then (fK == "$")
1124+ else false)
1125+ then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
1126+ else 0
1127+ $Tuple5(fC, bg, fM, fE, fL)
1128+ }
10631129 }
10641130 }
10651131 }
10661132
10671133
1068-func fC (aW,fD) = {
1069- let ep = valueOrElse(getInteger(aP(aW)), 0)
1070- let fE = valueOrElse(getInteger(aQ(m, aW)), 0)
1071- let fF = (ep / 6)
1072- let fG = (ep / 7)
1073- ((t + fraction(t, ((ep + fF) + (2 * fG)), 5)) + fraction(t, fE, (fD * 5)))
1074- }
1075-
1076-
1077-func fH (aK,fI,fJ) = {
1078- let fK = if ((fI == cG))
1079- then $Tuple2(fJ, valueOrElse(getString(be(aK)), ""))
1134+func fN (fp,fq,fx,fy) = {
1135+ let bm = toString(fp)
1136+ let ef = fw(bm, fx, fy)
1137+ let fI = bi(ef._2)
1138+ let ej = bf(ef._2)
1139+ let eS = ei(ej)
1140+ let fO = split(eS[ak], "_")
1141+ let fP = makeString(db(true, fO, cm), "_")
1142+ let du = di(eS[al], ef._5)
1143+ if ((0 >= ef._1))
1144+ then $Tuple3([IntegerEntry(fI, 0), StringEntry(ej, makeString([eS[ai], eS[aj], eS[ak], du], ":"))], "", 0)
1145+ else {
1146+ let fQ = fo(fp, fq)
1147+ let fv = fQ._2._1
1148+ $Tuple3((((fQ._1 :+ StringEntry(bh(ef._2), makeString([fQ._2._2, "L", fv], "_"))) :+ IntegerEntry(fI, ef._1)) :+ StringEntry(ej, makeString([eS[ai], eS[aj], fP, du], ":"))), fv, ef._3)
1149+ }
1150+ }
1151+
1152+
1153+func fR (aW,fS) = {
1154+ let eC = valueOrElse(getInteger(aP(aW)), 0)
1155+ let fT = valueOrElse(getInteger(aQ(m, aW)), 0)
1156+ let fU = (eC / 6)
1157+ let fV = (eC / 7)
1158+ ((t + fraction(t, ((eC + fU) + (2 * fV)), 5)) + fraction(t, fT, (fS * 5)))
1159+ }
1160+
1161+
1162+func fW (aK,fX,fY) = {
1163+ let fZ = if ((fX == cG))
1164+ then $Tuple2(fY, valueOrElse(getString(be(aK)), ""))
10801165 else {
10811166 let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1082- let fL = valueOrElse(getString(bh(bg)), w)
1083- let fM = split(value(fL), "_")
1084- if ((fM[bq] != "L"))
1085- then throw((("Duck location type is " + fM[bq]) + ", but should be L"))
1086- else $Tuple2(fM[br], bg)
1087- }
1088- let aW = fK._1
1089- let fN = fK._2
1167+ let ga = valueOrElse(getString(bh(bg)), w)
1168+ let gb = split(value(ga), "_")
1169+ if ((gb[bq] != "L"))
1170+ then throw((("Duck location type is " + gb[bq]) + ", but should be L"))
1171+ else $Tuple2(gb[br], bg)
1172+ }
1173+ let aW = fZ._1
1174+ let gc = fZ._2
10901175 let bW = value(assetInfo(fromBase58String(aW)))
1091- let fO = aO(aW)
1092- let fP = valueOrErrorMessage(getInteger(fO), (("Land " + bW.name) + " is not staked"))
1093- let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1094- if ((fQ != aK))
1176+ let gd = aO(aW)
1177+ let ge = valueOrErrorMessage(getInteger(gd), (("Land " + bW.name) + " is not staked"))
1178+ let gf = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1179+ if ((gf != aK))
10951180 then throw((k + " is not yours"))
10961181 else {
1097- let fR = split(bW.description, "_")
1098- $Tuple4(fN, aW, fR, fP)
1099- }
1100- }
1101-
1102-
1103-func fS (aK,eC,fI,fJ) = if ((0 > eC))
1182+ let gg = split(bW.description, "_")
1183+ $Tuple4(gc, aW, gg, ge)
1184+ }
1185+ }
1186+
1187+
1188+func gh (aK,eP,fX,fY) = if ((0 > eP))
11041189 then throw("Negative amount")
11051190 else {
1106- let fT = fH(aK, fI, fJ)
1107- let bB = fT._3[W]
1108- let dj = dp(fT._3[X])
1109- let dt = (lastBlock.timestamp - fT._4)
1110- if ((0 > dt))
1111- then throw(((("Saved timestamp is in future, saved = " + toString(fT._4)) + ", current = ") + toString(lastBlock.timestamp)))
1191+ let gi = fW(aK, fX, fY)
1192+ let bB = gi._3[W]
1193+ let dx = dD(gi._3[X])
1194+ let dH = (lastBlock.timestamp - gi._4)
1195+ if ((0 > dH))
1196+ then throw(((("Saved timestamp is in future, saved = " + toString(gi._4)) + ", current = ") + toString(lastBlock.timestamp)))
11121197 else {
1113- let fD = bA(bB)
1114- let fU = fC(fT._2, fD)
1115- let fV = fraction(dt, (fU * fD), u)
1116- if ((eC > fV))
1117- then throw(((("Not enough resources, available = " + toString(fV)) + ", requested = ") + toString(eC)))
1198+ let fS = bA(bB)
1199+ let gj = fR(gi._2, fS)
1200+ let gk = fraction(dH, (gj * fS), u)
1201+ if ((eP > gk))
1202+ then throw(((("Not enough resources, available = " + toString(gk)) + ", requested = ") + toString(eP)))
11181203 else {
1119- let fW = fraction((fV - eC), u, (fU * fD))
1120- let fX = (lastBlock.timestamp - fW)
1121- let eo = (fD / o)
1122- let dA = dw(dj, (dt - fW), eo, fU)
1123- let en = aV(fT._2)
1124- let ep = valueOrElse(getInteger(aP(fT._2)), 0)
1125- let eb = em(en, eo, ep)
1126- let ev = split(eb[ad], "_")
1127- let dB = parseIntValue(ev[ag])
1128- if (if ((fI == cG))
1129- then (eC > dB)
1204+ let gl = fraction((gk - eP), u, (gj * fS))
1205+ let gm = (lastBlock.timestamp - gl)
1206+ let eB = (fS / o)
1207+ let dO = dK(dx, (dH - gl), eB, gj)
1208+ let eA = aV(gi._2)
1209+ let eC = valueOrElse(getInteger(aP(gi._2)), 0)
1210+ let eo = ez(eA, eB, eC)
1211+ let eI = split(eo[ad], "_")
1212+ let dP = parseIntValue(eI[ag])
1213+ if (if ((fX == cG))
1214+ then (eP > dP)
11301215 else false)
1131- then throw((("Only " + toString(dB)) + " space left in warehouse"))
1216+ then throw((("Only " + toString(dP)) + " space left in warehouse"))
11321217 else {
1133- let dV = bf(fT._1)
1134- let eF = dU(dV)
1135- let dz = split(eF[aj], "_")
1136- let dy = split(eb[aa], "_")
1137- let fY = if ((fI == cG))
1138- then $Tuple4(dr(dy, dj, (dt - fW), eo, fU), eF[aj], (parseIntValue(ev[af]) + dA._2), (parseIntValue(ev[ag]) - dA._2))
1139- else if ((fI == cH))
1140- then $Tuple4(eb[aa], dr(dz, dj, (dt - fW), eo, fU), parseIntValue(ev[af]), parseIntValue(ev[ag]))
1218+ let ej = bf(gi._1)
1219+ let eS = ei(ej)
1220+ let dN = split(eS[aj], "_")
1221+ let dM = split(eo[aa], "_")
1222+ let gn = if ((fX == cG))
1223+ then $Tuple4(dF(dM, dx, (dH - gl), eB, gj), eS[aj], (parseIntValue(eI[af]) + dO._2), (parseIntValue(eI[ag]) - dO._2))
1224+ else if ((fX == cH))
1225+ then $Tuple4(eo[aa], dF(dN, dx, (dH - gl), eB, gj), parseIntValue(eI[af]), parseIntValue(eI[ag]))
11411226 else {
1142- let fZ = dx(dy, dz, dA, dB)
1143- let ga = min([parseIntValue(ev[ag]), dA._2])
1144- $Tuple4(fZ._1, fZ._2, (parseIntValue(ev[af]) + ga), (parseIntValue(ev[ag]) - ga))
1227+ let go = dL(dM, dN, dO, dP)
1228+ let gp = min([parseIntValue(eI[ag]), dO._2])
1229+ $Tuple4(go._1, go._2, (parseIntValue(eI[af]) + gp), (parseIntValue(eI[ag]) - gp))
11451230 }
1146- let gb = fY._1
1147- let gc = fY._2
1148- let gd = fY._3
1149- let ge = fY._4
1150- $Tuple5([IntegerEntry(aO(fT._2), fX), IntegerEntry(aS(k, fT._2, aK), fX)], dV, [eF[ai], gc, eF[ak], eF[al]], en, [eb[Z], gb, eb[ab], eb[ac], makeString([ev[ae], toString(gd), toString(ge), ev[ah]], "_")])
1231+ let gq = gn._1
1232+ let gr = gn._2
1233+ let gs = gn._3
1234+ let gt = gn._4
1235+ $Tuple5([IntegerEntry(aO(gi._2), gm), IntegerEntry(aS(k, gi._2, aK), gm)], ej, [eS[ai], gr, eS[ak], eS[al]], eA, [eo[Z], gq, eo[ab], eo[ac], makeString([eI[ae], toString(gs), toString(gt), eI[ah]], "_")])
11511236 }
11521237 }
11531238 }
11541239 }
11551240
11561241
1157-func gf (aK,aW,fD,fI) = {
1158- let fO = aO(aW)
1159- let fP = value(getInteger(fO))
1160- let fV = (fraction((lastBlock.timestamp - fP), fC(aW, fD), u) * fD)
1161- fS(aK, fV, fI, aW)
1162- }
1163-
1164-
1165-func gg (db,fc,gh,aW) = {
1166- let aK = toString(fc)
1167- let fT = fH(aK, cI, aW)
1168- let fD = bA(fT._3[W])
1169- let gi = aP(fT._2)
1170- let gj = valueOrElse(getInteger(gi), 0)
1171- if ((gj >= 3))
1242+func gu (aK,aW,fS,fX) = {
1243+ let gd = aO(aW)
1244+ let ge = value(getInteger(gd))
1245+ let gk = (fraction((lastBlock.timestamp - ge), fR(aW, fS), u) * fS)
1246+ gh(aK, gk, fX, aW)
1247+ }
1248+
1249+
1250+func gv (dc,fp,gw,aW) = {
1251+ let aK = toString(fp)
1252+ let gi = fW(aK, cI, aW)
1253+ let fS = bA(gi._3[W])
1254+ let gx = aP(gi._2)
1255+ let gy = valueOrElse(getInteger(gx), 0)
1256+ if ((gy >= 3))
11721257 then throw("Currently max infrastructure level = 3")
11731258 else {
1174- let gk = (gj + 1)
1175- let gl = fraction(cl, (fD * gk), o)
1176- if (if (!(db))
1177- then (gh != gl)
1259+ let gz = (gy + 1)
1260+ let gA = fraction(cl, (fS * gz), o)
1261+ if (if (!(dc))
1262+ then (gw != gA)
11781263 else false)
1179- then throw(("Payment attached should be " + toString(gl)))
1264+ then throw(("Payment attached should be " + toString(gA)))
11801265 else {
1181- let dV = bf(fT._1)
1182- let eF = dU(dV)
1183- let fz = split(eF[ak], "_")
1184- let fA = makeString(da(db, fz, fraction(e, (fD * gk), o)), "_")
1185- let gm = gf(aK, fT._2, fD, cI)
1186- let gn = gm._5
1187- let go = dX(gn[Z])
1188- let gp = makeString([split(gn[Z], "_")[0], toString(gk)], "_")
1189- let gq = dX(gp)
1190- let ev = split(gn[ad], "_")
1191- let gr = makeString([ev[ae], ev[af], toString(((parseIntValue(ev[ag]) + gq) - go)), toString(gq)], "_")
1192- $Tuple2(([IntegerEntry(gi, gk), IntegerEntry(cA(fT._2, aK), gk), StringEntry(dV, makeString([eF[ai], gm._3[aj], fA, eF[al]], ":")), StringEntry(gm._4, makeString([gp, gn[aa], gn[ab], gn[ac], gr], ":"))] ++ gm._1), gk)
1266+ let ej = bf(gi._1)
1267+ let eS = ei(ej)
1268+ let fO = split(eS[ak], "_")
1269+ let fP = makeString(db(dc, fO, fraction(e, (fS * gz), o)), "_")
1270+ let gB = gu(aK, gi._2, fS, cI)
1271+ let gC = gB._5
1272+ let gD = el(gC[Z])
1273+ let gE = makeString([split(gC[Z], "_")[0], toString(gz)], "_")
1274+ let gF = el(gE)
1275+ let eI = split(gC[ad], "_")
1276+ let gG = makeString([eI[ae], eI[af], toString(((parseIntValue(eI[ag]) + gF) - gD)), toString(gF)], "_")
1277+ $Tuple2(([IntegerEntry(gx, gz), IntegerEntry(cA(gi._2, aK), gz), StringEntry(ej, makeString([eS[ai], gB._3[aj], fP, eS[al]], ":")), StringEntry(gB._4, makeString([gE, gC[aa], gC[ab], gC[ac], gG], ":"))] ++ gB._1), gz)
11931278 }
11941279 }
11951280 }
11961281
11971282
1198-func gs (aK) = 0
1199-
1200-
1201-func gt (aK,fJ) = {
1202- let fT = fH(aK, cI, fJ)
1203- let aW = fT._2
1204- let fD = bA(fT._3[W])
1205- let gu = aQ(m, aW)
1206- if ((valueOrElse(getInteger(gu), 0) > 0))
1283+func gH (aK) = 0
1284+
1285+
1286+func gI (aK,fY) = {
1287+ let gi = fW(aK, cI, fY)
1288+ let aW = gi._2
1289+ let fS = bA(gi._3[W])
1290+ let gJ = aQ(m, aW)
1291+ if ((valueOrElse(getInteger(gJ), 0) > 0))
12071292 then throw("Presale artifact is already activated")
1208- else if ((parseIntValue(fT._3[V]) > cu))
1293+ else if ((parseIntValue(gi._3[V]) > cu))
12091294 then throw((((k + " ") + aW) + " is not eligible for presale artifact"))
12101295 else {
1211- let gm = gf(aK, aW, fD, cI)
1212- ((((gm._1 :+ IntegerEntry(gu, fD)) :+ IntegerEntry(cB(m, aW, aK), fD)) :+ StringEntry(gm._2, makeString(gm._3, ":"))) :+ StringEntry(gm._4, makeString(gm._5, ":")))
1296+ let gB = gu(aK, aW, fS, cI)
1297+ ((((gB._1 :+ IntegerEntry(gJ, fS)) :+ IntegerEntry(cB(m, aW, aK), fS)) :+ StringEntry(gB._2, makeString(gB._3, ":"))) :+ StringEntry(gB._4, makeString(gB._5, ":")))
12131298 }
12141299 }
12151300
12161301
1217-func gv (gw,gk,gx,aK,gy,fd,gz) = {
1302+func gK (gL,gz,gM,aK,gN,fq,gO) = {
12181303 let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1219- func gA (bI,aW) = {
1304+ func gP (bI,aW) = {
12201305 let bW = value(assetInfo(fromBase58String(aW)))
1221- let fO = aO(aW)
1222- let fP = valueOrErrorMessage(getInteger(fO), (("NFT " + bW.name) + " is not staked"))
1223- let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1224- if ((fQ != aK))
1306+ let gd = aO(aW)
1307+ let ge = valueOrErrorMessage(getInteger(gd), (("NFT " + bW.name) + " is not staked"))
1308+ let gf = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1309+ if ((gf != aK))
12251310 then throw((k + " is not yours"))
12261311 else {
1227- let fR = split(bW.description, "_")
1228- let fg = fR[Y]
1312+ let gg = split(bW.description, "_")
1313+ let ft = gg[Y]
12291314 if (if ((bI._3 != ""))
1230- then (bI._3 != fg)
1315+ then (bI._3 != ft)
12311316 else false)
12321317 then throw("Lands should be on the same continent to merge")
12331318 else {
1234- let bB = fR[W]
1235- let gB = bI._1
1236- let dn = valueOrErrorMessage(indexOf(gB, bB), "You haven't passed all the lands needed")
1237- let gC = (take(gB, dn) + drop(gB, (dn + 1)))
1238- let fD = bA(bB)
1239- let gD = (bI._2 + valueOrElse(getInteger(aQ(m, aW)), 0))
1240- let ep = valueOrElse(getInteger(aP(aW)), 0)
1241- let gE = {
1319+ let bB = gg[W]
1320+ let gQ = bI._1
1321+ let dB = valueOrErrorMessage(indexOf(gQ, bB), "You haven't passed all the lands needed")
1322+ let gR = (take(gQ, dB) + drop(gQ, (dB + 1)))
1323+ let fS = bA(bB)
1324+ let gS = (bI._2 + valueOrElse(getInteger(aQ(m, aW)), 0))
1325+ let eC = valueOrElse(getInteger(aP(aW)), 0)
1326+ let gT = {
12421327 let c = bB
12431328 if (("S" == c))
12441329 then 3
12501335 then 6
12511336 else throw("Only S, M, L, XL can merge")
12521337 }
1253- if ((ep != gE))
1338+ if ((eC != gT))
12541339 then throw("All lands should be maxed to merge")
12551340 else {
1256- let cx = fR[V]
1257- let dj = dp(fR[X])
1258- let dt = (lastBlock.timestamp - fP)
1259- if ((0 > dt))
1260- then throw(((("Saved timestamp is in future, saved = " + toString(fP)) + ", current = ") + toString(lastBlock.timestamp)))
1341+ let cx = gg[V]
1342+ let dx = dD(gg[X])
1343+ let dH = (lastBlock.timestamp - ge)
1344+ if ((0 > dH))
1345+ then throw(((("Saved timestamp is in future, saved = " + toString(ge)) + ", current = ") + toString(lastBlock.timestamp)))
12611346 else {
1262- let fU = fC(aW, fD)
1263- let eo = (fD / o)
1264- let gc = dr(split(bI._4, "_"), dj, dt, eo, fU)
1265- let bG = dh(split(bI._6, "_"), dj, eo, -1)
1347+ let gj = fR(aW, fS)
1348+ let eB = (fS / o)
1349+ let gr = dF(split(bI._4, "_"), dx, dH, eB, gj)
1350+ let bG = dv(split(bI._6, "_"), dx, eB, -1)
12661351 let bU = bI._7
12671352 let aD = indexOf(bU, aW)
12681353 if (!(isDefined(aD)))
12691354 then throw(("Your staked lands don't contain " + aW))
12701355 else {
1271- let gF = aN(aW)
1272- let gG = valueOrElse(getString(gF), "")
1273- $Tuple8(gC, gD, fg, gc, (((((((((((((bI._5 :+ DeleteEntry(aO(aW))) :+ DeleteEntry(aS(k, aW, aK))) :+ DeleteEntry(cw(cx))) :+ DeleteEntry(aL(aW))) :+ DeleteEntry(aP(aW))) :+ DeleteEntry(cA(aW, aK))) :+ DeleteEntry(aQ(m, aW))) :+ DeleteEntry(cB(m, aW, aK))) :+ DeleteEntry(cC(cx))) :+ DeleteEntry(aV(aW))) :+ DeleteEntry(gF)) :+ DeleteEntry(cy(gG))) :+ Burn(fromBase58String(aW), 1)), bG, removeByIndex(bU, value(aD)), (bI._8 + fD))
1356+ let gU = aN(aW)
1357+ let gV = valueOrElse(getString(gU), "")
1358+ $Tuple8(gR, gS, ft, gr, (((((((((((((bI._5 :+ DeleteEntry(aO(aW))) :+ DeleteEntry(aS(k, aW, aK))) :+ DeleteEntry(cw(cx))) :+ DeleteEntry(aL(aW))) :+ DeleteEntry(aP(aW))) :+ DeleteEntry(cA(aW, aK))) :+ DeleteEntry(aQ(m, aW))) :+ DeleteEntry(cB(m, aW, aK))) :+ DeleteEntry(cC(cx))) :+ DeleteEntry(aV(aW))) :+ DeleteEntry(gU)) :+ DeleteEntry(cy(gV))) :+ Burn(fromBase58String(aW), 1)), bG, removeByIndex(bU, value(aD)), (bI._8 + fS))
12741359 }
12751360 }
12761361 }
12781363 }
12791364 }
12801365
1281- let dV = bf(bg)
1282- let eF = dU(dV)
1283- let gH = valueOrElse(getString(bj()), "0_0_0_0_0_0")
1284- let gI = aX(aK)
1285- let bT = getString(gI)
1286- let gJ = if (isDefined(bT))
1366+ let ej = bf(bg)
1367+ let eS = ei(ej)
1368+ let gW = valueOrElse(getString(bj()), "0_0_0_0_0_0")
1369+ let gX = aX(aK)
1370+ let bT = getString(gX)
1371+ let gY = if (isDefined(bT))
12871372 then split_51C(value(bT), "_")
12881373 else nil
1289- let cZ = {
1290- let bL = gy
1374+ let da = {
1375+ let bL = gN
12911376 let bM = size(bL)
1292- let bN = $Tuple8(gx, 0, "", eF[aj], nil, gH, gJ, 0)
1377+ let bN = $Tuple8(gM, 0, "", eS[aj], nil, gW, gY, 0)
12931378 func bO (bP,bQ) = if ((bQ >= bM))
12941379 then bP
1295- else gA(bP, bL[bQ])
1380+ else gP(bP, bL[bQ])
12961381
12971382 func bR (bP,bQ) = if ((bQ >= bM))
12981383 then bP
13001385
13011386 bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
13021387 }
1303- let fg = cZ._3
1304- let dQ = valueOrErrorMessage(indexOf(F, fg), ("Unknown continent: " + fg))
1305- let dq = dO(dH(toBigInt(fd)), dQ)
1306- let ff = valueOrElse(getInteger(cv()), (cu + 1))
1307- let gK = toString(ff)
1308- let fh = Issue(cQ(gK, gw), makeString([gK, gw, dq, fg], "_"), 1, 0, false)
1309- let aM = calculateAssetId(fh)
1310- let gL = toBase58String(aM)
1311- let fA = makeString(da((gz > 0), split(eF[ak], "_"), gz), "_")
1312- let gM = aY(aK)
1313- let gN = valueOrElse(getInteger(gM), 0)
1314- $Tuple2((((((((((((((((cZ._5 :+ (if ((size(cZ._7) > 0))
1315- then StringEntry(gI, makeString_11C(cZ._7, "_"))
1316- else DeleteEntry(gI))) :+ IntegerEntry(gM, if ((cZ._8 > gN))
1388+ let ft = da._3
1389+ let ee = valueOrErrorMessage(indexOf(F, ft), ("Unknown continent: " + ft))
1390+ let dE = ec(dV(toBigInt(fq)), ee)
1391+ let fs = valueOrElse(getInteger(cv()), (cu + 1))
1392+ let gZ = toString(fs)
1393+ let fu = Issue(cR(gZ, gL), makeString([gZ, gL, dE, ft], "_"), 1, 0, false)
1394+ let aM = calculateAssetId(fu)
1395+ let ha = toBase58String(aM)
1396+ let fP = makeString(db((gO > 0), split(eS[ak], "_"), gO), "_")
1397+ let hb = aY(aK)
1398+ let hc = valueOrElse(getInteger(hb), 0)
1399+ $Tuple2((((((((((((((((da._5 :+ (if ((size(da._7) > 0))
1400+ then StringEntry(gX, makeString_11C(da._7, "_"))
1401+ else DeleteEntry(gX))) :+ IntegerEntry(hb, if ((da._8 > hc))
13171402 then 0
1318- else (gN - cZ._8))) :+ IntegerEntry(cv(), (ff + 1))) :+ fh) :+ StringEntry(cw(gK), gL)) :+ StringEntry(aL(gL), aK)) :+ StringEntry(cC(gK), aK)) :+ IntegerEntry(aQ(m, gL), cZ._2)) :+ IntegerEntry(cB(m, gL, aK), cZ._2)) :+ IntegerEntry(aP(gL), gk)) :+ IntegerEntry(cA(gL, aK), gk)) :+ StringEntry(dV, makeString([eF[ai], cZ._4, fA, eF[al]], ":"))) :+ StringEntry(bj(), cZ._6)) :+ StringEntry(bh(bg), makeString([fg, "L", gL], "_"))) :+ ScriptTransfer(addressFromStringValue(aK), 1, aM)), gL)
1319- }
1320-
1321-
1322-func gO (aK,gy,fd) = gv("M", 3, "SSSS", aK, gy, fd, 0)
1323-
1324-
1325-func gP (aK,gy,fd,db,gh) = {
1326- let gl = (cl * 4)
1327- if (if (!(db))
1328- then (gh != gl)
1403+ else (hc - da._8))) :+ IntegerEntry(cv(), (fs + 1))) :+ fu) :+ StringEntry(cw(gZ), ha)) :+ StringEntry(aL(ha), aK)) :+ StringEntry(cC(gZ), aK)) :+ IntegerEntry(aQ(m, ha), da._2)) :+ IntegerEntry(cB(m, ha, aK), da._2)) :+ IntegerEntry(aP(ha), gz)) :+ IntegerEntry(cA(ha, aK), gz)) :+ StringEntry(ej, makeString([eS[ai], da._4, fP, eS[al]], ":"))) :+ StringEntry(bj(), da._6)) :+ StringEntry(bh(bg), makeString([ft, "L", ha], "_"))) :+ ScriptTransfer(addressFromStringValue(aK), 1, aM)), ha)
1404+ }
1405+
1406+
1407+func hd (aK,gN,fq) = gK("M", 3, "SSSS", aK, gN, fq, 0)
1408+
1409+
1410+func he (aK,gN,fq,dc,gw) = {
1411+ let gA = (cl * 4)
1412+ if (if (!(dc))
1413+ then (gw != gA)
13291414 else false)
1330- then throw(("Payment attached should be " + toString(gl)))
1331- else gv("L", 4, "SMM", aK, gy, fd, (e * 4))
1332- }
1333-
1334-
1335-func gQ (aK,gy,fd,db,gh) = {
1336- let gl = (cl * 47)
1337- if (if (!(db))
1338- then (gh != gl)
1415+ then throw(("Payment attached should be " + toString(gA)))
1416+ else gK("L", 4, "SMM", aK, gN, fq, (e * 4))
1417+ }
1418+
1419+
1420+func hf (aK,gN,fq,dc,gw) = {
1421+ let gA = (cl * 47)
1422+ if (if (!(dc))
1423+ then (gw != gA)
13391424 else false)
1340- then throw(("Payment attached should be " + toString(gl)))
1341- else gv("XL", 5, "SSSML", aK, gy, fd, (e * 47))
1342- }
1343-
1344-
1345-func gR (aK,gy,fd,db,gh) = {
1346- let gl = (cl * 54)
1347- if (if (!(db))
1348- then (gh != gl)
1425+ then throw(("Payment attached should be " + toString(gA)))
1426+ else gK("XL", 5, "SSSML", aK, gN, fq, (e * 47))
1427+ }
1428+
1429+
1430+func hg (aK,gN,fq,dc,gw) = {
1431+ let gA = (cl * 54)
1432+ if (if (!(dc))
1433+ then (gw != gA)
13491434 else false)
1350- then throw(("Payment attached should be " + toString(gl)))
1351- else gv("XXL", 6, "LXL", aK, gy, fd, (e * 54))
1352- }
1353-
1354-
1355-func gS (db,aK,gh,gy,fd) = {
1356- let gT = {
1357- let c = size(gy)
1435+ then throw(("Payment attached should be " + toString(gA)))
1436+ else gK("XXL", 6, "LXL", aK, gN, fq, (e * 54))
1437+ }
1438+
1439+
1440+func hh (dc,aK,gw,gN,fq) = {
1441+ let hi = {
1442+ let c = size(gN)
13581443 if ((4 == c))
1359- then gO(aK, gy, fd)
1444+ then hd(aK, gN, fq)
13601445 else if ((3 == c))
1361- then gP(aK, gy, fd, db, gh)
1446+ then he(aK, gN, fq, dc, gw)
13621447 else if ((5 == c))
1363- then gQ(aK, gy, fd, db, gh)
1448+ then hf(aK, gN, fq, dc, gw)
13641449 else if ((2 == c))
1365- then gR(aK, gy, fd, db, gh)
1450+ then hg(aK, gN, fq, dc, gw)
13661451 else throw("Unknown merge")
13671452 }
1368- gT
1369- }
1370-
1371-
1372-func gU (dn) = if (if ((dn.originCaller != aE))
1453+ hi
1454+ }
1455+
1456+
1457+func hj (dB) = if (if ((dB.originCaller != aE))
13731458 then valueOrElse(getBoolean(bk()), false)
13741459 else false)
13751460 then throw("Contracts are under maintenance")
1376- else StringEntry(aJ(toString(dn.originCaller)), toBase58String(dn.transactionId))
1377-
1378-
1379-@Callable(dn)
1380-func constructorV1 (gV) = if ((dn.caller != this))
1461+ else StringEntry(aJ(toString(dB.originCaller)), toBase58String(dB.transactionId))
1462+
1463+
1464+@Callable(dB)
1465+func constructorV1 (hk) = if ((dB.caller != this))
13811466 then throw("Permission denied")
1382- else [StringEntry(ay(), gV)]
1383-
1384-
1385-
1386-@Callable(dn)
1387-func setBlocked (gW) = if ((dn.caller != this))
1467+ else [StringEntry(ay(), hk)]
1468+
1469+
1470+
1471+@Callable(dB)
1472+func setBlocked (hl) = if ((dB.caller != this))
13881473 then throw("permission denied")
1389- else [BooleanEntry(bk(), gW)]
1390-
1391-
1392-
1393-@Callable(dn)
1474+ else [BooleanEntry(bk(), hl)]
1475+
1476+
1477+
1478+@Callable(dB)
13941479 func stakeLand () = {
1395- let gX = gU(dn)
1396- if ((size(dn.payments) != 1))
1480+ let hm = hj(dB)
1481+ if ((size(dB.payments) != 1))
13971482 then throw("Exactly one payment required")
13981483 else {
1399- let gY = value(dn.payments[0])
1400- let aM = value(gY.assetId)
1401- let ap = toString(dn.caller)
1402- if ((gY.amount != 1))
1484+ let hn = value(dB.payments[0])
1485+ let aM = value(hn.assetId)
1486+ let ap = toString(dB.caller)
1487+ if ((hn.amount != 1))
14031488 then throw((("NFT " + k) + " token should be attached as payment"))
14041489 else {
14051490 let bW = value(assetInfo(aM))
14081493 else if (!(contains(bW.name, k)))
14091494 then throw((("Only NFT " + k) + " tokens are accepted"))
14101495 else {
1411- let gZ = drop(bW.name, 4)
1412- let cx = if (contains(gZ, "XXL"))
1413- then dropRight(gZ, 3)
1414- else if (contains(gZ, "XL"))
1415- then dropRight(gZ, 2)
1416- else dropRight(gZ, 1)
1496+ let ho = drop(bW.name, 4)
1497+ let cx = if (contains(ho, "XXL"))
1498+ then dropRight(ho, 3)
1499+ else if (contains(ho, "XL"))
1500+ then dropRight(ho, 2)
1501+ else dropRight(ho, 1)
14171502 if (!(isDefined(parseInt(cx))))
14181503 then throw(("Cannot parse land number from " + bW.name))
14191504 else {
14201505 let aW = toBase58String(aM)
1421- let fO = aO(aW)
1422- if (isDefined(getInteger(fO)))
1506+ let gd = aO(aW)
1507+ if (isDefined(getInteger(gd)))
14231508 then throw((("NFT " + bW.name) + " is already staked"))
14241509 else {
1425- let fR = split(bW.description, "_")
1426- let dj = dp(fR[X])
1427- let fD = bA(fR[W])
1428- let bG = do(dj, (fD / o), 1)
1429- let fE = valueOrElse(getInteger(aQ(m, aW)), 0)
1430- let gI = aX(ap)
1431- let bT = getString(gI)
1510+ let gg = split(bW.description, "_")
1511+ let dx = dD(gg[X])
1512+ let fS = bA(gg[W])
1513+ let bG = dC(dx, (fS / o), 1)
1514+ let fT = valueOrElse(getInteger(aQ(m, aW)), 0)
1515+ let gX = aX(ap)
1516+ let bT = getString(gX)
14321517 let bU = if (isDefined(bT))
14331518 then split_51C(value(bT), "_")
14341519 else nil
14351520 if (containsElement(bU, aW))
14361521 then throw(("Your staked lands already contain " + aW))
14371522 else {
1438- let ep = valueOrElse(getInteger(aP(aW)), 0)
1439-[IntegerEntry(fO, lastBlock.timestamp), IntegerEntry(aS(k, aW, ap), lastBlock.timestamp), StringEntry(gI, makeString_11C((bU :+ aW), "_")), IntegerEntry(aY(ap), (valueOrElse(getInteger(aY(ap)), 0) + fD)), StringEntry(aL(aW), ap), StringEntry(cC(cx), ap), IntegerEntry(cB(m, aW, ap), fE), IntegerEntry(cA(aW, ap), ep), StringEntry(bj(), bG), gX]
1523+ let eC = valueOrElse(getInteger(aP(aW)), 0)
1524+[IntegerEntry(gd, lastBlock.timestamp), IntegerEntry(aS(k, aW, ap), lastBlock.timestamp), StringEntry(gX, makeString_11C((bU :+ aW), "_")), IntegerEntry(aY(ap), (valueOrElse(getInteger(aY(ap)), 0) + fS)), StringEntry(aL(aW), ap), StringEntry(cC(cx), ap), IntegerEntry(cB(m, aW, ap), fT), IntegerEntry(cA(aW, ap), eC), StringEntry(bj(), bG), hm]
14401525 }
14411526 }
14421527 }
14471532
14481533
14491534
1450-@Callable(dn)
1451-func unstakeLand (fJ) = {
1452- let gX = gU(dn)
1453- if ((size(dn.payments) != 0))
1535+@Callable(dB)
1536+func unstakeLand (fY) = {
1537+ let hm = hj(dB)
1538+ if ((size(dB.payments) != 0))
14541539 then throw("No payments required")
14551540 else {
1456- let aK = toString(dn.caller)
1457- let fT = fH(aK, cH, fJ)
1458- let aW = fT._2
1459- let gI = aX(aK)
1460- let dj = dp(fT._3[X])
1461- let fD = bA(fT._3[W])
1462- let bG = do(dj, (fD / o), -1)
1463- let gm = gf(aK, aW, fD, cH)
1464- let bU = split_51C(valueOrElse(getString(gI), ""), "_")
1541+ let aK = toString(dB.caller)
1542+ let gi = fW(aK, cH, fY)
1543+ let aW = gi._2
1544+ let gX = aX(aK)
1545+ let dx = dD(gi._3[X])
1546+ let fS = bA(gi._3[W])
1547+ let bG = dC(dx, (fS / o), -1)
1548+ let gB = gu(aK, aW, fS, cH)
1549+ let bU = split_51C(valueOrElse(getString(gX), ""), "_")
14651550 let aD = indexOf(bU, aW)
14661551 if (!(isDefined(aD)))
14671552 then throw(("Your staked lands don't contain " + aW))
14681553 else {
1469- let dT = value(blockInfoByHeight(height)).timestamp
1470- let ha = valueOrElse(getInteger(aH, bl(aK)), 0)
1471- if ((ha >= dT))
1472- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ha)))
1554+ let eh = value(blockInfoByHeight(height)).timestamp
1555+ let hp = valueOrElse(getInteger(aH, bl(aK)), 0)
1556+ if ((hp >= eh))
1557+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(hp)))
14731558 else {
1474- let gM = aY(aK)
1475- let gN = valueOrElse(getInteger(gM), 0)
1476-[ScriptTransfer(dn.caller, 1, fromBase58String(aW)), DeleteEntry(aO(aW)), DeleteEntry(aS(k, aW, aK)), StringEntry(bj(), bG), StringEntry(gm._2, makeString(gm._3, ":")), if ((size(bU) > 1))
1477- then StringEntry(gI, makeString_11C(removeByIndex(bU, value(aD)), "_"))
1478- else DeleteEntry(gI), IntegerEntry(gM, if ((fD > gN))
1559+ let hb = aY(aK)
1560+ let hc = valueOrElse(getInteger(hb), 0)
1561+[ScriptTransfer(dB.caller, 1, fromBase58String(aW)), DeleteEntry(aO(aW)), DeleteEntry(aS(k, aW, aK)), StringEntry(bj(), bG), StringEntry(gB._2, makeString(gB._3, ":")), if ((size(bU) > 1))
1562+ then StringEntry(gX, makeString_11C(removeByIndex(bU, value(aD)), "_"))
1563+ else DeleteEntry(gX), IntegerEntry(hb, if ((fS > hc))
14791564 then 0
1480- else (gN - fD)), gX]
1565+ else (hc - fS)), hm]
14811566 }
14821567 }
14831568 }
14851570
14861571
14871572
1488-@Callable(dn)
1573+@Callable(dB)
14891574 func stakeDuck () = {
1490- let gX = gU(dn)
1491- if ((size(dn.payments) != 1))
1575+ let hm = hj(dB)
1576+ if ((size(dB.payments) != 1))
14921577 then throw("Exactly one payment required")
14931578 else {
1494- let gY = value(dn.payments[0])
1495- let aM = value(gY.assetId)
1496- let ap = toString(dn.caller)
1497- if ((gY.amount != 1))
1579+ let hn = value(dB.payments[0])
1580+ let aM = value(hn.assetId)
1581+ let ap = toString(dB.caller)
1582+ if ((hn.amount != 1))
14981583 then throw((("NFT " + l) + " token should be attached as payment"))
14991584 else {
15001585 let bW = value(assetInfo(aM))
15051590 else if (!(contains(bW.name, l)))
15061591 then throw((("Only NFT " + l) + " tokens are accepted"))
15071592 else {
1508- let hb = toBase58String(aM)
1509- let fO = aO(hb)
1510- if (isDefined(getInteger(fO)))
1593+ let hq = toBase58String(aM)
1594+ let gd = aO(hq)
1595+ if (isDefined(getInteger(gd)))
15111596 then throw((("NFT " + bW.name) + " is already staked"))
15121597 else if (isDefined(getString(be(ap))))
15131598 then throw(("You already staked one duck: " + bW.name))
15141599 else {
1515- let hc = bh(hb)
1516- let hd = getString(hc)
1517- let dV = bf(hb)
1518- let he = getString(dV)
1519- ([IntegerEntry(fO, lastBlock.timestamp), IntegerEntry(aS(l, toBase58String(aM), ap), lastBlock.timestamp), StringEntry(bd(hb), ap), StringEntry(be(ap), hb)] ++ (if (isDefined(hd))
1600+ let hr = bh(hq)
1601+ let hs = getString(hr)
1602+ let ej = bf(hq)
1603+ let ht = getString(ej)
1604+ ([IntegerEntry(gd, lastBlock.timestamp), IntegerEntry(aS(l, toBase58String(aM), ap), lastBlock.timestamp), StringEntry(bd(hq), ap), StringEntry(be(ap), hq)] ++ (if (isDefined(hs))
15201605 then nil
1521- else ([StringEntry(hc, w)] ++ (if (isDefined(he))
1606+ else ([StringEntry(hr, w)] ++ (if (isDefined(ht))
15221607 then nil
1523- else (([StringEntry(dV, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(hb), 100)) :+ gX)))))
1608+ else (([StringEntry(ej, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(hq), 100)) :+ hm)))))
15241609 }
15251610 }
15261611 }
15291614
15301615
15311616
1532-@Callable(dn)
1533-func unstakeDuck (hb) = {
1534- let gX = gU(dn)
1535- if ((size(dn.payments) != 0))
1617+@Callable(dB)
1618+func unstakeDuck (hq) = {
1619+ let hm = hj(dB)
1620+ if ((size(dB.payments) != 0))
15361621 then throw("No payments required")
15371622 else {
1538- let aM = fromBase58String(hb)
1539- let ap = toString(dn.caller)
1623+ let aM = fromBase58String(hq)
1624+ let ap = toString(dB.caller)
15401625 let bW = value(assetInfo(aM))
1541- let fO = aO(toBase58String(aM))
1542- if (!(isDefined(getInteger(fO))))
1626+ let gd = aO(toBase58String(aM))
1627+ if (!(isDefined(getInteger(gd))))
15431628 then throw((("NFT " + bW.name) + " is not staked"))
15441629 else if (!(isDefined(getString(be(ap)))))
15451630 then throw((("The duck " + bW.name) + " is not staked"))
15461631 else {
1547- let fQ = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned"))
1548- if ((fQ != ap))
1632+ let gf = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned"))
1633+ if ((gf != ap))
15491634 then throw("Staked NFT is not yours")
15501635 else {
1551- let fv = bi(hb)
1552- let hf = valueOrElse(getInteger(fv), 100)
1553- if ((100 > hf))
1636+ let fI = bi(hq)
1637+ let hu = valueOrElse(getInteger(fI), 100)
1638+ if ((100 > hu))
15541639 then throw("Please heal your duck before unstaking")
1555- else [ScriptTransfer(dn.caller, 1, aM), DeleteEntry(fO), DeleteEntry(fv), DeleteEntry(bh(hb)), DeleteEntry(bd(hb)), DeleteEntry(aS(l, hb, ap)), DeleteEntry(be(ap)), gX]
1640+ else [ScriptTransfer(dB.caller, 1, aM), DeleteEntry(gd), DeleteEntry(fI), DeleteEntry(bh(hq)), DeleteEntry(bd(hq)), DeleteEntry(aS(l, hq, ap)), DeleteEntry(be(ap)), hm]
15561641 }
15571642 }
15581643 }
15601645
15611646
15621647
1563-@Callable(dn)
1564-func claimRes (eC,hg) = {
1565- let gX = gU(dn)
1566- if ((size(dn.payments) != 0))
1648+@Callable(dB)
1649+func claimRes (eP,hv) = {
1650+ let hm = hj(dB)
1651+ if ((size(dB.payments) != 0))
15671652 then throw("No payments required")
15681653 else {
1569- let aK = toString(dn.originCaller)
1570- let dg = fS(aK, eC, cH, hg)
1571- $Tuple2((((dg._1 :+ StringEntry(dg._2, makeString(dg._3, ":"))) :+ StringEntry(dg._4, makeString(dg._5, ":"))) :+ gX), dg._3[aj])
1572- }
1573- }
1574-
1575-
1576-
1577-@Callable(dn)
1578-func claimResToWH (eC,hg) = {
1579- let gX = gU(dn)
1580- if ((size(dn.payments) != 0))
1654+ let aK = toString(dB.originCaller)
1655+ let dh = gh(aK, eP, cH, hv)
1656+ $Tuple2((((dh._1 :+ StringEntry(dh._2, makeString(dh._3, ":"))) :+ StringEntry(dh._4, makeString(dh._5, ":"))) :+ hm), dh._3[aj])
1657+ }
1658+ }
1659+
1660+
1661+
1662+@Callable(dB)
1663+func claimResToWH (eP,hv) = {
1664+ let hm = hj(dB)
1665+ if ((size(dB.payments) != 0))
15811666 then throw("No payments required")
15821667 else {
1583- let aK = toString(dn.originCaller)
1584- let dg = fS(aK, eC, cG, hg)
1585- $Tuple2((((dg._1 :+ StringEntry(dg._2, makeString(dg._3, ":"))) :+ StringEntry(dg._4, makeString(dg._5, ":"))) :+ gX), dg._5[aa])
1586- }
1587- }
1588-
1589-
1590-
1591-@Callable(dn)
1592-func flight (fk,fl) = {
1593- let gX = gU(dn)
1594- if (!(sigVerify_8Kb(fk, fl, cg)))
1595- then throw("signature does not match")
1596- else if ((size(dn.payments) != 0))
1597- then throw("No payments required")
1598- else {
1599- let dZ = split(toUtf8String(fk), ";")
1600- let fm = split(dZ[0], "|")
1601- let fn = split(fm[cJ], "_")
1602- let fo = parseIntValue(fn[0])
1603- let fp = parseIntValue(fn[1])
1604- let fq = split(dZ[1], ":")
1605- let fr = fq[0]
1606- let fs = parseIntValue(fm[cO])
1607- if (if ((fs > (lastBlock.timestamp + ci)))
1608- then true
1609- else ((lastBlock.timestamp - ci) > fs))
1610- then throw(((("signature outdated: logTime=" + toString(fs)) + ", bcTime=") + toString(lastBlock.timestamp)))
1611- else {
1612- let ft = fq[1]
1613- let fu = valueOrElse(getString(aJ(toString(dn.originCaller))), "")
1614- if ((fu != ft))
1615- then throw(((("Tx ids don't match! In state: " + fu) + ", in msg: ") + ft))
1616- else {
1617- let bm = toString(dn.caller)
1618- let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked")
1619- let fv = bi(bg)
1620- let fw = valueOrElse(getInteger(fv), 100)
1621- if ((fw != fo))
1622- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fv), 100))) + " from state does not match one from flight log=") + toString(fo)))
1623- else if ((0 >= fo))
1624- then throw("You can't fly with zero health")
1625- else {
1626- let hc = bh(bg)
1627- let fL = valueOrElse(getString(hc), w)
1628- if ((fr == fL))
1629- then throw("You can't fly to the same location")
1630- else {
1631- let fx = if ((size(fm) > cP))
1632- then fm[cP]
1633- else ""
1634- let fy = if (if ((fp > 0))
1635- then (fx == "$")
1636- else false)
1637- then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
1638- else 0
1639- $Tuple2([StringEntry(hc, if ((fp > 0))
1640- then fr
1641- else fL), IntegerEntry(fv, fp), gX], fy)
1642- }
1643- }
1644- }
1645- }
1646- }
1647- }
1648-
1649-
1650-
1651-@Callable(dn)
1652-func heal (hh,hi,hj) = {
1653- let gX = gU(dn)
1654- if (if (if ((0 > hh))
1668+ let aK = toString(dB.originCaller)
1669+ let dh = gh(aK, eP, cG, hv)
1670+ $Tuple2((((dh._1 :+ StringEntry(dh._2, makeString(dh._3, ":"))) :+ StringEntry(dh._4, makeString(dh._5, ":"))) :+ hm), dh._5[aa])
1671+ }
1672+ }
1673+
1674+
1675+
1676+@Callable(dB)
1677+func flight (fx,fy) = {
1678+ let hm = hj(dB)
1679+ if ((size(dB.payments) != 0))
1680+ then throw("No payments required")
1681+ else {
1682+ let bm = toString(dB.caller)
1683+ let ef = fw(bm, fx, fy)
1684+ let hr = bh(ef._2)
1685+ let ga = valueOrElse(getString(hr), w)
1686+ if ((ef._4 == ga))
1687+ then throw("You can't fly to the same location")
1688+ else {
1689+ let ej = bf(ef._2)
1690+ let eS = ei(ej)
1691+ let du = di(eS[al], ef._5)
1692+ $Tuple2([StringEntry(hr, if ((ef._1 > 0))
1693+ then ef._4
1694+ else ga), StringEntry(ej, makeString([eS[ai], eS[aj], eS[ak], du], ":")), IntegerEntry(bi(ef._2), ef._1), hm], ef._3)
1695+ }
1696+ }
1697+ }
1698+
1699+
1700+
1701+@Callable(dB)
1702+func heal (hw,hx,hy) = {
1703+ let hm = hj(dB)
1704+ if (if (if ((0 > hw))
16551705 then true
1656- else (0 > hi))
1706+ else (0 > hx))
16571707 then true
1658- else (0 > hj))
1708+ else (0 > hy))
16591709 then throw("Quantity cannot be negative")
16601710 else {
1661- let bg = valueOrErrorMessage(getString(be(toString(dn.caller))), "You don't have a duck staked")
1662- let hk = [hh, hi, hj]
1663- let fv = bi(bg)
1664- let hl = valueOrElse(getInteger(fv), 100)
1665- if ((hl >= B))
1711+ let bg = valueOrErrorMessage(getString(be(toString(dB.caller))), "You don't have a duck staked")
1712+ let hz = [hw, hx, hy]
1713+ let fI = bi(bg)
1714+ let hA = valueOrElse(getInteger(fI), 100)
1715+ if ((hA >= B))
16661716 then throw((("HP should be < " + toString(B)) + " to heal"))
16671717 else {
1668- let dV = bf(bg)
1669- let eF = dU(dV)
1670- let hm = if ((eF[al] == ""))
1718+ let ej = bf(bg)
1719+ let eS = ei(ej)
1720+ let hB = if ((eS[al] == ""))
16711721 then nil
1672- else split(eF[al], "_")
1673- func hn (bI,ho) = {
1722+ else split(eS[al], "_")
1723+ func hC (bI,hD) = {
16741724 let bw = bI._2
1675- let dI = if ((size(hm) > bw))
1676- then parseIntValue(hm[bw])
1725+ let dW = if ((size(hB) > bw))
1726+ then parseIntValue(hB[bw])
16771727 else 0
16781728 if ((3 > bw))
16791729 then {
1680- let hp = hk[bw]
1681- if ((hp > dI))
1682- then throw(((("You have only " + toString(dI)) + " of ") + E[bw]))
1683- else $Tuple3((bI._1 :+ toString((dI - hp))), (bw + 1), (bI._3 + (ch[bw] * hp)))
1730+ let hE = hz[bw]
1731+ if ((hE > dW))
1732+ then throw(((("You have only " + toString(dW)) + " of ") + E[bw]))
1733+ else $Tuple3((bI._1 :+ toString((dW - hE))), (bw + 1), (bI._3 + (ch[bw] * hE)))
16841734 }
1685- else $Tuple3((bI._1 :+ toString(dI)), (bw + 1), bI._3)
1735+ else $Tuple3((bI._1 :+ toString(dW)), (bw + 1), bI._3)
16861736 }
16871737
1688- let dg = {
1738+ let dh = {
16891739 let bL = G
16901740 let bM = size(bL)
16911741 let bN = $Tuple3(nil, 0, 0)
16921742 func bO (bP,bQ) = if ((bQ >= bM))
16931743 then bP
1694- else hn(bP, bL[bQ])
1744+ else hC(bP, bL[bQ])
16951745
16961746 func bR (bP,bQ) = if ((bQ >= bM))
16971747 then bP
16991749
17001750 bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
17011751 }
1702- let hq = min([B, (hl + dg._3)])
1703- $Tuple2([IntegerEntry(fv, hq), StringEntry(dV, makeString_2C([eF[ai], eF[aj], eF[ak], makeString(dg._1, "_")], ":")), gX], hq)
1752+ let hF = min([B, (hA + dh._3)])
1753+ $Tuple2([IntegerEntry(fI, hF), StringEntry(ej, makeString_2C([eS[ai], eS[aj], eS[ak], makeString(dh._1, "_")], ":")), hm], hF)
17041754 }
17051755 }
17061756 }
17071757
17081758
17091759
1710-@Callable(dn)
1760+@Callable(dB)
17111761 func healES () = {
1712- let gX = gU(dn)
1713- if ((size(dn.payments) != 1))
1762+ let hm = hj(dB)
1763+ if ((size(dB.payments) != 1))
17141764 then throw("Exactly one payment required")
17151765 else {
1716- let gY = value(dn.payments[0])
1717- if ((gY.assetId != b))
1766+ let hn = value(dB.payments[0])
1767+ if ((hn.assetId != b))
17181768 then throw("Allowed USDT payment only!")
17191769 else {
1720- let bg = valueOrErrorMessage(getString(be(toString(dn.caller))), "You don't have a duck staked")
1721- let fv = bi(bg)
1722- let hl = valueOrElse(getInteger(fv), 100)
1723- if ((hl > 0))
1770+ let bg = valueOrErrorMessage(getString(be(toString(dB.caller))), "You don't have a duck staked")
1771+ let fI = bi(bg)
1772+ let hA = valueOrElse(getInteger(fI), 100)
1773+ if ((hA > 0))
17241774 then throw("HP should be 0 to call Emergency Service")
17251775 else {
1726- let dV = bf(bg)
1727- let eF = dU(dV)
1728- let hm = if ((eF[al] == ""))
1776+ let ej = bf(bg)
1777+ let eS = ei(ej)
1778+ let hB = if ((eS[al] == ""))
17291779 then nil
1730- else split(eF[al], "_")
1731- let hr = if ((size(hm) > 0))
1732- then parseIntValue(hm[0])
1780+ else split(eS[al], "_")
1781+ let hG = if ((size(hB) > 0))
1782+ then parseIntValue(hB[0])
17331783 else 0
1734- let hs = if ((size(hm) > 1))
1735- then parseIntValue(hm[1])
1784+ let hH = if ((size(hB) > 1))
1785+ then parseIntValue(hB[1])
17361786 else 0
1737- let ht = if ((size(hm) > 2))
1738- then parseIntValue(hm[2])
1787+ let hI = if ((size(hB) > 2))
1788+ then parseIntValue(hB[2])
17391789 else 0
1740- if (if (if ((hr > 0))
1790+ if (if (if ((hG > 0))
17411791 then true
1742- else (hs > 0))
1792+ else (hH > 0))
17431793 then true
1744- else (ht > 0))
1794+ else (hI > 0))
17451795 then throw("You have to use own Medical Kit")
17461796 else {
1747- let hu = getString(aG, bo())
1748- let hv = if (isDefined(hu))
1749- then split(value(hu), "_")
1797+ let hJ = getString(aG, bo())
1798+ let hK = if (isDefined(hJ))
1799+ then split(value(hJ), "_")
17501800 else nil
1751- let hw = if ((size(hv) > 0))
1752- then parseIntValue(hv[0])
1801+ let hL = if ((size(hK) > 0))
1802+ then parseIntValue(hK[0])
17531803 else 0
1754- if ((0 >= hw))
1804+ if ((0 >= hL))
17551805 then throw("There are no Medical Kits L1 at Emergency Service storage")
17561806 else {
1757- let hq = (hl + ch[0])
1758- let hx = makeString([toString((hw - 1)), removeByIndex(hv, 0)], "_")
1807+ let hF = (hA + ch[0])
1808+ let hM = makeString([toString((hL - 1)), removeByIndex(hK, 0)], "_")
17591809 let ca = split(G[0], "_")
1760- let hy = bZ(ca)
1761- let hz = parseIntValue(ca[T])
1762- let hA = fraction((hy * A), x, (10 * hz))
1763- if ((gY.amount != hA))
1764- then throw(("Payment attached should be " + toString(hA)))
1810+ let hN = bZ(ca)
1811+ let hO = parseIntValue(ca[T])
1812+ let hP = fraction((hN * A), x, (10 * hO))
1813+ if ((hn.amount != hP))
1814+ then throw(("Payment attached should be " + toString(hP)))
17651815 else {
1766- let dg = bs(invoke(aG, "updateEsStorage", [hx], [AttachedPayment(b, hA)]))
1767- $Tuple2([IntegerEntry(fv, hq), gX], dg)
1816+ let dh = bs(invoke(aG, "updateEsStorage", [hM], [AttachedPayment(b, hP)]))
1817+ $Tuple2([IntegerEntry(fI, hF), hm], dh)
17681818 }
17691819 }
17701820 }
17751825
17761826
17771827
1778-@Callable(dn)
1779-func updateBackpack (bg,hB) = {
1780- let gX = gU(dn)
1781- if ((dn.caller != aG))
1828+@Callable(dB)
1829+func updateBackpack (bg,hQ) = {
1830+ let hm = hj(dB)
1831+ if ((dB.caller != aG))
17821832 then throw("permission denied")
1783- else $Tuple2([StringEntry(bf(bg), hB), gX], hB)
1784- }
1785-
1786-
1787-
1788-@Callable(dn)
1833+ else $Tuple2([StringEntry(bf(bg), hQ), hm], hQ)
1834+ }
1835+
1836+
1837+
1838+@Callable(dB)
17891839 func buySLand () = {
1790- let gX = gU(dn)
1791- if ((size(dn.payments) != 1))
1840+ let hm = hj(dB)
1841+ if ((size(dB.payments) != 1))
17921842 then throw("Exactly one payment required")
17931843 else {
1794- let gY = value(dn.payments[0])
1795- if ((gY.assetId != b))
1844+ let hn = value(dB.payments[0])
1845+ if ((hn.assetId != b))
17961846 then throw("Allowed USDT payment only!")
1797- else if ((gY.amount != cn))
1847+ else if ((hn.amount != cn))
17981848 then throw(("Payment attached should be " + toString(cn)))
17991849 else {
1800- let dg = fb(dn.caller, dn.transactionId)
1801- $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2._1)
1850+ let dh = fo(dB.caller, dB.transactionId)
1851+ $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2._1)
18021852 }
18031853 }
18041854 }
18051855
18061856
18071857
1808-@Callable(dn)
1809-func expedition (fk,fl) = {
1810- let gX = gU(dn)
1811- if ((size(dn.payments) != 0))
1858+@Callable(dB)
1859+func expedition (fx,fy) = {
1860+ let hm = hj(dB)
1861+ if ((size(dB.payments) != 0))
18121862 then throw("No payments required")
18131863 else {
1814- let dg = fj(true, dn.caller, dn.transactionId, fk, fl)
1815- $Tuple2((dg._1 :+ gX), $Tuple2(dg._2, dg._3))
1816- }
1817- }
1818-
1819-
1820-
1821-@Callable(dn)
1864+ let dh = fN(dB.caller, dB.transactionId, fx, fy)
1865+ $Tuple2((dh._1 :+ hm), $Tuple2(dh._2, dh._3))
1866+ }
1867+ }
1868+
1869+
1870+
1871+@Callable(dB)
18221872 func upgradeInfra (aW) = {
1823- let gX = gU(dn)
1824- if ((size(dn.payments) != 0))
1873+ let hm = hj(dB)
1874+ if ((size(dB.payments) != 0))
18251875 then throw("No payments required")
18261876 else {
1827- let dg = gg(true, dn.caller, 0, aW)
1828- $Tuple2((dg._1 :+ gX), dg._2)
1829- }
1830- }
1831-
1832-
1833-
1834-@Callable(dn)
1835-func upgradeInfraUsdt (aW) = if ((dn.caller != this))
1877+ let dh = gv(true, dB.caller, 0, aW)
1878+ $Tuple2((dh._1 :+ hm), dh._2)
1879+ }
1880+ }
1881+
1882+
1883+
1884+@Callable(dB)
1885+func upgradeInfraUsdt (aW) = if ((dB.caller != this))
18361886 then throw("Permission denied")
18371887 else {
1838- let gX = gU(dn)
1839- if ((size(dn.payments) != 1))
1888+ let hm = hj(dB)
1889+ if ((size(dB.payments) != 1))
18401890 then throw("Exactly one payment required")
18411891 else {
1842- let gY = value(dn.payments[0])
1843- if ((gY.assetId != b))
1892+ let hn = value(dB.payments[0])
1893+ if ((hn.assetId != b))
18441894 then throw("Allowed USDT payment only!")
18451895 else {
1846- let dg = gg(false, dn.caller, gY.amount, aW)
1847- $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2)
1896+ let dh = gv(false, dB.caller, hn.amount, aW)
1897+ $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2)
18481898 }
18491899 }
18501900 }
18511901
18521902
18531903
1854-@Callable(dn)
1855-func activateArtifact (hC,aW) = {
1856- let gX = gU(dn)
1857- if ((size(dn.payments) != 0))
1904+@Callable(dB)
1905+func activateArtifact (hR,aW) = {
1906+ let hm = hj(dB)
1907+ if ((size(dB.payments) != 0))
18581908 then throw("No payments required")
18591909 else {
1860- let dg = {
1861- let c = hC
1910+ let dh = {
1911+ let c = hR
18621912 if (("PRESALE" == c))
1863- then gt(toString(dn.caller), aW)
1913+ then gI(toString(dB.caller), aW)
18641914 else throw("Unknown artifact")
18651915 }
1866- (dg :+ gX)
1867- }
1868- }
1869-
1870-
1871-
1872-@Callable(dn)
1873-func mergeLands (gy) = {
1874- let gX = gU(dn)
1875- if ((size(dn.payments) != 0))
1916+ (dh :+ hm)
1917+ }
1918+ }
1919+
1920+
1921+
1922+@Callable(dB)
1923+func mergeLands (gN) = {
1924+ let hm = hj(dB)
1925+ if ((size(dB.payments) != 0))
18761926 then throw("No payments required")
18771927 else {
1878- let dg = gS(true, toString(dn.caller), 0, gy, dn.transactionId)
1879- $Tuple2((dg._1 :+ gX), dg._2)
1880- }
1881- }
1882-
1883-
1884-
1885-@Callable(dn)
1886-func mergeLandsUsdt (gy) = {
1887- let gX = gU(dn)
1888- if ((size(dn.payments) != 1))
1928+ let dh = hh(true, toString(dB.caller), 0, gN, dB.transactionId)
1929+ $Tuple2((dh._1 :+ hm), dh._2)
1930+ }
1931+ }
1932+
1933+
1934+
1935+@Callable(dB)
1936+func mergeLandsUsdt (gN) = {
1937+ let hm = hj(dB)
1938+ if ((size(dB.payments) != 1))
18891939 then throw("Exactly one payment required")
18901940 else {
1891- let gY = value(dn.payments[0])
1892- if ((gY.assetId != b))
1941+ let hn = value(dB.payments[0])
1942+ if ((hn.assetId != b))
18931943 then throw("Allowed USDT payment only!")
18941944 else {
1895- let dg = gS(false, toString(dn.caller), gY.amount, gy, dn.transactionId)
1896- $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2)
1945+ let dh = hh(false, toString(dB.caller), hn.amount, gN, dB.transactionId)
1946+ $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2)
18971947 }
18981948 }
18991949 }
19001950
19011951
19021952
1903-@Callable(dn)
1904-func cargoExchange (hD,aW) = {
1905- let gX = gU(dn)
1906- if ((size(dn.payments) != 0))
1953+@Callable(dB)
1954+func cargoExchange (hS,aW) = {
1955+ let hm = hj(dB)
1956+ if ((size(dB.payments) != 0))
19071957 then throw("No payments required")
19081958 else {
1909- let eE = split_4C(hD, ":")
1910- let aK = toString(dn.originCaller)
1959+ let eR = split_4C(hS, ":")
1960+ let aK = toString(dB.originCaller)
19111961 let bW = value(assetInfo(fromBase58String(aW)))
1912- let fO = aO(aW)
1913- if (!(isDefined(getInteger(fO))))
1962+ let gd = aO(aW)
1963+ if (!(isDefined(getInteger(gd))))
19141964 then throw((bW.name + " is not staked"))
19151965 else {
1916- let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1917- if ((fQ != aK))
1966+ let gf = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1967+ if ((gf != aK))
19181968 then throw((k + " is not yours"))
19191969 else {
1920- let eo = (bA(split(bW.description, "_")[W]) / o)
1921- let ep = valueOrElse(getInteger(aP(aW)), 0)
1970+ let eB = (bA(split(bW.description, "_")[W]) / o)
1971+ let eC = valueOrElse(getInteger(aP(aW)), 0)
19221972 let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1923- let fL = valueOrElse(getString(bh(bg)), w)
1924- let fM = split(value(fL), "_")
1925- if ((fM[bq] != "L"))
1926- then throw((("Duck location type is " + fM[bq]) + ", but should be L"))
1927- else if ((fM[br] != aW))
1973+ let ga = valueOrElse(getString(bh(bg)), w)
1974+ let gb = split(value(ga), "_")
1975+ if ((gb[bq] != "L"))
1976+ then throw((("Duck location type is " + gb[bq]) + ", but should be L"))
1977+ else if ((gb[br] != aW))
19281978 then throw(("Duck should be on the land " + aW))
19291979 else {
1930- let en = aV(aW)
1931- let eb = em(en, eo, ep)
1932- let dV = bf(bg)
1933- let eF = dU(dV)
1934- let dg = eD(eE, eb, eF)
1935- let ev = split(eb[ad], "_")
1936- let gd = (parseIntValue(ev[af]) + dg._7)
1937- let ge = (parseIntValue(ev[ag]) - dg._7)
1938-[StringEntry(dV, makeString_2C([eF[ai], dg._4, dg._5, dg._6], ":")), StringEntry(en, makeString_2C([eb[Z], dg._1, dg._2, dg._3, makeString([ev[ae], toString(gd), toString(ge), ev[ah]], "_")], ":")), gX]
1980+ let eA = aV(aW)
1981+ let eo = ez(eA, eB, eC)
1982+ let ej = bf(bg)
1983+ let eS = ei(ej)
1984+ let dh = eQ(eR, eo, eS)
1985+ let eI = split(eo[ad], "_")
1986+ let gs = (parseIntValue(eI[af]) + dh._7)
1987+ let gt = (parseIntValue(eI[ag]) - dh._7)
1988+[StringEntry(ej, makeString_2C([eS[ai], dh._4, dh._5, dh._6], ":")), StringEntry(eA, makeString_2C([eo[Z], dh._1, dh._2, dh._3, makeString([eI[ae], toString(gs), toString(gt), eI[ah]], "_")], ":")), hm]
19391989 }
19401990 }
19411991 }
19441994
19451995
19461996
1947-@Callable(dn)
1948-func saveWarehouse (er,aW) = {
1949- let gX = gU(dn)
1950- if ((dn.caller != aG))
1997+@Callable(dB)
1998+func saveWarehouse (eE,aW) = {
1999+ let hm = hj(dB)
2000+ if ((dB.caller != aG))
19512001 then throw("Access denied")
19522002 else {
1953- let en = aV(aW)
1954- let es = split_4C(er, ":")
1955- if ((size(es) != 5))
2003+ let eA = aV(aW)
2004+ let eF = split_4C(eE, ":")
2005+ if ((size(eF) != 5))
19562006 then throw("warehouse string should contain 4 ':' separators")
19572007 else {
1958- let hE = split(es[ad], "_")[ae]
1959- let gd = ea(es)
1960- let hF = dX(es[Z])
1961- let ge = ((hF - parseIntValue(hE)) - gd)
1962- let hG = makeString_2C([es[Z], es[aa], es[ab], es[ac], makeString([hE, toString(gd), toString(ge), toString(hF)], "_")], ":")
1963- $Tuple2([StringEntry(en, hG), gX], hG)
2008+ let hT = split(eF[ad], "_")[ae]
2009+ let gs = en(eF)
2010+ let hU = el(eF[Z])
2011+ let gt = ((hU - parseIntValue(hT)) - gs)
2012+ let hV = makeString_2C([eF[Z], eF[aa], eF[ab], eF[ac], makeString([hT, toString(gs), toString(gt), toString(hU)], "_")], ":")
2013+ $Tuple2([StringEntry(eA, hV), hm], hV)
19642014 }
19652015 }
19662016 }
19672017
19682018
19692019
1970-@Callable(dn)
1971-func fixWarehouseFormat (aW) = if ((dn.caller != aE))
2020+@Callable(dB)
2021+func fixWarehouseFormat (aW) = if ((dB.caller != aE))
19722022 then throw("Access denied")
19732023 else {
1974- let en = aV(aW)
2024+ let eA = aV(aW)
19752025 let bW = value(assetInfo(fromBase58String(aW)))
1976- let eo = (bA(split(bW.description, "_")[W]) / o)
1977- let ep = valueOrElse(getInteger(aP(aW)), 0)
1978- let es = em(en, eo, ep)
1979- let hE = bv(invoke(aG, "recalcLockedVolumeREADONLY", [aW, es], nil))
1980- let gd = ea(es)
1981- let hF = dX(es[Z])
1982- let ge = ((hF - hE) - gd)
1983- let hG = makeString_2C([es[Z], es[aa], es[ab], es[ac], makeString([toString(hE), toString(gd), toString(ge), toString(hF)], "_")], ":")
1984- $Tuple2([StringEntry(en, hG)], hG)
2026+ let eB = (bA(split(bW.description, "_")[W]) / o)
2027+ let eC = valueOrElse(getInteger(aP(aW)), 0)
2028+ let eF = ez(eA, eB, eC)
2029+ let hT = bv(invoke(aG, "recalcLockedVolumeREADONLY", [aW, eF], nil))
2030+ let gs = en(eF)
2031+ let hU = el(eF[Z])
2032+ let gt = ((hU - hT) - gs)
2033+ let hV = makeString_2C([eF[Z], eF[aa], eF[ab], eF[ac], makeString([toString(hT), toString(gs), toString(gt), toString(hU)], "_")], ":")
2034+ $Tuple2([StringEntry(eA, hV)], hV)
19852035 }
19862036
19872037
19882038
1989-@Callable(dn)
1990-func fixStakedPieces (ap) = if ((dn.caller != aE))
2039+@Callable(dB)
2040+func fixStakedPieces (ap) = if ((dB.caller != aE))
19912041 then throw("Access denied")
19922042 else {
1993- let gN = if ((ap == ""))
2043+ let hc = if ((ap == ""))
19942044 then 0
19952045 else {
19962046 let bT = getString(aF, aX(ap))
20162066
20172067 bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
20182068 }
2019- $Tuple2([IntegerEntry(aY(ap), gN)], gN)
2069+ $Tuple2([IntegerEntry(aY(ap), hc)], hc)
20202070 }
20212071
20222072
20232073
2024-@Callable(dn)
2025-func setCustomName (aM,gG,aR) = {
2026- let gX = gU(dn)
2027- if ((size(dn.payments) != 1))
2074+@Callable(dB)
2075+func setCustomName (aM,gV,aR) = {
2076+ let hm = hj(dB)
2077+ if ((size(dB.payments) != 1))
20282078 then throw("Exactly one payment required")
20292079 else {
2030- let gY = value(dn.payments[0])
2031- if ((gY.assetId != b))
2080+ let hn = value(dB.payments[0])
2081+ if ((hn.assetId != b))
20322082 then throw("Allowed USDT payment only!")
2033- else if ((gY.amount != cj))
2083+ else if ((hn.amount != cj))
20342084 then throw(("Payment should be " + toString(cj)))
2035- else if (contains(gG, "__"))
2036- then throw(("Name should not contain '__': " + gG))
2037- else if ((size(gG) > ck))
2085+ else if (contains(gV, "__"))
2086+ then throw(("Name should not contain '__': " + gV))
2087+ else if ((size(gV) > ck))
20382088 then throw(("Name too long, maxLength=" + toString(ck)))
20392089 else {
2040- let aK = toString(dn.originCaller)
2041- let hH = {
2090+ let aK = toString(dB.originCaller)
2091+ let hW = {
20422092 let c = aR
20432093 if (("ACCOUNT" == c))
20442094 then {
2045- let hI = cE(gG)
2046- let hJ = getString(hI)
2047- if (isDefined(hJ))
2048- then throw(("Name already registered: " + gG))
2095+ let hX = cE(gV)
2096+ let hY = getString(hX)
2097+ if (isDefined(hY))
2098+ then throw(("Name already registered: " + gV))
20492099 else {
2050- let hK = ba(aK)
2051- let hL = getString(hK)
2052- let hM = if (isDefined(hL))
2053- then [DeleteEntry(cE(value(hL)))]
2100+ let hZ = ba(aK)
2101+ let ia = getString(hZ)
2102+ let ib = if (isDefined(ia))
2103+ then [DeleteEntry(cE(value(ia)))]
20542104 else nil
2055- ((hM :+ StringEntry(hK, gG)) :+ StringEntry(hI, aK))
2105+ ((ib :+ StringEntry(hZ, gV)) :+ StringEntry(hX, aK))
20562106 }
20572107 }
20582108 else if (("LAND" == c))
20592109 then {
20602110 let bW = value(assetInfo(fromBase58String(aM)))
2061- let fO = aO(aM)
2062- if (!(isDefined(getInteger(fO))))
2111+ let gd = aO(aM)
2112+ if (!(isDefined(getInteger(gd))))
20632113 then throw((bW.name + " is not staked"))
20642114 else {
2065- let fQ = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned"))
2066- if ((fQ != aK))
2115+ let gf = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned"))
2116+ if ((gf != aK))
20672117 then throw((k + " is not yours"))
20682118 else {
2069- let hI = cy(gG)
2070- let hJ = getString(hI)
2071- if (isDefined(hJ))
2072- then throw(("Name already registered: " + gG))
2119+ let hX = cy(gV)
2120+ let hY = getString(hX)
2121+ if (isDefined(hY))
2122+ then throw(("Name already registered: " + gV))
20732123 else {
2074- let hN = aN(aM)
2075- let hL = getString(hN)
2076- let hM = if (isDefined(hL))
2077- then [DeleteEntry(cy(value(hL)))]
2124+ let ic = aN(aM)
2125+ let ia = getString(ic)
2126+ let ib = if (isDefined(ia))
2127+ then [DeleteEntry(cy(value(ia)))]
20782128 else nil
2079- ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM))
2129+ ((ib :+ StringEntry(ic, gV)) :+ StringEntry(hX, aM))
20802130 }
20812131 }
20822132 }
20842134 else if (("DUCK" == c))
20852135 then {
20862136 let bW = value(assetInfo(fromBase58String(aM)))
2087- let fO = aO(aM)
2088- if (if (!(isDefined(getInteger(fO))))
2137+ let gd = aO(aM)
2138+ if (if (!(isDefined(getInteger(gd))))
20892139 then true
20902140 else !(isDefined(getString(be(aK)))))
20912141 then throw((bW.name + " is not staked"))
20922142 else {
2093- let fQ = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned"))
2094- if ((fQ != aK))
2143+ let gf = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned"))
2144+ if ((gf != aK))
20952145 then throw((l + " is not yours"))
20962146 else {
2097- let hI = cD(gG)
2098- let hJ = getString(hI)
2099- if (isDefined(hJ))
2100- then throw(("Name already registered: " + gG))
2147+ let hX = cD(gV)
2148+ let hY = getString(hX)
2149+ if (isDefined(hY))
2150+ then throw(("Name already registered: " + gV))
21012151 else {
2102- let hN = aZ(aM)
2103- let hL = getString(hN)
2104- let hM = if (isDefined(hL))
2105- then [DeleteEntry(cD(value(hL)))]
2152+ let ic = aZ(aM)
2153+ let ia = getString(ic)
2154+ let ib = if (isDefined(ia))
2155+ then [DeleteEntry(cD(value(ia)))]
21062156 else nil
2107- ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM))
2157+ ((ib :+ StringEntry(ic, gV)) :+ StringEntry(hX, aM))
21082158 }
21092159 }
21102160 }
21112161 }
21122162 else throw("Unknown entity type")
21132163 }
2114- $Tuple2(((hH :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), 0)
2164+ $Tuple2(((hW :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), 0)
21152165 }
21162166 }
21172167 }
21182168
21192169
21202170
2121-@Callable(dn)
2122-func setReferrals (hO,hP) = if ((dn.callerPublicKey != cg))
2171+@Callable(dB)
2172+func setReferrals (id,ie) = if ((dB.callerPublicKey != cg))
21232173 then throw("Permission denied")
21242174 else {
2125- let gX = gU(dn)
2126- if ((size(dn.payments) != 0))
2175+ let hm = hj(dB)
2176+ if ((size(dB.payments) != 0))
21272177 then throw("No payments required")
2128- else if (!(isDefined(addressFromString(hO))))
2129- then throw(("Invalid address: " + hO))
2130- else if (!(isDefined(addressFromString(hP))))
2131- then throw(("Invalid address: " + hP))
2178+ else if (!(isDefined(addressFromString(id))))
2179+ then throw(("Invalid address: " + id))
2180+ else if (!(isDefined(addressFromString(ie))))
2181+ then throw(("Invalid address: " + ie))
21322182 else {
2133- let hQ = cF()
2134- let hR = getString(hQ)
2135- let hS = if (isDefined(hR))
2136- then split_4C(value(hR), "_")
2183+ let if = cF()
2184+ let ig = getString(if)
2185+ let ih = if (isDefined(ig))
2186+ then split_4C(value(ig), "_")
21372187 else nil
2138- if (containsElement(hS, hP))
2139- then throw((hP + " is not newbie (already has referrals)"))
2188+ if (containsElement(ih, ie))
2189+ then throw((ie + " is not newbie (already has referrals)"))
21402190 else {
2141- let hT = bb(hP)
2142- let hU = getString(hT)
2143- if (if (isDefined(hU))
2144- then isDefined(addressFromString(value(hU)))
2191+ let ii = bb(ie)
2192+ let ij = getString(ii)
2193+ if (if (isDefined(ij))
2194+ then isDefined(addressFromString(value(ij)))
21452195 else false)
2146- then throw(((hP + " already has refBy: ") + value(hU)))
2196+ then throw(((ie + " already has refBy: ") + value(ij)))
21472197 else {
2148- let hV = bc(hO)
2149- let hW = getString(hV)
2150- let hX = if (isDefined(hW))
2151- then split_4C(value(hW), "_")
2198+ let ik = bc(id)
2199+ let il = getString(ik)
2200+ let im = if (isDefined(il))
2201+ then split_4C(value(il), "_")
21522202 else nil
2153- if (containsElement(hX, hP))
2154- then throw((((hO + " already contains ") + hP) + " within referrals"))
2203+ if (containsElement(im, ie))
2204+ then throw((((id + " already contains ") + ie) + " within referrals"))
21552205 else {
2156- let hY = makeString_2C((hX :+ hP), "_")
2157- let hZ = if (containsElement(hS, hO))
2158- then value(hR)
2159- else makeString_2C((hS :+ hO), "_")
2160- $Tuple2([StringEntry(hT, hO), StringEntry(hV, hY), StringEntry(hQ, hZ), gX], 0)
2206+ let in = makeString_2C((im :+ ie), "_")
2207+ let io = if (containsElement(ih, id))
2208+ then value(ig)
2209+ else makeString_2C((ih :+ id), "_")
2210+ $Tuple2([StringEntry(ii, id), StringEntry(ik, in), StringEntry(if, io), hm], 0)
21612211 }
21622212 }
21632213 }
21662216
21672217
21682218
2169-@Callable(dn)
2170-func splitByGlobalWeightsREADONLY (eC) = $Tuple2(nil, cY(eC))
2171-
2172-
2173-
2174-@Callable(dn)
2175-func splitByGlobalAndLocalWeightsREADONLY (ia,ib,dq) = {
2176- let dj = dp(dq)
2177- $Tuple2(nil, $Tuple2(cY(ia), cR(ib, dj)))
2178- }
2179-
2180-
2181-
2182-@Callable(dn)
2183-func getBackpackREADONLY (bg) = $Tuple2(nil, makeString(dU(bf(bg)), ":"))
2184-
2185-
2186-
2187-@Callable(dn)
2219+@Callable(dB)
2220+func splitByGlobalWeightsREADONLY (eP) = $Tuple2(nil, cZ(eP))
2221+
2222+
2223+
2224+@Callable(dB)
2225+func splitByGlobalAndLocalWeightsREADONLY (ip,iq,dE) = {
2226+ let dx = dD(dE)
2227+ $Tuple2(nil, $Tuple2(cZ(ip), cS(iq, dx)))
2228+ }
2229+
2230+
2231+
2232+@Callable(dB)
2233+func getBackpackREADONLY (bg) = $Tuple2(nil, makeString(ei(bf(bg)), ":"))
2234+
2235+
2236+
2237+@Callable(dB)
21882238 func getWarehouseREADONLY (aW) = {
21892239 let bW = value(assetInfo(fromBase58String(aW)))
2190- let eo = (bA(split(bW.description, "_")[W]) / o)
2191- let ep = valueOrElse(getInteger(aP(aW)), 0)
2192- $Tuple2(nil, makeString_2C(em(aV(aW), eo, ep), ":"))
2193- }
2194-
2195-
2196-
2197-@Callable(dn)
2198-func saveLastTx () = if ((dn.caller != aI))
2240+ let eB = (bA(split(bW.description, "_")[W]) / o)
2241+ let eC = valueOrElse(getInteger(aP(aW)), 0)
2242+ $Tuple2(nil, makeString_2C(ez(aV(aW), eB, eC), ":"))
2243+ }
2244+
2245+
2246+
2247+@Callable(dB)
2248+func saveLastTx () = if ((dB.caller != aI))
21992249 then throw("Access denied")
2200- else $Tuple2([gU(dn)], 42)
2250+ else $Tuple2([hj(dB)], 42)
22012251
22022252
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = take(drop(this.bytes, 1), 1)
55
66 let b = {
77 let c = a
88 if ((base58'2W' == c))
99 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
1010 else if ((base58'2T' == c))
1111 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
1212 else throw("Unknown chain")
1313 }
1414
1515 let d = {
1616 let c = a
1717 if ((base58'2W' == c))
1818 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
1919 else if ((base58'2T' == c))
2020 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
2121 else throw("Unknown chain")
2222 }
2323
2424 let e = {
2525 let c = a
2626 if ((base58'2W' == c))
2727 then 10000000000
2828 else if ((base58'2T' == c))
2929 then 100000000
3030 else throw("Unknown chain")
3131 }
3232
3333 let f = "__"
3434
3535 let g = 1000000
3636
3737 let h = 10000000
3838
3939 let i = 100000000
4040
4141 let j = 10000000000
4242
4343 let k = "LAND"
4444
4545 let l = "DUCK"
4646
4747 let m = "PRESALE"
4848
4949 let n = 6
5050
5151 let o = 25
5252
5353 let p = 100
5454
5555 let q = 225
5656
5757 let r = 400
5858
5959 let s = 625
6060
6161 let t = 3456000
6262
6363 let u = 86400000
6464
6565 let v = 10000000000
6666
6767 let w = "Africa_F_Africa"
6868
6969 let x = 39637
7070
7171 let y = 3
7272
7373 let z = 4
7474
7575 let A = 10
7676
7777 let B = 100
7878
7979 let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
8080
8181 let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
8282
8383 let E = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"]
8484
8585 let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
8686
8787 let G = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
8888
8989 let H = 0
9090
9191 let I = 1
9292
9393 let J = 2
9494
9595 let K = 3
9696
9797 let L = 4
9898
9999 let M = 0
100100
101101 let N = 1
102102
103103 let O = 2
104104
105105 let P = 3
106106
107107 let Q = 4
108108
109109 let R = 5
110110
111111 let S = 6
112112
113113 let T = 7
114114
115115 let U = 8
116116
117117 let V = 0
118118
119119 let W = 1
120120
121121 let X = 2
122122
123123 let Y = 3
124124
125125 let Z = 0
126126
127127 let aa = 1
128128
129129 let ab = 2
130130
131131 let ac = 3
132132
133133 let ad = 4
134134
135135 let ae = 0
136136
137137 let af = 1
138138
139139 let ag = 2
140140
141141 let ah = 3
142142
143143 let ai = 0
144144
145145 let aj = 1
146146
147147 let ak = 2
148148
149149 let al = 3
150150
151151 func am (an) = parseIntValue(split(G[an], "_")[T])
152152
153153
154154 func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
155155
156156
157157 func ar (aq,as) = valueOrElse(getInteger(this, aq), as)
158158
159159
160160 let at = 1
161161
162162 let au = 2
163163
164164 let av = 3
165165
166166 let aw = 4
167167
168168 func ax () = "%s__restConfig"
169169
170170
171171 func ay () = "%s__restAddr"
172172
173173
174174 func az (aA) = split_4C(ao(aA, ax()), f)
175175
176176
177177 func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD)))
178178
179179
180180 let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d))
181181
182182 let aC = az(aE)
183183
184184 let aF = aB(aC, at)
185185
186186 let aG = aB(aC, au)
187187
188188 let aH = aB(aC, av)
189189
190190 let aI = aB(aC, aw)
191191
192192 func aJ (aK) = ("lastTxIdByUser_" + aK)
193193
194194
195195 func aL (aM) = ("nftOwner_" + aM)
196196
197197
198198 func aN (aM) = ("landCustomNameByAssetId_" + aM)
199199
200200
201201 func aO (aM) = ("stakedTime_" + aM)
202202
203203
204204 func aP (aM) = ("infraLevel_" + aM)
205205
206206
207207 func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_")
208208
209209
210210 func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU)
211211
212212
213213 func aV (aW) = ("wareHouse_" + aW)
214214
215215
216216 func aX (aU) = ("stakedLandsByOwner_" + aU)
217217
218218
219219 func aY (aU) = ("stakedPiecesByOwner_" + aU)
220220
221221
222222 func aZ (aM) = ("duckCustomNameByAssetId_" + aM)
223223
224224
225225 func ba (aK) = ("accountCustomNameByAddr_" + aK)
226226
227227
228228 func bb (aK) = ("accRefBy_" + aK)
229229
230230
231231 func bc (aK) = ("accReferrals_" + aK)
232232
233233
234234 func bd (aM) = ("duckOwner_" + aM)
235235
236236
237237 func be (aU) = ("stakedDuckByOwner_" + aU)
238238
239239
240240 func bf (bg) = ("backPack_" + bg)
241241
242242
243243 func bh (bg) = ("duckLocation_" + bg)
244244
245245
246246 func bi (bg) = ("duckHealth_" + bg)
247247
248248
249249 func bj () = "resTypesProportions"
250250
251251
252252 func bk () = "contractsBlocked"
253253
254254
255255 func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm)
256256
257257
258258 func bn (aW) = ("landOrder_" + aW)
259259
260260
261261 func bo () = "emergencyWarehouseProducts"
262262
263263
264264 let bp = 0
265265
266266 let bq = 1
267267
268268 let br = 2
269269
270270 func bs (bt) = {
271271 let c = bt
272272 if ($isInstanceOf(c, "String"))
273273 then {
274274 let bu = c
275275 bu
276276 }
277277 else throw("fail to cast into String")
278278 }
279279
280280
281281 func bv (bt) = {
282282 let c = bt
283283 if ($isInstanceOf(c, "Int"))
284284 then {
285285 let bw = c
286286 bw
287287 }
288288 else throw("fail to cast into Int")
289289 }
290290
291291
292292 func bx (bt) = {
293293 let c = bt
294294 if ($isInstanceOf(c, "List[Any]"))
295295 then {
296296 let by = c
297297 by
298298 }
299299 else throw("fail to cast into List[Any]")
300300 }
301301
302302
303303 func bz (bt) = {
304304 let c = bt
305305 if ($isInstanceOf(c, "Boolean"))
306306 then {
307307 let bu = c
308308 bu
309309 }
310310 else throw("fail to cast into Boolean")
311311 }
312312
313313
314314 func bA (bB) = {
315315 let c = bB
316316 if (("S" == c))
317317 then o
318318 else if (("M" == c))
319319 then p
320320 else if (("L" == c))
321321 then q
322322 else if (("XL" == c))
323323 then r
324324 else if (("XXL" == c))
325325 then s
326326 else throw("Unknown land size")
327327 }
328328
329329
330330 let bC = 0
331331
332332 let bD = 1
333333
334334 func bE (bF) = {
335335 let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_")
336336 func bH (bI,bJ) = (bI + parseIntValue(bJ))
337337
338338 let bK = {
339339 let bL = bG
340340 let bM = size(bL)
341341 let bN = 0
342342 func bO (bP,bQ) = if ((bQ >= bM))
343343 then bP
344344 else bH(bP, bL[bQ])
345345
346346 func bR (bP,bQ) = if ((bQ >= bM))
347347 then bP
348348 else throw("List size exceeds 6")
349349
350350 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
351351 }
352352 let bS = if ((bF == ""))
353353 then 0
354354 else {
355355 let bT = getString(aF, aX(bF))
356356 let bU = if (isDefined(bT))
357357 then split_51C(value(bT), "_")
358358 else nil
359359 func bV (bI,aW) = {
360360 let bW = value(assetInfo(fromBase58String(aW)))
361361 let bB = split(bW.description, "_")[W]
362362 (bI + bA(bB))
363363 }
364364
365365 let bL = bU
366366 let bM = size(bL)
367367 let bN = 0
368368 func bX (bP,bQ) = if ((bQ >= bM))
369369 then bP
370370 else bV(bP, bL[bQ])
371371
372372 func bY (bP,bQ) = if ((bQ >= bM))
373373 then bP
374374 else throw("List size exceeds 100")
375375
376376 bY(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
377377 }
378378 [bK, bS]
379379 }
380380
381381
382382 func bZ (ca) = {
383383 func cb (cc,cd) = (cc + parseIntValue(ca[cd]))
384384
385385 let bL = [0, 1, 2, 3, 4, 5]
386386 let bM = size(bL)
387387 let bN = 0
388388 func bO (bP,bQ) = if ((bQ >= bM))
389389 then bP
390390 else cb(bP, bL[bQ])
391391
392392 func bR (bP,bQ) = if ((bQ >= bM))
393393 then bP
394394 else throw("List size exceeds 6")
395395
396396 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
397397 }
398398
399399
400400 let ce = {
401401 let c = a
402402 if ((base58'2W' == c))
403403 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
404404 else if ((base58'2T' == c))
405405 then this
406406 else throw("Unknown chain")
407407 }
408408
409409 let cf = {
410410 let c = a
411411 if ((base58'2W' == c))
412412 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
413413 else if ((base58'2T' == c))
414414 then this
415415 else throw("Unknown chain")
416416 }
417417
418418 let cg = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
419419
420420 let ch = [30, 60, 120]
421421
422422 let ci = 300000
423423
424424 let cj = 5000000
425425
426426 let ck = 50
427427
428428 let cl = 10000000
429429
430430 let cm = {
431431 let c = a
432432 if ((base58'2W' == c))
433433 then 252289527462
434434 else if ((base58'2T' == c))
435435 then 2522895274
436436 else throw("Unknown chain")
437437 }
438438
439439 let cn = {
440440 let c = a
441441 if ((base58'2W' == c))
442442 then 250000000
443443 else if ((base58'2T' == c))
444444 then 250000000
445445 else throw("Unknown chain")
446446 }
447447
448448 let co = toBigInt(5)
449449
450450 let cp = toBigInt(20)
451451
452452 let cq = toBigInt((20 * 20))
453453
454454 let cr = toBigInt(((20 * 20) * 20))
455455
456456 let cs = toBigInt((((20 * 20) * 20) * 20))
457457
458458 let ct = toBigInt(((((20 * 20) * 20) * 20) * 20))
459459
460460 let cu = 500
461461
462462 func cv () = "nextLandNum"
463463
464464
465465 func cw (cx) = ("landToAsset_" + cx)
466466
467467
468468 func cy (cz) = ("landByCustomName_" + cz)
469469
470470
471471 func cA (aM,aU) = ((("infraLevelByAssetIdAndOwner_" + aM) + "_") + aU)
472472
473473
474474 func cB (aR,aM,aU) = makeString(["landArtStatusByTypeAssetIdAndOwner", aR, aM, aU], "_")
475475
476476
477477 func cC (cx) = ("landOwner_" + cx)
478478
479479
480480 func cD (cz) = ("duckByCustomName_" + cz)
481481
482482
483483 func cE (cz) = ("accountByCustomName_" + cz)
484484
485485
486486 func cF () = "oldiesList"
487487
488488
489489 let cG = 0
490490
491491 let cH = 1
492492
493493 let cI = 2
494494
495495 let cJ = 0
496496
497497 let cK = 1
498498
499499 let cL = 2
500500
501501 let cM = 3
502502
503503 let cN = 4
504504
505505 let cO = 5
506506
507507 let cP = 6
508508
509-func cQ (cx,bB) = ((k + cx) + bB)
510-
511-
512-func cR (cS,cT) = {
513- let cU = (((((cT[0] + cT[1]) + cT[2]) + cT[3]) + cT[4]) + cT[5])
514- if ((0 >= cU))
509+let cQ = 7
510+
511+func cR (cx,bB) = ((k + cx) + bB)
512+
513+
514+func cS (cT,cU) = {
515+ let cV = (((((cU[0] + cU[1]) + cU[2]) + cU[3]) + cU[4]) + cU[5])
516+ if ((0 >= cV))
515517 then throw("Zero weights sum")
516518 else {
517- let cV = fraction(cS, g, cU)
518- func cW (bI,cX) = (bI :+ fraction(cX, cV, g))
519-
520- let bL = cT
519+ let cW = fraction(cT, g, cV)
520+ func cX (bI,cY) = (bI :+ fraction(cY, cW, g))
521+
522+ let bL = cU
521523 let bM = size(bL)
522524 let bN = nil
523525 func bO (bP,bQ) = if ((bQ >= bM))
524526 then bP
525- else cW(bP, bL[bQ])
527+ else cX(bP, bL[bQ])
526528
527529 func bR (bP,bQ) = if ((bQ >= bM))
528530 then bP
529531 else throw("List size exceeds 6")
530532
531533 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
532534 }
533535 }
534536
535537
536-func cY (cS) = {
538+func cZ (cT) = {
537539 let bG = split(value(getString(bj())), "_")
538540 if ((size(bG) != n))
539541 then throw("Wrong proportions data")
540542 else {
541- let cZ = [parseIntValue(bG[0]), parseIntValue(bG[1]), parseIntValue(bG[2]), parseIntValue(bG[3]), parseIntValue(bG[4]), parseIntValue(bG[5])]
542- cR(cS, cZ)
543- }
544- }
545-
546-
547-func da (db,dc,dd) = {
548- let de = cY(dd)
549- func df (bI,aD) = {
550- let dg = (parseIntValue(dc[aD]) - de[aD])
551- if ((0 > dg))
552- then throw(((((("Not enough material idx=" + toString(aD)) + ", you have ") + dc[aD]) + ", but need ") + toString(de[aD])))
553- else (bI :+ toString(dg))
543+ let da = [parseIntValue(bG[0]), parseIntValue(bG[1]), parseIntValue(bG[2]), parseIntValue(bG[3]), parseIntValue(bG[4]), parseIntValue(bG[5])]
544+ cS(cT, da)
545+ }
546+ }
547+
548+
549+func db (dc,dd,de) = {
550+ let df = cZ(de)
551+ func dg (bI,aD) = {
552+ let dh = (parseIntValue(dd[aD]) - df[aD])
553+ if ((0 > dh))
554+ then throw(((((("Not enough material idx=" + toString(aD)) + ", you have ") + dd[aD]) + ", but need ") + toString(df[aD])))
555+ else (bI :+ toString(dh))
554556 }
555557
556- if (db)
558+ if (dc)
557559 then {
558560 let bL = [0, 1, 2, 3, 4, 5]
559561 let bM = size(bL)
560562 let bN = nil
561563 func bO (bP,bQ) = if ((bQ >= bM))
562564 then bP
563- else df(bP, bL[bQ])
565+ else dg(bP, bL[bQ])
564566
565567 func bR (bP,bQ) = if ((bQ >= bM))
566568 then bP
567569 else throw("List size exceeds 6")
568570
569571 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
570572 }
571- else dc
572- }
573-
574-
575-func dh (di,dj,dk,dl) = if ((size(di) != n))
573+ else dd
574+ }
575+
576+
577+func di (dj,dk) = if ((dk == ""))
578+ then dj
579+ else {
580+ let dl = if ((dj == ""))
581+ then nil
582+ else split(dj, "_")
583+ func dm (bI,bJ) = {
584+ let cd = bI._1
585+ func dn (cc,do) = {
586+ let dp = split(do, ",")
587+ if ((size(dp) != 2))
588+ then throw("Incorrect format, should be index,amount")
589+ else {
590+ let aD = parseIntValue(dp[0])
591+ if (if ((0 > aD))
592+ then true
593+ else (aD >= size(G)))
594+ then throw("Unknown product idx")
595+ else if ((aD != cd))
596+ then cc
597+ else {
598+ let dq = parseIntValue(dp[1])
599+ if ((0 >= dq))
600+ then throw("Pass only positive amounts")
601+ else (cc + dq)
602+ }
603+ }
604+ }
605+
606+ let dr = {
607+ let bL = split(dk, "_")
608+ let bM = size(bL)
609+ let bN = 0
610+ func bO (bP,bQ) = if ((bQ >= bM))
611+ then bP
612+ else dn(bP, bL[bQ])
613+
614+ func bR (bP,bQ) = if ((bQ >= bM))
615+ then bP
616+ else throw("List size exceeds 10")
617+
618+ bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
619+ }
620+ let ds = if ((size(dl) > cd))
621+ then parseIntValue(dl[cd])
622+ else 0
623+ let dt = if ((dr > ds))
624+ then throw(((((("You have " + toString(ds)) + " of ") + E[cd]) + ", but tried to use ") + toString(dr)))
625+ else (ds - dr)
626+ $Tuple2((cd + 1), (bI._2 :+ toString(dt)))
627+ }
628+
629+ let du = {
630+ let bL = G
631+ let bM = size(bL)
632+ let bN = $Tuple2(0, nil)
633+ func bO (bP,bQ) = if ((bQ >= bM))
634+ then bP
635+ else dm(bP, bL[bQ])
636+
637+ func bR (bP,bQ) = if ((bQ >= bM))
638+ then bP
639+ else throw("List size exceeds 50")
640+
641+ bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
642+ }
643+ makeString(du._2, "_")
644+ }
645+
646+
647+func dv (dw,dx,dy,dz) = if ((size(dw) != n))
576648 then throw("Wrong proportions data")
577649 else {
578- func dm (bI,dn) = {
579- let dg = (parseIntValue(di[dn]) + ((dl * dj[dn]) * dk))
580- if ((0 > dg))
581- then throw(((((((("Panic! Pieces of type=" + toString(dn)) + ", sign=") + toString(dl)) + ", terrainCounts[i]=") + toString(dj[dn])) + ", landSizeIndex=") + toString(dk)))
582- else (bI :+ toString(dg))
583- }
584-
585- let cZ = {
650+ func dA (bI,dB) = {
651+ let dh = (parseIntValue(dw[dB]) + ((dz * dx[dB]) * dy))
652+ if ((0 > dh))
653+ then throw(((((((("Panic! Pieces of type=" + toString(dB)) + ", sign=") + toString(dz)) + ", terrainCounts[i]=") + toString(dx[dB])) + ", landSizeIndex=") + toString(dy)))
654+ else (bI :+ toString(dh))
655+ }
656+
657+ let da = {
586658 let bL = [0, 1, 2, 3, 4, 5]
587659 let bM = size(bL)
588660 let bN = nil
589661 func bO (bP,bQ) = if ((bQ >= bM))
590662 then bP
591- else dm(bP, bL[bQ])
663+ else dA(bP, bL[bQ])
592664
593665 func bR (bP,bQ) = if ((bQ >= bM))
594666 then bP
595667 else throw("List size exceeds 6")
596668
597669 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
598670 }
599- makeString(cZ, "_")
671+ makeString(da, "_")
600672 }
601673
602674
603-func do (dj,dk,dl) = {
604- let di = split(valueOrElse(getString(bj()), "0_0_0_0_0_0"), "_")
605- dh(di, dj, dk, dl)
606- }
607-
608-
609-func dp (dq) = [(size(split(dq, "A")) - 1), (size(split(dq, "B")) - 1), (size(split(dq, "C")) - 1), (size(split(dq, "D")) - 1), (size(split(dq, "E")) - 1), (size(split(dq, "F")) - 1)]
610-
611-
612-func dr (ds,dj,dt,dk,du) = {
613- func bH (bI,dn) = {
614- let dv = ((fraction(dt, du, u) * dj[dn]) * dk)
615- (bI :+ toString((parseIntValue(ds[dn]) + dv)))
675+func dC (dx,dy,dz) = {
676+ let dw = split(valueOrElse(getString(bj()), "0_0_0_0_0_0"), "_")
677+ dv(dw, dx, dy, dz)
678+ }
679+
680+
681+func dD (dE) = [(size(split(dE, "A")) - 1), (size(split(dE, "B")) - 1), (size(split(dE, "C")) - 1), (size(split(dE, "D")) - 1), (size(split(dE, "E")) - 1), (size(split(dE, "F")) - 1)]
682+
683+
684+func dF (dG,dx,dH,dy,dI) = {
685+ func bH (bI,dB) = {
686+ let dJ = ((fraction(dH, dI, u) * dx[dB]) * dy)
687+ (bI :+ toString((parseIntValue(dG[dB]) + dJ)))
616688 }
617689
618- let cZ = {
690+ let da = {
619691 let bL = [0, 1, 2, 3, 4, 5]
620692 let bM = size(bL)
621693 let bN = nil
622694 func bO (bP,bQ) = if ((bQ >= bM))
623695 then bP
624696 else bH(bP, bL[bQ])
625697
626698 func bR (bP,bQ) = if ((bQ >= bM))
627699 then bP
628700 else throw("List size exceeds 6")
629701
630702 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
631703 }
632- makeString(cZ, "_")
633- }
634-
635-
636-func dw (dj,dt,dk,du) = {
637- func bH (bI,dn) = {
638- let dv = ((fraction(dt, du, u) * dj[dn]) * dk)
639- $Tuple2((bI._1 :+ dv), (bI._2 + dv))
704+ makeString(da, "_")
705+ }
706+
707+
708+func dK (dx,dH,dy,dI) = {
709+ func bH (bI,dB) = {
710+ let dJ = ((fraction(dH, dI, u) * dx[dB]) * dy)
711+ $Tuple2((bI._1 :+ dJ), (bI._2 + dJ))
640712 }
641713
642714 let bL = [0, 1, 2, 3, 4, 5]
643715 let bM = size(bL)
644716 let bN = $Tuple2(nil, 0)
645717 func bO (bP,bQ) = if ((bQ >= bM))
646718 then bP
647719 else bH(bP, bL[bQ])
648720
649721 func bR (bP,bQ) = if ((bQ >= bM))
650722 then bP
651723 else throw("List size exceeds 6")
652724
653725 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
654726 }
655727
656728
657-func dx (dy,dz,dA,dB) = {
658- let dC = dA._1
659- let dD = dA._2
660- if ((dD == 0))
661- then $Tuple2(makeString(dy, "_"), makeString(dz, "_"))
662- else if ((dB >= dD))
729+func dL (dM,dN,dO,dP) = {
730+ let dQ = dO._1
731+ let dR = dO._2
732+ if ((dR == 0))
733+ then $Tuple2(makeString(dM, "_"), makeString(dN, "_"))
734+ else if ((dP >= dR))
663735 then {
664- func dE (bI,dn) = (bI :+ toString((parseIntValue(dy[dn]) + dC[dn])))
665-
666- let cZ = {
736+ func dS (bI,dB) = (bI :+ toString((parseIntValue(dM[dB]) + dQ[dB])))
737+
738+ let da = {
667739 let bL = [0, 1, 2, 3, 4, 5]
668740 let bM = size(bL)
669741 let bN = nil
670742 func bO (bP,bQ) = if ((bQ >= bM))
671743 then bP
672- else dE(bP, bL[bQ])
744+ else dS(bP, bL[bQ])
673745
674746 func bR (bP,bQ) = if ((bQ >= bM))
675747 then bP
676748 else throw("List size exceeds 6")
677749
678750 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
679751 }
680- $Tuple2(makeString(cZ, "_"), makeString(dz, "_"))
752+ $Tuple2(makeString(da, "_"), makeString(dN, "_"))
681753 }
682754 else {
683- func dF (bI,dn) = {
684- let dG = fraction(dC[dn], dB, dD)
685- $Tuple2((bI._1 :+ toString((parseIntValue(dy[dn]) + dG))), (bI._2 :+ toString(((parseIntValue(dz[dn]) + dC[dn]) - dG))))
755+ func dT (bI,dB) = {
756+ let dU = fraction(dQ[dB], dP, dR)
757+ $Tuple2((bI._1 :+ toString((parseIntValue(dM[dB]) + dU))), (bI._2 :+ toString(((parseIntValue(dN[dB]) + dQ[dB]) - dU))))
686758 }
687759
688- let cZ = {
760+ let da = {
689761 let bL = [0, 1, 2, 3, 4, 5]
690762 let bM = size(bL)
691763 let bN = $Tuple2(nil, nil)
692764 func bO (bP,bQ) = if ((bQ >= bM))
693765 then bP
694- else dF(bP, bL[bQ])
766+ else dT(bP, bL[bQ])
695767
696768 func bR (bP,bQ) = if ((bQ >= bM))
697769 then bP
698770 else throw("List size exceeds 6")
699771
700772 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
701773 }
702- $Tuple2(makeString(cZ._1, "_"), makeString(cZ._2, "_"))
774+ $Tuple2(makeString(da._1, "_"), makeString(da._2, "_"))
703775 }
704776 }
705777
706778
707-func dH (dI) = if ((dI >= toBigInt(0)))
708- then dI
709- else -(dI)
710-
711-
712-let dJ = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
713-
714-func dK (bw,dL) = {
715- let dM = toInt((bw % cp))
716- let dN = if ((dL[0] > dM))
779+func dV (dW) = if ((dW >= toBigInt(0)))
780+ then dW
781+ else -(dW)
782+
783+
784+let dX = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
785+
786+func dY (bw,dZ) = {
787+ let ea = toInt((bw % cp))
788+ let eb = if ((dZ[0] > ea))
717789 then "A"
718- else if ((dL[1] > dM))
790+ else if ((dZ[1] > ea))
719791 then "B"
720- else if ((dL[2] > dM))
792+ else if ((dZ[2] > ea))
721793 then "C"
722- else if ((dL[3] > dM))
794+ else if ((dZ[3] > ea))
723795 then "D"
724- else if ((dL[4] > dM))
796+ else if ((dZ[4] > ea))
725797 then "E"
726798 else "F"
727- dN
728- }
729-
730-
731-func dO (dP,dQ) = {
732- let dR = dJ[dQ]
733- func dS (bI,cX) = $Tuple2((((((bI._1 + dK(bI._2, dR)) + dK((bI._2 / cp), dR)) + dK((bI._2 / cq), dR)) + dK((bI._2 / cr), dR)) + dK((bI._2 / cs), dR)), (bI._2 / ct))
734-
735- let dT = {
799+ eb
800+ }
801+
802+
803+func ec (ed,ee) = {
804+ let ef = dX[ee]
805+ func eg (bI,cY) = $Tuple2((((((bI._1 + dY(bI._2, ef)) + dY((bI._2 / cp), ef)) + dY((bI._2 / cq), ef)) + dY((bI._2 / cr), ef)) + dY((bI._2 / cs), ef)), (bI._2 / ct))
806+
807+ let eh = {
736808 let bL = [1, 2, 3, 4, 5]
737809 let bM = size(bL)
738- let bN = $Tuple2("", (dP / co))
810+ let bN = $Tuple2("", (ed / co))
739811 func bO (bP,bQ) = if ((bQ >= bM))
740812 then bP
741- else dS(bP, bL[bQ])
813+ else eg(bP, bL[bQ])
742814
743815 func bR (bP,bQ) = if ((bQ >= bM))
744816 then bP
745817 else throw("List size exceeds 5")
746818
747819 bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
748820 }
749- dT._1
750- }
751-
752-
753-func dU (dV) = {
754- let dW = split(valueOrElse(getString(dV), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
755-[toString(valueOrElse(parseInt(dW[ai]), 0)), if ((size(split(dW[aj], "_")) == n))
756- then dW[aj]
757- else "0_0_0_0_0_0", if ((size(split(dW[ak], "_")) == n))
758- then dW[ak]
759- else "0_0_0_0_0_0", dW[al]]
760- }
761-
762-
763-func dX (dY) = {
764- let dZ = split(dY, "_")
765- ((v * (parseIntValue(dZ[1]) + 1)) * parseIntValue(dZ[0]))
766- }
767-
768-
769-func ea (eb) = {
770- let ec = eb[ac]
771- func ed (bI,bJ) = (bI + parseIntValue(bJ))
772-
773- func ee (bI,bJ) = {
821+ eh._1
822+ }
823+
824+
825+func ei (ej) = {
826+ let ek = split(valueOrElse(getString(ej), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
827+[toString(valueOrElse(parseInt(ek[ai]), 0)), if ((size(split(ek[aj], "_")) == n))
828+ then ek[aj]
829+ else "0_0_0_0_0_0", if ((size(split(ek[ak], "_")) == n))
830+ then ek[ak]
831+ else "0_0_0_0_0_0", ek[al]]
832+ }
833+
834+
835+func el (em) = {
836+ let dp = split(em, "_")
837+ ((v * (parseIntValue(dp[1]) + 1)) * parseIntValue(dp[0]))
838+ }
839+
840+
841+func en (eo) = {
842+ let ep = eo[ac]
843+ func eq (bI,bJ) = (bI + parseIntValue(bJ))
844+
845+ func er (bI,bJ) = {
774846 let aD = bI._1
775- let ef = am(aD)
776- let eg = (((parseIntValue(bJ) + ef) - 1) / ef)
777- $Tuple2((aD + 1), (bI._2 + (eg * i)))
847+ let es = am(aD)
848+ let et = (((parseIntValue(bJ) + es) - 1) / es)
849+ $Tuple2((aD + 1), (bI._2 + (et * i)))
778850 }
779851
780- let eh = {
781- let bL = split(eb[aa], "_")
852+ let eu = {
853+ let bL = split(eo[aa], "_")
782854 let bM = size(bL)
783855 let bN = 0
784856 func bO (bP,bQ) = if ((bQ >= bM))
785857 then bP
786- else ed(bP, bL[bQ])
858+ else eq(bP, bL[bQ])
787859
788860 func bR (bP,bQ) = if ((bQ >= bM))
789861 then bP
790862 else throw("List size exceeds 6")
791863
792864 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
793865 }
794- let ei = {
795- let bL = split(eb[ab], "_")
866+ let ev = {
867+ let bL = split(eo[ab], "_")
796868 let bM = size(bL)
797869 let bN = 0
798870 func bX (bP,bQ) = if ((bQ >= bM))
799871 then bP
800- else ed(bP, bL[bQ])
872+ else eq(bP, bL[bQ])
801873
802874 func bY (bP,bQ) = if ((bQ >= bM))
803875 then bP
804876 else throw("List size exceeds 6")
805877
806878 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
807879 }
808- let ej = if ((ec == ""))
880+ let ew = if ((ep == ""))
809881 then 0
810- else ( let bL = split_4C(ec, "_")
882+ else ( let bL = split_4C(ep, "_")
811883 let bM = size(bL)
812884 let bN = $Tuple2(0, 0)
813- func ek (bP,bQ) = if ((bQ >= bM))
885+ func ex (bP,bQ) = if ((bQ >= bM))
814886 then bP
815- else ee(bP, bL[bQ])
816-
817- func el (bP,bQ) = if ((bQ >= bM))
887+ else er(bP, bL[bQ])
888+
889+ func ey (bP,bQ) = if ((bQ >= bM))
818890 then bP
819891 else throw("List size exceeds 50")
820892
821- el(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
822- ((eh + ei) + ej)
823- }
824-
825-
826-func em (en,eo,ep) = {
827- let dY = ((toString(eo) + "_") + toString(ep))
828- let eq = dX(dY)
829- let er = valueOrElse(getString(en), (dY + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
830- let es = split_4C(er, ":")
831- let et = ea(es)
832- let eu = if ((5 > size(es)))
833- then makeString(["0", toString(et), toString((eq - et)), toString(eq)], "_")
834- else {
835- let ev = split(es[ad], "_")
836- let ew = parseIntValue(ev[ae])
837- let ex = if ((size(ev) > 1))
838- then parseIntValue(ev[af])
839- else et
840- makeString([toString(ew), toString(ex), toString(((eq - ew) - ex)), toString(eq)], "_")
841- }
842-[es[Z], if ((size(split(es[aa], "_")) == n))
843- then es[aa]
844- else "0_0_0_0_0_0", if ((size(split(es[ab], "_")) == n))
845- then es[ab]
846- else "0_0_0_0_0_0", es[ac], eu]
847- }
848-
849-
850-func ey (eb) = {
851- let ez = ea(eb)
852- let eA = parseIntValue(split(eb[ad], "_")[ae])
853- ((dX(eb[Z]) - ez) - eA)
854- }
855-
856-
857-func eB (eC,ef) = {
858- let eg = if ((eC >= 0))
859- then (((eC + ef) - 1) / ef)
860- else -((((-(eC) + ef) - 1) / ef))
861- (eg * i)
862- }
863-
864-
865-func eD (eE,eb,eF) = if ((size(eE) != 3))
893+ ey(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
894+ ((eu + ev) + ew)
895+ }
896+
897+
898+func ez (eA,eB,eC) = {
899+ let em = ((toString(eB) + "_") + toString(eC))
900+ let eD = el(em)
901+ let eE = valueOrElse(getString(eA), (em + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
902+ let eF = split_4C(eE, ":")
903+ let eG = en(eF)
904+ let eH = if ((5 > size(eF)))
905+ then makeString(["0", toString(eG), toString((eD - eG)), toString(eD)], "_")
906+ else {
907+ let eI = split(eF[ad], "_")
908+ let eJ = parseIntValue(eI[ae])
909+ let eK = if ((size(eI) > 1))
910+ then parseIntValue(eI[af])
911+ else eG
912+ makeString([toString(eJ), toString(eK), toString(((eD - eJ) - eK)), toString(eD)], "_")
913+ }
914+[eF[Z], if ((size(split(eF[aa], "_")) == n))
915+ then eF[aa]
916+ else "0_0_0_0_0_0", if ((size(split(eF[ab], "_")) == n))
917+ then eF[ab]
918+ else "0_0_0_0_0_0", eF[ac], eH]
919+ }
920+
921+
922+func eL (eo) = {
923+ let eM = en(eo)
924+ let eN = parseIntValue(split(eo[ad], "_")[ae])
925+ ((el(eo[Z]) - eM) - eN)
926+ }
927+
928+
929+func eO (eP,es) = {
930+ let et = if ((eP >= 0))
931+ then (((eP + es) - 1) / es)
932+ else -((((-(eP) + es) - 1) / es))
933+ (et * i)
934+ }
935+
936+
937+func eQ (eR,eo,eS) = if ((size(eR) != 3))
866938 then throw("cargoListStr should contain exactly 2 ':' separators")
867939 else {
868- let eG = split(eE[0], "_")
869- let eH = split(eE[1], "_")
870- let eI = if ((eE[2] == ""))
940+ let eT = split(eR[0], "_")
941+ let eU = split(eR[1], "_")
942+ let eV = if ((eR[2] == ""))
871943 then nil
872- else split(eE[2], "_")
873- if ((size(eG) != n))
944+ else split(eR[2], "_")
945+ if ((size(eT) != n))
874946 then throw("All 6 resources should be passed")
875- else if ((size(eH) != n))
947+ else if ((size(eU) != n))
876948 then throw("All 6 materials should be passed")
877949 else {
878- let dB = ey(eb)
879- let eJ = split(eb[aa], "_")
880- let eK = split(eb[ab], "_")
881- let eL = if ((eb[ac] == ""))
950+ let dP = eL(eo)
951+ let eW = split(eo[aa], "_")
952+ let eX = split(eo[ab], "_")
953+ let eY = if ((eo[ac] == ""))
882954 then nil
883- else split(eb[ac], "_")
884- let dz = split(eF[aj], "_")
885- let eM = split(eF[ak], "_")
886- let eN = if ((eF[al] == ""))
955+ else split(eo[ac], "_")
956+ let dN = split(eS[aj], "_")
957+ let eZ = split(eS[ak], "_")
958+ let fa = if ((eS[al] == ""))
887959 then nil
888- else split(eF[al], "_")
889- func eO (bI,bJ) = {
890- let dn = bI._1
891- let eP = parseIntValue(bJ)
892- let eQ = parseIntValue(eJ[dn])
893- let eR = parseIntValue(dz[dn])
894- if ((eP == 0))
895- then $Tuple4((dn + 1), (bI._2 :+ eJ[dn]), (bI._3 :+ dz[dn]), bI._4)
896- else if ((eP > 0))
897- then if ((eP > eR))
898- then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eR)) + " available"))
899- else $Tuple4((dn + 1), (bI._2 :+ toString((eQ + eP))), (bI._3 :+ toString((eR - eP))), (bI._4 + eP))
900- else if ((-(eP) > eQ))
901- then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eQ)) + " available"))
902- else $Tuple4((dn + 1), (bI._2 :+ toString((eQ + eP))), (bI._3 :+ toString((eR - eP))), (bI._4 + eP))
960+ else split(eS[al], "_")
961+ func fb (bI,bJ) = {
962+ let dB = bI._1
963+ let fc = parseIntValue(bJ)
964+ let fd = parseIntValue(eW[dB])
965+ let fe = parseIntValue(dN[dB])
966+ if ((fc == 0))
967+ then $Tuple4((dB + 1), (bI._2 :+ eW[dB]), (bI._3 :+ dN[dB]), bI._4)
968+ else if ((fc > 0))
969+ then if ((fc > fe))
970+ then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(fe)) + " available"))
971+ else $Tuple4((dB + 1), (bI._2 :+ toString((fd + fc))), (bI._3 :+ toString((fe - fc))), (bI._4 + fc))
972+ else if ((-(fc) > fd))
973+ then throw((((("Attempt to take " + toString(-(fc))) + " from warehouse, but only ") + toString(fd)) + " available"))
974+ else $Tuple4((dB + 1), (bI._2 :+ toString((fd + fc))), (bI._3 :+ toString((fe - fc))), (bI._4 + fc))
903975 }
904976
905- let cZ = {
906- let bL = eG
977+ let da = {
978+ let bL = eT
907979 let bM = size(bL)
908980 let bN = $Tuple4(0, nil, nil, 0)
909981 func bO (bP,bQ) = if ((bQ >= bM))
910982 then bP
911- else eO(bP, bL[bQ])
983+ else fb(bP, bL[bQ])
912984
913985 func bR (bP,bQ) = if ((bQ >= bM))
914986 then bP
915987 else throw("List size exceeds 6")
916988
917989 bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
918990 }
919- func eS (bI,bJ) = {
920- let dn = bI._1
921- let eP = parseIntValue(bJ)
922- let eT = parseIntValue(eK[dn])
923- let eU = parseIntValue(eM[dn])
924- if ((eP == 0))
925- then $Tuple4((dn + 1), (bI._2 :+ eK[dn]), (bI._3 :+ eM[dn]), bI._4)
926- else if ((eP > 0))
927- then if ((eP > eU))
928- then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eU)) + " available"))
929- else $Tuple4((dn + 1), (bI._2 :+ toString((eT + eP))), (bI._3 :+ toString((eU - eP))), (bI._4 + eP))
930- else if ((-(eP) > eT))
931- then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eT)) + " available"))
932- else $Tuple4((dn + 1), (bI._2 :+ toString((eT + eP))), (bI._3 :+ toString((eU - eP))), (bI._4 + eP))
991+ func ff (bI,bJ) = {
992+ let dB = bI._1
993+ let fc = parseIntValue(bJ)
994+ let fg = parseIntValue(eX[dB])
995+ let fh = parseIntValue(eZ[dB])
996+ if ((fc == 0))
997+ then $Tuple4((dB + 1), (bI._2 :+ eX[dB]), (bI._3 :+ eZ[dB]), bI._4)
998+ else if ((fc > 0))
999+ then if ((fc > fh))
1000+ then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(fh)) + " available"))
1001+ else $Tuple4((dB + 1), (bI._2 :+ toString((fg + fc))), (bI._3 :+ toString((fh - fc))), (bI._4 + fc))
1002+ else if ((-(fc) > fg))
1003+ then throw((((("Attempt to take " + toString(-(fc))) + " from warehouse, but only ") + toString(fg)) + " available"))
1004+ else $Tuple4((dB + 1), (bI._2 :+ toString((fg + fc))), (bI._3 :+ toString((fh - fc))), (bI._4 + fc))
9331005 }
9341006
935- let eV = {
936- let bL = eH
1007+ let fi = {
1008+ let bL = eU
9371009 let bM = size(bL)
938- let bN = $Tuple4(0, nil, nil, cZ._4)
1010+ let bN = $Tuple4(0, nil, nil, da._4)
9391011 func bX (bP,bQ) = if ((bQ >= bM))
9401012 then bP
941- else eS(bP, bL[bQ])
1013+ else ff(bP, bL[bQ])
9421014
9431015 func bY (bP,bQ) = if ((bQ >= bM))
9441016 then bP
9451017 else throw("List size exceeds 6")
9461018
9471019 bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
9481020 }
949- func eW (bI,bJ) = {
950- let dn = bI._1
951- let ef = am(dn)
952- let eP = parseIntValue(bJ)
953- let eX = if ((size(eL) > dn))
954- then parseIntValue(eL[dn])
1021+ func fj (bI,bJ) = {
1022+ let dB = bI._1
1023+ let es = am(dB)
1024+ let fc = parseIntValue(bJ)
1025+ let fk = if ((size(eY) > dB))
1026+ then parseIntValue(eY[dB])
9551027 else 0
956- let eY = if ((size(eN) > dn))
957- then parseIntValue(eN[dn])
1028+ let fl = if ((size(fa) > dB))
1029+ then parseIntValue(fa[dB])
9581030 else 0
959- if ((eP == 0))
960- then $Tuple4((dn + 1), (bI._2 :+ toString(eX)), (bI._3 :+ toString(eY)), bI._4)
961- else if ((eP > 0))
962- then if ((eP > eY))
963- then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(eY)) + " available"))
1031+ if ((fc == 0))
1032+ then $Tuple4((dB + 1), (bI._2 :+ toString(fk)), (bI._3 :+ toString(fl)), bI._4)
1033+ else if ((fc > 0))
1034+ then if ((fc > fl))
1035+ then throw((((("Attempt to take " + bJ) + " from backpack, but only ") + toString(fl)) + " available"))
9641036 else {
965- let eZ = (eB((eX + eP), ef) - eB(eX, ef))
966- $Tuple4((dn + 1), (bI._2 :+ toString((eX + eP))), (bI._3 :+ toString((eY - eP))), (bI._4 + eZ))
1037+ let fm = (eO((fk + fc), es) - eO(fk, es))
1038+ $Tuple4((dB + 1), (bI._2 :+ toString((fk + fc))), (bI._3 :+ toString((fl - fc))), (bI._4 + fm))
9671039 }
968- else if ((-(eP) > eX))
969- then throw((((("Attempt to take " + toString(-(eP))) + " from warehouse, but only ") + toString(eX)) + " available"))
1040+ else if ((-(fc) > fk))
1041+ then throw((((("Attempt to take " + toString(-(fc))) + " from warehouse, but only ") + toString(fk)) + " available"))
9701042 else {
971- let eZ = (eB((eX + eP), ef) - eB(eX, ef))
972- $Tuple4((dn + 1), (bI._2 :+ toString((eX + eP))), (bI._3 :+ toString((eY - eP))), (bI._4 + eZ))
1043+ let fm = (eO((fk + fc), es) - eO(fk, es))
1044+ $Tuple4((dB + 1), (bI._2 :+ toString((fk + fc))), (bI._3 :+ toString((fl - fc))), (bI._4 + fm))
9731045 }
9741046 }
9751047
976- let dW = if ((size(eI) != 0))
1048+ let ek = if ((size(eV) != 0))
9771049 then {
978- let bL = eI
1050+ let bL = eV
9791051 let bM = size(bL)
980- let bN = $Tuple4(0, nil, nil, eV._4)
981- func ek (bP,bQ) = if ((bQ >= bM))
1052+ let bN = $Tuple4(0, nil, nil, fi._4)
1053+ func ex (bP,bQ) = if ((bQ >= bM))
9821054 then bP
983- else eW(bP, bL[bQ])
984-
985- func el (bP,bQ) = if ((bQ >= bM))
1055+ else fj(bP, bL[bQ])
1056+
1057+ func ey (bP,bQ) = if ((bQ >= bM))
9861058 then bP
9871059 else throw("List size exceeds 50")
9881060
989- el(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(ek(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1061+ ey(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(ex(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
9901062 }
991- else $Tuple4(0, eL, eN, eV._4)
992- let fa = dW._4
993- if ((fa > dB))
994- then throw((((("Attempt to put total " + toString(fa)) + " stuff, but only ") + toString(dB)) + " warehouse space left"))
995- else $Tuple7(makeString(cZ._2, "_"), makeString(eV._2, "_"), makeString(dW._2, "_"), makeString(cZ._3, "_"), makeString(eV._3, "_"), makeString(dW._3, "_"), fa)
1063+ else $Tuple4(0, eY, fa, fi._4)
1064+ let fn = ek._4
1065+ if ((fn > dP))
1066+ then throw((((("Attempt to put total " + toString(fn)) + " stuff, but only ") + toString(dP)) + " warehouse space left"))
1067+ else $Tuple7(makeString(da._2, "_"), makeString(fi._2, "_"), makeString(ek._2, "_"), makeString(da._3, "_"), makeString(fi._3, "_"), makeString(ek._3, "_"), fn)
9961068 }
9971069 }
9981070
9991071
1000-func fb (fc,fd) = {
1001- let bm = toString(fc)
1002- let fe = dH(toBigInt(fd))
1003- let ff = valueOrElse(getInteger(cv()), (cu + 1))
1004- let cx = toString(ff)
1005- let dQ = toInt((fe % co))
1006- let dq = dO(fe, dQ)
1007- let fg = F[dQ]
1008- let fh = Issue(cQ(cx, "S"), makeString([cx, "S", dq, fg], "_"), 1, 0, false)
1009- let aM = calculateAssetId(fh)
1010- let fi = toBase58String(aM)
1011- $Tuple2([IntegerEntry(cv(), (ff + 1)), fh, StringEntry(cw(cx), fi), StringEntry(aL(fi), bm), StringEntry(cC(cx), bm), IntegerEntry(aP(fi), 0), IntegerEntry(cA(fi, bm), 0), ScriptTransfer(fc, 1, aM)], $Tuple2(fi, fg))
1012- }
1013-
1014-
1015-func fj (db,fc,fd,fk,fl) = if (!(sigVerify_8Kb(fk, fl, cg)))
1072+func fo (fp,fq) = {
1073+ let bm = toString(fp)
1074+ let fr = dV(toBigInt(fq))
1075+ let fs = valueOrElse(getInteger(cv()), (cu + 1))
1076+ let cx = toString(fs)
1077+ let ee = toInt((fr % co))
1078+ let dE = ec(fr, ee)
1079+ let ft = F[ee]
1080+ let fu = Issue(cR(cx, "S"), makeString([cx, "S", dE, ft], "_"), 1, 0, false)
1081+ let aM = calculateAssetId(fu)
1082+ let fv = toBase58String(aM)
1083+ $Tuple2([IntegerEntry(cv(), (fs + 1)), fu, StringEntry(cw(cx), fv), StringEntry(aL(fv), bm), StringEntry(cC(cx), bm), IntegerEntry(aP(fv), 0), IntegerEntry(cA(fv, bm), 0), ScriptTransfer(fp, 1, aM)], $Tuple2(fv, ft))
1084+ }
1085+
1086+
1087+func fw (bm,fx,fy) = if (!(sigVerify_8Kb(fx, fy, cg)))
10161088 then throw("signature does not match")
10171089 else {
1018- let dZ = split(toUtf8String(fk), ";")
1019- let fm = split(dZ[0], "|")
1020- let fn = split(fm[cJ], "_")
1021- let fo = parseIntValue(fn[0])
1022- let fp = parseIntValue(fn[1])
1023- let fq = split(dZ[1], ":")
1024- let fr = fq[0]
1025- let fs = parseIntValue(fm[cO])
1026- if (if ((fs > (lastBlock.timestamp + ci)))
1090+ let dp = split(toUtf8String(fx), ";")
1091+ let fz = split(dp[0], "|")
1092+ let fA = split(fz[cJ], "_")
1093+ let fB = parseIntValue(fA[0])
1094+ let fC = parseIntValue(fA[1])
1095+ let fD = split(dp[1], ":")
1096+ let fE = fD[0]
1097+ let fF = parseIntValue(fz[cO])
1098+ if (if ((fF > (lastBlock.timestamp + ci)))
10271099 then true
1028- else ((lastBlock.timestamp - ci) > fs))
1029- then throw("signature outdated")
1100+ else ((lastBlock.timestamp - ci) > fF))
1101+ then throw(((("signature outdated: logTime=" + toString(fF)) + ", bcTime=") + toString(lastBlock.timestamp)))
10301102 else {
1031- let ft = fq[1]
1032- let bm = toString(fc)
1033- let fu = valueOrElse(getString(aJ(bm)), "")
1034- if ((fu != ft))
1035- then throw(((("Tx ids don't match! In state: " + fu) + ", in msg: ") + ft))
1103+ let fG = fD[1]
1104+ let fH = valueOrElse(getString(aJ(bm)), "")
1105+ if ((fH != fG))
1106+ then throw(((("Tx ids don't match! In state: " + fH) + ", in msg: ") + fG))
10361107 else {
10371108 let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked")
1038- let fv = bi(bg)
1039- let fw = valueOrElse(getInteger(fv), 100)
1040- if ((fw != fo))
1041- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fv), 100))) + " from state does not match one from flight log=") + toString(fo)))
1042- else if ((0 >= fo))
1109+ let fI = bi(bg)
1110+ let fJ = valueOrElse(getInteger(fI), 100)
1111+ if ((fJ != fB))
1112+ then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fI), 100))) + " from state does not match one from flight log=") + toString(fB)))
1113+ else if ((0 >= fB))
10431114 then throw("You can't fly with zero health")
1044- else if ((0 >= fp))
1045- then $Tuple3(((if (!(db))
1046- then [ScriptTransfer(fc, cn, b)]
1047- else nil) :+ IntegerEntry(fv, 0)), "", 0)
1048- else {
1049- let fx = if ((size(fm) > cP))
1050- then fm[cP]
1051- else ""
1052- let fy = if ((fx == "$"))
1053- then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
1054- else 0
1055- let dV = bf(bg)
1056- let eF = dU(dV)
1057- let fz = split(eF[ak], "_")
1058- let fA = makeString(da(db, fz, cm), "_")
1059- let fB = fb(fc, fd)
1060- let fi = fB._2._1
1061- $Tuple3((((fB._1 :+ StringEntry(bh(bg), makeString([fB._2._2, "L", fi], "_"))) :+ IntegerEntry(fv, fp)) :+ StringEntry(dV, makeString([eF[ai], eF[aj], fA, eF[al]], ":"))), fi, fy)
1062- }
1115+ else {
1116+ let fK = if ((size(fz) > cP))
1117+ then fz[cP]
1118+ else ""
1119+ let fL = if ((size(fz) > cQ))
1120+ then fz[cQ]
1121+ else ""
1122+ let fM = if (if ((fC > 0))
1123+ then (fK == "$")
1124+ else false)
1125+ then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
1126+ else 0
1127+ $Tuple5(fC, bg, fM, fE, fL)
1128+ }
10631129 }
10641130 }
10651131 }
10661132
10671133
1068-func fC (aW,fD) = {
1069- let ep = valueOrElse(getInteger(aP(aW)), 0)
1070- let fE = valueOrElse(getInteger(aQ(m, aW)), 0)
1071- let fF = (ep / 6)
1072- let fG = (ep / 7)
1073- ((t + fraction(t, ((ep + fF) + (2 * fG)), 5)) + fraction(t, fE, (fD * 5)))
1074- }
1075-
1076-
1077-func fH (aK,fI,fJ) = {
1078- let fK = if ((fI == cG))
1079- then $Tuple2(fJ, valueOrElse(getString(be(aK)), ""))
1134+func fN (fp,fq,fx,fy) = {
1135+ let bm = toString(fp)
1136+ let ef = fw(bm, fx, fy)
1137+ let fI = bi(ef._2)
1138+ let ej = bf(ef._2)
1139+ let eS = ei(ej)
1140+ let fO = split(eS[ak], "_")
1141+ let fP = makeString(db(true, fO, cm), "_")
1142+ let du = di(eS[al], ef._5)
1143+ if ((0 >= ef._1))
1144+ then $Tuple3([IntegerEntry(fI, 0), StringEntry(ej, makeString([eS[ai], eS[aj], eS[ak], du], ":"))], "", 0)
1145+ else {
1146+ let fQ = fo(fp, fq)
1147+ let fv = fQ._2._1
1148+ $Tuple3((((fQ._1 :+ StringEntry(bh(ef._2), makeString([fQ._2._2, "L", fv], "_"))) :+ IntegerEntry(fI, ef._1)) :+ StringEntry(ej, makeString([eS[ai], eS[aj], fP, du], ":"))), fv, ef._3)
1149+ }
1150+ }
1151+
1152+
1153+func fR (aW,fS) = {
1154+ let eC = valueOrElse(getInteger(aP(aW)), 0)
1155+ let fT = valueOrElse(getInteger(aQ(m, aW)), 0)
1156+ let fU = (eC / 6)
1157+ let fV = (eC / 7)
1158+ ((t + fraction(t, ((eC + fU) + (2 * fV)), 5)) + fraction(t, fT, (fS * 5)))
1159+ }
1160+
1161+
1162+func fW (aK,fX,fY) = {
1163+ let fZ = if ((fX == cG))
1164+ then $Tuple2(fY, valueOrElse(getString(be(aK)), ""))
10801165 else {
10811166 let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1082- let fL = valueOrElse(getString(bh(bg)), w)
1083- let fM = split(value(fL), "_")
1084- if ((fM[bq] != "L"))
1085- then throw((("Duck location type is " + fM[bq]) + ", but should be L"))
1086- else $Tuple2(fM[br], bg)
1087- }
1088- let aW = fK._1
1089- let fN = fK._2
1167+ let ga = valueOrElse(getString(bh(bg)), w)
1168+ let gb = split(value(ga), "_")
1169+ if ((gb[bq] != "L"))
1170+ then throw((("Duck location type is " + gb[bq]) + ", but should be L"))
1171+ else $Tuple2(gb[br], bg)
1172+ }
1173+ let aW = fZ._1
1174+ let gc = fZ._2
10901175 let bW = value(assetInfo(fromBase58String(aW)))
1091- let fO = aO(aW)
1092- let fP = valueOrErrorMessage(getInteger(fO), (("Land " + bW.name) + " is not staked"))
1093- let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1094- if ((fQ != aK))
1176+ let gd = aO(aW)
1177+ let ge = valueOrErrorMessage(getInteger(gd), (("Land " + bW.name) + " is not staked"))
1178+ let gf = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1179+ if ((gf != aK))
10951180 then throw((k + " is not yours"))
10961181 else {
1097- let fR = split(bW.description, "_")
1098- $Tuple4(fN, aW, fR, fP)
1099- }
1100- }
1101-
1102-
1103-func fS (aK,eC,fI,fJ) = if ((0 > eC))
1182+ let gg = split(bW.description, "_")
1183+ $Tuple4(gc, aW, gg, ge)
1184+ }
1185+ }
1186+
1187+
1188+func gh (aK,eP,fX,fY) = if ((0 > eP))
11041189 then throw("Negative amount")
11051190 else {
1106- let fT = fH(aK, fI, fJ)
1107- let bB = fT._3[W]
1108- let dj = dp(fT._3[X])
1109- let dt = (lastBlock.timestamp - fT._4)
1110- if ((0 > dt))
1111- then throw(((("Saved timestamp is in future, saved = " + toString(fT._4)) + ", current = ") + toString(lastBlock.timestamp)))
1191+ let gi = fW(aK, fX, fY)
1192+ let bB = gi._3[W]
1193+ let dx = dD(gi._3[X])
1194+ let dH = (lastBlock.timestamp - gi._4)
1195+ if ((0 > dH))
1196+ then throw(((("Saved timestamp is in future, saved = " + toString(gi._4)) + ", current = ") + toString(lastBlock.timestamp)))
11121197 else {
1113- let fD = bA(bB)
1114- let fU = fC(fT._2, fD)
1115- let fV = fraction(dt, (fU * fD), u)
1116- if ((eC > fV))
1117- then throw(((("Not enough resources, available = " + toString(fV)) + ", requested = ") + toString(eC)))
1198+ let fS = bA(bB)
1199+ let gj = fR(gi._2, fS)
1200+ let gk = fraction(dH, (gj * fS), u)
1201+ if ((eP > gk))
1202+ then throw(((("Not enough resources, available = " + toString(gk)) + ", requested = ") + toString(eP)))
11181203 else {
1119- let fW = fraction((fV - eC), u, (fU * fD))
1120- let fX = (lastBlock.timestamp - fW)
1121- let eo = (fD / o)
1122- let dA = dw(dj, (dt - fW), eo, fU)
1123- let en = aV(fT._2)
1124- let ep = valueOrElse(getInteger(aP(fT._2)), 0)
1125- let eb = em(en, eo, ep)
1126- let ev = split(eb[ad], "_")
1127- let dB = parseIntValue(ev[ag])
1128- if (if ((fI == cG))
1129- then (eC > dB)
1204+ let gl = fraction((gk - eP), u, (gj * fS))
1205+ let gm = (lastBlock.timestamp - gl)
1206+ let eB = (fS / o)
1207+ let dO = dK(dx, (dH - gl), eB, gj)
1208+ let eA = aV(gi._2)
1209+ let eC = valueOrElse(getInteger(aP(gi._2)), 0)
1210+ let eo = ez(eA, eB, eC)
1211+ let eI = split(eo[ad], "_")
1212+ let dP = parseIntValue(eI[ag])
1213+ if (if ((fX == cG))
1214+ then (eP > dP)
11301215 else false)
1131- then throw((("Only " + toString(dB)) + " space left in warehouse"))
1216+ then throw((("Only " + toString(dP)) + " space left in warehouse"))
11321217 else {
1133- let dV = bf(fT._1)
1134- let eF = dU(dV)
1135- let dz = split(eF[aj], "_")
1136- let dy = split(eb[aa], "_")
1137- let fY = if ((fI == cG))
1138- then $Tuple4(dr(dy, dj, (dt - fW), eo, fU), eF[aj], (parseIntValue(ev[af]) + dA._2), (parseIntValue(ev[ag]) - dA._2))
1139- else if ((fI == cH))
1140- then $Tuple4(eb[aa], dr(dz, dj, (dt - fW), eo, fU), parseIntValue(ev[af]), parseIntValue(ev[ag]))
1218+ let ej = bf(gi._1)
1219+ let eS = ei(ej)
1220+ let dN = split(eS[aj], "_")
1221+ let dM = split(eo[aa], "_")
1222+ let gn = if ((fX == cG))
1223+ then $Tuple4(dF(dM, dx, (dH - gl), eB, gj), eS[aj], (parseIntValue(eI[af]) + dO._2), (parseIntValue(eI[ag]) - dO._2))
1224+ else if ((fX == cH))
1225+ then $Tuple4(eo[aa], dF(dN, dx, (dH - gl), eB, gj), parseIntValue(eI[af]), parseIntValue(eI[ag]))
11411226 else {
1142- let fZ = dx(dy, dz, dA, dB)
1143- let ga = min([parseIntValue(ev[ag]), dA._2])
1144- $Tuple4(fZ._1, fZ._2, (parseIntValue(ev[af]) + ga), (parseIntValue(ev[ag]) - ga))
1227+ let go = dL(dM, dN, dO, dP)
1228+ let gp = min([parseIntValue(eI[ag]), dO._2])
1229+ $Tuple4(go._1, go._2, (parseIntValue(eI[af]) + gp), (parseIntValue(eI[ag]) - gp))
11451230 }
1146- let gb = fY._1
1147- let gc = fY._2
1148- let gd = fY._3
1149- let ge = fY._4
1150- $Tuple5([IntegerEntry(aO(fT._2), fX), IntegerEntry(aS(k, fT._2, aK), fX)], dV, [eF[ai], gc, eF[ak], eF[al]], en, [eb[Z], gb, eb[ab], eb[ac], makeString([ev[ae], toString(gd), toString(ge), ev[ah]], "_")])
1231+ let gq = gn._1
1232+ let gr = gn._2
1233+ let gs = gn._3
1234+ let gt = gn._4
1235+ $Tuple5([IntegerEntry(aO(gi._2), gm), IntegerEntry(aS(k, gi._2, aK), gm)], ej, [eS[ai], gr, eS[ak], eS[al]], eA, [eo[Z], gq, eo[ab], eo[ac], makeString([eI[ae], toString(gs), toString(gt), eI[ah]], "_")])
11511236 }
11521237 }
11531238 }
11541239 }
11551240
11561241
1157-func gf (aK,aW,fD,fI) = {
1158- let fO = aO(aW)
1159- let fP = value(getInteger(fO))
1160- let fV = (fraction((lastBlock.timestamp - fP), fC(aW, fD), u) * fD)
1161- fS(aK, fV, fI, aW)
1162- }
1163-
1164-
1165-func gg (db,fc,gh,aW) = {
1166- let aK = toString(fc)
1167- let fT = fH(aK, cI, aW)
1168- let fD = bA(fT._3[W])
1169- let gi = aP(fT._2)
1170- let gj = valueOrElse(getInteger(gi), 0)
1171- if ((gj >= 3))
1242+func gu (aK,aW,fS,fX) = {
1243+ let gd = aO(aW)
1244+ let ge = value(getInteger(gd))
1245+ let gk = (fraction((lastBlock.timestamp - ge), fR(aW, fS), u) * fS)
1246+ gh(aK, gk, fX, aW)
1247+ }
1248+
1249+
1250+func gv (dc,fp,gw,aW) = {
1251+ let aK = toString(fp)
1252+ let gi = fW(aK, cI, aW)
1253+ let fS = bA(gi._3[W])
1254+ let gx = aP(gi._2)
1255+ let gy = valueOrElse(getInteger(gx), 0)
1256+ if ((gy >= 3))
11721257 then throw("Currently max infrastructure level = 3")
11731258 else {
1174- let gk = (gj + 1)
1175- let gl = fraction(cl, (fD * gk), o)
1176- if (if (!(db))
1177- then (gh != gl)
1259+ let gz = (gy + 1)
1260+ let gA = fraction(cl, (fS * gz), o)
1261+ if (if (!(dc))
1262+ then (gw != gA)
11781263 else false)
1179- then throw(("Payment attached should be " + toString(gl)))
1264+ then throw(("Payment attached should be " + toString(gA)))
11801265 else {
1181- let dV = bf(fT._1)
1182- let eF = dU(dV)
1183- let fz = split(eF[ak], "_")
1184- let fA = makeString(da(db, fz, fraction(e, (fD * gk), o)), "_")
1185- let gm = gf(aK, fT._2, fD, cI)
1186- let gn = gm._5
1187- let go = dX(gn[Z])
1188- let gp = makeString([split(gn[Z], "_")[0], toString(gk)], "_")
1189- let gq = dX(gp)
1190- let ev = split(gn[ad], "_")
1191- let gr = makeString([ev[ae], ev[af], toString(((parseIntValue(ev[ag]) + gq) - go)), toString(gq)], "_")
1192- $Tuple2(([IntegerEntry(gi, gk), IntegerEntry(cA(fT._2, aK), gk), StringEntry(dV, makeString([eF[ai], gm._3[aj], fA, eF[al]], ":")), StringEntry(gm._4, makeString([gp, gn[aa], gn[ab], gn[ac], gr], ":"))] ++ gm._1), gk)
1266+ let ej = bf(gi._1)
1267+ let eS = ei(ej)
1268+ let fO = split(eS[ak], "_")
1269+ let fP = makeString(db(dc, fO, fraction(e, (fS * gz), o)), "_")
1270+ let gB = gu(aK, gi._2, fS, cI)
1271+ let gC = gB._5
1272+ let gD = el(gC[Z])
1273+ let gE = makeString([split(gC[Z], "_")[0], toString(gz)], "_")
1274+ let gF = el(gE)
1275+ let eI = split(gC[ad], "_")
1276+ let gG = makeString([eI[ae], eI[af], toString(((parseIntValue(eI[ag]) + gF) - gD)), toString(gF)], "_")
1277+ $Tuple2(([IntegerEntry(gx, gz), IntegerEntry(cA(gi._2, aK), gz), StringEntry(ej, makeString([eS[ai], gB._3[aj], fP, eS[al]], ":")), StringEntry(gB._4, makeString([gE, gC[aa], gC[ab], gC[ac], gG], ":"))] ++ gB._1), gz)
11931278 }
11941279 }
11951280 }
11961281
11971282
1198-func gs (aK) = 0
1199-
1200-
1201-func gt (aK,fJ) = {
1202- let fT = fH(aK, cI, fJ)
1203- let aW = fT._2
1204- let fD = bA(fT._3[W])
1205- let gu = aQ(m, aW)
1206- if ((valueOrElse(getInteger(gu), 0) > 0))
1283+func gH (aK) = 0
1284+
1285+
1286+func gI (aK,fY) = {
1287+ let gi = fW(aK, cI, fY)
1288+ let aW = gi._2
1289+ let fS = bA(gi._3[W])
1290+ let gJ = aQ(m, aW)
1291+ if ((valueOrElse(getInteger(gJ), 0) > 0))
12071292 then throw("Presale artifact is already activated")
1208- else if ((parseIntValue(fT._3[V]) > cu))
1293+ else if ((parseIntValue(gi._3[V]) > cu))
12091294 then throw((((k + " ") + aW) + " is not eligible for presale artifact"))
12101295 else {
1211- let gm = gf(aK, aW, fD, cI)
1212- ((((gm._1 :+ IntegerEntry(gu, fD)) :+ IntegerEntry(cB(m, aW, aK), fD)) :+ StringEntry(gm._2, makeString(gm._3, ":"))) :+ StringEntry(gm._4, makeString(gm._5, ":")))
1296+ let gB = gu(aK, aW, fS, cI)
1297+ ((((gB._1 :+ IntegerEntry(gJ, fS)) :+ IntegerEntry(cB(m, aW, aK), fS)) :+ StringEntry(gB._2, makeString(gB._3, ":"))) :+ StringEntry(gB._4, makeString(gB._5, ":")))
12131298 }
12141299 }
12151300
12161301
1217-func gv (gw,gk,gx,aK,gy,fd,gz) = {
1302+func gK (gL,gz,gM,aK,gN,fq,gO) = {
12181303 let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1219- func gA (bI,aW) = {
1304+ func gP (bI,aW) = {
12201305 let bW = value(assetInfo(fromBase58String(aW)))
1221- let fO = aO(aW)
1222- let fP = valueOrErrorMessage(getInteger(fO), (("NFT " + bW.name) + " is not staked"))
1223- let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1224- if ((fQ != aK))
1306+ let gd = aO(aW)
1307+ let ge = valueOrErrorMessage(getInteger(gd), (("NFT " + bW.name) + " is not staked"))
1308+ let gf = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1309+ if ((gf != aK))
12251310 then throw((k + " is not yours"))
12261311 else {
1227- let fR = split(bW.description, "_")
1228- let fg = fR[Y]
1312+ let gg = split(bW.description, "_")
1313+ let ft = gg[Y]
12291314 if (if ((bI._3 != ""))
1230- then (bI._3 != fg)
1315+ then (bI._3 != ft)
12311316 else false)
12321317 then throw("Lands should be on the same continent to merge")
12331318 else {
1234- let bB = fR[W]
1235- let gB = bI._1
1236- let dn = valueOrErrorMessage(indexOf(gB, bB), "You haven't passed all the lands needed")
1237- let gC = (take(gB, dn) + drop(gB, (dn + 1)))
1238- let fD = bA(bB)
1239- let gD = (bI._2 + valueOrElse(getInteger(aQ(m, aW)), 0))
1240- let ep = valueOrElse(getInteger(aP(aW)), 0)
1241- let gE = {
1319+ let bB = gg[W]
1320+ let gQ = bI._1
1321+ let dB = valueOrErrorMessage(indexOf(gQ, bB), "You haven't passed all the lands needed")
1322+ let gR = (take(gQ, dB) + drop(gQ, (dB + 1)))
1323+ let fS = bA(bB)
1324+ let gS = (bI._2 + valueOrElse(getInteger(aQ(m, aW)), 0))
1325+ let eC = valueOrElse(getInteger(aP(aW)), 0)
1326+ let gT = {
12421327 let c = bB
12431328 if (("S" == c))
12441329 then 3
12451330 else if (("M" == c))
12461331 then 4
12471332 else if (("L" == c))
12481333 then 5
12491334 else if (("XL" == c))
12501335 then 6
12511336 else throw("Only S, M, L, XL can merge")
12521337 }
1253- if ((ep != gE))
1338+ if ((eC != gT))
12541339 then throw("All lands should be maxed to merge")
12551340 else {
1256- let cx = fR[V]
1257- let dj = dp(fR[X])
1258- let dt = (lastBlock.timestamp - fP)
1259- if ((0 > dt))
1260- then throw(((("Saved timestamp is in future, saved = " + toString(fP)) + ", current = ") + toString(lastBlock.timestamp)))
1341+ let cx = gg[V]
1342+ let dx = dD(gg[X])
1343+ let dH = (lastBlock.timestamp - ge)
1344+ if ((0 > dH))
1345+ then throw(((("Saved timestamp is in future, saved = " + toString(ge)) + ", current = ") + toString(lastBlock.timestamp)))
12611346 else {
1262- let fU = fC(aW, fD)
1263- let eo = (fD / o)
1264- let gc = dr(split(bI._4, "_"), dj, dt, eo, fU)
1265- let bG = dh(split(bI._6, "_"), dj, eo, -1)
1347+ let gj = fR(aW, fS)
1348+ let eB = (fS / o)
1349+ let gr = dF(split(bI._4, "_"), dx, dH, eB, gj)
1350+ let bG = dv(split(bI._6, "_"), dx, eB, -1)
12661351 let bU = bI._7
12671352 let aD = indexOf(bU, aW)
12681353 if (!(isDefined(aD)))
12691354 then throw(("Your staked lands don't contain " + aW))
12701355 else {
1271- let gF = aN(aW)
1272- let gG = valueOrElse(getString(gF), "")
1273- $Tuple8(gC, gD, fg, gc, (((((((((((((bI._5 :+ DeleteEntry(aO(aW))) :+ DeleteEntry(aS(k, aW, aK))) :+ DeleteEntry(cw(cx))) :+ DeleteEntry(aL(aW))) :+ DeleteEntry(aP(aW))) :+ DeleteEntry(cA(aW, aK))) :+ DeleteEntry(aQ(m, aW))) :+ DeleteEntry(cB(m, aW, aK))) :+ DeleteEntry(cC(cx))) :+ DeleteEntry(aV(aW))) :+ DeleteEntry(gF)) :+ DeleteEntry(cy(gG))) :+ Burn(fromBase58String(aW), 1)), bG, removeByIndex(bU, value(aD)), (bI._8 + fD))
1356+ let gU = aN(aW)
1357+ let gV = valueOrElse(getString(gU), "")
1358+ $Tuple8(gR, gS, ft, gr, (((((((((((((bI._5 :+ DeleteEntry(aO(aW))) :+ DeleteEntry(aS(k, aW, aK))) :+ DeleteEntry(cw(cx))) :+ DeleteEntry(aL(aW))) :+ DeleteEntry(aP(aW))) :+ DeleteEntry(cA(aW, aK))) :+ DeleteEntry(aQ(m, aW))) :+ DeleteEntry(cB(m, aW, aK))) :+ DeleteEntry(cC(cx))) :+ DeleteEntry(aV(aW))) :+ DeleteEntry(gU)) :+ DeleteEntry(cy(gV))) :+ Burn(fromBase58String(aW), 1)), bG, removeByIndex(bU, value(aD)), (bI._8 + fS))
12741359 }
12751360 }
12761361 }
12771362 }
12781363 }
12791364 }
12801365
1281- let dV = bf(bg)
1282- let eF = dU(dV)
1283- let gH = valueOrElse(getString(bj()), "0_0_0_0_0_0")
1284- let gI = aX(aK)
1285- let bT = getString(gI)
1286- let gJ = if (isDefined(bT))
1366+ let ej = bf(bg)
1367+ let eS = ei(ej)
1368+ let gW = valueOrElse(getString(bj()), "0_0_0_0_0_0")
1369+ let gX = aX(aK)
1370+ let bT = getString(gX)
1371+ let gY = if (isDefined(bT))
12871372 then split_51C(value(bT), "_")
12881373 else nil
1289- let cZ = {
1290- let bL = gy
1374+ let da = {
1375+ let bL = gN
12911376 let bM = size(bL)
1292- let bN = $Tuple8(gx, 0, "", eF[aj], nil, gH, gJ, 0)
1377+ let bN = $Tuple8(gM, 0, "", eS[aj], nil, gW, gY, 0)
12931378 func bO (bP,bQ) = if ((bQ >= bM))
12941379 then bP
1295- else gA(bP, bL[bQ])
1380+ else gP(bP, bL[bQ])
12961381
12971382 func bR (bP,bQ) = if ((bQ >= bM))
12981383 then bP
12991384 else throw("List size exceeds 5")
13001385
13011386 bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
13021387 }
1303- let fg = cZ._3
1304- let dQ = valueOrErrorMessage(indexOf(F, fg), ("Unknown continent: " + fg))
1305- let dq = dO(dH(toBigInt(fd)), dQ)
1306- let ff = valueOrElse(getInteger(cv()), (cu + 1))
1307- let gK = toString(ff)
1308- let fh = Issue(cQ(gK, gw), makeString([gK, gw, dq, fg], "_"), 1, 0, false)
1309- let aM = calculateAssetId(fh)
1310- let gL = toBase58String(aM)
1311- let fA = makeString(da((gz > 0), split(eF[ak], "_"), gz), "_")
1312- let gM = aY(aK)
1313- let gN = valueOrElse(getInteger(gM), 0)
1314- $Tuple2((((((((((((((((cZ._5 :+ (if ((size(cZ._7) > 0))
1315- then StringEntry(gI, makeString_11C(cZ._7, "_"))
1316- else DeleteEntry(gI))) :+ IntegerEntry(gM, if ((cZ._8 > gN))
1388+ let ft = da._3
1389+ let ee = valueOrErrorMessage(indexOf(F, ft), ("Unknown continent: " + ft))
1390+ let dE = ec(dV(toBigInt(fq)), ee)
1391+ let fs = valueOrElse(getInteger(cv()), (cu + 1))
1392+ let gZ = toString(fs)
1393+ let fu = Issue(cR(gZ, gL), makeString([gZ, gL, dE, ft], "_"), 1, 0, false)
1394+ let aM = calculateAssetId(fu)
1395+ let ha = toBase58String(aM)
1396+ let fP = makeString(db((gO > 0), split(eS[ak], "_"), gO), "_")
1397+ let hb = aY(aK)
1398+ let hc = valueOrElse(getInteger(hb), 0)
1399+ $Tuple2((((((((((((((((da._5 :+ (if ((size(da._7) > 0))
1400+ then StringEntry(gX, makeString_11C(da._7, "_"))
1401+ else DeleteEntry(gX))) :+ IntegerEntry(hb, if ((da._8 > hc))
13171402 then 0
1318- else (gN - cZ._8))) :+ IntegerEntry(cv(), (ff + 1))) :+ fh) :+ StringEntry(cw(gK), gL)) :+ StringEntry(aL(gL), aK)) :+ StringEntry(cC(gK), aK)) :+ IntegerEntry(aQ(m, gL), cZ._2)) :+ IntegerEntry(cB(m, gL, aK), cZ._2)) :+ IntegerEntry(aP(gL), gk)) :+ IntegerEntry(cA(gL, aK), gk)) :+ StringEntry(dV, makeString([eF[ai], cZ._4, fA, eF[al]], ":"))) :+ StringEntry(bj(), cZ._6)) :+ StringEntry(bh(bg), makeString([fg, "L", gL], "_"))) :+ ScriptTransfer(addressFromStringValue(aK), 1, aM)), gL)
1319- }
1320-
1321-
1322-func gO (aK,gy,fd) = gv("M", 3, "SSSS", aK, gy, fd, 0)
1323-
1324-
1325-func gP (aK,gy,fd,db,gh) = {
1326- let gl = (cl * 4)
1327- if (if (!(db))
1328- then (gh != gl)
1403+ else (hc - da._8))) :+ IntegerEntry(cv(), (fs + 1))) :+ fu) :+ StringEntry(cw(gZ), ha)) :+ StringEntry(aL(ha), aK)) :+ StringEntry(cC(gZ), aK)) :+ IntegerEntry(aQ(m, ha), da._2)) :+ IntegerEntry(cB(m, ha, aK), da._2)) :+ IntegerEntry(aP(ha), gz)) :+ IntegerEntry(cA(ha, aK), gz)) :+ StringEntry(ej, makeString([eS[ai], da._4, fP, eS[al]], ":"))) :+ StringEntry(bj(), da._6)) :+ StringEntry(bh(bg), makeString([ft, "L", ha], "_"))) :+ ScriptTransfer(addressFromStringValue(aK), 1, aM)), ha)
1404+ }
1405+
1406+
1407+func hd (aK,gN,fq) = gK("M", 3, "SSSS", aK, gN, fq, 0)
1408+
1409+
1410+func he (aK,gN,fq,dc,gw) = {
1411+ let gA = (cl * 4)
1412+ if (if (!(dc))
1413+ then (gw != gA)
13291414 else false)
1330- then throw(("Payment attached should be " + toString(gl)))
1331- else gv("L", 4, "SMM", aK, gy, fd, (e * 4))
1332- }
1333-
1334-
1335-func gQ (aK,gy,fd,db,gh) = {
1336- let gl = (cl * 47)
1337- if (if (!(db))
1338- then (gh != gl)
1415+ then throw(("Payment attached should be " + toString(gA)))
1416+ else gK("L", 4, "SMM", aK, gN, fq, (e * 4))
1417+ }
1418+
1419+
1420+func hf (aK,gN,fq,dc,gw) = {
1421+ let gA = (cl * 47)
1422+ if (if (!(dc))
1423+ then (gw != gA)
13391424 else false)
1340- then throw(("Payment attached should be " + toString(gl)))
1341- else gv("XL", 5, "SSSML", aK, gy, fd, (e * 47))
1342- }
1343-
1344-
1345-func gR (aK,gy,fd,db,gh) = {
1346- let gl = (cl * 54)
1347- if (if (!(db))
1348- then (gh != gl)
1425+ then throw(("Payment attached should be " + toString(gA)))
1426+ else gK("XL", 5, "SSSML", aK, gN, fq, (e * 47))
1427+ }
1428+
1429+
1430+func hg (aK,gN,fq,dc,gw) = {
1431+ let gA = (cl * 54)
1432+ if (if (!(dc))
1433+ then (gw != gA)
13491434 else false)
1350- then throw(("Payment attached should be " + toString(gl)))
1351- else gv("XXL", 6, "LXL", aK, gy, fd, (e * 54))
1352- }
1353-
1354-
1355-func gS (db,aK,gh,gy,fd) = {
1356- let gT = {
1357- let c = size(gy)
1435+ then throw(("Payment attached should be " + toString(gA)))
1436+ else gK("XXL", 6, "LXL", aK, gN, fq, (e * 54))
1437+ }
1438+
1439+
1440+func hh (dc,aK,gw,gN,fq) = {
1441+ let hi = {
1442+ let c = size(gN)
13581443 if ((4 == c))
1359- then gO(aK, gy, fd)
1444+ then hd(aK, gN, fq)
13601445 else if ((3 == c))
1361- then gP(aK, gy, fd, db, gh)
1446+ then he(aK, gN, fq, dc, gw)
13621447 else if ((5 == c))
1363- then gQ(aK, gy, fd, db, gh)
1448+ then hf(aK, gN, fq, dc, gw)
13641449 else if ((2 == c))
1365- then gR(aK, gy, fd, db, gh)
1450+ then hg(aK, gN, fq, dc, gw)
13661451 else throw("Unknown merge")
13671452 }
1368- gT
1369- }
1370-
1371-
1372-func gU (dn) = if (if ((dn.originCaller != aE))
1453+ hi
1454+ }
1455+
1456+
1457+func hj (dB) = if (if ((dB.originCaller != aE))
13731458 then valueOrElse(getBoolean(bk()), false)
13741459 else false)
13751460 then throw("Contracts are under maintenance")
1376- else StringEntry(aJ(toString(dn.originCaller)), toBase58String(dn.transactionId))
1377-
1378-
1379-@Callable(dn)
1380-func constructorV1 (gV) = if ((dn.caller != this))
1461+ else StringEntry(aJ(toString(dB.originCaller)), toBase58String(dB.transactionId))
1462+
1463+
1464+@Callable(dB)
1465+func constructorV1 (hk) = if ((dB.caller != this))
13811466 then throw("Permission denied")
1382- else [StringEntry(ay(), gV)]
1383-
1384-
1385-
1386-@Callable(dn)
1387-func setBlocked (gW) = if ((dn.caller != this))
1467+ else [StringEntry(ay(), hk)]
1468+
1469+
1470+
1471+@Callable(dB)
1472+func setBlocked (hl) = if ((dB.caller != this))
13881473 then throw("permission denied")
1389- else [BooleanEntry(bk(), gW)]
1390-
1391-
1392-
1393-@Callable(dn)
1474+ else [BooleanEntry(bk(), hl)]
1475+
1476+
1477+
1478+@Callable(dB)
13941479 func stakeLand () = {
1395- let gX = gU(dn)
1396- if ((size(dn.payments) != 1))
1480+ let hm = hj(dB)
1481+ if ((size(dB.payments) != 1))
13971482 then throw("Exactly one payment required")
13981483 else {
1399- let gY = value(dn.payments[0])
1400- let aM = value(gY.assetId)
1401- let ap = toString(dn.caller)
1402- if ((gY.amount != 1))
1484+ let hn = value(dB.payments[0])
1485+ let aM = value(hn.assetId)
1486+ let ap = toString(dB.caller)
1487+ if ((hn.amount != 1))
14031488 then throw((("NFT " + k) + " token should be attached as payment"))
14041489 else {
14051490 let bW = value(assetInfo(aM))
14061491 if ((bW.issuer != this))
14071492 then throw("Unknown issuer of token")
14081493 else if (!(contains(bW.name, k)))
14091494 then throw((("Only NFT " + k) + " tokens are accepted"))
14101495 else {
1411- let gZ = drop(bW.name, 4)
1412- let cx = if (contains(gZ, "XXL"))
1413- then dropRight(gZ, 3)
1414- else if (contains(gZ, "XL"))
1415- then dropRight(gZ, 2)
1416- else dropRight(gZ, 1)
1496+ let ho = drop(bW.name, 4)
1497+ let cx = if (contains(ho, "XXL"))
1498+ then dropRight(ho, 3)
1499+ else if (contains(ho, "XL"))
1500+ then dropRight(ho, 2)
1501+ else dropRight(ho, 1)
14171502 if (!(isDefined(parseInt(cx))))
14181503 then throw(("Cannot parse land number from " + bW.name))
14191504 else {
14201505 let aW = toBase58String(aM)
1421- let fO = aO(aW)
1422- if (isDefined(getInteger(fO)))
1506+ let gd = aO(aW)
1507+ if (isDefined(getInteger(gd)))
14231508 then throw((("NFT " + bW.name) + " is already staked"))
14241509 else {
1425- let fR = split(bW.description, "_")
1426- let dj = dp(fR[X])
1427- let fD = bA(fR[W])
1428- let bG = do(dj, (fD / o), 1)
1429- let fE = valueOrElse(getInteger(aQ(m, aW)), 0)
1430- let gI = aX(ap)
1431- let bT = getString(gI)
1510+ let gg = split(bW.description, "_")
1511+ let dx = dD(gg[X])
1512+ let fS = bA(gg[W])
1513+ let bG = dC(dx, (fS / o), 1)
1514+ let fT = valueOrElse(getInteger(aQ(m, aW)), 0)
1515+ let gX = aX(ap)
1516+ let bT = getString(gX)
14321517 let bU = if (isDefined(bT))
14331518 then split_51C(value(bT), "_")
14341519 else nil
14351520 if (containsElement(bU, aW))
14361521 then throw(("Your staked lands already contain " + aW))
14371522 else {
1438- let ep = valueOrElse(getInteger(aP(aW)), 0)
1439-[IntegerEntry(fO, lastBlock.timestamp), IntegerEntry(aS(k, aW, ap), lastBlock.timestamp), StringEntry(gI, makeString_11C((bU :+ aW), "_")), IntegerEntry(aY(ap), (valueOrElse(getInteger(aY(ap)), 0) + fD)), StringEntry(aL(aW), ap), StringEntry(cC(cx), ap), IntegerEntry(cB(m, aW, ap), fE), IntegerEntry(cA(aW, ap), ep), StringEntry(bj(), bG), gX]
1523+ let eC = valueOrElse(getInteger(aP(aW)), 0)
1524+[IntegerEntry(gd, lastBlock.timestamp), IntegerEntry(aS(k, aW, ap), lastBlock.timestamp), StringEntry(gX, makeString_11C((bU :+ aW), "_")), IntegerEntry(aY(ap), (valueOrElse(getInteger(aY(ap)), 0) + fS)), StringEntry(aL(aW), ap), StringEntry(cC(cx), ap), IntegerEntry(cB(m, aW, ap), fT), IntegerEntry(cA(aW, ap), eC), StringEntry(bj(), bG), hm]
14401525 }
14411526 }
14421527 }
14431528 }
14441529 }
14451530 }
14461531 }
14471532
14481533
14491534
1450-@Callable(dn)
1451-func unstakeLand (fJ) = {
1452- let gX = gU(dn)
1453- if ((size(dn.payments) != 0))
1535+@Callable(dB)
1536+func unstakeLand (fY) = {
1537+ let hm = hj(dB)
1538+ if ((size(dB.payments) != 0))
14541539 then throw("No payments required")
14551540 else {
1456- let aK = toString(dn.caller)
1457- let fT = fH(aK, cH, fJ)
1458- let aW = fT._2
1459- let gI = aX(aK)
1460- let dj = dp(fT._3[X])
1461- let fD = bA(fT._3[W])
1462- let bG = do(dj, (fD / o), -1)
1463- let gm = gf(aK, aW, fD, cH)
1464- let bU = split_51C(valueOrElse(getString(gI), ""), "_")
1541+ let aK = toString(dB.caller)
1542+ let gi = fW(aK, cH, fY)
1543+ let aW = gi._2
1544+ let gX = aX(aK)
1545+ let dx = dD(gi._3[X])
1546+ let fS = bA(gi._3[W])
1547+ let bG = dC(dx, (fS / o), -1)
1548+ let gB = gu(aK, aW, fS, cH)
1549+ let bU = split_51C(valueOrElse(getString(gX), ""), "_")
14651550 let aD = indexOf(bU, aW)
14661551 if (!(isDefined(aD)))
14671552 then throw(("Your staked lands don't contain " + aW))
14681553 else {
1469- let dT = value(blockInfoByHeight(height)).timestamp
1470- let ha = valueOrElse(getInteger(aH, bl(aK)), 0)
1471- if ((ha >= dT))
1472- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ha)))
1554+ let eh = value(blockInfoByHeight(height)).timestamp
1555+ let hp = valueOrElse(getInteger(aH, bl(aK)), 0)
1556+ if ((hp >= eh))
1557+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(hp)))
14731558 else {
1474- let gM = aY(aK)
1475- let gN = valueOrElse(getInteger(gM), 0)
1476-[ScriptTransfer(dn.caller, 1, fromBase58String(aW)), DeleteEntry(aO(aW)), DeleteEntry(aS(k, aW, aK)), StringEntry(bj(), bG), StringEntry(gm._2, makeString(gm._3, ":")), if ((size(bU) > 1))
1477- then StringEntry(gI, makeString_11C(removeByIndex(bU, value(aD)), "_"))
1478- else DeleteEntry(gI), IntegerEntry(gM, if ((fD > gN))
1559+ let hb = aY(aK)
1560+ let hc = valueOrElse(getInteger(hb), 0)
1561+[ScriptTransfer(dB.caller, 1, fromBase58String(aW)), DeleteEntry(aO(aW)), DeleteEntry(aS(k, aW, aK)), StringEntry(bj(), bG), StringEntry(gB._2, makeString(gB._3, ":")), if ((size(bU) > 1))
1562+ then StringEntry(gX, makeString_11C(removeByIndex(bU, value(aD)), "_"))
1563+ else DeleteEntry(gX), IntegerEntry(hb, if ((fS > hc))
14791564 then 0
1480- else (gN - fD)), gX]
1565+ else (hc - fS)), hm]
14811566 }
14821567 }
14831568 }
14841569 }
14851570
14861571
14871572
1488-@Callable(dn)
1573+@Callable(dB)
14891574 func stakeDuck () = {
1490- let gX = gU(dn)
1491- if ((size(dn.payments) != 1))
1575+ let hm = hj(dB)
1576+ if ((size(dB.payments) != 1))
14921577 then throw("Exactly one payment required")
14931578 else {
1494- let gY = value(dn.payments[0])
1495- let aM = value(gY.assetId)
1496- let ap = toString(dn.caller)
1497- if ((gY.amount != 1))
1579+ let hn = value(dB.payments[0])
1580+ let aM = value(hn.assetId)
1581+ let ap = toString(dB.caller)
1582+ if ((hn.amount != 1))
14981583 then throw((("NFT " + l) + " token should be attached as payment"))
14991584 else {
15001585 let bW = value(assetInfo(aM))
15011586 if (if ((bW.issuer != ce))
15021587 then (bW.issuer != cf)
15031588 else false)
15041589 then throw((("Unknown issuer of " + l) + " token"))
15051590 else if (!(contains(bW.name, l)))
15061591 then throw((("Only NFT " + l) + " tokens are accepted"))
15071592 else {
1508- let hb = toBase58String(aM)
1509- let fO = aO(hb)
1510- if (isDefined(getInteger(fO)))
1593+ let hq = toBase58String(aM)
1594+ let gd = aO(hq)
1595+ if (isDefined(getInteger(gd)))
15111596 then throw((("NFT " + bW.name) + " is already staked"))
15121597 else if (isDefined(getString(be(ap))))
15131598 then throw(("You already staked one duck: " + bW.name))
15141599 else {
1515- let hc = bh(hb)
1516- let hd = getString(hc)
1517- let dV = bf(hb)
1518- let he = getString(dV)
1519- ([IntegerEntry(fO, lastBlock.timestamp), IntegerEntry(aS(l, toBase58String(aM), ap), lastBlock.timestamp), StringEntry(bd(hb), ap), StringEntry(be(ap), hb)] ++ (if (isDefined(hd))
1600+ let hr = bh(hq)
1601+ let hs = getString(hr)
1602+ let ej = bf(hq)
1603+ let ht = getString(ej)
1604+ ([IntegerEntry(gd, lastBlock.timestamp), IntegerEntry(aS(l, toBase58String(aM), ap), lastBlock.timestamp), StringEntry(bd(hq), ap), StringEntry(be(ap), hq)] ++ (if (isDefined(hs))
15201605 then nil
1521- else ([StringEntry(hc, w)] ++ (if (isDefined(he))
1606+ else ([StringEntry(hr, w)] ++ (if (isDefined(ht))
15221607 then nil
1523- else (([StringEntry(dV, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(hb), 100)) :+ gX)))))
1608+ else (([StringEntry(ej, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(hq), 100)) :+ hm)))))
15241609 }
15251610 }
15261611 }
15271612 }
15281613 }
15291614
15301615
15311616
1532-@Callable(dn)
1533-func unstakeDuck (hb) = {
1534- let gX = gU(dn)
1535- if ((size(dn.payments) != 0))
1617+@Callable(dB)
1618+func unstakeDuck (hq) = {
1619+ let hm = hj(dB)
1620+ if ((size(dB.payments) != 0))
15361621 then throw("No payments required")
15371622 else {
1538- let aM = fromBase58String(hb)
1539- let ap = toString(dn.caller)
1623+ let aM = fromBase58String(hq)
1624+ let ap = toString(dB.caller)
15401625 let bW = value(assetInfo(aM))
1541- let fO = aO(toBase58String(aM))
1542- if (!(isDefined(getInteger(fO))))
1626+ let gd = aO(toBase58String(aM))
1627+ if (!(isDefined(getInteger(gd))))
15431628 then throw((("NFT " + bW.name) + " is not staked"))
15441629 else if (!(isDefined(getString(be(ap)))))
15451630 then throw((("The duck " + bW.name) + " is not staked"))
15461631 else {
1547- let fQ = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned"))
1548- if ((fQ != ap))
1632+ let gf = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned"))
1633+ if ((gf != ap))
15491634 then throw("Staked NFT is not yours")
15501635 else {
1551- let fv = bi(hb)
1552- let hf = valueOrElse(getInteger(fv), 100)
1553- if ((100 > hf))
1636+ let fI = bi(hq)
1637+ let hu = valueOrElse(getInteger(fI), 100)
1638+ if ((100 > hu))
15541639 then throw("Please heal your duck before unstaking")
1555- else [ScriptTransfer(dn.caller, 1, aM), DeleteEntry(fO), DeleteEntry(fv), DeleteEntry(bh(hb)), DeleteEntry(bd(hb)), DeleteEntry(aS(l, hb, ap)), DeleteEntry(be(ap)), gX]
1640+ else [ScriptTransfer(dB.caller, 1, aM), DeleteEntry(gd), DeleteEntry(fI), DeleteEntry(bh(hq)), DeleteEntry(bd(hq)), DeleteEntry(aS(l, hq, ap)), DeleteEntry(be(ap)), hm]
15561641 }
15571642 }
15581643 }
15591644 }
15601645
15611646
15621647
1563-@Callable(dn)
1564-func claimRes (eC,hg) = {
1565- let gX = gU(dn)
1566- if ((size(dn.payments) != 0))
1648+@Callable(dB)
1649+func claimRes (eP,hv) = {
1650+ let hm = hj(dB)
1651+ if ((size(dB.payments) != 0))
15671652 then throw("No payments required")
15681653 else {
1569- let aK = toString(dn.originCaller)
1570- let dg = fS(aK, eC, cH, hg)
1571- $Tuple2((((dg._1 :+ StringEntry(dg._2, makeString(dg._3, ":"))) :+ StringEntry(dg._4, makeString(dg._5, ":"))) :+ gX), dg._3[aj])
1572- }
1573- }
1574-
1575-
1576-
1577-@Callable(dn)
1578-func claimResToWH (eC,hg) = {
1579- let gX = gU(dn)
1580- if ((size(dn.payments) != 0))
1654+ let aK = toString(dB.originCaller)
1655+ let dh = gh(aK, eP, cH, hv)
1656+ $Tuple2((((dh._1 :+ StringEntry(dh._2, makeString(dh._3, ":"))) :+ StringEntry(dh._4, makeString(dh._5, ":"))) :+ hm), dh._3[aj])
1657+ }
1658+ }
1659+
1660+
1661+
1662+@Callable(dB)
1663+func claimResToWH (eP,hv) = {
1664+ let hm = hj(dB)
1665+ if ((size(dB.payments) != 0))
15811666 then throw("No payments required")
15821667 else {
1583- let aK = toString(dn.originCaller)
1584- let dg = fS(aK, eC, cG, hg)
1585- $Tuple2((((dg._1 :+ StringEntry(dg._2, makeString(dg._3, ":"))) :+ StringEntry(dg._4, makeString(dg._5, ":"))) :+ gX), dg._5[aa])
1586- }
1587- }
1588-
1589-
1590-
1591-@Callable(dn)
1592-func flight (fk,fl) = {
1593- let gX = gU(dn)
1594- if (!(sigVerify_8Kb(fk, fl, cg)))
1595- then throw("signature does not match")
1596- else if ((size(dn.payments) != 0))
1597- then throw("No payments required")
1598- else {
1599- let dZ = split(toUtf8String(fk), ";")
1600- let fm = split(dZ[0], "|")
1601- let fn = split(fm[cJ], "_")
1602- let fo = parseIntValue(fn[0])
1603- let fp = parseIntValue(fn[1])
1604- let fq = split(dZ[1], ":")
1605- let fr = fq[0]
1606- let fs = parseIntValue(fm[cO])
1607- if (if ((fs > (lastBlock.timestamp + ci)))
1608- then true
1609- else ((lastBlock.timestamp - ci) > fs))
1610- then throw(((("signature outdated: logTime=" + toString(fs)) + ", bcTime=") + toString(lastBlock.timestamp)))
1611- else {
1612- let ft = fq[1]
1613- let fu = valueOrElse(getString(aJ(toString(dn.originCaller))), "")
1614- if ((fu != ft))
1615- then throw(((("Tx ids don't match! In state: " + fu) + ", in msg: ") + ft))
1616- else {
1617- let bm = toString(dn.caller)
1618- let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked")
1619- let fv = bi(bg)
1620- let fw = valueOrElse(getInteger(fv), 100)
1621- if ((fw != fo))
1622- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(fv), 100))) + " from state does not match one from flight log=") + toString(fo)))
1623- else if ((0 >= fo))
1624- then throw("You can't fly with zero health")
1625- else {
1626- let hc = bh(bg)
1627- let fL = valueOrElse(getString(hc), w)
1628- if ((fr == fL))
1629- then throw("You can't fly to the same location")
1630- else {
1631- let fx = if ((size(fm) > cP))
1632- then fm[cP]
1633- else ""
1634- let fy = if (if ((fp > 0))
1635- then (fx == "$")
1636- else false)
1637- then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
1638- else 0
1639- $Tuple2([StringEntry(hc, if ((fp > 0))
1640- then fr
1641- else fL), IntegerEntry(fv, fp), gX], fy)
1642- }
1643- }
1644- }
1645- }
1646- }
1647- }
1648-
1649-
1650-
1651-@Callable(dn)
1652-func heal (hh,hi,hj) = {
1653- let gX = gU(dn)
1654- if (if (if ((0 > hh))
1668+ let aK = toString(dB.originCaller)
1669+ let dh = gh(aK, eP, cG, hv)
1670+ $Tuple2((((dh._1 :+ StringEntry(dh._2, makeString(dh._3, ":"))) :+ StringEntry(dh._4, makeString(dh._5, ":"))) :+ hm), dh._5[aa])
1671+ }
1672+ }
1673+
1674+
1675+
1676+@Callable(dB)
1677+func flight (fx,fy) = {
1678+ let hm = hj(dB)
1679+ if ((size(dB.payments) != 0))
1680+ then throw("No payments required")
1681+ else {
1682+ let bm = toString(dB.caller)
1683+ let ef = fw(bm, fx, fy)
1684+ let hr = bh(ef._2)
1685+ let ga = valueOrElse(getString(hr), w)
1686+ if ((ef._4 == ga))
1687+ then throw("You can't fly to the same location")
1688+ else {
1689+ let ej = bf(ef._2)
1690+ let eS = ei(ej)
1691+ let du = di(eS[al], ef._5)
1692+ $Tuple2([StringEntry(hr, if ((ef._1 > 0))
1693+ then ef._4
1694+ else ga), StringEntry(ej, makeString([eS[ai], eS[aj], eS[ak], du], ":")), IntegerEntry(bi(ef._2), ef._1), hm], ef._3)
1695+ }
1696+ }
1697+ }
1698+
1699+
1700+
1701+@Callable(dB)
1702+func heal (hw,hx,hy) = {
1703+ let hm = hj(dB)
1704+ if (if (if ((0 > hw))
16551705 then true
1656- else (0 > hi))
1706+ else (0 > hx))
16571707 then true
1658- else (0 > hj))
1708+ else (0 > hy))
16591709 then throw("Quantity cannot be negative")
16601710 else {
1661- let bg = valueOrErrorMessage(getString(be(toString(dn.caller))), "You don't have a duck staked")
1662- let hk = [hh, hi, hj]
1663- let fv = bi(bg)
1664- let hl = valueOrElse(getInteger(fv), 100)
1665- if ((hl >= B))
1711+ let bg = valueOrErrorMessage(getString(be(toString(dB.caller))), "You don't have a duck staked")
1712+ let hz = [hw, hx, hy]
1713+ let fI = bi(bg)
1714+ let hA = valueOrElse(getInteger(fI), 100)
1715+ if ((hA >= B))
16661716 then throw((("HP should be < " + toString(B)) + " to heal"))
16671717 else {
1668- let dV = bf(bg)
1669- let eF = dU(dV)
1670- let hm = if ((eF[al] == ""))
1718+ let ej = bf(bg)
1719+ let eS = ei(ej)
1720+ let hB = if ((eS[al] == ""))
16711721 then nil
1672- else split(eF[al], "_")
1673- func hn (bI,ho) = {
1722+ else split(eS[al], "_")
1723+ func hC (bI,hD) = {
16741724 let bw = bI._2
1675- let dI = if ((size(hm) > bw))
1676- then parseIntValue(hm[bw])
1725+ let dW = if ((size(hB) > bw))
1726+ then parseIntValue(hB[bw])
16771727 else 0
16781728 if ((3 > bw))
16791729 then {
1680- let hp = hk[bw]
1681- if ((hp > dI))
1682- then throw(((("You have only " + toString(dI)) + " of ") + E[bw]))
1683- else $Tuple3((bI._1 :+ toString((dI - hp))), (bw + 1), (bI._3 + (ch[bw] * hp)))
1730+ let hE = hz[bw]
1731+ if ((hE > dW))
1732+ then throw(((("You have only " + toString(dW)) + " of ") + E[bw]))
1733+ else $Tuple3((bI._1 :+ toString((dW - hE))), (bw + 1), (bI._3 + (ch[bw] * hE)))
16841734 }
1685- else $Tuple3((bI._1 :+ toString(dI)), (bw + 1), bI._3)
1735+ else $Tuple3((bI._1 :+ toString(dW)), (bw + 1), bI._3)
16861736 }
16871737
1688- let dg = {
1738+ let dh = {
16891739 let bL = G
16901740 let bM = size(bL)
16911741 let bN = $Tuple3(nil, 0, 0)
16921742 func bO (bP,bQ) = if ((bQ >= bM))
16931743 then bP
1694- else hn(bP, bL[bQ])
1744+ else hC(bP, bL[bQ])
16951745
16961746 func bR (bP,bQ) = if ((bQ >= bM))
16971747 then bP
16981748 else throw("List size exceeds 50")
16991749
17001750 bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
17011751 }
1702- let hq = min([B, (hl + dg._3)])
1703- $Tuple2([IntegerEntry(fv, hq), StringEntry(dV, makeString_2C([eF[ai], eF[aj], eF[ak], makeString(dg._1, "_")], ":")), gX], hq)
1752+ let hF = min([B, (hA + dh._3)])
1753+ $Tuple2([IntegerEntry(fI, hF), StringEntry(ej, makeString_2C([eS[ai], eS[aj], eS[ak], makeString(dh._1, "_")], ":")), hm], hF)
17041754 }
17051755 }
17061756 }
17071757
17081758
17091759
1710-@Callable(dn)
1760+@Callable(dB)
17111761 func healES () = {
1712- let gX = gU(dn)
1713- if ((size(dn.payments) != 1))
1762+ let hm = hj(dB)
1763+ if ((size(dB.payments) != 1))
17141764 then throw("Exactly one payment required")
17151765 else {
1716- let gY = value(dn.payments[0])
1717- if ((gY.assetId != b))
1766+ let hn = value(dB.payments[0])
1767+ if ((hn.assetId != b))
17181768 then throw("Allowed USDT payment only!")
17191769 else {
1720- let bg = valueOrErrorMessage(getString(be(toString(dn.caller))), "You don't have a duck staked")
1721- let fv = bi(bg)
1722- let hl = valueOrElse(getInteger(fv), 100)
1723- if ((hl > 0))
1770+ let bg = valueOrErrorMessage(getString(be(toString(dB.caller))), "You don't have a duck staked")
1771+ let fI = bi(bg)
1772+ let hA = valueOrElse(getInteger(fI), 100)
1773+ if ((hA > 0))
17241774 then throw("HP should be 0 to call Emergency Service")
17251775 else {
1726- let dV = bf(bg)
1727- let eF = dU(dV)
1728- let hm = if ((eF[al] == ""))
1776+ let ej = bf(bg)
1777+ let eS = ei(ej)
1778+ let hB = if ((eS[al] == ""))
17291779 then nil
1730- else split(eF[al], "_")
1731- let hr = if ((size(hm) > 0))
1732- then parseIntValue(hm[0])
1780+ else split(eS[al], "_")
1781+ let hG = if ((size(hB) > 0))
1782+ then parseIntValue(hB[0])
17331783 else 0
1734- let hs = if ((size(hm) > 1))
1735- then parseIntValue(hm[1])
1784+ let hH = if ((size(hB) > 1))
1785+ then parseIntValue(hB[1])
17361786 else 0
1737- let ht = if ((size(hm) > 2))
1738- then parseIntValue(hm[2])
1787+ let hI = if ((size(hB) > 2))
1788+ then parseIntValue(hB[2])
17391789 else 0
1740- if (if (if ((hr > 0))
1790+ if (if (if ((hG > 0))
17411791 then true
1742- else (hs > 0))
1792+ else (hH > 0))
17431793 then true
1744- else (ht > 0))
1794+ else (hI > 0))
17451795 then throw("You have to use own Medical Kit")
17461796 else {
1747- let hu = getString(aG, bo())
1748- let hv = if (isDefined(hu))
1749- then split(value(hu), "_")
1797+ let hJ = getString(aG, bo())
1798+ let hK = if (isDefined(hJ))
1799+ then split(value(hJ), "_")
17501800 else nil
1751- let hw = if ((size(hv) > 0))
1752- then parseIntValue(hv[0])
1801+ let hL = if ((size(hK) > 0))
1802+ then parseIntValue(hK[0])
17531803 else 0
1754- if ((0 >= hw))
1804+ if ((0 >= hL))
17551805 then throw("There are no Medical Kits L1 at Emergency Service storage")
17561806 else {
1757- let hq = (hl + ch[0])
1758- let hx = makeString([toString((hw - 1)), removeByIndex(hv, 0)], "_")
1807+ let hF = (hA + ch[0])
1808+ let hM = makeString([toString((hL - 1)), removeByIndex(hK, 0)], "_")
17591809 let ca = split(G[0], "_")
1760- let hy = bZ(ca)
1761- let hz = parseIntValue(ca[T])
1762- let hA = fraction((hy * A), x, (10 * hz))
1763- if ((gY.amount != hA))
1764- then throw(("Payment attached should be " + toString(hA)))
1810+ let hN = bZ(ca)
1811+ let hO = parseIntValue(ca[T])
1812+ let hP = fraction((hN * A), x, (10 * hO))
1813+ if ((hn.amount != hP))
1814+ then throw(("Payment attached should be " + toString(hP)))
17651815 else {
1766- let dg = bs(invoke(aG, "updateEsStorage", [hx], [AttachedPayment(b, hA)]))
1767- $Tuple2([IntegerEntry(fv, hq), gX], dg)
1816+ let dh = bs(invoke(aG, "updateEsStorage", [hM], [AttachedPayment(b, hP)]))
1817+ $Tuple2([IntegerEntry(fI, hF), hm], dh)
17681818 }
17691819 }
17701820 }
17711821 }
17721822 }
17731823 }
17741824 }
17751825
17761826
17771827
1778-@Callable(dn)
1779-func updateBackpack (bg,hB) = {
1780- let gX = gU(dn)
1781- if ((dn.caller != aG))
1828+@Callable(dB)
1829+func updateBackpack (bg,hQ) = {
1830+ let hm = hj(dB)
1831+ if ((dB.caller != aG))
17821832 then throw("permission denied")
1783- else $Tuple2([StringEntry(bf(bg), hB), gX], hB)
1784- }
1785-
1786-
1787-
1788-@Callable(dn)
1833+ else $Tuple2([StringEntry(bf(bg), hQ), hm], hQ)
1834+ }
1835+
1836+
1837+
1838+@Callable(dB)
17891839 func buySLand () = {
1790- let gX = gU(dn)
1791- if ((size(dn.payments) != 1))
1840+ let hm = hj(dB)
1841+ if ((size(dB.payments) != 1))
17921842 then throw("Exactly one payment required")
17931843 else {
1794- let gY = value(dn.payments[0])
1795- if ((gY.assetId != b))
1844+ let hn = value(dB.payments[0])
1845+ if ((hn.assetId != b))
17961846 then throw("Allowed USDT payment only!")
1797- else if ((gY.amount != cn))
1847+ else if ((hn.amount != cn))
17981848 then throw(("Payment attached should be " + toString(cn)))
17991849 else {
1800- let dg = fb(dn.caller, dn.transactionId)
1801- $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2._1)
1850+ let dh = fo(dB.caller, dB.transactionId)
1851+ $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2._1)
18021852 }
18031853 }
18041854 }
18051855
18061856
18071857
1808-@Callable(dn)
1809-func expedition (fk,fl) = {
1810- let gX = gU(dn)
1811- if ((size(dn.payments) != 0))
1858+@Callable(dB)
1859+func expedition (fx,fy) = {
1860+ let hm = hj(dB)
1861+ if ((size(dB.payments) != 0))
18121862 then throw("No payments required")
18131863 else {
1814- let dg = fj(true, dn.caller, dn.transactionId, fk, fl)
1815- $Tuple2((dg._1 :+ gX), $Tuple2(dg._2, dg._3))
1816- }
1817- }
1818-
1819-
1820-
1821-@Callable(dn)
1864+ let dh = fN(dB.caller, dB.transactionId, fx, fy)
1865+ $Tuple2((dh._1 :+ hm), $Tuple2(dh._2, dh._3))
1866+ }
1867+ }
1868+
1869+
1870+
1871+@Callable(dB)
18221872 func upgradeInfra (aW) = {
1823- let gX = gU(dn)
1824- if ((size(dn.payments) != 0))
1873+ let hm = hj(dB)
1874+ if ((size(dB.payments) != 0))
18251875 then throw("No payments required")
18261876 else {
1827- let dg = gg(true, dn.caller, 0, aW)
1828- $Tuple2((dg._1 :+ gX), dg._2)
1829- }
1830- }
1831-
1832-
1833-
1834-@Callable(dn)
1835-func upgradeInfraUsdt (aW) = if ((dn.caller != this))
1877+ let dh = gv(true, dB.caller, 0, aW)
1878+ $Tuple2((dh._1 :+ hm), dh._2)
1879+ }
1880+ }
1881+
1882+
1883+
1884+@Callable(dB)
1885+func upgradeInfraUsdt (aW) = if ((dB.caller != this))
18361886 then throw("Permission denied")
18371887 else {
1838- let gX = gU(dn)
1839- if ((size(dn.payments) != 1))
1888+ let hm = hj(dB)
1889+ if ((size(dB.payments) != 1))
18401890 then throw("Exactly one payment required")
18411891 else {
1842- let gY = value(dn.payments[0])
1843- if ((gY.assetId != b))
1892+ let hn = value(dB.payments[0])
1893+ if ((hn.assetId != b))
18441894 then throw("Allowed USDT payment only!")
18451895 else {
1846- let dg = gg(false, dn.caller, gY.amount, aW)
1847- $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2)
1896+ let dh = gv(false, dB.caller, hn.amount, aW)
1897+ $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2)
18481898 }
18491899 }
18501900 }
18511901
18521902
18531903
1854-@Callable(dn)
1855-func activateArtifact (hC,aW) = {
1856- let gX = gU(dn)
1857- if ((size(dn.payments) != 0))
1904+@Callable(dB)
1905+func activateArtifact (hR,aW) = {
1906+ let hm = hj(dB)
1907+ if ((size(dB.payments) != 0))
18581908 then throw("No payments required")
18591909 else {
1860- let dg = {
1861- let c = hC
1910+ let dh = {
1911+ let c = hR
18621912 if (("PRESALE" == c))
1863- then gt(toString(dn.caller), aW)
1913+ then gI(toString(dB.caller), aW)
18641914 else throw("Unknown artifact")
18651915 }
1866- (dg :+ gX)
1867- }
1868- }
1869-
1870-
1871-
1872-@Callable(dn)
1873-func mergeLands (gy) = {
1874- let gX = gU(dn)
1875- if ((size(dn.payments) != 0))
1916+ (dh :+ hm)
1917+ }
1918+ }
1919+
1920+
1921+
1922+@Callable(dB)
1923+func mergeLands (gN) = {
1924+ let hm = hj(dB)
1925+ if ((size(dB.payments) != 0))
18761926 then throw("No payments required")
18771927 else {
1878- let dg = gS(true, toString(dn.caller), 0, gy, dn.transactionId)
1879- $Tuple2((dg._1 :+ gX), dg._2)
1880- }
1881- }
1882-
1883-
1884-
1885-@Callable(dn)
1886-func mergeLandsUsdt (gy) = {
1887- let gX = gU(dn)
1888- if ((size(dn.payments) != 1))
1928+ let dh = hh(true, toString(dB.caller), 0, gN, dB.transactionId)
1929+ $Tuple2((dh._1 :+ hm), dh._2)
1930+ }
1931+ }
1932+
1933+
1934+
1935+@Callable(dB)
1936+func mergeLandsUsdt (gN) = {
1937+ let hm = hj(dB)
1938+ if ((size(dB.payments) != 1))
18891939 then throw("Exactly one payment required")
18901940 else {
1891- let gY = value(dn.payments[0])
1892- if ((gY.assetId != b))
1941+ let hn = value(dB.payments[0])
1942+ if ((hn.assetId != b))
18931943 then throw("Allowed USDT payment only!")
18941944 else {
1895- let dg = gS(false, toString(dn.caller), gY.amount, gy, dn.transactionId)
1896- $Tuple2(((dg._1 :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), dg._2)
1945+ let dh = hh(false, toString(dB.caller), hn.amount, gN, dB.transactionId)
1946+ $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2)
18971947 }
18981948 }
18991949 }
19001950
19011951
19021952
1903-@Callable(dn)
1904-func cargoExchange (hD,aW) = {
1905- let gX = gU(dn)
1906- if ((size(dn.payments) != 0))
1953+@Callable(dB)
1954+func cargoExchange (hS,aW) = {
1955+ let hm = hj(dB)
1956+ if ((size(dB.payments) != 0))
19071957 then throw("No payments required")
19081958 else {
1909- let eE = split_4C(hD, ":")
1910- let aK = toString(dn.originCaller)
1959+ let eR = split_4C(hS, ":")
1960+ let aK = toString(dB.originCaller)
19111961 let bW = value(assetInfo(fromBase58String(aW)))
1912- let fO = aO(aW)
1913- if (!(isDefined(getInteger(fO))))
1962+ let gd = aO(aW)
1963+ if (!(isDefined(getInteger(gd))))
19141964 then throw((bW.name + " is not staked"))
19151965 else {
1916- let fQ = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1917- if ((fQ != aK))
1966+ let gf = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1967+ if ((gf != aK))
19181968 then throw((k + " is not yours"))
19191969 else {
1920- let eo = (bA(split(bW.description, "_")[W]) / o)
1921- let ep = valueOrElse(getInteger(aP(aW)), 0)
1970+ let eB = (bA(split(bW.description, "_")[W]) / o)
1971+ let eC = valueOrElse(getInteger(aP(aW)), 0)
19221972 let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1923- let fL = valueOrElse(getString(bh(bg)), w)
1924- let fM = split(value(fL), "_")
1925- if ((fM[bq] != "L"))
1926- then throw((("Duck location type is " + fM[bq]) + ", but should be L"))
1927- else if ((fM[br] != aW))
1973+ let ga = valueOrElse(getString(bh(bg)), w)
1974+ let gb = split(value(ga), "_")
1975+ if ((gb[bq] != "L"))
1976+ then throw((("Duck location type is " + gb[bq]) + ", but should be L"))
1977+ else if ((gb[br] != aW))
19281978 then throw(("Duck should be on the land " + aW))
19291979 else {
1930- let en = aV(aW)
1931- let eb = em(en, eo, ep)
1932- let dV = bf(bg)
1933- let eF = dU(dV)
1934- let dg = eD(eE, eb, eF)
1935- let ev = split(eb[ad], "_")
1936- let gd = (parseIntValue(ev[af]) + dg._7)
1937- let ge = (parseIntValue(ev[ag]) - dg._7)
1938-[StringEntry(dV, makeString_2C([eF[ai], dg._4, dg._5, dg._6], ":")), StringEntry(en, makeString_2C([eb[Z], dg._1, dg._2, dg._3, makeString([ev[ae], toString(gd), toString(ge), ev[ah]], "_")], ":")), gX]
1980+ let eA = aV(aW)
1981+ let eo = ez(eA, eB, eC)
1982+ let ej = bf(bg)
1983+ let eS = ei(ej)
1984+ let dh = eQ(eR, eo, eS)
1985+ let eI = split(eo[ad], "_")
1986+ let gs = (parseIntValue(eI[af]) + dh._7)
1987+ let gt = (parseIntValue(eI[ag]) - dh._7)
1988+[StringEntry(ej, makeString_2C([eS[ai], dh._4, dh._5, dh._6], ":")), StringEntry(eA, makeString_2C([eo[Z], dh._1, dh._2, dh._3, makeString([eI[ae], toString(gs), toString(gt), eI[ah]], "_")], ":")), hm]
19391989 }
19401990 }
19411991 }
19421992 }
19431993 }
19441994
19451995
19461996
1947-@Callable(dn)
1948-func saveWarehouse (er,aW) = {
1949- let gX = gU(dn)
1950- if ((dn.caller != aG))
1997+@Callable(dB)
1998+func saveWarehouse (eE,aW) = {
1999+ let hm = hj(dB)
2000+ if ((dB.caller != aG))
19512001 then throw("Access denied")
19522002 else {
1953- let en = aV(aW)
1954- let es = split_4C(er, ":")
1955- if ((size(es) != 5))
2003+ let eA = aV(aW)
2004+ let eF = split_4C(eE, ":")
2005+ if ((size(eF) != 5))
19562006 then throw("warehouse string should contain 4 ':' separators")
19572007 else {
1958- let hE = split(es[ad], "_")[ae]
1959- let gd = ea(es)
1960- let hF = dX(es[Z])
1961- let ge = ((hF - parseIntValue(hE)) - gd)
1962- let hG = makeString_2C([es[Z], es[aa], es[ab], es[ac], makeString([hE, toString(gd), toString(ge), toString(hF)], "_")], ":")
1963- $Tuple2([StringEntry(en, hG), gX], hG)
2008+ let hT = split(eF[ad], "_")[ae]
2009+ let gs = en(eF)
2010+ let hU = el(eF[Z])
2011+ let gt = ((hU - parseIntValue(hT)) - gs)
2012+ let hV = makeString_2C([eF[Z], eF[aa], eF[ab], eF[ac], makeString([hT, toString(gs), toString(gt), toString(hU)], "_")], ":")
2013+ $Tuple2([StringEntry(eA, hV), hm], hV)
19642014 }
19652015 }
19662016 }
19672017
19682018
19692019
1970-@Callable(dn)
1971-func fixWarehouseFormat (aW) = if ((dn.caller != aE))
2020+@Callable(dB)
2021+func fixWarehouseFormat (aW) = if ((dB.caller != aE))
19722022 then throw("Access denied")
19732023 else {
1974- let en = aV(aW)
2024+ let eA = aV(aW)
19752025 let bW = value(assetInfo(fromBase58String(aW)))
1976- let eo = (bA(split(bW.description, "_")[W]) / o)
1977- let ep = valueOrElse(getInteger(aP(aW)), 0)
1978- let es = em(en, eo, ep)
1979- let hE = bv(invoke(aG, "recalcLockedVolumeREADONLY", [aW, es], nil))
1980- let gd = ea(es)
1981- let hF = dX(es[Z])
1982- let ge = ((hF - hE) - gd)
1983- let hG = makeString_2C([es[Z], es[aa], es[ab], es[ac], makeString([toString(hE), toString(gd), toString(ge), toString(hF)], "_")], ":")
1984- $Tuple2([StringEntry(en, hG)], hG)
2026+ let eB = (bA(split(bW.description, "_")[W]) / o)
2027+ let eC = valueOrElse(getInteger(aP(aW)), 0)
2028+ let eF = ez(eA, eB, eC)
2029+ let hT = bv(invoke(aG, "recalcLockedVolumeREADONLY", [aW, eF], nil))
2030+ let gs = en(eF)
2031+ let hU = el(eF[Z])
2032+ let gt = ((hU - hT) - gs)
2033+ let hV = makeString_2C([eF[Z], eF[aa], eF[ab], eF[ac], makeString([toString(hT), toString(gs), toString(gt), toString(hU)], "_")], ":")
2034+ $Tuple2([StringEntry(eA, hV)], hV)
19852035 }
19862036
19872037
19882038
1989-@Callable(dn)
1990-func fixStakedPieces (ap) = if ((dn.caller != aE))
2039+@Callable(dB)
2040+func fixStakedPieces (ap) = if ((dB.caller != aE))
19912041 then throw("Access denied")
19922042 else {
1993- let gN = if ((ap == ""))
2043+ let hc = if ((ap == ""))
19942044 then 0
19952045 else {
19962046 let bT = getString(aF, aX(ap))
19972047 let bU = if (isDefined(bT))
19982048 then split_51C(value(bT), "_")
19992049 else nil
20002050 func bV (bI,aW) = {
20012051 let bW = value(assetInfo(fromBase58String(aW)))
20022052 let bB = split(bW.description, "_")[W]
20032053 (bI + bA(bB))
20042054 }
20052055
20062056 let bL = bU
20072057 let bM = size(bL)
20082058 let bN = 0
20092059 func bO (bP,bQ) = if ((bQ >= bM))
20102060 then bP
20112061 else bV(bP, bL[bQ])
20122062
20132063 func bR (bP,bQ) = if ((bQ >= bM))
20142064 then bP
20152065 else throw("List size exceeds 100")
20162066
20172067 bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
20182068 }
2019- $Tuple2([IntegerEntry(aY(ap), gN)], gN)
2069+ $Tuple2([IntegerEntry(aY(ap), hc)], hc)
20202070 }
20212071
20222072
20232073
2024-@Callable(dn)
2025-func setCustomName (aM,gG,aR) = {
2026- let gX = gU(dn)
2027- if ((size(dn.payments) != 1))
2074+@Callable(dB)
2075+func setCustomName (aM,gV,aR) = {
2076+ let hm = hj(dB)
2077+ if ((size(dB.payments) != 1))
20282078 then throw("Exactly one payment required")
20292079 else {
2030- let gY = value(dn.payments[0])
2031- if ((gY.assetId != b))
2080+ let hn = value(dB.payments[0])
2081+ if ((hn.assetId != b))
20322082 then throw("Allowed USDT payment only!")
2033- else if ((gY.amount != cj))
2083+ else if ((hn.amount != cj))
20342084 then throw(("Payment should be " + toString(cj)))
2035- else if (contains(gG, "__"))
2036- then throw(("Name should not contain '__': " + gG))
2037- else if ((size(gG) > ck))
2085+ else if (contains(gV, "__"))
2086+ then throw(("Name should not contain '__': " + gV))
2087+ else if ((size(gV) > ck))
20382088 then throw(("Name too long, maxLength=" + toString(ck)))
20392089 else {
2040- let aK = toString(dn.originCaller)
2041- let hH = {
2090+ let aK = toString(dB.originCaller)
2091+ let hW = {
20422092 let c = aR
20432093 if (("ACCOUNT" == c))
20442094 then {
2045- let hI = cE(gG)
2046- let hJ = getString(hI)
2047- if (isDefined(hJ))
2048- then throw(("Name already registered: " + gG))
2095+ let hX = cE(gV)
2096+ let hY = getString(hX)
2097+ if (isDefined(hY))
2098+ then throw(("Name already registered: " + gV))
20492099 else {
2050- let hK = ba(aK)
2051- let hL = getString(hK)
2052- let hM = if (isDefined(hL))
2053- then [DeleteEntry(cE(value(hL)))]
2100+ let hZ = ba(aK)
2101+ let ia = getString(hZ)
2102+ let ib = if (isDefined(ia))
2103+ then [DeleteEntry(cE(value(ia)))]
20542104 else nil
2055- ((hM :+ StringEntry(hK, gG)) :+ StringEntry(hI, aK))
2105+ ((ib :+ StringEntry(hZ, gV)) :+ StringEntry(hX, aK))
20562106 }
20572107 }
20582108 else if (("LAND" == c))
20592109 then {
20602110 let bW = value(assetInfo(fromBase58String(aM)))
2061- let fO = aO(aM)
2062- if (!(isDefined(getInteger(fO))))
2111+ let gd = aO(aM)
2112+ if (!(isDefined(getInteger(gd))))
20632113 then throw((bW.name + " is not staked"))
20642114 else {
2065- let fQ = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned"))
2066- if ((fQ != aK))
2115+ let gf = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned"))
2116+ if ((gf != aK))
20672117 then throw((k + " is not yours"))
20682118 else {
2069- let hI = cy(gG)
2070- let hJ = getString(hI)
2071- if (isDefined(hJ))
2072- then throw(("Name already registered: " + gG))
2119+ let hX = cy(gV)
2120+ let hY = getString(hX)
2121+ if (isDefined(hY))
2122+ then throw(("Name already registered: " + gV))
20732123 else {
2074- let hN = aN(aM)
2075- let hL = getString(hN)
2076- let hM = if (isDefined(hL))
2077- then [DeleteEntry(cy(value(hL)))]
2124+ let ic = aN(aM)
2125+ let ia = getString(ic)
2126+ let ib = if (isDefined(ia))
2127+ then [DeleteEntry(cy(value(ia)))]
20782128 else nil
2079- ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM))
2129+ ((ib :+ StringEntry(ic, gV)) :+ StringEntry(hX, aM))
20802130 }
20812131 }
20822132 }
20832133 }
20842134 else if (("DUCK" == c))
20852135 then {
20862136 let bW = value(assetInfo(fromBase58String(aM)))
2087- let fO = aO(aM)
2088- if (if (!(isDefined(getInteger(fO))))
2137+ let gd = aO(aM)
2138+ if (if (!(isDefined(getInteger(gd))))
20892139 then true
20902140 else !(isDefined(getString(be(aK)))))
20912141 then throw((bW.name + " is not staked"))
20922142 else {
2093- let fQ = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned"))
2094- if ((fQ != aK))
2143+ let gf = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned"))
2144+ if ((gf != aK))
20952145 then throw((l + " is not yours"))
20962146 else {
2097- let hI = cD(gG)
2098- let hJ = getString(hI)
2099- if (isDefined(hJ))
2100- then throw(("Name already registered: " + gG))
2147+ let hX = cD(gV)
2148+ let hY = getString(hX)
2149+ if (isDefined(hY))
2150+ then throw(("Name already registered: " + gV))
21012151 else {
2102- let hN = aZ(aM)
2103- let hL = getString(hN)
2104- let hM = if (isDefined(hL))
2105- then [DeleteEntry(cD(value(hL)))]
2152+ let ic = aZ(aM)
2153+ let ia = getString(ic)
2154+ let ib = if (isDefined(ia))
2155+ then [DeleteEntry(cD(value(ia)))]
21062156 else nil
2107- ((hM :+ StringEntry(hN, gG)) :+ StringEntry(hI, aM))
2157+ ((ib :+ StringEntry(ic, gV)) :+ StringEntry(hX, aM))
21082158 }
21092159 }
21102160 }
21112161 }
21122162 else throw("Unknown entity type")
21132163 }
2114- $Tuple2(((hH :+ ScriptTransfer(aG, gY.amount, b)) :+ gX), 0)
2164+ $Tuple2(((hW :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), 0)
21152165 }
21162166 }
21172167 }
21182168
21192169
21202170
2121-@Callable(dn)
2122-func setReferrals (hO,hP) = if ((dn.callerPublicKey != cg))
2171+@Callable(dB)
2172+func setReferrals (id,ie) = if ((dB.callerPublicKey != cg))
21232173 then throw("Permission denied")
21242174 else {
2125- let gX = gU(dn)
2126- if ((size(dn.payments) != 0))
2175+ let hm = hj(dB)
2176+ if ((size(dB.payments) != 0))
21272177 then throw("No payments required")
2128- else if (!(isDefined(addressFromString(hO))))
2129- then throw(("Invalid address: " + hO))
2130- else if (!(isDefined(addressFromString(hP))))
2131- then throw(("Invalid address: " + hP))
2178+ else if (!(isDefined(addressFromString(id))))
2179+ then throw(("Invalid address: " + id))
2180+ else if (!(isDefined(addressFromString(ie))))
2181+ then throw(("Invalid address: " + ie))
21322182 else {
2133- let hQ = cF()
2134- let hR = getString(hQ)
2135- let hS = if (isDefined(hR))
2136- then split_4C(value(hR), "_")
2183+ let if = cF()
2184+ let ig = getString(if)
2185+ let ih = if (isDefined(ig))
2186+ then split_4C(value(ig), "_")
21372187 else nil
2138- if (containsElement(hS, hP))
2139- then throw((hP + " is not newbie (already has referrals)"))
2188+ if (containsElement(ih, ie))
2189+ then throw((ie + " is not newbie (already has referrals)"))
21402190 else {
2141- let hT = bb(hP)
2142- let hU = getString(hT)
2143- if (if (isDefined(hU))
2144- then isDefined(addressFromString(value(hU)))
2191+ let ii = bb(ie)
2192+ let ij = getString(ii)
2193+ if (if (isDefined(ij))
2194+ then isDefined(addressFromString(value(ij)))
21452195 else false)
2146- then throw(((hP + " already has refBy: ") + value(hU)))
2196+ then throw(((ie + " already has refBy: ") + value(ij)))
21472197 else {
2148- let hV = bc(hO)
2149- let hW = getString(hV)
2150- let hX = if (isDefined(hW))
2151- then split_4C(value(hW), "_")
2198+ let ik = bc(id)
2199+ let il = getString(ik)
2200+ let im = if (isDefined(il))
2201+ then split_4C(value(il), "_")
21522202 else nil
2153- if (containsElement(hX, hP))
2154- then throw((((hO + " already contains ") + hP) + " within referrals"))
2203+ if (containsElement(im, ie))
2204+ then throw((((id + " already contains ") + ie) + " within referrals"))
21552205 else {
2156- let hY = makeString_2C((hX :+ hP), "_")
2157- let hZ = if (containsElement(hS, hO))
2158- then value(hR)
2159- else makeString_2C((hS :+ hO), "_")
2160- $Tuple2([StringEntry(hT, hO), StringEntry(hV, hY), StringEntry(hQ, hZ), gX], 0)
2206+ let in = makeString_2C((im :+ ie), "_")
2207+ let io = if (containsElement(ih, id))
2208+ then value(ig)
2209+ else makeString_2C((ih :+ id), "_")
2210+ $Tuple2([StringEntry(ii, id), StringEntry(ik, in), StringEntry(if, io), hm], 0)
21612211 }
21622212 }
21632213 }
21642214 }
21652215 }
21662216
21672217
21682218
2169-@Callable(dn)
2170-func splitByGlobalWeightsREADONLY (eC) = $Tuple2(nil, cY(eC))
2171-
2172-
2173-
2174-@Callable(dn)
2175-func splitByGlobalAndLocalWeightsREADONLY (ia,ib,dq) = {
2176- let dj = dp(dq)
2177- $Tuple2(nil, $Tuple2(cY(ia), cR(ib, dj)))
2178- }
2179-
2180-
2181-
2182-@Callable(dn)
2183-func getBackpackREADONLY (bg) = $Tuple2(nil, makeString(dU(bf(bg)), ":"))
2184-
2185-
2186-
2187-@Callable(dn)
2219+@Callable(dB)
2220+func splitByGlobalWeightsREADONLY (eP) = $Tuple2(nil, cZ(eP))
2221+
2222+
2223+
2224+@Callable(dB)
2225+func splitByGlobalAndLocalWeightsREADONLY (ip,iq,dE) = {
2226+ let dx = dD(dE)
2227+ $Tuple2(nil, $Tuple2(cZ(ip), cS(iq, dx)))
2228+ }
2229+
2230+
2231+
2232+@Callable(dB)
2233+func getBackpackREADONLY (bg) = $Tuple2(nil, makeString(ei(bf(bg)), ":"))
2234+
2235+
2236+
2237+@Callable(dB)
21882238 func getWarehouseREADONLY (aW) = {
21892239 let bW = value(assetInfo(fromBase58String(aW)))
2190- let eo = (bA(split(bW.description, "_")[W]) / o)
2191- let ep = valueOrElse(getInteger(aP(aW)), 0)
2192- $Tuple2(nil, makeString_2C(em(aV(aW), eo, ep), ":"))
2193- }
2194-
2195-
2196-
2197-@Callable(dn)
2198-func saveLastTx () = if ((dn.caller != aI))
2240+ let eB = (bA(split(bW.description, "_")[W]) / o)
2241+ let eC = valueOrElse(getInteger(aP(aW)), 0)
2242+ $Tuple2(nil, makeString_2C(ez(aV(aW), eB, eC), ":"))
2243+ }
2244+
2245+
2246+
2247+@Callable(dB)
2248+func saveLastTx () = if ((dB.caller != aI))
21992249 then throw("Access denied")
2200- else $Tuple2([gU(dn)], 42)
2250+ else $Tuple2([hj(dB)], 42)
22012251
22022252

github/deemru/w8io/03bedc9 
662.06 ms