tx · NkrWMQqaWLPBDGFc7jHJkpc7UBRE4ZhxE14iidRpbbr

3N1BEXuoepNEwqkbeZYKviaLQfvBQV3ibYE:  -0.02100000 Waves

2023.06.08 17:28 [2613819] smart account 3N1BEXuoepNEwqkbeZYKviaLQfvBQV3ibYE > SELF 0.00000000 Waves

{ "type": 13, "id": "NkrWMQqaWLPBDGFc7jHJkpc7UBRE4ZhxE14iidRpbbr", "fee": 2100000, "feeAssetId": null, "timestamp": 1686234560716, "version": 2, "chainId": 84, "sender": "3N1BEXuoepNEwqkbeZYKviaLQfvBQV3ibYE", "senderPublicKey": "6t3vrhP1jCmG7CeKBmL8hUibtdP3cMXGC2XtPYEPPC5w", "proofs": [ "5strUDeUEiECT46uc2BdVp3Vt3GQS3T3rtQRLaoC5bjcPAFp7f2fS6FeAKgbzV4QhJFgbYYVLBi3JDdha5gWtZNP" ], "script": "base64:BgIrCAISBQoDCAEIEgMKAQgSBAoCCAQSAwoBCBIDCgEIEgUKAwgBCBIECgIIATAACXNlcGFyYXRvcgICX18ABU1VTFQ4AIDC1y8BB3dyYXBFcnIBA21zZwkAuQkCCQDMCAICGHZvdGluZ192ZXJpZmllZF92Mi5yaWRlOgkAzAgCBQNtc2cFA25pbAIBIAEIdGhyb3dFcnIBA21zZwkAAgEJAQd3cmFwRXJyAQUDbXNnAQVhc0ludAEDdmFsBAckbWF0Y2gwBQN2YWwDCQABAgUHJG1hdGNoMAIDSW50BAZ2YWxJbnQFByRtYXRjaDAFBnZhbEludAkAAgECG0ZhaWxlZCB0byBjYXN0IGludG8gSW50ZWdlcgEQZ2V0SW50ZWdlck9yWmVybwIHYWRkcmVzcwNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUHYWRkcmVzcwUDa2V5AAABEGdldEludGVnZXJPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUHYWRkcmVzcwUDa2V5CQEHd3JhcEVycgEJAKwCAgUDa2V5Ag8gaXMgbm90IGRlZmluZWQBEGdldFN0cmluZ09yRW1wdHkCB2FkZHJlc3MDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFB2FkZHJlc3MFA2tleQIAAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQEHd3JhcEVycgEJAKwCAgUDa2V5Ag8gaXMgbm90IGRlZmluZWQAE2tleUJvb3N0aW5nQ29udHJhY3QJALkJAgkAzAgCAgIlcwkAzAgCAhBib29zdGluZ0NvbnRyYWN0BQNuaWwFCXNlcGFyYXRvcgATa2V5RW1pc3Npb25Db250cmFjdAkAuQkCCQDMCAICAiVzCQDMCAICEGVtaXNzaW9uQ29udHJhY3QFA25pbAUJc2VwYXJhdG9yABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0CQC5CQIJAMwIAgICJXMJAMwIAgITYXNzZXRzU3RvcmVDb250cmFjdAUDbmlsBQlzZXBhcmF0b3IAEGJvb3N0aW5nQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFE2tleUJvb3N0aW5nQ29udHJhY3QAEGVtaXNzaW9uQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFE2tleUVtaXNzaW9uQ29udHJhY3QAE2Fzc2V0c1N0b3JlQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFFmtleUFzc2V0c1N0b3JlQ29udHJhY3QAEWtleUVtaXNzaW9uQ29uZmlnCQC5CQIJAMwIAgICJXMJAMwIAgIGY29uZmlnBQNuaWwFCXNlcGFyYXRvcgAMd3hBc3NldElkU3RyCQCRAwIJALUJAgkBD2dldFN0cmluZ09yRmFpbAIFEGVtaXNzaW9uQ29udHJhY3QFEWtleUVtaXNzaW9uQ29uZmlnBQlzZXBhcmF0b3IAAQAJd3hBc3NldElkCQDZBAEFDHd4QXNzZXRJZFN0cgAVa2V5Vm90aW5nVGhyZXNob2xkQWRkCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg92b3RpbmdUaHJlc2hvbGQJAMwIAgIDYWRkBQNuaWwFCXNlcGFyYXRvcgAYa2V5Vm90aW5nVGhyZXNob2xkUmVtb3ZlCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg92b3RpbmdUaHJlc2hvbGQJAMwIAgIGcmVtb3ZlBQNuaWwFCXNlcGFyYXRvcgESa2V5UGVyaW9kTGVuZ3RoQWRkAgdhc3NldElkBWluZGV4CQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICD3BlcmlvZExlbmd0aEFkZAkAzAgCBQdhc3NldElkCQDMCAIJAKQDAQUFaW5kZXgFA25pbAUJc2VwYXJhdG9yABVrZXlQZXJpb2RMZW5ndGhSZW1vdmUJALkJAgkAzAgCAgIlcwkAzAgCAhJwZXJpb2RMZW5ndGhSZW1vdmUFA25pbAUJc2VwYXJhdG9yABJrZXlNYXhQZXJpb2RMZW5ndGgJALkJAgkAzAgCAgIlcwkAzAgCAg9tYXhQZXJpb2RMZW5ndGgFA25pbAUJc2VwYXJhdG9yABJrZXlNaW5QZXJpb2RMZW5ndGgJALkJAgkAzAgCAgIlcwkAzAgCAg9taW5QZXJpb2RMZW5ndGgFA25pbAUJc2VwYXJhdG9yARZrZXlWb3RpbmdSZXdhcmRBc3NldElkAgdhc3NldElkBWluZGV4CQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICE3ZvdGluZ1Jld2FyZEFzc2V0SWQJAMwIAgUHYXNzZXRJZAkAzAgCCQCkAwEFBWluZGV4BQNuaWwFCXNlcGFyYXRvcgEPa2V5Vm90aW5nUmV3YXJkAwt1c2VyQWRkcmVzcwdhc3NldElkBWluZGV4CQC5CQIJAMwIAgIIJXMlcyVzJWQJAMwIAgIMdm90aW5nUmV3YXJkCQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgUHYXNzZXRJZAkAzAgCCQCkAwEFBWluZGV4BQNuaWwFCXNlcGFyYXRvcgEUa2V5VG90YWxWb3RpbmdSZXdhcmQCB2Fzc2V0SWQFaW5kZXgJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIMdm90aW5nUmV3YXJkCQDMCAIFB2Fzc2V0SWQJAMwIAgkApAMBBQVpbmRleAUDbmlsBQlzZXBhcmF0b3IAG2tleUZpbmFsaXplQ2FsbFJld2FyZEFtb3VudAkAuQkCCQDMCAICAiVzCQDMCAICGGZpbmFsaXplQ2FsbFJld2FyZEFtb3VudAUDbmlsBQlzZXBhcmF0b3IAGmtleU1pblN1Z2dlc3RSZW1vdmVCYWxhbmNlCQC5CQIJAMwIAgICJXMJAMwIAgIXbWluU3VnZ2VzdFJlbW92ZUJhbGFuY2UFA25pbAUJc2VwYXJhdG9yAQ9rZXlDdXJyZW50SW5kZXgBB2Fzc2V0SWQJALkJAgkAzAgCAgQlcyVzCQDMCAICDGN1cnJlbnRJbmRleAkAzAgCBQdhc3NldElkBQNuaWwFCXNlcGFyYXRvcgEHa2V5Vm90ZQMHYXNzZXRJZAVpbmRleAZjYWxsZXIJALkJAgkAzAgCAgglcyVzJWQlcwkAzAgCAgR2b3RlCQDMCAIFB2Fzc2V0SWQJAMwIAgkApAMBBQVpbmRleAkAzAgCCQClCAEFBmNhbGxlcgUDbmlsBQlzZXBhcmF0b3IBCXZvdGVWYWx1ZQIHaW5GYXZvcglnd3hBbW91bnQJALkJAgkAzAgCAgQlcyVkCQDMCAIJAKUDAQUHaW5GYXZvcgkAzAgCCQCkAwEFCWd3eEFtb3VudAUDbmlsBQlzZXBhcmF0b3IBEGtleVN1Z2dlc3RJc3N1ZXICB2Fzc2V0SWQFaW5kZXgJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgINc3VnZ2VzdElzc3VlcgkAzAgCBQdhc3NldElkCQDMCAIJAKQDAQUFaW5kZXgFA25pbAUJc2VwYXJhdG9yAQ9rZXlDbGFpbUhpc3RvcnkDC3VzZXJBZGRyZXNzB2Fzc2V0SWQFaW5kZXgJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAgdoaXN0b3J5CQDMCAIJAKUIAQULdXNlckFkZHJlc3MJAMwIAgUHYXNzZXRJZAkAzAgCCQCkAwEFBWluZGV4BQNuaWwFCXNlcGFyYXRvcgAOa2V5RmVlUGVyQmxvY2sJALkJAgkAzAgCAgIlcwkAzAgCAgtmZWVQZXJCbG9jawUDbmlsBQlzZXBhcmF0b3IAC2ZlZVBlckJsb2NrCQEQZ2V0SW50ZWdlck9yRmFpbAIFBHRoaXMFDmtleUZlZVBlckJsb2NrACZrZXlNaW5XeE1pbkZvclN1Z2dlc3RBZGRBbW91bnRSZXF1aXJlZAkAuQkCCQDMCAICAiVzCQDMCAICIHd4TWluRm9yU3VnZ2VzdEFkZEFtb3VudFJlcXVpcmVkBQNuaWwFCXNlcGFyYXRvcgAja2V5V3hGb3JTdWdnZXN0UmVtb3ZlQW1vdW50UmVxdWlyZWQJALkJAgkAzAgCAgIlcwkAzAgCAiB3eEZvclN1Z2dlc3RSZW1vdmVBbW91bnRSZXF1aXJlZAUDbmlsBQlzZXBhcmF0b3IBDWtleVZvdGluZ0luZm8CB2Fzc2V0SWQFaW5kZXgJALkJAgkAzAgCAgYlcyVzJWQJAMwIAgIKdm90aW5nSW5mbwkAzAgCBQdhc3NldElkCQDMCAIJAKQDAQUFaW5kZXgFA25pbAUJc2VwYXJhdG9yAQ92b3RpbmdJbmZvVmFsdWUKDWlzUmV3YXJkRXhpc3QNcmV3YXJkQXNzZXRJZAxyZXdhcmRBbW91bnQKdm90aW5nVHlwZQZzdGF0dXMRdm90aW5nU3RhcnRIZWlnaHQPdm90aW5nRW5kSGVpZ2h0C3ZvdGVzUXVvcnVtCHZvdGVzRm9yDHZvdGVzQWdhaW5zdAkAuQkCCQDMCAICFiVzJXMlcyVkJXMlcyVkJWQlZCVkJWQJAMwIAgkApQMBBQ1pc1Jld2FyZEV4aXN0CQDMCAIFDXJld2FyZEFzc2V0SWQJAMwIAgkApAMBBQxyZXdhcmRBbW91bnQJAMwIAgUKdm90aW5nVHlwZQkAzAgCBQZzdGF0dXMJAMwIAgkApAMBBRF2b3RpbmdTdGFydEhlaWdodAkAzAgCCQCkAwEFD3ZvdGluZ0VuZEhlaWdodAkAzAgCCQCkAwEFC3ZvdGVzUXVvcnVtCQDMCAIJAKQDAQUIdm90ZXNGb3IJAMwIAgkApAMBBQx2b3Rlc0FnYWluc3QFA25pbAUJc2VwYXJhdG9yARhnZXRVc2VyR3d4QW1vdW50QXRIZWlnaHQCC3VzZXJBZGRyZXNzDHRhcmdldEhlaWdodAQJZ3d4QW1vdW50CQD8BwQFEGJvb3N0aW5nQ29udHJhY3QCIGdldFVzZXJHd3hBbW91bnRBdEhlaWdodFJFQURPTkxZCQDMCAIFC3VzZXJBZGRyZXNzCQDMCAIFDHRhcmdldEhlaWdodAUDbmlsBQNuaWwJAQVhc0ludAEFCWd3eEFtb3VudAEWa2V5TWFuYWdlclZhdWx0QWRkcmVzcwACFyVzX19tYW5hZ2VyVmF1bHRBZGRyZXNzARNrZXlNYW5hZ2VyUHVibGljS2V5AAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBHGdldE1hbmFnZXJWYXVsdEFkZHJlc3NPclRoaXMABAckbWF0Y2gwCQCiCAEJARZrZXlNYW5hZ2VyVmF1bHRBZGRyZXNzAAMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAXMFBHRoaXMBFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQABBNtYW5hZ2VyVmF1bHRBZGRyZXNzCQEcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcwAEByRtYXRjaDAJAJ0IAgUTbWFuYWdlclZhdWx0QWRkcmVzcwkBE2tleU1hbmFnZXJQdWJsaWNLZXkAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgESZ2V0Vm90aW5nSW5mb1BhcnRzAQp2b3RpbmdJbmZvBA92b3RpbmdJbmZvUGFydHMJALUJAgUKdm90aW5nSW5mbwUJc2VwYXJhdG9yBBBpc1Jld2FyZEV4aXN0U3RyCQCRAwIFD3ZvdGluZ0luZm9QYXJ0cwABBA1pc1Jld2FyZEV4aXN0AwkAAAIFEGlzUmV3YXJkRXhpc3RTdHICBHRydWUGBwQNcmV3YXJkQXNzZXRJZAkAkQMCBQ92b3RpbmdJbmZvUGFydHMAAgQMcmV3YXJkQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdm90aW5nSW5mb1BhcnRzAAMECnZvdGluZ1R5cGUJAJEDAgUPdm90aW5nSW5mb1BhcnRzAAQEBnN0YXR1cwkAkQMCBQ92b3RpbmdJbmZvUGFydHMABQQRdm90aW5nU3RhcnRIZWlnaHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ92b3RpbmdJbmZvUGFydHMABgQPdm90aW5nRW5kSGVpZ2h0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdm90aW5nSW5mb1BhcnRzAAcEC3ZvdGVzUXVvcnVtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdm90aW5nSW5mb1BhcnRzAAgECHZvdGVzRm9yCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdm90aW5nSW5mb1BhcnRzAAkEDHZvdGVzQWdhaW5zdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD3ZvdGluZ0luZm9QYXJ0cwAKCQCcCgoFDWlzUmV3YXJkRXhpc3QFDXJld2FyZEFzc2V0SWQFDHJld2FyZEFtb3VudAUKdm90aW5nVHlwZQUGc3RhdHVzBRF2b3RpbmdTdGFydEhlaWdodAUPdm90aW5nRW5kSGVpZ2h0BQt2b3Rlc1F1b3J1bQUIdm90ZXNGb3IFDHZvdGVzQWdhaW5zdAERdm90aW5nRXhpc3RDaGVja3MCB2Fzc2V0SWQMY3VycmVudEluZGV4BAp2b3RpbmdJbmZvCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBDWtleVZvdGluZ0luZm8CBQdhc3NldElkBQxjdXJyZW50SW5kZXgJAQd3cmFwRXJyAQIVdm90aW5nIGluZm8gbm90IGZvdW5kBA92b3RpbmdJbmZvQXJyYXkJALUJAgUKdm90aW5nSW5mbwUJc2VwYXJhdG9yBAZzdGF0dXMJAJEDAgUPdm90aW5nSW5mb0FycmF5AAUED3ZvdGluZ0VuZEhlaWdodAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPdm90aW5nSW5mb0FycmF5AAcJAQd3cmFwRXJyAQIddm90aW5nIHN0YXJ0IGhlaWdodCBub3QgZm91bmQEDXN1Z2dlc3RJc3N1ZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5U3VnZ2VzdElzc3VlcgIFB2Fzc2V0SWQFDGN1cnJlbnRJbmRleAkBB3dyYXBFcnIBAhd2b3RpbmcgaXNzdWVyIG5vdCBmb3VuZAQGY2hlY2tzCQDMCAIDCQAAAgUGc3RhdHVzAgppblByb2dyZXNzBgkBCHRocm93RXJyAQIVbm8gdm90aW5nIGluIHByb2dyZXNzCQDMCAIDCQBmAgUPdm90aW5nRW5kSGVpZ2h0BQZoZWlnaHQGCQEIdGhyb3dFcnIBAg52b3RpbmcgZXhwaXJlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzCQCVCgMFBnN0YXR1cwUPdm90aW5nRW5kSGVpZ2h0BQ1zdWdnZXN0SXNzdWVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ9jYWxjdWxhdGVSZXdhcmQDBXZvdGVyB2Fzc2V0SWQFaW5kZXgEB3ZvdGVLZXkJAQdrZXlWb3RlAwUHYXNzZXRJZAUFaW5kZXgFBXZvdGVyBAhsYXN0Vm90ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEFB3ZvdGVLZXkJAQd3cmFwRXJyAQISeW91IGhhdmUgbm90IHZvdGVkBA1sYXN0Vm90ZVBhcnRzCQC1CQIFCGxhc3RWb3RlBQlzZXBhcmF0b3IECWd3eEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDWxhc3RWb3RlUGFydHMAAgQNdm90aW5nSW5mb1N0cgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJAQ1rZXlWb3RpbmdJbmZvAgUHYXNzZXRJZAUFaW5kZXgJAQd3cmFwRXJyAQIVdm90aW5nIGluZm8gbm90IGZvdW5kBAt2b3RpbmdQYXJ0cwkBEmdldFZvdGluZ0luZm9QYXJ0cwEFDXZvdGluZ0luZm9TdHIECHZvdGVzRm9yCAULdm90aW5nUGFydHMCXzkEDHZvdGVzQWdhaW5zdAgFC3ZvdGluZ1BhcnRzA18xMAQVcGFydE9mVGhlVG90YWxWb3Rlc1g4CQBrAwUJZ3d4QW1vdW50BQVNVUxUOAkAZAIFCHZvdGVzRm9yBQx2b3Rlc0FnYWluc3QEEXRvdGFsVm90aW5nUmV3YXJkCQELdmFsdWVPckVsc2UCCQCfCAEJARRrZXlUb3RhbFZvdGluZ1Jld2FyZAIFB2Fzc2V0SWQFBWluZGV4AAAEEXZvdGVyUmV3YXJkQW1vdW50CQBuBAUVcGFydE9mVGhlVG90YWxWb3Rlc1g4BRF0b3RhbFZvdGluZ1Jld2FyZAUFTVVMVDgFBUZMT09SBRF2b3RlclJld2FyZEFtb3VudAcBaQEKc3VnZ2VzdEFkZAMHYXNzZXRJZAxwZXJpb2RMZW5ndGgKYXNzZXRJbWFnZQQJd3hQYXltZW50CQCRAwIIBQFpCHBheW1lbnRzAAAEEHd4UGF5bWVudEFzc2V0SWQJAQV2YWx1ZQEIBQl3eFBheW1lbnQHYXNzZXRJZAQPd3hQYXltZW50QW1vdW50CQEFdmFsdWUBCAUJd3hQYXltZW50BmFtb3VudAQPbWluUGVyaW9kTGVuZ3RoCQERQGV4dHJOYXRpdmUoMTA1NSkBBRJrZXlNaW5QZXJpb2RMZW5ndGgED21heFBlcmlvZExlbmd0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQUSa2V5TWF4UGVyaW9kTGVuZ3RoBAZjaGVja3MJAMwIAgMDCQBnAgUMcGVyaW9kTGVuZ3RoBQ9taW5QZXJpb2RMZW5ndGgJAGcCBQ9tYXhQZXJpb2RMZW5ndGgFDHBlcmlvZExlbmd0aAcGCQEIdGhyb3dFcnIBAhRpbnZhbGlkIHBlcmlvZExlbmd0aAkAzAgCAwkAZgIFD3d4UGF5bWVudEFtb3VudAkAaAIFDHBlcmlvZExlbmd0aAULZmVlUGVyQmxvY2sGCQEIdGhyb3dFcnIBAh5ub3QgZW5vdWdoIHd4IGZvciBnaXZlbiBwZXJpb2QJAMwIAgMJAGcCBQ93eFBheW1lbnRBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQEFJmtleU1pbld4TWluRm9yU3VnZ2VzdEFkZEFtb3VudFJlcXVpcmVkBgkBCHRocm93RXJyAQIhcGF5bWVudCBsZXNzIHRoZW4gbWluIGZvciBzdWdnZXN0BQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MED2N1cnJlbnRJbmRleEtleQkBD2tleUN1cnJlbnRJbmRleAEFB2Fzc2V0SWQEDGN1cnJlbnRJbmRleAkAnwgBBQ9jdXJyZW50SW5kZXhLZXkECG5ld0luZGV4AwkBCWlzRGVmaW5lZAEFDGN1cnJlbnRJbmRleAkAZAIJAQV2YWx1ZQEFDGN1cnJlbnRJbmRleAABAAAECyR0MDg3MjA5MzYwAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQQTdm90aW5nUmV3YXJkUGF5bWVudAkAkQMCCAUBaQhwYXltZW50cwABBBp2b3RpbmdSZXdhcmRQYXltZW50QXNzZXRJZAkA2AQBCQEFdmFsdWUBCAUTdm90aW5nUmV3YXJkUGF5bWVudAdhc3NldElkBBl2b3RpbmdSZXdhcmRQYXltZW50QW1vdW50CQEFdmFsdWUBCAUTdm90aW5nUmV3YXJkUGF5bWVudAZhbW91bnQJAJYKBAYFGnZvdGluZ1Jld2FyZFBheW1lbnRBc3NldElkBRl2b3RpbmdSZXdhcmRQYXltZW50QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlWb3RpbmdSZXdhcmRBc3NldElkAgUHYXNzZXRJZAUIbmV3SW5kZXgFGnZvdGluZ1Jld2FyZFBheW1lbnRBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5VG90YWxWb3RpbmdSZXdhcmQCBQdhc3NldElkBQhuZXdJbmRleAUZdm90aW5nUmV3YXJkUGF5bWVudEFtb3VudAUDbmlsCQCWCgQHAgVFTVBUWQAABQNuaWwEDWlzUmV3YXJkRXhpc3QIBQskdDA4NzIwOTM2MAJfMQQNcmV3YXJkQXNzZXRJZAgFCyR0MDg3MjA5MzYwAl8yBAxyZXdhcmRBbW91bnQIBQskdDA4NzIwOTM2MAJfMwQTdm90aW5nUmV3YXJkQWN0aW9ucwgFCyR0MDg3MjA5MzYwAl80BAt2b3Rlc1F1b3J1bQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFFWtleVZvdGluZ1RocmVzaG9sZEFkZAkBB3dyYXBFcnIBAhp2b3RpbmdUaHJlc2hvbGRBZGQgbm90IHNldAQKdm90aW5nSW5mbwkBD3ZvdGluZ0luZm9WYWx1ZQoFDWlzUmV3YXJkRXhpc3QFDXJld2FyZEFzc2V0SWQFDHJld2FyZEFtb3VudAIMdmVyaWZpY2F0aW9uAgppblByb2dyZXNzBQZoZWlnaHQJAGQCBQZoZWlnaHQFDHBlcmlvZExlbmd0aAULdm90ZXNRdW9ydW0AAAAABBhmaW5hbGl6ZUNhbGxSZXdhcmRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUba2V5RmluYWxpemVDYWxsUmV3YXJkQW1vdW50AAAEDGJ1cm5XeEFtb3VudAkAZQIFD3d4UGF5bWVudEFtb3VudAUYZmluYWxpemVDYWxsUmV3YXJkQW1vdW50BBxhc3NldHNTdG9yZUNyZWF0ZU9yVXBkYXRlSW52CQD8BwQFE2Fzc2V0c1N0b3JlQ29udHJhY3QCDmNyZWF0ZU9yVXBkYXRlCQDMCAIFB2Fzc2V0SWQJAMwIAgUKYXNzZXRJbWFnZQkAzAgCBwUDbmlsBQNuaWwDCQAAAgUcYXNzZXRzU3RvcmVDcmVhdGVPclVwZGF0ZUludgUcYXNzZXRzU3RvcmVDcmVhdGVPclVwZGF0ZUludgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9jdXJyZW50SW5kZXhLZXkFCG5ld0luZGV4CQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTdWdnZXN0SXNzdWVyAgUHYXNzZXRJZAUIbmV3SW5kZXgJAKUIAQgFAWkGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlWb3RpbmdJbmZvAgUHYXNzZXRJZAUIbmV3SW5kZXgFCnZvdGluZ0luZm8JAMwIAgkBBEJ1cm4CBRB3eFBheW1lbnRBc3NldElkBQxidXJuV3hBbW91bnQFA25pbAUTdm90aW5nUmV3YXJkQWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ1zdWdnZXN0UmVtb3ZlAQdhc3NldElkBA5nd3hBbW91bnRBdE5vdwkBGGdldFVzZXJHd3hBbW91bnRBdEhlaWdodAIJAKUIAQgFAWkGY2FsbGVyBQZoZWlnaHQEF21pblN1Z2dlc3RSZW1vdmVCYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA1NSkBBRprZXlNaW5TdWdnZXN0UmVtb3ZlQmFsYW5jZQQJd3hQYXltZW50CQCRAwIIBQFpCHBheW1lbnRzAAAEEHd4UGF5bWVudEFzc2V0SWQJAQV2YWx1ZQEIBQl3eFBheW1lbnQHYXNzZXRJZAQPd3hQYXltZW50QW1vdW50CQEFdmFsdWUBCAUJd3hQYXltZW50BmFtb3VudAQGY2hlY2tzCQDMCAIDCQBnAgUOZ3d4QW1vdW50QXROb3cFF21pblN1Z2dlc3RSZW1vdmVCYWxhbmNlBgkBCHRocm93RXJyAQIQbm90IGVub3VnaCBnV1hlcwkAzAgCAwkAZwIFD3d4UGF5bWVudEFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQUja2V5V3hGb3JTdWdnZXN0UmVtb3ZlQW1vdW50UmVxdWlyZWQGCQEIdGhyb3dFcnIBAiFwYXltZW50IGxlc3MgdGhlbiBtaW4gZm9yIHN1Z2dlc3QFA25pbAMJAAACBQZjaGVja3MFBmNoZWNrcwQPY3VycmVudEluZGV4S2V5CQEPa2V5Q3VycmVudEluZGV4AQUHYXNzZXRJZAQMY3VycmVudEluZGV4CQCfCAEFD2N1cnJlbnRJbmRleEtleQQIbmV3SW5kZXgDCQEJaXNEZWZpbmVkAQUMY3VycmVudEluZGV4CQBkAgkBBXZhbHVlAQUMY3VycmVudEluZGV4AAEAAAQMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUVa2V5UGVyaW9kTGVuZ3RoUmVtb3ZlCQEHd3JhcEVycgECGnBlcmlvZExlbmd0aFJlbW92ZSBub3Qgc2V0BA92b3RpbmdFbmRIZWlnaHQJAGQCBQZoZWlnaHQFDHBlcmlvZExlbmd0aAQLdm90ZXNRdW9ydW0JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBRhrZXlWb3RpbmdUaHJlc2hvbGRSZW1vdmUJAQd3cmFwRXJyAQIddm90aW5nVGhyZXNob2xkUmVtb3ZlIG5vdCBzZXQECnZvdGluZ0luZm8JAQ92b3RpbmdJbmZvVmFsdWUKBwIFRU1QVFkAAAIOZGV2ZXJpZmljYXRpb24CCmluUHJvZ3Jlc3MFBmhlaWdodAkAZAIFBmhlaWdodAUMcGVyaW9kTGVuZ3RoBQt2b3Rlc1F1b3J1bQAAAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFD2N1cnJlbnRJbmRleEtleQUIbmV3SW5kZXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleVN1Z2dlc3RJc3N1ZXICBQdhc3NldElkBQhuZXdJbmRleAkApQgBCAUBaQZjYWxsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVZvdGluZ0luZm8CBQdhc3NldElkBQhuZXdJbmRleAUKdm90aW5nSW5mbwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBBHZvdGUCB2Fzc2V0SWQHaW5GYXZvcgQPY3VycmVudEluZGV4S2V5CQEPa2V5Q3VycmVudEluZGV4AQUHYXNzZXRJZAQMY3VycmVudEluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUPY3VycmVudEluZGV4S2V5CQEHd3JhcEVycgECFXZvdGluZyBkb2VzIG5vdCBleGlzdAQKdm90aW5nSW5mbwkBEXZvdGluZ0V4aXN0Q2hlY2tzAgUHYXNzZXRJZAUMY3VycmVudEluZGV4AwkAAAIFCnZvdGluZ0luZm8FCnZvdGluZ0luZm8EFmN1cnJlbnRWb3RpbmdFbmRIZWlnaHQIBQp2b3RpbmdJbmZvAl8yBA5nd3hBbW91bnRBdEVuZAkBGGdldFVzZXJHd3hBbW91bnRBdEhlaWdodAIJAKUIAQgFAWkGY2FsbGVyBRZjdXJyZW50Vm90aW5nRW5kSGVpZ2h0BAd2b3RlS2V5CQEHa2V5Vm90ZQMFB2Fzc2V0SWQFDGN1cnJlbnRJbmRleAgFAWkGY2FsbGVyBAZjaGVja3MJAMwIAgMJAAACCQCiCAEFB3ZvdGVLZXkFBHVuaXQGCQEIdGhyb3dFcnIBAhZZb3UgaGF2ZSBhbHJlYWR5IHZvdGVkCQDMCAIDCQBmAgUOZ3d4QW1vdW50QXRFbmQAAAYJAAIBAihZb3UnbGwgbm90IGhhdmUgZ1dYIGF0IHRoZSBlbmQgb2Ygdm90aW5nBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDXZvdGluZ0luZm9TdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQENa2V5Vm90aW5nSW5mbwIFB2Fzc2V0SWQFDGN1cnJlbnRJbmRleAkBB3dyYXBFcnIBAhV2b3RpbmcgaW5mbyBub3QgZm91bmQED3ZvdGluZ0luZm9QYXJ0cwkBEmdldFZvdGluZ0luZm9QYXJ0cwEFDXZvdGluZ0luZm9TdHIECHZvdGVzRm9yCAUPdm90aW5nSW5mb1BhcnRzAl85BAx2b3Rlc0FnYWluc3QIBQ92b3RpbmdJbmZvUGFydHMDXzEwBA0kdDAxMjY3MTEyODMyAwUHaW5GYXZvcgkAlAoCCQBkAgUIdm90ZXNGb3IFDmd3eEFtb3VudEF0RW5kBQx2b3Rlc0FnYWluc3QJAJQKAgUIdm90ZXNGb3IJAGQCBQx2b3Rlc0FnYWluc3QFDmd3eEFtb3VudEF0RW5kBAtuZXdWb3Rlc0ZvcggFDSR0MDEyNjcxMTI4MzICXzEED25ld1ZvdGVzQWdhaW5zdAgFDSR0MDEyNjcxMTI4MzICXzIEEm5ld1ZvdGluZ0luZm9WYWx1ZQkBD3ZvdGluZ0luZm9WYWx1ZQoIBQ92b3RpbmdJbmZvUGFydHMCXzEIBQ92b3RpbmdJbmZvUGFydHMCXzIIBQ92b3RpbmdJbmZvUGFydHMCXzMIBQ92b3RpbmdJbmZvUGFydHMCXzQIBQ92b3RpbmdJbmZvUGFydHMCXzUIBQ92b3RpbmdJbmZvUGFydHMCXzYIBQ92b3RpbmdJbmZvUGFydHMCXzcIBQ92b3RpbmdJbmZvUGFydHMCXzgFC25ld1ZvdGVzRm9yBQ9uZXdWb3Rlc0FnYWluc3QEEnZvdGluZ1Jld2FyZEFjdGlvbgQHJG1hdGNoMAkAoAgBCQEWa2V5Vm90aW5nUmV3YXJkQXNzZXRJZAIFB2Fzc2V0SWQFDGN1cnJlbnRJbmRleAMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAJwawUHJG1hdGNoMAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBD2tleVZvdGluZ1Jld2FyZAMIBQFpBmNhbGxlcgUHYXNzZXRJZAUMY3VycmVudEluZGV4BgUDbmlsAwkAAQIFByRtYXRjaDACBFVuaXQFA25pbAkAAgECC01hdGNoIGVycm9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHdm90ZUtleQkBCXZvdGVWYWx1ZQIFB2luRmF2b3IFDmd3eEFtb3VudEF0RW5kCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlWb3RpbmdJbmZvAgUHYXNzZXRJZAUMY3VycmVudEluZGV4BRJuZXdWb3RpbmdJbmZvVmFsdWUFA25pbAUSdm90aW5nUmV3YXJkQWN0aW9uCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmNhbmNlbFZvdGUBB2Fzc2V0SWQED2N1cnJlbnRJbmRleEtleQkBD2tleUN1cnJlbnRJbmRleAEFB2Fzc2V0SWQEDGN1cnJlbnRJbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFD2N1cnJlbnRJbmRleEtleQkBB3dyYXBFcnIBAhV2b3RpbmcgZG9lcyBub3QgZXhpc3QEB3ZvdGVLZXkJAQdrZXlWb3RlAwUHYXNzZXRJZAUMY3VycmVudEluZGV4CAUBaQZjYWxsZXIECGxhc3RWb3RlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQUHdm90ZUtleQkBB3dyYXBFcnIBAhJ5b3UgaGF2ZSBub3Qgdm90ZWQEDWxhc3RWb3RlUGFydHMJALUJAgUIbGFzdFZvdGUFCXNlcGFyYXRvcgQHaW5GYXZvcgkAkQMCBQ1sYXN0Vm90ZVBhcnRzAAEECWd3eEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDWxhc3RWb3RlUGFydHMAAgQKdm90aW5nSW5mbwkBEXZvdGluZ0V4aXN0Q2hlY2tzAgUHYXNzZXRJZAUMY3VycmVudEluZGV4AwkAAAIFCnZvdGluZ0luZm8FCnZvdGluZ0luZm8EBmNoZWNrcwkAzAgCAwMJAAACBQdpbkZhdm9yAgR0cnVlBgkAAAIFB2luRmF2b3ICBWZhbHNlBgkBCHRocm93RXJyAQIMaW52YWxpZCB2b3RlBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDXZvdGluZ0luZm9TdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQENa2V5Vm90aW5nSW5mbwIFB2Fzc2V0SWQFDGN1cnJlbnRJbmRleAkBB3dyYXBFcnIBAhV2b3RpbmcgaW5mbyBub3QgZm91bmQED3ZvdGluZ0luZm9QYXJ0cwkBEmdldFZvdGluZ0luZm9QYXJ0cwEFDXZvdGluZ0luZm9TdHIECHZvdGVzRm9yCAUPdm90aW5nSW5mb1BhcnRzAl85BAx2b3Rlc0FnYWluc3QIBQ92b3RpbmdJbmZvUGFydHMDXzEwBA0kdDAxNDQxMjE0NTczAwkAAAIFB2luRmF2b3ICBHRydWUJAJQKAgkAZQIFCHZvdGVzRm9yBQlnd3hBbW91bnQFDHZvdGVzQWdhaW5zdAkAlAoCBQh2b3Rlc0ZvcgkAZQIFDHZvdGVzQWdhaW5zdAUJZ3d4QW1vdW50BAtuZXdWb3Rlc0ZvcggFDSR0MDE0NDEyMTQ1NzMCXzEED25ld1ZvdGVzQWdhaW5zdAgFDSR0MDE0NDEyMTQ1NzMCXzIEEm5ld1ZvdGluZ0luZm9WYWx1ZQkBD3ZvdGluZ0luZm9WYWx1ZQoIBQ92b3RpbmdJbmZvUGFydHMCXzEIBQ92b3RpbmdJbmZvUGFydHMCXzIIBQ92b3RpbmdJbmZvUGFydHMCXzMIBQ92b3RpbmdJbmZvUGFydHMCXzQIBQ92b3RpbmdJbmZvUGFydHMCXzUIBQ92b3RpbmdJbmZvUGFydHMCXzYIBQ92b3RpbmdJbmZvUGFydHMCXzcIBQ92b3RpbmdJbmZvUGFydHMCXzgFC25ld1ZvdGVzRm9yBQ9uZXdWb3Rlc0FnYWluc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVZvdGluZ0luZm8CBQdhc3NldElkBQxjdXJyZW50SW5kZXgFEm5ld1ZvdGluZ0luZm9WYWx1ZQkAzAgCCQELRGVsZXRlRW50cnkBBQd2b3RlS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlWb3RpbmdSZXdhcmQDCAUBaQZjYWxsZXIFB2Fzc2V0SWQFDGN1cnJlbnRJbmRleAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGZpbmFsaXplAQdhc3NldElkBA9jdXJyZW50SW5kZXhLZXkJAQ9rZXlDdXJyZW50SW5kZXgBBQdhc3NldElkBAxjdXJyZW50SW5kZXgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPY3VycmVudEluZGV4S2V5AAAEEnZvdGluZ1RocmVzaG9sZEFkZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFFWtleVZvdGluZ1RocmVzaG9sZEFkZAkBB3dyYXBFcnIBAhp2b3RpbmdUaHJlc2hvbGRBZGQgbm90IHNldAQVdm90aW5nVGhyZXNob2xkUmVtb3ZlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUYa2V5Vm90aW5nVGhyZXNob2xkUmVtb3ZlCQEHd3JhcEVycgECHXZvdGluZ1RocmVzaG9sZFJlbW92ZSBub3Qgc2V0BA12b3RpbmdJbmZvU3RyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBDWtleVZvdGluZ0luZm8CBQdhc3NldElkBQxjdXJyZW50SW5kZXgJAQd3cmFwRXJyAQIVdm90aW5nIGluZm8gbm90IGZvdW5kBA92b3RpbmdJbmZvUGFydHMJARJnZXRWb3RpbmdJbmZvUGFydHMBBQ12b3RpbmdJbmZvU3RyBAp2b3RpbmdUeXBlCAUPdm90aW5nSW5mb1BhcnRzAl80BAZzdGF0dXMIBQ92b3RpbmdJbmZvUGFydHMCXzUED3ZvdGluZ0VuZEhlaWdodAgFD3ZvdGluZ0luZm9QYXJ0cwJfNwQMdm90aW5nUXVvcnVtCAUPdm90aW5nSW5mb1BhcnRzAl84BAh2b3Rlc0ZvcggFD3ZvdGluZ0luZm9QYXJ0cwJfOQQMdm90ZXNBZ2FpbnN0CAUPdm90aW5nSW5mb1BhcnRzA18xMAQGY2hlY2tzCQDMCAIDCQAAAgUGc3RhdHVzAgppblByb2dyZXNzBgkBCHRocm93RXJyAQIWdm90aW5nIG5vdCBpbiBwcm9ncmVzcwkAzAgCAwkAZwIFBmhlaWdodAUPdm90aW5nRW5kSGVpZ2h0BgkBCHRocm93RXJyAQITdm90aW5nIG5vdCBmaW5pc2hlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBAluZXdTdGF0dXMDCQBnAgkAZAIFCHZvdGVzRm9yBQx2b3Rlc0FnYWluc3QFDHZvdGluZ1F1b3J1bQIIYWNjZXB0ZWQCCHJlamVjdGVkBAh2ZXJpZmllZAMJAAACBQp2b3RpbmdUeXBlAgx2ZXJpZmljYXRpb24GBwQYZmluYWxpemVDYWxsUmV3YXJkQWN0aW9uAwkAZgIFDHZvdGVzQWdhaW5zdAUIdm90ZXNGb3IEEXNldFZlcmlmaWVkSW52b2tlCQD8BwQFE2Fzc2V0c1N0b3JlQ29udHJhY3QCC3NldFZlcmlmaWVkCQDMCAIFB2Fzc2V0SWQJAMwIAgUIdmVyaWZpZWQFA25pbAUDbmlsAwkAAAIFEXNldFZlcmlmaWVkSW52b2tlBRFzZXRWZXJpZmllZEludm9rZQQYZmluYWxpemVDYWxsUmV3YXJkQW1vdW50CQELdmFsdWVPckVsc2UCCQCfCAEFG2tleUZpbmFsaXplQ2FsbFJld2FyZEFtb3VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUYZmluYWxpemVDYWxsUmV3YXJkQW1vdW50BQl3eEFzc2V0SWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsBBJuZXdWb3RpbmdJbmZvVmFsdWUJAQ92b3RpbmdJbmZvVmFsdWUKCAUPdm90aW5nSW5mb1BhcnRzAl8xCAUPdm90aW5nSW5mb1BhcnRzAl8yCAUPdm90aW5nSW5mb1BhcnRzAl8zCAUPdm90aW5nSW5mb1BhcnRzAl80BQluZXdTdGF0dXMIBQ92b3RpbmdJbmZvUGFydHMCXzYIBQ92b3RpbmdJbmZvUGFydHMCXzcIBQ92b3RpbmdJbmZvUGFydHMCXzgIBQ92b3RpbmdJbmZvUGFydHMCXzkIBQ92b3RpbmdJbmZvUGFydHMDXzEwCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVZvdGluZ0luZm8CBQdhc3NldElkBQxjdXJyZW50SW5kZXgFEm5ld1ZvdGluZ0luZm9WYWx1ZQUDbmlsBRhmaW5hbGl6ZUNhbGxSZXdhcmRBY3Rpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xhaW1SRUFET05MWQMHYXNzZXRJZAVpbmRleA51c2VyQWRkcmVzc1N0cgQLdXNlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQ51c2VyQWRkcmVzc1N0cgkBB3dyYXBFcnIBAg9pbnZhbGlkIGFkZHJlc3MEFnZvdGluZ1Jld2FyZEFzc2V0SWRTdHIJAKIIAQkBFmtleVZvdGluZ1Jld2FyZEFzc2V0SWQCBQdhc3NldElkBQVpbmRleAQMcmV3YXJkQW1vdW50AwkBCWlzRGVmaW5lZAEFFnZvdGluZ1Jld2FyZEFzc2V0SWRTdHIJAQ9jYWxjdWxhdGVSZXdhcmQDBQt1c2VyQWRkcmVzcwUHYXNzZXRJZAUFaW5kZXgAAAkAlAoCBQNuaWwFDHJld2FyZEFtb3VudAFpAQVjbGFpbQIHYXNzZXRJZAVpbmRleAQNY2FsbGVyQWRkcmVzcwgFAWkGY2FsbGVyBA9jbGFpbUhpc3RvcnlLZXkJAQ9rZXlDbGFpbUhpc3RvcnkDBQ1jYWxsZXJBZGRyZXNzBQdhc3NldElkBQVpbmRleAQMY2xhaW1IaXN0b3J5CQCfCAEFD2NsYWltSGlzdG9yeUtleQQGY2hlY2tzCQDMCAIDCQAAAgUMY2xhaW1IaXN0b3J5BQR1bml0BgkBCHRocm93RXJyAQIPYWxyZWFkeSBjbGFpbWVkBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEDHJld2FyZEFtb3VudAMJAGYCCQEPY2FsY3VsYXRlUmV3YXJkAwUNY2FsbGVyQWRkcmVzcwUHYXNzZXRJZAUFaW5kZXgAAAkBD2NhbGN1bGF0ZVJld2FyZAMFDWNhbGxlckFkZHJlc3MFB2Fzc2V0SWQFBWluZGV4CQEIdGhyb3dFcnIBAhBub3RoaW5nIHRvIGNsYWltBBZ2b3RpbmdSZXdhcmRBc3NldElkU3RyCQCiCAEJARZrZXlWb3RpbmdSZXdhcmRBc3NldElkAgUHYXNzZXRJZAUFaW5kZXgEDHJld2FyZEFjdGlvbgMJAQlpc0RlZmluZWQBBRZ2b3RpbmdSZXdhcmRBc3NldElkU3RyBBN2b3RpbmdSZXdhcmRBc3NldElkCQDZBAEJAQV2YWx1ZQEFFnZvdGluZ1Jld2FyZEFzc2V0SWRTdHIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUNY2FsbGVyQWRkcmVzcwUMcmV3YXJkQW1vdW50BRN2b3RpbmdSZXdhcmRBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9jbGFpbUhpc3RvcnlLZXkFDHJld2FyZEFtb3VudAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5Vm90aW5nUmV3YXJkAwUNY2FsbGVyQWRkcmVzcwUHYXNzZXRJZAUFaW5kZXgFA25pbAkBCHRocm93RXJyAQIQbm90aGluZyB0byBjbGFpbQUMcmV3YXJkQWN0aW9uCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQPdGFyZ2V0UHVibGljS2V5BAckbWF0Y2gwCQEWbWFuYWdlclB1YmxpY0tleU9yVW5pdAADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUPdGFyZ2V0UHVibGljS2V5JdtlZQ==", "height": 2613819, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8Pfv3ze8PfRA7ShnNi5oSAMpmowyp7Ke8QP2jPMHWfig Next: hR4KL3FKMExdrcwZyu9Rs5HPqk5HHFkWR4eSusEQsy5 Diff:
OldNewDifferences
6161
6262 let D = makeString(["%s", "periodLengthRemove"], a)
6363
64-func E (B,C) = makeString(["%s%s%d", "currentVotingHeightStart", B, toString(C)], a)
64+let E = makeString(["%s", "maxPeriodLength"], a)
65+
66+let F = makeString(["%s", "minPeriodLength"], a)
67+
68+func G (B,C) = makeString(["%s%s%d", "votingRewardAssetId", B, toString(C)], a)
6569
6670
67-func F (B) = makeString(["%s%s", "verified", B], a)
71+func H (I,B,C) = makeString(["%s%s%s%d", "votingReward", toString(I), B, toString(C)], a)
6872
6973
70-func G (B) = makeString(["%s%s%s", "verification", "inProgress", B], a)
74+func J (B,C) = makeString(["%s%s%d", "votingReward", B, toString(C)], a)
7175
7276
73-func H (B) = makeString(["%s%s%s", "deverification", "inProgress", B], a)
77+let K = makeString(["%s", "finalizeCallRewardAmount"], a)
78+
79+let L = makeString(["%s", "minSuggestRemoveBalance"], a)
80+
81+func M (B) = makeString(["%s%s", "currentIndex", B], a)
7482
7583
76-let I = makeString(["%s", "maxPeriodLength"], a)
77-
78-let J = makeString(["%s", "minPeriodLength"], a)
79-
80-func K (B,C) = makeString(["%s%s%d", "votingRewardAssetId", B, toString(C)], a)
84+func N (B,C,O) = makeString(["%s%s%d%s", "vote", B, toString(C), toString(O)], a)
8185
8286
83-func L (M,B,C) = makeString(["%s%s%s%d", "votingReward", toString(M), B, toString(C)], a)
87+func P (Q,R) = makeString(["%s%d", toString(Q), toString(R)], a)
8488
8589
86-func N (B,C) = makeString(["%s%s%d", "votingReward", B, toString(C)], a)
90+func S (B,C) = makeString(["%s%s%d", "suggestIssuer", B, toString(C)], a)
8791
8892
89-let O = makeString(["%s", "finalizeCallRewardAmount"], a)
90-
91-let P = makeString(["%s", "minSuggestRemoveBalance"], a)
92-
93-func Q (B) = makeString(["%s%s", "currentIndex", B], a)
93+func T (I,B,C) = makeString(["%s%s%s%d", "history", toString(I), B, toString(C)], a)
9494
9595
96-func R (B,C,S) = makeString(["%s%s%d%s", "vote", B, toString(C), toString(S)], a)
96+let U = makeString(["%s", "feePerBlock"], a)
97+
98+let V = m(this, U)
99+
100+let W = makeString(["%s", "wxMinForSuggestAddAmountRequired"], a)
101+
102+let X = makeString(["%s", "wxForSuggestRemoveAmountRequired"], a)
103+
104+func Y (B,C) = makeString(["%s%s%d", "votingInfo", B, toString(C)], a)
97105
98106
99-func T (U,V) = makeString(["%s%d", toString(U), toString(V)], a)
107+func Z (aa,ab,ac,ad,ae,af,ag,ah,ai,aj) = makeString(["%s%s%s%d%s%s%d%d%d%d%d", toString(aa), ab, toString(ac), ad, ae, toString(af), toString(ag), toString(ah), toString(ai), toString(aj)], a)
100108
101109
102-func W (B,C) = makeString(["%s%s%d", "votingResult", B, toString(C)], a)
103-
104-
105-func X (Y,Z) = makeString(["%d%d", toString(Y), toString(Z)], a)
106-
107-
108-let aa = makeString(["%d%d", "0", "0"], a)
109-
110-func ab (B,C) = makeString(["%s%s%d", "suggestIssuer", B, toString(C)], a)
111-
112-
113-func ac (M,B,C) = makeString(["%s%s%s%d", "history", toString(M), B, toString(C)], a)
114-
115-
116-func ad (B,C) = makeString(["%s%s%d", "votingEndHeight", B, toString(C)], a)
117-
118-
119-let ae = makeString(["%s", "feePerBlock"], a)
120-
121-let af = m(this, ae)
122-
123-let ag = makeString(["%s", "wxMinForSuggestAddAmountRequired"], a)
124-
125-let ah = makeString(["%s", "wxForSuggestRemoveAmountRequired"], a)
126-
127-func ai (M,aj) = {
128- let V = invoke(s, "getUserGwxAmountAtHeightREADONLY", [M, aj], nil)
129- f(V)
110+func ak (I,al) = {
111+ let R = invoke(s, "getUserGwxAmountAtHeightREADONLY", [I, al], nil)
112+ f(R)
130113 }
131114
132115
133-func ak () = "%s__managerVaultAddress"
116+func am () = "%s__managerVaultAddress"
134117
135118
136-func al () = "%s__managerPublicKey"
119+func an () = "%s__managerPublicKey"
137120
138121
139-func am () = {
140- let h = getString(ak())
122+func ao () = {
123+ let h = getString(am())
141124 if ($isInstanceOf(h, "String"))
142125 then {
143- let an = h
144- addressFromStringValue(an)
126+ let ap = h
127+ addressFromStringValue(ap)
145128 }
146129 else this
147130 }
148131
149132
150-func ao () = {
151- let ap = am()
152- let h = getString(ap, al())
133+func aq () = {
134+ let ar = ao()
135+ let h = getString(ar, an())
153136 if ($isInstanceOf(h, "String"))
154137 then {
155- let an = h
156- fromBase58String(an)
138+ let ap = h
139+ fromBase58String(ap)
157140 }
158141 else if ($isInstanceOf(h, "Unit"))
159142 then unit
161144 }
162145
163146
164-func aq (B,ar) = {
165- let as = valueOrElse(getBoolean(G(B)), false)
166- let at = valueOrElse(getBoolean(H(B)), false)
167- let au = valueOrErrorMessage(getString(ab(B, ar)), c("voting issuer not found"))
168- let av = valueOrErrorMessage(getInteger(E(B, ar)), c("voting start height not found"))
169- let aw = if (as)
170- then valueOrErrorMessage(getInteger(A(B, ar)), c("voting period length not found"))
171- else value(getInteger(D))
172- let ax = [if (if (as)
147+func as (at) = {
148+ let au = split(at, a)
149+ let av = au[1]
150+ let aa = if ((av == "true"))
173151 then true
174- else at)
152+ else false
153+ let ab = au[2]
154+ let ac = parseIntValue(au[3])
155+ let ad = au[4]
156+ let ae = au[5]
157+ let af = parseIntValue(au[6])
158+ let ag = parseIntValue(au[7])
159+ let ah = parseIntValue(au[8])
160+ let ai = parseIntValue(au[9])
161+ let aj = parseIntValue(au[10])
162+ $Tuple10(aa, ab, ac, ad, ae, af, ag, ah, ai, aj)
163+ }
164+
165+
166+func aw (B,ax) = {
167+ let at = valueOrErrorMessage(getString(Y(B, ax)), c("voting info not found"))
168+ let ay = split(at, a)
169+ let ae = ay[5]
170+ let ag = valueOrErrorMessage(parseIntValue(ay[7]), c("voting start height not found"))
171+ let az = valueOrErrorMessage(getString(S(B, ax)), c("voting issuer not found"))
172+ let aA = [if ((ae == "inProgress"))
175173 then true
176- else e("no voting in progress"), if (((av + aw) > height))
174+ else e("no voting in progress"), if ((ag > height))
177175 then true
178176 else e("voting expired")]
179- if ((ax == ax))
180- then $Tuple5(as, at, av, aw, au)
177+ if ((aA == aA))
178+ then $Tuple3(ae, ag, az)
181179 else throw("Strict value is not equal to itself.")
182180 }
183181
184182
185-func ay (az,B,C) = {
186- let aA = R(B, C, az)
187- let aB = valueOrErrorMessage(getString(aA), c("you have not voted"))
188- let aC = split(aB, a)
189- let U = aC[1]
190- let aD = if ((U == "true"))
191- then {
192- let V = parseIntValue(aC[2])
193- let aE = valueOrErrorMessage(getString(W(B, C)), c("voting does not exist"))
194- let aF = split(aE, a)
195- let aG = parseIntValue(aF[1])
196- let aH = fraction(V, b, aG)
197- let aI = valueOrElse(getInteger(N(B, C)), 0)
198- let aD = fraction(aH, aI, b, FLOOR)
199- aD
200- }
201- else 0
202- aD
183+func aB (aC,B,C) = {
184+ let aD = N(B, C, aC)
185+ let aE = valueOrErrorMessage(getString(aD), c("you have not voted"))
186+ let aF = split(aE, a)
187+ let R = parseIntValue(aF[2])
188+ let aG = valueOrErrorMessage(getString(Y(B, C)), c("voting info not found"))
189+ let aH = as(aG)
190+ let ai = aH._9
191+ let aj = aH._10
192+ let aI = fraction(R, b, (ai + aj))
193+ let aJ = valueOrElse(getInteger(J(B, C)), 0)
194+ let aK = fraction(aI, aJ, b, FLOOR)
195+ aK
203196 }
204197
205198
206-@Callable(aJ)
207-func suggestAdd (B,aK,aL) = {
208- let aM = valueOrErrorMessage(assetInfo(fromBase58String(B)), "Invalid asset ID")
209- if ((aM == aM))
199+@Callable(aL)
200+func suggestAdd (B,aM,aN) = {
201+ let aO = aL.payments[0]
202+ let aP = value(aO.assetId)
203+ let aQ = value(aO.amount)
204+ let aR = getIntegerValue(F)
205+ let aS = getIntegerValue(E)
206+ let aA = [if (if ((aM >= aR))
207+ then (aS >= aM)
208+ else false)
209+ then true
210+ else e("invalid periodLength"), if ((aQ > (aM * V)))
211+ then true
212+ else e("not enough wx for given period"), if ((aQ >= getIntegerValue(W)))
213+ then true
214+ else e("payment less then min for suggest")]
215+ if ((aA == aA))
210216 then {
211- let aN = Q(B)
212- let ar = getInteger(aN)
213- let aO = if (isDefined(ar))
214- then (value(ar) + 1)
217+ let aT = M(B)
218+ let ax = getInteger(aT)
219+ let aU = if (isDefined(ax))
220+ then (value(ax) + 1)
215221 else 0
216- let aP = aJ.payments[0]
217- let aQ = value(aP.assetId)
218- let aR = value(aP.amount)
219- let aS = if ((size(aJ.payments) > 1))
222+ let aV = if ((size(aL.payments) > 1))
220223 then {
221- let aT = aJ.payments[1]
222- let aU = toBase58String(value(aT.assetId))
223- let aV = value(aT.amount)
224-[StringEntry(K(B, aO), aU), IntegerEntry(N(B, aO), aV)]
224+ let aW = aL.payments[1]
225+ let aX = toBase58String(value(aW.assetId))
226+ let aY = value(aW.amount)
227+ $Tuple4(true, aX, aY, [StringEntry(G(B, aU), aX), IntegerEntry(J(B, aU), aY)])
225228 }
226- else nil
227- let aW = getIntegerValue(J)
228- let aX = getIntegerValue(I)
229- let ax = [if (if ((aK >= aW))
230- then (aX >= aK)
231- else false)
229+ else $Tuple4(false, "EMPTY", 0, nil)
230+ let aa = aV._1
231+ let ab = aV._2
232+ let ac = aV._3
233+ let aZ = aV._4
234+ let ah = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
235+ let at = Z(aa, ab, ac, "verification", "inProgress", height, (height + aM), ah, 0, 0)
236+ let ba = valueOrElse(getInteger(K), 0)
237+ let bb = (aQ - ba)
238+ let bc = invoke(u, "createOrUpdate", [B, aN, false], nil)
239+ if ((bc == bc))
240+ then ([IntegerEntry(aT, aU), StringEntry(S(B, aU), toString(aL.caller)), StringEntry(Y(B, aU), at), Burn(aP, bb)] ++ aZ)
241+ else throw("Strict value is not equal to itself.")
242+ }
243+ else throw("Strict value is not equal to itself.")
244+ }
245+
246+
247+
248+@Callable(aL)
249+func suggestRemove (B) = {
250+ let bd = ak(toString(aL.caller), height)
251+ let be = getIntegerValue(L)
252+ let aO = aL.payments[0]
253+ let aP = value(aO.assetId)
254+ let aQ = value(aO.amount)
255+ let aA = [if ((bd >= be))
256+ then true
257+ else e("not enough gWXes"), if ((aQ >= getIntegerValue(X)))
258+ then true
259+ else e("payment less then min for suggest")]
260+ if ((aA == aA))
261+ then {
262+ let aT = M(B)
263+ let ax = getInteger(aT)
264+ let aU = if (isDefined(ax))
265+ then (value(ax) + 1)
266+ else 0
267+ let aM = valueOrErrorMessage(getInteger(D), c("periodLengthRemove not set"))
268+ let ag = (height + aM)
269+ let ah = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
270+ let at = Z(false, "EMPTY", 0, "deverification", "inProgress", height, (height + aM), ah, 0, 0)
271+[IntegerEntry(aT, aU), StringEntry(S(B, aU), toString(aL.caller)), StringEntry(Y(B, aU), at)]
272+ }
273+ else throw("Strict value is not equal to itself.")
274+ }
275+
276+
277+
278+@Callable(aL)
279+func vote (B,Q) = {
280+ let aT = M(B)
281+ let ax = valueOrErrorMessage(getInteger(aT), c("voting does not exist"))
282+ let at = aw(B, ax)
283+ if ((at == at))
284+ then {
285+ let bf = at._2
286+ let bg = ak(toString(aL.caller), bf)
287+ let aD = N(B, ax, aL.caller)
288+ let aA = [if ((getString(aD) == unit))
232289 then true
233- else e("invalid periodLength"), if ((getBoolean(F(B)) == unit))
290+ else e("You have already voted"), if ((bg > 0))
234291 then true
235- else e("already verified"), if ((getBoolean(G(B)) == unit))
236- then true
237- else e("already in progress"), if ((aR > (aK * af)))
238- then true
239- else e("not enough wx for given period"), if ((aR >= getIntegerValue(ag)))
240- then true
241- else e("payment less then min for suggest")]
242- if ((ax == ax))
292+ else throw("You'll not have gWX at the end of voting")]
293+ if ((aA == aA))
243294 then {
244- let aY = invoke(u, "createOrUpdate", [B, aL, false], nil)
245- if ((aY == aY))
246- then {
247- let aZ = (height + aK)
248- let ba = valueOrElse(getInteger(O), 0)
249- let bb = (aR - ba)
250- ([IntegerEntry(aN, aO), BooleanEntry(G(B), true), IntegerEntry(E(B, aO), height), IntegerEntry(A(B, aO), aK), StringEntry(ab(B, aO), toString(aJ.caller)), IntegerEntry(ad(B, aO), aZ), Burn(aQ, bb)] ++ aS)
251- }
252- else throw("Strict value is not equal to itself.")
295+ let aG = valueOrErrorMessage(getString(Y(B, ax)), c("voting info not found"))
296+ let au = as(aG)
297+ let ai = au._9
298+ let aj = au._10
299+ let bh = if (Q)
300+ then $Tuple2((ai + bg), aj)
301+ else $Tuple2(ai, (aj + bg))
302+ let bi = bh._1
303+ let bj = bh._2
304+ let bk = Z(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bi, bj)
305+ let bl = {
306+ let h = getBoolean(G(B, ax))
307+ if ($isInstanceOf(h, "Boolean"))
308+ then {
309+ let bm = h
310+[BooleanEntry(H(aL.caller, B, ax), true)]
311+ }
312+ else if ($isInstanceOf(h, "Unit"))
313+ then nil
314+ else throw("Match error")
315+ }
316+ ([StringEntry(aD, P(Q, bg)), StringEntry(Y(B, ax), bk)] ++ bl)
253317 }
254318 else throw("Strict value is not equal to itself.")
255319 }
258322
259323
260324
261-@Callable(aJ)
262-func suggestRemove (B) = {
263- let bc = ai(toString(aJ.caller), height)
264- let bd = getIntegerValue(P)
265- let aP = aJ.payments[0]
266- let aQ = value(aP.assetId)
267- let aR = value(aP.amount)
268- let be = valueOrElse(getBoolean(F(B)), false)
269- let ax = [if (be)
270- then true
271- else e(makeString([B, "not verified"], " ")), if ((bc >= bd))
272- then true
273- else e("not enough gWXes"), if ((aR >= getIntegerValue(ah)))
274- then true
275- else e("payment less then min for suggest")]
276- if ((ax == ax))
325+@Callable(aL)
326+func cancelVote (B) = {
327+ let aT = M(B)
328+ let ax = valueOrErrorMessage(getInteger(aT), c("voting does not exist"))
329+ let aD = N(B, ax, aL.caller)
330+ let aE = valueOrErrorMessage(getString(aD), c("you have not voted"))
331+ let aF = split(aE, a)
332+ let Q = aF[1]
333+ let R = parseIntValue(aF[2])
334+ let at = aw(B, ax)
335+ if ((at == at))
277336 then {
278- let aN = Q(B)
279- let ar = getInteger(aN)
280- let aO = if (isDefined(ar))
281- then (value(ar) + 1)
282- else 0
283- let aK = valueOrErrorMessage(getInteger(D), c("periodLengthRemove not set"))
284- let aZ = (height + aK)
285-[IntegerEntry(aN, aO), BooleanEntry(H(B), true), IntegerEntry(E(B, aO), height), StringEntry(ab(B, aO), toString(aJ.caller)), IntegerEntry(ad(B, aO), aZ)]
286- }
287- else throw("Strict value is not equal to itself.")
288- }
289-
290-
291-
292-@Callable(aJ)
293-func vote (B,U) = {
294- let aN = Q(B)
295- let ar = valueOrErrorMessage(getInteger(aN), c("voting does not exist"))
296- let bf = aq(B, ar)
297- if ((bf == bf))
298- then {
299- let av = bf._3
300- let aw = bf._4
301- let bg = ai(toString(aJ.caller), (av + aw))
302- let aA = R(B, ar, aJ.caller)
303- let bh = W(B, ar)
304- let ax = [if ((getString(aA) == unit))
337+ let aA = [if (if ((Q == "true"))
305338 then true
306- else e("You have already voted"), if ((bg > 0))
339+ else (Q == "false"))
307340 then true
308- else throw("You'll not have gWX at the end of voting")]
309- if ((ax == ax))
341+ else e("invalid vote")]
342+ if ((aA == aA))
310343 then {
311- let aE = valueOrElse(getString(bh), aa)
312- let aF = split(aE, a)
313- let bi = if (U)
314- then X((parseIntValue(aF[1]) + bg), parseIntValue(aF[2]))
315- else X(parseIntValue(aF[1]), (parseIntValue(aF[2]) + bg))
316-[StringEntry(aA, T(U, bg)), StringEntry(bh, bi), BooleanEntry(L(aJ.caller, B, ar), true)]
344+ let aG = valueOrErrorMessage(getString(Y(B, ax)), c("voting info not found"))
345+ let au = as(aG)
346+ let ai = au._9
347+ let aj = au._10
348+ let bn = if ((Q == "true"))
349+ then $Tuple2((ai - R), aj)
350+ else $Tuple2(ai, (aj - R))
351+ let bi = bn._1
352+ let bj = bn._2
353+ let bk = Z(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bi, bj)
354+[StringEntry(Y(B, ax), bk), DeleteEntry(aD), DeleteEntry(H(aL.caller, B, ax))]
317355 }
318356 else throw("Strict value is not equal to itself.")
319357 }
322360
323361
324362
325-@Callable(aJ)
326-func cancelVote (B) = {
327- let aN = Q(B)
328- let ar = valueOrErrorMessage(getInteger(aN), c("voting does not exist"))
329- let aA = R(B, ar, aJ.caller)
330- let bh = W(B, ar)
331- let aB = valueOrErrorMessage(getString(aA), c("you have not voted"))
332- let aC = split(aB, a)
333- let U = aC[1]
334- let V = parseIntValue(aC[2])
335- let bf = aq(B, ar)
336- if ((bf == bf))
363+@Callable(aL)
364+func finalize (B) = {
365+ let aT = M(B)
366+ let ax = valueOrElse(getInteger(aT), 0)
367+ let bo = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
368+ let bp = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
369+ let aG = valueOrErrorMessage(getString(Y(B, ax)), c("voting info not found"))
370+ let au = as(aG)
371+ let ad = au._4
372+ let ae = au._5
373+ let ag = au._7
374+ let bq = au._8
375+ let ai = au._9
376+ let aj = au._10
377+ let aA = [if ((ae == "inProgress"))
378+ then true
379+ else e("voting not in progress"), if ((height >= ag))
380+ then true
381+ else e("voting not finished")]
382+ if ((aA == aA))
337383 then {
338- let ax = [if (if ((U == "true"))
384+ let br = if (((ai + aj) >= bq))
385+ then "accepted"
386+ else "rejected"
387+ let bs = if ((ad == "verification"))
339388 then true
340- else (U == "false"))
341- then true
342- else e("invalid vote")]
343- if ((ax == ax))
389+ else false
390+ let bt = if ((aj > ai))
344391 then {
345- let aE = valueOrElse(getString(bh), aa)
346- let aF = split(aE, a)
347- let bj = if ((U == "true"))
348- then X((parseIntValue(aF[1]) - V), parseIntValue(aF[2]))
349- else X(parseIntValue(aF[1]), (parseIntValue(aF[2]) - V))
350-[DeleteEntry(aA), StringEntry(bh, bj), DeleteEntry(L(aJ.caller, B, ar))]
392+ let bu = invoke(u, "setVerified", [B, bs], nil)
393+ if ((bu == bu))
394+ then {
395+ let ba = valueOrElse(getInteger(K), 0)
396+[ScriptTransfer(aL.caller, ba, x)]
397+ }
398+ else throw("Strict value is not equal to itself.")
351399 }
352- else throw("Strict value is not equal to itself.")
400+ else nil
401+ let bk = Z(au._1, au._2, au._3, au._4, br, au._6, au._7, au._8, au._9, au._10)
402+ ([StringEntry(Y(B, ax), bk)] ++ bt)
353403 }
354404 else throw("Strict value is not equal to itself.")
355405 }
356406
357407
358408
359-@Callable(aJ)
360-func finalize (B) = {
361- let as = valueOrElse(getBoolean(G(B)), false)
362- let at = valueOrElse(getBoolean(H(B)), false)
363- let aN = Q(B)
364- let ar = valueOrElse(getInteger(aN), 0)
365- let bk = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
366- let bl = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
367- let bm = if (as)
368- then $Tuple3([DeleteEntry(G(B)), BooleanEntry(F(B), true)], true, bk)
369- else $Tuple3([DeleteEntry(H(B)), DeleteEntry(F(B))], true, bl)
370- let bn = bm._1
371- let bo = bm._2
372- let bp = bm._3
373- let aE = valueOrElse(getString(W(B, ar)), aa)
374- let aF = split(aE, a)
375- let bq = parseIntValue(aF[1])
376- let br = parseIntValue(aF[2])
377- let bs = (bq + br)
378- let aZ = valueOrErrorMessage(getInteger(ad(B, ar)), c("voting end height not found"))
379- let ax = [if (if (as)
380- then true
381- else at)
382- then true
383- else e("nothing to finalize"), if ((height >= aZ))
384- then true
385- else e("voting not finished"), if ((bs >= bp))
386- then true
387- else e("not enough votes")]
388- if ((ax == ax))
389- then {
390- let bt = if ((br > bq))
391- then {
392- let bu = invoke(u, "setVerified", [B, bo], nil)
393- if ((bu == bu))
394- then {
395- let ba = valueOrElse(getInteger(O), 0)
396-[ScriptTransfer(aJ.caller, ba, x)]
397- }
398- else throw("Strict value is not equal to itself.")
399- }
400- else nil
401- (bn ++ bt)
402- }
403- else throw("Strict value is not equal to itself.")
409+@Callable(aL)
410+func claimREADONLY (B,C,bv) = {
411+ let I = valueOrErrorMessage(addressFromString(bv), c("invalid address"))
412+ let bw = getString(G(B, C))
413+ let ac = if (isDefined(bw))
414+ then aB(I, B, C)
415+ else 0
416+ $Tuple2(nil, ac)
404417 }
405418
406419
407420
408-@Callable(aJ)
409-func claimREADONLY (B,C,bv) = {
410- let M = valueOrErrorMessage(addressFromString(bv), c("invalid address"))
411- let bw = getString(K(B, C))
412- let aD = if (isDefined(bw))
413- then ay(M, B, C)
414- else 0
415- $Tuple2(nil, aD)
416- }
417-
418-
419-
420-@Callable(aJ)
421+@Callable(aL)
421422 func claim (B,C) = {
422- let bx = aJ.caller
423- let by = ac(bx, B, C)
423+ let bx = aL.caller
424+ let by = T(bx, B, C)
424425 let bz = getInteger(by)
425- let ax = [if ((bz == unit))
426+ let aA = [if ((bz == unit))
426427 then true
427428 else e("already claimed")]
428- if ((ax == ax))
429+ if ((aA == aA))
429430 then {
430- let aD = if ((ay(bx, B, C) > 0))
431- then ay(bx, B, C)
431+ let ac = if ((aB(bx, B, C) > 0))
432+ then aB(bx, B, C)
432433 else e("nothing to claim")
433- let bw = getString(K(B, C))
434+ let bw = getString(G(B, C))
434435 let bA = if (isDefined(bw))
435436 then {
436437 let bB = fromBase58String(value(bw))
437-[ScriptTransfer(bx, aD, bB), IntegerEntry(by, aD)]
438+[ScriptTransfer(bx, ac, bB), IntegerEntry(by, ac), DeleteEntry(H(bx, B, C))]
438439 }
439440 else e("nothing to claim")
440441 bA
446447 @Verifier(bC)
447448 func bD () = {
448449 let bE = {
449- let h = ao()
450+ let h = aq()
450451 if ($isInstanceOf(h, "ByteVector"))
451452 then {
452- let bF = h
453- bF
453+ let bm = h
454+ bm
454455 }
455456 else if ($isInstanceOf(h, "Unit"))
456457 then bC.senderPublicKey
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 100000000
77
88 func c (d) = makeString(["voting_verified_v2.ride:", d], " ")
99
1010
1111 func e (d) = throw(c(d))
1212
1313
1414 func f (g) = {
1515 let h = g
1616 if ($isInstanceOf(h, "Int"))
1717 then {
1818 let i = h
1919 i
2020 }
2121 else throw("Failed to cast into Integer")
2222 }
2323
2424
2525 func j (k,l) = valueOrElse(getInteger(k, l), 0)
2626
2727
2828 func m (k,l) = valueOrErrorMessage(getInteger(k, l), c((l + " is not defined")))
2929
3030
3131 func n (k,l) = valueOrElse(getString(k, l), "")
3232
3333
3434 func o (k,l) = valueOrErrorMessage(getString(k, l), c((l + " is not defined")))
3535
3636
3737 let p = makeString(["%s", "boostingContract"], a)
3838
3939 let q = makeString(["%s", "emissionContract"], a)
4040
4141 let r = makeString(["%s", "assetsStoreContract"], a)
4242
4343 let s = addressFromStringValue(getStringValue(p))
4444
4545 let t = addressFromStringValue(getStringValue(q))
4646
4747 let u = addressFromStringValue(getStringValue(r))
4848
4949 let v = makeString(["%s", "config"], a)
5050
5151 let w = split(o(t, v), a)[1]
5252
5353 let x = fromBase58String(w)
5454
5555 let y = makeString(["%s%s", "votingThreshold", "add"], a)
5656
5757 let z = makeString(["%s%s", "votingThreshold", "remove"], a)
5858
5959 func A (B,C) = makeString(["%s%s%d", "periodLengthAdd", B, toString(C)], a)
6060
6161
6262 let D = makeString(["%s", "periodLengthRemove"], a)
6363
64-func E (B,C) = makeString(["%s%s%d", "currentVotingHeightStart", B, toString(C)], a)
64+let E = makeString(["%s", "maxPeriodLength"], a)
65+
66+let F = makeString(["%s", "minPeriodLength"], a)
67+
68+func G (B,C) = makeString(["%s%s%d", "votingRewardAssetId", B, toString(C)], a)
6569
6670
67-func F (B) = makeString(["%s%s", "verified", B], a)
71+func H (I,B,C) = makeString(["%s%s%s%d", "votingReward", toString(I), B, toString(C)], a)
6872
6973
70-func G (B) = makeString(["%s%s%s", "verification", "inProgress", B], a)
74+func J (B,C) = makeString(["%s%s%d", "votingReward", B, toString(C)], a)
7175
7276
73-func H (B) = makeString(["%s%s%s", "deverification", "inProgress", B], a)
77+let K = makeString(["%s", "finalizeCallRewardAmount"], a)
78+
79+let L = makeString(["%s", "minSuggestRemoveBalance"], a)
80+
81+func M (B) = makeString(["%s%s", "currentIndex", B], a)
7482
7583
76-let I = makeString(["%s", "maxPeriodLength"], a)
77-
78-let J = makeString(["%s", "minPeriodLength"], a)
79-
80-func K (B,C) = makeString(["%s%s%d", "votingRewardAssetId", B, toString(C)], a)
84+func N (B,C,O) = makeString(["%s%s%d%s", "vote", B, toString(C), toString(O)], a)
8185
8286
83-func L (M,B,C) = makeString(["%s%s%s%d", "votingReward", toString(M), B, toString(C)], a)
87+func P (Q,R) = makeString(["%s%d", toString(Q), toString(R)], a)
8488
8589
86-func N (B,C) = makeString(["%s%s%d", "votingReward", B, toString(C)], a)
90+func S (B,C) = makeString(["%s%s%d", "suggestIssuer", B, toString(C)], a)
8791
8892
89-let O = makeString(["%s", "finalizeCallRewardAmount"], a)
90-
91-let P = makeString(["%s", "minSuggestRemoveBalance"], a)
92-
93-func Q (B) = makeString(["%s%s", "currentIndex", B], a)
93+func T (I,B,C) = makeString(["%s%s%s%d", "history", toString(I), B, toString(C)], a)
9494
9595
96-func R (B,C,S) = makeString(["%s%s%d%s", "vote", B, toString(C), toString(S)], a)
96+let U = makeString(["%s", "feePerBlock"], a)
97+
98+let V = m(this, U)
99+
100+let W = makeString(["%s", "wxMinForSuggestAddAmountRequired"], a)
101+
102+let X = makeString(["%s", "wxForSuggestRemoveAmountRequired"], a)
103+
104+func Y (B,C) = makeString(["%s%s%d", "votingInfo", B, toString(C)], a)
97105
98106
99-func T (U,V) = makeString(["%s%d", toString(U), toString(V)], a)
107+func Z (aa,ab,ac,ad,ae,af,ag,ah,ai,aj) = makeString(["%s%s%s%d%s%s%d%d%d%d%d", toString(aa), ab, toString(ac), ad, ae, toString(af), toString(ag), toString(ah), toString(ai), toString(aj)], a)
100108
101109
102-func W (B,C) = makeString(["%s%s%d", "votingResult", B, toString(C)], a)
103-
104-
105-func X (Y,Z) = makeString(["%d%d", toString(Y), toString(Z)], a)
106-
107-
108-let aa = makeString(["%d%d", "0", "0"], a)
109-
110-func ab (B,C) = makeString(["%s%s%d", "suggestIssuer", B, toString(C)], a)
111-
112-
113-func ac (M,B,C) = makeString(["%s%s%s%d", "history", toString(M), B, toString(C)], a)
114-
115-
116-func ad (B,C) = makeString(["%s%s%d", "votingEndHeight", B, toString(C)], a)
117-
118-
119-let ae = makeString(["%s", "feePerBlock"], a)
120-
121-let af = m(this, ae)
122-
123-let ag = makeString(["%s", "wxMinForSuggestAddAmountRequired"], a)
124-
125-let ah = makeString(["%s", "wxForSuggestRemoveAmountRequired"], a)
126-
127-func ai (M,aj) = {
128- let V = invoke(s, "getUserGwxAmountAtHeightREADONLY", [M, aj], nil)
129- f(V)
110+func ak (I,al) = {
111+ let R = invoke(s, "getUserGwxAmountAtHeightREADONLY", [I, al], nil)
112+ f(R)
130113 }
131114
132115
133-func ak () = "%s__managerVaultAddress"
116+func am () = "%s__managerVaultAddress"
134117
135118
136-func al () = "%s__managerPublicKey"
119+func an () = "%s__managerPublicKey"
137120
138121
139-func am () = {
140- let h = getString(ak())
122+func ao () = {
123+ let h = getString(am())
141124 if ($isInstanceOf(h, "String"))
142125 then {
143- let an = h
144- addressFromStringValue(an)
126+ let ap = h
127+ addressFromStringValue(ap)
145128 }
146129 else this
147130 }
148131
149132
150-func ao () = {
151- let ap = am()
152- let h = getString(ap, al())
133+func aq () = {
134+ let ar = ao()
135+ let h = getString(ar, an())
153136 if ($isInstanceOf(h, "String"))
154137 then {
155- let an = h
156- fromBase58String(an)
138+ let ap = h
139+ fromBase58String(ap)
157140 }
158141 else if ($isInstanceOf(h, "Unit"))
159142 then unit
160143 else throw("Match error")
161144 }
162145
163146
164-func aq (B,ar) = {
165- let as = valueOrElse(getBoolean(G(B)), false)
166- let at = valueOrElse(getBoolean(H(B)), false)
167- let au = valueOrErrorMessage(getString(ab(B, ar)), c("voting issuer not found"))
168- let av = valueOrErrorMessage(getInteger(E(B, ar)), c("voting start height not found"))
169- let aw = if (as)
170- then valueOrErrorMessage(getInteger(A(B, ar)), c("voting period length not found"))
171- else value(getInteger(D))
172- let ax = [if (if (as)
147+func as (at) = {
148+ let au = split(at, a)
149+ let av = au[1]
150+ let aa = if ((av == "true"))
173151 then true
174- else at)
152+ else false
153+ let ab = au[2]
154+ let ac = parseIntValue(au[3])
155+ let ad = au[4]
156+ let ae = au[5]
157+ let af = parseIntValue(au[6])
158+ let ag = parseIntValue(au[7])
159+ let ah = parseIntValue(au[8])
160+ let ai = parseIntValue(au[9])
161+ let aj = parseIntValue(au[10])
162+ $Tuple10(aa, ab, ac, ad, ae, af, ag, ah, ai, aj)
163+ }
164+
165+
166+func aw (B,ax) = {
167+ let at = valueOrErrorMessage(getString(Y(B, ax)), c("voting info not found"))
168+ let ay = split(at, a)
169+ let ae = ay[5]
170+ let ag = valueOrErrorMessage(parseIntValue(ay[7]), c("voting start height not found"))
171+ let az = valueOrErrorMessage(getString(S(B, ax)), c("voting issuer not found"))
172+ let aA = [if ((ae == "inProgress"))
175173 then true
176- else e("no voting in progress"), if (((av + aw) > height))
174+ else e("no voting in progress"), if ((ag > height))
177175 then true
178176 else e("voting expired")]
179- if ((ax == ax))
180- then $Tuple5(as, at, av, aw, au)
177+ if ((aA == aA))
178+ then $Tuple3(ae, ag, az)
181179 else throw("Strict value is not equal to itself.")
182180 }
183181
184182
185-func ay (az,B,C) = {
186- let aA = R(B, C, az)
187- let aB = valueOrErrorMessage(getString(aA), c("you have not voted"))
188- let aC = split(aB, a)
189- let U = aC[1]
190- let aD = if ((U == "true"))
191- then {
192- let V = parseIntValue(aC[2])
193- let aE = valueOrErrorMessage(getString(W(B, C)), c("voting does not exist"))
194- let aF = split(aE, a)
195- let aG = parseIntValue(aF[1])
196- let aH = fraction(V, b, aG)
197- let aI = valueOrElse(getInteger(N(B, C)), 0)
198- let aD = fraction(aH, aI, b, FLOOR)
199- aD
200- }
201- else 0
202- aD
183+func aB (aC,B,C) = {
184+ let aD = N(B, C, aC)
185+ let aE = valueOrErrorMessage(getString(aD), c("you have not voted"))
186+ let aF = split(aE, a)
187+ let R = parseIntValue(aF[2])
188+ let aG = valueOrErrorMessage(getString(Y(B, C)), c("voting info not found"))
189+ let aH = as(aG)
190+ let ai = aH._9
191+ let aj = aH._10
192+ let aI = fraction(R, b, (ai + aj))
193+ let aJ = valueOrElse(getInteger(J(B, C)), 0)
194+ let aK = fraction(aI, aJ, b, FLOOR)
195+ aK
203196 }
204197
205198
206-@Callable(aJ)
207-func suggestAdd (B,aK,aL) = {
208- let aM = valueOrErrorMessage(assetInfo(fromBase58String(B)), "Invalid asset ID")
209- if ((aM == aM))
199+@Callable(aL)
200+func suggestAdd (B,aM,aN) = {
201+ let aO = aL.payments[0]
202+ let aP = value(aO.assetId)
203+ let aQ = value(aO.amount)
204+ let aR = getIntegerValue(F)
205+ let aS = getIntegerValue(E)
206+ let aA = [if (if ((aM >= aR))
207+ then (aS >= aM)
208+ else false)
209+ then true
210+ else e("invalid periodLength"), if ((aQ > (aM * V)))
211+ then true
212+ else e("not enough wx for given period"), if ((aQ >= getIntegerValue(W)))
213+ then true
214+ else e("payment less then min for suggest")]
215+ if ((aA == aA))
210216 then {
211- let aN = Q(B)
212- let ar = getInteger(aN)
213- let aO = if (isDefined(ar))
214- then (value(ar) + 1)
217+ let aT = M(B)
218+ let ax = getInteger(aT)
219+ let aU = if (isDefined(ax))
220+ then (value(ax) + 1)
215221 else 0
216- let aP = aJ.payments[0]
217- let aQ = value(aP.assetId)
218- let aR = value(aP.amount)
219- let aS = if ((size(aJ.payments) > 1))
222+ let aV = if ((size(aL.payments) > 1))
220223 then {
221- let aT = aJ.payments[1]
222- let aU = toBase58String(value(aT.assetId))
223- let aV = value(aT.amount)
224-[StringEntry(K(B, aO), aU), IntegerEntry(N(B, aO), aV)]
224+ let aW = aL.payments[1]
225+ let aX = toBase58String(value(aW.assetId))
226+ let aY = value(aW.amount)
227+ $Tuple4(true, aX, aY, [StringEntry(G(B, aU), aX), IntegerEntry(J(B, aU), aY)])
225228 }
226- else nil
227- let aW = getIntegerValue(J)
228- let aX = getIntegerValue(I)
229- let ax = [if (if ((aK >= aW))
230- then (aX >= aK)
231- else false)
229+ else $Tuple4(false, "EMPTY", 0, nil)
230+ let aa = aV._1
231+ let ab = aV._2
232+ let ac = aV._3
233+ let aZ = aV._4
234+ let ah = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
235+ let at = Z(aa, ab, ac, "verification", "inProgress", height, (height + aM), ah, 0, 0)
236+ let ba = valueOrElse(getInteger(K), 0)
237+ let bb = (aQ - ba)
238+ let bc = invoke(u, "createOrUpdate", [B, aN, false], nil)
239+ if ((bc == bc))
240+ then ([IntegerEntry(aT, aU), StringEntry(S(B, aU), toString(aL.caller)), StringEntry(Y(B, aU), at), Burn(aP, bb)] ++ aZ)
241+ else throw("Strict value is not equal to itself.")
242+ }
243+ else throw("Strict value is not equal to itself.")
244+ }
245+
246+
247+
248+@Callable(aL)
249+func suggestRemove (B) = {
250+ let bd = ak(toString(aL.caller), height)
251+ let be = getIntegerValue(L)
252+ let aO = aL.payments[0]
253+ let aP = value(aO.assetId)
254+ let aQ = value(aO.amount)
255+ let aA = [if ((bd >= be))
256+ then true
257+ else e("not enough gWXes"), if ((aQ >= getIntegerValue(X)))
258+ then true
259+ else e("payment less then min for suggest")]
260+ if ((aA == aA))
261+ then {
262+ let aT = M(B)
263+ let ax = getInteger(aT)
264+ let aU = if (isDefined(ax))
265+ then (value(ax) + 1)
266+ else 0
267+ let aM = valueOrErrorMessage(getInteger(D), c("periodLengthRemove not set"))
268+ let ag = (height + aM)
269+ let ah = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
270+ let at = Z(false, "EMPTY", 0, "deverification", "inProgress", height, (height + aM), ah, 0, 0)
271+[IntegerEntry(aT, aU), StringEntry(S(B, aU), toString(aL.caller)), StringEntry(Y(B, aU), at)]
272+ }
273+ else throw("Strict value is not equal to itself.")
274+ }
275+
276+
277+
278+@Callable(aL)
279+func vote (B,Q) = {
280+ let aT = M(B)
281+ let ax = valueOrErrorMessage(getInteger(aT), c("voting does not exist"))
282+ let at = aw(B, ax)
283+ if ((at == at))
284+ then {
285+ let bf = at._2
286+ let bg = ak(toString(aL.caller), bf)
287+ let aD = N(B, ax, aL.caller)
288+ let aA = [if ((getString(aD) == unit))
232289 then true
233- else e("invalid periodLength"), if ((getBoolean(F(B)) == unit))
290+ else e("You have already voted"), if ((bg > 0))
234291 then true
235- else e("already verified"), if ((getBoolean(G(B)) == unit))
236- then true
237- else e("already in progress"), if ((aR > (aK * af)))
238- then true
239- else e("not enough wx for given period"), if ((aR >= getIntegerValue(ag)))
240- then true
241- else e("payment less then min for suggest")]
242- if ((ax == ax))
292+ else throw("You'll not have gWX at the end of voting")]
293+ if ((aA == aA))
243294 then {
244- let aY = invoke(u, "createOrUpdate", [B, aL, false], nil)
245- if ((aY == aY))
246- then {
247- let aZ = (height + aK)
248- let ba = valueOrElse(getInteger(O), 0)
249- let bb = (aR - ba)
250- ([IntegerEntry(aN, aO), BooleanEntry(G(B), true), IntegerEntry(E(B, aO), height), IntegerEntry(A(B, aO), aK), StringEntry(ab(B, aO), toString(aJ.caller)), IntegerEntry(ad(B, aO), aZ), Burn(aQ, bb)] ++ aS)
251- }
252- else throw("Strict value is not equal to itself.")
295+ let aG = valueOrErrorMessage(getString(Y(B, ax)), c("voting info not found"))
296+ let au = as(aG)
297+ let ai = au._9
298+ let aj = au._10
299+ let bh = if (Q)
300+ then $Tuple2((ai + bg), aj)
301+ else $Tuple2(ai, (aj + bg))
302+ let bi = bh._1
303+ let bj = bh._2
304+ let bk = Z(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bi, bj)
305+ let bl = {
306+ let h = getBoolean(G(B, ax))
307+ if ($isInstanceOf(h, "Boolean"))
308+ then {
309+ let bm = h
310+[BooleanEntry(H(aL.caller, B, ax), true)]
311+ }
312+ else if ($isInstanceOf(h, "Unit"))
313+ then nil
314+ else throw("Match error")
315+ }
316+ ([StringEntry(aD, P(Q, bg)), StringEntry(Y(B, ax), bk)] ++ bl)
253317 }
254318 else throw("Strict value is not equal to itself.")
255319 }
256320 else throw("Strict value is not equal to itself.")
257321 }
258322
259323
260324
261-@Callable(aJ)
262-func suggestRemove (B) = {
263- let bc = ai(toString(aJ.caller), height)
264- let bd = getIntegerValue(P)
265- let aP = aJ.payments[0]
266- let aQ = value(aP.assetId)
267- let aR = value(aP.amount)
268- let be = valueOrElse(getBoolean(F(B)), false)
269- let ax = [if (be)
270- then true
271- else e(makeString([B, "not verified"], " ")), if ((bc >= bd))
272- then true
273- else e("not enough gWXes"), if ((aR >= getIntegerValue(ah)))
274- then true
275- else e("payment less then min for suggest")]
276- if ((ax == ax))
325+@Callable(aL)
326+func cancelVote (B) = {
327+ let aT = M(B)
328+ let ax = valueOrErrorMessage(getInteger(aT), c("voting does not exist"))
329+ let aD = N(B, ax, aL.caller)
330+ let aE = valueOrErrorMessage(getString(aD), c("you have not voted"))
331+ let aF = split(aE, a)
332+ let Q = aF[1]
333+ let R = parseIntValue(aF[2])
334+ let at = aw(B, ax)
335+ if ((at == at))
277336 then {
278- let aN = Q(B)
279- let ar = getInteger(aN)
280- let aO = if (isDefined(ar))
281- then (value(ar) + 1)
282- else 0
283- let aK = valueOrErrorMessage(getInteger(D), c("periodLengthRemove not set"))
284- let aZ = (height + aK)
285-[IntegerEntry(aN, aO), BooleanEntry(H(B), true), IntegerEntry(E(B, aO), height), StringEntry(ab(B, aO), toString(aJ.caller)), IntegerEntry(ad(B, aO), aZ)]
286- }
287- else throw("Strict value is not equal to itself.")
288- }
289-
290-
291-
292-@Callable(aJ)
293-func vote (B,U) = {
294- let aN = Q(B)
295- let ar = valueOrErrorMessage(getInteger(aN), c("voting does not exist"))
296- let bf = aq(B, ar)
297- if ((bf == bf))
298- then {
299- let av = bf._3
300- let aw = bf._4
301- let bg = ai(toString(aJ.caller), (av + aw))
302- let aA = R(B, ar, aJ.caller)
303- let bh = W(B, ar)
304- let ax = [if ((getString(aA) == unit))
337+ let aA = [if (if ((Q == "true"))
305338 then true
306- else e("You have already voted"), if ((bg > 0))
339+ else (Q == "false"))
307340 then true
308- else throw("You'll not have gWX at the end of voting")]
309- if ((ax == ax))
341+ else e("invalid vote")]
342+ if ((aA == aA))
310343 then {
311- let aE = valueOrElse(getString(bh), aa)
312- let aF = split(aE, a)
313- let bi = if (U)
314- then X((parseIntValue(aF[1]) + bg), parseIntValue(aF[2]))
315- else X(parseIntValue(aF[1]), (parseIntValue(aF[2]) + bg))
316-[StringEntry(aA, T(U, bg)), StringEntry(bh, bi), BooleanEntry(L(aJ.caller, B, ar), true)]
344+ let aG = valueOrErrorMessage(getString(Y(B, ax)), c("voting info not found"))
345+ let au = as(aG)
346+ let ai = au._9
347+ let aj = au._10
348+ let bn = if ((Q == "true"))
349+ then $Tuple2((ai - R), aj)
350+ else $Tuple2(ai, (aj - R))
351+ let bi = bn._1
352+ let bj = bn._2
353+ let bk = Z(au._1, au._2, au._3, au._4, au._5, au._6, au._7, au._8, bi, bj)
354+[StringEntry(Y(B, ax), bk), DeleteEntry(aD), DeleteEntry(H(aL.caller, B, ax))]
317355 }
318356 else throw("Strict value is not equal to itself.")
319357 }
320358 else throw("Strict value is not equal to itself.")
321359 }
322360
323361
324362
325-@Callable(aJ)
326-func cancelVote (B) = {
327- let aN = Q(B)
328- let ar = valueOrErrorMessage(getInteger(aN), c("voting does not exist"))
329- let aA = R(B, ar, aJ.caller)
330- let bh = W(B, ar)
331- let aB = valueOrErrorMessage(getString(aA), c("you have not voted"))
332- let aC = split(aB, a)
333- let U = aC[1]
334- let V = parseIntValue(aC[2])
335- let bf = aq(B, ar)
336- if ((bf == bf))
363+@Callable(aL)
364+func finalize (B) = {
365+ let aT = M(B)
366+ let ax = valueOrElse(getInteger(aT), 0)
367+ let bo = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
368+ let bp = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
369+ let aG = valueOrErrorMessage(getString(Y(B, ax)), c("voting info not found"))
370+ let au = as(aG)
371+ let ad = au._4
372+ let ae = au._5
373+ let ag = au._7
374+ let bq = au._8
375+ let ai = au._9
376+ let aj = au._10
377+ let aA = [if ((ae == "inProgress"))
378+ then true
379+ else e("voting not in progress"), if ((height >= ag))
380+ then true
381+ else e("voting not finished")]
382+ if ((aA == aA))
337383 then {
338- let ax = [if (if ((U == "true"))
384+ let br = if (((ai + aj) >= bq))
385+ then "accepted"
386+ else "rejected"
387+ let bs = if ((ad == "verification"))
339388 then true
340- else (U == "false"))
341- then true
342- else e("invalid vote")]
343- if ((ax == ax))
389+ else false
390+ let bt = if ((aj > ai))
344391 then {
345- let aE = valueOrElse(getString(bh), aa)
346- let aF = split(aE, a)
347- let bj = if ((U == "true"))
348- then X((parseIntValue(aF[1]) - V), parseIntValue(aF[2]))
349- else X(parseIntValue(aF[1]), (parseIntValue(aF[2]) - V))
350-[DeleteEntry(aA), StringEntry(bh, bj), DeleteEntry(L(aJ.caller, B, ar))]
392+ let bu = invoke(u, "setVerified", [B, bs], nil)
393+ if ((bu == bu))
394+ then {
395+ let ba = valueOrElse(getInteger(K), 0)
396+[ScriptTransfer(aL.caller, ba, x)]
397+ }
398+ else throw("Strict value is not equal to itself.")
351399 }
352- else throw("Strict value is not equal to itself.")
400+ else nil
401+ let bk = Z(au._1, au._2, au._3, au._4, br, au._6, au._7, au._8, au._9, au._10)
402+ ([StringEntry(Y(B, ax), bk)] ++ bt)
353403 }
354404 else throw("Strict value is not equal to itself.")
355405 }
356406
357407
358408
359-@Callable(aJ)
360-func finalize (B) = {
361- let as = valueOrElse(getBoolean(G(B)), false)
362- let at = valueOrElse(getBoolean(H(B)), false)
363- let aN = Q(B)
364- let ar = valueOrElse(getInteger(aN), 0)
365- let bk = valueOrErrorMessage(getInteger(y), c("votingThresholdAdd not set"))
366- let bl = valueOrErrorMessage(getInteger(z), c("votingThresholdRemove not set"))
367- let bm = if (as)
368- then $Tuple3([DeleteEntry(G(B)), BooleanEntry(F(B), true)], true, bk)
369- else $Tuple3([DeleteEntry(H(B)), DeleteEntry(F(B))], true, bl)
370- let bn = bm._1
371- let bo = bm._2
372- let bp = bm._3
373- let aE = valueOrElse(getString(W(B, ar)), aa)
374- let aF = split(aE, a)
375- let bq = parseIntValue(aF[1])
376- let br = parseIntValue(aF[2])
377- let bs = (bq + br)
378- let aZ = valueOrErrorMessage(getInteger(ad(B, ar)), c("voting end height not found"))
379- let ax = [if (if (as)
380- then true
381- else at)
382- then true
383- else e("nothing to finalize"), if ((height >= aZ))
384- then true
385- else e("voting not finished"), if ((bs >= bp))
386- then true
387- else e("not enough votes")]
388- if ((ax == ax))
389- then {
390- let bt = if ((br > bq))
391- then {
392- let bu = invoke(u, "setVerified", [B, bo], nil)
393- if ((bu == bu))
394- then {
395- let ba = valueOrElse(getInteger(O), 0)
396-[ScriptTransfer(aJ.caller, ba, x)]
397- }
398- else throw("Strict value is not equal to itself.")
399- }
400- else nil
401- (bn ++ bt)
402- }
403- else throw("Strict value is not equal to itself.")
409+@Callable(aL)
410+func claimREADONLY (B,C,bv) = {
411+ let I = valueOrErrorMessage(addressFromString(bv), c("invalid address"))
412+ let bw = getString(G(B, C))
413+ let ac = if (isDefined(bw))
414+ then aB(I, B, C)
415+ else 0
416+ $Tuple2(nil, ac)
404417 }
405418
406419
407420
408-@Callable(aJ)
409-func claimREADONLY (B,C,bv) = {
410- let M = valueOrErrorMessage(addressFromString(bv), c("invalid address"))
411- let bw = getString(K(B, C))
412- let aD = if (isDefined(bw))
413- then ay(M, B, C)
414- else 0
415- $Tuple2(nil, aD)
416- }
417-
418-
419-
420-@Callable(aJ)
421+@Callable(aL)
421422 func claim (B,C) = {
422- let bx = aJ.caller
423- let by = ac(bx, B, C)
423+ let bx = aL.caller
424+ let by = T(bx, B, C)
424425 let bz = getInteger(by)
425- let ax = [if ((bz == unit))
426+ let aA = [if ((bz == unit))
426427 then true
427428 else e("already claimed")]
428- if ((ax == ax))
429+ if ((aA == aA))
429430 then {
430- let aD = if ((ay(bx, B, C) > 0))
431- then ay(bx, B, C)
431+ let ac = if ((aB(bx, B, C) > 0))
432+ then aB(bx, B, C)
432433 else e("nothing to claim")
433- let bw = getString(K(B, C))
434+ let bw = getString(G(B, C))
434435 let bA = if (isDefined(bw))
435436 then {
436437 let bB = fromBase58String(value(bw))
437-[ScriptTransfer(bx, aD, bB), IntegerEntry(by, aD)]
438+[ScriptTransfer(bx, ac, bB), IntegerEntry(by, ac), DeleteEntry(H(bx, B, C))]
438439 }
439440 else e("nothing to claim")
440441 bA
441442 }
442443 else throw("Strict value is not equal to itself.")
443444 }
444445
445446
446447 @Verifier(bC)
447448 func bD () = {
448449 let bE = {
449- let h = ao()
450+ let h = aq()
450451 if ($isInstanceOf(h, "ByteVector"))
451452 then {
452- let bF = h
453- bF
453+ let bm = h
454+ bm
454455 }
455456 else if ($isInstanceOf(h, "Unit"))
456457 then bC.senderPublicKey
457458 else throw("Match error")
458459 }
459460 sigVerify(bC.bodyBytes, bC.proofs[0], bE)
460461 }
461462

github/deemru/w8io/873ac7e 
78.12 ms