tx · 3u4aJct23eHfBtSMFRzP1USEqeyUsiRnDwFa6oQUs9Cv

3MptKi7f3jwXjzqhHpvLLzsSpEQdZiwAo5c:  -0.02200000 Waves

2023.12.26 15:39 [2903726] smart account 3MptKi7f3jwXjzqhHpvLLzsSpEQdZiwAo5c > SELF 0.00000000 Waves

{ "type": 13, "id": "3u4aJct23eHfBtSMFRzP1USEqeyUsiRnDwFa6oQUs9Cv", "fee": 2200000, "feeAssetId": null, "timestamp": 1703594428755, "version": 2, "chainId": 84, "sender": "3MptKi7f3jwXjzqhHpvLLzsSpEQdZiwAo5c", "senderPublicKey": "44kjsoExo76qSrM51NMhbG8FtdLkcPtyJxEDrwDyT8kz", "proofs": [ "2MmZUXQPKSBN6HMTtRcsDtjP8NGNGTQv3uJLM64aS3ysM4uGP7ausaJYeKF9QGtkY61VvZUjEokRpBeLoE3bcqPt" ], "script": "base64:BgLlIggCEgkKBwEBAQEBCAESABIECgIICBIDCgEIEgQKAggIEgQKAggIIg9nZXRTdHJpbmdPckZhaWwiA2tleSIDU0VQIghCVUZTQ0FMRSIGc2NhbGU4Igh0aHJvd0VyciIDbXNnIghhc1N0cmluZyIDdmFsIgckbWF0Y2gwIgZ2YWxTdHIiHWNvbnZlcnRQcmljZUFzc2V0SW50b0lkb0Fzc2V0IhBwcmljZUFzc2V0QW1vdW50Ig5wcmljZUFzc2V0TVVMVCIFcHJpY2UiCXByaWNlTVVMVCIMaWRvQXNzZXRNVUxUIg9iUHJpY2VBc3NldE1VTFQiDWJJZG9Bc3NldE1VTFQiDmJQcmljZUFzc2V0QlVGIg9iQW1vdW50QXNzZXRCVUYiDklkeENmZ0lkb1N0YXJ0IhFJZHhDZmdJZG9EdXJhdGlvbiIQSWR4Q2ZnQ2xhaW1TdGFydCITSWR4Q2ZnQ2xhaW1EdXJhdGlvbiILSWR4Q2ZnUHJpY2UiD0lkeENmZ1ByaWNlTXVsdCIQSWR4Q2ZnSWRvQXNzZXRJZCISSWR4Q2ZnSWRvQXNzZXRNdWx0IhJJZHhDZmdQcmljZUFzc2V0SWQiFElkeENmZ1ByaWNlQXNzZXRNdWx0IhVJZHhDZmdNaW5JbnZlc3RBbW91bnQiDWZyb21hdENvbmZpZ1MiCGlkb1N0YXJ0IgtpZG9EdXJhdGlvbiIKY2xhaW1TdGFydCINY2xhaW1EdXJhdGlvbiIJcHJpY2VNdWx0IgxpZG9Bc3NldElkNTgiDGlkb0Fzc2V0TXVsdCIOcHJpY2VBc3NldElkNTgiDnByaWNlQXNzZXRNdWx0Ig9taW5JbnZlc3RBbW91bnQiE3RvdGFsSWRvQXNzZXRUb1NlbGwiDGZyb21hdENvbmZpZyIRSWR4SW52VG90YWxBbW91bnQiFUlkeEludlJlbWFpbmluZ0Ftb3VudCIdSWR4SW52Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQiG0lkeEludkNsYWltZWRJZG9Bc3NldEFtb3VudCIXSWR4SW52TGFzdENsYWltZWRIZWlnaHQiD2Zvcm1hdEludmVzdG9yUyILdG90YWxBbW91bnQiD3JlbWFpbmluZ0Ftb3VudCIXY2xhaW1lZFByaWNlQXNzZXRBbW91bnQiFWNsYWltZWRJZG9Bc3NldEFtb3VudCIRbGFzdENsYWltZWRIZWlnaHQiDmZvcm1hdEludmVzdG9yIhNmb3JtYXRIaXN0b3J5UmVjb3JkIg5pZG9Bc3NldEFtb3VudCIJa2V5Q29uZmlnIgtrZXlJbnZlc3RvciILdXNlckFkZHJlc3MiCWtleVRvdGFscyIZa2V5T3BlcmF0aW9uSGlzdG9yeVJlY29yZCIEdHlwZSIGdHhJZDU4IhRrZXlVU0ROQ2xhaW1EaXNhYmxlZCIVa2V5VVNETkNsYWltRW5kSGVpZ2h0Ig9rZXlQZXJpb2RMZW5ndGgiEGtleUN1cnJlbnRQZXJpb2QiFGtleVBlcmlvZFN0YXJ0SGVpZ2h0IglwZXJpb2ROdW0iEmtleVBlcmlvZEVuZEhlaWdodCIfa2V5VXNkdFByaWNlQXNzZXRBbGxvd2FibGVSYXRpbyIXa2V5VG90YWxQZXJpb2RBbGxvd2FuY2UiB2Fzc2V0SWQiFmtleVVzZXJQZXJpb2RBbGxvd2FuY2UiHmtleVBlcmlvZFRvdGFsQXZhaWxhYmxlVG9DbGFpbSIda2V5UGVyaW9kVXNlckF2YWlsYWJsZVRvQ2xhaW0iG2tleVVzZHRQcmljZUFzc2V0U3RhYmxlUG9vbCIOa2V5VXNkdEFzc2V0SWQiFGtleVByaWNlQXNzZXRCYWxhbmNlIgdhZGRyZXNzIhprZXlJbnZlc3RvclJlbWFpbmluZ0Ftb3VudCIXa2V5VG90YWxSZW1haW5pbmdBbW91bnQiE2tleU1hbmFnZXJQdWJsaWNLZXkiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiFWtleUNsYWltQ2xvc2luZ0hlaWdodCISY2xhaW1DbG9zaW5nSGVpZ2h0Ig9yZWFkQ29uZmlnQXJyYXkiI3JlYWRUb3RhbHNBcnJheU9yRGVmYXVsdEJ5Q3VzdG9tS2V5IgljdXN0b21LZXkiGHJlYWRUb3RhbHNBcnJheU9yRGVmYXVsdCIacmVhZEludmVzdG9yQXJyYXlPckRlZmF1bHQiF3JlYWRJbnZlc3RvckFycmF5T3JGYWlsIhxnZXRNYW5hZ2VyVmF1bHRBZGRyZXNzT3JUaGlzIgFzIhVJZHhEaWZmVG90YWxJbmNyZW1lbnQiJElkeERpZmZSZW1haW5pbmdQcmljZUFtb3VudEluY3JlbWVudCIiSWR4RGlmZkNsYWltZWRQcmljZUFtb3VudEluY3JlbWVudCIlSWR4RGlmZkNsYWltZWRJZG9Bc3NldEFtb3VudEluY3JlbWVudCILVG90YWxzRW50cnkiCW9yaWdBcnJheSINaW5jcmVtZW50RGlmZiIUbmV3TGFzdENsYWltZWRIZWlnaHQiEXByaWNlQXNzZXRCYWxhbmNlIg5uZXdUb3RhbEFtb3VudCISbmV3UmVtYWluaW5nQW1vdW50IghjZmdBcnJheSIScHJpY2VBc3NldERlY2ltYWxzIiNwcmljZUFzc2V0QmFsYW5jZVByaWNlQXNzZXREZWNpbWFscyIabmV3Q2xhaW1lZFByaWNlQXNzZXRBbW91bnQiGG5ld0NsYWltZWRJZG9Bc3NldEFtb3VudCIHZW50cmllcyIEZGlmZiIXbmV3TG9naWNSZW1haW5pbmdBbW91bnQiG0ludmVzdE9wZXJhdGlvbkhpc3RvcnlFbnRyeSIEdHhJZCIaQ2xhaW1PcGVyYXRpb25IaXN0b3J5RW50cnkiDWludGVybmFsQ2xhaW0iEGNsYWltZWRBc3NldElkNTgiCGNsYWltRW5kIgppZG9Bc3NldElkIgxwcmljZUFzc2V0SWQiDXVzZXJBZGRyZXNzNTgiD29yaWdJbnZlc3RBcnJheSIRaW52ZXN0VG90YWxBbW91bnQiGmludmVzdExhc3RDbGFpbWVkSGVpZ2h0VE1QIhdpbnZlc3RMYXN0Q2xhaW1lZEhlaWdodCIUbmV3Q2xhaW1QZXJpb2RIZWlnaHQiDmNsYWltaW5nQmxvY2tzIhhjbGFpbWluZ1ByaWNlQXNzZXRBbW91bnQiFmNsYWltaW5nSWRvQXNzZXRBbW91bnQiBmlzVVNETiITaXNVU0ROQ2xhaW1EaXNhYmxlZCIGY2hlY2tzIg9pbnRlcm5hbENsYWltVjIiCW91dEFtb3VudCIZdG90YWxVc2VyQXZhaWxhYmxlVG9DbGFpbSIedG90YWxQZXJpb2RQcmljZUFzc2V0QWxsb3dhbmNlIh11c2VyUGVyaW9kUHJpY2VBc3NldEFsbG93YW5jZSIMcGVyaW9kTGVuZ3RoIg1jdXJyZW50UGVyaW9kIht6ZXJvUGVyaW9kRW5kSGVpZ2hJc0RlZmluZWQiDSR0MDEzMjc0MTUxNDQiFWxhc3RQZXJpb2RTdGFydEhlaWdodCITbGFzdFBlcmlvZEVuZEhlaWdodCINJHQwMTM1MzQxNDIzOSIUdXBkYXRlZEN1cnJlbnRQZXJpb2QiC3BlcmlvZFN0YXJ0IhdibG9ja3NUb0xhc3RQZXJpb2RTdGFydCIJcGVyaW9kRW5kIhV6ZXJvUGVyaW9kU3RhcnRIZWlnaHQiE3plcm9QZXJpb2RFbmRIZWlnaHQiDSR0MDE0NDk0MTQ4NzYiG3BlcmlvZFRvdGFsQXZhaWxhYmxlVG9DbGFpbSIacGVyaW9kVXNlckF2YWlsYWJsZVRvQ2xhaW0iGXBlcmlvZE1pbkF2YWlsYWJsZVRvQ2xhaW0iHHVzZHRQcmljZUFzc2V0QWxsb3dhYmxlUmF0aW8iG3B1dE9uZVRrblYyUHJpY2VBc3NldEFtb3VudCINJHQwMTU4OTkxNjE1MiIBQCIFYm9udXMiCWZlZUFtb3VudCIIbHBBbW91bnQiC3VzZHRBc3NldElkIg0kdDAxNjIxNDE2NDMyIhRnZXRPbmVUa25WMkZlZUFtb3VudCIKdXNkdEFtb3VudCIaY3VycmVudFVzZHRQcmljZUFzc2V0UmF0aW8iE2VuZFBlcmlvZEJsb2Nrc0xlZnQiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiE21hbmFnZXJWYXVsdEFkZHJlc3MiC211c3RNYW5hZ2VyIgFpIgJwZCICcGsiBmlkb0VuZCIDcG10IgxpZG9Bc3NldEluZm8iDnByaWNlQXNzZXRJbmZvIg9vcmlnVG90YWxzQXJyYXkiCnRvdGFsc0RpZmYiDm1pbkl2ZXN0QW1vdW50IgpwbXRBc3NldElkIglwbXRBbW91bnQiEW9yaWdJbnZlc3RvckFycmF5IhNuZXdQcmljZVRvdGFsQW1vdW50IhZyZXF1aXJlZElkb0Fzc2V0QW1vdW50Ig9jYWxsZXJBZGRyZXNzNTgiEGNsYWltUmVzdWx0VHVwbGUiCm91dEFzc2V0SWQiGmNsYWltZWRQcmljZUFtb3VudEZyb21EaWZmIh1jbGFpbWVkSWRvQXNzZXRBbW91bnRGcm9tRGlmZiINJHQwMjIyNzYyMjcyMCIidXBkYXRlZFBlcmlvZFRvdGFsQXZhaWxhYmxlVG9DbGFpbSIhdXBkYXRlZFBlcmlvZFVzZXJBdmFpbGFibGVUb0NsYWltIg5ldmFsdWF0ZVJlc3VsdCIbYXZhaWxhYmxlUHJpY2VBbW91bnRUb0NsYWltIhBsYXN0Q2xhaW1FbnRyaWVzIhNpbnZlc3RvclRvdGFsQW1vdW50IhdpbnZlc3RvclJlbWFpbmluZ0Ftb3VudCIZaW52ZXN0b3JQcmljZUFzc2V0QmFsYW5jZSIXaW52ZXN0b3JJZG9Bc3NldEJhbGFuY2UiGWludmVzdG9yTGFzdENsYWltZWRIZWlnaHQiDm5ld0ludmVzdEFycmF5IgZ0b3RhbHMiEXRvdGFsc1RvdGFsQW1vdW50IhV0b3RhbHNSZW1haW5pbmdBbW91bnQiHXRvdGFsc0NsYWltZWRQcmljZUFzc2V0QW1vdW50Iht0b3RhbHNDbGFpbWVkSWRvQXNzZXRBbW91bnQiF3RvdGFsc0xhc3RDbGFpbWVkSGVpZ2h0IhhuZXdUb3RhbHNSZW1haW5pbmdBbW91bnQiDW5ld1RvdGFsQXJyYXkiF25ld1RvdGFsUmVtYWluaW5nQW1vdW50Ihh1cGRhdGVkUHJpY2VBc3NldEJhbGFuY2UiHHByaWNlQXNzZXRCYWxhbmNlSWRvRGVjaW1hbHMiFGNoZWNrVW5jbGFpbWVkQXNzZXRzIghpbnZlc3RvciIcaW52ZXN0b3JSZW1haW5pbmdBbW91bnRDaGVjayILbmV3SW52ZXN0b3IiCW5ld1RvdGFscyIVYXZhaWxhYmxlVG9DbGFpbUFycmF5IhlhdmFpbGFibGVJZG9BbW91bnRUb0NsYWltIi5hdmFpbGFibGVJZG9BbW91bnRUb0NsYWltV2l0aFByaWNlQXNzZXRCYWxhbmNlIg0kdDAzNDEwNTM0NTE3IhZjdXJyZW50UGVyaW9kRW5kSGVpZ2h0Ihp1c2VyVG90YWxQcmljZUFzc2V0Q2xhaW1lZCIMcmVzdWx0U3RyaW5nIgxwZXJpb2RMZW5naHQiE3VzZXJQZXJpb2RBbGxvd2FuY2UiFHRvdGFsUGVyaW9kQWxsb3dhbmNlIgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXlFAQFhAQFiCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQUBYgkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUBYgIPIGlzIG5vdCBkZWZpbmVkAAFjAgJfXwABZAkAtgIBAICAkLu61q3wDQABZQCAwtcvAQFmAQFnCQACAQkAuQkCCQDMCAICCWlkby5yaWRlOgkAzAgCBQFnBQNuaWwCASABAWgBAWkEAWoFAWkDCQABAgUBagIGU3RyaW5nBAFrBQFqBQFrCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQFsBQFtAW4BbwFwAXEEAXIJALYCAQUBbgQBcwkAtgIBBQFxBAF0CQC8AgMJALYCAQUBbQUBZAUBcgQBdQkAvAIDBQF0CQC2AgEFAXAJALYCAQUBbwkAoAMBCQC8AgMFAXUJALYCAQUBcQUBZAABdgABAAF3AAIAAXgAAwABeQAEAAF6AAUAAUEABgABQgAHAAFDAAgAAUQACQABRQAKAAFGAAsBAUcMAUgBSQFKAUsBbwFMAU0BTgFPAVABUQFSCQC5CQIJAMwIAgIYJWQlZCVkJWQlZCVkJXMlZCVzJWQlZCVkCQDMCAIFAUgJAMwIAgUBSQkAzAgCBQFKCQDMCAIFAUsJAMwIAgUBbwkAzAgCBQFMCQDMCAIFAU0JAMwIAgUBTgkAzAgCBQFPCQDMCAIFAVAJAMwIAgUBUQkAzAgCBQFSBQNuaWwFAWMBAVMMAUgBSQFKAUsBbwFMAU0BTgFPAVABUQFSCQEBRwwJAKQDAQUBSAkApAMBBQFJCQCkAwEFAUoJAKQDAQUBSwkApAMBBQFvCQCkAwEFAUwFAU0JAKQDAQUBTgUBTwkApAMBBQFQCQCkAwEFAVEJAKQDAQUBUgABVAABAAFVAAIAAVYAAwABVwAEAAFYAAUBAVkFAVoCYWECYWICYWMCYWQJALkJAgkAzAgCAgolZCVkJWQlZCVkCQDMCAIFAVoJAMwIAgUCYWEJAMwIAgUCYWIJAMwIAgUCYWMJAMwIAgUCYWQFA25pbAUBYwECYWUFAVoCYWECYWICYWMCYWQJAQFZBQkApAMBBQFaCQCkAwEFAmFhCQCkAwEFAmFiCQCkAwEFAmFjCQCkAwEFAmFkAQJhZgIBbQJhZwkAuQkCCQDMCAICCCVkJWQlZCVkCQDMCAIJAKQDAQUGaGVpZ2h0CQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQFtCQDMCAIJAKQDAQUCYWcFA25pbAUBYwECYWgAAgolc19fY29uZmlnAQJhaQECYWoJAKwCAgIEJXNfXwUCYWoBAmFrAAIKJXNfX3RvdGFscwECYWwDAmFtAmFqAmFuCQC5CQIJAMwIAgIRJXMlcyVzJXNfX2hpc3RvcnkJAMwIAgUCYW0JAMwIAgUCYWoJAMwIAgUCYW4FA25pbAUBYwECYW8AAhUlc19fdXNkbkNsYWltRGlzYWJsZWQBAmFwAAIWJXNfX3VzZG5DbGFpbUVuZEhlaWdodAECYXEACQC5CQIJAMwIAgICJXMJAMwIAgIMcGVyaW9kTGVuZ3RoBQNuaWwFAWMBAmFyAAkAuQkCCQDMCAICAiVzCQDMCAICDWN1cnJlbnRQZXJpb2QFA25pbAUBYwECYXMBAmF0CQC5CQIJAMwIAgIEJXMlcwkAzAgCAhFwZXJpb2RTdGFydEhlaWdodAkAzAgCCQCkAwEFAmF0BQNuaWwFAWMBAmF1AQJhdAkAuQkCCQDMCAICBCVzJXMJAMwIAgIPcGVyaW9kRW5kSGVpZ2h0CQDMCAIJAKQDAQUCYXQFA25pbAUBYwECYXYACQC5CQIJAMwIAgICJXMJAMwIAgIcdXNkdFByaWNlQXNzZXRBbGxvd2FibGVSYXRpbwUDbmlsBQFjAQJhdwECYXgJALkJAgkAzAgCAgQlcyVzCQDMCAICFHRvdGFsUGVyaW9kQWxsb3dhbmNlCQDMCAIFAmF4BQNuaWwFAWMBAmF5AQJheAkAuQkCCQDMCAICBCVzJXMJAMwIAgITdXNlclBlcmlvZEFsbG93YW5jZQkAzAgCBQJheAUDbmlsBQFjAQJhegICYXgCYXQJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgIbcGVyaW9kVG90YWxBdmFpbGFibGVUb0NsYWltCQDMCAIFAmF4CQDMCAIJAKQDAQUCYXQFA25pbAUBYwECYUEDAmF4AmF0AmFqCQC5CQIJAMwIAgIIJXMlcyVzJXMJAMwIAgIacGVyaW9kVXNlckF2YWlsYWJsZVRvQ2xhaW0JAMwIAgUCYXgJAMwIAgkApAMBBQJhdAkAzAgCBQJhagUDbmlsBQFjAQJhQgAJALkJAgkAzAgCAgIlcwkAzAgCAhh1c2R0UHJpY2VBc3NldFN0YWJsZVBvb2wFA25pbAUBYwECYUMACQC5CQIJAMwIAgICJXMJAMwIAgILdXNkdEFzc2V0SWQFA25pbAUBYwECYUQBAmFFCQC5CQIJAMwIAgIEJXMlcwkAzAgCAhFwcmljZUFzc2V0QmFsYW5jZQkAzAgCBQJhRQUDbmlsBQFjAQJhRgECYUUJALkJAgkAzAgCAgQlcyVzCQDMCAICF2ludmVzdG9yUmVtYWluaW5nQW1vdW50CQDMCAIFAmFFBQNuaWwFAWMBAmFHAAkAuQkCCQDMCAICAiVzCQDMCAICFHRvdGFsUmVtYWluaW5nQW1vdW50BQNuaWwFAWMBAmFIAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAmFJAAIXJXNfX21hbmFnZXJWYXVsdEFkZHJlc3MBAmFKAAIWJXNfX2NsYWltQ2xvc2luZ0hlaWdodAACYUsJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmFKAAAAAQJhTAAJALUJAgkBAWEBCQECYWgABQFjAQJhTQECYU4JALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQJhTgkBAVkFAgEwAgEwAgEwAgEwAgEwBQFjAQJhTwAJAQJhTQEJAQJhawABAmFQAQJhagkBAmFNAQkBAmFpAQUCYWoBAmFRAQJhagkAtQkCCQEBYQEJAQJhaQEFAmFqBQFjAQJhUgAEAWoJAKIIAQkBAmFJAAMJAAECBQFqAgZTdHJpbmcEAmFTBQFqCQERQGV4dHJOYXRpdmUoMTA2MikBBQJhUwUEdGhpcwACYVQAAAACYVUAAQACYVYAAgACYVcAAwECYVgFAWICYVkCYVoCYmECYmIEAVoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhWQUBVAQCYWEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhWQUBVQQCYWIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhWQUBVgQCYWMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhWQUBVwQCYWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhWQUBWAQCYmMJAGQCBQFaCQCRAwIFAmFaBQJhVAQCYmQJAGQCBQJhYQkAkQMCBQJhWgUCYVUEAmJlCQECYUwABAFPCQCRAwIFAmJlBQFEBAJiZggJAQV2YWx1ZQEJAOwHAQkA2QQBBQFPCGRlY2ltYWxzBAJiZwkAawMFAmJiBQFlCQBsBgAKAAAFAmJmAAAAAAUERE9XTgQCYmgJAGUCCQBkAgUCYWIJAJEDAgUCYVoFAmFWBQJiYgQCYmkJAGQCCQBkAgUCYWMJAJEDAgUCYVoFAmFXBQJiZwQCYmoDCQBmAgAABQJiZAQCYmsJAGUCCQBlAgUCYmMFAmJoBQJiaQQCYmwDCQBmAgAABQJiawAABQJiawkBC1N0cmluZ0VudHJ5AgUBYgkBAmFlBQUCYmMFAmJsBQJiaAUCYmkFAmJhCQELU3RyaW5nRW50cnkCBQFiCQECYWUFBQJiYwUCYmQFAmJoBQJiaQUCYmEFAmJqAQJibQQCYWoBbQJhZwJibgkBC1N0cmluZ0VudHJ5AgkBAmFsAwIGaW52ZXN0BQJhagkA2AQBBQJibgkBAmFmAgUBbQUCYWcBAmJvBAJhagFtAmFnAmJuCQELU3RyaW5nRW50cnkCCQECYWwDAgVjbGFpbQUCYWoJANgEAQUCYm4JAQJhZgIFAW0FAmFnAQJicAMCYnECYWoCYm4EAmJlCQECYUwABAFKCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmUFAXgEAUsJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiZQUBeQQCYnIJAGQCBQFKBQFLBAFvCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmUFAXoEAUwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiZQUBQQQBTQkAkQMCBQJiZQUBQgQCYnMJANkEAQUBTQQBTgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJlBQFDBAFPCQCRAwIFAmJlBQFEBAJidAkA2QQBBQFPBAFQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmUFAUUEAmJ1CQClCAEFAmFqBAJidgkBAmFRAQUCYnUEAmJ3CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnYFAVQEAmJ4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnYFAVgEAmJ5AwkAZwIFAUoFAmJ4BQFKBQJieAQCYnoDCQBmAgUGaGVpZ2h0BQJicgUCYnIDCQBmAgUBSgUGaGVpZ2h0BQFKBQZoZWlnaHQEAmJBCQBlAgUCYnoFAmJ5BAJiQgkAawMFAmJ3BQJiQQUBSwQCYkMJAQFsBQUCYkIFAVAFAW8FAUwFAU4EAmJECQAAAgUCYnEFAU8EAmJFCQELdmFsdWVPckVsc2UCCQCgCAEJAQJhbwAHBAJiRgkAzAgCAwkBASEBAwUCYkQFAmJFBwYJAAIBAhZVU0ROIGNsYWltIGlzIGRpc2FibGVkBQNuaWwDCQAAAgUCYkYFAmJGAwkAAAIFAmJxBQFPCQCYCgYJAMwIAgAACQDMCAIJAQEtAQUCYkIJAMwIAgUCYkIJAMwIAgAABQNuaWwFAmJCBQJidAUCYnYFAmJ6CQDMCAIFAmJCCQDMCAIFAmJDBQNuaWwDCQAAAgUCYnEFAU0JAJgKBgkAzAgCAAAJAMwIAgkBAS0BBQJiQgkAzAgCAAAJAMwIAgUCYkMFA25pbAUCYkMFAmJzBQJidgUCYnoJAMwIAgUCYkIJAMwIAgUCYkMFA25pbAkAAgEJAKwCAgIVdW5zdXBwb3J0ZWQgYXNzZXRJZDogBQJicQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECYkcEAU8CYnUCYkgCYkkEAmJKCQEFdmFsdWUBCQCfCAEJAQJhdwEFAU8EAmJLCQEFdmFsdWUBCQCfCAEJAQJheQEFAU8EAmJMCQEFdmFsdWUBCQCfCAEJAQJhcQAEAmJNCQELdmFsdWVPckVsc2UCCQCfCAEJAQJhcgAAAAQCYk4JAQlpc0RlZmluZWQBCQCfCAEJAQJhdQEAAAQCYk8DCQBmAgUCYk0AAAQCYlAJAQV2YWx1ZQEJAJ8IAQkBAmFzAQUCYk0EAmJRCQEFdmFsdWUBCQCfCAEJAQJhdQEFAmJNBAJiUgMJAGYCBQZoZWlnaHQFAmJRBAJiUwkAZAIFAmJNAAEEAmJUAwkAZgIFBmhlaWdodAkAZAIFAmJRBQJiTAQCYlUJAGoCCQBlAgUGaGVpZ2h0BQJiUQUCYkwDCQAAAgUCYlUAAAkAZAIJAGUCBQZoZWlnaHQFAmJMAAEJAGUCBQZoZWlnaHQFAmJVCQBkAgUCYlEAAQQCYlYJAGUCCQBkAgUCYlQFAmJMAAEJAJUKAwUCYlMFAmJUBQJiVgkAlQoDBQJiTQUCYlAFAmJRBAJiUwgFAmJSAl8xBAJiVAgFAmJSAl8yBAJiVggFAmJSAl8zCQCVCgMFAmJTBQJiVAUCYlYDBQJiTgQCYlcJAQV2YWx1ZQEJAJ8IAQkBAmFzAQAABAJiWAkBBXZhbHVlAQkAnwgBCQECYXUBAAAEAmJZAwkAZgIFBmhlaWdodAUCYlgEAmJTCQBkAgUCYk0AAQQCYlQJAGQCBQJiWAABBAJiVgkAZQIJAGQCBQJiVAUCYkwAAQkAlQoDBQJiUwUCYlQFAmJWCQCVCgMFAmJNBQJiVwUCYlgEAmJTCAUCYlkCXzEEAmJUCAUCYlkCXzIEAmJWCAUCYlkCXzMJAJUKAwUCYlMFAmJUBQJiVgkAlQoDBQJiTQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQECYXMBBQJiTQUGaGVpZ2h0CQELdmFsdWVPckVsc2UCCQCfCAEJAQJhdQEFAmJNCQBlAgkAZAIFBmhlaWdodAUCYkwAAQQCYlMIBQJiTwJfMQQCYlQIBQJiTwJfMgQCYlYIBQJiTwJfMwQCYloJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAmF6AgUBTwUCYlMFAmJKBAJjYQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQECYUEDBQFPBQJiUwUCYnUFAmJLBAJiYgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQECYUQBBQJidQAABAJjYgkAlwMBCQDMCAIJAGQCBQJiSAUCYmIJAMwIAgUCYloJAMwIAgUCY2EFA25pbAQCY2MJAQV2YWx1ZQEJAJ8IAQkBAmF2AAQCY2QFAWUEAmNlCgACY2YJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQkAoggBCQECYUIAAiFwdXRPbmVUa25WMldpdGhvdXRUYWtlRmVlUkVBRE9OTFkJAMwIAgUCY2QJAMwIAgUBTwUDbmlsBQNuaWwDCQABAgUCY2YCDyhJbnQsIEludCwgSW50KQUCY2YJAAIBCQCsAgIJAAMBBQJjZgIkIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50LCBJbnQpAwkAAAIFAmNlBQJjZQQCY2cIBQJjZQJfMwQCY2gIBQJjZQJfMgQCY2kIBQJjZQJfMQQCY2oJAQV2YWx1ZQEJAKIIAQkBAmFDAAQCY2sKAAJjZgkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBCQCiCAEJAQJhQgACE2dldE9uZVRrblYyUkVBRE9OTFkJAMwIAgUCY2oJAMwIAgUCY2kFA25pbAUDbmlsAwkAAQIFAmNmAgooSW50LCBJbnQpBQJjZgkAAgEJAKwCAgkAAwEFAmNmAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAwkAAAIFAmNrBQJjawQCY2wIBQJjawJfMgQCY20IBQJjawJfMQQCY24JAGsDBQJjZAUBZQUCY20EAmNvCQBlAgUCYlYFBmhlaWdodAkAnAoKBQJjYgUCYloFAmNhBQJiSQUCY2MFAmNuBQJjbwUCYlMFAmJUBQJiVgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECY3AABAJjcQkBAmFSAAQBagkAnQgCBQJjcQkBAmFIAAMJAAECBQFqAgZTdHJpbmcEAmFTBQFqCQDZBAEFAmFTAwkAAQIFAWoCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECY3IBAmNzBAJjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAFqCQECY3AAAwkAAQIFAWoCCkJ5dGVWZWN0b3IEAmN1BQFqAwkAAAIIBQJjcw9jYWxsZXJQdWJsaWNLZXkFAmN1BgUCY3QDCQABAgUBagIEVW5pdAMJAAACCAUCY3MGY2FsbGVyBQR0aGlzBgUCY3QJAAIBAgtNYXRjaCBlcnJvcgYCY3MBC2NvbnN0cnVjdG9yBwFIAUkBSgFLAW8BTwFRBAFMCQBoAgkAaAIAZADoBwDoBwQCY3YJAGQCBQFIBQFJAwkBCWlzRGVmaW5lZAEJAKIIAQkBAmFoAAkAAgECE2FscmVhZHkgaW5pdGlhbGl6ZWQDCQECIT0CAiMzUE1FSEx4MWo2emVyYXJaVFlmc0dxRGVlWnFRb01weHE1UwkApQgBCAUCY3MGY2FsbGVyCQACAQIObm90IGF1dGhvcml6ZWQDCQECIT0CCQCQAwEIBQJjcwhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAMJAGcCBQJjdgUBSgkAAgECJmNsYWltU3RhcnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gaWRvRW5kBAJjdwkBBXZhbHVlAQkAkQMCCAUCY3MIcGF5bWVudHMAAAQCYnMJAQV2YWx1ZQEIBQJjdwdhc3NldElkBAJjeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJzAhtmYWlsIHRvIGxvYWQgaWRvIGFzc2V0IGluZm8EAU0JANgEAQUCYnMEAU4JAGwGAAoAAAgFAmN4CGRlY2ltYWxzAAAAAAUERE9XTgQCYnQJANkEAQUBTwQCY3kJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJidAIdZmFpbCB0byBsb2FkIHByaWNlIGFzc2V0IGluZm8EAVAJAGwGAAoAAAgFAmN5CGRlY2ltYWxzAAAAAAUERE9XTgQCY3oJAQJhTwAEAmNBCQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhaAAJAQFTDAUBSAUBSQUBSgUBSwUBbwUBTAUBTQUBTgUBTwUBUAUBUQgFAmN3BmFtb3VudAkAzAgCCQECYVgFCQECYWsABQJjegUCY0EFAUoAAAUDbmlsAmNzAQZpbnZlc3QABAJiZQkBAmFMAAQBSAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJlBQF2BAFJCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmUFAXcEAmN2CQBkAgUBSAUBSQQBSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJlBQF4BAFLCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmUFAXkEAW8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiZQUBegQBTAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJlBQFBBAFNCQCRAwIFAmJlBQFCBAJicwkA2QQBBQFNBAFOCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmUFAUMEAU8JAJEDAgUCYmUFAUQEAmJ0CQDZBAEFAU8EAVAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiZQUBRQQCY0IJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiZQUBRgQCYWoJAKUIAQgFAmNzBmNhbGxlcgMJAGYCBQFIBQZoZWlnaHQJAAIBAhxpZG8gaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgeWV0AwkAZgIFBmhlaWdodAUCY3YJAAIBAhppZG8gaGFzIGJlZW4gYWxyZWFkeSBlbmRlZAMJAQIhPQIJAJADAQgFAmNzCHBheW1lbnRzAAEJAAIBAh1leGFjdGx5IDEgcGF5bWVudCBpcyBleHBlY3RlZAQCY3cJAQV2YWx1ZQEJAJEDAggFAmNzCHBheW1lbnRzAAAEAmNDCQEFdmFsdWUBCAUCY3cHYXNzZXRJZAQCY0QIBQJjdwZhbW91bnQDCQECIT0CBQJjQwUCYnQJAAIBCQCsAgIJAKwCAgIaaW52YWxpZCBwYXltZW50IGFzc2V0IGlkOiAJANgEAQUCY0MCDCBpcyBleHBlY3RlZAQCY0UJAQJhUAEFAmFqBAJjegkBAmFPAAQCY0YJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY3oFAVQFAmNEBAJjRwkAaAIFAmNGAGQDCQBmAgUCY0cJAPAHAgUEdGhpcwUCYnMJAAIBAjlJRE8gYXNzZXQgaGFzIGJlZW4gLSBzb2xkIGNvbnNpZGVyIHRvIHVzZSBzbWFsbGVyIHBheW1lbnQEAmNBCQDMCAIFAmNECQDMCAIFAmNECQDMCAIAAAkAzAgCAAAFA25pbAkAzAgCCQECYVgFCQECYWkBBQJhagUCY0UFAmNBBQFKAAAJAMwIAgkBAmFYBQkBAmFrAAUCY3oFAmNBBQFKAAAJAMwIAgkBAmJtBAUCYWoFAmNEAAAIBQJjcw10cmFuc2FjdGlvbklkBQNuaWwCY3MBBWNsYWltAgJicQJidQQCY0gJAKUIAQgFAmNzBmNhbGxlcgMJAQIhPQIFAmJ1BQJjSAkAAgECDm5vdCBhdXRob3JpemVkBAJiZQkBAmFMAAQBTwkAkQMCBQJiZQUBRAQCY0kJAQJicAMFAmJxCAUCY3MGY2FsbGVyCAUCY3MNdHJhbnNhY3Rpb25JZAQCY0EIBQJjSQJfMQQCYkgIBQJjSQJfMgQCY0oIBQJjSQJfMwQCYnYIBQJjSQJfNAQCYnoIBQJjSQJfNQQCY0sJAJEDAgUCY0EFAmFWBAJjTAkAkQMCBQJjQQUCYVcEAmJiCQELdmFsdWVPckVsc2UCCQCfCAEJAQJhRAEFAmJ1AAAEAmJmCAkBBXZhbHVlAQkA7AcBCQDZBAEFAU8IZGVjaW1hbHMEAmJqAwkAAAIFAmJxBQFPBAJjTQkBAmJHBAUBTwUCYnUFAmJICQCRAwIFAmNBBQJhVgQCY2IIBQJjTQJfMQQCYloIBQJjTQJfMgQCY2EIBQJjTQJfMwQCYkkIBQJjTQJfNAQCY2MIBQJjTQJfNQQCY24IBQJjTQJfNgQCY28IBQJjTQJfNwQCYlMIBQJjTQJfOAQCYlQIBQJjTQJfOQQCYlYIBQJjTQNfMTAEAmJGCQDMCAIDCQBmAgUCY2EAAAYJAQFmAQI6dW5hdmFpbGFibGUgdG8gY2xhaW0gYmVjYXVzZSB1c2VyIHBlcmlvZCBhbGxvd2FuY2UgcmVhY2hlZAkAzAgCAwkAZgIFAmJaAAAGCQEBZgECO3VuYXZhaWxhYmxlIHRvIGNsYWltIGJlY2F1c2UgdG90YWwgcGVyaW9kIGFsbG93YW5jZSByZWFjaGVkCQDMCAIDCQBmAgUCY2IAAAYJAQFmAQIQbm90aGluZyB0byBjbGFpbQkAzAgCAwkAZgIFAmNjBQJjbgYJAQFmAQJPdW5hdmFpbGFibGUgdG8gY2xhaW0gYmVjYXVzZSB1c2RuIHByaWNlIGxvd2VyIHRoYW4gdXNkdFByaWNlQXNzZXRBbGxvd2FibGVSYXRpbwkAzAgCAwMDCQECIT0CBQJicQUBTwYJAAACBQJhSwAABgkAZgIFAmFLBQZoZWlnaHQGCQEBZgECEUNsYWltIGlzIGRpc2FibGVkBQNuaWwDCQAAAgUCYkYFAmJGBAJjTgkAZQIFAmJaBQJjYgQCY08JAGUCBQJjYQUCY2IEAmJqAwkAZgIFAmJiBQJjYgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCY3MGY2FsbGVyBQJjYgUCY0oJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhRAEFAmJ1CQBlAgUCYmIFAmNiBQNuaWwEAmNQCQC1CQIJAQFoAQkA/AcEBQR0aGlzAg1jbGFpbVJFQURPTkxZCQDMCAIFAU8JAMwIAgUCYnUFA25pbAUDbmlsBQFjAwkAAAIFAmNQBQJjUAQCY1EJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjUAADBAJjUgMJAAACBQJjUQUCY2IEAmNTCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnYFAVQEAmNUCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnYFAVUEAmNVCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnYFAVYEAmNWCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnYFAVcEAmNXCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYnYFAVgEAmNYCQDMCAIJAKQDAQUCY1MJAMwIAgIBMAkAzAgCCQCkAwEFAmNVCQDMCAIJAKQDAQUCY1YJAMwIAgkApAMBBQJjVwUDbmlsBAJjWQkBAmFPAAQCY1oJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjWQUBVAQCZGEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjWQUBVQQCZGIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjWQUBVgQCZGMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjWQUBVwQCZGQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjWQUBWAQCZGUJAGUCBQJkYQUCY1QEAmRmCQDMCAIJAKQDAQUCY1oJAMwIAgkApAMBBQJkZQkAzAgCCQCkAwEFAmRiCQDMCAIJAKQDAQUCZGMJAMwIAgkApAMBBQJkZAUDbmlsBAJkZwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAmFHAAAABQJjVAkAzAgCCQELU3RyaW5nRW50cnkCCQECYUYBBQJidQkApAMBBQJjVAkAzAgCCQELU3RyaW5nRW50cnkCCQECYUcACQCkAwEFAmRnCQDMCAIJAQJhWAUJAQJhaQEFAmJ1BQJjWAUCY0EFAmJ6AAAJAMwIAgkBAmFYBQkBAmFrAAUCZGYFAmNBBQJiegAABQNuaWwJAMwIAgkBAmFYBQkBAmFpAQUCYnUFAmJ2BQJjQQUCYnoAAAkAzAgCCQECYVgFCQECYWsACQECYU8ABQJjQQUCYnoAAAUDbmlsBAJkaAkAZQIJAGQCBQJiYgUCYkgFAmNiCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmNzBmNhbGxlcgUCY2IFAmNKCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYUQBBQJidQUCZGgFA25pbAUCY1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXIABQJiUwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFzAQUCYlMFAmJUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXUBBQJiUwUCYlYJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhegIFAU8FAmJTBQJjTgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFBAwUBTwUCYlMFAmJ1BQJjTwkAzAgCCQECYm8EBQJidQUCY2IFAmNMCAUCY3MNdHJhbnNhY3Rpb25JZAUDbmlsBQJiagUEdW5pdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQCZGkJAGsDBQJiYgUBZQkAbAYACgAABQJiZgAAAAAFBERPV04JAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCY3MGY2FsbGVyCQBkAgUCYkgFAmRpBQJjSgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFEAQUCYnUAAAkAzAgCCQECYVgFCQECYWkBBQJidQUCYnYFAmNBBQJiegUCYmIJAMwIAgkBAmFYBQkBAmFrAAkBAmFPAAUCY0EFAmJ6BQJiYgkAzAgCCQECYm8EBQJidQUCY0sJAGQCBQJjTAUCZGkIBQJjcw10cmFuc2FjdGlvbklkBQNuaWwFBHVuaXQFAmJqAmNzARJjbGVhblJlbWFpbmdBbW91bnQBAmJ1BAFPCQCRAwIJAQJhTAAFAUQEAmNQCQC1CQIJAQFoAQkA/AcEBQR0aGlzAg1jbGFpbVJFQURPTkxZCQDMCAIFAU8JAMwIAgUCYnUFA25pbAUDbmlsBQFjAwkAAAIFAmNQBQJjUAQCY1EJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJjUAACBAJkagMJAAACBQJjUQAABgkBAWYBAhp1c2VyIGhhdmUgdW5jbGFpbWVkIGFzc2V0cwMJAAACBQJkagUCZGoEAmRrCQC1CQIJAQV2YWx1ZQEJAKIIAQkBAmFpAQUCYnUFAWMEAmNTCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAVQEAmNUCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAVUEAmNVCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAVYEAmNWCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAVcEAmNXCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGsFAVgEAmRsAwkBAiE9AgUCY1QAAAYJAQFmAQIkaW52ZXN0b3JSZW1haW5pbmdBbW91bnQgYWxyZWFkeSB6ZXJvAwkAAAIFAmRsBQJkbAQCZG0JALkJAgkAzAgCAgolZCVkJWQlZCVkCQDMCAIJAKQDAQUCY1MJAMwIAgIBMAkAzAgCCQCkAwEFAmNVCQDMCAIJAKQDAQUCY1YJAMwIAgkApAMBBQJjVwUDbmlsBQFjBAJjWQkAtQkCCQEFdmFsdWUBCQCiCAEJAQJhawAFAWMEAmNaCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY1kFAVQEAmRhCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY1kFAVUEAmRiCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY1kFAVYEAmRjCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY1kFAVcEAmRkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCY1kFAVgEAmRuCQC5CQIJAMwIAgIKJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNaCQDMCAIJAKQDAQkAZQIFAmRhBQJjVAkAzAgCCQCkAwEFAmRiCQDMCAIJAKQDAQUCZGMJAMwIAgkApAMBBQJkZAUDbmlsBQFjBAJkZwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAmFHAAAABQJjVAkAzAgCCQELU3RyaW5nRW50cnkCCQECYUYBBQJidQkApAMBBQJjVAkAzAgCCQELU3RyaW5nRW50cnkCCQECYUcACQCkAwEFAmRnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhaQEFAmJ1BQJkbQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWsABQJkbgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmNzAQ1jbGFpbVJFQURPTkxZAgJicQJidQQCY0kJAQJicAMFAmJxCQERQGV4dHJOYXRpdmUoMTA2MikBBQJidQkA2QQBAgAEAmNBCAUCY0kCXzEEAmJICAUCY0kCXzIEAmNKCAUCY0kCXzMEAmJ2CAUCY0kCXzQEAmJ6CAUCY0kCXzUEAmRvCAUCY0kCXzYEAmNRCQCRAwIFAmRvAAAEAmRwCQCRAwIFAmRvAAEJAJQKAgUDbmlsCQC5CQIJAMwIAgIGJXMlZCVkCQDMCAIFAmJ1CQDMCAIJAKQDAQUCY1EJAMwIAgkApAMBBQJkcAUDbmlsBQFjAmNzAQ9jbGFpbVYyUkVBRE9OTFkCAmJxAmJ1BAJjSQkBAmJwAwUCYnEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmJ1CQDZBAECAAQCY0EIBQJjSQJfMQQCYkgIBQJjSQJfMgQCY0oIBQJjSQJfMwQCYnYIBQJjSQJfNAQCYnoIBQJjSQJfNQQCZG8IBQJjSQJfNgQCY1EJAJEDAgUCZG8AAAQCZHAJAJEDAgUCZG8AAQQCYmUJAQJhTAAEAU8JAJEDAgUCYmUFAUQEAmJiCQELdmFsdWVPckVsc2UCCQCfCAEJAQJhRAEFAmJ1AAAEAmRpCQBoAgUCYmIAZAQCZHEJAGQCBQJkcAUCZGkEAmRyCQECYkcEBQFPBQJidQUCYkgJAJEDAgUCY0EFAmFWBAJjYggFAmRyAl8xBAJiWggFAmRyAl8yBAJjYQgFAmRyAl8zBAJiSQgFAmRyAl80BAJjYwgFAmRyAl81BAJjbggFAmRyAl82BAJjbwgFAmRyAl83BAJiUwgFAmRyAl84BAJiVAgFAmRyAl85BAJiVggFAmRyA18xMAQCZHMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBAmF1AQUCYlMAAAQCZHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkBAmFRAQUCYnUFAVYFAmJiBAJkdQMJAGYCBQZoZWlnaHQFAmRzBAJkdgkBBXZhbHVlAQkAnwgBCQECYXEABAJkdwkBBXZhbHVlAQkAnwgBCQECYXkBBQFPBAJkeAkBBXZhbHVlAQkAnwgBCQECYXcBBQFPCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCZHEJAMwIAgkApAMBBQJkdwkAzAgCCQCkAwEFAmR4CQDMCAIJAKQDAQUCY2MJAMwIAgkApAMBBQJjbgkAzAgCCQCkAwEFAmR2CQDMCAIJAKQDAQUCZHQFA25pbAUBYwkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmRxCQDMCAIJAKQDAQUCY2IJAMwIAgkApAMBBQJiWgkAzAgCCQCkAwEFAmNjCQDMCAIJAKQDAQUCY24JAMwIAgkApAMBBQJjbwkAzAgCCQCkAwEFAmR0BQNuaWwFAWMJAJQKAgUDbmlsBQJkdQECZHkBAmR6AAQCZEEEAWoJAQJjcAADCQABAgUBagIKQnl0ZVZlY3RvcgQCY3UFAWoFAmN1AwkAAQIFAWoCBFVuaXQIBQJkeQ9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCZHkJYm9keUJ5dGVzCQCRAwIIBQJkeQZwcm9vZnMAAAUCZEETxv4A", "height": 2903726, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4f29r3Rifad8HW7x6XTxQu9UJTY38KEgaB7s9HGyiYyY Next: 6wXwheUY3rpdrUDcVj4odsPa7cnjXsvPJCCmWXt3xo91 Diff:
OldNewDifferences
146146 func aI () = "%s__managerVaultAddress"
147147
148148
149-func aJ () = split(a(ah()), c)
149+func aJ () = "%s__claimClosingHeight"
150150
151151
152-func aK (aL) = split(valueOrElse(getString(aL), Y("0", "0", "0", "0", "0")), c)
152+let aK = valueOrElse(getInteger(this, aJ()), 0)
153+
154+func aL () = split(a(ah()), c)
153155
154156
155-func aM () = aK(ak())
157+func aM (aN) = split(valueOrElse(getString(aN), Y("0", "0", "0", "0", "0")), c)
156158
157159
158-func aN (aj) = aK(ai(aj))
160+func aO () = aM(ak())
159161
160162
161-func aO (aj) = split(a(ai(aj)), c)
163+func aP (aj) = aM(ai(aj))
162164
163165
164-func aP () = {
166+func aQ (aj) = split(a(ai(aj)), c)
167+
168+
169+func aR () = {
165170 let j = getString(aI())
166171 if ($isInstanceOf(j, "String"))
167172 then {
168- let aQ = j
169- addressFromStringValue(aQ)
173+ let aS = j
174+ addressFromStringValue(aS)
170175 }
171176 else this
172177 }
173178
174179
175-let aR = 0
180+let aT = 0
176181
177-let aS = 1
182+let aU = 1
178183
179-let aT = 2
184+let aV = 2
180185
181-let aU = 3
186+let aW = 3
182187
183-func aV (b,aW,aX,aY,aZ) = {
184- let Z = parseIntValue(aW[T])
185- let aa = parseIntValue(aW[U])
186- let ab = parseIntValue(aW[V])
187- let ac = parseIntValue(aW[W])
188- let ad = parseIntValue(aW[X])
189- let ba = (Z + aX[aR])
190- let bb = (aa + aX[aS])
191- let bc = aJ()
192- let O = bc[D]
193- let bd = value(assetInfo(fromBase58String(O))).decimals
194- let be = fraction(aZ, e, pow(10, 0, bd, 0, 0, DOWN))
195- let bf = ((ab + aX[aT]) - aZ)
196- let bg = ((ac + aX[aU]) + be)
197- let bh = if ((0 > bb))
188+func aX (b,aY,aZ,ba,bb) = {
189+ let Z = parseIntValue(aY[T])
190+ let aa = parseIntValue(aY[U])
191+ let ab = parseIntValue(aY[V])
192+ let ac = parseIntValue(aY[W])
193+ let ad = parseIntValue(aY[X])
194+ let bc = (Z + aZ[aT])
195+ let bd = (aa + aZ[aU])
196+ let be = aL()
197+ let O = be[D]
198+ let bf = value(assetInfo(fromBase58String(O))).decimals
199+ let bg = fraction(bb, e, pow(10, 0, bf, 0, 0, DOWN))
200+ let bh = ((ab + aZ[aV]) - bb)
201+ let bi = ((ac + aZ[aW]) + bg)
202+ let bj = if ((0 > bd))
198203 then {
199- let bi = ((ba - bf) - bg)
200- let bj = if ((0 > bi))
204+ let bk = ((bc - bh) - bi)
205+ let bl = if ((0 > bk))
201206 then 0
202- else bi
203- StringEntry(b, ae(ba, bj, bf, bg, aY))
207+ else bk
208+ StringEntry(b, ae(bc, bl, bh, bi, ba))
204209 }
205- else StringEntry(b, ae(ba, bb, bf, bg, aY))
206- bh
210+ else StringEntry(b, ae(bc, bd, bh, bi, ba))
211+ bj
207212 }
208213
209214
210-func bk (aj,m,ag,bl) = StringEntry(al("invest", aj, toBase58String(bl)), af(m, ag))
215+func bm (aj,m,ag,bn) = StringEntry(al("invest", aj, toBase58String(bn)), af(m, ag))
211216
212217
213-func bm (aj,m,ag,bl) = StringEntry(al("claim", aj, toBase58String(bl)), af(m, ag))
218+func bo (aj,m,ag,bn) = StringEntry(al("claim", aj, toBase58String(bn)), af(m, ag))
214219
215220
216-func bn (bo,aj,bl) = {
217- let bc = aJ()
218- let J = parseIntValue(bc[x])
219- let K = parseIntValue(bc[y])
220- let bp = (J + K)
221- let o = parseIntValue(bc[z])
222- let L = parseIntValue(bc[A])
223- let M = bc[B]
224- let bq = fromBase58String(M)
225- let N = parseIntValue(bc[C])
226- let O = bc[D]
227- let br = fromBase58String(O)
228- let P = parseIntValue(bc[E])
229- let bs = toString(aj)
230- let bt = aO(bs)
231- let bu = parseIntValue(bt[T])
232- let bv = parseIntValue(bt[X])
233- let bw = if ((J >= bv))
221+func bp (bq,aj,bn) = {
222+ let be = aL()
223+ let J = parseIntValue(be[x])
224+ let K = parseIntValue(be[y])
225+ let br = (J + K)
226+ let o = parseIntValue(be[z])
227+ let L = parseIntValue(be[A])
228+ let M = be[B]
229+ let bs = fromBase58String(M)
230+ let N = parseIntValue(be[C])
231+ let O = be[D]
232+ let bt = fromBase58String(O)
233+ let P = parseIntValue(be[E])
234+ let bu = toString(aj)
235+ let bv = aQ(bu)
236+ let bw = parseIntValue(bv[T])
237+ let bx = parseIntValue(bv[X])
238+ let by = if ((J >= bx))
234239 then J
235- else bv
236- let bx = if ((height > bp))
237- then bp
240+ else bx
241+ let bz = if ((height > br))
242+ then br
238243 else if ((J > height))
239244 then J
240245 else height
241- let by = (bx - bw)
242- let bz = fraction(bu, by, K)
243- let bA = l(bz, P, o, L, N)
244- let bB = (bo == O)
245- let bC = valueOrElse(getBoolean(ao()), false)
246- let bD = [if (!(if (bB)
247- then bC
246+ let bA = (bz - by)
247+ let bB = fraction(bw, bA, K)
248+ let bC = l(bB, P, o, L, N)
249+ let bD = (bq == O)
250+ let bE = valueOrElse(getBoolean(ao()), false)
251+ let bF = [if (!(if (bD)
252+ then bE
248253 else false))
249254 then true
250255 else throw("USDN claim is disabled")]
251- if ((bD == bD))
252- then if ((bo == O))
253- then $Tuple6([0, -(bz), bz, 0], bz, br, bt, bx, [bz, bA])
254- else if ((bo == M))
255- then $Tuple6([0, -(bz), 0, bA], bA, bq, bt, bx, [bz, bA])
256- else throw(("unsupported assetId: " + bo))
256+ if ((bF == bF))
257+ then if ((bq == O))
258+ then $Tuple6([0, -(bB), bB, 0], bB, bt, bv, bz, [bB, bC])
259+ else if ((bq == M))
260+ then $Tuple6([0, -(bB), 0, bC], bC, bs, bv, bz, [bB, bC])
261+ else throw(("unsupported assetId: " + bq))
257262 else throw("Strict value is not equal to itself.")
258263 }
259264
260265
261-func bE (O,bs,bF,bG) = {
262- let bH = value(getInteger(aw(O)))
263- let bI = value(getInteger(ay(O)))
264- let bJ = value(getInteger(aq()))
265- let bK = valueOrElse(getInteger(ar()), 0)
266- let bL = isDefined(getInteger(au(0)))
267- let bM = if ((bK > 0))
266+func bG (O,bu,bH,bI) = {
267+ let bJ = value(getInteger(aw(O)))
268+ let bK = value(getInteger(ay(O)))
269+ let bL = value(getInteger(aq()))
270+ let bM = valueOrElse(getInteger(ar()), 0)
271+ let bN = isDefined(getInteger(au(0)))
272+ let bO = if ((bM > 0))
268273 then {
269- let bN = value(getInteger(as(bK)))
270- let bO = value(getInteger(au(bK)))
271- let bP = if ((height > bO))
274+ let bP = value(getInteger(as(bM)))
275+ let bQ = value(getInteger(au(bM)))
276+ let bR = if ((height > bQ))
272277 then {
273- let bQ = (bK + 1)
274- let bR = if ((height > (bO + bJ)))
278+ let bS = (bM + 1)
279+ let bT = if ((height > (bQ + bL)))
275280 then {
276- let bS = ((height - bO) % bJ)
277- if ((bS == 0))
278- then ((height - bJ) + 1)
279- else (height - bS)
281+ let bU = ((height - bQ) % bL)
282+ if ((bU == 0))
283+ then ((height - bL) + 1)
284+ else (height - bU)
280285 }
281- else (bO + 1)
282- let bT = ((bR + bJ) - 1)
283- $Tuple3(bQ, bR, bT)
286+ else (bQ + 1)
287+ let bV = ((bT + bL) - 1)
288+ $Tuple3(bS, bT, bV)
284289 }
285- else $Tuple3(bK, bN, bO)
286- let bQ = bP._1
287- let bR = bP._2
288- let bT = bP._3
289- $Tuple3(bQ, bR, bT)
290+ else $Tuple3(bM, bP, bQ)
291+ let bS = bR._1
292+ let bT = bR._2
293+ let bV = bR._3
294+ $Tuple3(bS, bT, bV)
290295 }
291- else if (bL)
296+ else if (bN)
292297 then {
293- let bU = value(getInteger(as(0)))
294- let bV = value(getInteger(au(0)))
295- let bW = if ((height > bV))
298+ let bW = value(getInteger(as(0)))
299+ let bX = value(getInteger(au(0)))
300+ let bY = if ((height > bX))
296301 then {
297- let bQ = (bK + 1)
298- let bR = (bV + 1)
299- let bT = ((bR + bJ) - 1)
300- $Tuple3(bQ, bR, bT)
302+ let bS = (bM + 1)
303+ let bT = (bX + 1)
304+ let bV = ((bT + bL) - 1)
305+ $Tuple3(bS, bT, bV)
301306 }
302- else $Tuple3(bK, bU, bV)
303- let bQ = bW._1
304- let bR = bW._2
305- let bT = bW._3
306- $Tuple3(bQ, bR, bT)
307+ else $Tuple3(bM, bW, bX)
308+ let bS = bY._1
309+ let bT = bY._2
310+ let bV = bY._3
311+ $Tuple3(bS, bT, bV)
307312 }
308- else $Tuple3(bK, valueOrElse(getInteger(as(bK)), height), valueOrElse(getInteger(au(bK)), ((height + bJ) - 1)))
309- let bQ = bM._1
310- let bR = bM._2
311- let bT = bM._3
312- let bX = valueOrElse(getInteger(az(O, bQ)), bH)
313- let bY = valueOrElse(getInteger(aA(O, bQ, bs)), bI)
314- let aZ = valueOrElse(getInteger(aD(bs)), 0)
315- let bZ = min([(bF + aZ), bX, bY])
316- let ca = value(getInteger(av()))
317- let cb = e
318- let cc = {
319- let cd = invoke(addressFromStringValue(value(getString(aB()))), "putOneTknV2WithoutTakeFeeREADONLY", [cb, O], nil)
320- if ($isInstanceOf(cd, "(Int, Int, Int)"))
321- then cd
322- else throw(($getType(cd) + " couldn't be cast to (Int, Int, Int)"))
313+ else $Tuple3(bM, valueOrElse(getInteger(as(bM)), height), valueOrElse(getInteger(au(bM)), ((height + bL) - 1)))
314+ let bS = bO._1
315+ let bT = bO._2
316+ let bV = bO._3
317+ let bZ = valueOrElse(getInteger(az(O, bS)), bJ)
318+ let ca = valueOrElse(getInteger(aA(O, bS, bu)), bK)
319+ let bb = valueOrElse(getInteger(aD(bu)), 0)
320+ let cb = min([(bH + bb), bZ, ca])
321+ let cc = value(getInteger(av()))
322+ let cd = e
323+ let ce = {
324+ let cf = invoke(addressFromStringValue(value(getString(aB()))), "putOneTknV2WithoutTakeFeeREADONLY", [cd, O], nil)
325+ if ($isInstanceOf(cf, "(Int, Int, Int)"))
326+ then cf
327+ else throw(($getType(cf) + " couldn't be cast to (Int, Int, Int)"))
323328 }
324- if ((cc == cc))
329+ if ((ce == ce))
325330 then {
326- let ce = cc._3
327- let cf = cc._2
328- let cg = cc._1
329- let ch = value(getString(aC()))
330- let ci = {
331- let cd = invoke(addressFromStringValue(value(getString(aB()))), "getOneTknV2READONLY", [ch, cg], nil)
332- if ($isInstanceOf(cd, "(Int, Int)"))
333- then cd
334- else throw(($getType(cd) + " couldn't be cast to (Int, Int)"))
331+ let cg = ce._3
332+ let ch = ce._2
333+ let ci = ce._1
334+ let cj = value(getString(aC()))
335+ let ck = {
336+ let cf = invoke(addressFromStringValue(value(getString(aB()))), "getOneTknV2READONLY", [cj, ci], nil)
337+ if ($isInstanceOf(cf, "(Int, Int)"))
338+ then cf
339+ else throw(($getType(cf) + " couldn't be cast to (Int, Int)"))
335340 }
336- if ((ci == ci))
341+ if ((ck == ck))
337342 then {
338- let cj = ci._2
339- let ck = ci._1
340- let cl = fraction(cb, e, ck)
341- let cm = (bT - height)
342- $Tuple10(bZ, bX, bY, bG, ca, cl, cm, bQ, bR, bT)
343+ let cl = ck._2
344+ let cm = ck._1
345+ let cn = fraction(cd, e, cm)
346+ let co = (bV - height)
347+ $Tuple10(cb, bZ, ca, bI, cc, cn, co, bS, bT, bV)
343348 }
344349 else throw("Strict value is not equal to itself.")
345350 }
347352 }
348353
349354
350-func cn () = {
351- let co = aP()
352- let j = getString(co, aH())
355+func cp () = {
356+ let cq = aR()
357+ let j = getString(cq, aH())
353358 if ($isInstanceOf(j, "String"))
354359 then {
355- let aQ = j
356- fromBase58String(aQ)
360+ let aS = j
361+ fromBase58String(aS)
357362 }
358363 else if ($isInstanceOf(j, "Unit"))
359364 then unit
361366 }
362367
363368
364-func cp (cq) = {
365- let cr = throw("Permission denied")
366- let j = cn()
369+func cr (cs) = {
370+ let ct = throw("Permission denied")
371+ let j = cp()
367372 if ($isInstanceOf(j, "ByteVector"))
368373 then {
369- let cs = j
370- if ((cq.callerPublicKey == cs))
374+ let cu = j
375+ if ((cs.callerPublicKey == cu))
371376 then true
372- else cr
377+ else ct
373378 }
374379 else if ($isInstanceOf(j, "Unit"))
375- then if ((cq.caller == this))
380+ then if ((cs.caller == this))
376381 then true
377- else cr
382+ else ct
378383 else throw("Match error")
379384 }
380385
381386
382-@Callable(cq)
387+@Callable(cs)
383388 func constructor (H,I,J,K,o,O,Q) = {
384389 let L = ((100 * 1000) * 1000)
385- let ct = (H + I)
390+ let cv = (H + I)
386391 if (isDefined(getString(ah())))
387392 then throw("already initialized")
388- else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString(cq.caller)))
393+ else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString(cs.caller)))
389394 then throw("not authorized")
390- else if ((size(cq.payments) != 1))
395+ else if ((size(cs.payments) != 1))
391396 then throw("exactly 1 payment must be attached")
392- else if ((ct >= J))
397+ else if ((cv >= J))
393398 then throw("claimStart must be greater than idoEnd")
394399 else {
395- let cu = value(cq.payments[0])
396- let bq = value(cu.assetId)
397- let cv = valueOrErrorMessage(assetInfo(bq), "fail to load ido asset info")
398- let M = toBase58String(bq)
399- let N = pow(10, 0, cv.decimals, 0, 0, DOWN)
400- let br = fromBase58String(O)
401- let cw = valueOrErrorMessage(assetInfo(br), "fail to load price asset info")
402- let P = pow(10, 0, cw.decimals, 0, 0, DOWN)
403- let cx = aM()
404- let cy = [0, 0, 0, 0]
405-[StringEntry(ah(), S(H, I, J, K, o, L, M, N, O, P, Q, cu.amount)), aV(ak(), cx, cy, J, 0)]
400+ let cw = value(cs.payments[0])
401+ let bs = value(cw.assetId)
402+ let cx = valueOrErrorMessage(assetInfo(bs), "fail to load ido asset info")
403+ let M = toBase58String(bs)
404+ let N = pow(10, 0, cx.decimals, 0, 0, DOWN)
405+ let bt = fromBase58String(O)
406+ let cy = valueOrErrorMessage(assetInfo(bt), "fail to load price asset info")
407+ let P = pow(10, 0, cy.decimals, 0, 0, DOWN)
408+ let cz = aO()
409+ let cA = [0, 0, 0, 0]
410+[StringEntry(ah(), S(H, I, J, K, o, L, M, N, O, P, Q, cw.amount)), aX(ak(), cz, cA, J, 0)]
406411 }
407412 }
408413
409414
410415
411-@Callable(cq)
416+@Callable(cs)
412417 func invest () = {
413- let bc = aJ()
414- let H = parseIntValue(bc[v])
415- let I = parseIntValue(bc[w])
416- let ct = (H + I)
417- let J = parseIntValue(bc[x])
418- let K = parseIntValue(bc[y])
419- let o = parseIntValue(bc[z])
420- let L = parseIntValue(bc[A])
421- let M = bc[B]
422- let bq = fromBase58String(M)
423- let N = parseIntValue(bc[C])
424- let O = bc[D]
425- let br = fromBase58String(O)
426- let P = parseIntValue(bc[E])
427- let cz = parseIntValue(bc[F])
428- let aj = toString(cq.caller)
418+ let be = aL()
419+ let H = parseIntValue(be[v])
420+ let I = parseIntValue(be[w])
421+ let cv = (H + I)
422+ let J = parseIntValue(be[x])
423+ let K = parseIntValue(be[y])
424+ let o = parseIntValue(be[z])
425+ let L = parseIntValue(be[A])
426+ let M = be[B]
427+ let bs = fromBase58String(M)
428+ let N = parseIntValue(be[C])
429+ let O = be[D]
430+ let bt = fromBase58String(O)
431+ let P = parseIntValue(be[E])
432+ let cB = parseIntValue(be[F])
433+ let aj = toString(cs.caller)
429434 if ((H > height))
430435 then throw("ido has not been started yet")
431- else if ((height > ct))
436+ else if ((height > cv))
432437 then throw("ido has been already ended")
433- else if ((size(cq.payments) != 1))
438+ else if ((size(cs.payments) != 1))
434439 then throw("exactly 1 payment is expected")
435440 else {
436- let cu = value(cq.payments[0])
437- let cA = value(cu.assetId)
438- let cB = cu.amount
439- if ((cA != br))
440- then throw((("invalid payment asset id: " + toBase58String(cA)) + " is expected"))
441+ let cw = value(cs.payments[0])
442+ let cC = value(cw.assetId)
443+ let cD = cw.amount
444+ if ((cC != bt))
445+ then throw((("invalid payment asset id: " + toBase58String(cC)) + " is expected"))
441446 else {
442- let cC = aN(aj)
443- let cx = aM()
444- let cD = (parseIntValue(cx[T]) + cB)
445- let cE = (cD * 100)
446- if ((cE > assetBalance(this, bq)))
447+ let cE = aP(aj)
448+ let cz = aO()
449+ let cF = (parseIntValue(cz[T]) + cD)
450+ let cG = (cF * 100)
451+ if ((cG > assetBalance(this, bs)))
447452 then throw("IDO asset has been - sold consider to use smaller payment")
448453 else {
449- let cy = [cB, cB, 0, 0]
450-[aV(ai(aj), cC, cy, J, 0), aV(ak(), cx, cy, J, 0), bk(aj, cB, 0, cq.transactionId)]
454+ let cA = [cD, cD, 0, 0]
455+[aX(ai(aj), cE, cA, J, 0), aX(ak(), cz, cA, J, 0), bm(aj, cD, 0, cs.transactionId)]
451456 }
452457 }
453458 }
455460
456461
457462
458-@Callable(cq)
459-func claim (bo,bs) = {
460- let cF = toString(cq.caller)
461- if ((bs != cF))
463+@Callable(cs)
464+func claim (bq,bu) = {
465+ let cH = toString(cs.caller)
466+ if ((bu != cH))
462467 then throw("not authorized")
463468 else {
464- let bc = aJ()
465- let O = bc[D]
466- let cG = bn(bo, cq.caller, cq.transactionId)
467- let cy = cG._1
468- let bF = cG._2
469- let cH = cG._3
470- let bt = cG._4
471- let bx = cG._5
472- let cI = cy[aT]
473- let cJ = cy[aU]
474- let aZ = valueOrElse(getInteger(aD(bs)), 0)
475- let bd = value(assetInfo(fromBase58String(O))).decimals
476- let bh = if ((bo == O))
469+ let be = aL()
470+ let O = be[D]
471+ let cI = bp(bq, cs.caller, cs.transactionId)
472+ let cA = cI._1
473+ let bH = cI._2
474+ let cJ = cI._3
475+ let bv = cI._4
476+ let bz = cI._5
477+ let cK = cA[aV]
478+ let cL = cA[aW]
479+ let bb = valueOrElse(getInteger(aD(bu)), 0)
480+ let bf = value(assetInfo(fromBase58String(O))).decimals
481+ let bj = if ((bq == O))
477482 then {
478- let cK = bE(O, bs, bF, cy[aT])
479- let bZ = cK._1
480- let bX = cK._2
481- let bY = cK._3
482- let bG = cK._4
483- let ca = cK._5
484- let cl = cK._6
485- let cm = cK._7
486- let bQ = cK._8
487- let bR = cK._9
488- let bT = cK._10
489- let bD = [if ((bY > 0))
483+ let cM = bG(O, bu, bH, cA[aV])
484+ let cb = cM._1
485+ let bZ = cM._2
486+ let ca = cM._3
487+ let bI = cM._4
488+ let cc = cM._5
489+ let cn = cM._6
490+ let co = cM._7
491+ let bS = cM._8
492+ let bT = cM._9
493+ let bV = cM._10
494+ let bF = [if ((ca > 0))
490495 then true
491- else f("unavailable to claim because user period allowance reached"), if ((bX > 0))
496+ else f("unavailable to claim because user period allowance reached"), if ((bZ > 0))
492497 then true
493- else f("unavailable to claim because total period allowance reached"), if ((bZ > 0))
498+ else f("unavailable to claim because total period allowance reached"), if ((cb > 0))
494499 then true
495- else f("nothing to claim"), if ((ca > cl))
500+ else f("nothing to claim"), if ((cc > cn))
496501 then true
497- else f("unavailable to claim because usdn price lower than usdtPriceAssetAllowableRatio")]
498- if ((bD == bD))
502+ else f("unavailable to claim because usdn price lower than usdtPriceAssetAllowableRatio"), if (if (if ((bq != O))
503+ then true
504+ else (aK == 0))
505+ then true
506+ else (aK > height))
507+ then true
508+ else f("Claim is disabled")]
509+ if ((bF == bF))
499510 then {
500- let cL = (bX - bZ)
501- let cM = (bY - bZ)
502- let bh = if ((aZ > bZ))
503- then [ScriptTransfer(cq.caller, bZ, cH), IntegerEntry(aD(bs), (aZ - bZ))]
511+ let cN = (bZ - cb)
512+ let cO = (ca - cb)
513+ let bj = if ((bb > cb))
514+ then [ScriptTransfer(cs.caller, cb, cJ), IntegerEntry(aD(bu), (bb - cb))]
504515 else {
505- let cN = split(h(invoke(this, "claimREADONLY", [O, bs], nil)), c)
506- if ((cN == cN))
516+ let cP = split(h(invoke(this, "claimREADONLY", [O, bu], nil)), c)
517+ if ((cP == cP))
507518 then {
508- let cO = parseIntValue(cN[3])
509- let cP = if ((cO == bZ))
519+ let cQ = parseIntValue(cP[3])
520+ let cR = if ((cQ == cb))
510521 then {
511- let cQ = parseIntValue(bt[T])
512- let cR = parseIntValue(bt[U])
513- let cS = parseIntValue(bt[V])
514- let cT = parseIntValue(bt[W])
515- let cU = parseIntValue(bt[X])
516- let cV = [toString(cQ), "0", toString(cS), toString(cT), toString(cU)]
517- let cW = aM()
518- let cX = parseIntValue(cW[T])
519- let cY = parseIntValue(cW[U])
520- let cZ = parseIntValue(cW[V])
521- let da = parseIntValue(cW[W])
522- let db = parseIntValue(cW[X])
523- let dc = (cY - cR)
524- let dd = [toString(cX), toString(dc), toString(cZ), toString(da), toString(db)]
525- let de = (valueOrElse(getInteger(aG()), 0) + cR)
526-[StringEntry(aF(bs), toString(cR)), StringEntry(aG(), toString(de)), aV(ai(bs), cV, cy, bx, 0), aV(ak(), dd, cy, bx, 0)]
522+ let cS = parseIntValue(bv[T])
523+ let cT = parseIntValue(bv[U])
524+ let cU = parseIntValue(bv[V])
525+ let cV = parseIntValue(bv[W])
526+ let cW = parseIntValue(bv[X])
527+ let cX = [toString(cS), "0", toString(cU), toString(cV), toString(cW)]
528+ let cY = aO()
529+ let cZ = parseIntValue(cY[T])
530+ let da = parseIntValue(cY[U])
531+ let db = parseIntValue(cY[V])
532+ let dc = parseIntValue(cY[W])
533+ let dd = parseIntValue(cY[X])
534+ let de = (da - cT)
535+ let df = [toString(cZ), toString(de), toString(db), toString(dc), toString(dd)]
536+ let dg = (valueOrElse(getInteger(aG()), 0) + cT)
537+[StringEntry(aF(bu), toString(cT)), StringEntry(aG(), toString(dg)), aX(ai(bu), cX, cA, bz, 0), aX(ak(), df, cA, bz, 0)]
527538 }
528- else [aV(ai(bs), bt, cy, bx, 0), aV(ak(), aM(), cy, bx, 0)]
529- let df = ((aZ + bF) - bZ)
530- ([ScriptTransfer(cq.caller, bZ, cH), IntegerEntry(aD(bs), df)] ++ cP)
539+ else [aX(ai(bu), bv, cA, bz, 0), aX(ak(), aO(), cA, bz, 0)]
540+ let dh = ((bb + bH) - cb)
541+ ([ScriptTransfer(cs.caller, cb, cJ), IntegerEntry(aD(bu), dh)] ++ cR)
531542 }
532543 else throw("Strict value is not equal to itself.")
533544 }
534- $Tuple2(([IntegerEntry(ar(), bQ), IntegerEntry(as(bQ), bR), IntegerEntry(au(bQ), bT), IntegerEntry(az(O, bQ), cL), IntegerEntry(aA(O, bQ, bs), cM), bm(bs, bZ, cJ, cq.transactionId)] ++ bh), unit)
545+ $Tuple2(([IntegerEntry(ar(), bS), IntegerEntry(as(bS), bT), IntegerEntry(au(bS), bV), IntegerEntry(az(O, bS), cN), IntegerEntry(aA(O, bS, bu), cO), bo(bu, cb, cL, cs.transactionId)] ++ bj), unit)
535546 }
536547 else throw("Strict value is not equal to itself.")
537548 }
538549 else {
539- let dg = fraction(aZ, e, pow(10, 0, bd, 0, 0, DOWN))
540- $Tuple2([ScriptTransfer(cq.caller, (bF + dg), cH), IntegerEntry(aD(bs), 0), aV(ai(bs), bt, cy, bx, aZ), aV(ak(), aM(), cy, bx, aZ), bm(bs, cI, (cJ + dg), cq.transactionId)], unit)
550+ let di = fraction(bb, e, pow(10, 0, bf, 0, 0, DOWN))
551+ $Tuple2([ScriptTransfer(cs.caller, (bH + di), cJ), IntegerEntry(aD(bu), 0), aX(ai(bu), bv, cA, bz, bb), aX(ak(), aO(), cA, bz, bb), bo(bu, cK, (cL + di), cs.transactionId)], unit)
541552 }
542- bh
553+ bj
543554 }
544555 }
545556
546557
547558
548-@Callable(cq)
549-func cleanRemaingAmount (bs) = {
550- let O = aJ()[D]
551- let cN = split(h(invoke(this, "claimREADONLY", [O, bs], nil)), c)
552- if ((cN == cN))
559+@Callable(cs)
560+func cleanRemaingAmount (bu) = {
561+ let O = aL()[D]
562+ let cP = split(h(invoke(this, "claimREADONLY", [O, bu], nil)), c)
563+ if ((cP == cP))
553564 then {
554- let cO = parseIntValue(cN[2])
555- let dh = if ((cO == 0))
565+ let cQ = parseIntValue(cP[2])
566+ let dj = if ((cQ == 0))
556567 then true
557568 else f("user have unclaimed assets")
558- if ((dh == dh))
569+ if ((dj == dj))
559570 then {
560- let di = split(value(getString(ai(bs))), c)
561- let cQ = parseIntValue(di[T])
562- let cR = parseIntValue(di[U])
563- let cS = parseIntValue(di[V])
564- let cT = parseIntValue(di[W])
565- let cU = parseIntValue(di[X])
566- let dj = if ((cR != 0))
571+ let dk = split(value(getString(ai(bu))), c)
572+ let cS = parseIntValue(dk[T])
573+ let cT = parseIntValue(dk[U])
574+ let cU = parseIntValue(dk[V])
575+ let cV = parseIntValue(dk[W])
576+ let cW = parseIntValue(dk[X])
577+ let dl = if ((cT != 0))
567578 then true
568579 else f("investorRemainingAmount already zero")
569- if ((dj == dj))
580+ if ((dl == dl))
570581 then {
571- let dk = makeString(["%d%d%d%d%d", toString(cQ), "0", toString(cS), toString(cT), toString(cU)], c)
572- let cW = split(value(getString(ak())), c)
573- let cX = parseIntValue(cW[T])
574- let cY = parseIntValue(cW[U])
575- let cZ = parseIntValue(cW[V])
576- let da = parseIntValue(cW[W])
577- let db = parseIntValue(cW[X])
578- let dl = makeString(["%d%d%d%d%d", toString(cX), toString((cY - cR)), toString(cZ), toString(da), toString(db)], c)
579- let de = (valueOrElse(getInteger(aG()), 0) + cR)
580-[StringEntry(aF(bs), toString(cR)), StringEntry(aG(), toString(de)), StringEntry(ai(bs), dk), StringEntry(ak(), dl)]
582+ let dm = makeString(["%d%d%d%d%d", toString(cS), "0", toString(cU), toString(cV), toString(cW)], c)
583+ let cY = split(value(getString(ak())), c)
584+ let cZ = parseIntValue(cY[T])
585+ let da = parseIntValue(cY[U])
586+ let db = parseIntValue(cY[V])
587+ let dc = parseIntValue(cY[W])
588+ let dd = parseIntValue(cY[X])
589+ let dn = makeString(["%d%d%d%d%d", toString(cZ), toString((da - cT)), toString(db), toString(dc), toString(dd)], c)
590+ let dg = (valueOrElse(getInteger(aG()), 0) + cT)
591+[StringEntry(aF(bu), toString(cT)), StringEntry(aG(), toString(dg)), StringEntry(ai(bu), dm), StringEntry(ak(), dn)]
581592 }
582593 else throw("Strict value is not equal to itself.")
583594 }
588599
589600
590601
591-@Callable(cq)
592-func claimREADONLY (bo,bs) = {
593- let cG = bn(bo, addressFromStringValue(bs), fromBase58String(""))
594- let cy = cG._1
595- let bF = cG._2
596- let cH = cG._3
597- let bt = cG._4
598- let bx = cG._5
599- let dm = cG._6
600- let cO = dm[0]
601- let dn = dm[1]
602- $Tuple2(nil, makeString(["%s%d%d", bs, toString(cO), toString(dn)], c))
602+@Callable(cs)
603+func claimREADONLY (bq,bu) = {
604+ let cI = bp(bq, addressFromStringValue(bu), fromBase58String(""))
605+ let cA = cI._1
606+ let bH = cI._2
607+ let cJ = cI._3
608+ let bv = cI._4
609+ let bz = cI._5
610+ let do = cI._6
611+ let cQ = do[0]
612+ let dp = do[1]
613+ $Tuple2(nil, makeString(["%s%d%d", bu, toString(cQ), toString(dp)], c))
603614 }
604615
605616
606617
607-@Callable(cq)
608-func claimV2READONLY (bo,bs) = {
609- let cG = bn(bo, addressFromStringValue(bs), fromBase58String(""))
610- let cy = cG._1
611- let bF = cG._2
612- let cH = cG._3
613- let bt = cG._4
614- let bx = cG._5
615- let dm = cG._6
616- let cO = dm[0]
617- let dn = dm[1]
618- let bc = aJ()
619- let O = bc[D]
620- let aZ = valueOrElse(getInteger(aD(bs)), 0)
621- let dg = (aZ * 100)
622- let do = (dn + dg)
623- let dp = bE(O, bs, bF, cy[aT])
624- let bZ = dp._1
625- let bX = dp._2
626- let bY = dp._3
627- let bG = dp._4
628- let ca = dp._5
629- let cl = dp._6
630- let cm = dp._7
631- let bQ = dp._8
632- let bR = dp._9
633- let bT = dp._10
634- let dq = valueOrElse(getInteger(au(bQ)), 0)
635- let dr = (parseIntValue(aO(bs)[V]) - aZ)
636- let ds = if ((height > dq))
618+@Callable(cs)
619+func claimV2READONLY (bq,bu) = {
620+ let cI = bp(bq, addressFromStringValue(bu), fromBase58String(""))
621+ let cA = cI._1
622+ let bH = cI._2
623+ let cJ = cI._3
624+ let bv = cI._4
625+ let bz = cI._5
626+ let do = cI._6
627+ let cQ = do[0]
628+ let dp = do[1]
629+ let be = aL()
630+ let O = be[D]
631+ let bb = valueOrElse(getInteger(aD(bu)), 0)
632+ let di = (bb * 100)
633+ let dq = (dp + di)
634+ let dr = bG(O, bu, bH, cA[aV])
635+ let cb = dr._1
636+ let bZ = dr._2
637+ let ca = dr._3
638+ let bI = dr._4
639+ let cc = dr._5
640+ let cn = dr._6
641+ let co = dr._7
642+ let bS = dr._8
643+ let bT = dr._9
644+ let bV = dr._10
645+ let ds = valueOrElse(getInteger(au(bS)), 0)
646+ let dt = (parseIntValue(aQ(bu)[V]) - bb)
647+ let du = if ((height > ds))
637648 then {
638- let dt = value(getInteger(aq()))
639- let du = value(getInteger(ay(O)))
640- let dv = value(getInteger(aw(O)))
641- makeString(["%d%d%d%d%d%d", toString(do), toString(du), toString(dv), toString(ca), toString(cl), toString(dt), toString(dr)], c)
649+ let dv = value(getInteger(aq()))
650+ let dw = value(getInteger(ay(O)))
651+ let dx = value(getInteger(aw(O)))
652+ makeString(["%d%d%d%d%d%d", toString(dq), toString(dw), toString(dx), toString(cc), toString(cn), toString(dv), toString(dt)], c)
642653 }
643- else makeString(["%d%d%d%d%d%d", toString(do), toString(bZ), toString(bX), toString(ca), toString(cl), toString(cm), toString(dr)], c)
644- $Tuple2(nil, ds)
654+ else makeString(["%d%d%d%d%d%d", toString(dq), toString(cb), toString(bZ), toString(cc), toString(cn), toString(co), toString(dt)], c)
655+ $Tuple2(nil, du)
645656 }
646657
647658
648-@Verifier(dw)
649-func dx () = {
650- let dy = {
651- let j = cn()
659+@Verifier(dy)
660+func dz () = {
661+ let dA = {
662+ let j = cp()
652663 if ($isInstanceOf(j, "ByteVector"))
653664 then {
654- let cs = j
655- cs
665+ let cu = j
666+ cu
656667 }
657668 else if ($isInstanceOf(j, "Unit"))
658- then dw.senderPublicKey
669+ then dy.senderPublicKey
659670 else throw("Match error")
660671 }
661- sigVerify(dw.bodyBytes, dw.proofs[0], dy)
672+ sigVerify(dy.bodyBytes, dy.proofs[0], dA)
662673 }
663674
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = valueOrErrorMessage(getString(b), (("mandatory this." + b) + " is not defined"))
55
66
77 let c = "__"
88
99 let d = toBigInt(1000000000000000000)
1010
1111 let e = 100000000
1212
1313 func f (g) = throw(makeString(["ido.ride:", g], " "))
1414
1515
1616 func h (i) = {
1717 let j = i
1818 if ($isInstanceOf(j, "String"))
1919 then {
2020 let k = j
2121 k
2222 }
2323 else throw("fail to cast into String")
2424 }
2525
2626
2727 func l (m,n,o,p,q) = {
2828 let r = toBigInt(n)
2929 let s = toBigInt(q)
3030 let t = fraction(toBigInt(m), d, r)
3131 let u = fraction(t, toBigInt(p), toBigInt(o))
3232 toInt(fraction(u, toBigInt(q), d))
3333 }
3434
3535
3636 let v = 1
3737
3838 let w = 2
3939
4040 let x = 3
4141
4242 let y = 4
4343
4444 let z = 5
4545
4646 let A = 6
4747
4848 let B = 7
4949
5050 let C = 8
5151
5252 let D = 9
5353
5454 let E = 10
5555
5656 let F = 11
5757
5858 func G (H,I,J,K,o,L,M,N,O,P,Q,R) = makeString(["%d%d%d%d%d%d%s%d%s%d%d%d", H, I, J, K, o, L, M, N, O, P, Q, R], c)
5959
6060
6161 func S (H,I,J,K,o,L,M,N,O,P,Q,R) = G(toString(H), toString(I), toString(J), toString(K), toString(o), toString(L), M, toString(N), O, toString(P), toString(Q), toString(R))
6262
6363
6464 let T = 1
6565
6666 let U = 2
6767
6868 let V = 3
6969
7070 let W = 4
7171
7272 let X = 5
7373
7474 func Y (Z,aa,ab,ac,ad) = makeString(["%d%d%d%d%d", Z, aa, ab, ac, ad], c)
7575
7676
7777 func ae (Z,aa,ab,ac,ad) = Y(toString(Z), toString(aa), toString(ab), toString(ac), toString(ad))
7878
7979
8080 func af (m,ag) = makeString(["%d%d%d%d", toString(height), toString(lastBlock.timestamp), toString(m), toString(ag)], c)
8181
8282
8383 func ah () = "%s__config"
8484
8585
8686 func ai (aj) = ("%s__" + aj)
8787
8888
8989 func ak () = "%s__totals"
9090
9191
9292 func al (am,aj,an) = makeString(["%s%s%s%s__history", am, aj, an], c)
9393
9494
9595 func ao () = "%s__usdnClaimDisabled"
9696
9797
9898 func ap () = "%s__usdnClaimEndHeight"
9999
100100
101101 func aq () = makeString(["%s", "periodLength"], c)
102102
103103
104104 func ar () = makeString(["%s", "currentPeriod"], c)
105105
106106
107107 func as (at) = makeString(["%s%s", "periodStartHeight", toString(at)], c)
108108
109109
110110 func au (at) = makeString(["%s%s", "periodEndHeight", toString(at)], c)
111111
112112
113113 func av () = makeString(["%s", "usdtPriceAssetAllowableRatio"], c)
114114
115115
116116 func aw (ax) = makeString(["%s%s", "totalPeriodAllowance", ax], c)
117117
118118
119119 func ay (ax) = makeString(["%s%s", "userPeriodAllowance", ax], c)
120120
121121
122122 func az (ax,at) = makeString(["%s%s%s", "periodTotalAvailableToClaim", ax, toString(at)], c)
123123
124124
125125 func aA (ax,at,aj) = makeString(["%s%s%s%s", "periodUserAvailableToClaim", ax, toString(at), aj], c)
126126
127127
128128 func aB () = makeString(["%s", "usdtPriceAssetStablePool"], c)
129129
130130
131131 func aC () = makeString(["%s", "usdtAssetId"], c)
132132
133133
134134 func aD (aE) = makeString(["%s%s", "priceAssetBalance", aE], c)
135135
136136
137137 func aF (aE) = makeString(["%s%s", "investorRemainingAmount", aE], c)
138138
139139
140140 func aG () = makeString(["%s", "totalRemainingAmount"], c)
141141
142142
143143 func aH () = "%s__managerPublicKey"
144144
145145
146146 func aI () = "%s__managerVaultAddress"
147147
148148
149-func aJ () = split(a(ah()), c)
149+func aJ () = "%s__claimClosingHeight"
150150
151151
152-func aK (aL) = split(valueOrElse(getString(aL), Y("0", "0", "0", "0", "0")), c)
152+let aK = valueOrElse(getInteger(this, aJ()), 0)
153+
154+func aL () = split(a(ah()), c)
153155
154156
155-func aM () = aK(ak())
157+func aM (aN) = split(valueOrElse(getString(aN), Y("0", "0", "0", "0", "0")), c)
156158
157159
158-func aN (aj) = aK(ai(aj))
160+func aO () = aM(ak())
159161
160162
161-func aO (aj) = split(a(ai(aj)), c)
163+func aP (aj) = aM(ai(aj))
162164
163165
164-func aP () = {
166+func aQ (aj) = split(a(ai(aj)), c)
167+
168+
169+func aR () = {
165170 let j = getString(aI())
166171 if ($isInstanceOf(j, "String"))
167172 then {
168- let aQ = j
169- addressFromStringValue(aQ)
173+ let aS = j
174+ addressFromStringValue(aS)
170175 }
171176 else this
172177 }
173178
174179
175-let aR = 0
180+let aT = 0
176181
177-let aS = 1
182+let aU = 1
178183
179-let aT = 2
184+let aV = 2
180185
181-let aU = 3
186+let aW = 3
182187
183-func aV (b,aW,aX,aY,aZ) = {
184- let Z = parseIntValue(aW[T])
185- let aa = parseIntValue(aW[U])
186- let ab = parseIntValue(aW[V])
187- let ac = parseIntValue(aW[W])
188- let ad = parseIntValue(aW[X])
189- let ba = (Z + aX[aR])
190- let bb = (aa + aX[aS])
191- let bc = aJ()
192- let O = bc[D]
193- let bd = value(assetInfo(fromBase58String(O))).decimals
194- let be = fraction(aZ, e, pow(10, 0, bd, 0, 0, DOWN))
195- let bf = ((ab + aX[aT]) - aZ)
196- let bg = ((ac + aX[aU]) + be)
197- let bh = if ((0 > bb))
188+func aX (b,aY,aZ,ba,bb) = {
189+ let Z = parseIntValue(aY[T])
190+ let aa = parseIntValue(aY[U])
191+ let ab = parseIntValue(aY[V])
192+ let ac = parseIntValue(aY[W])
193+ let ad = parseIntValue(aY[X])
194+ let bc = (Z + aZ[aT])
195+ let bd = (aa + aZ[aU])
196+ let be = aL()
197+ let O = be[D]
198+ let bf = value(assetInfo(fromBase58String(O))).decimals
199+ let bg = fraction(bb, e, pow(10, 0, bf, 0, 0, DOWN))
200+ let bh = ((ab + aZ[aV]) - bb)
201+ let bi = ((ac + aZ[aW]) + bg)
202+ let bj = if ((0 > bd))
198203 then {
199- let bi = ((ba - bf) - bg)
200- let bj = if ((0 > bi))
204+ let bk = ((bc - bh) - bi)
205+ let bl = if ((0 > bk))
201206 then 0
202- else bi
203- StringEntry(b, ae(ba, bj, bf, bg, aY))
207+ else bk
208+ StringEntry(b, ae(bc, bl, bh, bi, ba))
204209 }
205- else StringEntry(b, ae(ba, bb, bf, bg, aY))
206- bh
210+ else StringEntry(b, ae(bc, bd, bh, bi, ba))
211+ bj
207212 }
208213
209214
210-func bk (aj,m,ag,bl) = StringEntry(al("invest", aj, toBase58String(bl)), af(m, ag))
215+func bm (aj,m,ag,bn) = StringEntry(al("invest", aj, toBase58String(bn)), af(m, ag))
211216
212217
213-func bm (aj,m,ag,bl) = StringEntry(al("claim", aj, toBase58String(bl)), af(m, ag))
218+func bo (aj,m,ag,bn) = StringEntry(al("claim", aj, toBase58String(bn)), af(m, ag))
214219
215220
216-func bn (bo,aj,bl) = {
217- let bc = aJ()
218- let J = parseIntValue(bc[x])
219- let K = parseIntValue(bc[y])
220- let bp = (J + K)
221- let o = parseIntValue(bc[z])
222- let L = parseIntValue(bc[A])
223- let M = bc[B]
224- let bq = fromBase58String(M)
225- let N = parseIntValue(bc[C])
226- let O = bc[D]
227- let br = fromBase58String(O)
228- let P = parseIntValue(bc[E])
229- let bs = toString(aj)
230- let bt = aO(bs)
231- let bu = parseIntValue(bt[T])
232- let bv = parseIntValue(bt[X])
233- let bw = if ((J >= bv))
221+func bp (bq,aj,bn) = {
222+ let be = aL()
223+ let J = parseIntValue(be[x])
224+ let K = parseIntValue(be[y])
225+ let br = (J + K)
226+ let o = parseIntValue(be[z])
227+ let L = parseIntValue(be[A])
228+ let M = be[B]
229+ let bs = fromBase58String(M)
230+ let N = parseIntValue(be[C])
231+ let O = be[D]
232+ let bt = fromBase58String(O)
233+ let P = parseIntValue(be[E])
234+ let bu = toString(aj)
235+ let bv = aQ(bu)
236+ let bw = parseIntValue(bv[T])
237+ let bx = parseIntValue(bv[X])
238+ let by = if ((J >= bx))
234239 then J
235- else bv
236- let bx = if ((height > bp))
237- then bp
240+ else bx
241+ let bz = if ((height > br))
242+ then br
238243 else if ((J > height))
239244 then J
240245 else height
241- let by = (bx - bw)
242- let bz = fraction(bu, by, K)
243- let bA = l(bz, P, o, L, N)
244- let bB = (bo == O)
245- let bC = valueOrElse(getBoolean(ao()), false)
246- let bD = [if (!(if (bB)
247- then bC
246+ let bA = (bz - by)
247+ let bB = fraction(bw, bA, K)
248+ let bC = l(bB, P, o, L, N)
249+ let bD = (bq == O)
250+ let bE = valueOrElse(getBoolean(ao()), false)
251+ let bF = [if (!(if (bD)
252+ then bE
248253 else false))
249254 then true
250255 else throw("USDN claim is disabled")]
251- if ((bD == bD))
252- then if ((bo == O))
253- then $Tuple6([0, -(bz), bz, 0], bz, br, bt, bx, [bz, bA])
254- else if ((bo == M))
255- then $Tuple6([0, -(bz), 0, bA], bA, bq, bt, bx, [bz, bA])
256- else throw(("unsupported assetId: " + bo))
256+ if ((bF == bF))
257+ then if ((bq == O))
258+ then $Tuple6([0, -(bB), bB, 0], bB, bt, bv, bz, [bB, bC])
259+ else if ((bq == M))
260+ then $Tuple6([0, -(bB), 0, bC], bC, bs, bv, bz, [bB, bC])
261+ else throw(("unsupported assetId: " + bq))
257262 else throw("Strict value is not equal to itself.")
258263 }
259264
260265
261-func bE (O,bs,bF,bG) = {
262- let bH = value(getInteger(aw(O)))
263- let bI = value(getInteger(ay(O)))
264- let bJ = value(getInteger(aq()))
265- let bK = valueOrElse(getInteger(ar()), 0)
266- let bL = isDefined(getInteger(au(0)))
267- let bM = if ((bK > 0))
266+func bG (O,bu,bH,bI) = {
267+ let bJ = value(getInteger(aw(O)))
268+ let bK = value(getInteger(ay(O)))
269+ let bL = value(getInteger(aq()))
270+ let bM = valueOrElse(getInteger(ar()), 0)
271+ let bN = isDefined(getInteger(au(0)))
272+ let bO = if ((bM > 0))
268273 then {
269- let bN = value(getInteger(as(bK)))
270- let bO = value(getInteger(au(bK)))
271- let bP = if ((height > bO))
274+ let bP = value(getInteger(as(bM)))
275+ let bQ = value(getInteger(au(bM)))
276+ let bR = if ((height > bQ))
272277 then {
273- let bQ = (bK + 1)
274- let bR = if ((height > (bO + bJ)))
278+ let bS = (bM + 1)
279+ let bT = if ((height > (bQ + bL)))
275280 then {
276- let bS = ((height - bO) % bJ)
277- if ((bS == 0))
278- then ((height - bJ) + 1)
279- else (height - bS)
281+ let bU = ((height - bQ) % bL)
282+ if ((bU == 0))
283+ then ((height - bL) + 1)
284+ else (height - bU)
280285 }
281- else (bO + 1)
282- let bT = ((bR + bJ) - 1)
283- $Tuple3(bQ, bR, bT)
286+ else (bQ + 1)
287+ let bV = ((bT + bL) - 1)
288+ $Tuple3(bS, bT, bV)
284289 }
285- else $Tuple3(bK, bN, bO)
286- let bQ = bP._1
287- let bR = bP._2
288- let bT = bP._3
289- $Tuple3(bQ, bR, bT)
290+ else $Tuple3(bM, bP, bQ)
291+ let bS = bR._1
292+ let bT = bR._2
293+ let bV = bR._3
294+ $Tuple3(bS, bT, bV)
290295 }
291- else if (bL)
296+ else if (bN)
292297 then {
293- let bU = value(getInteger(as(0)))
294- let bV = value(getInteger(au(0)))
295- let bW = if ((height > bV))
298+ let bW = value(getInteger(as(0)))
299+ let bX = value(getInteger(au(0)))
300+ let bY = if ((height > bX))
296301 then {
297- let bQ = (bK + 1)
298- let bR = (bV + 1)
299- let bT = ((bR + bJ) - 1)
300- $Tuple3(bQ, bR, bT)
302+ let bS = (bM + 1)
303+ let bT = (bX + 1)
304+ let bV = ((bT + bL) - 1)
305+ $Tuple3(bS, bT, bV)
301306 }
302- else $Tuple3(bK, bU, bV)
303- let bQ = bW._1
304- let bR = bW._2
305- let bT = bW._3
306- $Tuple3(bQ, bR, bT)
307+ else $Tuple3(bM, bW, bX)
308+ let bS = bY._1
309+ let bT = bY._2
310+ let bV = bY._3
311+ $Tuple3(bS, bT, bV)
307312 }
308- else $Tuple3(bK, valueOrElse(getInteger(as(bK)), height), valueOrElse(getInteger(au(bK)), ((height + bJ) - 1)))
309- let bQ = bM._1
310- let bR = bM._2
311- let bT = bM._3
312- let bX = valueOrElse(getInteger(az(O, bQ)), bH)
313- let bY = valueOrElse(getInteger(aA(O, bQ, bs)), bI)
314- let aZ = valueOrElse(getInteger(aD(bs)), 0)
315- let bZ = min([(bF + aZ), bX, bY])
316- let ca = value(getInteger(av()))
317- let cb = e
318- let cc = {
319- let cd = invoke(addressFromStringValue(value(getString(aB()))), "putOneTknV2WithoutTakeFeeREADONLY", [cb, O], nil)
320- if ($isInstanceOf(cd, "(Int, Int, Int)"))
321- then cd
322- else throw(($getType(cd) + " couldn't be cast to (Int, Int, Int)"))
313+ else $Tuple3(bM, valueOrElse(getInteger(as(bM)), height), valueOrElse(getInteger(au(bM)), ((height + bL) - 1)))
314+ let bS = bO._1
315+ let bT = bO._2
316+ let bV = bO._3
317+ let bZ = valueOrElse(getInteger(az(O, bS)), bJ)
318+ let ca = valueOrElse(getInteger(aA(O, bS, bu)), bK)
319+ let bb = valueOrElse(getInteger(aD(bu)), 0)
320+ let cb = min([(bH + bb), bZ, ca])
321+ let cc = value(getInteger(av()))
322+ let cd = e
323+ let ce = {
324+ let cf = invoke(addressFromStringValue(value(getString(aB()))), "putOneTknV2WithoutTakeFeeREADONLY", [cd, O], nil)
325+ if ($isInstanceOf(cf, "(Int, Int, Int)"))
326+ then cf
327+ else throw(($getType(cf) + " couldn't be cast to (Int, Int, Int)"))
323328 }
324- if ((cc == cc))
329+ if ((ce == ce))
325330 then {
326- let ce = cc._3
327- let cf = cc._2
328- let cg = cc._1
329- let ch = value(getString(aC()))
330- let ci = {
331- let cd = invoke(addressFromStringValue(value(getString(aB()))), "getOneTknV2READONLY", [ch, cg], nil)
332- if ($isInstanceOf(cd, "(Int, Int)"))
333- then cd
334- else throw(($getType(cd) + " couldn't be cast to (Int, Int)"))
331+ let cg = ce._3
332+ let ch = ce._2
333+ let ci = ce._1
334+ let cj = value(getString(aC()))
335+ let ck = {
336+ let cf = invoke(addressFromStringValue(value(getString(aB()))), "getOneTknV2READONLY", [cj, ci], nil)
337+ if ($isInstanceOf(cf, "(Int, Int)"))
338+ then cf
339+ else throw(($getType(cf) + " couldn't be cast to (Int, Int)"))
335340 }
336- if ((ci == ci))
341+ if ((ck == ck))
337342 then {
338- let cj = ci._2
339- let ck = ci._1
340- let cl = fraction(cb, e, ck)
341- let cm = (bT - height)
342- $Tuple10(bZ, bX, bY, bG, ca, cl, cm, bQ, bR, bT)
343+ let cl = ck._2
344+ let cm = ck._1
345+ let cn = fraction(cd, e, cm)
346+ let co = (bV - height)
347+ $Tuple10(cb, bZ, ca, bI, cc, cn, co, bS, bT, bV)
343348 }
344349 else throw("Strict value is not equal to itself.")
345350 }
346351 else throw("Strict value is not equal to itself.")
347352 }
348353
349354
350-func cn () = {
351- let co = aP()
352- let j = getString(co, aH())
355+func cp () = {
356+ let cq = aR()
357+ let j = getString(cq, aH())
353358 if ($isInstanceOf(j, "String"))
354359 then {
355- let aQ = j
356- fromBase58String(aQ)
360+ let aS = j
361+ fromBase58String(aS)
357362 }
358363 else if ($isInstanceOf(j, "Unit"))
359364 then unit
360365 else throw("Match error")
361366 }
362367
363368
364-func cp (cq) = {
365- let cr = throw("Permission denied")
366- let j = cn()
369+func cr (cs) = {
370+ let ct = throw("Permission denied")
371+ let j = cp()
367372 if ($isInstanceOf(j, "ByteVector"))
368373 then {
369- let cs = j
370- if ((cq.callerPublicKey == cs))
374+ let cu = j
375+ if ((cs.callerPublicKey == cu))
371376 then true
372- else cr
377+ else ct
373378 }
374379 else if ($isInstanceOf(j, "Unit"))
375- then if ((cq.caller == this))
380+ then if ((cs.caller == this))
376381 then true
377- else cr
382+ else ct
378383 else throw("Match error")
379384 }
380385
381386
382-@Callable(cq)
387+@Callable(cs)
383388 func constructor (H,I,J,K,o,O,Q) = {
384389 let L = ((100 * 1000) * 1000)
385- let ct = (H + I)
390+ let cv = (H + I)
386391 if (isDefined(getString(ah())))
387392 then throw("already initialized")
388- else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString(cq.caller)))
393+ else if (("3PMEHLx1j6zerarZTYfsGqDeeZqQoMpxq5S" != toString(cs.caller)))
389394 then throw("not authorized")
390- else if ((size(cq.payments) != 1))
395+ else if ((size(cs.payments) != 1))
391396 then throw("exactly 1 payment must be attached")
392- else if ((ct >= J))
397+ else if ((cv >= J))
393398 then throw("claimStart must be greater than idoEnd")
394399 else {
395- let cu = value(cq.payments[0])
396- let bq = value(cu.assetId)
397- let cv = valueOrErrorMessage(assetInfo(bq), "fail to load ido asset info")
398- let M = toBase58String(bq)
399- let N = pow(10, 0, cv.decimals, 0, 0, DOWN)
400- let br = fromBase58String(O)
401- let cw = valueOrErrorMessage(assetInfo(br), "fail to load price asset info")
402- let P = pow(10, 0, cw.decimals, 0, 0, DOWN)
403- let cx = aM()
404- let cy = [0, 0, 0, 0]
405-[StringEntry(ah(), S(H, I, J, K, o, L, M, N, O, P, Q, cu.amount)), aV(ak(), cx, cy, J, 0)]
400+ let cw = value(cs.payments[0])
401+ let bs = value(cw.assetId)
402+ let cx = valueOrErrorMessage(assetInfo(bs), "fail to load ido asset info")
403+ let M = toBase58String(bs)
404+ let N = pow(10, 0, cx.decimals, 0, 0, DOWN)
405+ let bt = fromBase58String(O)
406+ let cy = valueOrErrorMessage(assetInfo(bt), "fail to load price asset info")
407+ let P = pow(10, 0, cy.decimals, 0, 0, DOWN)
408+ let cz = aO()
409+ let cA = [0, 0, 0, 0]
410+[StringEntry(ah(), S(H, I, J, K, o, L, M, N, O, P, Q, cw.amount)), aX(ak(), cz, cA, J, 0)]
406411 }
407412 }
408413
409414
410415
411-@Callable(cq)
416+@Callable(cs)
412417 func invest () = {
413- let bc = aJ()
414- let H = parseIntValue(bc[v])
415- let I = parseIntValue(bc[w])
416- let ct = (H + I)
417- let J = parseIntValue(bc[x])
418- let K = parseIntValue(bc[y])
419- let o = parseIntValue(bc[z])
420- let L = parseIntValue(bc[A])
421- let M = bc[B]
422- let bq = fromBase58String(M)
423- let N = parseIntValue(bc[C])
424- let O = bc[D]
425- let br = fromBase58String(O)
426- let P = parseIntValue(bc[E])
427- let cz = parseIntValue(bc[F])
428- let aj = toString(cq.caller)
418+ let be = aL()
419+ let H = parseIntValue(be[v])
420+ let I = parseIntValue(be[w])
421+ let cv = (H + I)
422+ let J = parseIntValue(be[x])
423+ let K = parseIntValue(be[y])
424+ let o = parseIntValue(be[z])
425+ let L = parseIntValue(be[A])
426+ let M = be[B]
427+ let bs = fromBase58String(M)
428+ let N = parseIntValue(be[C])
429+ let O = be[D]
430+ let bt = fromBase58String(O)
431+ let P = parseIntValue(be[E])
432+ let cB = parseIntValue(be[F])
433+ let aj = toString(cs.caller)
429434 if ((H > height))
430435 then throw("ido has not been started yet")
431- else if ((height > ct))
436+ else if ((height > cv))
432437 then throw("ido has been already ended")
433- else if ((size(cq.payments) != 1))
438+ else if ((size(cs.payments) != 1))
434439 then throw("exactly 1 payment is expected")
435440 else {
436- let cu = value(cq.payments[0])
437- let cA = value(cu.assetId)
438- let cB = cu.amount
439- if ((cA != br))
440- then throw((("invalid payment asset id: " + toBase58String(cA)) + " is expected"))
441+ let cw = value(cs.payments[0])
442+ let cC = value(cw.assetId)
443+ let cD = cw.amount
444+ if ((cC != bt))
445+ then throw((("invalid payment asset id: " + toBase58String(cC)) + " is expected"))
441446 else {
442- let cC = aN(aj)
443- let cx = aM()
444- let cD = (parseIntValue(cx[T]) + cB)
445- let cE = (cD * 100)
446- if ((cE > assetBalance(this, bq)))
447+ let cE = aP(aj)
448+ let cz = aO()
449+ let cF = (parseIntValue(cz[T]) + cD)
450+ let cG = (cF * 100)
451+ if ((cG > assetBalance(this, bs)))
447452 then throw("IDO asset has been - sold consider to use smaller payment")
448453 else {
449- let cy = [cB, cB, 0, 0]
450-[aV(ai(aj), cC, cy, J, 0), aV(ak(), cx, cy, J, 0), bk(aj, cB, 0, cq.transactionId)]
454+ let cA = [cD, cD, 0, 0]
455+[aX(ai(aj), cE, cA, J, 0), aX(ak(), cz, cA, J, 0), bm(aj, cD, 0, cs.transactionId)]
451456 }
452457 }
453458 }
454459 }
455460
456461
457462
458-@Callable(cq)
459-func claim (bo,bs) = {
460- let cF = toString(cq.caller)
461- if ((bs != cF))
463+@Callable(cs)
464+func claim (bq,bu) = {
465+ let cH = toString(cs.caller)
466+ if ((bu != cH))
462467 then throw("not authorized")
463468 else {
464- let bc = aJ()
465- let O = bc[D]
466- let cG = bn(bo, cq.caller, cq.transactionId)
467- let cy = cG._1
468- let bF = cG._2
469- let cH = cG._3
470- let bt = cG._4
471- let bx = cG._5
472- let cI = cy[aT]
473- let cJ = cy[aU]
474- let aZ = valueOrElse(getInteger(aD(bs)), 0)
475- let bd = value(assetInfo(fromBase58String(O))).decimals
476- let bh = if ((bo == O))
469+ let be = aL()
470+ let O = be[D]
471+ let cI = bp(bq, cs.caller, cs.transactionId)
472+ let cA = cI._1
473+ let bH = cI._2
474+ let cJ = cI._3
475+ let bv = cI._4
476+ let bz = cI._5
477+ let cK = cA[aV]
478+ let cL = cA[aW]
479+ let bb = valueOrElse(getInteger(aD(bu)), 0)
480+ let bf = value(assetInfo(fromBase58String(O))).decimals
481+ let bj = if ((bq == O))
477482 then {
478- let cK = bE(O, bs, bF, cy[aT])
479- let bZ = cK._1
480- let bX = cK._2
481- let bY = cK._3
482- let bG = cK._4
483- let ca = cK._5
484- let cl = cK._6
485- let cm = cK._7
486- let bQ = cK._8
487- let bR = cK._9
488- let bT = cK._10
489- let bD = [if ((bY > 0))
483+ let cM = bG(O, bu, bH, cA[aV])
484+ let cb = cM._1
485+ let bZ = cM._2
486+ let ca = cM._3
487+ let bI = cM._4
488+ let cc = cM._5
489+ let cn = cM._6
490+ let co = cM._7
491+ let bS = cM._8
492+ let bT = cM._9
493+ let bV = cM._10
494+ let bF = [if ((ca > 0))
490495 then true
491- else f("unavailable to claim because user period allowance reached"), if ((bX > 0))
496+ else f("unavailable to claim because user period allowance reached"), if ((bZ > 0))
492497 then true
493- else f("unavailable to claim because total period allowance reached"), if ((bZ > 0))
498+ else f("unavailable to claim because total period allowance reached"), if ((cb > 0))
494499 then true
495- else f("nothing to claim"), if ((ca > cl))
500+ else f("nothing to claim"), if ((cc > cn))
496501 then true
497- else f("unavailable to claim because usdn price lower than usdtPriceAssetAllowableRatio")]
498- if ((bD == bD))
502+ else f("unavailable to claim because usdn price lower than usdtPriceAssetAllowableRatio"), if (if (if ((bq != O))
503+ then true
504+ else (aK == 0))
505+ then true
506+ else (aK > height))
507+ then true
508+ else f("Claim is disabled")]
509+ if ((bF == bF))
499510 then {
500- let cL = (bX - bZ)
501- let cM = (bY - bZ)
502- let bh = if ((aZ > bZ))
503- then [ScriptTransfer(cq.caller, bZ, cH), IntegerEntry(aD(bs), (aZ - bZ))]
511+ let cN = (bZ - cb)
512+ let cO = (ca - cb)
513+ let bj = if ((bb > cb))
514+ then [ScriptTransfer(cs.caller, cb, cJ), IntegerEntry(aD(bu), (bb - cb))]
504515 else {
505- let cN = split(h(invoke(this, "claimREADONLY", [O, bs], nil)), c)
506- if ((cN == cN))
516+ let cP = split(h(invoke(this, "claimREADONLY", [O, bu], nil)), c)
517+ if ((cP == cP))
507518 then {
508- let cO = parseIntValue(cN[3])
509- let cP = if ((cO == bZ))
519+ let cQ = parseIntValue(cP[3])
520+ let cR = if ((cQ == cb))
510521 then {
511- let cQ = parseIntValue(bt[T])
512- let cR = parseIntValue(bt[U])
513- let cS = parseIntValue(bt[V])
514- let cT = parseIntValue(bt[W])
515- let cU = parseIntValue(bt[X])
516- let cV = [toString(cQ), "0", toString(cS), toString(cT), toString(cU)]
517- let cW = aM()
518- let cX = parseIntValue(cW[T])
519- let cY = parseIntValue(cW[U])
520- let cZ = parseIntValue(cW[V])
521- let da = parseIntValue(cW[W])
522- let db = parseIntValue(cW[X])
523- let dc = (cY - cR)
524- let dd = [toString(cX), toString(dc), toString(cZ), toString(da), toString(db)]
525- let de = (valueOrElse(getInteger(aG()), 0) + cR)
526-[StringEntry(aF(bs), toString(cR)), StringEntry(aG(), toString(de)), aV(ai(bs), cV, cy, bx, 0), aV(ak(), dd, cy, bx, 0)]
522+ let cS = parseIntValue(bv[T])
523+ let cT = parseIntValue(bv[U])
524+ let cU = parseIntValue(bv[V])
525+ let cV = parseIntValue(bv[W])
526+ let cW = parseIntValue(bv[X])
527+ let cX = [toString(cS), "0", toString(cU), toString(cV), toString(cW)]
528+ let cY = aO()
529+ let cZ = parseIntValue(cY[T])
530+ let da = parseIntValue(cY[U])
531+ let db = parseIntValue(cY[V])
532+ let dc = parseIntValue(cY[W])
533+ let dd = parseIntValue(cY[X])
534+ let de = (da - cT)
535+ let df = [toString(cZ), toString(de), toString(db), toString(dc), toString(dd)]
536+ let dg = (valueOrElse(getInteger(aG()), 0) + cT)
537+[StringEntry(aF(bu), toString(cT)), StringEntry(aG(), toString(dg)), aX(ai(bu), cX, cA, bz, 0), aX(ak(), df, cA, bz, 0)]
527538 }
528- else [aV(ai(bs), bt, cy, bx, 0), aV(ak(), aM(), cy, bx, 0)]
529- let df = ((aZ + bF) - bZ)
530- ([ScriptTransfer(cq.caller, bZ, cH), IntegerEntry(aD(bs), df)] ++ cP)
539+ else [aX(ai(bu), bv, cA, bz, 0), aX(ak(), aO(), cA, bz, 0)]
540+ let dh = ((bb + bH) - cb)
541+ ([ScriptTransfer(cs.caller, cb, cJ), IntegerEntry(aD(bu), dh)] ++ cR)
531542 }
532543 else throw("Strict value is not equal to itself.")
533544 }
534- $Tuple2(([IntegerEntry(ar(), bQ), IntegerEntry(as(bQ), bR), IntegerEntry(au(bQ), bT), IntegerEntry(az(O, bQ), cL), IntegerEntry(aA(O, bQ, bs), cM), bm(bs, bZ, cJ, cq.transactionId)] ++ bh), unit)
545+ $Tuple2(([IntegerEntry(ar(), bS), IntegerEntry(as(bS), bT), IntegerEntry(au(bS), bV), IntegerEntry(az(O, bS), cN), IntegerEntry(aA(O, bS, bu), cO), bo(bu, cb, cL, cs.transactionId)] ++ bj), unit)
535546 }
536547 else throw("Strict value is not equal to itself.")
537548 }
538549 else {
539- let dg = fraction(aZ, e, pow(10, 0, bd, 0, 0, DOWN))
540- $Tuple2([ScriptTransfer(cq.caller, (bF + dg), cH), IntegerEntry(aD(bs), 0), aV(ai(bs), bt, cy, bx, aZ), aV(ak(), aM(), cy, bx, aZ), bm(bs, cI, (cJ + dg), cq.transactionId)], unit)
550+ let di = fraction(bb, e, pow(10, 0, bf, 0, 0, DOWN))
551+ $Tuple2([ScriptTransfer(cs.caller, (bH + di), cJ), IntegerEntry(aD(bu), 0), aX(ai(bu), bv, cA, bz, bb), aX(ak(), aO(), cA, bz, bb), bo(bu, cK, (cL + di), cs.transactionId)], unit)
541552 }
542- bh
553+ bj
543554 }
544555 }
545556
546557
547558
548-@Callable(cq)
549-func cleanRemaingAmount (bs) = {
550- let O = aJ()[D]
551- let cN = split(h(invoke(this, "claimREADONLY", [O, bs], nil)), c)
552- if ((cN == cN))
559+@Callable(cs)
560+func cleanRemaingAmount (bu) = {
561+ let O = aL()[D]
562+ let cP = split(h(invoke(this, "claimREADONLY", [O, bu], nil)), c)
563+ if ((cP == cP))
553564 then {
554- let cO = parseIntValue(cN[2])
555- let dh = if ((cO == 0))
565+ let cQ = parseIntValue(cP[2])
566+ let dj = if ((cQ == 0))
556567 then true
557568 else f("user have unclaimed assets")
558- if ((dh == dh))
569+ if ((dj == dj))
559570 then {
560- let di = split(value(getString(ai(bs))), c)
561- let cQ = parseIntValue(di[T])
562- let cR = parseIntValue(di[U])
563- let cS = parseIntValue(di[V])
564- let cT = parseIntValue(di[W])
565- let cU = parseIntValue(di[X])
566- let dj = if ((cR != 0))
571+ let dk = split(value(getString(ai(bu))), c)
572+ let cS = parseIntValue(dk[T])
573+ let cT = parseIntValue(dk[U])
574+ let cU = parseIntValue(dk[V])
575+ let cV = parseIntValue(dk[W])
576+ let cW = parseIntValue(dk[X])
577+ let dl = if ((cT != 0))
567578 then true
568579 else f("investorRemainingAmount already zero")
569- if ((dj == dj))
580+ if ((dl == dl))
570581 then {
571- let dk = makeString(["%d%d%d%d%d", toString(cQ), "0", toString(cS), toString(cT), toString(cU)], c)
572- let cW = split(value(getString(ak())), c)
573- let cX = parseIntValue(cW[T])
574- let cY = parseIntValue(cW[U])
575- let cZ = parseIntValue(cW[V])
576- let da = parseIntValue(cW[W])
577- let db = parseIntValue(cW[X])
578- let dl = makeString(["%d%d%d%d%d", toString(cX), toString((cY - cR)), toString(cZ), toString(da), toString(db)], c)
579- let de = (valueOrElse(getInteger(aG()), 0) + cR)
580-[StringEntry(aF(bs), toString(cR)), StringEntry(aG(), toString(de)), StringEntry(ai(bs), dk), StringEntry(ak(), dl)]
582+ let dm = makeString(["%d%d%d%d%d", toString(cS), "0", toString(cU), toString(cV), toString(cW)], c)
583+ let cY = split(value(getString(ak())), c)
584+ let cZ = parseIntValue(cY[T])
585+ let da = parseIntValue(cY[U])
586+ let db = parseIntValue(cY[V])
587+ let dc = parseIntValue(cY[W])
588+ let dd = parseIntValue(cY[X])
589+ let dn = makeString(["%d%d%d%d%d", toString(cZ), toString((da - cT)), toString(db), toString(dc), toString(dd)], c)
590+ let dg = (valueOrElse(getInteger(aG()), 0) + cT)
591+[StringEntry(aF(bu), toString(cT)), StringEntry(aG(), toString(dg)), StringEntry(ai(bu), dm), StringEntry(ak(), dn)]
581592 }
582593 else throw("Strict value is not equal to itself.")
583594 }
584595 else throw("Strict value is not equal to itself.")
585596 }
586597 else throw("Strict value is not equal to itself.")
587598 }
588599
589600
590601
591-@Callable(cq)
592-func claimREADONLY (bo,bs) = {
593- let cG = bn(bo, addressFromStringValue(bs), fromBase58String(""))
594- let cy = cG._1
595- let bF = cG._2
596- let cH = cG._3
597- let bt = cG._4
598- let bx = cG._5
599- let dm = cG._6
600- let cO = dm[0]
601- let dn = dm[1]
602- $Tuple2(nil, makeString(["%s%d%d", bs, toString(cO), toString(dn)], c))
602+@Callable(cs)
603+func claimREADONLY (bq,bu) = {
604+ let cI = bp(bq, addressFromStringValue(bu), fromBase58String(""))
605+ let cA = cI._1
606+ let bH = cI._2
607+ let cJ = cI._3
608+ let bv = cI._4
609+ let bz = cI._5
610+ let do = cI._6
611+ let cQ = do[0]
612+ let dp = do[1]
613+ $Tuple2(nil, makeString(["%s%d%d", bu, toString(cQ), toString(dp)], c))
603614 }
604615
605616
606617
607-@Callable(cq)
608-func claimV2READONLY (bo,bs) = {
609- let cG = bn(bo, addressFromStringValue(bs), fromBase58String(""))
610- let cy = cG._1
611- let bF = cG._2
612- let cH = cG._3
613- let bt = cG._4
614- let bx = cG._5
615- let dm = cG._6
616- let cO = dm[0]
617- let dn = dm[1]
618- let bc = aJ()
619- let O = bc[D]
620- let aZ = valueOrElse(getInteger(aD(bs)), 0)
621- let dg = (aZ * 100)
622- let do = (dn + dg)
623- let dp = bE(O, bs, bF, cy[aT])
624- let bZ = dp._1
625- let bX = dp._2
626- let bY = dp._3
627- let bG = dp._4
628- let ca = dp._5
629- let cl = dp._6
630- let cm = dp._7
631- let bQ = dp._8
632- let bR = dp._9
633- let bT = dp._10
634- let dq = valueOrElse(getInteger(au(bQ)), 0)
635- let dr = (parseIntValue(aO(bs)[V]) - aZ)
636- let ds = if ((height > dq))
618+@Callable(cs)
619+func claimV2READONLY (bq,bu) = {
620+ let cI = bp(bq, addressFromStringValue(bu), fromBase58String(""))
621+ let cA = cI._1
622+ let bH = cI._2
623+ let cJ = cI._3
624+ let bv = cI._4
625+ let bz = cI._5
626+ let do = cI._6
627+ let cQ = do[0]
628+ let dp = do[1]
629+ let be = aL()
630+ let O = be[D]
631+ let bb = valueOrElse(getInteger(aD(bu)), 0)
632+ let di = (bb * 100)
633+ let dq = (dp + di)
634+ let dr = bG(O, bu, bH, cA[aV])
635+ let cb = dr._1
636+ let bZ = dr._2
637+ let ca = dr._3
638+ let bI = dr._4
639+ let cc = dr._5
640+ let cn = dr._6
641+ let co = dr._7
642+ let bS = dr._8
643+ let bT = dr._9
644+ let bV = dr._10
645+ let ds = valueOrElse(getInteger(au(bS)), 0)
646+ let dt = (parseIntValue(aQ(bu)[V]) - bb)
647+ let du = if ((height > ds))
637648 then {
638- let dt = value(getInteger(aq()))
639- let du = value(getInteger(ay(O)))
640- let dv = value(getInteger(aw(O)))
641- makeString(["%d%d%d%d%d%d", toString(do), toString(du), toString(dv), toString(ca), toString(cl), toString(dt), toString(dr)], c)
649+ let dv = value(getInteger(aq()))
650+ let dw = value(getInteger(ay(O)))
651+ let dx = value(getInteger(aw(O)))
652+ makeString(["%d%d%d%d%d%d", toString(dq), toString(dw), toString(dx), toString(cc), toString(cn), toString(dv), toString(dt)], c)
642653 }
643- else makeString(["%d%d%d%d%d%d", toString(do), toString(bZ), toString(bX), toString(ca), toString(cl), toString(cm), toString(dr)], c)
644- $Tuple2(nil, ds)
654+ else makeString(["%d%d%d%d%d%d", toString(dq), toString(cb), toString(bZ), toString(cc), toString(cn), toString(co), toString(dt)], c)
655+ $Tuple2(nil, du)
645656 }
646657
647658
648-@Verifier(dw)
649-func dx () = {
650- let dy = {
651- let j = cn()
659+@Verifier(dy)
660+func dz () = {
661+ let dA = {
662+ let j = cp()
652663 if ($isInstanceOf(j, "ByteVector"))
653664 then {
654- let cs = j
655- cs
665+ let cu = j
666+ cu
656667 }
657668 else if ($isInstanceOf(j, "Unit"))
658- then dw.senderPublicKey
669+ then dy.senderPublicKey
659670 else throw("Match error")
660671 }
661- sigVerify(dw.bodyBytes, dw.proofs[0], dy)
672+ sigVerify(dy.bodyBytes, dy.proofs[0], dA)
662673 }
663674

github/deemru/w8io/3ef1775 
499.69 ms