tx · 5BeNQiorLDbL2pTybbEdae74L8EtwFmKQ6QpnJMvrM4A

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.06400000 Waves

2023.06.28 20:30 [2642803] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "5BeNQiorLDbL2pTybbEdae74L8EtwFmKQ6QpnJMvrM4A", "fee": 6400000, "feeAssetId": null, "timestamp": 1687973409065, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "4Re3Va2kBPK73dYQDRM3zRx4znwmuSkcpzyqxHuQcFvWenBsE95k7ovtHZY5TJDAigYbGp8j29gxyyYwQvgwN6Vw" ], "script": "base64:BgKYAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAoAEACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAJREFZTUlMTElTAIC4mSkADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAApFU1NFTExDT0VGAAoABU1BWEhQAGQACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgISMV8xXzFfMl8yXzVfMV8xMF8wCQDMCAICEzJfMl8yXzRfNF8xMF8xXzEwXzAJAMwIAgITM18zXzNfNl82XzE1XzFfMTBfMAkAzAgCAhMyXzVfNV8yXzdfNV8yXzEwMF8xCQDMCAICFzRfMTBfMTBfNF8xNF8xMF8yXzEwMF8xCQDMCAICFzZfMTVfMTVfNl8yMV8xNV8yXzEwMF8xCQDMCAICEjFfMV8xXzFfMV84XzFfMTBfMgkAzAgCAhMyXzJfMl8yXzJfMTZfMV8xMF8yCQDMCAICEzNfM18zXzNfM18yNF8xXzEwXzIJAMwIAgITOV85XzFfNV81XzFfNV8xMDBfMwkAzAgCAhcxOF8xOF8yXzEwXzEwXzJfNV8xMDBfMwkAzAgCAhcyN18yN18zXzE1XzE1XzNfNV8xMDBfMwkAzAgCAhIyXzJfMV8yXzJfMl8xXzEwXzQJAMwIAgISNF80XzJfNF80XzRfMV8xMF80CQDMCAICEjZfNl8zXzZfNl82XzFfMTBfNAUDbmlsABFyZWNpcGVJZHhQYWNrc2l6ZQAHAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAt2b2xPY2N1cGllZAABAAd2b2xGcmVlAAIACHZvbFRvdGFsAAMACmJwSWR4TGV2ZWwAAAAIYnBJZHhSZXMAAQAIYnBJZHhNYXQAAgAJYnBJZHhQcm9kAAMBCmdldFBrZ1NpemUBB3Byb2RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUHcHJvZElkeAIBXwURcmVjaXBlSWR4UGFja3NpemUBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYbGFuZEN1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhkdWNrQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBGFkZHIJAKwCAgIYYWNjb3VudEN1c3RvbU5hbWVCeUFkZHJfBQRhZGRyAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCgEGYWRkTWF0AgJhYwFqCQBkAgUCYWMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFAWoKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZhZGRNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUADWluY3ViYXRvckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRWt0VnV4MlJoY2hTTjYzRHNEbzRiNG16NFFxektTZUR2AwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAAticmVlZGVyQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BEVnVVNDVIN0VoNWRtdE5iblJOUlN0R3dVTEE3Tlk2SGIDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AA3B1YgEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgACG1lZEtpdEhwCQDMCAIAHgkAzAgCADwJAMwIAgB4BQNuaWwAEUZJVkVNSU5VVEVTTUlMTElTAOCnEgAMUkVOQU1JTkdDT1NUAMCWsQIACk1BWE5BTUVMRU4AMgAVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AICt4gQADEVYUE1BVEVSSUFMUwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACm3YLtqwcDCQAAAgEBVAUHJG1hdGNoMACqp4GzCQkAAgECDVVua25vd24gY2hhaW4AB0VYUFVTRFQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgOWadwMJAAACAQFUBQckbWF0Y2gwAIDlmncJAAIBAg1Vbmtub3duIGNoYWluAAVGSVZFWAkAtgIBAAUAB1RXRU5UWVgJALYCAQAUAAhUV0VOVFkyWAkAtgIBCQBoAgAUABQACFRXRU5UWTNYCQC2AgEJAGgCCQBoAgAUABQAFAAIVFdFTlRZNFgJALYCAQkAaAIJAGgCCQBoAgAUABQAFAAUAAhUV0VOVFk1WAkAtgIBCQBoAgkAaAIJAGgCCQBoAgAUABQAFAAUABQAD1BSRVNBTEVOVU1MQU5EUwD0AwESa2V5TmV4dEZyZWVMYW5kTnVtAAILbmV4dExhbmROdW0BEGtleUxhbmRUb0Fzc2V0SWQBB2xhbmROdW0JAKwCAgIMbGFuZFRvQXNzZXRfBQdsYW5kTnVtARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFsYW5kQnlDdXN0b21OYW1lXwUEbmFtZQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgIcaW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwR0eXBlB2Fzc2V0SWQJb3duZXJBZGRyCQC5CQIJAMwIAgIibGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQJAMwIAgUJb3duZXJBZGRyBQNuaWwCAV8BEWtleUxhbmROdW1Ub093bmVyAQdsYW5kTnVtCQCsAgICCmxhbmRPd25lcl8FB2xhbmROdW0BGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWR1Y2tCeUN1c3RvbU5hbWVfBQRuYW1lARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQRuYW1lCQCsAgICFGFjY291bnRCeUN1c3RvbU5hbWVfBQRuYW1lAQlrZXlPbGRpZXMAAgpvbGRpZXNMaXN0AAtjbGFpbU1vZGVXaAAAAA1jbGFpbU1vZGVEdWNrAAEAE2NsYWltTW9kZVdoVGhlbkR1Y2sAAgAIZmxIZWFsdGgAAAALZmxUaW1lc3RhbXAABQAHZmxCb251cwAGAAtmbFByb2RzVXNlZAAHAQduZnROYW1lAgdsYW5kTnVtCGxhbmRTaXplCQCsAgIJAKwCAgUKTEFORFBSRUZJWAUHbGFuZE51bQUIbGFuZFNpemUBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBtYXRlcmlhbCBpZHg9CQCkAwEFA2lkeAILLCB5b3UgaGF2ZSAJAJEDAgUDaGFzBQNpZHgCCywgYnV0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AJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIYWRkTGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCBQFyAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfCgEMYWRkUGFydExpc3RzAgNhY2MBaQQGd2hQYXJ0CQBrAwkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkFBndoUGFydAkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQZ3aFBhcnQEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNu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ZVRvdGFsVm9sdW1lAQUJdm9sUHJlZml4BAV3aFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQV3aEtleQkArAICBQl2b2xQcmVmaXgCGzowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDo6MAQCd2gJALwJAgUFd2hTdHICAToECndoT2NjdXBpZWQJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAZ3aExvZnQDCQBmAgAFCQCQAwEFAndoCQC5CQIJAMwIAgIBMAkAzAgCCQCkAwEFCndoT2NjdXBpZWQJAMwIAgkApAMBCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwQEbG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8ECHdoTG9ja2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUJdm9sTG9ja2VkBANvY2MDCQBmAgkAkAMBBQRsb2Z0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUKd2hPY2N1cGllZAkAuQkCCQDMCAIJAKQDAQUId2hMb2NrZWQJAMwIAgkApAMBBQNvY2MJAMwIAgkApAMBCQBlAgkAZQIFB3doVG90YWwFCHdoTG9ja2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEJY3VycmVudFdoBAtvY2N1cGllZFZvbAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAkAZQIJAGUCCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMFC29jY3VwaWVkVm9sBQ9jdXJyV2hMb2NrZWRWb2wBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4AQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3docgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQQBcgoAAiRsBQhyZXNQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdlICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdk0CA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hNYXQFAWkEA2JwbQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaE1hdAUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrTWF0BQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2htAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0EAW0KAAIkbAUIbWF0UGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwIBQFyAl80CgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNtdk0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQNtdlACA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAdwa2dTaXplCQEKZ2V0UGtnU2l6ZQEFAWkEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docAMJAGYCCQCQAwEFCmN1cnJXaFByb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyV2hQcm9kBQFpAAAEA2JwcAMJAGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQdwa2dTaXplCQEIdG9Wb2x1bWUCBQN3aHAFB3BrZ1NpemUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIF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bnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEMZmxpZ2h0Q29tbW9uAwh1c2VyQWRkcgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgE7BAlmbGlnaHRMb2cJALUJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFCWZsaWdodExvZwUIZmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAtuZXdMb2NUeFZlcgkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFC25ld0xvY1R4VmVyAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmbGlnaHRMb2cFC2ZsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAMJAQIhPQIFDG9sZEZyb21TdGF0ZQUFY3VySFAJAAIBCQCsAgIJAKwCAgkArAICAgpvbGRIZWFsdGg9CQCkAwEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEQZXhwZWRpdGlvbkNvbW1vbgQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBCAUBZgJfMgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFmAl8yBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwYFBW1MaXN0BQxFWFBNQVRFUklBTFMCAV8EB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQMJAGcCAAAIBQFmAl8xCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAAACQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFA25pbAIAAAAEAWUJARJleHBlZGl0aW9uSW50ZXJuYWwCBQZjYWxsZXIFBHR4SWQEAmlkCAgFAWUCXzICXzEJAJUKAwkAzQgCCQDNCAIJAM0IAggFAWUCXzEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BCAUBZgJfMgkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIFB25ld1Byb2QFA25pbAIBOgUCaWQIBQFmAl8zAQxhcHBseUJvbnVzZXMCC2xhbmRBc3NldElkBnBpZWNlcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABARhZGQ2CQBpAgUKaW5mcmFMZXZlbAAGBARhZGQ3CQBpAgUKaW5mcmFMZXZlbAAHCQBkAgkAZAIFD0RBSUxZUkVTQllQSUVDRQkAawMFD0RBSUxZUkVTQllQSUVDRQkAZAIJAGQCBQppbmZyYUxldmVsBQRhZGQ2CQBoAgACBQRhZGQ3AAUJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCWFydFBpZWNlcwkAaAIFBnBpZWNlcwAFARRjaGVja0NsYWltQ29uZGl0aW9ucwMEYWRkcgljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgQNJHQwMjQ0NDYyNDk4NQMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCUCgIFDWxhbmRBc3NldElkSW4JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwJAJQKAgkAkQMCBQNsb2MFCGxvY0lkeElkBQtkdWNrQXNzZXRJZAQLbGFuZEFzc2V0SWQIBQ0kdDAyNDQ0NjI0OTg1Al8xBAZkdWNrSWQIBQ0kdDAyNDQ0NjI0OTg1Al8yBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIFTGFuZCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfCQCWCgQFBmR1Y2tJZAULbGFuZEFzc2V0SWQFAWQFCXNhdmVkVGltZQEQY2xhaW1SZXNJbnRlcm5hbAQEYWRkcgZhbW91bnQJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4DCQBmAgAABQZhbW91bnQJAAIBAg9OZWdhdGl2ZSBhbW91bnQEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFCWNsYWltTW9kZQUNbGFuZEFzc2V0SWRJbgQIbGFuZFNpemUJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAgFAWMCXzQDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBCAUBYwJfNAIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDI3MzU5MjgyMzADCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDI3MzU5MjgyMzACXzEEBWJwUmVzCAUNJHQwMjczNTkyODIzMAJfMgQFbG9mdE8IBQ0kdDAyNzM1OTI4MjMwAl8zBAVsb2Z0RggFDSR0MDI3MzU5MjgyMzACXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkAQ11cEluZnJhQ29tbW9uBAxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQLbGFuZEFzc2V0SWQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQtsYW5kQXNzZXRJZAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUECGluZnJhS2V5CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yBAhjdXJMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhpbmZyYUtleQAAAwkAZwIFCGN1ckxldmVsAAMJAAIBAiZDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gMwQIbmV3TGV2ZWwJAGQCBQhjdXJMZXZlbAABBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ1tZXJnZUludGVybmFsBwtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECQC1CQIIBQNhY2MCXzYCAV8FDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCaCggFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAdwcm9wU3RyCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAmgoIBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUHcHJvcFN0cgUHbGFuZHNJbgAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIJAQNhYnMBCQCeAwEFBHR4SWQFDGNvbnRpbmVudElkeAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQFBGFkZHIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACAUBcgJfNgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAwRhZGRyDGxhbmRBc3NldElkcwR0eElkCQENbWVyZ2VJbnRlcm5hbAcCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAAABA20ybAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkdAAEAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQALwMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQANgMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uBQxzaG91bGRVc2VNYXQEYWRkcg1wYXltZW50QW1vdW50DGxhbmRBc3NldElkcwR0eElkBAttZXJnZVJlc3VsdAQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAwkAAAIAAwUHJG1hdGNoMAkBA20ybAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50AwkAAAIABQUHJG1hdGNoMAkBBGwyeGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAkAAgECDVVua25vd24gbWVyZ2UFC21lcmdlUmVzdWx0AQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkHgFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUAAQQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzBAlvbGRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECXdsZ1Jlc3VsdAMJAAACBQlvbGRQaWVjZXMAAAkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAILb25TdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwA////////////AQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEAXQICQEFdmFsdWUBCQDtBwEFBmhlaWdodAl0aW1lc3RhbXAEC3JlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFC3JlbGVhc2VUaW1lBQF0CQACAQkArAICAjlZb3VyIGdXTCBhcmUgdGFraW5nIHBhcnQgaW4gdm90aW5nLCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQULcmVsZWFzZVRpbWUECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECW5ld1BpZWNlcwMJAGYCBQZwaWVjZXMFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzBQZwaWVjZXMECXdsZ1Jlc3VsdAMJAAACBQluZXdQaWVjZXMAAAkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAINb25VbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAD///////////8BCQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQUJbmV3UGllY2VzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQl3bGdSZXN1bHQBaQEJc3Rha2VEdWNrAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpEVUNLUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUNaW5jdWJhdG9yQWRkcgkBAiE9AggFBWFzc2V0Bmlzc3VlcgULYnJlZWRlckFkZHIHCQACAQkArAICCQCsAgICElVua25vd24gaXNzdWVyIG9mIAUKRFVDS1BSRUZJWAIGIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAMJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgICHVlvdSBhbHJlYWR5IHN0YWtlZCBvbmUgZHVjazogCAUFYXNzZXQEbmFtZQQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgQIbG9jYXRpb24JAKIIAQUGbG9jS2V5BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFCGJhY2twYWNrBQNuaWwJAM0IAgkAzQgCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgUDbmlsCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyAGQFDHByb2xvZ0FjdGlvbgFpAQt1bnN0YWtlRHVjawEKYXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEJANgEAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBCQDYBAEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFB2FkZHJlc3MJAAIBAhdTdGFrZWQgTkZUIGlzIG5vdCB5b3VycwQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAMJAGYCAGQFBmhlYWx0aAkAAgECJlBsZWFzZSBoZWFsIHlvdXIgZHVjayBiZWZvcmUgdW5zdGFraW5nCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzMFCGJwSWR4UmVzAWkBDGNsYWltUmVzVG9XSAIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQtjbGFpbU1vZGVXaAUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzQgCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al81BQh3aElkeFJlcwFpAQZmbGlnaHQCB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEIBQFmAl8yBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAAACCAUBZgJfNAULY3VyTG9jYXRpb24JAAIBAiJZb3UgY2FuJ3QgZmx5IHRvIHRoZSBzYW1lIGxvY2F0aW9uBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWYCXzIEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHbmV3UHJvZAkBEHN1YnRyYWN0UHJvZHVjdHMCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QIBQFmAl81CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIIBQFmAl8xAAAIBQFmAl80BQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEIBQFmAl8yCAUBZgJfMQkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgFAWYCXzMBaQEEaGVhbAMKcXVhbnRpdHlMMQpxdWFudGl0eUwyCnF1YW50aXR5TDMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDAwMJAGYCAAAFCnF1YW50aXR5TDEGCQBmAgAABQpxdWFudGl0eUwyBgkAZgIAAAUKcXVhbnRpdHlMMwkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQDcXRzCQDMCAIFCnF1YW50aXR5TDEJAMwIAgUKcXVhbnRpdHlMMgkAzAgCBQpxdWFudGl0eUwzBQNuaWwECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkAZwIFCW9sZEhlYWx0aAUFTUFYSFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwgCQCkAwEFBU1BWEhQAgggdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RM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CWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAtQkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAJEDAgUIbWVkS2l0SHAAAAQFbmV3RVMJALkJAgkAzAgCCQCkAwEJAGUCBQtleGlzdEFtb3VudAABCQDRCAIFDGV4aXN0QW1vdW50cwAAAgFfBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8ECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAhwYWNrU2l6ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQURcmVjaXBlSWR4UGFja3NpemUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIACgUIcGFja1NpemUDCQECIT0CCAUDcG10BmFtb3VudAUJc2VsbFByaWNlCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUJc2VsbFByaWNlBAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPZWNvbm9teUNvbnRyYWN0Ag91cGRhdGVFc1N0b3JhZ2UJAMwIAgUFbmV3RVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdXNkdEFzc2V0SWQFCXNlbGxQcmljZQUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQZyZXN1bHQBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFB25ld1BhY2sBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggIBQZyZXN1bHQCXzICXzEBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQEQZXhwZWRpdGlvbkNvbW1vbgQIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnCQCUCgIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARB1cGdyYWRlSW5mcmFVc2R0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBwgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAULbGFuZEFzc2V0SWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIJAKUIAQgFAWkGY2FsbGVyBQtsYW5kQXNzZXRJZAkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQYJAKUIAQgFAWkGY2FsbGVyAAAFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpAQ5tZXJnZUxhbmRzVXNkdAEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQcJAKUIAQgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQEPZml4U3Rha2VkUGllY2VzAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAxzdGFrZWRQaWVjZXMDCQAAAgUHYWRkcmVzcwIAAAAECGxhbmRzU3RyCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwKAQdvbmVMYW5kAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECGxhbmRTaXplCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQkAZAIFA2FjYwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplCgACJGwFBWxhbmRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdvbmVMYW5kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhVMaXN0IHNpemUgZXhjZWVkcyAxMDAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AD8AQABBAEIAQwBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgBfAGAAYQBiAGMAZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MFDHN0YWtlZFBpZWNlcwUDbmlsBQxzdGFrZWRQaWVjZXMBaQENc2V0Q3VzdG9tTmFtZQMHYXNzZXRJZApjdXN0b21OYW1lBHR5cGUEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcgMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbgAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQluZXdQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJb2xkUGxheWVyCQEFdmFsdWUBBQRvbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBAiE9AggFAWkGY2FsbGVyBQt3bGdDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkAzAgCCQEGcHJvbG9nAQUBaQUDbmlsACoAkdkPSQ==", "height": 2642803, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: D29kBp3N4g14JqRFvanaL1j4Q5p1Dcy3VdjVk1cMkr6W Next: EwejSD1u6h8vHdktNygmbmoJ2n7qHUvVbnVSCjhapQ4F Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = take(drop(this.bytes, 1), 1)
5-
6-let b = {
7- let c = a
8- if ((base58'2W' == c))
4+let a = "LAND"
5+
6+let b = "DUCK"
7+
8+let c = "PRESALE"
9+
10+let d = 6
11+
12+let e = 3456000
13+
14+let f = 86400000
15+
16+let g = 10000000000
17+
18+let h = "Africa_F_Africa"
19+
20+let i = 39637
21+
22+let j = 10
23+
24+let k = 100
25+
26+let l = ["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"]
27+
28+let m = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
29+
30+let n = ["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"]
31+
32+let o = 7
33+
34+let p = 0
35+
36+let q = 1
37+
38+let r = 2
39+
40+let s = 3
41+
42+let t = 4
43+
44+let u = 0
45+
46+let v = 1
47+
48+let w = 2
49+
50+let x = 3
51+
52+let y = 0
53+
54+let z = 1
55+
56+let A = 2
57+
58+let B = 3
59+
60+func C (D) = parseIntValue(split(n[D], "_")[o])
61+
62+
63+func E (F) = ("lastTxIdByUser_" + F)
64+
65+
66+func G (H) = ("nftOwner_" + H)
67+
68+
69+func I (H) = ("landCustomNameByAssetId_" + H)
70+
71+
72+func J (H) = ("stakedTime_" + H)
73+
74+
75+func K (H) = ("infraLevel_" + H)
76+
77+
78+func L (M,H) = makeString(["landArtStatus", M, H], "_")
79+
80+
81+func N (O,H,P) = ((((("stakedTimeByTypeAssetIdAndOwner_" + O) + "_") + H) + "_") + P)
82+
83+
84+func Q (R) = ("wareHouse_" + R)
85+
86+
87+func S (P) = ("stakedPiecesByOwner_" + P)
88+
89+
90+func T (H) = ("duckCustomNameByAssetId_" + H)
91+
92+
93+func U (F) = ("accountCustomNameByAddr_" + F)
94+
95+
96+func V (F) = ("accRefBy_" + F)
97+
98+
99+func W (F) = ("accReferrals_" + F)
100+
101+
102+func X (H) = ("duckOwner_" + H)
103+
104+
105+func Y (P) = ("stakedDuckByOwner_" + P)
106+
107+
108+func Z (aa) = ("backPack_" + aa)
109+
110+
111+func ab (aa) = ("duckLocation_" + aa)
112+
113+
114+func ac (aa) = ("duckHealth_" + aa)
115+
116+
117+func ad () = "contractsBlocked"
118+
119+
120+func ae (af) = ("%s%s__userGwlReleaseTime__" + af)
121+
122+
123+func ag () = "emergencyWarehouseProducts"
124+
125+
126+let ah = 1
127+
128+let ai = 2
129+
130+func aj (ak) = {
131+ func al (am,an) = (am + parseIntValue(ak[an]))
132+
133+ let ao = [0, 1, 2, 3, 4, 5]
134+ let ap = size(ao)
135+ let aq = 0
136+ func ar (as,at) = if ((at >= ap))
137+ then as
138+ else al(as, ao[at])
139+
140+ func au (as,at) = if ((at >= ap))
141+ then as
142+ else throw("List size exceeds 6")
143+
144+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
145+ }
146+
147+
148+let av = take(drop(this.bytes, 1), 1)
149+
150+let aw = {
151+ let ax = av
152+ if ((base58'2W' == ax))
9153 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
10- else if ((base58'2T' == c))
154+ else if ((base58'2T' == ax))
11155 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
12156 else throw("Unknown chain")
13157 }
14158
15-let d = {
16- let c = a
17- if ((base58'2W' == c))
159+let ay = {
160+ let ax = av
161+ if ((base58'2W' == ax))
18162 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
19- else if ((base58'2T' == c))
163+ else if ((base58'2T' == ax))
20164 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
21165 else throw("Unknown chain")
22166 }
23167
24-let e = {
25- let c = a
26- if ((base58'2W' == c))
168+let az = {
169+ let ax = av
170+ if ((base58'2W' == ax))
27171 then 10000000000
28- else if ((base58'2T' == c))
172+ else if ((base58'2T' == ax))
29173 then 100000000
30174 else throw("Unknown chain")
31175 }
32176
33-let f = "__"
34-
35-let g = 1000000
36-
37-let h = 10000000
38-
39-let i = 100000000
40-
41-let j = 10000000000
42-
43-let k = "LAND"
44-
45-let l = "DUCK"
46-
47-let m = "PRESALE"
48-
49-let n = 6
50-
51-let o = 25
52-
53-let p = 100
54-
55-let q = 225
56-
57-let r = 400
58-
59-let s = 625
60-
61-let t = 3456000
62-
63-let u = 86400000
64-
65-let v = 10000000000
66-
67-let w = "Africa_F_Africa"
68-
69-let x = 39637
70-
71-let y = 3
72-
73-let z = 4
74-
75-let A = 10
76-
77-let B = 100
78-
79-let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
80-
81-let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
82-
83-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"]
84-
85-let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
86-
87-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"]
88-
89-let H = 0
90-
91-let I = 1
92-
93-let J = 2
94-
95-let K = 3
96-
97-let L = 4
98-
99-let M = 0
100-
101-let N = 1
102-
103-let O = 2
104-
105-let P = 3
106-
107-let Q = 4
108-
109-let R = 5
110-
111-let S = 6
112-
113-let T = 7
114-
115-let U = 8
116-
117-let V = 0
118-
119-let W = 1
120-
121-let X = 2
122-
123-let Y = 3
124-
125-let Z = 0
126-
127-let aa = 1
128-
129-let ab = 2
130-
131-let ac = 3
132-
133-let ad = 4
134-
135-let ae = 0
136-
137-let af = 1
138-
139-let ag = 2
140-
141-let ah = 3
142-
143-let ai = 0
144-
145-let aj = 1
146-
147-let ak = 2
148-
149-let al = 3
150-
151-func am (an) = parseIntValue(split(G[an], "_")[T])
152-
153-
154-func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
155-
156-
157-func ar (aq,as) = valueOrElse(getInteger(this, aq), as)
158-
159-
160-let at = 1
161-
162-let au = 2
163-
164-let av = 3
165-
166-let aw = 4
167-
168-func ax () = "%s__restConfig"
169-
170-
171-func ay () = "%s__restAddr"
172-
173-
174-func az (aA) = split_4C(ao(aA, ax()), f)
175-
176-
177-func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD)))
178-
179-
180-let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d))
181-
182-let aC = az(aE)
183-
184-let aF = aB(aC, at)
185-
186-let aG = aB(aC, au)
187-
188-let aH = aB(aC, av)
189-
190-let aI = aB(aC, aw)
191-
192-func aJ (aK) = ("lastTxIdByUser_" + aK)
193-
194-
195-func aL (aM) = ("nftOwner_" + aM)
196-
197-
198-func aN (aM) = ("landCustomNameByAssetId_" + aM)
199-
200-
201-func aO (aM) = ("stakedTime_" + aM)
202-
203-
204-func aP (aM) = ("infraLevel_" + aM)
205-
206-
207-func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_")
208-
209-
210-func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU)
211-
212-
213-func aV (aW) = ("wareHouse_" + aW)
214-
215-
216-func aX (aU) = ("stakedLandsByOwner_" + aU)
217-
218-
219-func aY (aU) = ("stakedPiecesByOwner_" + aU)
220-
221-
222-func aZ (aM) = ("duckCustomNameByAssetId_" + aM)
223-
224-
225-func ba (aK) = ("accountCustomNameByAddr_" + aK)
226-
227-
228-func bb (aK) = ("accRefBy_" + aK)
229-
230-
231-func bc (aK) = ("accReferrals_" + aK)
232-
233-
234-func bd (aM) = ("duckOwner_" + aM)
235-
236-
237-func be (aU) = ("stakedDuckByOwner_" + aU)
238-
239-
240-func bf (bg) = ("backPack_" + bg)
241-
242-
243-func bh (bg) = ("duckLocation_" + bg)
244-
245-
246-func bi (bg) = ("duckHealth_" + bg)
247-
248-
249-func bj () = "resTypesProportions"
250-
251-
252-func bk () = "contractsBlocked"
253-
254-
255-func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm)
256-
257-
258-func bn (aW) = ("landOrder_" + aW)
259-
260-
261-func bo () = "emergencyWarehouseProducts"
262-
263-
264-let bp = 0
265-
266-let bq = 1
267-
268-let br = 2
269-
270-func bs (bt) = {
271- let c = bt
272- if ($isInstanceOf(c, "String"))
177+let aA = "__"
178+
179+let aB = 1000000
180+
181+let aC = 100000000
182+
183+let aD = 25
184+
185+let aE = 100
186+
187+let aF = 225
188+
189+let aG = 400
190+
191+let aH = 625
192+
193+func aI (aJ,aK) = valueOrErrorMessage(getString(aJ, aK), makeString(["mandatory ", toString(aJ), ".", aK, " is not defined"], ""))
194+
195+
196+let aL = 1
197+
198+let aM = 2
199+
200+let aN = 3
201+
202+let aO = 4
203+
204+func aP () = "%s__restConfig"
205+
206+
207+func aQ () = "%s__restAddr"
208+
209+
210+func aR (aS) = split_4C(aI(aS, aP()), aA)
211+
212+
213+func aT (aU,aV) = valueOrErrorMessage(addressFromString(aU[aV]), ("Rest cfg doesn't contain address at index " + toString(aV)))
214+
215+
216+let aW = addressFromStringValue(valueOrElse(getString(this, aQ()), ay))
217+
218+let aU = aR(aW)
219+
220+let aX = aT(aU, aL)
221+
222+let aY = aT(aU, aM)
223+
224+let aZ = aT(aU, aN)
225+
226+let ba = aT(aU, aO)
227+
228+let bb = 0
229+
230+let bc = 1
231+
232+let bd = 2
233+
234+let be = 3
235+
236+func bf () = "resTypesProportions"
237+
238+
239+func bg (P) = ("stakedLandsByOwner_" + P)
240+
241+
242+func bh (bi) = {
243+ let ax = bi
244+ if ($isInstanceOf(ax, "String"))
273245 then {
274- let bu = c
275- bu
246+ let bj = ax
247+ bj
276248 }
277249 else throw("fail to cast into String")
278250 }
279251
280252
281-func bv (bt) = {
282- let c = bt
283- if ($isInstanceOf(c, "Int"))
253+func bk (bi) = {
254+ let ax = bi
255+ if ($isInstanceOf(ax, "Int"))
284256 then {
285- let bw = c
286- bw
257+ let bl = ax
258+ bl
287259 }
288260 else throw("fail to cast into Int")
289261 }
290262
291263
292-func bx (bt) = {
293- let c = bt
294- if ($isInstanceOf(c, "List[Any]"))
295- then {
296- let by = c
297- by
298- }
299- else throw("fail to cast into List[Any]")
300- }
301-
302-
303-func bz (bt) = {
304- let c = bt
305- if ($isInstanceOf(c, "Boolean"))
306- then {
307- let bu = c
308- bu
309- }
310- else throw("fail to cast into Boolean")
311- }
312-
313-
314-func bA (bB) = {
315- let c = bB
316- if (("S" == c))
317- then o
318- else if (("M" == c))
319- then p
320- else if (("L" == c))
321- then q
322- else if (("XL" == c))
323- then r
324- else if (("XXL" == c))
325- then s
264+func bm (bn) = {
265+ let ax = bn
266+ if (("S" == ax))
267+ then aD
268+ else if (("M" == ax))
269+ then aE
270+ else if (("L" == ax))
271+ then aF
272+ else if (("XL" == ax))
273+ then aG
274+ else if (("XXL" == ax))
275+ then aH
326276 else throw("Unknown land size")
327277 }
328278
329279
330-let bC = 0
331-
332-let bD = 1
333-
334-func bE (bF) = {
335- let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_")
336- func bH (bI,bJ) = (bI + parseIntValue(bJ))
337-
338- let bK = {
339- let bL = bG
340- let bM = size(bL)
341- let bN = 0
342- func bO (bP,bQ) = if ((bQ >= bM))
343- then bP
344- else bH(bP, bL[bQ])
345-
346- func bR (bP,bQ) = if ((bQ >= bM))
347- then bP
348- else throw("List size exceeds 6")
349-
350- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
351- }
352- let bS = if ((bF == ""))
353- then 0
354- else {
355- let bT = getString(aF, aX(bF))
356- let bU = if (isDefined(bT))
357- then split_51C(value(bT), "_")
358- else nil
359- func bV (bI,aW) = {
360- let bW = value(assetInfo(fromBase58String(aW)))
361- let bB = split(bW.description, "_")[W]
362- (bI + bA(bB))
363- }
364-
365- let bL = bU
366- let bM = size(bL)
367- let bN = 0
368- func bX (bP,bQ) = if ((bQ >= bM))
369- then bP
370- else bV(bP, bL[bQ])
371-
372- func bY (bP,bQ) = if ((bQ >= bM))
373- then bP
374- else throw("List size exceeds 100")
375-
376- 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)
377- }
378-[bK, bS]
379- }
380-
381-
382-func bZ (ca) = {
383- func cb (cc,cd) = (cc + parseIntValue(ca[cd]))
384-
385- let bL = [0, 1, 2, 3, 4, 5]
386- let bM = size(bL)
387- let bN = 0
388- func bO (bP,bQ) = if ((bQ >= bM))
389- then bP
390- else cb(bP, bL[bQ])
391-
392- func bR (bP,bQ) = if ((bQ >= bM))
393- then bP
394- else throw("List size exceeds 6")
395-
396- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
397- }
398-
399-
400-let ce = {
401- let c = a
402- if ((base58'2W' == c))
280+let bo = {
281+ let ax = av
282+ if ((base58'2W' == ax))
403283 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
404- else if ((base58'2T' == c))
284+ else if ((base58'2T' == ax))
405285 then this
406286 else throw("Unknown chain")
407287 }
408288
409-let cf = {
410- let c = a
411- if ((base58'2W' == c))
289+let bp = {
290+ let ax = av
291+ if ((base58'2W' == ax))
412292 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
413- else if ((base58'2T' == c))
293+ else if ((base58'2T' == ax))
414294 then this
415295 else throw("Unknown chain")
416296 }
417297
418-let cg = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
419-
420-let ch = [30, 60, 120]
421-
422-let ci = 300000
423-
424-let cj = 5000000
425-
426-let ck = 50
427-
428-let cl = 10000000
429-
430-let cm = {
431- let c = a
432- if ((base58'2W' == c))
298+let bq = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
299+
300+let br = [30, 60, 120]
301+
302+let bs = 300000
303+
304+let bt = 5000000
305+
306+let bu = 50
307+
308+let bv = 10000000
309+
310+let bw = {
311+ let ax = av
312+ if ((base58'2W' == ax))
433313 then 252289527462
434- else if ((base58'2T' == c))
314+ else if ((base58'2T' == ax))
435315 then 2522895274
436316 else throw("Unknown chain")
437317 }
438318
439-let cn = {
440- let c = a
441- if ((base58'2W' == c))
319+let bx = {
320+ let ax = av
321+ if ((base58'2W' == ax))
442322 then 250000000
443- else if ((base58'2T' == c))
323+ else if ((base58'2T' == ax))
444324 then 250000000
445325 else throw("Unknown chain")
446326 }
447327
448-let co = toBigInt(5)
449-
450-let cp = toBigInt(20)
451-
452-let cq = toBigInt((20 * 20))
453-
454-let cr = toBigInt(((20 * 20) * 20))
455-
456-let cs = toBigInt((((20 * 20) * 20) * 20))
457-
458-let ct = toBigInt(((((20 * 20) * 20) * 20) * 20))
459-
460-let cu = 500
461-
462-func cv () = "nextLandNum"
463-
464-
465-func cw (cx) = ("landToAsset_" + cx)
466-
467-
468-func cy (cz) = ("landByCustomName_" + cz)
469-
470-
471-func cA (aM,aU) = ((("infraLevelByAssetIdAndOwner_" + aM) + "_") + aU)
472-
473-
474-func cB (aR,aM,aU) = makeString(["landArtStatusByTypeAssetIdAndOwner", aR, aM, aU], "_")
475-
476-
477-func cC (cx) = ("landOwner_" + cx)
478-
479-
480-func cD (cz) = ("duckByCustomName_" + cz)
481-
482-
483-func cE (cz) = ("accountByCustomName_" + cz)
484-
485-
486-func cF () = "oldiesList"
487-
488-
489-let cG = 0
490-
491-let cH = 1
492-
493-let cI = 2
494-
495-let cJ = 0
496-
497-let cK = 1
498-
499-let cL = 2
500-
501-let cM = 3
502-
503-let cN = 4
504-
505-let cO = 5
506-
507-let cP = 6
508-
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))
328+let by = toBigInt(5)
329+
330+let bz = toBigInt(20)
331+
332+let bA = toBigInt((20 * 20))
333+
334+let bB = toBigInt(((20 * 20) * 20))
335+
336+let bC = toBigInt((((20 * 20) * 20) * 20))
337+
338+let bD = toBigInt(((((20 * 20) * 20) * 20) * 20))
339+
340+let bE = 500
341+
342+func bF () = "nextLandNum"
343+
344+
345+func bG (bH) = ("landToAsset_" + bH)
346+
347+
348+func bI (bJ) = ("landByCustomName_" + bJ)
349+
350+
351+func bK (H,P) = ((("infraLevelByAssetIdAndOwner_" + H) + "_") + P)
352+
353+
354+func bL (M,H,P) = makeString(["landArtStatusByTypeAssetIdAndOwner", M, H, P], "_")
355+
356+
357+func bM (bH) = ("landOwner_" + bH)
358+
359+
360+func bN (bJ) = ("duckByCustomName_" + bJ)
361+
362+
363+func bO (bJ) = ("accountByCustomName_" + bJ)
364+
365+
366+func bP () = "oldiesList"
367+
368+
369+let bQ = 0
370+
371+let bR = 1
372+
373+let bS = 2
374+
375+let bT = 0
376+
377+let bU = 5
378+
379+let bV = 6
380+
381+let bW = 7
382+
383+func bX (bH,bn) = ((a + bH) + bn)
384+
385+
386+func bY (bZ,ca) = {
387+ let cb = (((((ca[0] + ca[1]) + ca[2]) + ca[3]) + ca[4]) + ca[5])
388+ if ((0 >= cb))
517389 then throw("Zero weights sum")
518390 else {
519- let cW = fraction(cT, g, cV)
520- func cX (bI,cY) = (bI :+ fraction(cY, cW, g))
521-
522- let bL = cU
523- let bM = size(bL)
524- let bN = nil
525- func bO (bP,bQ) = if ((bQ >= bM))
526- then bP
527- else cX(bP, bL[bQ])
528-
529- func bR (bP,bQ) = if ((bQ >= bM))
530- then bP
391+ let cc = fraction(bZ, aB, cb)
392+ func cd (ce,cf) = (ce :+ fraction(cf, cc, aB))
393+
394+ let ao = ca
395+ let ap = size(ao)
396+ let aq = nil
397+ func ar (as,at) = if ((at >= ap))
398+ then as
399+ else cd(as, ao[at])
400+
401+ func au (as,at) = if ((at >= ap))
402+ then as
531403 else throw("List size exceeds 6")
532404
533- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
534- }
535- }
536-
537-
538-func cZ (cT) = {
539- let bG = split(value(getString(bj())), "_")
540- if ((size(bG) != n))
405+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
406+ }
407+ }
408+
409+
410+func cg (bZ) = {
411+ let ch = split(value(getString(bf())), "_")
412+ if ((size(ch) != d))
541413 then throw("Wrong proportions data")
542414 else {
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))
415+ let ci = [parseIntValue(ch[0]), parseIntValue(ch[1]), parseIntValue(ch[2]), parseIntValue(ch[3]), parseIntValue(ch[4]), parseIntValue(ch[5])]
416+ bY(bZ, ci)
417+ }
418+ }
419+
420+
421+func cj (ck,cl,cm) = {
422+ let cn = cg(cm)
423+ func co (ce,aV) = {
424+ let cp = (parseIntValue(cl[aV]) - cn[aV])
425+ if ((0 > cp))
426+ then throw(((((("Not enough material idx=" + toString(aV)) + ", you have ") + cl[aV]) + ", but need ") + toString(cn[aV])))
427+ else (ce :+ toString(cp))
556428 }
557429
558- if (dc)
430+ if (ck)
559431 then {
560- let bL = [0, 1, 2, 3, 4, 5]
561- let bM = size(bL)
562- let bN = nil
563- func bO (bP,bQ) = if ((bQ >= bM))
564- then bP
565- else dg(bP, bL[bQ])
566-
567- func bR (bP,bQ) = if ((bQ >= bM))
568- then bP
432+ let ao = [0, 1, 2, 3, 4, 5]
433+ let ap = size(ao)
434+ let aq = nil
435+ func ar (as,at) = if ((at >= ap))
436+ then as
437+ else co(as, ao[at])
438+
439+ func au (as,at) = if ((at >= ap))
440+ then as
569441 else throw("List size exceeds 6")
570442
571- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
572- }
573- else dd
574- }
575-
576-
577-func di (dj,dk) = if ((dk == ""))
578- then dj
443+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
444+ }
445+ else cl
446+ }
447+
448+
449+func cq (cr,cs) = if ((cs == ""))
450+ then cr
579451 else {
580- let dl = if ((dj == ""))
452+ let ct = if ((cr == ""))
581453 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))
454+ else split(cr, "_")
455+ func cu (ce,cv) = {
456+ let an = ce._1
457+ func cw (am,cx) = {
458+ let cy = split(cx, ",")
459+ if ((size(cy) != 2))
588460 then throw("Incorrect format, should be index,amount")
589461 else {
590- let aD = parseIntValue(dp[0])
591- if (if ((0 > aD))
462+ let aV = parseIntValue(cy[0])
463+ if (if ((0 > aV))
592464 then true
593- else (aD >= size(G)))
465+ else (aV >= size(n)))
594466 then throw("Unknown product idx")
595- else if ((aD != cd))
596- then cc
467+ else if ((aV != an))
468+ then am
597469 else {
598- let dq = parseIntValue(dp[1])
599- if ((0 >= dq))
470+ let cz = parseIntValue(cy[1])
471+ if ((0 >= cz))
600472 then throw("Pass only positive amounts")
601- else (cc + dq)
473+ else (am + cz)
602474 }
603475 }
604476 }
605477
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
478+ let cA = {
479+ let ao = split(cs, "_")
480+ let ap = size(ao)
481+ let aq = 0
482+ func ar (as,at) = if ((at >= ap))
483+ then as
484+ else cw(as, ao[at])
485+
486+ func au (as,at) = if ((at >= ap))
487+ then as
616488 else throw("List size exceeds 10")
617489
618- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
490+ au(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
619491 }
620- let ds = if ((size(dl) > cd))
621- then parseIntValue(dl[cd])
492+ let cB = if ((size(ct) > an))
493+ then parseIntValue(ct[an])
622494 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
495+ let cC = if ((cA > cB))
496+ then throw(((((("You have " + toString(cB)) + " of ") + l[an]) + ", but tried to use ") + toString(cA)))
497+ else (cB - cA)
498+ $Tuple2((an + 1), (ce._2 :+ toString(cC)))
499+ }
500+
501+ let cD = {
502+ let ao = n
503+ let ap = size(ao)
504+ let aq = $Tuple2(0, nil)
505+ func ar (as,at) = if ((at >= ap))
506+ then as
507+ else cu(as, ao[at])
508+
509+ func au (as,at) = if ((at >= ap))
510+ then as
639511 else throw("List size exceeds 50")
640512
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, "_")
513+ au(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(aq, 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)
514+ }
515+ makeString(cD._2, "_")
644516 }
645517
646518
647-func dv (dw,dx,dy,dz) = if ((size(dw) != n))
519+func cE (cF,cG,cH,cI) = if ((size(cF) != d))
648520 then throw("Wrong proportions data")
649521 else {
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 = {
658- let bL = [0, 1, 2, 3, 4, 5]
659- let bM = size(bL)
660- let bN = nil
661- func bO (bP,bQ) = if ((bQ >= bM))
662- then bP
663- else dA(bP, bL[bQ])
664-
665- func bR (bP,bQ) = if ((bQ >= bM))
666- then bP
522+ func cJ (ce,cK) = {
523+ let cp = (parseIntValue(cF[cK]) + ((cI * cG[cK]) * cH))
524+ if ((0 > cp))
525+ then throw(((((((("Panic! Pieces of type=" + toString(cK)) + ", sign=") + toString(cI)) + ", terrainCounts[i]=") + toString(cG[cK])) + ", landSizeIndex=") + toString(cH)))
526+ else (ce :+ toString(cp))
527+ }
528+
529+ let ci = {
530+ let ao = [0, 1, 2, 3, 4, 5]
531+ let ap = size(ao)
532+ let aq = nil
533+ func ar (as,at) = if ((at >= ap))
534+ then as
535+ else cJ(as, ao[at])
536+
537+ func au (as,at) = if ((at >= ap))
538+ then as
667539 else throw("List size exceeds 6")
668540
669- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
670- }
671- makeString(da, "_")
541+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
542+ }
543+ makeString(ci, "_")
672544 }
673545
674546
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)))
547+func cL (cG,cH,cI) = {
548+ let cF = split(valueOrElse(getString(bf()), "0_0_0_0_0_0"), "_")
549+ cE(cF, cG, cH, cI)
550+ }
551+
552+
553+func cM (cN) = [(size(split(cN, "A")) - 1), (size(split(cN, "B")) - 1), (size(split(cN, "C")) - 1), (size(split(cN, "D")) - 1), (size(split(cN, "E")) - 1), (size(split(cN, "F")) - 1)]
554+
555+
556+func cO (cP,cG,cQ,cH,cR) = {
557+ func cS (ce,cK) = {
558+ let cT = ((fraction(cQ, cR, f) * cG[cK]) * cH)
559+ (ce :+ toString((parseIntValue(cP[cK]) + cT)))
688560 }
689561
690- let da = {
691- let bL = [0, 1, 2, 3, 4, 5]
692- let bM = size(bL)
693- let bN = nil
694- func bO (bP,bQ) = if ((bQ >= bM))
695- then bP
696- else bH(bP, bL[bQ])
697-
698- func bR (bP,bQ) = if ((bQ >= bM))
699- then bP
562+ let ci = {
563+ let ao = [0, 1, 2, 3, 4, 5]
564+ let ap = size(ao)
565+ let aq = nil
566+ func ar (as,at) = if ((at >= ap))
567+ then as
568+ else cS(as, ao[at])
569+
570+ func au (as,at) = if ((at >= ap))
571+ then as
700572 else throw("List size exceeds 6")
701573
702- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
574+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
703575 }
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))
576+ makeString(ci, "_")
577+ }
578+
579+
580+func cU (cG,cQ,cH,cR) = {
581+ func cS (ce,cK) = {
582+ let cT = ((fraction(cQ, cR, f) * cG[cK]) * cH)
583+ $Tuple2((ce._1 :+ cT), (ce._2 + cT))
712584 }
713585
714- let bL = [0, 1, 2, 3, 4, 5]
715- let bM = size(bL)
716- let bN = $Tuple2(nil, 0)
717- func bO (bP,bQ) = if ((bQ >= bM))
718- then bP
719- else bH(bP, bL[bQ])
720-
721- func bR (bP,bQ) = if ((bQ >= bM))
722- then bP
586+ let ao = [0, 1, 2, 3, 4, 5]
587+ let ap = size(ao)
588+ let aq = $Tuple2(nil, 0)
589+ func ar (as,at) = if ((at >= ap))
590+ then as
591+ else cS(as, ao[at])
592+
593+ func au (as,at) = if ((at >= ap))
594+ then as
723595 else throw("List size exceeds 6")
724596
725- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
726- }
727-
728-
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))
597+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
598+ }
599+
600+
601+func cV (cW,cX,cY,cZ) = {
602+ let da = cY._1
603+ let db = cY._2
604+ if ((db == 0))
605+ then $Tuple2(makeString(cW, "_"), makeString(cX, "_"))
606+ else if ((cZ >= db))
735607 then {
736- func dS (bI,dB) = (bI :+ toString((parseIntValue(dM[dB]) + dQ[dB])))
737-
738- let da = {
739- let bL = [0, 1, 2, 3, 4, 5]
740- let bM = size(bL)
741- let bN = nil
742- func bO (bP,bQ) = if ((bQ >= bM))
743- then bP
744- else dS(bP, bL[bQ])
745-
746- func bR (bP,bQ) = if ((bQ >= bM))
747- then bP
608+ func dc (ce,cK) = (ce :+ toString((parseIntValue(cW[cK]) + da[cK])))
609+
610+ let ci = {
611+ let ao = [0, 1, 2, 3, 4, 5]
612+ let ap = size(ao)
613+ let aq = nil
614+ func ar (as,at) = if ((at >= ap))
615+ then as
616+ else dc(as, ao[at])
617+
618+ func au (as,at) = if ((at >= ap))
619+ then as
748620 else throw("List size exceeds 6")
749621
750- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
622+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
751623 }
752- $Tuple2(makeString(da, "_"), makeString(dN, "_"))
624+ $Tuple2(makeString(ci, "_"), makeString(cX, "_"))
753625 }
754626 else {
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))))
627+ func dd (ce,cK) = {
628+ let de = fraction(da[cK], cZ, db)
629+ $Tuple2((ce._1 :+ toString((parseIntValue(cW[cK]) + de))), (ce._2 :+ toString(((parseIntValue(cX[cK]) + da[cK]) - de))))
758630 }
759631
760- let da = {
761- let bL = [0, 1, 2, 3, 4, 5]
762- let bM = size(bL)
763- let bN = $Tuple2(nil, nil)
764- func bO (bP,bQ) = if ((bQ >= bM))
765- then bP
766- else dT(bP, bL[bQ])
767-
768- func bR (bP,bQ) = if ((bQ >= bM))
769- then bP
632+ let ci = {
633+ let ao = [0, 1, 2, 3, 4, 5]
634+ let ap = size(ao)
635+ let aq = $Tuple2(nil, nil)
636+ func ar (as,at) = if ((at >= ap))
637+ then as
638+ else dd(as, ao[at])
639+
640+ func au (as,at) = if ((at >= ap))
641+ then as
770642 else throw("List size exceeds 6")
771643
772- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
644+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
773645 }
774- $Tuple2(makeString(da._1, "_"), makeString(da._2, "_"))
646+ $Tuple2(makeString(ci._1, "_"), makeString(ci._2, "_"))
775647 }
776648 }
777649
778650
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))
651+func df (dg) = if ((dg >= toBigInt(0)))
652+ then dg
653+ else -(dg)
654+
655+
656+let dh = [[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]]
657+
658+func di (bl,dj) = {
659+ let dk = toInt((bl % bz))
660+ let dl = if ((dj[0] > dk))
789661 then "A"
790- else if ((dZ[1] > ea))
662+ else if ((dj[1] > dk))
791663 then "B"
792- else if ((dZ[2] > ea))
664+ else if ((dj[2] > dk))
793665 then "C"
794- else if ((dZ[3] > ea))
666+ else if ((dj[3] > dk))
795667 then "D"
796- else if ((dZ[4] > ea))
668+ else if ((dj[4] > dk))
797669 then "E"
798670 else "F"
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 = {
808- let bL = [1, 2, 3, 4, 5]
809- let bM = size(bL)
810- let bN = $Tuple2("", (ed / co))
811- func bO (bP,bQ) = if ((bQ >= bM))
812- then bP
813- else eg(bP, bL[bQ])
814-
815- func bR (bP,bQ) = if ((bQ >= bM))
816- then bP
671+ dl
672+ }
673+
674+
675+func dm (dn,do) = {
676+ let dp = dh[do]
677+ func dq (ce,cf) = $Tuple2((((((ce._1 + di(ce._2, dp)) + di((ce._2 / bz), dp)) + di((ce._2 / bA), dp)) + di((ce._2 / bB), dp)) + di((ce._2 / bC), dp)), (ce._2 / bD))
678+
679+ let dr = {
680+ let ao = [1, 2, 3, 4, 5]
681+ let ap = size(ao)
682+ let aq = $Tuple2("", (dn / by))
683+ func ar (as,at) = if ((at >= ap))
684+ then as
685+ else dq(as, ao[at])
686+
687+ func au (as,at) = if ((at >= ap))
688+ then as
817689 else throw("List size exceeds 5")
818690
819- bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
691+ au(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5)
820692 }
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) = {
846- let aD = bI._1
847- let es = am(aD)
848- let et = (((parseIntValue(bJ) + es) - 1) / es)
849- $Tuple2((aD + 1), (bI._2 + (et * i)))
693+ dr._1
694+ }
695+
696+
697+func ds (dt) = {
698+ let du = split(valueOrElse(getString(dt), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
699+[toString(valueOrElse(parseInt(du[y]), 0)), if ((size(split(du[z], "_")) == d))
700+ then du[z]
701+ else "0_0_0_0_0_0", if ((size(split(du[A], "_")) == d))
702+ then du[A]
703+ else "0_0_0_0_0_0", du[B]]
704+ }
705+
706+
707+func dv (dw) = {
708+ let cy = split(dw, "_")
709+ ((g * (parseIntValue(cy[1]) + 1)) * parseIntValue(cy[0]))
710+ }
711+
712+
713+func dx (dy) = {
714+ let dz = dy[s]
715+ func dA (ce,cv) = (ce + parseIntValue(cv))
716+
717+ func dB (ce,cv) = {
718+ let aV = ce._1
719+ let dC = C(aV)
720+ let dD = (((parseIntValue(cv) + dC) - 1) / dC)
721+ $Tuple2((aV + 1), (ce._2 + (dD * aC)))
850722 }
851723
852- let eu = {
853- let bL = split(eo[aa], "_")
854- let bM = size(bL)
855- let bN = 0
856- func bO (bP,bQ) = if ((bQ >= bM))
857- then bP
858- else eq(bP, bL[bQ])
859-
860- func bR (bP,bQ) = if ((bQ >= bM))
861- then bP
724+ let dE = {
725+ let ao = split(dy[q], "_")
726+ let ap = size(ao)
727+ let aq = 0
728+ func ar (as,at) = if ((at >= ap))
729+ then as
730+ else dA(as, ao[at])
731+
732+ func au (as,at) = if ((at >= ap))
733+ then as
862734 else throw("List size exceeds 6")
863735
864- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
736+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
865737 }
866- let ev = {
867- let bL = split(eo[ab], "_")
868- let bM = size(bL)
869- let bN = 0
870- func bX (bP,bQ) = if ((bQ >= bM))
871- then bP
872- else eq(bP, bL[bQ])
873-
874- func bY (bP,bQ) = if ((bQ >= bM))
875- then bP
738+ let dF = {
739+ let ao = split(dy[r], "_")
740+ let ap = size(ao)
741+ let aq = 0
742+ func dG (as,at) = if ((at >= ap))
743+ then as
744+ else dA(as, ao[at])
745+
746+ func dH (as,at) = if ((at >= ap))
747+ then as
876748 else throw("List size exceeds 6")
877749
878- bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
750+ dH(dG(dG(dG(dG(dG(dG(aq, 0), 1), 2), 3), 4), 5), 6)
879751 }
880- let ew = if ((ep == ""))
752+ let dI = if ((dz == ""))
881753 then 0
882- else ( let bL = split_4C(ep, "_")
883- let bM = size(bL)
884- let bN = $Tuple2(0, 0)
885- func ex (bP,bQ) = if ((bQ >= bM))
886- then bP
887- else er(bP, bL[bQ])
888-
889- func ey (bP,bQ) = if ((bQ >= bM))
890- then bP
754+ else ( let ao = split_4C(dz, "_")
755+ let ap = size(ao)
756+ let aq = $Tuple2(0, 0)
757+ func dJ (as,at) = if ((at >= ap))
758+ then as
759+ else dB(as, ao[at])
760+
761+ func dK (as,at) = if ((at >= ap))
762+ then as
891763 else throw("List size exceeds 50")
892764
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))
765+ dK(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(aq, 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
766+ ((dE + dF) + dI)
767+ }
768+
769+
770+func dL (dM,dN,dO) = {
771+ let dw = ((toString(dN) + "_") + toString(dO))
772+ let dP = dv(dw)
773+ let dQ = valueOrElse(getString(dM), (dw + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
774+ let dR = split_4C(dQ, ":")
775+ let dS = dx(dR)
776+ let dT = if ((5 > size(dR)))
777+ then makeString(["0", toString(dS), toString((dP - dS)), toString(dP)], "_")
778+ else {
779+ let dU = split(dR[t], "_")
780+ let dV = parseIntValue(dU[u])
781+ let dW = if ((size(dU) > 1))
782+ then parseIntValue(dU[v])
783+ else dS
784+ makeString([toString(dV), toString(dW), toString(((dP - dV) - dW)), toString(dP)], "_")
785+ }
786+[dR[p], if ((size(split(dR[q], "_")) == d))
787+ then dR[q]
788+ else "0_0_0_0_0_0", if ((size(split(dR[r], "_")) == d))
789+ then dR[r]
790+ else "0_0_0_0_0_0", dR[s], dT]
791+ }
792+
793+
794+func dX (dy) = {
795+ let dY = dx(dy)
796+ let dZ = parseIntValue(split(dy[t], "_")[u])
797+ ((dv(dy[p]) - dY) - dZ)
798+ }
799+
800+
801+func ea (eb,dC) = {
802+ let dD = if ((eb >= 0))
803+ then (((eb + dC) - 1) / dC)
804+ else -((((-(eb) + dC) - 1) / dC))
805+ (dD * aC)
806+ }
807+
808+
809+func ec (ed,dy,ee) = if ((size(ed) != 3))
938810 then throw("cargoListStr should contain exactly 2 ':' separators")
939811 else {
940- let eT = split(eR[0], "_")
941- let eU = split(eR[1], "_")
942- let eV = if ((eR[2] == ""))
812+ let ef = split(ed[0], "_")
813+ let eg = split(ed[1], "_")
814+ let eh = if ((ed[2] == ""))
943815 then nil
944- else split(eR[2], "_")
945- if ((size(eT) != n))
816+ else split(ed[2], "_")
817+ if ((size(ef) != d))
946818 then throw("All 6 resources should be passed")
947- else if ((size(eU) != n))
819+ else if ((size(eg) != d))
948820 then throw("All 6 materials should be passed")
949821 else {
950- let dP = eL(eo)
951- let eW = split(eo[aa], "_")
952- let eX = split(eo[ab], "_")
953- let eY = if ((eo[ac] == ""))
822+ let cZ = dX(dy)
823+ let ei = split(dy[q], "_")
824+ let ej = split(dy[r], "_")
825+ let ek = if ((dy[s] == ""))
954826 then nil
955- else split(eo[ac], "_")
956- let dN = split(eS[aj], "_")
957- let eZ = split(eS[ak], "_")
958- let fa = if ((eS[al] == ""))
827+ else split(dy[s], "_")
828+ let cX = split(ee[z], "_")
829+ let el = split(ee[A], "_")
830+ let em = if ((ee[B] == ""))
959831 then nil
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))
832+ else split(ee[B], "_")
833+ func en (ce,cv) = {
834+ let cK = ce._1
835+ let eo = parseIntValue(cv)
836+ let ep = parseIntValue(ei[cK])
837+ let eq = parseIntValue(cX[cK])
838+ if ((eo == 0))
839+ then $Tuple4((cK + 1), (ce._2 :+ ei[cK]), (ce._3 :+ cX[cK]), ce._4)
840+ else if ((eo > 0))
841+ then if ((eo > eq))
842+ then throw((((("Attempt to take " + cv) + " from backpack, but only ") + toString(eq)) + " available"))
843+ else $Tuple4((cK + 1), (ce._2 :+ toString((ep + eo))), (ce._3 :+ toString((eq - eo))), (ce._4 + eo))
844+ else if ((-(eo) > ep))
845+ then throw((((("Attempt to take " + toString(-(eo))) + " from warehouse, but only ") + toString(ep)) + " available"))
846+ else $Tuple4((cK + 1), (ce._2 :+ toString((ep + eo))), (ce._3 :+ toString((eq - eo))), (ce._4 + eo))
975847 }
976848
977- let da = {
978- let bL = eT
979- let bM = size(bL)
980- let bN = $Tuple4(0, nil, nil, 0)
981- func bO (bP,bQ) = if ((bQ >= bM))
982- then bP
983- else fb(bP, bL[bQ])
984-
985- func bR (bP,bQ) = if ((bQ >= bM))
986- then bP
849+ let ci = {
850+ let ao = ef
851+ let ap = size(ao)
852+ let aq = $Tuple4(0, nil, nil, 0)
853+ func ar (as,at) = if ((at >= ap))
854+ then as
855+ else en(as, ao[at])
856+
857+ func au (as,at) = if ((at >= ap))
858+ then as
987859 else throw("List size exceeds 6")
988860
989- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
861+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
990862 }
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))
863+ func er (ce,cv) = {
864+ let cK = ce._1
865+ let eo = parseIntValue(cv)
866+ let es = parseIntValue(ej[cK])
867+ let et = parseIntValue(el[cK])
868+ if ((eo == 0))
869+ then $Tuple4((cK + 1), (ce._2 :+ ej[cK]), (ce._3 :+ el[cK]), ce._4)
870+ else if ((eo > 0))
871+ then if ((eo > et))
872+ then throw((((("Attempt to take " + cv) + " from backpack, but only ") + toString(et)) + " available"))
873+ else $Tuple4((cK + 1), (ce._2 :+ toString((es + eo))), (ce._3 :+ toString((et - eo))), (ce._4 + eo))
874+ else if ((-(eo) > es))
875+ then throw((((("Attempt to take " + toString(-(eo))) + " from warehouse, but only ") + toString(es)) + " available"))
876+ else $Tuple4((cK + 1), (ce._2 :+ toString((es + eo))), (ce._3 :+ toString((et - eo))), (ce._4 + eo))
1005877 }
1006878
1007- let fi = {
1008- let bL = eU
1009- let bM = size(bL)
1010- let bN = $Tuple4(0, nil, nil, da._4)
1011- func bX (bP,bQ) = if ((bQ >= bM))
1012- then bP
1013- else ff(bP, bL[bQ])
1014-
1015- func bY (bP,bQ) = if ((bQ >= bM))
1016- then bP
879+ let eu = {
880+ let ao = eg
881+ let ap = size(ao)
882+ let aq = $Tuple4(0, nil, nil, ci._4)
883+ func dG (as,at) = if ((at >= ap))
884+ then as
885+ else er(as, ao[at])
886+
887+ func dH (as,at) = if ((at >= ap))
888+ then as
1017889 else throw("List size exceeds 6")
1018890
1019- bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
891+ dH(dG(dG(dG(dG(dG(dG(aq, 0), 1), 2), 3), 4), 5), 6)
1020892 }
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])
893+ func ev (ce,cv) = {
894+ let cK = ce._1
895+ let dC = C(cK)
896+ let eo = parseIntValue(cv)
897+ let ew = if ((size(ek) > cK))
898+ then parseIntValue(ek[cK])
1027899 else 0
1028- let fl = if ((size(fa) > dB))
1029- then parseIntValue(fa[dB])
900+ let ex = if ((size(em) > cK))
901+ then parseIntValue(em[cK])
1030902 else 0
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"))
903+ if ((eo == 0))
904+ then $Tuple4((cK + 1), (ce._2 :+ toString(ew)), (ce._3 :+ toString(ex)), ce._4)
905+ else if ((eo > 0))
906+ then if ((eo > ex))
907+ then throw((((("Attempt to take " + cv) + " from backpack, but only ") + toString(ex)) + " available"))
1036908 else {
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))
909+ let ey = (ea((ew + eo), dC) - ea(ew, dC))
910+ $Tuple4((cK + 1), (ce._2 :+ toString((ew + eo))), (ce._3 :+ toString((ex - eo))), (ce._4 + ey))
1039911 }
1040- else if ((-(fc) > fk))
1041- then throw((((("Attempt to take " + toString(-(fc))) + " from warehouse, but only ") + toString(fk)) + " available"))
912+ else if ((-(eo) > ew))
913+ then throw((((("Attempt to take " + toString(-(eo))) + " from warehouse, but only ") + toString(ew)) + " available"))
1042914 else {
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))
915+ let ey = (ea((ew + eo), dC) - ea(ew, dC))
916+ $Tuple4((cK + 1), (ce._2 :+ toString((ew + eo))), (ce._3 :+ toString((ex - eo))), (ce._4 + ey))
1045917 }
1046918 }
1047919
1048- let ek = if ((size(eV) != 0))
920+ let du = if ((size(eh) != 0))
1049921 then {
1050- let bL = eV
1051- let bM = size(bL)
1052- let bN = $Tuple4(0, nil, nil, fi._4)
1053- func ex (bP,bQ) = if ((bQ >= bM))
1054- then bP
1055- else fj(bP, bL[bQ])
1056-
1057- func ey (bP,bQ) = if ((bQ >= bM))
1058- then bP
922+ let ao = eh
923+ let ap = size(ao)
924+ let aq = $Tuple4(0, nil, nil, eu._4)
925+ func dJ (as,at) = if ((at >= ap))
926+ then as
927+ else ev(as, ao[at])
928+
929+ func dK (as,at) = if ((at >= ap))
930+ then as
1059931 else throw("List size exceeds 50")
1060932
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)
933+ dK(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(aq, 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)
1062934 }
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)
935+ else $Tuple4(0, ek, em, eu._4)
936+ let ez = du._4
937+ if ((ez > cZ))
938+ then throw((((("Attempt to put total " + toString(ez)) + " stuff, but only ") + toString(cZ)) + " warehouse space left"))
939+ else $Tuple7(makeString(ci._2, "_"), makeString(eu._2, "_"), makeString(du._2, "_"), makeString(ci._3, "_"), makeString(eu._3, "_"), makeString(du._3, "_"), ez)
1068940 }
1069941 }
1070942
1071943
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)))
944+func eA (eB,eC) = {
945+ let af = toString(eB)
946+ let eD = df(toBigInt(eC))
947+ let eE = valueOrElse(getInteger(bF()), (bE + 1))
948+ let bH = toString(eE)
949+ let do = toInt((eD % by))
950+ let cN = dm(eD, do)
951+ let eF = m[do]
952+ let eG = Issue(bX(bH, "S"), makeString([bH, "S", cN, eF], "_"), 1, 0, false)
953+ let H = calculateAssetId(eG)
954+ let eH = toBase58String(H)
955+ $Tuple2([IntegerEntry(bF(), (eE + 1)), eG, StringEntry(bG(bH), eH), StringEntry(G(eH), af), StringEntry(bM(bH), af), IntegerEntry(K(eH), 0), IntegerEntry(bK(eH, af), 0), ScriptTransfer(eB, 1, H)], $Tuple2(eH, eF))
956+ }
957+
958+
959+func eI (af,eJ,eK) = if (!(sigVerify_8Kb(eJ, eK, bq)))
1088960 then throw("signature does not match")
1089961 else {
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)))
962+ let cy = split(toUtf8String(eJ), ";")
963+ let eL = split(cy[0], "|")
964+ let eM = split(eL[bT], "_")
965+ let eN = parseIntValue(eM[0])
966+ let eO = parseIntValue(eM[1])
967+ let eP = split(cy[1], ":")
968+ let eQ = eP[0]
969+ let eR = parseIntValue(eL[bU])
970+ if (if ((eR > (lastBlock.timestamp + bs)))
1099971 then true
1100- else ((lastBlock.timestamp - ci) > fF))
1101- then throw(((("signature outdated: logTime=" + toString(fF)) + ", bcTime=") + toString(lastBlock.timestamp)))
972+ else ((lastBlock.timestamp - bs) > eR))
973+ then throw(((("signature outdated: logTime=" + toString(eR)) + ", bcTime=") + toString(lastBlock.timestamp)))
1102974 else {
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))
975+ let eS = eP[1]
976+ let eT = valueOrElse(getString(E(af)), "")
977+ if ((eT != eS))
978+ then throw(((("Tx ids don't match! In state: " + eT) + ", in msg: ") + eS))
1107979 else {
1108- let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked")
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))
980+ let aa = valueOrErrorMessage(getString(Y(af)), "You don't have a duck staked")
981+ let eU = ac(aa)
982+ let eV = valueOrElse(getInteger(eU), 100)
983+ if ((eV != eN))
984+ then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eU), 100))) + " from state does not match one from flight log=") + toString(eN)))
985+ else if ((0 >= eN))
1114986 then throw("You can't fly with zero health")
1115987 else {
1116- let fK = if ((size(fz) > cP))
1117- then fz[cP]
988+ let eW = if ((size(eL) > bV))
989+ then eL[bV]
1118990 else ""
1119- let fL = if ((size(fz) > cQ))
1120- then fz[cQ]
991+ let eX = if ((size(eL) > bW))
992+ then eL[bW]
1121993 else ""
1122- let fM = if (if ((fC > 0))
1123- then (fK == "$")
994+ let eY = if (if ((eO > 0))
995+ then (eW == "$")
1124996 else false)
1125- then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
997+ then bk(invoke(aW, "sendUsdtPrize", [af], nil))
1126998 else 0
1127- $Tuple5(fC, bg, fM, fE, fL)
999+ $Tuple5(eO, aa, eY, eQ, eX)
11281000 }
11291001 }
11301002 }
11311003 }
11321004
11331005
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)), ""))
1165- else {
1166- let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
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
1175- let bW = value(assetInfo(fromBase58String(aW)))
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))
1180- then throw((k + " is not yours"))
1181- else {
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))
1006+func eZ (eB,eC,eJ,eK) = {
1007+ let af = toString(eB)
1008+ let dp = eI(af, eJ, eK)
1009+ let eU = ac(dp._2)
1010+ let dt = Z(dp._2)
1011+ let ee = ds(dt)
1012+ let fa = split(ee[A], "_")
1013+ let fb = makeString(cj(true, fa, bw), "_")
1014+ let cD = cq(ee[B], dp._5)
1015+ if ((0 >= dp._1))
1016+ then $Tuple3([IntegerEntry(eU, 0), StringEntry(dt, makeString([ee[y], ee[z], ee[A], cD], ":"))], "", 0)
1017+ else {
1018+ let fc = eA(eB, eC)
1019+ let eH = fc._2._1
1020+ $Tuple3((((fc._1 :+ StringEntry(ab(dp._2), makeString([fc._2._2, "L", eH], "_"))) :+ IntegerEntry(eU, dp._1)) :+ StringEntry(dt, makeString([ee[y], ee[z], fb, cD], ":"))), eH, dp._3)
1021+ }
1022+ }
1023+
1024+
1025+func fd (R,fe) = {
1026+ let dO = valueOrElse(getInteger(K(R)), 0)
1027+ let ff = valueOrElse(getInteger(L(c, R)), 0)
1028+ let fg = (dO / 6)
1029+ let fh = (dO / 7)
1030+ ((e + fraction(e, ((dO + fg) + (2 * fh)), 5)) + fraction(e, ff, (fe * 5)))
1031+ }
1032+
1033+
1034+func fi (F,fj,fk) = {
1035+ let fl = if ((fj == bQ))
1036+ then $Tuple2(fk, valueOrElse(getString(Y(F)), ""))
1037+ else {
1038+ let aa = valueOrErrorMessage(getString(Y(F)), "You don't have a duck staked")
1039+ let fm = valueOrElse(getString(ab(aa)), h)
1040+ let fn = split(value(fm), "_")
1041+ if ((fn[ah] != "L"))
1042+ then throw((("Duck location type is " + fn[ah]) + ", but should be L"))
1043+ else $Tuple2(fn[ai], aa)
1044+ }
1045+ let R = fl._1
1046+ let fo = fl._2
1047+ let fp = value(assetInfo(fromBase58String(R)))
1048+ let fq = J(R)
1049+ let fr = valueOrErrorMessage(getInteger(fq), (("Land " + fp.name) + " is not staked"))
1050+ let fs = valueOrErrorMessage(getString(G(R)), (("NFT " + fp.name) + " is orphaned"))
1051+ if ((fs != F))
1052+ then throw((a + " is not yours"))
1053+ else {
1054+ let ft = split(fp.description, "_")
1055+ $Tuple4(fo, R, ft, fr)
1056+ }
1057+ }
1058+
1059+
1060+func fu (F,eb,fj,fk) = if ((0 > eb))
11891061 then throw("Negative amount")
11901062 else {
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)))
1063+ let fv = fi(F, fj, fk)
1064+ let bn = fv._3[bc]
1065+ let cG = cM(fv._3[bd])
1066+ let cQ = (lastBlock.timestamp - fv._4)
1067+ if ((0 > cQ))
1068+ then throw(((("Saved timestamp is in future, saved = " + toString(fv._4)) + ", current = ") + toString(lastBlock.timestamp)))
11971069 else {
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)))
1070+ let fe = bm(bn)
1071+ let fw = fd(fv._2, fe)
1072+ let fx = fraction(cQ, (fw * fe), f)
1073+ if ((eb > fx))
1074+ then throw(((("Not enough resources, available = " + toString(fx)) + ", requested = ") + toString(eb)))
12031075 else {
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)
1076+ let fy = fraction((fx - eb), f, (fw * fe))
1077+ let fz = (lastBlock.timestamp - fy)
1078+ let dN = (fe / aD)
1079+ let cY = cU(cG, (cQ - fy), dN, fw)
1080+ let dM = Q(fv._2)
1081+ let dO = valueOrElse(getInteger(K(fv._2)), 0)
1082+ let dy = dL(dM, dN, dO)
1083+ let dU = split(dy[t], "_")
1084+ let cZ = parseIntValue(dU[w])
1085+ if (if ((fj == bQ))
1086+ then (eb > cZ)
12151087 else false)
1216- then throw((("Only " + toString(dP)) + " space left in warehouse"))
1088+ then throw((("Only " + toString(cZ)) + " space left in warehouse"))
12171089 else {
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]))
1090+ let dt = Z(fv._1)
1091+ let ee = ds(dt)
1092+ let cX = split(ee[z], "_")
1093+ let cW = split(dy[q], "_")
1094+ let fA = if ((fj == bQ))
1095+ then $Tuple4(cO(cW, cG, (cQ - fy), dN, fw), ee[z], (parseIntValue(dU[v]) + cY._2), (parseIntValue(dU[w]) - cY._2))
1096+ else if ((fj == bR))
1097+ then $Tuple4(dy[q], cO(cX, cG, (cQ - fy), dN, fw), parseIntValue(dU[v]), parseIntValue(dU[w]))
12261098 else {
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))
1099+ let fB = cV(cW, cX, cY, cZ)
1100+ let fC = min([parseIntValue(dU[w]), cY._2])
1101+ $Tuple4(fB._1, fB._2, (parseIntValue(dU[v]) + fC), (parseIntValue(dU[w]) - fC))
12301102 }
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]], "_")])
1103+ let fD = fA._1
1104+ let fE = fA._2
1105+ let fF = fA._3
1106+ let fG = fA._4
1107+ $Tuple5([IntegerEntry(J(fv._2), fz), IntegerEntry(N(a, fv._2, F), fz)], dt, [ee[y], fE, ee[A], ee[B]], dM, [dy[p], fD, dy[r], dy[s], makeString([dU[u], toString(fF), toString(fG), dU[x]], "_")])
12361108 }
12371109 }
12381110 }
12391111 }
12401112
12411113
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))
1114+func fH (F,R,fe,fj) = {
1115+ let fq = J(R)
1116+ let fr = value(getInteger(fq))
1117+ let fx = (fraction((lastBlock.timestamp - fr), fd(R, fe), f) * fe)
1118+ fu(F, fx, fj, R)
1119+ }
1120+
1121+
1122+func fI (ck,eB,fJ,R) = {
1123+ let F = toString(eB)
1124+ let fv = fi(F, bS, R)
1125+ let fe = bm(fv._3[bc])
1126+ let fK = K(fv._2)
1127+ let fL = valueOrElse(getInteger(fK), 0)
1128+ if ((fL >= 3))
12571129 then throw("Currently max infrastructure level = 3")
12581130 else {
1259- let gz = (gy + 1)
1260- let gA = fraction(cl, (fS * gz), o)
1261- if (if (!(dc))
1262- then (gw != gA)
1131+ let fM = (fL + 1)
1132+ let fN = fraction(bv, (fe * fM), aD)
1133+ if (if (!(ck))
1134+ then (fJ != fN)
12631135 else false)
1264- then throw(("Payment attached should be " + toString(gA)))
1136+ then throw(("Payment attached should be " + toString(fN)))
12651137 else {
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)
1138+ let dt = Z(fv._1)
1139+ let ee = ds(dt)
1140+ let fa = split(ee[A], "_")
1141+ let fb = makeString(cj(ck, fa, fraction(az, (fe * fM), aD)), "_")
1142+ let fO = fH(F, fv._2, fe, bS)
1143+ let fP = fO._5
1144+ let fQ = dv(fP[p])
1145+ let fR = makeString([split(fP[p], "_")[0], toString(fM)], "_")
1146+ let fS = dv(fR)
1147+ let dU = split(fP[t], "_")
1148+ let fT = makeString([dU[u], dU[v], toString(((parseIntValue(dU[w]) + fS) - fQ)), toString(fS)], "_")
1149+ $Tuple2(([IntegerEntry(fK, fM), IntegerEntry(bK(fv._2, F), fM), StringEntry(dt, makeString([ee[y], fO._3[z], fb, ee[B]], ":")), StringEntry(fO._4, makeString([fR, fP[q], fP[r], fP[s], fT], ":"))] ++ fO._1), fM)
12781150 }
12791151 }
12801152 }
12811153
12821154
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))
1155+func fU (F,fk) = {
1156+ let fv = fi(F, bS, fk)
1157+ let R = fv._2
1158+ let fe = bm(fv._3[bc])
1159+ let fV = L(c, R)
1160+ if ((valueOrElse(getInteger(fV), 0) > 0))
12921161 then throw("Presale artifact is already activated")
1293- else if ((parseIntValue(gi._3[V]) > cu))
1294- then throw((((k + " ") + aW) + " is not eligible for presale artifact"))
1162+ else if ((parseIntValue(fv._3[bb]) > bE))
1163+ then throw((((a + " ") + R) + " is not eligible for presale artifact"))
12951164 else {
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, ":")))
1165+ let fO = fH(F, R, fe, bS)
1166+ ((((fO._1 :+ IntegerEntry(fV, fe)) :+ IntegerEntry(bL(c, R, F), fe)) :+ StringEntry(fO._2, makeString(fO._3, ":"))) :+ StringEntry(fO._4, makeString(fO._5, ":")))
12981167 }
12991168 }
13001169
13011170
1302-func gK (gL,gz,gM,aK,gN,fq,gO) = {
1303- let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1304- func gP (bI,aW) = {
1305- let bW = value(assetInfo(fromBase58String(aW)))
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))
1310- then throw((k + " is not yours"))
1171+func fW (fX,fM,fY,F,fZ,eC,ga) = {
1172+ let aa = valueOrErrorMessage(getString(Y(F)), "You don't have a duck staked")
1173+ func gb (ce,R) = {
1174+ let fp = value(assetInfo(fromBase58String(R)))
1175+ let fq = J(R)
1176+ let fr = valueOrErrorMessage(getInteger(fq), (("NFT " + fp.name) + " is not staked"))
1177+ let fs = valueOrErrorMessage(getString(G(R)), (("NFT " + fp.name) + " is orphaned"))
1178+ if ((fs != F))
1179+ then throw((a + " is not yours"))
13111180 else {
1312- let gg = split(bW.description, "_")
1313- let ft = gg[Y]
1314- if (if ((bI._3 != ""))
1315- then (bI._3 != ft)
1181+ let ft = split(fp.description, "_")
1182+ let eF = ft[be]
1183+ if (if ((ce._3 != ""))
1184+ then (ce._3 != eF)
13161185 else false)
13171186 then throw("Lands should be on the same continent to merge")
13181187 else {
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 = {
1327- let c = bB
1328- if (("S" == c))
1188+ let bn = ft[bc]
1189+ let gc = ce._1
1190+ let cK = valueOrErrorMessage(indexOf(gc, bn), "You haven't passed all the lands needed")
1191+ let gd = (take(gc, cK) + drop(gc, (cK + 1)))
1192+ let fe = bm(bn)
1193+ let ge = (ce._2 + valueOrElse(getInteger(L(c, R)), 0))
1194+ let dO = valueOrElse(getInteger(K(R)), 0)
1195+ let gf = {
1196+ let ax = bn
1197+ if (("S" == ax))
13291198 then 3
1330- else if (("M" == c))
1199+ else if (("M" == ax))
13311200 then 4
1332- else if (("L" == c))
1201+ else if (("L" == ax))
13331202 then 5
1334- else if (("XL" == c))
1203+ else if (("XL" == ax))
13351204 then 6
13361205 else throw("Only S, M, L, XL can merge")
13371206 }
1338- if ((eC != gT))
1207+ if ((dO != gf))
13391208 then throw("All lands should be maxed to merge")
13401209 else {
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)))
1210+ let bH = ft[bb]
1211+ let cG = cM(ft[bd])
1212+ let cQ = (lastBlock.timestamp - fr)
1213+ if ((0 > cQ))
1214+ then throw(((("Saved timestamp is in future, saved = " + toString(fr)) + ", current = ") + toString(lastBlock.timestamp)))
13461215 else {
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)
1351- let bU = bI._7
1352- let aD = indexOf(bU, aW)
1353- if (!(isDefined(aD)))
1354- then throw(("Your staked lands don't contain " + aW))
1216+ let fw = fd(R, fe)
1217+ let dN = (fe / aD)
1218+ let fE = cO(split(ce._4, "_"), cG, cQ, dN, fw)
1219+ let ch = cE(split(ce._6, "_"), cG, dN, -1)
1220+ let gg = ce._7
1221+ let aV = indexOf(gg, R)
1222+ if (!(isDefined(aV)))
1223+ then throw(("Your staked lands don't contain " + R))
13551224 else {
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))
1225+ let gh = I(R)
1226+ let gi = valueOrElse(getString(gh), "")
1227+ $Tuple8(gd, ge, eF, fE, (((((((((((((ce._5 :+ DeleteEntry(J(R))) :+ DeleteEntry(N(a, R, F))) :+ DeleteEntry(bG(bH))) :+ DeleteEntry(G(R))) :+ DeleteEntry(K(R))) :+ DeleteEntry(bK(R, F))) :+ DeleteEntry(L(c, R))) :+ DeleteEntry(bL(c, R, F))) :+ DeleteEntry(bM(bH))) :+ DeleteEntry(Q(R))) :+ DeleteEntry(gh)) :+ DeleteEntry(bI(gi))) :+ Burn(fromBase58String(R), 1)), ch, removeByIndex(gg, value(aV)), (ce._8 + fe))
13591228 }
13601229 }
13611230 }
13631232 }
13641233 }
13651234
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))
1372- then split_51C(value(bT), "_")
1235+ let dt = Z(aa)
1236+ let ee = ds(dt)
1237+ let gj = valueOrElse(getString(bf()), "0_0_0_0_0_0")
1238+ let gk = bg(F)
1239+ let gl = getString(gk)
1240+ let gm = if (isDefined(gl))
1241+ then split_51C(value(gl), "_")
13731242 else nil
1374- let da = {
1375- let bL = gN
1376- let bM = size(bL)
1377- let bN = $Tuple8(gM, 0, "", eS[aj], nil, gW, gY, 0)
1378- func bO (bP,bQ) = if ((bQ >= bM))
1379- then bP
1380- else gP(bP, bL[bQ])
1381-
1382- func bR (bP,bQ) = if ((bQ >= bM))
1383- then bP
1243+ let ci = {
1244+ let ao = fZ
1245+ let ap = size(ao)
1246+ let aq = $Tuple8(fY, 0, "", ee[z], nil, gj, gm, 0)
1247+ func ar (as,at) = if ((at >= ap))
1248+ then as
1249+ else gb(as, ao[at])
1250+
1251+ func au (as,at) = if ((at >= ap))
1252+ then as
13841253 else throw("List size exceeds 5")
13851254
1386- bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
1255+ au(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5)
13871256 }
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))
1257+ let eF = ci._3
1258+ let do = valueOrErrorMessage(indexOf(m, eF), ("Unknown continent: " + eF))
1259+ let cN = dm(df(toBigInt(eC)), do)
1260+ let eE = valueOrElse(getInteger(bF()), (bE + 1))
1261+ let gn = toString(eE)
1262+ let eG = Issue(bX(gn, fX), makeString([gn, fX, cN, eF], "_"), 1, 0, false)
1263+ let H = calculateAssetId(eG)
1264+ let go = toBase58String(H)
1265+ let fb = makeString(cj((ga > 0), split(ee[A], "_"), ga), "_")
1266+ let gp = S(F)
1267+ let gq = valueOrElse(getInteger(gp), 0)
1268+ $Tuple2((((((((((((((((ci._5 :+ (if ((size(ci._7) > 0))
1269+ then StringEntry(gk, makeString_11C(ci._7, "_"))
1270+ else DeleteEntry(gk))) :+ IntegerEntry(gp, if ((ci._8 > gq))
14021271 then 0
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)
1272+ else (gq - ci._8))) :+ IntegerEntry(bF(), (eE + 1))) :+ eG) :+ StringEntry(bG(gn), go)) :+ StringEntry(G(go), F)) :+ StringEntry(bM(gn), F)) :+ IntegerEntry(L(c, go), ci._2)) :+ IntegerEntry(bL(c, go, F), ci._2)) :+ IntegerEntry(K(go), fM)) :+ IntegerEntry(bK(go, F), fM)) :+ StringEntry(dt, makeString([ee[y], ci._4, fb, ee[B]], ":"))) :+ StringEntry(bf(), ci._6)) :+ StringEntry(ab(aa), makeString([eF, "L", go], "_"))) :+ ScriptTransfer(addressFromStringValue(F), 1, H)), go)
1273+ }
1274+
1275+
1276+func gr (F,fZ,eC) = fW("M", 3, "SSSS", F, fZ, eC, 0)
1277+
1278+
1279+func gs (F,fZ,eC,ck,fJ) = {
1280+ let fN = (bv * 4)
1281+ if (if (!(ck))
1282+ then (fJ != fN)
14141283 else false)
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)
1284+ then throw(("Payment attached should be " + toString(fN)))
1285+ else fW("L", 4, "SMM", F, fZ, eC, (az * 4))
1286+ }
1287+
1288+
1289+func gt (F,fZ,eC,ck,fJ) = {
1290+ let fN = (bv * 47)
1291+ if (if (!(ck))
1292+ then (fJ != fN)
14241293 else false)
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)
1294+ then throw(("Payment attached should be " + toString(fN)))
1295+ else fW("XL", 5, "SSSML", F, fZ, eC, (az * 47))
1296+ }
1297+
1298+
1299+func gu (F,fZ,eC,ck,fJ) = {
1300+ let fN = (bv * 54)
1301+ if (if (!(ck))
1302+ then (fJ != fN)
14341303 else false)
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)
1443- if ((4 == c))
1444- then hd(aK, gN, fq)
1445- else if ((3 == c))
1446- then he(aK, gN, fq, dc, gw)
1447- else if ((5 == c))
1448- then hf(aK, gN, fq, dc, gw)
1449- else if ((2 == c))
1450- then hg(aK, gN, fq, dc, gw)
1304+ then throw(("Payment attached should be " + toString(fN)))
1305+ else fW("XXL", 6, "LXL", F, fZ, eC, (az * 54))
1306+ }
1307+
1308+
1309+func gv (ck,F,fJ,fZ,eC) = {
1310+ let gw = {
1311+ let ax = size(fZ)
1312+ if ((4 == ax))
1313+ then gr(F, fZ, eC)
1314+ else if ((3 == ax))
1315+ then gs(F, fZ, eC, ck, fJ)
1316+ else if ((5 == ax))
1317+ then gt(F, fZ, eC, ck, fJ)
1318+ else if ((2 == ax))
1319+ then gu(F, fZ, eC, ck, fJ)
14511320 else throw("Unknown merge")
14521321 }
1453- hi
1454- }
1455-
1456-
1457-func hj (dB) = if (if ((dB.originCaller != aE))
1458- then valueOrElse(getBoolean(bk()), false)
1322+ gw
1323+ }
1324+
1325+
1326+func gx (cK) = if (if ((cK.originCaller != aW))
1327+ then valueOrElse(getBoolean(ad()), false)
14591328 else false)
14601329 then throw("Contracts are under maintenance")
1461- else StringEntry(aJ(toString(dB.originCaller)), toBase58String(dB.transactionId))
1462-
1463-
1464-@Callable(dB)
1465-func constructorV1 (hk) = if ((dB.caller != this))
1330+ else StringEntry(E(toString(cK.originCaller)), toBase58String(cK.transactionId))
1331+
1332+
1333+@Callable(cK)
1334+func constructorV1 (gy) = if ((cK.caller != this))
14661335 then throw("Permission denied")
1467- else [StringEntry(ay(), hk)]
1468-
1469-
1470-
1471-@Callable(dB)
1472-func setBlocked (hl) = if ((dB.caller != this))
1336+ else [StringEntry(aQ(), gy)]
1337+
1338+
1339+
1340+@Callable(cK)
1341+func setBlocked (gz) = if ((cK.caller != this))
14731342 then throw("permission denied")
1474- else [BooleanEntry(bk(), hl)]
1475-
1476-
1477-
1478-@Callable(dB)
1343+ else [BooleanEntry(ad(), gz)]
1344+
1345+
1346+
1347+@Callable(cK)
14791348 func stakeLand () = {
1480- let hm = hj(dB)
1481- if ((size(dB.payments) != 1))
1349+ let gA = gx(cK)
1350+ if ((size(cK.payments) != 1))
14821351 then throw("Exactly one payment required")
14831352 else {
1484- let hn = value(dB.payments[0])
1485- let aM = value(hn.assetId)
1486- let ap = toString(dB.caller)
1487- if ((hn.amount != 1))
1488- then throw((("NFT " + k) + " token should be attached as payment"))
1353+ let gB = value(cK.payments[0])
1354+ let H = value(gB.assetId)
1355+ let aJ = toString(cK.caller)
1356+ if ((gB.amount != 1))
1357+ then throw((("NFT " + a) + " token should be attached as payment"))
14891358 else {
1490- let bW = value(assetInfo(aM))
1491- if ((bW.issuer != this))
1359+ let fp = value(assetInfo(H))
1360+ if ((fp.issuer != this))
14921361 then throw("Unknown issuer of token")
1493- else if (!(contains(bW.name, k)))
1494- then throw((("Only NFT " + k) + " tokens are accepted"))
1362+ else if (!(contains(fp.name, a)))
1363+ then throw((("Only NFT " + a) + " tokens are accepted"))
14951364 else {
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)
1502- if (!(isDefined(parseInt(cx))))
1503- then throw(("Cannot parse land number from " + bW.name))
1365+ let gC = drop(fp.name, 4)
1366+ let bH = if (contains(gC, "XXL"))
1367+ then dropRight(gC, 3)
1368+ else if (contains(gC, "XL"))
1369+ then dropRight(gC, 2)
1370+ else dropRight(gC, 1)
1371+ if (!(isDefined(parseInt(bH))))
1372+ then throw(("Cannot parse land number from " + fp.name))
15041373 else {
1505- let aW = toBase58String(aM)
1506- let gd = aO(aW)
1507- if (isDefined(getInteger(gd)))
1508- then throw((("NFT " + bW.name) + " is already staked"))
1374+ let R = toBase58String(H)
1375+ let fq = J(R)
1376+ if (isDefined(getInteger(fq)))
1377+ then throw((("NFT " + fp.name) + " is already staked"))
15091378 else {
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)
1517- let bU = if (isDefined(bT))
1518- then split_51C(value(bT), "_")
1379+ let ft = split(fp.description, "_")
1380+ let cG = cM(ft[bd])
1381+ let fe = bm(ft[bc])
1382+ let ch = cL(cG, (fe / aD), 1)
1383+ let ff = valueOrElse(getInteger(L(c, R)), 0)
1384+ let gk = bg(aJ)
1385+ let gl = getString(gk)
1386+ let gg = if (isDefined(gl))
1387+ then split_51C(value(gl), "_")
15191388 else nil
1520- if (containsElement(bU, aW))
1521- then throw(("Your staked lands already contain " + aW))
1389+ if (containsElement(gg, R))
1390+ then throw(("Your staked lands already contain " + R))
15221391 else {
1523- let eC = valueOrElse(getInteger(aP(aW)), 0)
1524- let hb = aY(ap)
1525- let hp = valueOrElse(getInteger(hb), 0)
1526- let hq = if ((hp == 0))
1527- then bv(invoke(aI, "onStakeLand", [ap], nil))
1392+ let dO = valueOrElse(getInteger(K(R)), 0)
1393+ let gp = S(aJ)
1394+ let gD = valueOrElse(getInteger(gp), 0)
1395+ let gE = if ((gD == 0))
1396+ then bk(invoke(ba, "onStakeLand", [aJ], nil))
15281397 else -1
1529- $Tuple2([IntegerEntry(gd, lastBlock.timestamp), IntegerEntry(aS(k, aW, ap), lastBlock.timestamp), StringEntry(gX, makeString_11C((bU :+ aW), "_")), IntegerEntry(hb, (hp + fS)), StringEntry(aL(aW), ap), StringEntry(cC(cx), ap), IntegerEntry(cB(m, aW, ap), fT), IntegerEntry(cA(aW, ap), eC), StringEntry(bj(), bG), hm], hq)
1398+ $Tuple2([IntegerEntry(fq, lastBlock.timestamp), IntegerEntry(N(a, R, aJ), lastBlock.timestamp), StringEntry(gk, makeString_11C((gg :+ R), "_")), IntegerEntry(gp, (gD + fe)), StringEntry(G(R), aJ), StringEntry(bM(bH), aJ), IntegerEntry(bL(c, R, aJ), ff), IntegerEntry(bK(R, aJ), dO), StringEntry(bf(), ch), gA], gE)
15301399 }
15311400 }
15321401 }
15371406
15381407
15391408
1540-@Callable(dB)
1541-func unstakeLand (fY) = {
1542- let hm = hj(dB)
1543- if ((size(dB.payments) != 0))
1409+@Callable(cK)
1410+func unstakeLand (fk) = {
1411+ let gA = gx(cK)
1412+ if ((size(cK.payments) != 0))
15441413 then throw("No payments required")
15451414 else {
1546- let aK = toString(dB.caller)
1547- let gi = fW(aK, cH, fY)
1548- let aW = gi._2
1549- let gX = aX(aK)
1550- let dx = dD(gi._3[X])
1551- let fS = bA(gi._3[W])
1552- let bG = dC(dx, (fS / o), -1)
1553- let gB = gu(aK, aW, fS, cH)
1554- let bU = split_51C(valueOrElse(getString(gX), ""), "_")
1555- let aD = indexOf(bU, aW)
1556- if (!(isDefined(aD)))
1557- then throw(("Your staked lands don't contain " + aW))
1415+ let F = toString(cK.caller)
1416+ let fv = fi(F, bR, fk)
1417+ let R = fv._2
1418+ let gk = bg(F)
1419+ let cG = cM(fv._3[bd])
1420+ let fe = bm(fv._3[bc])
1421+ let ch = cL(cG, (fe / aD), -1)
1422+ let fO = fH(F, R, fe, bR)
1423+ let gg = split_51C(valueOrElse(getString(gk), ""), "_")
1424+ let aV = indexOf(gg, R)
1425+ if (!(isDefined(aV)))
1426+ then throw(("Your staked lands don't contain " + R))
15581427 else {
1559- let eh = value(blockInfoByHeight(height)).timestamp
1560- let hr = valueOrElse(getInteger(aH, bl(aK)), 0)
1561- if ((hr >= eh))
1562- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(hr)))
1428+ let dr = value(blockInfoByHeight(height)).timestamp
1429+ let gF = valueOrElse(getInteger(aZ, ae(F)), 0)
1430+ if ((gF >= dr))
1431+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gF)))
15631432 else {
1564- let hb = aY(aK)
1565- let hc = valueOrElse(getInteger(hb), 0)
1566- let hs = if ((fS > hc))
1433+ let gp = S(F)
1434+ let gq = valueOrElse(getInteger(gp), 0)
1435+ let gG = if ((fe > gq))
15671436 then 0
1568- else (hc - fS)
1569- let hq = if ((hs == 0))
1570- then bv(invoke(aI, "onUnstakeLand", [aK], nil))
1437+ else (gq - fe)
1438+ let gE = if ((gG == 0))
1439+ then bk(invoke(ba, "onUnstakeLand", [F], nil))
15711440 else -1
1572- $Tuple2([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))
1573- then StringEntry(gX, makeString_11C(removeByIndex(bU, value(aD)), "_"))
1574- else DeleteEntry(gX), IntegerEntry(hb, hs), hm], hq)
1441+ $Tuple2([ScriptTransfer(cK.caller, 1, fromBase58String(R)), DeleteEntry(J(R)), DeleteEntry(N(a, R, F)), StringEntry(bf(), ch), StringEntry(fO._2, makeString(fO._3, ":")), if ((size(gg) > 1))
1442+ then StringEntry(gk, makeString_11C(removeByIndex(gg, value(aV)), "_"))
1443+ else DeleteEntry(gk), IntegerEntry(gp, gG), gA], gE)
15751444 }
15761445 }
15771446 }
15791448
15801449
15811450
1582-@Callable(dB)
1451+@Callable(cK)
15831452 func stakeDuck () = {
1584- let hm = hj(dB)
1585- if ((size(dB.payments) != 1))
1453+ let gA = gx(cK)
1454+ if ((size(cK.payments) != 1))
15861455 then throw("Exactly one payment required")
15871456 else {
1588- let hn = value(dB.payments[0])
1589- let aM = value(hn.assetId)
1590- let ap = toString(dB.caller)
1591- if ((hn.amount != 1))
1592- then throw((("NFT " + l) + " token should be attached as payment"))
1457+ let gB = value(cK.payments[0])
1458+ let H = value(gB.assetId)
1459+ let aJ = toString(cK.caller)
1460+ if ((gB.amount != 1))
1461+ then throw((("NFT " + b) + " token should be attached as payment"))
15931462 else {
1594- let bW = value(assetInfo(aM))
1595- if (if ((bW.issuer != ce))
1596- then (bW.issuer != cf)
1463+ let fp = value(assetInfo(H))
1464+ if (if ((fp.issuer != bo))
1465+ then (fp.issuer != bp)
15971466 else false)
1598- then throw((("Unknown issuer of " + l) + " token"))
1599- else if (!(contains(bW.name, l)))
1600- then throw((("Only NFT " + l) + " tokens are accepted"))
1467+ then throw((("Unknown issuer of " + b) + " token"))
1468+ else if (!(contains(fp.name, b)))
1469+ then throw((("Only NFT " + b) + " tokens are accepted"))
16011470 else {
1602- let ht = toBase58String(aM)
1603- let gd = aO(ht)
1604- if (isDefined(getInteger(gd)))
1605- then throw((("NFT " + bW.name) + " is already staked"))
1606- else if (isDefined(getString(be(ap))))
1607- then throw(("You already staked one duck: " + bW.name))
1471+ let gH = toBase58String(H)
1472+ let fq = J(gH)
1473+ if (isDefined(getInteger(fq)))
1474+ then throw((("NFT " + fp.name) + " is already staked"))
1475+ else if (isDefined(getString(Y(aJ))))
1476+ then throw(("You already staked one duck: " + fp.name))
16081477 else {
1609- let hu = bh(ht)
1610- let hv = getString(hu)
1611- let ej = bf(ht)
1612- let hw = getString(ej)
1613- ([IntegerEntry(gd, lastBlock.timestamp), IntegerEntry(aS(l, toBase58String(aM), ap), lastBlock.timestamp), StringEntry(bd(ht), ap), StringEntry(be(ap), ht)] ++ (if (isDefined(hv))
1478+ let gI = ab(gH)
1479+ let gJ = getString(gI)
1480+ let dt = Z(gH)
1481+ let gK = getString(dt)
1482+ ([IntegerEntry(fq, lastBlock.timestamp), IntegerEntry(N(b, toBase58String(H), aJ), lastBlock.timestamp), StringEntry(X(gH), aJ), StringEntry(Y(aJ), gH)] ++ (if (isDefined(gJ))
16141483 then nil
1615- else ([StringEntry(hu, w)] ++ (if (isDefined(hw))
1484+ else ([StringEntry(gI, h)] ++ (if (isDefined(gK))
16161485 then nil
1617- else (([StringEntry(ej, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(ht), 100)) :+ hm)))))
1486+ else (([StringEntry(dt, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ac(gH), 100)) :+ gA)))))
16181487 }
16191488 }
16201489 }
16231492
16241493
16251494
1626-@Callable(dB)
1627-func unstakeDuck (ht) = {
1628- let hm = hj(dB)
1629- if ((size(dB.payments) != 0))
1495+@Callable(cK)
1496+func unstakeDuck (gH) = {
1497+ let gA = gx(cK)
1498+ if ((size(cK.payments) != 0))
16301499 then throw("No payments required")
16311500 else {
1632- let aM = fromBase58String(ht)
1633- let ap = toString(dB.caller)
1634- let bW = value(assetInfo(aM))
1635- let gd = aO(toBase58String(aM))
1636- if (!(isDefined(getInteger(gd))))
1637- then throw((("NFT " + bW.name) + " is not staked"))
1638- else if (!(isDefined(getString(be(ap)))))
1639- then throw((("The duck " + bW.name) + " is not staked"))
1501+ let H = fromBase58String(gH)
1502+ let aJ = toString(cK.caller)
1503+ let fp = value(assetInfo(H))
1504+ let fq = J(toBase58String(H))
1505+ if (!(isDefined(getInteger(fq))))
1506+ then throw((("NFT " + fp.name) + " is not staked"))
1507+ else if (!(isDefined(getString(Y(aJ)))))
1508+ then throw((("The duck " + fp.name) + " is not staked"))
16401509 else {
1641- let gf = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned"))
1642- if ((gf != ap))
1510+ let fs = valueOrErrorMessage(getString(X(toBase58String(H))), (("NFT " + fp.name) + " is orphaned"))
1511+ if ((fs != aJ))
16431512 then throw("Staked NFT is not yours")
16441513 else {
1645- let fI = bi(ht)
1646- let hx = valueOrElse(getInteger(fI), 100)
1647- if ((100 > hx))
1514+ let eU = ac(gH)
1515+ let gL = valueOrElse(getInteger(eU), 100)
1516+ if ((100 > gL))
16481517 then throw("Please heal your duck before unstaking")
1649- else [ScriptTransfer(dB.caller, 1, aM), DeleteEntry(gd), DeleteEntry(fI), DeleteEntry(bh(ht)), DeleteEntry(bd(ht)), DeleteEntry(aS(l, ht, ap)), DeleteEntry(be(ap)), hm]
1518+ else [ScriptTransfer(cK.caller, 1, H), DeleteEntry(fq), DeleteEntry(eU), DeleteEntry(ab(gH)), DeleteEntry(X(gH)), DeleteEntry(N(b, gH, aJ)), DeleteEntry(Y(aJ)), gA]
16501519 }
16511520 }
16521521 }
16541523
16551524
16561525
1657-@Callable(dB)
1658-func claimRes (eP,hy) = {
1659- let hm = hj(dB)
1660- if ((size(dB.payments) != 0))
1526+@Callable(cK)
1527+func claimRes (eb,gM) = {
1528+ let gA = gx(cK)
1529+ if ((size(cK.payments) != 0))
16611530 then throw("No payments required")
16621531 else {
1663- let aK = toString(dB.originCaller)
1664- let dh = gh(aK, eP, cH, hy)
1665- $Tuple2((((dh._1 :+ StringEntry(dh._2, makeString(dh._3, ":"))) :+ StringEntry(dh._4, makeString(dh._5, ":"))) :+ hm), dh._3[aj])
1666- }
1667- }
1668-
1669-
1670-
1671-@Callable(dB)
1672-func claimResToWH (eP,hy) = {
1673- let hm = hj(dB)
1674- if ((size(dB.payments) != 0))
1532+ let F = toString(cK.originCaller)
1533+ let cp = fu(F, eb, bR, gM)
1534+ $Tuple2((((cp._1 :+ StringEntry(cp._2, makeString(cp._3, ":"))) :+ StringEntry(cp._4, makeString(cp._5, ":"))) :+ gA), cp._3[z])
1535+ }
1536+ }
1537+
1538+
1539+
1540+@Callable(cK)
1541+func claimResToWH (eb,gM) = {
1542+ let gA = gx(cK)
1543+ if ((size(cK.payments) != 0))
16751544 then throw("No payments required")
16761545 else {
1677- let aK = toString(dB.originCaller)
1678- let dh = gh(aK, eP, cG, hy)
1679- $Tuple2((((dh._1 :+ StringEntry(dh._2, makeString(dh._3, ":"))) :+ StringEntry(dh._4, makeString(dh._5, ":"))) :+ hm), dh._5[aa])
1680- }
1681- }
1682-
1683-
1684-
1685-@Callable(dB)
1686-func flight (fx,fy) = {
1687- let hm = hj(dB)
1688- if ((size(dB.payments) != 0))
1546+ let F = toString(cK.originCaller)
1547+ let cp = fu(F, eb, bQ, gM)
1548+ $Tuple2((((cp._1 :+ StringEntry(cp._2, makeString(cp._3, ":"))) :+ StringEntry(cp._4, makeString(cp._5, ":"))) :+ gA), cp._5[q])
1549+ }
1550+ }
1551+
1552+
1553+
1554+@Callable(cK)
1555+func flight (eJ,eK) = {
1556+ let gA = gx(cK)
1557+ if ((size(cK.payments) != 0))
16891558 then throw("No payments required")
16901559 else {
1691- let bm = toString(dB.caller)
1692- let ef = fw(bm, fx, fy)
1693- let hu = bh(ef._2)
1694- let ga = valueOrElse(getString(hu), w)
1695- if ((ef._4 == ga))
1560+ let af = toString(cK.caller)
1561+ let dp = eI(af, eJ, eK)
1562+ let gI = ab(dp._2)
1563+ let fm = valueOrElse(getString(gI), h)
1564+ if ((dp._4 == fm))
16961565 then throw("You can't fly to the same location")
16971566 else {
1698- let ej = bf(ef._2)
1699- let eS = ei(ej)
1700- let du = di(eS[al], ef._5)
1701- $Tuple2([StringEntry(hu, if ((ef._1 > 0))
1702- then ef._4
1703- else ga), StringEntry(ej, makeString([eS[ai], eS[aj], eS[ak], du], ":")), IntegerEntry(bi(ef._2), ef._1), hm], ef._3)
1567+ let dt = Z(dp._2)
1568+ let ee = ds(dt)
1569+ let cD = cq(ee[B], dp._5)
1570+ $Tuple2([StringEntry(gI, if ((dp._1 > 0))
1571+ then dp._4
1572+ else fm), StringEntry(dt, makeString([ee[y], ee[z], ee[A], cD], ":")), IntegerEntry(ac(dp._2), dp._1), gA], dp._3)
17041573 }
17051574 }
17061575 }
17071576
17081577
17091578
1710-@Callable(dB)
1711-func heal (hz,hA,hB) = {
1712- let hm = hj(dB)
1713- if (if (if ((0 > hz))
1579+@Callable(cK)
1580+func heal (gN,gO,gP) = {
1581+ let gA = gx(cK)
1582+ if (if (if ((0 > gN))
17141583 then true
1715- else (0 > hA))
1584+ else (0 > gO))
17161585 then true
1717- else (0 > hB))
1586+ else (0 > gP))
17181587 then throw("Quantity cannot be negative")
17191588 else {
1720- let bg = valueOrErrorMessage(getString(be(toString(dB.caller))), "You don't have a duck staked")
1721- let hC = [hz, hA, hB]
1722- let fI = bi(bg)
1723- let hD = valueOrElse(getInteger(fI), 100)
1724- if ((hD >= B))
1725- then throw((("HP should be < " + toString(B)) + " to heal"))
1589+ let aa = valueOrErrorMessage(getString(Y(toString(cK.caller))), "You don't have a duck staked")
1590+ let gQ = [gN, gO, gP]
1591+ let eU = ac(aa)
1592+ let gR = valueOrElse(getInteger(eU), 100)
1593+ if ((gR >= k))
1594+ then throw((("HP should be < " + toString(k)) + " to heal"))
17261595 else {
1727- let ej = bf(bg)
1728- let eS = ei(ej)
1729- let hE = if ((eS[al] == ""))
1596+ let dt = Z(aa)
1597+ let ee = ds(dt)
1598+ let gS = if ((ee[B] == ""))
17301599 then nil
1731- else split(eS[al], "_")
1732- func hF (bI,hG) = {
1733- let bw = bI._2
1734- let dW = if ((size(hE) > bw))
1735- then parseIntValue(hE[bw])
1600+ else split(ee[B], "_")
1601+ func gT (ce,gU) = {
1602+ let bl = ce._2
1603+ let dg = if ((size(gS) > bl))
1604+ then parseIntValue(gS[bl])
17361605 else 0
1737- if ((3 > bw))
1606+ if ((3 > bl))
17381607 then {
1739- let hH = hC[bw]
1740- if ((hH > dW))
1741- then throw(((("You have only " + toString(dW)) + " of ") + E[bw]))
1742- else $Tuple3((bI._1 :+ toString((dW - hH))), (bw + 1), (bI._3 + (ch[bw] * hH)))
1608+ let gV = gQ[bl]
1609+ if ((gV > dg))
1610+ then throw(((("You have only " + toString(dg)) + " of ") + l[bl]))
1611+ else $Tuple3((ce._1 :+ toString((dg - gV))), (bl + 1), (ce._3 + (br[bl] * gV)))
17431612 }
1744- else $Tuple3((bI._1 :+ toString(dW)), (bw + 1), bI._3)
1613+ else $Tuple3((ce._1 :+ toString(dg)), (bl + 1), ce._3)
17451614 }
17461615
1747- let dh = {
1748- let bL = G
1749- let bM = size(bL)
1750- let bN = $Tuple3(nil, 0, 0)
1751- func bO (bP,bQ) = if ((bQ >= bM))
1752- then bP
1753- else hF(bP, bL[bQ])
1754-
1755- func bR (bP,bQ) = if ((bQ >= bM))
1756- then bP
1616+ let cp = {
1617+ let ao = n
1618+ let ap = size(ao)
1619+ let aq = $Tuple3(nil, 0, 0)
1620+ func ar (as,at) = if ((at >= ap))
1621+ then as
1622+ else gT(as, ao[at])
1623+
1624+ func au (as,at) = if ((at >= ap))
1625+ then as
17571626 else throw("List size exceeds 50")
17581627
1759- 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)
1628+ au(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(aq, 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)
17601629 }
1761- let hI = min([B, (hD + dh._3)])
1762- $Tuple2([IntegerEntry(fI, hI), StringEntry(ej, makeString_2C([eS[ai], eS[aj], eS[ak], makeString(dh._1, "_")], ":")), hm], hI)
1630+ let gW = min([k, (gR + cp._3)])
1631+ $Tuple2([IntegerEntry(eU, gW), StringEntry(dt, makeString_2C([ee[y], ee[z], ee[A], makeString(cp._1, "_")], ":")), gA], gW)
17631632 }
17641633 }
17651634 }
17661635
17671636
17681637
1769-@Callable(dB)
1638+@Callable(cK)
17701639 func healES () = {
1771- let hm = hj(dB)
1772- if ((size(dB.payments) != 1))
1640+ let gA = gx(cK)
1641+ if ((size(cK.payments) != 1))
17731642 then throw("Exactly one payment required")
17741643 else {
1775- let hn = value(dB.payments[0])
1776- if ((hn.assetId != b))
1644+ let gB = value(cK.payments[0])
1645+ if ((gB.assetId != aw))
17771646 then throw("Allowed USDT payment only!")
17781647 else {
1779- let bg = valueOrErrorMessage(getString(be(toString(dB.caller))), "You don't have a duck staked")
1780- let fI = bi(bg)
1781- let hD = valueOrElse(getInteger(fI), 100)
1782- if ((hD > 0))
1648+ let aa = valueOrErrorMessage(getString(Y(toString(cK.caller))), "You don't have a duck staked")
1649+ let eU = ac(aa)
1650+ let gR = valueOrElse(getInteger(eU), 100)
1651+ if ((gR > 0))
17831652 then throw("HP should be 0 to call Emergency Service")
17841653 else {
1785- let ej = bf(bg)
1786- let eS = ei(ej)
1787- let hE = if ((eS[al] == ""))
1654+ let dt = Z(aa)
1655+ let ee = ds(dt)
1656+ let gS = if ((ee[B] == ""))
17881657 then nil
1789- else split(eS[al], "_")
1790- let hJ = if ((size(hE) > 0))
1791- then parseIntValue(hE[0])
1658+ else split(ee[B], "_")
1659+ let gX = if ((size(gS) > 0))
1660+ then parseIntValue(gS[0])
17921661 else 0
1793- let hK = if ((size(hE) > 1))
1794- then parseIntValue(hE[1])
1662+ let gY = if ((size(gS) > 1))
1663+ then parseIntValue(gS[1])
17951664 else 0
1796- let hL = if ((size(hE) > 2))
1797- then parseIntValue(hE[2])
1665+ let gZ = if ((size(gS) > 2))
1666+ then parseIntValue(gS[2])
17981667 else 0
1799- if (if (if ((hJ > 0))
1668+ if (if (if ((gX > 0))
18001669 then true
1801- else (hK > 0))
1670+ else (gY > 0))
18021671 then true
1803- else (hL > 0))
1672+ else (gZ > 0))
18041673 then throw("You have to use own Medical Kit")
18051674 else {
1806- let hM = getString(aG, bo())
1807- let hN = if (isDefined(hM))
1808- then split(value(hM), "_")
1675+ let ha = getString(aY, ag())
1676+ let hb = if (isDefined(ha))
1677+ then split(value(ha), "_")
18091678 else nil
1810- let hO = if ((size(hN) > 0))
1811- then parseIntValue(hN[0])
1679+ let hc = if ((size(hb) > 0))
1680+ then parseIntValue(hb[0])
18121681 else 0
1813- if ((0 >= hO))
1682+ if ((0 >= hc))
18141683 then throw("There are no Medical Kits L1 at Emergency Service storage")
18151684 else {
1816- let hI = (hD + ch[0])
1817- let hP = makeString([toString((hO - 1)), removeByIndex(hN, 0)], "_")
1818- let ca = split(G[0], "_")
1819- let hQ = bZ(ca)
1820- let hR = parseIntValue(ca[T])
1821- let hS = fraction((hQ * A), x, (10 * hR))
1822- if ((hn.amount != hS))
1823- then throw(("Payment attached should be " + toString(hS)))
1685+ let gW = (gR + br[0])
1686+ let hd = makeString([toString((hc - 1)), removeByIndex(hb, 0)], "_")
1687+ let ak = split(n[0], "_")
1688+ let he = aj(ak)
1689+ let hf = parseIntValue(ak[o])
1690+ let hg = fraction((he * j), i, (10 * hf))
1691+ if ((gB.amount != hg))
1692+ then throw(("Payment attached should be " + toString(hg)))
18241693 else {
1825- let dh = bs(invoke(aG, "updateEsStorage", [hP], [AttachedPayment(b, hS)]))
1826- $Tuple2([IntegerEntry(fI, hI), hm], dh)
1694+ let cp = bh(invoke(aY, "updateEsStorage", [hd], [AttachedPayment(aw, hg)]))
1695+ $Tuple2([IntegerEntry(eU, gW), gA], cp)
18271696 }
18281697 }
18291698 }
18341703
18351704
18361705
1837-@Callable(dB)
1838-func updateBackpack (bg,hT) = {
1839- let hm = hj(dB)
1840- if ((dB.caller != aG))
1706+@Callable(cK)
1707+func updateBackpack (aa,hh) = {
1708+ let gA = gx(cK)
1709+ if ((cK.caller != aY))
18411710 then throw("permission denied")
1842- else $Tuple2([StringEntry(bf(bg), hT), hm], hT)
1843- }
1844-
1845-
1846-
1847-@Callable(dB)
1711+ else $Tuple2([StringEntry(Z(aa), hh), gA], hh)
1712+ }
1713+
1714+
1715+
1716+@Callable(cK)
18481717 func buySLand () = {
1849- let hm = hj(dB)
1850- if ((size(dB.payments) != 1))
1718+ let gA = gx(cK)
1719+ if ((size(cK.payments) != 1))
18511720 then throw("Exactly one payment required")
18521721 else {
1853- let hn = value(dB.payments[0])
1854- if ((hn.assetId != b))
1722+ let gB = value(cK.payments[0])
1723+ if ((gB.assetId != aw))
18551724 then throw("Allowed USDT payment only!")
1856- else if ((hn.amount != cn))
1857- then throw(("Payment attached should be " + toString(cn)))
1725+ else if ((gB.amount != bx))
1726+ then throw(("Payment attached should be " + toString(bx)))
18581727 else {
1859- let dh = fo(dB.caller, dB.transactionId)
1860- $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2._1)
1728+ let cp = eA(cK.caller, cK.transactionId)
1729+ $Tuple2(((cp._1 :+ ScriptTransfer(aY, gB.amount, aw)) :+ gA), cp._2._1)
18611730 }
18621731 }
18631732 }
18641733
18651734
18661735
1867-@Callable(dB)
1868-func expedition (fx,fy) = {
1869- let hm = hj(dB)
1870- if ((size(dB.payments) != 0))
1736+@Callable(cK)
1737+func expedition (eJ,eK) = {
1738+ let gA = gx(cK)
1739+ if ((size(cK.payments) != 0))
18711740 then throw("No payments required")
18721741 else {
1873- let dh = fN(dB.caller, dB.transactionId, fx, fy)
1874- $Tuple2((dh._1 :+ hm), $Tuple2(dh._2, dh._3))
1875- }
1876- }
1877-
1878-
1879-
1880-@Callable(dB)
1881-func upgradeInfra (aW) = {
1882- let hm = hj(dB)
1883- if ((size(dB.payments) != 0))
1742+ let cp = eZ(cK.caller, cK.transactionId, eJ, eK)
1743+ $Tuple2((cp._1 :+ gA), $Tuple2(cp._2, cp._3))
1744+ }
1745+ }
1746+
1747+
1748+
1749+@Callable(cK)
1750+func upgradeInfra (R) = {
1751+ let gA = gx(cK)
1752+ if ((size(cK.payments) != 0))
18841753 then throw("No payments required")
18851754 else {
1886- let dh = gv(true, dB.caller, 0, aW)
1887- $Tuple2((dh._1 :+ hm), dh._2)
1888- }
1889- }
1890-
1891-
1892-
1893-@Callable(dB)
1894-func upgradeInfraUsdt (aW) = if ((dB.caller != this))
1755+ let cp = fI(true, cK.caller, 0, R)
1756+ $Tuple2((cp._1 :+ gA), cp._2)
1757+ }
1758+ }
1759+
1760+
1761+
1762+@Callable(cK)
1763+func upgradeInfraUsdt (R) = if ((cK.caller != this))
18951764 then throw("Permission denied")
18961765 else {
1897- let hm = hj(dB)
1898- if ((size(dB.payments) != 1))
1766+ let gA = gx(cK)
1767+ if ((size(cK.payments) != 1))
18991768 then throw("Exactly one payment required")
19001769 else {
1901- let hn = value(dB.payments[0])
1902- if ((hn.assetId != b))
1770+ let gB = value(cK.payments[0])
1771+ if ((gB.assetId != aw))
19031772 then throw("Allowed USDT payment only!")
19041773 else {
1905- let dh = gv(false, dB.caller, hn.amount, aW)
1906- $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2)
1774+ let cp = fI(false, cK.caller, gB.amount, R)
1775+ $Tuple2(((cp._1 :+ ScriptTransfer(aY, gB.amount, aw)) :+ gA), cp._2)
19071776 }
19081777 }
19091778 }
19101779
19111780
19121781
1913-@Callable(dB)
1914-func activateArtifact (hU,aW) = {
1915- let hm = hj(dB)
1916- if ((size(dB.payments) != 0))
1782+@Callable(cK)
1783+func activateArtifact (hi,R) = {
1784+ let gA = gx(cK)
1785+ if ((size(cK.payments) != 0))
19171786 then throw("No payments required")
19181787 else {
1919- let dh = {
1920- let c = hU
1921- if (("PRESALE" == c))
1922- then gI(toString(dB.caller), aW)
1788+ let cp = {
1789+ let ax = hi
1790+ if (("PRESALE" == ax))
1791+ then fU(toString(cK.caller), R)
19231792 else throw("Unknown artifact")
19241793 }
1925- (dh :+ hm)
1926- }
1927- }
1928-
1929-
1930-
1931-@Callable(dB)
1932-func mergeLands (gN) = {
1933- let hm = hj(dB)
1934- if ((size(dB.payments) != 0))
1794+ (cp :+ gA)
1795+ }
1796+ }
1797+
1798+
1799+
1800+@Callable(cK)
1801+func mergeLands (fZ) = {
1802+ let gA = gx(cK)
1803+ if ((size(cK.payments) != 0))
19351804 then throw("No payments required")
19361805 else {
1937- let dh = hh(true, toString(dB.caller), 0, gN, dB.transactionId)
1938- $Tuple2((dh._1 :+ hm), dh._2)
1939- }
1940- }
1941-
1942-
1943-
1944-@Callable(dB)
1945-func mergeLandsUsdt (gN) = {
1946- let hm = hj(dB)
1947- if ((size(dB.payments) != 1))
1806+ let cp = gv(true, toString(cK.caller), 0, fZ, cK.transactionId)
1807+ $Tuple2((cp._1 :+ gA), cp._2)
1808+ }
1809+ }
1810+
1811+
1812+
1813+@Callable(cK)
1814+func mergeLandsUsdt (fZ) = {
1815+ let gA = gx(cK)
1816+ if ((size(cK.payments) != 1))
19481817 then throw("Exactly one payment required")
19491818 else {
1950- let hn = value(dB.payments[0])
1951- if ((hn.assetId != b))
1819+ let gB = value(cK.payments[0])
1820+ if ((gB.assetId != aw))
19521821 then throw("Allowed USDT payment only!")
19531822 else {
1954- let dh = hh(false, toString(dB.caller), hn.amount, gN, dB.transactionId)
1955- $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2)
1823+ let cp = gv(false, toString(cK.caller), gB.amount, fZ, cK.transactionId)
1824+ $Tuple2(((cp._1 :+ ScriptTransfer(aY, gB.amount, aw)) :+ gA), cp._2)
19561825 }
19571826 }
19581827 }
19591828
19601829
19611830
1962-@Callable(dB)
1963-func cargoExchange (hV,aW) = {
1964- let hm = hj(dB)
1965- if ((size(dB.payments) != 0))
1831+@Callable(cK)
1832+func cargoExchange (hj,R) = {
1833+ let gA = gx(cK)
1834+ if ((size(cK.payments) != 0))
19661835 then throw("No payments required")
19671836 else {
1968- let eR = split_4C(hV, ":")
1969- let aK = toString(dB.originCaller)
1970- let bW = value(assetInfo(fromBase58String(aW)))
1971- let gd = aO(aW)
1972- if (!(isDefined(getInteger(gd))))
1973- then throw((bW.name + " is not staked"))
1837+ let ed = split_4C(hj, ":")
1838+ let F = toString(cK.originCaller)
1839+ let fp = value(assetInfo(fromBase58String(R)))
1840+ let fq = J(R)
1841+ if (!(isDefined(getInteger(fq))))
1842+ then throw((fp.name + " is not staked"))
19741843 else {
1975- let gf = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1976- if ((gf != aK))
1977- then throw((k + " is not yours"))
1844+ let fs = valueOrErrorMessage(getString(G(R)), (("NFT " + fp.name) + " is orphaned"))
1845+ if ((fs != F))
1846+ then throw((a + " is not yours"))
19781847 else {
1979- let eB = (bA(split(bW.description, "_")[W]) / o)
1980- let eC = valueOrElse(getInteger(aP(aW)), 0)
1981- let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1982- let ga = valueOrElse(getString(bh(bg)), w)
1983- let gb = split(value(ga), "_")
1984- if ((gb[bq] != "L"))
1985- then throw((("Duck location type is " + gb[bq]) + ", but should be L"))
1986- else if ((gb[br] != aW))
1987- then throw(("Duck should be on the land " + aW))
1848+ let dN = (bm(split(fp.description, "_")[bc]) / aD)
1849+ let dO = valueOrElse(getInteger(K(R)), 0)
1850+ let aa = valueOrErrorMessage(getString(Y(F)), "You don't have a duck staked")
1851+ let fm = valueOrElse(getString(ab(aa)), h)
1852+ let fn = split(value(fm), "_")
1853+ if ((fn[ah] != "L"))
1854+ then throw((("Duck location type is " + fn[ah]) + ", but should be L"))
1855+ else if ((fn[ai] != R))
1856+ then throw(("Duck should be on the land " + R))
19881857 else {
1989- let eA = aV(aW)
1990- let eo = ez(eA, eB, eC)
1991- let ej = bf(bg)
1992- let eS = ei(ej)
1993- let dh = eQ(eR, eo, eS)
1994- let eI = split(eo[ad], "_")
1995- let gs = (parseIntValue(eI[af]) + dh._7)
1996- let gt = (parseIntValue(eI[ag]) - dh._7)
1997-[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]
1858+ let dM = Q(R)
1859+ let dy = dL(dM, dN, dO)
1860+ let dt = Z(aa)
1861+ let ee = ds(dt)
1862+ let cp = ec(ed, dy, ee)
1863+ let dU = split(dy[t], "_")
1864+ let fF = (parseIntValue(dU[v]) + cp._7)
1865+ let fG = (parseIntValue(dU[w]) - cp._7)
1866+[StringEntry(dt, makeString_2C([ee[y], cp._4, cp._5, cp._6], ":")), StringEntry(dM, makeString_2C([dy[p], cp._1, cp._2, cp._3, makeString([dU[u], toString(fF), toString(fG), dU[x]], "_")], ":")), gA]
19981867 }
19991868 }
20001869 }
20031872
20041873
20051874
2006-@Callable(dB)
2007-func saveWarehouse (eE,aW) = {
2008- let hm = hj(dB)
2009- if ((dB.caller != aG))
1875+@Callable(cK)
1876+func saveWarehouse (dQ,R) = {
1877+ let gA = gx(cK)
1878+ if ((cK.caller != aY))
20101879 then throw("Access denied")
20111880 else {
2012- let eA = aV(aW)
2013- let eF = split_4C(eE, ":")
2014- if ((size(eF) != 5))
1881+ let dM = Q(R)
1882+ let dR = split_4C(dQ, ":")
1883+ if ((size(dR) != 5))
20151884 then throw("warehouse string should contain 4 ':' separators")
20161885 else {
2017- let hW = split(eF[ad], "_")[ae]
2018- let gs = en(eF)
2019- let hX = el(eF[Z])
2020- let gt = ((hX - parseIntValue(hW)) - gs)
2021- let hY = makeString_2C([eF[Z], eF[aa], eF[ab], eF[ac], makeString([hW, toString(gs), toString(gt), toString(hX)], "_")], ":")
2022- $Tuple2([StringEntry(eA, hY), hm], hY)
1886+ let hk = split(dR[t], "_")[u]
1887+ let fF = dx(dR)
1888+ let hl = dv(dR[p])
1889+ let fG = ((hl - parseIntValue(hk)) - fF)
1890+ let hm = makeString_2C([dR[p], dR[q], dR[r], dR[s], makeString([hk, toString(fF), toString(fG), toString(hl)], "_")], ":")
1891+ $Tuple2([StringEntry(dM, hm), gA], hm)
20231892 }
20241893 }
20251894 }
20261895
20271896
20281897
2029-@Callable(dB)
2030-func fixWarehouseFormat (aW) = if ((dB.caller != aE))
1898+@Callable(cK)
1899+func fixWarehouseFormat (R) = if ((cK.caller != aW))
20311900 then throw("Access denied")
20321901 else {
2033- let eA = aV(aW)
2034- let bW = value(assetInfo(fromBase58String(aW)))
2035- let eB = (bA(split(bW.description, "_")[W]) / o)
2036- let eC = valueOrElse(getInteger(aP(aW)), 0)
2037- let eF = ez(eA, eB, eC)
2038- let hW = bv(invoke(aG, "recalcLockedVolumeREADONLY", [aW, eF], nil))
2039- let gs = en(eF)
2040- let hX = el(eF[Z])
2041- let gt = ((hX - hW) - gs)
2042- let hY = makeString_2C([eF[Z], eF[aa], eF[ab], eF[ac], makeString([toString(hW), toString(gs), toString(gt), toString(hX)], "_")], ":")
2043- $Tuple2([StringEntry(eA, hY)], hY)
1902+ let dM = Q(R)
1903+ let fp = value(assetInfo(fromBase58String(R)))
1904+ let dN = (bm(split(fp.description, "_")[bc]) / aD)
1905+ let dO = valueOrElse(getInteger(K(R)), 0)
1906+ let dR = dL(dM, dN, dO)
1907+ let hk = bk(invoke(aY, "recalcLockedVolumeREADONLY", [R, dR], nil))
1908+ let fF = dx(dR)
1909+ let hl = dv(dR[p])
1910+ let fG = ((hl - hk) - fF)
1911+ let hm = makeString_2C([dR[p], dR[q], dR[r], dR[s], makeString([toString(hk), toString(fF), toString(fG), toString(hl)], "_")], ":")
1912+ $Tuple2([StringEntry(dM, hm)], hm)
20441913 }
20451914
20461915
20471916
2048-@Callable(dB)
2049-func fixStakedPieces (ap) = if ((dB.caller != aE))
1917+@Callable(cK)
1918+func fixStakedPieces (aJ) = if ((cK.caller != aW))
20501919 then throw("Access denied")
20511920 else {
2052- let hc = if ((ap == ""))
1921+ let gq = if ((aJ == ""))
20531922 then 0
20541923 else {
2055- let bT = getString(aF, aX(ap))
2056- let bU = if (isDefined(bT))
2057- then split_51C(value(bT), "_")
1924+ let gl = getString(aX, bg(aJ))
1925+ let gg = if (isDefined(gl))
1926+ then split_51C(value(gl), "_")
20581927 else nil
2059- func bV (bI,aW) = {
2060- let bW = value(assetInfo(fromBase58String(aW)))
2061- let bB = split(bW.description, "_")[W]
2062- (bI + bA(bB))
1928+ func hn (ce,R) = {
1929+ let fp = value(assetInfo(fromBase58String(R)))
1930+ let bn = split(fp.description, "_")[bc]
1931+ (ce + bm(bn))
20631932 }
20641933
2065- let bL = bU
2066- let bM = size(bL)
2067- let bN = 0
2068- func bO (bP,bQ) = if ((bQ >= bM))
2069- then bP
2070- else bV(bP, bL[bQ])
2071-
2072- func bR (bP,bQ) = if ((bQ >= bM))
2073- then bP
1934+ let ao = gg
1935+ let ap = size(ao)
1936+ let aq = 0
1937+ func ar (as,at) = if ((at >= ap))
1938+ then as
1939+ else hn(as, ao[at])
1940+
1941+ func au (as,at) = if ((at >= ap))
1942+ then as
20741943 else throw("List size exceeds 100")
20751944
2076- 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)
1945+ au(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(aq, 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)
20771946 }
2078- $Tuple2([IntegerEntry(aY(ap), hc)], hc)
1947+ $Tuple2([IntegerEntry(S(aJ), gq)], gq)
20791948 }
20801949
20811950
20821951
2083-@Callable(dB)
2084-func setCustomName (aM,gV,aR) = {
2085- let hm = hj(dB)
2086- if ((size(dB.payments) != 1))
1952+@Callable(cK)
1953+func setCustomName (H,gi,M) = {
1954+ let gA = gx(cK)
1955+ if ((size(cK.payments) != 1))
20871956 then throw("Exactly one payment required")
20881957 else {
2089- let hn = value(dB.payments[0])
2090- if ((hn.assetId != b))
1958+ let gB = value(cK.payments[0])
1959+ if ((gB.assetId != aw))
20911960 then throw("Allowed USDT payment only!")
2092- else if ((hn.amount != cj))
2093- then throw(("Payment should be " + toString(cj)))
2094- else if (contains(gV, "__"))
2095- then throw(("Name should not contain '__': " + gV))
2096- else if ((size(gV) > ck))
2097- then throw(("Name too long, maxLength=" + toString(ck)))
1961+ else if ((gB.amount != bt))
1962+ then throw(("Payment should be " + toString(bt)))
1963+ else if (contains(gi, "__"))
1964+ then throw(("Name should not contain '__': " + gi))
1965+ else if ((size(gi) > bu))
1966+ then throw(("Name too long, maxLength=" + toString(bu)))
20981967 else {
2099- let aK = toString(dB.originCaller)
2100- let hZ = {
2101- let c = aR
2102- if (("ACCOUNT" == c))
1968+ let F = toString(cK.originCaller)
1969+ let ho = {
1970+ let ax = M
1971+ if (("ACCOUNT" == ax))
21031972 then {
2104- let ia = cE(gV)
2105- let ib = getString(ia)
2106- if (isDefined(ib))
2107- then throw(("Name already registered: " + gV))
1973+ let hp = bO(gi)
1974+ let hq = getString(hp)
1975+ if (isDefined(hq))
1976+ then throw(("Name already registered: " + gi))
21081977 else {
2109- let ic = ba(aK)
2110- let id = getString(ic)
2111- let ie = if (isDefined(id))
2112- then [DeleteEntry(cE(value(id)))]
1978+ let hr = U(F)
1979+ let hs = getString(hr)
1980+ let ht = if (isDefined(hs))
1981+ then [DeleteEntry(bO(value(hs)))]
21131982 else nil
2114- ((ie :+ StringEntry(ic, gV)) :+ StringEntry(ia, aK))
1983+ ((ht :+ StringEntry(hr, gi)) :+ StringEntry(hp, F))
21151984 }
21161985 }
2117- else if (("LAND" == c))
1986+ else if (("LAND" == ax))
21181987 then {
2119- let bW = value(assetInfo(fromBase58String(aM)))
2120- let gd = aO(aM)
2121- if (!(isDefined(getInteger(gd))))
2122- then throw((bW.name + " is not staked"))
1988+ let fp = value(assetInfo(fromBase58String(H)))
1989+ let fq = J(H)
1990+ if (!(isDefined(getInteger(fq))))
1991+ then throw((fp.name + " is not staked"))
21231992 else {
2124- let gf = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned"))
2125- if ((gf != aK))
2126- then throw((k + " is not yours"))
1993+ let fs = valueOrErrorMessage(getString(G(H)), (("NFT " + fp.name) + " is orphaned"))
1994+ if ((fs != F))
1995+ then throw((a + " is not yours"))
21271996 else {
2128- let ia = cy(gV)
2129- let ib = getString(ia)
2130- if (isDefined(ib))
2131- then throw(("Name already registered: " + gV))
1997+ let hp = bI(gi)
1998+ let hq = getString(hp)
1999+ if (isDefined(hq))
2000+ then throw(("Name already registered: " + gi))
21322001 else {
2133- let if = aN(aM)
2134- let id = getString(if)
2135- let ie = if (isDefined(id))
2136- then [DeleteEntry(cy(value(id)))]
2002+ let hu = I(H)
2003+ let hs = getString(hu)
2004+ let ht = if (isDefined(hs))
2005+ then [DeleteEntry(bI(value(hs)))]
21372006 else nil
2138- ((ie :+ StringEntry(if, gV)) :+ StringEntry(ia, aM))
2007+ ((ht :+ StringEntry(hu, gi)) :+ StringEntry(hp, H))
21392008 }
21402009 }
21412010 }
21422011 }
2143- else if (("DUCK" == c))
2012+ else if (("DUCK" == ax))
21442013 then {
2145- let bW = value(assetInfo(fromBase58String(aM)))
2146- let gd = aO(aM)
2147- if (if (!(isDefined(getInteger(gd))))
2014+ let fp = value(assetInfo(fromBase58String(H)))
2015+ let fq = J(H)
2016+ if (if (!(isDefined(getInteger(fq))))
21482017 then true
2149- else !(isDefined(getString(be(aK)))))
2150- then throw((bW.name + " is not staked"))
2018+ else !(isDefined(getString(Y(F)))))
2019+ then throw((fp.name + " is not staked"))
21512020 else {
2152- let gf = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned"))
2153- if ((gf != aK))
2154- then throw((l + " is not yours"))
2021+ let fs = valueOrErrorMessage(getString(X(H)), (("NFT " + fp.name) + " is orphaned"))
2022+ if ((fs != F))
2023+ then throw((b + " is not yours"))
21552024 else {
2156- let ia = cD(gV)
2157- let ib = getString(ia)
2158- if (isDefined(ib))
2159- then throw(("Name already registered: " + gV))
2025+ let hp = bN(gi)
2026+ let hq = getString(hp)
2027+ if (isDefined(hq))
2028+ then throw(("Name already registered: " + gi))
21602029 else {
2161- let if = aZ(aM)
2162- let id = getString(if)
2163- let ie = if (isDefined(id))
2164- then [DeleteEntry(cD(value(id)))]
2030+ let hu = T(H)
2031+ let hs = getString(hu)
2032+ let ht = if (isDefined(hs))
2033+ then [DeleteEntry(bN(value(hs)))]
21652034 else nil
2166- ((ie :+ StringEntry(if, gV)) :+ StringEntry(ia, aM))
2035+ ((ht :+ StringEntry(hu, gi)) :+ StringEntry(hp, H))
21672036 }
21682037 }
21692038 }
21702039 }
21712040 else throw("Unknown entity type")
21722041 }
2173- $Tuple2(((hZ :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), 0)
2042+ $Tuple2(((ho :+ ScriptTransfer(aY, gB.amount, aw)) :+ gA), 0)
21742043 }
21752044 }
21762045 }
21772046
21782047
21792048
2180-@Callable(dB)
2181-func setReferrals (ig,ih) = if ((dB.callerPublicKey != cg))
2049+@Callable(cK)
2050+func setReferrals (hv,hw) = if ((cK.callerPublicKey != bq))
21822051 then throw("Permission denied")
21832052 else {
2184- let hm = hj(dB)
2185- if ((size(dB.payments) != 0))
2053+ let gA = gx(cK)
2054+ if ((size(cK.payments) != 0))
21862055 then throw("No payments required")
2187- else if (!(isDefined(addressFromString(ig))))
2188- then throw(("Invalid address: " + ig))
2189- else if (!(isDefined(addressFromString(ih))))
2190- then throw(("Invalid address: " + ih))
2056+ else if (!(isDefined(addressFromString(hv))))
2057+ then throw(("Invalid address: " + hv))
2058+ else if (!(isDefined(addressFromString(hw))))
2059+ then throw(("Invalid address: " + hw))
21912060 else {
2192- let ii = cF()
2193- let ij = getString(ii)
2194- let ik = if (isDefined(ij))
2195- then split_4C(value(ij), "_")
2061+ let hx = bP()
2062+ let hy = getString(hx)
2063+ let hz = if (isDefined(hy))
2064+ then split_4C(value(hy), "_")
21962065 else nil
2197- if (containsElement(ik, ih))
2198- then throw((ih + " is not newbie (already has referrals)"))
2066+ if (containsElement(hz, hw))
2067+ then throw((hw + " is not newbie (already has referrals)"))
21992068 else {
2200- let il = bb(ih)
2201- let im = getString(il)
2202- if (if (isDefined(im))
2203- then isDefined(addressFromString(value(im)))
2069+ let hA = V(hw)
2070+ let hB = getString(hA)
2071+ if (if (isDefined(hB))
2072+ then isDefined(addressFromString(value(hB)))
22042073 else false)
2205- then throw(((ih + " already has refBy: ") + value(im)))
2074+ then throw(((hw + " already has refBy: ") + value(hB)))
22062075 else {
2207- let in = bc(ig)
2208- let io = getString(in)
2209- let ip = if (isDefined(io))
2210- then split_4C(value(io), "_")
2076+ let hC = W(hv)
2077+ let hD = getString(hC)
2078+ let hE = if (isDefined(hD))
2079+ then split_4C(value(hD), "_")
22112080 else nil
2212- if (containsElement(ip, ih))
2213- then throw((((ig + " already contains ") + ih) + " within referrals"))
2081+ if (containsElement(hE, hw))
2082+ then throw((((hv + " already contains ") + hw) + " within referrals"))
22142083 else {
2215- let iq = makeString_2C((ip :+ ih), "_")
2216- let ir = if (containsElement(ik, ig))
2217- then value(ij)
2218- else makeString_2C((ik :+ ig), "_")
2219- $Tuple2([StringEntry(il, ig), StringEntry(in, iq), StringEntry(ii, ir), hm], 0)
2084+ let hF = makeString_2C((hE :+ hw), "_")
2085+ let hG = if (containsElement(hz, hv))
2086+ then value(hy)
2087+ else makeString_2C((hz :+ hv), "_")
2088+ $Tuple2([StringEntry(hA, hv), StringEntry(hC, hF), StringEntry(hx, hG), gA], 0)
22202089 }
22212090 }
22222091 }
22252094
22262095
22272096
2228-@Callable(dB)
2229-func splitByGlobalWeightsREADONLY (eP) = $Tuple2(nil, cZ(eP))
2230-
2231-
2232-
2233-@Callable(dB)
2234-func splitByGlobalAndLocalWeightsREADONLY (is,it,dE) = {
2235- let dx = dD(dE)
2236- $Tuple2(nil, $Tuple2(cZ(is), cS(it, dx)))
2237- }
2238-
2239-
2240-
2241-@Callable(dB)
2242-func getBackpackREADONLY (bg) = $Tuple2(nil, makeString(ei(bf(bg)), ":"))
2243-
2244-
2245-
2246-@Callable(dB)
2247-func getWarehouseREADONLY (aW) = {
2248- let bW = value(assetInfo(fromBase58String(aW)))
2249- let eB = (bA(split(bW.description, "_")[W]) / o)
2250- let eC = valueOrElse(getInteger(aP(aW)), 0)
2251- $Tuple2(nil, makeString_2C(ez(aV(aW), eB, eC), ":"))
2252- }
2253-
2254-
2255-
2256-@Callable(dB)
2257-func saveLastTx () = if ((dB.caller != aI))
2097+@Callable(cK)
2098+func splitByGlobalWeightsREADONLY (eb) = $Tuple2(nil, cg(eb))
2099+
2100+
2101+
2102+@Callable(cK)
2103+func splitByGlobalAndLocalWeightsREADONLY (hH,hI,cN) = {
2104+ let cG = cM(cN)
2105+ $Tuple2(nil, $Tuple2(cg(hH), bY(hI, cG)))
2106+ }
2107+
2108+
2109+
2110+@Callable(cK)
2111+func getBackpackREADONLY (aa) = $Tuple2(nil, makeString(ds(Z(aa)), ":"))
2112+
2113+
2114+
2115+@Callable(cK)
2116+func getWarehouseREADONLY (R) = {
2117+ let fp = value(assetInfo(fromBase58String(R)))
2118+ let dN = (bm(split(fp.description, "_")[bc]) / aD)
2119+ let dO = valueOrElse(getInteger(K(R)), 0)
2120+ $Tuple2(nil, makeString_2C(dL(Q(R), dN, dO), ":"))
2121+ }
2122+
2123+
2124+
2125+@Callable(cK)
2126+func saveLastTx () = if ((cK.caller != ba))
22582127 then throw("Access denied")
2259- else $Tuple2([hj(dB)], 42)
2128+ else $Tuple2([gx(cK)], 42)
22602129
22612130
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = take(drop(this.bytes, 1), 1)
5-
6-let b = {
7- let c = a
8- if ((base58'2W' == c))
4+let a = "LAND"
5+
6+let b = "DUCK"
7+
8+let c = "PRESALE"
9+
10+let d = 6
11+
12+let e = 3456000
13+
14+let f = 86400000
15+
16+let g = 10000000000
17+
18+let h = "Africa_F_Africa"
19+
20+let i = 39637
21+
22+let j = 10
23+
24+let k = 100
25+
26+let l = ["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"]
27+
28+let m = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
29+
30+let n = ["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"]
31+
32+let o = 7
33+
34+let p = 0
35+
36+let q = 1
37+
38+let r = 2
39+
40+let s = 3
41+
42+let t = 4
43+
44+let u = 0
45+
46+let v = 1
47+
48+let w = 2
49+
50+let x = 3
51+
52+let y = 0
53+
54+let z = 1
55+
56+let A = 2
57+
58+let B = 3
59+
60+func C (D) = parseIntValue(split(n[D], "_")[o])
61+
62+
63+func E (F) = ("lastTxIdByUser_" + F)
64+
65+
66+func G (H) = ("nftOwner_" + H)
67+
68+
69+func I (H) = ("landCustomNameByAssetId_" + H)
70+
71+
72+func J (H) = ("stakedTime_" + H)
73+
74+
75+func K (H) = ("infraLevel_" + H)
76+
77+
78+func L (M,H) = makeString(["landArtStatus", M, H], "_")
79+
80+
81+func N (O,H,P) = ((((("stakedTimeByTypeAssetIdAndOwner_" + O) + "_") + H) + "_") + P)
82+
83+
84+func Q (R) = ("wareHouse_" + R)
85+
86+
87+func S (P) = ("stakedPiecesByOwner_" + P)
88+
89+
90+func T (H) = ("duckCustomNameByAssetId_" + H)
91+
92+
93+func U (F) = ("accountCustomNameByAddr_" + F)
94+
95+
96+func V (F) = ("accRefBy_" + F)
97+
98+
99+func W (F) = ("accReferrals_" + F)
100+
101+
102+func X (H) = ("duckOwner_" + H)
103+
104+
105+func Y (P) = ("stakedDuckByOwner_" + P)
106+
107+
108+func Z (aa) = ("backPack_" + aa)
109+
110+
111+func ab (aa) = ("duckLocation_" + aa)
112+
113+
114+func ac (aa) = ("duckHealth_" + aa)
115+
116+
117+func ad () = "contractsBlocked"
118+
119+
120+func ae (af) = ("%s%s__userGwlReleaseTime__" + af)
121+
122+
123+func ag () = "emergencyWarehouseProducts"
124+
125+
126+let ah = 1
127+
128+let ai = 2
129+
130+func aj (ak) = {
131+ func al (am,an) = (am + parseIntValue(ak[an]))
132+
133+ let ao = [0, 1, 2, 3, 4, 5]
134+ let ap = size(ao)
135+ let aq = 0
136+ func ar (as,at) = if ((at >= ap))
137+ then as
138+ else al(as, ao[at])
139+
140+ func au (as,at) = if ((at >= ap))
141+ then as
142+ else throw("List size exceeds 6")
143+
144+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
145+ }
146+
147+
148+let av = take(drop(this.bytes, 1), 1)
149+
150+let aw = {
151+ let ax = av
152+ if ((base58'2W' == ax))
9153 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
10- else if ((base58'2T' == c))
154+ else if ((base58'2T' == ax))
11155 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
12156 else throw("Unknown chain")
13157 }
14158
15-let d = {
16- let c = a
17- if ((base58'2W' == c))
159+let ay = {
160+ let ax = av
161+ if ((base58'2W' == ax))
18162 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
19- else if ((base58'2T' == c))
163+ else if ((base58'2T' == ax))
20164 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
21165 else throw("Unknown chain")
22166 }
23167
24-let e = {
25- let c = a
26- if ((base58'2W' == c))
168+let az = {
169+ let ax = av
170+ if ((base58'2W' == ax))
27171 then 10000000000
28- else if ((base58'2T' == c))
172+ else if ((base58'2T' == ax))
29173 then 100000000
30174 else throw("Unknown chain")
31175 }
32176
33-let f = "__"
34-
35-let g = 1000000
36-
37-let h = 10000000
38-
39-let i = 100000000
40-
41-let j = 10000000000
42-
43-let k = "LAND"
44-
45-let l = "DUCK"
46-
47-let m = "PRESALE"
48-
49-let n = 6
50-
51-let o = 25
52-
53-let p = 100
54-
55-let q = 225
56-
57-let r = 400
58-
59-let s = 625
60-
61-let t = 3456000
62-
63-let u = 86400000
64-
65-let v = 10000000000
66-
67-let w = "Africa_F_Africa"
68-
69-let x = 39637
70-
71-let y = 3
72-
73-let z = 4
74-
75-let A = 10
76-
77-let B = 100
78-
79-let C = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
80-
81-let D = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
82-
83-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"]
84-
85-let F = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
86-
87-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"]
88-
89-let H = 0
90-
91-let I = 1
92-
93-let J = 2
94-
95-let K = 3
96-
97-let L = 4
98-
99-let M = 0
100-
101-let N = 1
102-
103-let O = 2
104-
105-let P = 3
106-
107-let Q = 4
108-
109-let R = 5
110-
111-let S = 6
112-
113-let T = 7
114-
115-let U = 8
116-
117-let V = 0
118-
119-let W = 1
120-
121-let X = 2
122-
123-let Y = 3
124-
125-let Z = 0
126-
127-let aa = 1
128-
129-let ab = 2
130-
131-let ac = 3
132-
133-let ad = 4
134-
135-let ae = 0
136-
137-let af = 1
138-
139-let ag = 2
140-
141-let ah = 3
142-
143-let ai = 0
144-
145-let aj = 1
146-
147-let ak = 2
148-
149-let al = 3
150-
151-func am (an) = parseIntValue(split(G[an], "_")[T])
152-
153-
154-func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
155-
156-
157-func ar (aq,as) = valueOrElse(getInteger(this, aq), as)
158-
159-
160-let at = 1
161-
162-let au = 2
163-
164-let av = 3
165-
166-let aw = 4
167-
168-func ax () = "%s__restConfig"
169-
170-
171-func ay () = "%s__restAddr"
172-
173-
174-func az (aA) = split_4C(ao(aA, ax()), f)
175-
176-
177-func aB (aC,aD) = valueOrErrorMessage(addressFromString(aC[aD]), ("Rest cfg doesn't contain address at index " + toString(aD)))
178-
179-
180-let aE = addressFromStringValue(valueOrElse(getString(this, ay()), d))
181-
182-let aC = az(aE)
183-
184-let aF = aB(aC, at)
185-
186-let aG = aB(aC, au)
187-
188-let aH = aB(aC, av)
189-
190-let aI = aB(aC, aw)
191-
192-func aJ (aK) = ("lastTxIdByUser_" + aK)
193-
194-
195-func aL (aM) = ("nftOwner_" + aM)
196-
197-
198-func aN (aM) = ("landCustomNameByAssetId_" + aM)
199-
200-
201-func aO (aM) = ("stakedTime_" + aM)
202-
203-
204-func aP (aM) = ("infraLevel_" + aM)
205-
206-
207-func aQ (aR,aM) = makeString(["landArtStatus", aR, aM], "_")
208-
209-
210-func aS (aT,aM,aU) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aT) + "_") + aM) + "_") + aU)
211-
212-
213-func aV (aW) = ("wareHouse_" + aW)
214-
215-
216-func aX (aU) = ("stakedLandsByOwner_" + aU)
217-
218-
219-func aY (aU) = ("stakedPiecesByOwner_" + aU)
220-
221-
222-func aZ (aM) = ("duckCustomNameByAssetId_" + aM)
223-
224-
225-func ba (aK) = ("accountCustomNameByAddr_" + aK)
226-
227-
228-func bb (aK) = ("accRefBy_" + aK)
229-
230-
231-func bc (aK) = ("accReferrals_" + aK)
232-
233-
234-func bd (aM) = ("duckOwner_" + aM)
235-
236-
237-func be (aU) = ("stakedDuckByOwner_" + aU)
238-
239-
240-func bf (bg) = ("backPack_" + bg)
241-
242-
243-func bh (bg) = ("duckLocation_" + bg)
244-
245-
246-func bi (bg) = ("duckHealth_" + bg)
247-
248-
249-func bj () = "resTypesProportions"
250-
251-
252-func bk () = "contractsBlocked"
253-
254-
255-func bl (bm) = ("%s%s__userGwlReleaseTime__" + bm)
256-
257-
258-func bn (aW) = ("landOrder_" + aW)
259-
260-
261-func bo () = "emergencyWarehouseProducts"
262-
263-
264-let bp = 0
265-
266-let bq = 1
267-
268-let br = 2
269-
270-func bs (bt) = {
271- let c = bt
272- if ($isInstanceOf(c, "String"))
177+let aA = "__"
178+
179+let aB = 1000000
180+
181+let aC = 100000000
182+
183+let aD = 25
184+
185+let aE = 100
186+
187+let aF = 225
188+
189+let aG = 400
190+
191+let aH = 625
192+
193+func aI (aJ,aK) = valueOrErrorMessage(getString(aJ, aK), makeString(["mandatory ", toString(aJ), ".", aK, " is not defined"], ""))
194+
195+
196+let aL = 1
197+
198+let aM = 2
199+
200+let aN = 3
201+
202+let aO = 4
203+
204+func aP () = "%s__restConfig"
205+
206+
207+func aQ () = "%s__restAddr"
208+
209+
210+func aR (aS) = split_4C(aI(aS, aP()), aA)
211+
212+
213+func aT (aU,aV) = valueOrErrorMessage(addressFromString(aU[aV]), ("Rest cfg doesn't contain address at index " + toString(aV)))
214+
215+
216+let aW = addressFromStringValue(valueOrElse(getString(this, aQ()), ay))
217+
218+let aU = aR(aW)
219+
220+let aX = aT(aU, aL)
221+
222+let aY = aT(aU, aM)
223+
224+let aZ = aT(aU, aN)
225+
226+let ba = aT(aU, aO)
227+
228+let bb = 0
229+
230+let bc = 1
231+
232+let bd = 2
233+
234+let be = 3
235+
236+func bf () = "resTypesProportions"
237+
238+
239+func bg (P) = ("stakedLandsByOwner_" + P)
240+
241+
242+func bh (bi) = {
243+ let ax = bi
244+ if ($isInstanceOf(ax, "String"))
273245 then {
274- let bu = c
275- bu
246+ let bj = ax
247+ bj
276248 }
277249 else throw("fail to cast into String")
278250 }
279251
280252
281-func bv (bt) = {
282- let c = bt
283- if ($isInstanceOf(c, "Int"))
253+func bk (bi) = {
254+ let ax = bi
255+ if ($isInstanceOf(ax, "Int"))
284256 then {
285- let bw = c
286- bw
257+ let bl = ax
258+ bl
287259 }
288260 else throw("fail to cast into Int")
289261 }
290262
291263
292-func bx (bt) = {
293- let c = bt
294- if ($isInstanceOf(c, "List[Any]"))
295- then {
296- let by = c
297- by
298- }
299- else throw("fail to cast into List[Any]")
300- }
301-
302-
303-func bz (bt) = {
304- let c = bt
305- if ($isInstanceOf(c, "Boolean"))
306- then {
307- let bu = c
308- bu
309- }
310- else throw("fail to cast into Boolean")
311- }
312-
313-
314-func bA (bB) = {
315- let c = bB
316- if (("S" == c))
317- then o
318- else if (("M" == c))
319- then p
320- else if (("L" == c))
321- then q
322- else if (("XL" == c))
323- then r
324- else if (("XXL" == c))
325- then s
264+func bm (bn) = {
265+ let ax = bn
266+ if (("S" == ax))
267+ then aD
268+ else if (("M" == ax))
269+ then aE
270+ else if (("L" == ax))
271+ then aF
272+ else if (("XL" == ax))
273+ then aG
274+ else if (("XXL" == ax))
275+ then aH
326276 else throw("Unknown land size")
327277 }
328278
329279
330-let bC = 0
331-
332-let bD = 1
333-
334-func bE (bF) = {
335- let bG = split(valueOrElse(getString(aF, bj()), "0_0_0_0_0_0"), "_")
336- func bH (bI,bJ) = (bI + parseIntValue(bJ))
337-
338- let bK = {
339- let bL = bG
340- let bM = size(bL)
341- let bN = 0
342- func bO (bP,bQ) = if ((bQ >= bM))
343- then bP
344- else bH(bP, bL[bQ])
345-
346- func bR (bP,bQ) = if ((bQ >= bM))
347- then bP
348- else throw("List size exceeds 6")
349-
350- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
351- }
352- let bS = if ((bF == ""))
353- then 0
354- else {
355- let bT = getString(aF, aX(bF))
356- let bU = if (isDefined(bT))
357- then split_51C(value(bT), "_")
358- else nil
359- func bV (bI,aW) = {
360- let bW = value(assetInfo(fromBase58String(aW)))
361- let bB = split(bW.description, "_")[W]
362- (bI + bA(bB))
363- }
364-
365- let bL = bU
366- let bM = size(bL)
367- let bN = 0
368- func bX (bP,bQ) = if ((bQ >= bM))
369- then bP
370- else bV(bP, bL[bQ])
371-
372- func bY (bP,bQ) = if ((bQ >= bM))
373- then bP
374- else throw("List size exceeds 100")
375-
376- 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)
377- }
378-[bK, bS]
379- }
380-
381-
382-func bZ (ca) = {
383- func cb (cc,cd) = (cc + parseIntValue(ca[cd]))
384-
385- let bL = [0, 1, 2, 3, 4, 5]
386- let bM = size(bL)
387- let bN = 0
388- func bO (bP,bQ) = if ((bQ >= bM))
389- then bP
390- else cb(bP, bL[bQ])
391-
392- func bR (bP,bQ) = if ((bQ >= bM))
393- then bP
394- else throw("List size exceeds 6")
395-
396- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
397- }
398-
399-
400-let ce = {
401- let c = a
402- if ((base58'2W' == c))
280+let bo = {
281+ let ax = av
282+ if ((base58'2W' == ax))
403283 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
404- else if ((base58'2T' == c))
284+ else if ((base58'2T' == ax))
405285 then this
406286 else throw("Unknown chain")
407287 }
408288
409-let cf = {
410- let c = a
411- if ((base58'2W' == c))
289+let bp = {
290+ let ax = av
291+ if ((base58'2W' == ax))
412292 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
413- else if ((base58'2T' == c))
293+ else if ((base58'2T' == ax))
414294 then this
415295 else throw("Unknown chain")
416296 }
417297
418-let cg = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
419-
420-let ch = [30, 60, 120]
421-
422-let ci = 300000
423-
424-let cj = 5000000
425-
426-let ck = 50
427-
428-let cl = 10000000
429-
430-let cm = {
431- let c = a
432- if ((base58'2W' == c))
298+let bq = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
299+
300+let br = [30, 60, 120]
301+
302+let bs = 300000
303+
304+let bt = 5000000
305+
306+let bu = 50
307+
308+let bv = 10000000
309+
310+let bw = {
311+ let ax = av
312+ if ((base58'2W' == ax))
433313 then 252289527462
434- else if ((base58'2T' == c))
314+ else if ((base58'2T' == ax))
435315 then 2522895274
436316 else throw("Unknown chain")
437317 }
438318
439-let cn = {
440- let c = a
441- if ((base58'2W' == c))
319+let bx = {
320+ let ax = av
321+ if ((base58'2W' == ax))
442322 then 250000000
443- else if ((base58'2T' == c))
323+ else if ((base58'2T' == ax))
444324 then 250000000
445325 else throw("Unknown chain")
446326 }
447327
448-let co = toBigInt(5)
449-
450-let cp = toBigInt(20)
451-
452-let cq = toBigInt((20 * 20))
453-
454-let cr = toBigInt(((20 * 20) * 20))
455-
456-let cs = toBigInt((((20 * 20) * 20) * 20))
457-
458-let ct = toBigInt(((((20 * 20) * 20) * 20) * 20))
459-
460-let cu = 500
461-
462-func cv () = "nextLandNum"
463-
464-
465-func cw (cx) = ("landToAsset_" + cx)
466-
467-
468-func cy (cz) = ("landByCustomName_" + cz)
469-
470-
471-func cA (aM,aU) = ((("infraLevelByAssetIdAndOwner_" + aM) + "_") + aU)
472-
473-
474-func cB (aR,aM,aU) = makeString(["landArtStatusByTypeAssetIdAndOwner", aR, aM, aU], "_")
475-
476-
477-func cC (cx) = ("landOwner_" + cx)
478-
479-
480-func cD (cz) = ("duckByCustomName_" + cz)
481-
482-
483-func cE (cz) = ("accountByCustomName_" + cz)
484-
485-
486-func cF () = "oldiesList"
487-
488-
489-let cG = 0
490-
491-let cH = 1
492-
493-let cI = 2
494-
495-let cJ = 0
496-
497-let cK = 1
498-
499-let cL = 2
500-
501-let cM = 3
502-
503-let cN = 4
504-
505-let cO = 5
506-
507-let cP = 6
508-
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))
328+let by = toBigInt(5)
329+
330+let bz = toBigInt(20)
331+
332+let bA = toBigInt((20 * 20))
333+
334+let bB = toBigInt(((20 * 20) * 20))
335+
336+let bC = toBigInt((((20 * 20) * 20) * 20))
337+
338+let bD = toBigInt(((((20 * 20) * 20) * 20) * 20))
339+
340+let bE = 500
341+
342+func bF () = "nextLandNum"
343+
344+
345+func bG (bH) = ("landToAsset_" + bH)
346+
347+
348+func bI (bJ) = ("landByCustomName_" + bJ)
349+
350+
351+func bK (H,P) = ((("infraLevelByAssetIdAndOwner_" + H) + "_") + P)
352+
353+
354+func bL (M,H,P) = makeString(["landArtStatusByTypeAssetIdAndOwner", M, H, P], "_")
355+
356+
357+func bM (bH) = ("landOwner_" + bH)
358+
359+
360+func bN (bJ) = ("duckByCustomName_" + bJ)
361+
362+
363+func bO (bJ) = ("accountByCustomName_" + bJ)
364+
365+
366+func bP () = "oldiesList"
367+
368+
369+let bQ = 0
370+
371+let bR = 1
372+
373+let bS = 2
374+
375+let bT = 0
376+
377+let bU = 5
378+
379+let bV = 6
380+
381+let bW = 7
382+
383+func bX (bH,bn) = ((a + bH) + bn)
384+
385+
386+func bY (bZ,ca) = {
387+ let cb = (((((ca[0] + ca[1]) + ca[2]) + ca[3]) + ca[4]) + ca[5])
388+ if ((0 >= cb))
517389 then throw("Zero weights sum")
518390 else {
519- let cW = fraction(cT, g, cV)
520- func cX (bI,cY) = (bI :+ fraction(cY, cW, g))
521-
522- let bL = cU
523- let bM = size(bL)
524- let bN = nil
525- func bO (bP,bQ) = if ((bQ >= bM))
526- then bP
527- else cX(bP, bL[bQ])
528-
529- func bR (bP,bQ) = if ((bQ >= bM))
530- then bP
391+ let cc = fraction(bZ, aB, cb)
392+ func cd (ce,cf) = (ce :+ fraction(cf, cc, aB))
393+
394+ let ao = ca
395+ let ap = size(ao)
396+ let aq = nil
397+ func ar (as,at) = if ((at >= ap))
398+ then as
399+ else cd(as, ao[at])
400+
401+ func au (as,at) = if ((at >= ap))
402+ then as
531403 else throw("List size exceeds 6")
532404
533- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
534- }
535- }
536-
537-
538-func cZ (cT) = {
539- let bG = split(value(getString(bj())), "_")
540- if ((size(bG) != n))
405+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
406+ }
407+ }
408+
409+
410+func cg (bZ) = {
411+ let ch = split(value(getString(bf())), "_")
412+ if ((size(ch) != d))
541413 then throw("Wrong proportions data")
542414 else {
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))
415+ let ci = [parseIntValue(ch[0]), parseIntValue(ch[1]), parseIntValue(ch[2]), parseIntValue(ch[3]), parseIntValue(ch[4]), parseIntValue(ch[5])]
416+ bY(bZ, ci)
417+ }
418+ }
419+
420+
421+func cj (ck,cl,cm) = {
422+ let cn = cg(cm)
423+ func co (ce,aV) = {
424+ let cp = (parseIntValue(cl[aV]) - cn[aV])
425+ if ((0 > cp))
426+ then throw(((((("Not enough material idx=" + toString(aV)) + ", you have ") + cl[aV]) + ", but need ") + toString(cn[aV])))
427+ else (ce :+ toString(cp))
556428 }
557429
558- if (dc)
430+ if (ck)
559431 then {
560- let bL = [0, 1, 2, 3, 4, 5]
561- let bM = size(bL)
562- let bN = nil
563- func bO (bP,bQ) = if ((bQ >= bM))
564- then bP
565- else dg(bP, bL[bQ])
566-
567- func bR (bP,bQ) = if ((bQ >= bM))
568- then bP
432+ let ao = [0, 1, 2, 3, 4, 5]
433+ let ap = size(ao)
434+ let aq = nil
435+ func ar (as,at) = if ((at >= ap))
436+ then as
437+ else co(as, ao[at])
438+
439+ func au (as,at) = if ((at >= ap))
440+ then as
569441 else throw("List size exceeds 6")
570442
571- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
572- }
573- else dd
574- }
575-
576-
577-func di (dj,dk) = if ((dk == ""))
578- then dj
443+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
444+ }
445+ else cl
446+ }
447+
448+
449+func cq (cr,cs) = if ((cs == ""))
450+ then cr
579451 else {
580- let dl = if ((dj == ""))
452+ let ct = if ((cr == ""))
581453 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))
454+ else split(cr, "_")
455+ func cu (ce,cv) = {
456+ let an = ce._1
457+ func cw (am,cx) = {
458+ let cy = split(cx, ",")
459+ if ((size(cy) != 2))
588460 then throw("Incorrect format, should be index,amount")
589461 else {
590- let aD = parseIntValue(dp[0])
591- if (if ((0 > aD))
462+ let aV = parseIntValue(cy[0])
463+ if (if ((0 > aV))
592464 then true
593- else (aD >= size(G)))
465+ else (aV >= size(n)))
594466 then throw("Unknown product idx")
595- else if ((aD != cd))
596- then cc
467+ else if ((aV != an))
468+ then am
597469 else {
598- let dq = parseIntValue(dp[1])
599- if ((0 >= dq))
470+ let cz = parseIntValue(cy[1])
471+ if ((0 >= cz))
600472 then throw("Pass only positive amounts")
601- else (cc + dq)
473+ else (am + cz)
602474 }
603475 }
604476 }
605477
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
478+ let cA = {
479+ let ao = split(cs, "_")
480+ let ap = size(ao)
481+ let aq = 0
482+ func ar (as,at) = if ((at >= ap))
483+ then as
484+ else cw(as, ao[at])
485+
486+ func au (as,at) = if ((at >= ap))
487+ then as
616488 else throw("List size exceeds 10")
617489
618- bR(bO(bO(bO(bO(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
490+ au(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
619491 }
620- let ds = if ((size(dl) > cd))
621- then parseIntValue(dl[cd])
492+ let cB = if ((size(ct) > an))
493+ then parseIntValue(ct[an])
622494 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
495+ let cC = if ((cA > cB))
496+ then throw(((((("You have " + toString(cB)) + " of ") + l[an]) + ", but tried to use ") + toString(cA)))
497+ else (cB - cA)
498+ $Tuple2((an + 1), (ce._2 :+ toString(cC)))
499+ }
500+
501+ let cD = {
502+ let ao = n
503+ let ap = size(ao)
504+ let aq = $Tuple2(0, nil)
505+ func ar (as,at) = if ((at >= ap))
506+ then as
507+ else cu(as, ao[at])
508+
509+ func au (as,at) = if ((at >= ap))
510+ then as
639511 else throw("List size exceeds 50")
640512
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, "_")
513+ au(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(aq, 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)
514+ }
515+ makeString(cD._2, "_")
644516 }
645517
646518
647-func dv (dw,dx,dy,dz) = if ((size(dw) != n))
519+func cE (cF,cG,cH,cI) = if ((size(cF) != d))
648520 then throw("Wrong proportions data")
649521 else {
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 = {
658- let bL = [0, 1, 2, 3, 4, 5]
659- let bM = size(bL)
660- let bN = nil
661- func bO (bP,bQ) = if ((bQ >= bM))
662- then bP
663- else dA(bP, bL[bQ])
664-
665- func bR (bP,bQ) = if ((bQ >= bM))
666- then bP
522+ func cJ (ce,cK) = {
523+ let cp = (parseIntValue(cF[cK]) + ((cI * cG[cK]) * cH))
524+ if ((0 > cp))
525+ then throw(((((((("Panic! Pieces of type=" + toString(cK)) + ", sign=") + toString(cI)) + ", terrainCounts[i]=") + toString(cG[cK])) + ", landSizeIndex=") + toString(cH)))
526+ else (ce :+ toString(cp))
527+ }
528+
529+ let ci = {
530+ let ao = [0, 1, 2, 3, 4, 5]
531+ let ap = size(ao)
532+ let aq = nil
533+ func ar (as,at) = if ((at >= ap))
534+ then as
535+ else cJ(as, ao[at])
536+
537+ func au (as,at) = if ((at >= ap))
538+ then as
667539 else throw("List size exceeds 6")
668540
669- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
670- }
671- makeString(da, "_")
541+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
542+ }
543+ makeString(ci, "_")
672544 }
673545
674546
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)))
547+func cL (cG,cH,cI) = {
548+ let cF = split(valueOrElse(getString(bf()), "0_0_0_0_0_0"), "_")
549+ cE(cF, cG, cH, cI)
550+ }
551+
552+
553+func cM (cN) = [(size(split(cN, "A")) - 1), (size(split(cN, "B")) - 1), (size(split(cN, "C")) - 1), (size(split(cN, "D")) - 1), (size(split(cN, "E")) - 1), (size(split(cN, "F")) - 1)]
554+
555+
556+func cO (cP,cG,cQ,cH,cR) = {
557+ func cS (ce,cK) = {
558+ let cT = ((fraction(cQ, cR, f) * cG[cK]) * cH)
559+ (ce :+ toString((parseIntValue(cP[cK]) + cT)))
688560 }
689561
690- let da = {
691- let bL = [0, 1, 2, 3, 4, 5]
692- let bM = size(bL)
693- let bN = nil
694- func bO (bP,bQ) = if ((bQ >= bM))
695- then bP
696- else bH(bP, bL[bQ])
697-
698- func bR (bP,bQ) = if ((bQ >= bM))
699- then bP
562+ let ci = {
563+ let ao = [0, 1, 2, 3, 4, 5]
564+ let ap = size(ao)
565+ let aq = nil
566+ func ar (as,at) = if ((at >= ap))
567+ then as
568+ else cS(as, ao[at])
569+
570+ func au (as,at) = if ((at >= ap))
571+ then as
700572 else throw("List size exceeds 6")
701573
702- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
574+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
703575 }
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))
576+ makeString(ci, "_")
577+ }
578+
579+
580+func cU (cG,cQ,cH,cR) = {
581+ func cS (ce,cK) = {
582+ let cT = ((fraction(cQ, cR, f) * cG[cK]) * cH)
583+ $Tuple2((ce._1 :+ cT), (ce._2 + cT))
712584 }
713585
714- let bL = [0, 1, 2, 3, 4, 5]
715- let bM = size(bL)
716- let bN = $Tuple2(nil, 0)
717- func bO (bP,bQ) = if ((bQ >= bM))
718- then bP
719- else bH(bP, bL[bQ])
720-
721- func bR (bP,bQ) = if ((bQ >= bM))
722- then bP
586+ let ao = [0, 1, 2, 3, 4, 5]
587+ let ap = size(ao)
588+ let aq = $Tuple2(nil, 0)
589+ func ar (as,at) = if ((at >= ap))
590+ then as
591+ else cS(as, ao[at])
592+
593+ func au (as,at) = if ((at >= ap))
594+ then as
723595 else throw("List size exceeds 6")
724596
725- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
726- }
727-
728-
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))
597+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
598+ }
599+
600+
601+func cV (cW,cX,cY,cZ) = {
602+ let da = cY._1
603+ let db = cY._2
604+ if ((db == 0))
605+ then $Tuple2(makeString(cW, "_"), makeString(cX, "_"))
606+ else if ((cZ >= db))
735607 then {
736- func dS (bI,dB) = (bI :+ toString((parseIntValue(dM[dB]) + dQ[dB])))
737-
738- let da = {
739- let bL = [0, 1, 2, 3, 4, 5]
740- let bM = size(bL)
741- let bN = nil
742- func bO (bP,bQ) = if ((bQ >= bM))
743- then bP
744- else dS(bP, bL[bQ])
745-
746- func bR (bP,bQ) = if ((bQ >= bM))
747- then bP
608+ func dc (ce,cK) = (ce :+ toString((parseIntValue(cW[cK]) + da[cK])))
609+
610+ let ci = {
611+ let ao = [0, 1, 2, 3, 4, 5]
612+ let ap = size(ao)
613+ let aq = nil
614+ func ar (as,at) = if ((at >= ap))
615+ then as
616+ else dc(as, ao[at])
617+
618+ func au (as,at) = if ((at >= ap))
619+ then as
748620 else throw("List size exceeds 6")
749621
750- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
622+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
751623 }
752- $Tuple2(makeString(da, "_"), makeString(dN, "_"))
624+ $Tuple2(makeString(ci, "_"), makeString(cX, "_"))
753625 }
754626 else {
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))))
627+ func dd (ce,cK) = {
628+ let de = fraction(da[cK], cZ, db)
629+ $Tuple2((ce._1 :+ toString((parseIntValue(cW[cK]) + de))), (ce._2 :+ toString(((parseIntValue(cX[cK]) + da[cK]) - de))))
758630 }
759631
760- let da = {
761- let bL = [0, 1, 2, 3, 4, 5]
762- let bM = size(bL)
763- let bN = $Tuple2(nil, nil)
764- func bO (bP,bQ) = if ((bQ >= bM))
765- then bP
766- else dT(bP, bL[bQ])
767-
768- func bR (bP,bQ) = if ((bQ >= bM))
769- then bP
632+ let ci = {
633+ let ao = [0, 1, 2, 3, 4, 5]
634+ let ap = size(ao)
635+ let aq = $Tuple2(nil, nil)
636+ func ar (as,at) = if ((at >= ap))
637+ then as
638+ else dd(as, ao[at])
639+
640+ func au (as,at) = if ((at >= ap))
641+ then as
770642 else throw("List size exceeds 6")
771643
772- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
644+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
773645 }
774- $Tuple2(makeString(da._1, "_"), makeString(da._2, "_"))
646+ $Tuple2(makeString(ci._1, "_"), makeString(ci._2, "_"))
775647 }
776648 }
777649
778650
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))
651+func df (dg) = if ((dg >= toBigInt(0)))
652+ then dg
653+ else -(dg)
654+
655+
656+let dh = [[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]]
657+
658+func di (bl,dj) = {
659+ let dk = toInt((bl % bz))
660+ let dl = if ((dj[0] > dk))
789661 then "A"
790- else if ((dZ[1] > ea))
662+ else if ((dj[1] > dk))
791663 then "B"
792- else if ((dZ[2] > ea))
664+ else if ((dj[2] > dk))
793665 then "C"
794- else if ((dZ[3] > ea))
666+ else if ((dj[3] > dk))
795667 then "D"
796- else if ((dZ[4] > ea))
668+ else if ((dj[4] > dk))
797669 then "E"
798670 else "F"
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 = {
808- let bL = [1, 2, 3, 4, 5]
809- let bM = size(bL)
810- let bN = $Tuple2("", (ed / co))
811- func bO (bP,bQ) = if ((bQ >= bM))
812- then bP
813- else eg(bP, bL[bQ])
814-
815- func bR (bP,bQ) = if ((bQ >= bM))
816- then bP
671+ dl
672+ }
673+
674+
675+func dm (dn,do) = {
676+ let dp = dh[do]
677+ func dq (ce,cf) = $Tuple2((((((ce._1 + di(ce._2, dp)) + di((ce._2 / bz), dp)) + di((ce._2 / bA), dp)) + di((ce._2 / bB), dp)) + di((ce._2 / bC), dp)), (ce._2 / bD))
678+
679+ let dr = {
680+ let ao = [1, 2, 3, 4, 5]
681+ let ap = size(ao)
682+ let aq = $Tuple2("", (dn / by))
683+ func ar (as,at) = if ((at >= ap))
684+ then as
685+ else dq(as, ao[at])
686+
687+ func au (as,at) = if ((at >= ap))
688+ then as
817689 else throw("List size exceeds 5")
818690
819- bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
691+ au(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5)
820692 }
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) = {
846- let aD = bI._1
847- let es = am(aD)
848- let et = (((parseIntValue(bJ) + es) - 1) / es)
849- $Tuple2((aD + 1), (bI._2 + (et * i)))
693+ dr._1
694+ }
695+
696+
697+func ds (dt) = {
698+ let du = split(valueOrElse(getString(dt), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
699+[toString(valueOrElse(parseInt(du[y]), 0)), if ((size(split(du[z], "_")) == d))
700+ then du[z]
701+ else "0_0_0_0_0_0", if ((size(split(du[A], "_")) == d))
702+ then du[A]
703+ else "0_0_0_0_0_0", du[B]]
704+ }
705+
706+
707+func dv (dw) = {
708+ let cy = split(dw, "_")
709+ ((g * (parseIntValue(cy[1]) + 1)) * parseIntValue(cy[0]))
710+ }
711+
712+
713+func dx (dy) = {
714+ let dz = dy[s]
715+ func dA (ce,cv) = (ce + parseIntValue(cv))
716+
717+ func dB (ce,cv) = {
718+ let aV = ce._1
719+ let dC = C(aV)
720+ let dD = (((parseIntValue(cv) + dC) - 1) / dC)
721+ $Tuple2((aV + 1), (ce._2 + (dD * aC)))
850722 }
851723
852- let eu = {
853- let bL = split(eo[aa], "_")
854- let bM = size(bL)
855- let bN = 0
856- func bO (bP,bQ) = if ((bQ >= bM))
857- then bP
858- else eq(bP, bL[bQ])
859-
860- func bR (bP,bQ) = if ((bQ >= bM))
861- then bP
724+ let dE = {
725+ let ao = split(dy[q], "_")
726+ let ap = size(ao)
727+ let aq = 0
728+ func ar (as,at) = if ((at >= ap))
729+ then as
730+ else dA(as, ao[at])
731+
732+ func au (as,at) = if ((at >= ap))
733+ then as
862734 else throw("List size exceeds 6")
863735
864- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
736+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
865737 }
866- let ev = {
867- let bL = split(eo[ab], "_")
868- let bM = size(bL)
869- let bN = 0
870- func bX (bP,bQ) = if ((bQ >= bM))
871- then bP
872- else eq(bP, bL[bQ])
873-
874- func bY (bP,bQ) = if ((bQ >= bM))
875- then bP
738+ let dF = {
739+ let ao = split(dy[r], "_")
740+ let ap = size(ao)
741+ let aq = 0
742+ func dG (as,at) = if ((at >= ap))
743+ then as
744+ else dA(as, ao[at])
745+
746+ func dH (as,at) = if ((at >= ap))
747+ then as
876748 else throw("List size exceeds 6")
877749
878- bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
750+ dH(dG(dG(dG(dG(dG(dG(aq, 0), 1), 2), 3), 4), 5), 6)
879751 }
880- let ew = if ((ep == ""))
752+ let dI = if ((dz == ""))
881753 then 0
882- else ( let bL = split_4C(ep, "_")
883- let bM = size(bL)
884- let bN = $Tuple2(0, 0)
885- func ex (bP,bQ) = if ((bQ >= bM))
886- then bP
887- else er(bP, bL[bQ])
888-
889- func ey (bP,bQ) = if ((bQ >= bM))
890- then bP
754+ else ( let ao = split_4C(dz, "_")
755+ let ap = size(ao)
756+ let aq = $Tuple2(0, 0)
757+ func dJ (as,at) = if ((at >= ap))
758+ then as
759+ else dB(as, ao[at])
760+
761+ func dK (as,at) = if ((at >= ap))
762+ then as
891763 else throw("List size exceeds 50")
892764
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))
765+ dK(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(aq, 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
766+ ((dE + dF) + dI)
767+ }
768+
769+
770+func dL (dM,dN,dO) = {
771+ let dw = ((toString(dN) + "_") + toString(dO))
772+ let dP = dv(dw)
773+ let dQ = valueOrElse(getString(dM), (dw + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
774+ let dR = split_4C(dQ, ":")
775+ let dS = dx(dR)
776+ let dT = if ((5 > size(dR)))
777+ then makeString(["0", toString(dS), toString((dP - dS)), toString(dP)], "_")
778+ else {
779+ let dU = split(dR[t], "_")
780+ let dV = parseIntValue(dU[u])
781+ let dW = if ((size(dU) > 1))
782+ then parseIntValue(dU[v])
783+ else dS
784+ makeString([toString(dV), toString(dW), toString(((dP - dV) - dW)), toString(dP)], "_")
785+ }
786+[dR[p], if ((size(split(dR[q], "_")) == d))
787+ then dR[q]
788+ else "0_0_0_0_0_0", if ((size(split(dR[r], "_")) == d))
789+ then dR[r]
790+ else "0_0_0_0_0_0", dR[s], dT]
791+ }
792+
793+
794+func dX (dy) = {
795+ let dY = dx(dy)
796+ let dZ = parseIntValue(split(dy[t], "_")[u])
797+ ((dv(dy[p]) - dY) - dZ)
798+ }
799+
800+
801+func ea (eb,dC) = {
802+ let dD = if ((eb >= 0))
803+ then (((eb + dC) - 1) / dC)
804+ else -((((-(eb) + dC) - 1) / dC))
805+ (dD * aC)
806+ }
807+
808+
809+func ec (ed,dy,ee) = if ((size(ed) != 3))
938810 then throw("cargoListStr should contain exactly 2 ':' separators")
939811 else {
940- let eT = split(eR[0], "_")
941- let eU = split(eR[1], "_")
942- let eV = if ((eR[2] == ""))
812+ let ef = split(ed[0], "_")
813+ let eg = split(ed[1], "_")
814+ let eh = if ((ed[2] == ""))
943815 then nil
944- else split(eR[2], "_")
945- if ((size(eT) != n))
816+ else split(ed[2], "_")
817+ if ((size(ef) != d))
946818 then throw("All 6 resources should be passed")
947- else if ((size(eU) != n))
819+ else if ((size(eg) != d))
948820 then throw("All 6 materials should be passed")
949821 else {
950- let dP = eL(eo)
951- let eW = split(eo[aa], "_")
952- let eX = split(eo[ab], "_")
953- let eY = if ((eo[ac] == ""))
822+ let cZ = dX(dy)
823+ let ei = split(dy[q], "_")
824+ let ej = split(dy[r], "_")
825+ let ek = if ((dy[s] == ""))
954826 then nil
955- else split(eo[ac], "_")
956- let dN = split(eS[aj], "_")
957- let eZ = split(eS[ak], "_")
958- let fa = if ((eS[al] == ""))
827+ else split(dy[s], "_")
828+ let cX = split(ee[z], "_")
829+ let el = split(ee[A], "_")
830+ let em = if ((ee[B] == ""))
959831 then nil
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))
832+ else split(ee[B], "_")
833+ func en (ce,cv) = {
834+ let cK = ce._1
835+ let eo = parseIntValue(cv)
836+ let ep = parseIntValue(ei[cK])
837+ let eq = parseIntValue(cX[cK])
838+ if ((eo == 0))
839+ then $Tuple4((cK + 1), (ce._2 :+ ei[cK]), (ce._3 :+ cX[cK]), ce._4)
840+ else if ((eo > 0))
841+ then if ((eo > eq))
842+ then throw((((("Attempt to take " + cv) + " from backpack, but only ") + toString(eq)) + " available"))
843+ else $Tuple4((cK + 1), (ce._2 :+ toString((ep + eo))), (ce._3 :+ toString((eq - eo))), (ce._4 + eo))
844+ else if ((-(eo) > ep))
845+ then throw((((("Attempt to take " + toString(-(eo))) + " from warehouse, but only ") + toString(ep)) + " available"))
846+ else $Tuple4((cK + 1), (ce._2 :+ toString((ep + eo))), (ce._3 :+ toString((eq - eo))), (ce._4 + eo))
975847 }
976848
977- let da = {
978- let bL = eT
979- let bM = size(bL)
980- let bN = $Tuple4(0, nil, nil, 0)
981- func bO (bP,bQ) = if ((bQ >= bM))
982- then bP
983- else fb(bP, bL[bQ])
984-
985- func bR (bP,bQ) = if ((bQ >= bM))
986- then bP
849+ let ci = {
850+ let ao = ef
851+ let ap = size(ao)
852+ let aq = $Tuple4(0, nil, nil, 0)
853+ func ar (as,at) = if ((at >= ap))
854+ then as
855+ else en(as, ao[at])
856+
857+ func au (as,at) = if ((at >= ap))
858+ then as
987859 else throw("List size exceeds 6")
988860
989- bR(bO(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5), 6)
861+ au(ar(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5), 6)
990862 }
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))
863+ func er (ce,cv) = {
864+ let cK = ce._1
865+ let eo = parseIntValue(cv)
866+ let es = parseIntValue(ej[cK])
867+ let et = parseIntValue(el[cK])
868+ if ((eo == 0))
869+ then $Tuple4((cK + 1), (ce._2 :+ ej[cK]), (ce._3 :+ el[cK]), ce._4)
870+ else if ((eo > 0))
871+ then if ((eo > et))
872+ then throw((((("Attempt to take " + cv) + " from backpack, but only ") + toString(et)) + " available"))
873+ else $Tuple4((cK + 1), (ce._2 :+ toString((es + eo))), (ce._3 :+ toString((et - eo))), (ce._4 + eo))
874+ else if ((-(eo) > es))
875+ then throw((((("Attempt to take " + toString(-(eo))) + " from warehouse, but only ") + toString(es)) + " available"))
876+ else $Tuple4((cK + 1), (ce._2 :+ toString((es + eo))), (ce._3 :+ toString((et - eo))), (ce._4 + eo))
1005877 }
1006878
1007- let fi = {
1008- let bL = eU
1009- let bM = size(bL)
1010- let bN = $Tuple4(0, nil, nil, da._4)
1011- func bX (bP,bQ) = if ((bQ >= bM))
1012- then bP
1013- else ff(bP, bL[bQ])
1014-
1015- func bY (bP,bQ) = if ((bQ >= bM))
1016- then bP
879+ let eu = {
880+ let ao = eg
881+ let ap = size(ao)
882+ let aq = $Tuple4(0, nil, nil, ci._4)
883+ func dG (as,at) = if ((at >= ap))
884+ then as
885+ else er(as, ao[at])
886+
887+ func dH (as,at) = if ((at >= ap))
888+ then as
1017889 else throw("List size exceeds 6")
1018890
1019- bY(bX(bX(bX(bX(bX(bX(bN, 0), 1), 2), 3), 4), 5), 6)
891+ dH(dG(dG(dG(dG(dG(dG(aq, 0), 1), 2), 3), 4), 5), 6)
1020892 }
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])
893+ func ev (ce,cv) = {
894+ let cK = ce._1
895+ let dC = C(cK)
896+ let eo = parseIntValue(cv)
897+ let ew = if ((size(ek) > cK))
898+ then parseIntValue(ek[cK])
1027899 else 0
1028- let fl = if ((size(fa) > dB))
1029- then parseIntValue(fa[dB])
900+ let ex = if ((size(em) > cK))
901+ then parseIntValue(em[cK])
1030902 else 0
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"))
903+ if ((eo == 0))
904+ then $Tuple4((cK + 1), (ce._2 :+ toString(ew)), (ce._3 :+ toString(ex)), ce._4)
905+ else if ((eo > 0))
906+ then if ((eo > ex))
907+ then throw((((("Attempt to take " + cv) + " from backpack, but only ") + toString(ex)) + " available"))
1036908 else {
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))
909+ let ey = (ea((ew + eo), dC) - ea(ew, dC))
910+ $Tuple4((cK + 1), (ce._2 :+ toString((ew + eo))), (ce._3 :+ toString((ex - eo))), (ce._4 + ey))
1039911 }
1040- else if ((-(fc) > fk))
1041- then throw((((("Attempt to take " + toString(-(fc))) + " from warehouse, but only ") + toString(fk)) + " available"))
912+ else if ((-(eo) > ew))
913+ then throw((((("Attempt to take " + toString(-(eo))) + " from warehouse, but only ") + toString(ew)) + " available"))
1042914 else {
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))
915+ let ey = (ea((ew + eo), dC) - ea(ew, dC))
916+ $Tuple4((cK + 1), (ce._2 :+ toString((ew + eo))), (ce._3 :+ toString((ex - eo))), (ce._4 + ey))
1045917 }
1046918 }
1047919
1048- let ek = if ((size(eV) != 0))
920+ let du = if ((size(eh) != 0))
1049921 then {
1050- let bL = eV
1051- let bM = size(bL)
1052- let bN = $Tuple4(0, nil, nil, fi._4)
1053- func ex (bP,bQ) = if ((bQ >= bM))
1054- then bP
1055- else fj(bP, bL[bQ])
1056-
1057- func ey (bP,bQ) = if ((bQ >= bM))
1058- then bP
922+ let ao = eh
923+ let ap = size(ao)
924+ let aq = $Tuple4(0, nil, nil, eu._4)
925+ func dJ (as,at) = if ((at >= ap))
926+ then as
927+ else ev(as, ao[at])
928+
929+ func dK (as,at) = if ((at >= ap))
930+ then as
1059931 else throw("List size exceeds 50")
1060932
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)
933+ dK(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(dJ(aq, 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)
1062934 }
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)
935+ else $Tuple4(0, ek, em, eu._4)
936+ let ez = du._4
937+ if ((ez > cZ))
938+ then throw((((("Attempt to put total " + toString(ez)) + " stuff, but only ") + toString(cZ)) + " warehouse space left"))
939+ else $Tuple7(makeString(ci._2, "_"), makeString(eu._2, "_"), makeString(du._2, "_"), makeString(ci._3, "_"), makeString(eu._3, "_"), makeString(du._3, "_"), ez)
1068940 }
1069941 }
1070942
1071943
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)))
944+func eA (eB,eC) = {
945+ let af = toString(eB)
946+ let eD = df(toBigInt(eC))
947+ let eE = valueOrElse(getInteger(bF()), (bE + 1))
948+ let bH = toString(eE)
949+ let do = toInt((eD % by))
950+ let cN = dm(eD, do)
951+ let eF = m[do]
952+ let eG = Issue(bX(bH, "S"), makeString([bH, "S", cN, eF], "_"), 1, 0, false)
953+ let H = calculateAssetId(eG)
954+ let eH = toBase58String(H)
955+ $Tuple2([IntegerEntry(bF(), (eE + 1)), eG, StringEntry(bG(bH), eH), StringEntry(G(eH), af), StringEntry(bM(bH), af), IntegerEntry(K(eH), 0), IntegerEntry(bK(eH, af), 0), ScriptTransfer(eB, 1, H)], $Tuple2(eH, eF))
956+ }
957+
958+
959+func eI (af,eJ,eK) = if (!(sigVerify_8Kb(eJ, eK, bq)))
1088960 then throw("signature does not match")
1089961 else {
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)))
962+ let cy = split(toUtf8String(eJ), ";")
963+ let eL = split(cy[0], "|")
964+ let eM = split(eL[bT], "_")
965+ let eN = parseIntValue(eM[0])
966+ let eO = parseIntValue(eM[1])
967+ let eP = split(cy[1], ":")
968+ let eQ = eP[0]
969+ let eR = parseIntValue(eL[bU])
970+ if (if ((eR > (lastBlock.timestamp + bs)))
1099971 then true
1100- else ((lastBlock.timestamp - ci) > fF))
1101- then throw(((("signature outdated: logTime=" + toString(fF)) + ", bcTime=") + toString(lastBlock.timestamp)))
972+ else ((lastBlock.timestamp - bs) > eR))
973+ then throw(((("signature outdated: logTime=" + toString(eR)) + ", bcTime=") + toString(lastBlock.timestamp)))
1102974 else {
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))
975+ let eS = eP[1]
976+ let eT = valueOrElse(getString(E(af)), "")
977+ if ((eT != eS))
978+ then throw(((("Tx ids don't match! In state: " + eT) + ", in msg: ") + eS))
1107979 else {
1108- let bg = valueOrErrorMessage(getString(be(bm)), "You don't have a duck staked")
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))
980+ let aa = valueOrErrorMessage(getString(Y(af)), "You don't have a duck staked")
981+ let eU = ac(aa)
982+ let eV = valueOrElse(getInteger(eU), 100)
983+ if ((eV != eN))
984+ then throw(((("oldHealth=" + toString(valueOrElse(getInteger(eU), 100))) + " from state does not match one from flight log=") + toString(eN)))
985+ else if ((0 >= eN))
1114986 then throw("You can't fly with zero health")
1115987 else {
1116- let fK = if ((size(fz) > cP))
1117- then fz[cP]
988+ let eW = if ((size(eL) > bV))
989+ then eL[bV]
1118990 else ""
1119- let fL = if ((size(fz) > cQ))
1120- then fz[cQ]
991+ let eX = if ((size(eL) > bW))
992+ then eL[bW]
1121993 else ""
1122- let fM = if (if ((fC > 0))
1123- then (fK == "$")
994+ let eY = if (if ((eO > 0))
995+ then (eW == "$")
1124996 else false)
1125- then bv(invoke(aE, "sendUsdtPrize", [bm], nil))
997+ then bk(invoke(aW, "sendUsdtPrize", [af], nil))
1126998 else 0
1127- $Tuple5(fC, bg, fM, fE, fL)
999+ $Tuple5(eO, aa, eY, eQ, eX)
11281000 }
11291001 }
11301002 }
11311003 }
11321004
11331005
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)), ""))
1165- else {
1166- let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
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
1175- let bW = value(assetInfo(fromBase58String(aW)))
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))
1180- then throw((k + " is not yours"))
1181- else {
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))
1006+func eZ (eB,eC,eJ,eK) = {
1007+ let af = toString(eB)
1008+ let dp = eI(af, eJ, eK)
1009+ let eU = ac(dp._2)
1010+ let dt = Z(dp._2)
1011+ let ee = ds(dt)
1012+ let fa = split(ee[A], "_")
1013+ let fb = makeString(cj(true, fa, bw), "_")
1014+ let cD = cq(ee[B], dp._5)
1015+ if ((0 >= dp._1))
1016+ then $Tuple3([IntegerEntry(eU, 0), StringEntry(dt, makeString([ee[y], ee[z], ee[A], cD], ":"))], "", 0)
1017+ else {
1018+ let fc = eA(eB, eC)
1019+ let eH = fc._2._1
1020+ $Tuple3((((fc._1 :+ StringEntry(ab(dp._2), makeString([fc._2._2, "L", eH], "_"))) :+ IntegerEntry(eU, dp._1)) :+ StringEntry(dt, makeString([ee[y], ee[z], fb, cD], ":"))), eH, dp._3)
1021+ }
1022+ }
1023+
1024+
1025+func fd (R,fe) = {
1026+ let dO = valueOrElse(getInteger(K(R)), 0)
1027+ let ff = valueOrElse(getInteger(L(c, R)), 0)
1028+ let fg = (dO / 6)
1029+ let fh = (dO / 7)
1030+ ((e + fraction(e, ((dO + fg) + (2 * fh)), 5)) + fraction(e, ff, (fe * 5)))
1031+ }
1032+
1033+
1034+func fi (F,fj,fk) = {
1035+ let fl = if ((fj == bQ))
1036+ then $Tuple2(fk, valueOrElse(getString(Y(F)), ""))
1037+ else {
1038+ let aa = valueOrErrorMessage(getString(Y(F)), "You don't have a duck staked")
1039+ let fm = valueOrElse(getString(ab(aa)), h)
1040+ let fn = split(value(fm), "_")
1041+ if ((fn[ah] != "L"))
1042+ then throw((("Duck location type is " + fn[ah]) + ", but should be L"))
1043+ else $Tuple2(fn[ai], aa)
1044+ }
1045+ let R = fl._1
1046+ let fo = fl._2
1047+ let fp = value(assetInfo(fromBase58String(R)))
1048+ let fq = J(R)
1049+ let fr = valueOrErrorMessage(getInteger(fq), (("Land " + fp.name) + " is not staked"))
1050+ let fs = valueOrErrorMessage(getString(G(R)), (("NFT " + fp.name) + " is orphaned"))
1051+ if ((fs != F))
1052+ then throw((a + " is not yours"))
1053+ else {
1054+ let ft = split(fp.description, "_")
1055+ $Tuple4(fo, R, ft, fr)
1056+ }
1057+ }
1058+
1059+
1060+func fu (F,eb,fj,fk) = if ((0 > eb))
11891061 then throw("Negative amount")
11901062 else {
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)))
1063+ let fv = fi(F, fj, fk)
1064+ let bn = fv._3[bc]
1065+ let cG = cM(fv._3[bd])
1066+ let cQ = (lastBlock.timestamp - fv._4)
1067+ if ((0 > cQ))
1068+ then throw(((("Saved timestamp is in future, saved = " + toString(fv._4)) + ", current = ") + toString(lastBlock.timestamp)))
11971069 else {
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)))
1070+ let fe = bm(bn)
1071+ let fw = fd(fv._2, fe)
1072+ let fx = fraction(cQ, (fw * fe), f)
1073+ if ((eb > fx))
1074+ then throw(((("Not enough resources, available = " + toString(fx)) + ", requested = ") + toString(eb)))
12031075 else {
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)
1076+ let fy = fraction((fx - eb), f, (fw * fe))
1077+ let fz = (lastBlock.timestamp - fy)
1078+ let dN = (fe / aD)
1079+ let cY = cU(cG, (cQ - fy), dN, fw)
1080+ let dM = Q(fv._2)
1081+ let dO = valueOrElse(getInteger(K(fv._2)), 0)
1082+ let dy = dL(dM, dN, dO)
1083+ let dU = split(dy[t], "_")
1084+ let cZ = parseIntValue(dU[w])
1085+ if (if ((fj == bQ))
1086+ then (eb > cZ)
12151087 else false)
1216- then throw((("Only " + toString(dP)) + " space left in warehouse"))
1088+ then throw((("Only " + toString(cZ)) + " space left in warehouse"))
12171089 else {
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]))
1090+ let dt = Z(fv._1)
1091+ let ee = ds(dt)
1092+ let cX = split(ee[z], "_")
1093+ let cW = split(dy[q], "_")
1094+ let fA = if ((fj == bQ))
1095+ then $Tuple4(cO(cW, cG, (cQ - fy), dN, fw), ee[z], (parseIntValue(dU[v]) + cY._2), (parseIntValue(dU[w]) - cY._2))
1096+ else if ((fj == bR))
1097+ then $Tuple4(dy[q], cO(cX, cG, (cQ - fy), dN, fw), parseIntValue(dU[v]), parseIntValue(dU[w]))
12261098 else {
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))
1099+ let fB = cV(cW, cX, cY, cZ)
1100+ let fC = min([parseIntValue(dU[w]), cY._2])
1101+ $Tuple4(fB._1, fB._2, (parseIntValue(dU[v]) + fC), (parseIntValue(dU[w]) - fC))
12301102 }
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]], "_")])
1103+ let fD = fA._1
1104+ let fE = fA._2
1105+ let fF = fA._3
1106+ let fG = fA._4
1107+ $Tuple5([IntegerEntry(J(fv._2), fz), IntegerEntry(N(a, fv._2, F), fz)], dt, [ee[y], fE, ee[A], ee[B]], dM, [dy[p], fD, dy[r], dy[s], makeString([dU[u], toString(fF), toString(fG), dU[x]], "_")])
12361108 }
12371109 }
12381110 }
12391111 }
12401112
12411113
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))
1114+func fH (F,R,fe,fj) = {
1115+ let fq = J(R)
1116+ let fr = value(getInteger(fq))
1117+ let fx = (fraction((lastBlock.timestamp - fr), fd(R, fe), f) * fe)
1118+ fu(F, fx, fj, R)
1119+ }
1120+
1121+
1122+func fI (ck,eB,fJ,R) = {
1123+ let F = toString(eB)
1124+ let fv = fi(F, bS, R)
1125+ let fe = bm(fv._3[bc])
1126+ let fK = K(fv._2)
1127+ let fL = valueOrElse(getInteger(fK), 0)
1128+ if ((fL >= 3))
12571129 then throw("Currently max infrastructure level = 3")
12581130 else {
1259- let gz = (gy + 1)
1260- let gA = fraction(cl, (fS * gz), o)
1261- if (if (!(dc))
1262- then (gw != gA)
1131+ let fM = (fL + 1)
1132+ let fN = fraction(bv, (fe * fM), aD)
1133+ if (if (!(ck))
1134+ then (fJ != fN)
12631135 else false)
1264- then throw(("Payment attached should be " + toString(gA)))
1136+ then throw(("Payment attached should be " + toString(fN)))
12651137 else {
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)
1138+ let dt = Z(fv._1)
1139+ let ee = ds(dt)
1140+ let fa = split(ee[A], "_")
1141+ let fb = makeString(cj(ck, fa, fraction(az, (fe * fM), aD)), "_")
1142+ let fO = fH(F, fv._2, fe, bS)
1143+ let fP = fO._5
1144+ let fQ = dv(fP[p])
1145+ let fR = makeString([split(fP[p], "_")[0], toString(fM)], "_")
1146+ let fS = dv(fR)
1147+ let dU = split(fP[t], "_")
1148+ let fT = makeString([dU[u], dU[v], toString(((parseIntValue(dU[w]) + fS) - fQ)), toString(fS)], "_")
1149+ $Tuple2(([IntegerEntry(fK, fM), IntegerEntry(bK(fv._2, F), fM), StringEntry(dt, makeString([ee[y], fO._3[z], fb, ee[B]], ":")), StringEntry(fO._4, makeString([fR, fP[q], fP[r], fP[s], fT], ":"))] ++ fO._1), fM)
12781150 }
12791151 }
12801152 }
12811153
12821154
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))
1155+func fU (F,fk) = {
1156+ let fv = fi(F, bS, fk)
1157+ let R = fv._2
1158+ let fe = bm(fv._3[bc])
1159+ let fV = L(c, R)
1160+ if ((valueOrElse(getInteger(fV), 0) > 0))
12921161 then throw("Presale artifact is already activated")
1293- else if ((parseIntValue(gi._3[V]) > cu))
1294- then throw((((k + " ") + aW) + " is not eligible for presale artifact"))
1162+ else if ((parseIntValue(fv._3[bb]) > bE))
1163+ then throw((((a + " ") + R) + " is not eligible for presale artifact"))
12951164 else {
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, ":")))
1165+ let fO = fH(F, R, fe, bS)
1166+ ((((fO._1 :+ IntegerEntry(fV, fe)) :+ IntegerEntry(bL(c, R, F), fe)) :+ StringEntry(fO._2, makeString(fO._3, ":"))) :+ StringEntry(fO._4, makeString(fO._5, ":")))
12981167 }
12991168 }
13001169
13011170
1302-func gK (gL,gz,gM,aK,gN,fq,gO) = {
1303- let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1304- func gP (bI,aW) = {
1305- let bW = value(assetInfo(fromBase58String(aW)))
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))
1310- then throw((k + " is not yours"))
1171+func fW (fX,fM,fY,F,fZ,eC,ga) = {
1172+ let aa = valueOrErrorMessage(getString(Y(F)), "You don't have a duck staked")
1173+ func gb (ce,R) = {
1174+ let fp = value(assetInfo(fromBase58String(R)))
1175+ let fq = J(R)
1176+ let fr = valueOrErrorMessage(getInteger(fq), (("NFT " + fp.name) + " is not staked"))
1177+ let fs = valueOrErrorMessage(getString(G(R)), (("NFT " + fp.name) + " is orphaned"))
1178+ if ((fs != F))
1179+ then throw((a + " is not yours"))
13111180 else {
1312- let gg = split(bW.description, "_")
1313- let ft = gg[Y]
1314- if (if ((bI._3 != ""))
1315- then (bI._3 != ft)
1181+ let ft = split(fp.description, "_")
1182+ let eF = ft[be]
1183+ if (if ((ce._3 != ""))
1184+ then (ce._3 != eF)
13161185 else false)
13171186 then throw("Lands should be on the same continent to merge")
13181187 else {
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 = {
1327- let c = bB
1328- if (("S" == c))
1188+ let bn = ft[bc]
1189+ let gc = ce._1
1190+ let cK = valueOrErrorMessage(indexOf(gc, bn), "You haven't passed all the lands needed")
1191+ let gd = (take(gc, cK) + drop(gc, (cK + 1)))
1192+ let fe = bm(bn)
1193+ let ge = (ce._2 + valueOrElse(getInteger(L(c, R)), 0))
1194+ let dO = valueOrElse(getInteger(K(R)), 0)
1195+ let gf = {
1196+ let ax = bn
1197+ if (("S" == ax))
13291198 then 3
1330- else if (("M" == c))
1199+ else if (("M" == ax))
13311200 then 4
1332- else if (("L" == c))
1201+ else if (("L" == ax))
13331202 then 5
1334- else if (("XL" == c))
1203+ else if (("XL" == ax))
13351204 then 6
13361205 else throw("Only S, M, L, XL can merge")
13371206 }
1338- if ((eC != gT))
1207+ if ((dO != gf))
13391208 then throw("All lands should be maxed to merge")
13401209 else {
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)))
1210+ let bH = ft[bb]
1211+ let cG = cM(ft[bd])
1212+ let cQ = (lastBlock.timestamp - fr)
1213+ if ((0 > cQ))
1214+ then throw(((("Saved timestamp is in future, saved = " + toString(fr)) + ", current = ") + toString(lastBlock.timestamp)))
13461215 else {
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)
1351- let bU = bI._7
1352- let aD = indexOf(bU, aW)
1353- if (!(isDefined(aD)))
1354- then throw(("Your staked lands don't contain " + aW))
1216+ let fw = fd(R, fe)
1217+ let dN = (fe / aD)
1218+ let fE = cO(split(ce._4, "_"), cG, cQ, dN, fw)
1219+ let ch = cE(split(ce._6, "_"), cG, dN, -1)
1220+ let gg = ce._7
1221+ let aV = indexOf(gg, R)
1222+ if (!(isDefined(aV)))
1223+ then throw(("Your staked lands don't contain " + R))
13551224 else {
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))
1225+ let gh = I(R)
1226+ let gi = valueOrElse(getString(gh), "")
1227+ $Tuple8(gd, ge, eF, fE, (((((((((((((ce._5 :+ DeleteEntry(J(R))) :+ DeleteEntry(N(a, R, F))) :+ DeleteEntry(bG(bH))) :+ DeleteEntry(G(R))) :+ DeleteEntry(K(R))) :+ DeleteEntry(bK(R, F))) :+ DeleteEntry(L(c, R))) :+ DeleteEntry(bL(c, R, F))) :+ DeleteEntry(bM(bH))) :+ DeleteEntry(Q(R))) :+ DeleteEntry(gh)) :+ DeleteEntry(bI(gi))) :+ Burn(fromBase58String(R), 1)), ch, removeByIndex(gg, value(aV)), (ce._8 + fe))
13591228 }
13601229 }
13611230 }
13621231 }
13631232 }
13641233 }
13651234
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))
1372- then split_51C(value(bT), "_")
1235+ let dt = Z(aa)
1236+ let ee = ds(dt)
1237+ let gj = valueOrElse(getString(bf()), "0_0_0_0_0_0")
1238+ let gk = bg(F)
1239+ let gl = getString(gk)
1240+ let gm = if (isDefined(gl))
1241+ then split_51C(value(gl), "_")
13731242 else nil
1374- let da = {
1375- let bL = gN
1376- let bM = size(bL)
1377- let bN = $Tuple8(gM, 0, "", eS[aj], nil, gW, gY, 0)
1378- func bO (bP,bQ) = if ((bQ >= bM))
1379- then bP
1380- else gP(bP, bL[bQ])
1381-
1382- func bR (bP,bQ) = if ((bQ >= bM))
1383- then bP
1243+ let ci = {
1244+ let ao = fZ
1245+ let ap = size(ao)
1246+ let aq = $Tuple8(fY, 0, "", ee[z], nil, gj, gm, 0)
1247+ func ar (as,at) = if ((at >= ap))
1248+ then as
1249+ else gb(as, ao[at])
1250+
1251+ func au (as,at) = if ((at >= ap))
1252+ then as
13841253 else throw("List size exceeds 5")
13851254
1386- bR(bO(bO(bO(bO(bO(bN, 0), 1), 2), 3), 4), 5)
1255+ au(ar(ar(ar(ar(ar(aq, 0), 1), 2), 3), 4), 5)
13871256 }
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))
1257+ let eF = ci._3
1258+ let do = valueOrErrorMessage(indexOf(m, eF), ("Unknown continent: " + eF))
1259+ let cN = dm(df(toBigInt(eC)), do)
1260+ let eE = valueOrElse(getInteger(bF()), (bE + 1))
1261+ let gn = toString(eE)
1262+ let eG = Issue(bX(gn, fX), makeString([gn, fX, cN, eF], "_"), 1, 0, false)
1263+ let H = calculateAssetId(eG)
1264+ let go = toBase58String(H)
1265+ let fb = makeString(cj((ga > 0), split(ee[A], "_"), ga), "_")
1266+ let gp = S(F)
1267+ let gq = valueOrElse(getInteger(gp), 0)
1268+ $Tuple2((((((((((((((((ci._5 :+ (if ((size(ci._7) > 0))
1269+ then StringEntry(gk, makeString_11C(ci._7, "_"))
1270+ else DeleteEntry(gk))) :+ IntegerEntry(gp, if ((ci._8 > gq))
14021271 then 0
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)
1272+ else (gq - ci._8))) :+ IntegerEntry(bF(), (eE + 1))) :+ eG) :+ StringEntry(bG(gn), go)) :+ StringEntry(G(go), F)) :+ StringEntry(bM(gn), F)) :+ IntegerEntry(L(c, go), ci._2)) :+ IntegerEntry(bL(c, go, F), ci._2)) :+ IntegerEntry(K(go), fM)) :+ IntegerEntry(bK(go, F), fM)) :+ StringEntry(dt, makeString([ee[y], ci._4, fb, ee[B]], ":"))) :+ StringEntry(bf(), ci._6)) :+ StringEntry(ab(aa), makeString([eF, "L", go], "_"))) :+ ScriptTransfer(addressFromStringValue(F), 1, H)), go)
1273+ }
1274+
1275+
1276+func gr (F,fZ,eC) = fW("M", 3, "SSSS", F, fZ, eC, 0)
1277+
1278+
1279+func gs (F,fZ,eC,ck,fJ) = {
1280+ let fN = (bv * 4)
1281+ if (if (!(ck))
1282+ then (fJ != fN)
14141283 else false)
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)
1284+ then throw(("Payment attached should be " + toString(fN)))
1285+ else fW("L", 4, "SMM", F, fZ, eC, (az * 4))
1286+ }
1287+
1288+
1289+func gt (F,fZ,eC,ck,fJ) = {
1290+ let fN = (bv * 47)
1291+ if (if (!(ck))
1292+ then (fJ != fN)
14241293 else false)
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)
1294+ then throw(("Payment attached should be " + toString(fN)))
1295+ else fW("XL", 5, "SSSML", F, fZ, eC, (az * 47))
1296+ }
1297+
1298+
1299+func gu (F,fZ,eC,ck,fJ) = {
1300+ let fN = (bv * 54)
1301+ if (if (!(ck))
1302+ then (fJ != fN)
14341303 else false)
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)
1443- if ((4 == c))
1444- then hd(aK, gN, fq)
1445- else if ((3 == c))
1446- then he(aK, gN, fq, dc, gw)
1447- else if ((5 == c))
1448- then hf(aK, gN, fq, dc, gw)
1449- else if ((2 == c))
1450- then hg(aK, gN, fq, dc, gw)
1304+ then throw(("Payment attached should be " + toString(fN)))
1305+ else fW("XXL", 6, "LXL", F, fZ, eC, (az * 54))
1306+ }
1307+
1308+
1309+func gv (ck,F,fJ,fZ,eC) = {
1310+ let gw = {
1311+ let ax = size(fZ)
1312+ if ((4 == ax))
1313+ then gr(F, fZ, eC)
1314+ else if ((3 == ax))
1315+ then gs(F, fZ, eC, ck, fJ)
1316+ else if ((5 == ax))
1317+ then gt(F, fZ, eC, ck, fJ)
1318+ else if ((2 == ax))
1319+ then gu(F, fZ, eC, ck, fJ)
14511320 else throw("Unknown merge")
14521321 }
1453- hi
1454- }
1455-
1456-
1457-func hj (dB) = if (if ((dB.originCaller != aE))
1458- then valueOrElse(getBoolean(bk()), false)
1322+ gw
1323+ }
1324+
1325+
1326+func gx (cK) = if (if ((cK.originCaller != aW))
1327+ then valueOrElse(getBoolean(ad()), false)
14591328 else false)
14601329 then throw("Contracts are under maintenance")
1461- else StringEntry(aJ(toString(dB.originCaller)), toBase58String(dB.transactionId))
1462-
1463-
1464-@Callable(dB)
1465-func constructorV1 (hk) = if ((dB.caller != this))
1330+ else StringEntry(E(toString(cK.originCaller)), toBase58String(cK.transactionId))
1331+
1332+
1333+@Callable(cK)
1334+func constructorV1 (gy) = if ((cK.caller != this))
14661335 then throw("Permission denied")
1467- else [StringEntry(ay(), hk)]
1468-
1469-
1470-
1471-@Callable(dB)
1472-func setBlocked (hl) = if ((dB.caller != this))
1336+ else [StringEntry(aQ(), gy)]
1337+
1338+
1339+
1340+@Callable(cK)
1341+func setBlocked (gz) = if ((cK.caller != this))
14731342 then throw("permission denied")
1474- else [BooleanEntry(bk(), hl)]
1475-
1476-
1477-
1478-@Callable(dB)
1343+ else [BooleanEntry(ad(), gz)]
1344+
1345+
1346+
1347+@Callable(cK)
14791348 func stakeLand () = {
1480- let hm = hj(dB)
1481- if ((size(dB.payments) != 1))
1349+ let gA = gx(cK)
1350+ if ((size(cK.payments) != 1))
14821351 then throw("Exactly one payment required")
14831352 else {
1484- let hn = value(dB.payments[0])
1485- let aM = value(hn.assetId)
1486- let ap = toString(dB.caller)
1487- if ((hn.amount != 1))
1488- then throw((("NFT " + k) + " token should be attached as payment"))
1353+ let gB = value(cK.payments[0])
1354+ let H = value(gB.assetId)
1355+ let aJ = toString(cK.caller)
1356+ if ((gB.amount != 1))
1357+ then throw((("NFT " + a) + " token should be attached as payment"))
14891358 else {
1490- let bW = value(assetInfo(aM))
1491- if ((bW.issuer != this))
1359+ let fp = value(assetInfo(H))
1360+ if ((fp.issuer != this))
14921361 then throw("Unknown issuer of token")
1493- else if (!(contains(bW.name, k)))
1494- then throw((("Only NFT " + k) + " tokens are accepted"))
1362+ else if (!(contains(fp.name, a)))
1363+ then throw((("Only NFT " + a) + " tokens are accepted"))
14951364 else {
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)
1502- if (!(isDefined(parseInt(cx))))
1503- then throw(("Cannot parse land number from " + bW.name))
1365+ let gC = drop(fp.name, 4)
1366+ let bH = if (contains(gC, "XXL"))
1367+ then dropRight(gC, 3)
1368+ else if (contains(gC, "XL"))
1369+ then dropRight(gC, 2)
1370+ else dropRight(gC, 1)
1371+ if (!(isDefined(parseInt(bH))))
1372+ then throw(("Cannot parse land number from " + fp.name))
15041373 else {
1505- let aW = toBase58String(aM)
1506- let gd = aO(aW)
1507- if (isDefined(getInteger(gd)))
1508- then throw((("NFT " + bW.name) + " is already staked"))
1374+ let R = toBase58String(H)
1375+ let fq = J(R)
1376+ if (isDefined(getInteger(fq)))
1377+ then throw((("NFT " + fp.name) + " is already staked"))
15091378 else {
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)
1517- let bU = if (isDefined(bT))
1518- then split_51C(value(bT), "_")
1379+ let ft = split(fp.description, "_")
1380+ let cG = cM(ft[bd])
1381+ let fe = bm(ft[bc])
1382+ let ch = cL(cG, (fe / aD), 1)
1383+ let ff = valueOrElse(getInteger(L(c, R)), 0)
1384+ let gk = bg(aJ)
1385+ let gl = getString(gk)
1386+ let gg = if (isDefined(gl))
1387+ then split_51C(value(gl), "_")
15191388 else nil
1520- if (containsElement(bU, aW))
1521- then throw(("Your staked lands already contain " + aW))
1389+ if (containsElement(gg, R))
1390+ then throw(("Your staked lands already contain " + R))
15221391 else {
1523- let eC = valueOrElse(getInteger(aP(aW)), 0)
1524- let hb = aY(ap)
1525- let hp = valueOrElse(getInteger(hb), 0)
1526- let hq = if ((hp == 0))
1527- then bv(invoke(aI, "onStakeLand", [ap], nil))
1392+ let dO = valueOrElse(getInteger(K(R)), 0)
1393+ let gp = S(aJ)
1394+ let gD = valueOrElse(getInteger(gp), 0)
1395+ let gE = if ((gD == 0))
1396+ then bk(invoke(ba, "onStakeLand", [aJ], nil))
15281397 else -1
1529- $Tuple2([IntegerEntry(gd, lastBlock.timestamp), IntegerEntry(aS(k, aW, ap), lastBlock.timestamp), StringEntry(gX, makeString_11C((bU :+ aW), "_")), IntegerEntry(hb, (hp + fS)), StringEntry(aL(aW), ap), StringEntry(cC(cx), ap), IntegerEntry(cB(m, aW, ap), fT), IntegerEntry(cA(aW, ap), eC), StringEntry(bj(), bG), hm], hq)
1398+ $Tuple2([IntegerEntry(fq, lastBlock.timestamp), IntegerEntry(N(a, R, aJ), lastBlock.timestamp), StringEntry(gk, makeString_11C((gg :+ R), "_")), IntegerEntry(gp, (gD + fe)), StringEntry(G(R), aJ), StringEntry(bM(bH), aJ), IntegerEntry(bL(c, R, aJ), ff), IntegerEntry(bK(R, aJ), dO), StringEntry(bf(), ch), gA], gE)
15301399 }
15311400 }
15321401 }
15331402 }
15341403 }
15351404 }
15361405 }
15371406
15381407
15391408
1540-@Callable(dB)
1541-func unstakeLand (fY) = {
1542- let hm = hj(dB)
1543- if ((size(dB.payments) != 0))
1409+@Callable(cK)
1410+func unstakeLand (fk) = {
1411+ let gA = gx(cK)
1412+ if ((size(cK.payments) != 0))
15441413 then throw("No payments required")
15451414 else {
1546- let aK = toString(dB.caller)
1547- let gi = fW(aK, cH, fY)
1548- let aW = gi._2
1549- let gX = aX(aK)
1550- let dx = dD(gi._3[X])
1551- let fS = bA(gi._3[W])
1552- let bG = dC(dx, (fS / o), -1)
1553- let gB = gu(aK, aW, fS, cH)
1554- let bU = split_51C(valueOrElse(getString(gX), ""), "_")
1555- let aD = indexOf(bU, aW)
1556- if (!(isDefined(aD)))
1557- then throw(("Your staked lands don't contain " + aW))
1415+ let F = toString(cK.caller)
1416+ let fv = fi(F, bR, fk)
1417+ let R = fv._2
1418+ let gk = bg(F)
1419+ let cG = cM(fv._3[bd])
1420+ let fe = bm(fv._3[bc])
1421+ let ch = cL(cG, (fe / aD), -1)
1422+ let fO = fH(F, R, fe, bR)
1423+ let gg = split_51C(valueOrElse(getString(gk), ""), "_")
1424+ let aV = indexOf(gg, R)
1425+ if (!(isDefined(aV)))
1426+ then throw(("Your staked lands don't contain " + R))
15581427 else {
1559- let eh = value(blockInfoByHeight(height)).timestamp
1560- let hr = valueOrElse(getInteger(aH, bl(aK)), 0)
1561- if ((hr >= eh))
1562- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(hr)))
1428+ let dr = value(blockInfoByHeight(height)).timestamp
1429+ let gF = valueOrElse(getInteger(aZ, ae(F)), 0)
1430+ if ((gF >= dr))
1431+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(gF)))
15631432 else {
1564- let hb = aY(aK)
1565- let hc = valueOrElse(getInteger(hb), 0)
1566- let hs = if ((fS > hc))
1433+ let gp = S(F)
1434+ let gq = valueOrElse(getInteger(gp), 0)
1435+ let gG = if ((fe > gq))
15671436 then 0
1568- else (hc - fS)
1569- let hq = if ((hs == 0))
1570- then bv(invoke(aI, "onUnstakeLand", [aK], nil))
1437+ else (gq - fe)
1438+ let gE = if ((gG == 0))
1439+ then bk(invoke(ba, "onUnstakeLand", [F], nil))
15711440 else -1
1572- $Tuple2([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))
1573- then StringEntry(gX, makeString_11C(removeByIndex(bU, value(aD)), "_"))
1574- else DeleteEntry(gX), IntegerEntry(hb, hs), hm], hq)
1441+ $Tuple2([ScriptTransfer(cK.caller, 1, fromBase58String(R)), DeleteEntry(J(R)), DeleteEntry(N(a, R, F)), StringEntry(bf(), ch), StringEntry(fO._2, makeString(fO._3, ":")), if ((size(gg) > 1))
1442+ then StringEntry(gk, makeString_11C(removeByIndex(gg, value(aV)), "_"))
1443+ else DeleteEntry(gk), IntegerEntry(gp, gG), gA], gE)
15751444 }
15761445 }
15771446 }
15781447 }
15791448
15801449
15811450
1582-@Callable(dB)
1451+@Callable(cK)
15831452 func stakeDuck () = {
1584- let hm = hj(dB)
1585- if ((size(dB.payments) != 1))
1453+ let gA = gx(cK)
1454+ if ((size(cK.payments) != 1))
15861455 then throw("Exactly one payment required")
15871456 else {
1588- let hn = value(dB.payments[0])
1589- let aM = value(hn.assetId)
1590- let ap = toString(dB.caller)
1591- if ((hn.amount != 1))
1592- then throw((("NFT " + l) + " token should be attached as payment"))
1457+ let gB = value(cK.payments[0])
1458+ let H = value(gB.assetId)
1459+ let aJ = toString(cK.caller)
1460+ if ((gB.amount != 1))
1461+ then throw((("NFT " + b) + " token should be attached as payment"))
15931462 else {
1594- let bW = value(assetInfo(aM))
1595- if (if ((bW.issuer != ce))
1596- then (bW.issuer != cf)
1463+ let fp = value(assetInfo(H))
1464+ if (if ((fp.issuer != bo))
1465+ then (fp.issuer != bp)
15971466 else false)
1598- then throw((("Unknown issuer of " + l) + " token"))
1599- else if (!(contains(bW.name, l)))
1600- then throw((("Only NFT " + l) + " tokens are accepted"))
1467+ then throw((("Unknown issuer of " + b) + " token"))
1468+ else if (!(contains(fp.name, b)))
1469+ then throw((("Only NFT " + b) + " tokens are accepted"))
16011470 else {
1602- let ht = toBase58String(aM)
1603- let gd = aO(ht)
1604- if (isDefined(getInteger(gd)))
1605- then throw((("NFT " + bW.name) + " is already staked"))
1606- else if (isDefined(getString(be(ap))))
1607- then throw(("You already staked one duck: " + bW.name))
1471+ let gH = toBase58String(H)
1472+ let fq = J(gH)
1473+ if (isDefined(getInteger(fq)))
1474+ then throw((("NFT " + fp.name) + " is already staked"))
1475+ else if (isDefined(getString(Y(aJ))))
1476+ then throw(("You already staked one duck: " + fp.name))
16081477 else {
1609- let hu = bh(ht)
1610- let hv = getString(hu)
1611- let ej = bf(ht)
1612- let hw = getString(ej)
1613- ([IntegerEntry(gd, lastBlock.timestamp), IntegerEntry(aS(l, toBase58String(aM), ap), lastBlock.timestamp), StringEntry(bd(ht), ap), StringEntry(be(ap), ht)] ++ (if (isDefined(hv))
1478+ let gI = ab(gH)
1479+ let gJ = getString(gI)
1480+ let dt = Z(gH)
1481+ let gK = getString(dt)
1482+ ([IntegerEntry(fq, lastBlock.timestamp), IntegerEntry(N(b, toBase58String(H), aJ), lastBlock.timestamp), StringEntry(X(gH), aJ), StringEntry(Y(aJ), gH)] ++ (if (isDefined(gJ))
16141483 then nil
1615- else ([StringEntry(hu, w)] ++ (if (isDefined(hw))
1484+ else ([StringEntry(gI, h)] ++ (if (isDefined(gK))
16161485 then nil
1617- else (([StringEntry(ej, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(bi(ht), 100)) :+ hm)))))
1486+ else (([StringEntry(dt, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ac(gH), 100)) :+ gA)))))
16181487 }
16191488 }
16201489 }
16211490 }
16221491 }
16231492
16241493
16251494
1626-@Callable(dB)
1627-func unstakeDuck (ht) = {
1628- let hm = hj(dB)
1629- if ((size(dB.payments) != 0))
1495+@Callable(cK)
1496+func unstakeDuck (gH) = {
1497+ let gA = gx(cK)
1498+ if ((size(cK.payments) != 0))
16301499 then throw("No payments required")
16311500 else {
1632- let aM = fromBase58String(ht)
1633- let ap = toString(dB.caller)
1634- let bW = value(assetInfo(aM))
1635- let gd = aO(toBase58String(aM))
1636- if (!(isDefined(getInteger(gd))))
1637- then throw((("NFT " + bW.name) + " is not staked"))
1638- else if (!(isDefined(getString(be(ap)))))
1639- then throw((("The duck " + bW.name) + " is not staked"))
1501+ let H = fromBase58String(gH)
1502+ let aJ = toString(cK.caller)
1503+ let fp = value(assetInfo(H))
1504+ let fq = J(toBase58String(H))
1505+ if (!(isDefined(getInteger(fq))))
1506+ then throw((("NFT " + fp.name) + " is not staked"))
1507+ else if (!(isDefined(getString(Y(aJ)))))
1508+ then throw((("The duck " + fp.name) + " is not staked"))
16401509 else {
1641- let gf = valueOrErrorMessage(getString(bd(toBase58String(aM))), (("NFT " + bW.name) + " is orphaned"))
1642- if ((gf != ap))
1510+ let fs = valueOrErrorMessage(getString(X(toBase58String(H))), (("NFT " + fp.name) + " is orphaned"))
1511+ if ((fs != aJ))
16431512 then throw("Staked NFT is not yours")
16441513 else {
1645- let fI = bi(ht)
1646- let hx = valueOrElse(getInteger(fI), 100)
1647- if ((100 > hx))
1514+ let eU = ac(gH)
1515+ let gL = valueOrElse(getInteger(eU), 100)
1516+ if ((100 > gL))
16481517 then throw("Please heal your duck before unstaking")
1649- else [ScriptTransfer(dB.caller, 1, aM), DeleteEntry(gd), DeleteEntry(fI), DeleteEntry(bh(ht)), DeleteEntry(bd(ht)), DeleteEntry(aS(l, ht, ap)), DeleteEntry(be(ap)), hm]
1518+ else [ScriptTransfer(cK.caller, 1, H), DeleteEntry(fq), DeleteEntry(eU), DeleteEntry(ab(gH)), DeleteEntry(X(gH)), DeleteEntry(N(b, gH, aJ)), DeleteEntry(Y(aJ)), gA]
16501519 }
16511520 }
16521521 }
16531522 }
16541523
16551524
16561525
1657-@Callable(dB)
1658-func claimRes (eP,hy) = {
1659- let hm = hj(dB)
1660- if ((size(dB.payments) != 0))
1526+@Callable(cK)
1527+func claimRes (eb,gM) = {
1528+ let gA = gx(cK)
1529+ if ((size(cK.payments) != 0))
16611530 then throw("No payments required")
16621531 else {
1663- let aK = toString(dB.originCaller)
1664- let dh = gh(aK, eP, cH, hy)
1665- $Tuple2((((dh._1 :+ StringEntry(dh._2, makeString(dh._3, ":"))) :+ StringEntry(dh._4, makeString(dh._5, ":"))) :+ hm), dh._3[aj])
1666- }
1667- }
1668-
1669-
1670-
1671-@Callable(dB)
1672-func claimResToWH (eP,hy) = {
1673- let hm = hj(dB)
1674- if ((size(dB.payments) != 0))
1532+ let F = toString(cK.originCaller)
1533+ let cp = fu(F, eb, bR, gM)
1534+ $Tuple2((((cp._1 :+ StringEntry(cp._2, makeString(cp._3, ":"))) :+ StringEntry(cp._4, makeString(cp._5, ":"))) :+ gA), cp._3[z])
1535+ }
1536+ }
1537+
1538+
1539+
1540+@Callable(cK)
1541+func claimResToWH (eb,gM) = {
1542+ let gA = gx(cK)
1543+ if ((size(cK.payments) != 0))
16751544 then throw("No payments required")
16761545 else {
1677- let aK = toString(dB.originCaller)
1678- let dh = gh(aK, eP, cG, hy)
1679- $Tuple2((((dh._1 :+ StringEntry(dh._2, makeString(dh._3, ":"))) :+ StringEntry(dh._4, makeString(dh._5, ":"))) :+ hm), dh._5[aa])
1680- }
1681- }
1682-
1683-
1684-
1685-@Callable(dB)
1686-func flight (fx,fy) = {
1687- let hm = hj(dB)
1688- if ((size(dB.payments) != 0))
1546+ let F = toString(cK.originCaller)
1547+ let cp = fu(F, eb, bQ, gM)
1548+ $Tuple2((((cp._1 :+ StringEntry(cp._2, makeString(cp._3, ":"))) :+ StringEntry(cp._4, makeString(cp._5, ":"))) :+ gA), cp._5[q])
1549+ }
1550+ }
1551+
1552+
1553+
1554+@Callable(cK)
1555+func flight (eJ,eK) = {
1556+ let gA = gx(cK)
1557+ if ((size(cK.payments) != 0))
16891558 then throw("No payments required")
16901559 else {
1691- let bm = toString(dB.caller)
1692- let ef = fw(bm, fx, fy)
1693- let hu = bh(ef._2)
1694- let ga = valueOrElse(getString(hu), w)
1695- if ((ef._4 == ga))
1560+ let af = toString(cK.caller)
1561+ let dp = eI(af, eJ, eK)
1562+ let gI = ab(dp._2)
1563+ let fm = valueOrElse(getString(gI), h)
1564+ if ((dp._4 == fm))
16961565 then throw("You can't fly to the same location")
16971566 else {
1698- let ej = bf(ef._2)
1699- let eS = ei(ej)
1700- let du = di(eS[al], ef._5)
1701- $Tuple2([StringEntry(hu, if ((ef._1 > 0))
1702- then ef._4
1703- else ga), StringEntry(ej, makeString([eS[ai], eS[aj], eS[ak], du], ":")), IntegerEntry(bi(ef._2), ef._1), hm], ef._3)
1567+ let dt = Z(dp._2)
1568+ let ee = ds(dt)
1569+ let cD = cq(ee[B], dp._5)
1570+ $Tuple2([StringEntry(gI, if ((dp._1 > 0))
1571+ then dp._4
1572+ else fm), StringEntry(dt, makeString([ee[y], ee[z], ee[A], cD], ":")), IntegerEntry(ac(dp._2), dp._1), gA], dp._3)
17041573 }
17051574 }
17061575 }
17071576
17081577
17091578
1710-@Callable(dB)
1711-func heal (hz,hA,hB) = {
1712- let hm = hj(dB)
1713- if (if (if ((0 > hz))
1579+@Callable(cK)
1580+func heal (gN,gO,gP) = {
1581+ let gA = gx(cK)
1582+ if (if (if ((0 > gN))
17141583 then true
1715- else (0 > hA))
1584+ else (0 > gO))
17161585 then true
1717- else (0 > hB))
1586+ else (0 > gP))
17181587 then throw("Quantity cannot be negative")
17191588 else {
1720- let bg = valueOrErrorMessage(getString(be(toString(dB.caller))), "You don't have a duck staked")
1721- let hC = [hz, hA, hB]
1722- let fI = bi(bg)
1723- let hD = valueOrElse(getInteger(fI), 100)
1724- if ((hD >= B))
1725- then throw((("HP should be < " + toString(B)) + " to heal"))
1589+ let aa = valueOrErrorMessage(getString(Y(toString(cK.caller))), "You don't have a duck staked")
1590+ let gQ = [gN, gO, gP]
1591+ let eU = ac(aa)
1592+ let gR = valueOrElse(getInteger(eU), 100)
1593+ if ((gR >= k))
1594+ then throw((("HP should be < " + toString(k)) + " to heal"))
17261595 else {
1727- let ej = bf(bg)
1728- let eS = ei(ej)
1729- let hE = if ((eS[al] == ""))
1596+ let dt = Z(aa)
1597+ let ee = ds(dt)
1598+ let gS = if ((ee[B] == ""))
17301599 then nil
1731- else split(eS[al], "_")
1732- func hF (bI,hG) = {
1733- let bw = bI._2
1734- let dW = if ((size(hE) > bw))
1735- then parseIntValue(hE[bw])
1600+ else split(ee[B], "_")
1601+ func gT (ce,gU) = {
1602+ let bl = ce._2
1603+ let dg = if ((size(gS) > bl))
1604+ then parseIntValue(gS[bl])
17361605 else 0
1737- if ((3 > bw))
1606+ if ((3 > bl))
17381607 then {
1739- let hH = hC[bw]
1740- if ((hH > dW))
1741- then throw(((("You have only " + toString(dW)) + " of ") + E[bw]))
1742- else $Tuple3((bI._1 :+ toString((dW - hH))), (bw + 1), (bI._3 + (ch[bw] * hH)))
1608+ let gV = gQ[bl]
1609+ if ((gV > dg))
1610+ then throw(((("You have only " + toString(dg)) + " of ") + l[bl]))
1611+ else $Tuple3((ce._1 :+ toString((dg - gV))), (bl + 1), (ce._3 + (br[bl] * gV)))
17431612 }
1744- else $Tuple3((bI._1 :+ toString(dW)), (bw + 1), bI._3)
1613+ else $Tuple3((ce._1 :+ toString(dg)), (bl + 1), ce._3)
17451614 }
17461615
1747- let dh = {
1748- let bL = G
1749- let bM = size(bL)
1750- let bN = $Tuple3(nil, 0, 0)
1751- func bO (bP,bQ) = if ((bQ >= bM))
1752- then bP
1753- else hF(bP, bL[bQ])
1754-
1755- func bR (bP,bQ) = if ((bQ >= bM))
1756- then bP
1616+ let cp = {
1617+ let ao = n
1618+ let ap = size(ao)
1619+ let aq = $Tuple3(nil, 0, 0)
1620+ func ar (as,at) = if ((at >= ap))
1621+ then as
1622+ else gT(as, ao[at])
1623+
1624+ func au (as,at) = if ((at >= ap))
1625+ then as
17571626 else throw("List size exceeds 50")
17581627
1759- 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)
1628+ au(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(aq, 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)
17601629 }
1761- let hI = min([B, (hD + dh._3)])
1762- $Tuple2([IntegerEntry(fI, hI), StringEntry(ej, makeString_2C([eS[ai], eS[aj], eS[ak], makeString(dh._1, "_")], ":")), hm], hI)
1630+ let gW = min([k, (gR + cp._3)])
1631+ $Tuple2([IntegerEntry(eU, gW), StringEntry(dt, makeString_2C([ee[y], ee[z], ee[A], makeString(cp._1, "_")], ":")), gA], gW)
17631632 }
17641633 }
17651634 }
17661635
17671636
17681637
1769-@Callable(dB)
1638+@Callable(cK)
17701639 func healES () = {
1771- let hm = hj(dB)
1772- if ((size(dB.payments) != 1))
1640+ let gA = gx(cK)
1641+ if ((size(cK.payments) != 1))
17731642 then throw("Exactly one payment required")
17741643 else {
1775- let hn = value(dB.payments[0])
1776- if ((hn.assetId != b))
1644+ let gB = value(cK.payments[0])
1645+ if ((gB.assetId != aw))
17771646 then throw("Allowed USDT payment only!")
17781647 else {
1779- let bg = valueOrErrorMessage(getString(be(toString(dB.caller))), "You don't have a duck staked")
1780- let fI = bi(bg)
1781- let hD = valueOrElse(getInteger(fI), 100)
1782- if ((hD > 0))
1648+ let aa = valueOrErrorMessage(getString(Y(toString(cK.caller))), "You don't have a duck staked")
1649+ let eU = ac(aa)
1650+ let gR = valueOrElse(getInteger(eU), 100)
1651+ if ((gR > 0))
17831652 then throw("HP should be 0 to call Emergency Service")
17841653 else {
1785- let ej = bf(bg)
1786- let eS = ei(ej)
1787- let hE = if ((eS[al] == ""))
1654+ let dt = Z(aa)
1655+ let ee = ds(dt)
1656+ let gS = if ((ee[B] == ""))
17881657 then nil
1789- else split(eS[al], "_")
1790- let hJ = if ((size(hE) > 0))
1791- then parseIntValue(hE[0])
1658+ else split(ee[B], "_")
1659+ let gX = if ((size(gS) > 0))
1660+ then parseIntValue(gS[0])
17921661 else 0
1793- let hK = if ((size(hE) > 1))
1794- then parseIntValue(hE[1])
1662+ let gY = if ((size(gS) > 1))
1663+ then parseIntValue(gS[1])
17951664 else 0
1796- let hL = if ((size(hE) > 2))
1797- then parseIntValue(hE[2])
1665+ let gZ = if ((size(gS) > 2))
1666+ then parseIntValue(gS[2])
17981667 else 0
1799- if (if (if ((hJ > 0))
1668+ if (if (if ((gX > 0))
18001669 then true
1801- else (hK > 0))
1670+ else (gY > 0))
18021671 then true
1803- else (hL > 0))
1672+ else (gZ > 0))
18041673 then throw("You have to use own Medical Kit")
18051674 else {
1806- let hM = getString(aG, bo())
1807- let hN = if (isDefined(hM))
1808- then split(value(hM), "_")
1675+ let ha = getString(aY, ag())
1676+ let hb = if (isDefined(ha))
1677+ then split(value(ha), "_")
18091678 else nil
1810- let hO = if ((size(hN) > 0))
1811- then parseIntValue(hN[0])
1679+ let hc = if ((size(hb) > 0))
1680+ then parseIntValue(hb[0])
18121681 else 0
1813- if ((0 >= hO))
1682+ if ((0 >= hc))
18141683 then throw("There are no Medical Kits L1 at Emergency Service storage")
18151684 else {
1816- let hI = (hD + ch[0])
1817- let hP = makeString([toString((hO - 1)), removeByIndex(hN, 0)], "_")
1818- let ca = split(G[0], "_")
1819- let hQ = bZ(ca)
1820- let hR = parseIntValue(ca[T])
1821- let hS = fraction((hQ * A), x, (10 * hR))
1822- if ((hn.amount != hS))
1823- then throw(("Payment attached should be " + toString(hS)))
1685+ let gW = (gR + br[0])
1686+ let hd = makeString([toString((hc - 1)), removeByIndex(hb, 0)], "_")
1687+ let ak = split(n[0], "_")
1688+ let he = aj(ak)
1689+ let hf = parseIntValue(ak[o])
1690+ let hg = fraction((he * j), i, (10 * hf))
1691+ if ((gB.amount != hg))
1692+ then throw(("Payment attached should be " + toString(hg)))
18241693 else {
1825- let dh = bs(invoke(aG, "updateEsStorage", [hP], [AttachedPayment(b, hS)]))
1826- $Tuple2([IntegerEntry(fI, hI), hm], dh)
1694+ let cp = bh(invoke(aY, "updateEsStorage", [hd], [AttachedPayment(aw, hg)]))
1695+ $Tuple2([IntegerEntry(eU, gW), gA], cp)
18271696 }
18281697 }
18291698 }
18301699 }
18311700 }
18321701 }
18331702 }
18341703
18351704
18361705
1837-@Callable(dB)
1838-func updateBackpack (bg,hT) = {
1839- let hm = hj(dB)
1840- if ((dB.caller != aG))
1706+@Callable(cK)
1707+func updateBackpack (aa,hh) = {
1708+ let gA = gx(cK)
1709+ if ((cK.caller != aY))
18411710 then throw("permission denied")
1842- else $Tuple2([StringEntry(bf(bg), hT), hm], hT)
1843- }
1844-
1845-
1846-
1847-@Callable(dB)
1711+ else $Tuple2([StringEntry(Z(aa), hh), gA], hh)
1712+ }
1713+
1714+
1715+
1716+@Callable(cK)
18481717 func buySLand () = {
1849- let hm = hj(dB)
1850- if ((size(dB.payments) != 1))
1718+ let gA = gx(cK)
1719+ if ((size(cK.payments) != 1))
18511720 then throw("Exactly one payment required")
18521721 else {
1853- let hn = value(dB.payments[0])
1854- if ((hn.assetId != b))
1722+ let gB = value(cK.payments[0])
1723+ if ((gB.assetId != aw))
18551724 then throw("Allowed USDT payment only!")
1856- else if ((hn.amount != cn))
1857- then throw(("Payment attached should be " + toString(cn)))
1725+ else if ((gB.amount != bx))
1726+ then throw(("Payment attached should be " + toString(bx)))
18581727 else {
1859- let dh = fo(dB.caller, dB.transactionId)
1860- $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2._1)
1728+ let cp = eA(cK.caller, cK.transactionId)
1729+ $Tuple2(((cp._1 :+ ScriptTransfer(aY, gB.amount, aw)) :+ gA), cp._2._1)
18611730 }
18621731 }
18631732 }
18641733
18651734
18661735
1867-@Callable(dB)
1868-func expedition (fx,fy) = {
1869- let hm = hj(dB)
1870- if ((size(dB.payments) != 0))
1736+@Callable(cK)
1737+func expedition (eJ,eK) = {
1738+ let gA = gx(cK)
1739+ if ((size(cK.payments) != 0))
18711740 then throw("No payments required")
18721741 else {
1873- let dh = fN(dB.caller, dB.transactionId, fx, fy)
1874- $Tuple2((dh._1 :+ hm), $Tuple2(dh._2, dh._3))
1875- }
1876- }
1877-
1878-
1879-
1880-@Callable(dB)
1881-func upgradeInfra (aW) = {
1882- let hm = hj(dB)
1883- if ((size(dB.payments) != 0))
1742+ let cp = eZ(cK.caller, cK.transactionId, eJ, eK)
1743+ $Tuple2((cp._1 :+ gA), $Tuple2(cp._2, cp._3))
1744+ }
1745+ }
1746+
1747+
1748+
1749+@Callable(cK)
1750+func upgradeInfra (R) = {
1751+ let gA = gx(cK)
1752+ if ((size(cK.payments) != 0))
18841753 then throw("No payments required")
18851754 else {
1886- let dh = gv(true, dB.caller, 0, aW)
1887- $Tuple2((dh._1 :+ hm), dh._2)
1888- }
1889- }
1890-
1891-
1892-
1893-@Callable(dB)
1894-func upgradeInfraUsdt (aW) = if ((dB.caller != this))
1755+ let cp = fI(true, cK.caller, 0, R)
1756+ $Tuple2((cp._1 :+ gA), cp._2)
1757+ }
1758+ }
1759+
1760+
1761+
1762+@Callable(cK)
1763+func upgradeInfraUsdt (R) = if ((cK.caller != this))
18951764 then throw("Permission denied")
18961765 else {
1897- let hm = hj(dB)
1898- if ((size(dB.payments) != 1))
1766+ let gA = gx(cK)
1767+ if ((size(cK.payments) != 1))
18991768 then throw("Exactly one payment required")
19001769 else {
1901- let hn = value(dB.payments[0])
1902- if ((hn.assetId != b))
1770+ let gB = value(cK.payments[0])
1771+ if ((gB.assetId != aw))
19031772 then throw("Allowed USDT payment only!")
19041773 else {
1905- let dh = gv(false, dB.caller, hn.amount, aW)
1906- $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2)
1774+ let cp = fI(false, cK.caller, gB.amount, R)
1775+ $Tuple2(((cp._1 :+ ScriptTransfer(aY, gB.amount, aw)) :+ gA), cp._2)
19071776 }
19081777 }
19091778 }
19101779
19111780
19121781
1913-@Callable(dB)
1914-func activateArtifact (hU,aW) = {
1915- let hm = hj(dB)
1916- if ((size(dB.payments) != 0))
1782+@Callable(cK)
1783+func activateArtifact (hi,R) = {
1784+ let gA = gx(cK)
1785+ if ((size(cK.payments) != 0))
19171786 then throw("No payments required")
19181787 else {
1919- let dh = {
1920- let c = hU
1921- if (("PRESALE" == c))
1922- then gI(toString(dB.caller), aW)
1788+ let cp = {
1789+ let ax = hi
1790+ if (("PRESALE" == ax))
1791+ then fU(toString(cK.caller), R)
19231792 else throw("Unknown artifact")
19241793 }
1925- (dh :+ hm)
1926- }
1927- }
1928-
1929-
1930-
1931-@Callable(dB)
1932-func mergeLands (gN) = {
1933- let hm = hj(dB)
1934- if ((size(dB.payments) != 0))
1794+ (cp :+ gA)
1795+ }
1796+ }
1797+
1798+
1799+
1800+@Callable(cK)
1801+func mergeLands (fZ) = {
1802+ let gA = gx(cK)
1803+ if ((size(cK.payments) != 0))
19351804 then throw("No payments required")
19361805 else {
1937- let dh = hh(true, toString(dB.caller), 0, gN, dB.transactionId)
1938- $Tuple2((dh._1 :+ hm), dh._2)
1939- }
1940- }
1941-
1942-
1943-
1944-@Callable(dB)
1945-func mergeLandsUsdt (gN) = {
1946- let hm = hj(dB)
1947- if ((size(dB.payments) != 1))
1806+ let cp = gv(true, toString(cK.caller), 0, fZ, cK.transactionId)
1807+ $Tuple2((cp._1 :+ gA), cp._2)
1808+ }
1809+ }
1810+
1811+
1812+
1813+@Callable(cK)
1814+func mergeLandsUsdt (fZ) = {
1815+ let gA = gx(cK)
1816+ if ((size(cK.payments) != 1))
19481817 then throw("Exactly one payment required")
19491818 else {
1950- let hn = value(dB.payments[0])
1951- if ((hn.assetId != b))
1819+ let gB = value(cK.payments[0])
1820+ if ((gB.assetId != aw))
19521821 then throw("Allowed USDT payment only!")
19531822 else {
1954- let dh = hh(false, toString(dB.caller), hn.amount, gN, dB.transactionId)
1955- $Tuple2(((dh._1 :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), dh._2)
1823+ let cp = gv(false, toString(cK.caller), gB.amount, fZ, cK.transactionId)
1824+ $Tuple2(((cp._1 :+ ScriptTransfer(aY, gB.amount, aw)) :+ gA), cp._2)
19561825 }
19571826 }
19581827 }
19591828
19601829
19611830
1962-@Callable(dB)
1963-func cargoExchange (hV,aW) = {
1964- let hm = hj(dB)
1965- if ((size(dB.payments) != 0))
1831+@Callable(cK)
1832+func cargoExchange (hj,R) = {
1833+ let gA = gx(cK)
1834+ if ((size(cK.payments) != 0))
19661835 then throw("No payments required")
19671836 else {
1968- let eR = split_4C(hV, ":")
1969- let aK = toString(dB.originCaller)
1970- let bW = value(assetInfo(fromBase58String(aW)))
1971- let gd = aO(aW)
1972- if (!(isDefined(getInteger(gd))))
1973- then throw((bW.name + " is not staked"))
1837+ let ed = split_4C(hj, ":")
1838+ let F = toString(cK.originCaller)
1839+ let fp = value(assetInfo(fromBase58String(R)))
1840+ let fq = J(R)
1841+ if (!(isDefined(getInteger(fq))))
1842+ then throw((fp.name + " is not staked"))
19741843 else {
1975- let gf = valueOrErrorMessage(getString(aL(aW)), (("NFT " + bW.name) + " is orphaned"))
1976- if ((gf != aK))
1977- then throw((k + " is not yours"))
1844+ let fs = valueOrErrorMessage(getString(G(R)), (("NFT " + fp.name) + " is orphaned"))
1845+ if ((fs != F))
1846+ then throw((a + " is not yours"))
19781847 else {
1979- let eB = (bA(split(bW.description, "_")[W]) / o)
1980- let eC = valueOrElse(getInteger(aP(aW)), 0)
1981- let bg = valueOrErrorMessage(getString(be(aK)), "You don't have a duck staked")
1982- let ga = valueOrElse(getString(bh(bg)), w)
1983- let gb = split(value(ga), "_")
1984- if ((gb[bq] != "L"))
1985- then throw((("Duck location type is " + gb[bq]) + ", but should be L"))
1986- else if ((gb[br] != aW))
1987- then throw(("Duck should be on the land " + aW))
1848+ let dN = (bm(split(fp.description, "_")[bc]) / aD)
1849+ let dO = valueOrElse(getInteger(K(R)), 0)
1850+ let aa = valueOrErrorMessage(getString(Y(F)), "You don't have a duck staked")
1851+ let fm = valueOrElse(getString(ab(aa)), h)
1852+ let fn = split(value(fm), "_")
1853+ if ((fn[ah] != "L"))
1854+ then throw((("Duck location type is " + fn[ah]) + ", but should be L"))
1855+ else if ((fn[ai] != R))
1856+ then throw(("Duck should be on the land " + R))
19881857 else {
1989- let eA = aV(aW)
1990- let eo = ez(eA, eB, eC)
1991- let ej = bf(bg)
1992- let eS = ei(ej)
1993- let dh = eQ(eR, eo, eS)
1994- let eI = split(eo[ad], "_")
1995- let gs = (parseIntValue(eI[af]) + dh._7)
1996- let gt = (parseIntValue(eI[ag]) - dh._7)
1997-[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]
1858+ let dM = Q(R)
1859+ let dy = dL(dM, dN, dO)
1860+ let dt = Z(aa)
1861+ let ee = ds(dt)
1862+ let cp = ec(ed, dy, ee)
1863+ let dU = split(dy[t], "_")
1864+ let fF = (parseIntValue(dU[v]) + cp._7)
1865+ let fG = (parseIntValue(dU[w]) - cp._7)
1866+[StringEntry(dt, makeString_2C([ee[y], cp._4, cp._5, cp._6], ":")), StringEntry(dM, makeString_2C([dy[p], cp._1, cp._2, cp._3, makeString([dU[u], toString(fF), toString(fG), dU[x]], "_")], ":")), gA]
19981867 }
19991868 }
20001869 }
20011870 }
20021871 }
20031872
20041873
20051874
2006-@Callable(dB)
2007-func saveWarehouse (eE,aW) = {
2008- let hm = hj(dB)
2009- if ((dB.caller != aG))
1875+@Callable(cK)
1876+func saveWarehouse (dQ,R) = {
1877+ let gA = gx(cK)
1878+ if ((cK.caller != aY))
20101879 then throw("Access denied")
20111880 else {
2012- let eA = aV(aW)
2013- let eF = split_4C(eE, ":")
2014- if ((size(eF) != 5))
1881+ let dM = Q(R)
1882+ let dR = split_4C(dQ, ":")
1883+ if ((size(dR) != 5))
20151884 then throw("warehouse string should contain 4 ':' separators")
20161885 else {
2017- let hW = split(eF[ad], "_")[ae]
2018- let gs = en(eF)
2019- let hX = el(eF[Z])
2020- let gt = ((hX - parseIntValue(hW)) - gs)
2021- let hY = makeString_2C([eF[Z], eF[aa], eF[ab], eF[ac], makeString([hW, toString(gs), toString(gt), toString(hX)], "_")], ":")
2022- $Tuple2([StringEntry(eA, hY), hm], hY)
1886+ let hk = split(dR[t], "_")[u]
1887+ let fF = dx(dR)
1888+ let hl = dv(dR[p])
1889+ let fG = ((hl - parseIntValue(hk)) - fF)
1890+ let hm = makeString_2C([dR[p], dR[q], dR[r], dR[s], makeString([hk, toString(fF), toString(fG), toString(hl)], "_")], ":")
1891+ $Tuple2([StringEntry(dM, hm), gA], hm)
20231892 }
20241893 }
20251894 }
20261895
20271896
20281897
2029-@Callable(dB)
2030-func fixWarehouseFormat (aW) = if ((dB.caller != aE))
1898+@Callable(cK)
1899+func fixWarehouseFormat (R) = if ((cK.caller != aW))
20311900 then throw("Access denied")
20321901 else {
2033- let eA = aV(aW)
2034- let bW = value(assetInfo(fromBase58String(aW)))
2035- let eB = (bA(split(bW.description, "_")[W]) / o)
2036- let eC = valueOrElse(getInteger(aP(aW)), 0)
2037- let eF = ez(eA, eB, eC)
2038- let hW = bv(invoke(aG, "recalcLockedVolumeREADONLY", [aW, eF], nil))
2039- let gs = en(eF)
2040- let hX = el(eF[Z])
2041- let gt = ((hX - hW) - gs)
2042- let hY = makeString_2C([eF[Z], eF[aa], eF[ab], eF[ac], makeString([toString(hW), toString(gs), toString(gt), toString(hX)], "_")], ":")
2043- $Tuple2([StringEntry(eA, hY)], hY)
1902+ let dM = Q(R)
1903+ let fp = value(assetInfo(fromBase58String(R)))
1904+ let dN = (bm(split(fp.description, "_")[bc]) / aD)
1905+ let dO = valueOrElse(getInteger(K(R)), 0)
1906+ let dR = dL(dM, dN, dO)
1907+ let hk = bk(invoke(aY, "recalcLockedVolumeREADONLY", [R, dR], nil))
1908+ let fF = dx(dR)
1909+ let hl = dv(dR[p])
1910+ let fG = ((hl - hk) - fF)
1911+ let hm = makeString_2C([dR[p], dR[q], dR[r], dR[s], makeString([toString(hk), toString(fF), toString(fG), toString(hl)], "_")], ":")
1912+ $Tuple2([StringEntry(dM, hm)], hm)
20441913 }
20451914
20461915
20471916
2048-@Callable(dB)
2049-func fixStakedPieces (ap) = if ((dB.caller != aE))
1917+@Callable(cK)
1918+func fixStakedPieces (aJ) = if ((cK.caller != aW))
20501919 then throw("Access denied")
20511920 else {
2052- let hc = if ((ap == ""))
1921+ let gq = if ((aJ == ""))
20531922 then 0
20541923 else {
2055- let bT = getString(aF, aX(ap))
2056- let bU = if (isDefined(bT))
2057- then split_51C(value(bT), "_")
1924+ let gl = getString(aX, bg(aJ))
1925+ let gg = if (isDefined(gl))
1926+ then split_51C(value(gl), "_")
20581927 else nil
2059- func bV (bI,aW) = {
2060- let bW = value(assetInfo(fromBase58String(aW)))
2061- let bB = split(bW.description, "_")[W]
2062- (bI + bA(bB))
1928+ func hn (ce,R) = {
1929+ let fp = value(assetInfo(fromBase58String(R)))
1930+ let bn = split(fp.description, "_")[bc]
1931+ (ce + bm(bn))
20631932 }
20641933
2065- let bL = bU
2066- let bM = size(bL)
2067- let bN = 0
2068- func bO (bP,bQ) = if ((bQ >= bM))
2069- then bP
2070- else bV(bP, bL[bQ])
2071-
2072- func bR (bP,bQ) = if ((bQ >= bM))
2073- then bP
1934+ let ao = gg
1935+ let ap = size(ao)
1936+ let aq = 0
1937+ func ar (as,at) = if ((at >= ap))
1938+ then as
1939+ else hn(as, ao[at])
1940+
1941+ func au (as,at) = if ((at >= ap))
1942+ then as
20741943 else throw("List size exceeds 100")
20751944
2076- 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)
1945+ au(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(ar(aq, 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)
20771946 }
2078- $Tuple2([IntegerEntry(aY(ap), hc)], hc)
1947+ $Tuple2([IntegerEntry(S(aJ), gq)], gq)
20791948 }
20801949
20811950
20821951
2083-@Callable(dB)
2084-func setCustomName (aM,gV,aR) = {
2085- let hm = hj(dB)
2086- if ((size(dB.payments) != 1))
1952+@Callable(cK)
1953+func setCustomName (H,gi,M) = {
1954+ let gA = gx(cK)
1955+ if ((size(cK.payments) != 1))
20871956 then throw("Exactly one payment required")
20881957 else {
2089- let hn = value(dB.payments[0])
2090- if ((hn.assetId != b))
1958+ let gB = value(cK.payments[0])
1959+ if ((gB.assetId != aw))
20911960 then throw("Allowed USDT payment only!")
2092- else if ((hn.amount != cj))
2093- then throw(("Payment should be " + toString(cj)))
2094- else if (contains(gV, "__"))
2095- then throw(("Name should not contain '__': " + gV))
2096- else if ((size(gV) > ck))
2097- then throw(("Name too long, maxLength=" + toString(ck)))
1961+ else if ((gB.amount != bt))
1962+ then throw(("Payment should be " + toString(bt)))
1963+ else if (contains(gi, "__"))
1964+ then throw(("Name should not contain '__': " + gi))
1965+ else if ((size(gi) > bu))
1966+ then throw(("Name too long, maxLength=" + toString(bu)))
20981967 else {
2099- let aK = toString(dB.originCaller)
2100- let hZ = {
2101- let c = aR
2102- if (("ACCOUNT" == c))
1968+ let F = toString(cK.originCaller)
1969+ let ho = {
1970+ let ax = M
1971+ if (("ACCOUNT" == ax))
21031972 then {
2104- let ia = cE(gV)
2105- let ib = getString(ia)
2106- if (isDefined(ib))
2107- then throw(("Name already registered: " + gV))
1973+ let hp = bO(gi)
1974+ let hq = getString(hp)
1975+ if (isDefined(hq))
1976+ then throw(("Name already registered: " + gi))
21081977 else {
2109- let ic = ba(aK)
2110- let id = getString(ic)
2111- let ie = if (isDefined(id))
2112- then [DeleteEntry(cE(value(id)))]
1978+ let hr = U(F)
1979+ let hs = getString(hr)
1980+ let ht = if (isDefined(hs))
1981+ then [DeleteEntry(bO(value(hs)))]
21131982 else nil
2114- ((ie :+ StringEntry(ic, gV)) :+ StringEntry(ia, aK))
1983+ ((ht :+ StringEntry(hr, gi)) :+ StringEntry(hp, F))
21151984 }
21161985 }
2117- else if (("LAND" == c))
1986+ else if (("LAND" == ax))
21181987 then {
2119- let bW = value(assetInfo(fromBase58String(aM)))
2120- let gd = aO(aM)
2121- if (!(isDefined(getInteger(gd))))
2122- then throw((bW.name + " is not staked"))
1988+ let fp = value(assetInfo(fromBase58String(H)))
1989+ let fq = J(H)
1990+ if (!(isDefined(getInteger(fq))))
1991+ then throw((fp.name + " is not staked"))
21231992 else {
2124- let gf = valueOrErrorMessage(getString(aL(aM)), (("NFT " + bW.name) + " is orphaned"))
2125- if ((gf != aK))
2126- then throw((k + " is not yours"))
1993+ let fs = valueOrErrorMessage(getString(G(H)), (("NFT " + fp.name) + " is orphaned"))
1994+ if ((fs != F))
1995+ then throw((a + " is not yours"))
21271996 else {
2128- let ia = cy(gV)
2129- let ib = getString(ia)
2130- if (isDefined(ib))
2131- then throw(("Name already registered: " + gV))
1997+ let hp = bI(gi)
1998+ let hq = getString(hp)
1999+ if (isDefined(hq))
2000+ then throw(("Name already registered: " + gi))
21322001 else {
2133- let if = aN(aM)
2134- let id = getString(if)
2135- let ie = if (isDefined(id))
2136- then [DeleteEntry(cy(value(id)))]
2002+ let hu = I(H)
2003+ let hs = getString(hu)
2004+ let ht = if (isDefined(hs))
2005+ then [DeleteEntry(bI(value(hs)))]
21372006 else nil
2138- ((ie :+ StringEntry(if, gV)) :+ StringEntry(ia, aM))
2007+ ((ht :+ StringEntry(hu, gi)) :+ StringEntry(hp, H))
21392008 }
21402009 }
21412010 }
21422011 }
2143- else if (("DUCK" == c))
2012+ else if (("DUCK" == ax))
21442013 then {
2145- let bW = value(assetInfo(fromBase58String(aM)))
2146- let gd = aO(aM)
2147- if (if (!(isDefined(getInteger(gd))))
2014+ let fp = value(assetInfo(fromBase58String(H)))
2015+ let fq = J(H)
2016+ if (if (!(isDefined(getInteger(fq))))
21482017 then true
2149- else !(isDefined(getString(be(aK)))))
2150- then throw((bW.name + " is not staked"))
2018+ else !(isDefined(getString(Y(F)))))
2019+ then throw((fp.name + " is not staked"))
21512020 else {
2152- let gf = valueOrErrorMessage(getString(bd(aM)), (("NFT " + bW.name) + " is orphaned"))
2153- if ((gf != aK))
2154- then throw((l + " is not yours"))
2021+ let fs = valueOrErrorMessage(getString(X(H)), (("NFT " + fp.name) + " is orphaned"))
2022+ if ((fs != F))
2023+ then throw((b + " is not yours"))
21552024 else {
2156- let ia = cD(gV)
2157- let ib = getString(ia)
2158- if (isDefined(ib))
2159- then throw(("Name already registered: " + gV))
2025+ let hp = bN(gi)
2026+ let hq = getString(hp)
2027+ if (isDefined(hq))
2028+ then throw(("Name already registered: " + gi))
21602029 else {
2161- let if = aZ(aM)
2162- let id = getString(if)
2163- let ie = if (isDefined(id))
2164- then [DeleteEntry(cD(value(id)))]
2030+ let hu = T(H)
2031+ let hs = getString(hu)
2032+ let ht = if (isDefined(hs))
2033+ then [DeleteEntry(bN(value(hs)))]
21652034 else nil
2166- ((ie :+ StringEntry(if, gV)) :+ StringEntry(ia, aM))
2035+ ((ht :+ StringEntry(hu, gi)) :+ StringEntry(hp, H))
21672036 }
21682037 }
21692038 }
21702039 }
21712040 else throw("Unknown entity type")
21722041 }
2173- $Tuple2(((hZ :+ ScriptTransfer(aG, hn.amount, b)) :+ hm), 0)
2042+ $Tuple2(((ho :+ ScriptTransfer(aY, gB.amount, aw)) :+ gA), 0)
21742043 }
21752044 }
21762045 }
21772046
21782047
21792048
2180-@Callable(dB)
2181-func setReferrals (ig,ih) = if ((dB.callerPublicKey != cg))
2049+@Callable(cK)
2050+func setReferrals (hv,hw) = if ((cK.callerPublicKey != bq))
21822051 then throw("Permission denied")
21832052 else {
2184- let hm = hj(dB)
2185- if ((size(dB.payments) != 0))
2053+ let gA = gx(cK)
2054+ if ((size(cK.payments) != 0))
21862055 then throw("No payments required")
2187- else if (!(isDefined(addressFromString(ig))))
2188- then throw(("Invalid address: " + ig))
2189- else if (!(isDefined(addressFromString(ih))))
2190- then throw(("Invalid address: " + ih))
2056+ else if (!(isDefined(addressFromString(hv))))
2057+ then throw(("Invalid address: " + hv))
2058+ else if (!(isDefined(addressFromString(hw))))
2059+ then throw(("Invalid address: " + hw))
21912060 else {
2192- let ii = cF()
2193- let ij = getString(ii)
2194- let ik = if (isDefined(ij))
2195- then split_4C(value(ij), "_")
2061+ let hx = bP()
2062+ let hy = getString(hx)
2063+ let hz = if (isDefined(hy))
2064+ then split_4C(value(hy), "_")
21962065 else nil
2197- if (containsElement(ik, ih))
2198- then throw((ih + " is not newbie (already has referrals)"))
2066+ if (containsElement(hz, hw))
2067+ then throw((hw + " is not newbie (already has referrals)"))
21992068 else {
2200- let il = bb(ih)
2201- let im = getString(il)
2202- if (if (isDefined(im))
2203- then isDefined(addressFromString(value(im)))
2069+ let hA = V(hw)
2070+ let hB = getString(hA)
2071+ if (if (isDefined(hB))
2072+ then isDefined(addressFromString(value(hB)))
22042073 else false)
2205- then throw(((ih + " already has refBy: ") + value(im)))
2074+ then throw(((hw + " already has refBy: ") + value(hB)))
22062075 else {
2207- let in = bc(ig)
2208- let io = getString(in)
2209- let ip = if (isDefined(io))
2210- then split_4C(value(io), "_")
2076+ let hC = W(hv)
2077+ let hD = getString(hC)
2078+ let hE = if (isDefined(hD))
2079+ then split_4C(value(hD), "_")
22112080 else nil
2212- if (containsElement(ip, ih))
2213- then throw((((ig + " already contains ") + ih) + " within referrals"))
2081+ if (containsElement(hE, hw))
2082+ then throw((((hv + " already contains ") + hw) + " within referrals"))
22142083 else {
2215- let iq = makeString_2C((ip :+ ih), "_")
2216- let ir = if (containsElement(ik, ig))
2217- then value(ij)
2218- else makeString_2C((ik :+ ig), "_")
2219- $Tuple2([StringEntry(il, ig), StringEntry(in, iq), StringEntry(ii, ir), hm], 0)
2084+ let hF = makeString_2C((hE :+ hw), "_")
2085+ let hG = if (containsElement(hz, hv))
2086+ then value(hy)
2087+ else makeString_2C((hz :+ hv), "_")
2088+ $Tuple2([StringEntry(hA, hv), StringEntry(hC, hF), StringEntry(hx, hG), gA], 0)
22202089 }
22212090 }
22222091 }
22232092 }
22242093 }
22252094
22262095
22272096
2228-@Callable(dB)
2229-func splitByGlobalWeightsREADONLY (eP) = $Tuple2(nil, cZ(eP))
2230-
2231-
2232-
2233-@Callable(dB)
2234-func splitByGlobalAndLocalWeightsREADONLY (is,it,dE) = {
2235- let dx = dD(dE)
2236- $Tuple2(nil, $Tuple2(cZ(is), cS(it, dx)))
2237- }
2238-
2239-
2240-
2241-@Callable(dB)
2242-func getBackpackREADONLY (bg) = $Tuple2(nil, makeString(ei(bf(bg)), ":"))
2243-
2244-
2245-
2246-@Callable(dB)
2247-func getWarehouseREADONLY (aW) = {
2248- let bW = value(assetInfo(fromBase58String(aW)))
2249- let eB = (bA(split(bW.description, "_")[W]) / o)
2250- let eC = valueOrElse(getInteger(aP(aW)), 0)
2251- $Tuple2(nil, makeString_2C(ez(aV(aW), eB, eC), ":"))
2252- }
2253-
2254-
2255-
2256-@Callable(dB)
2257-func saveLastTx () = if ((dB.caller != aI))
2097+@Callable(cK)
2098+func splitByGlobalWeightsREADONLY (eb) = $Tuple2(nil, cg(eb))
2099+
2100+
2101+
2102+@Callable(cK)
2103+func splitByGlobalAndLocalWeightsREADONLY (hH,hI,cN) = {
2104+ let cG = cM(cN)
2105+ $Tuple2(nil, $Tuple2(cg(hH), bY(hI, cG)))
2106+ }
2107+
2108+
2109+
2110+@Callable(cK)
2111+func getBackpackREADONLY (aa) = $Tuple2(nil, makeString(ds(Z(aa)), ":"))
2112+
2113+
2114+
2115+@Callable(cK)
2116+func getWarehouseREADONLY (R) = {
2117+ let fp = value(assetInfo(fromBase58String(R)))
2118+ let dN = (bm(split(fp.description, "_")[bc]) / aD)
2119+ let dO = valueOrElse(getInteger(K(R)), 0)
2120+ $Tuple2(nil, makeString_2C(dL(Q(R), dN, dO), ":"))
2121+ }
2122+
2123+
2124+
2125+@Callable(cK)
2126+func saveLastTx () = if ((cK.caller != ba))
22582127 then throw("Access denied")
2259- else $Tuple2([hj(dB)], 42)
2128+ else $Tuple2([gx(cK)], 42)
22602129
22612130

github/deemru/w8io/169f3d6 
1218.65 ms