tx · 6DsWgcVbmrjw7GQUAUbenBdxPEEXhsTR1at5x7B4Hw7o

3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP:  -0.02100000 Waves

2023.09.01 17:21 [3802088] smart account 3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP > SELF 0.00000000 Waves

{ "type": 13, "id": "6DsWgcVbmrjw7GQUAUbenBdxPEEXhsTR1at5x7B4Hw7o", "fee": 2100000, "feeAssetId": null, "timestamp": 1693578135724, "version": 2, "chainId": 87, "sender": "3P5Bfd58PPfNvBM2Hy8QfbcDqMeNtzg7KfP", "senderPublicKey": "GqXuX2WHNr3WUqTaeH2YCySFY45NAJoE9RmY9bEWkzh", "proofs": [ "", "23aM2rdxYK7SAFnaQBfyuuA1Ni2QzmqBa7Kfr1G3JrTbs849wdZqFTsArGgALrGZMrdGFwtpeJFwDpZbyRVgtSxn", "", "3zkb6h5Qzxbv3p7kGWwB5BA6DwixogSGZrUgsYfj91GhiHhfKURwrnhgp3yFjHT57C3r9FaaAXeGDrjAKhhnGxjY" ], "script": "base64:BgIvCAISEQoPCAgICAgICAgICAgICAgIEgMKAQgSDAoKAQIBAgECAQIBAhIFCgMBAQg8AAtyZXZpc2lvbk51bQIAAANTRVACAl9fAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBaQUHJG1hdGNoMAUBaQkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAAZSWR4Q29udHJvbENmZ05ldXRyaW5vRGFwcAABABhJZHhDb250cm9sQ2ZnQXVjdGlvbkRhcHAAAgAUSWR4Q29udHJvbENmZ1JwZERhcHAAAwAVSWR4Q29udHJvbENmZ01hdGhEYXBwAAQAHElkeENvbnRyb2xDZmdMaXF1aWRhdGlvbkRhcHAABQAVSWR4Q29udHJvbENmZ1Jlc3REYXBwAAYAHUlkeENvbnRyb2xDZmdOb2RlUmVnaXN0cnlEYXBwAAcAHElkeENvbnRyb2xDZmdOc2J0U3Rha2luZ0RhcHAACAAZSWR4Q29udHJvbENmZ01lZGlhdG9yRGFwcAAJABxJZHhDb250cm9sQ2ZnU3VyZlN0YWtpbmdEYXBwAAoAIElkeENvbnRyb2xDZmdHbnNidENvbnRyb2xsZXJEYXBwAAsAF0lkeENvbnRyb2xDZmdSZXN0VjJEYXBwAAwAG0lkeENvbnRyb2xDZmdHb3Zlcm5hbmNlRGFwcAANABxJZHhDb250cm9sQ2ZnUGVnUHJvdmlkZXJEYXBwAA4BEGtleUNvbnRyb2xDb25maWcAAhElc19fY29udHJvbENvbmZpZwEOZGF0YUNvbnRyb2xDZmcPEG5ldXRyaW5vQ29udHJhY3QPYXVjdGlvbkNvbnRyYWN0C3JwZENvbnRyYWN0DG1hdGhDb250cmFjdBNsaXF1aWRhdGlvbkNvbnRyYWN0DHJlc3RDb250cmFjdBRub2RlUmVnaXN0cnlDb250cmFjdBNuc2J0U3Rha2luZ0NvbnRyYWN0EG1lZGlhdG9yQ29udHJhY3QTc3VyZlN0YWtpbmdDb250cmFjdBdnbnNidENvbnRyb2xsZXJDb250cmFjdA5yZXN0VjJDb250cmFjdBJnb3Zlcm5hbmNlQ29udHJhY3QMZG9yYUNvbnRyYWN0E3Bvb2xzRmFjYWRlQ29udHJhY3QJALoJAgkAzAgCAh4lcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMJAMwIAgUQbmV1dHJpbm9Db250cmFjdAkAzAgCBQ9hdWN0aW9uQ29udHJhY3QJAMwIAgULcnBkQ29udHJhY3QJAMwIAgUMbWF0aENvbnRyYWN0CQDMCAIFE2xpcXVpZGF0aW9uQ29udHJhY3QJAMwIAgUMcmVzdENvbnRyYWN0CQDMCAIFFG5vZGVSZWdpc3RyeUNvbnRyYWN0CQDMCAIFE25zYnRTdGFraW5nQ29udHJhY3QJAMwIAgUQbWVkaWF0b3JDb250cmFjdAkAzAgCBRNzdXJmU3Rha2luZ0NvbnRyYWN0CQDMCAIFF2duc2J0Q29udHJvbGxlckNvbnRyYWN0CQDMCAIFDnJlc3RWMkNvbnRyYWN0CQDMCAIFEmdvdmVybmFuY2VDb250cmFjdAkAzAgCBQxkb3JhQ29udHJhY3QJAMwIAgUTcG9vbHNGYWNhZGVDb250cmFjdAUDbmlsBQNTRVABFmNvbnZlcnRXYXZlc1RvTmV1dHJpbm8CBmFtb3VudAVwcmljZQkAawMJAGsDBQZhbW91bnQFBXByaWNlAMCEPQDAhD0AgMLXLwEYZ2V0TnVtYmVyQnlBZGRyZXNzQW5kS2V5AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCCQERQGV4dHJOYXRpdmUoMTA2MikBBQdhZGRyZXNzBQNrZXkAAAEYZ2V0U3RyaW5nQnlBZGRyZXNzQW5kS2V5AgdhZGRyZXNzA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQdhZGRyZXNzBQNrZXkCAAEWY29udmVydEpzb25BcnJheVRvTGlzdAEJanNvbkFycmF5CQC1CQIFCWpzb25BcnJheQIBLAAFcHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwIFcHJpY2UAAAAKcHJpY2VJbmRleAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAgtwcmljZV9pbmRleAAAAAlpc0Jsb2NrZWQJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwIKaXNfYmxvY2tlZAcAEnBlcmNlbnRQcmljZU9mZnNldAAHAA1wdWJLZXlPcmFjbGVzCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMCB29yYWNsZXMCAAARcHViS2V5T3JhY2xlc0xpc3QJARZjb252ZXJ0SnNvbkFycmF5VG9MaXN0AQUNcHViS2V5T3JhY2xlcwAPbmV1dHJpbm9BZGRyZXNzCQEHQWRkcmVzcwEBGgFXcARipkeb6a1WaJTL74WMMIIgKJoIFJayABJsaXF1aWRhdGlvbkFkZHJlc3MJAQdBZGRyZXNzAQEaAVca6knL+gp+ygh/KNWflY4Me2m1qTiRH0gADW5ldXRyaW5vQXNzZXQBILYmKcME9c5TkaQOS3UkL2SMUbH6369UKb1I0h0qsqrRAA9jb250cm9sQ29udHJhY3QFBHRoaXMBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCCmNvbnRyb2xDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQpjb250cm9sQ2ZnBQNpZHgJAKwCAgItQ29udHJvbCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAKY29udHJvbENmZwkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEdGhpcwkBEGtleUNvbnRyb2xDb25maWcABQNTRVAAEmdvdmVybmFuY2VDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFCmNvbnRyb2xDZmcFG0lkeENvbnRyb2xDZmdHb3Zlcm5hbmNlRGFwcAAVbmV1dHJpbm9Mb2NrZWRCYWxhbmNlCQELdmFsdWVPckVsc2UCCQCaCAIFD25ldXRyaW5vQWRkcmVzcwIVYmFsYW5jZV9sb2NrX25ldXRyaW5vAAAAEndhdmVzTG9ja2VkQmFsYW5jZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9uZXV0cmlub0FkZHJlc3MCEmJhbGFuY2VfbG9ja193YXZlcwAAAAdyZXNlcnZlCQBlAggJAO8HAQUPbmV1dHJpbm9BZGRyZXNzB3JlZ3VsYXIFEndhdmVzTG9ja2VkQmFsYW5jZQAObmV1dHJpbm9TdXBwbHkJAGUCCQBlAgkAZAIFFW5ldXRyaW5vTG9ja2VkQmFsYW5jZQgJAQV2YWx1ZQEJAOwHAQUNbmV1dHJpbm9Bc3NldAhxdWFudGl0eQkA8AcCBQ9uZXV0cmlub0FkZHJlc3MFDW5ldXRyaW5vQXNzZXQJAPAHAgUSbGlxdWlkYXRpb25BZGRyZXNzBQ1uZXV0cmlub0Fzc2V0AAdkZWZpY2l0CQBlAgUObmV1dHJpbm9TdXBwbHkJARZjb252ZXJ0V2F2ZXNUb05ldXRyaW5vAgUHcmVzZXJ2ZQUFcHJpY2UADmRvcmFBZGRyZXNzU3RyAiMzUEtrb2pLZGQ2QkJ6VGYxUlhiUVZmVURyYU5GWFhIS3pRRgALZG9yYUFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDmRvcmFBZGRyZXNzU3RyAA14dG5Vc2RQcmljZVg2CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgULZG9yYUFkZHJlc3MCFiVzJXNfX3ByaWNlX19VU0ROLVVTRFQCJERPUkEgZG9lc24ndCBjb250YWluIFVTRE4vVVNEVCBwcmljZQARd3hfcmVzdEFkZHJlc3NTdHICIzNQOE1vUG5zYXVyb2ZrMVZ5aHNkQUZrZVE2aWpwSllYQ3BXAAt3eF9yZXN0RGFwcAkBEUBleHRyTmF0aXZlKDEwNjIpAQURd3hfcmVzdEFkZHJlc3NTdHIADHN3b3BSZXN0RGFwcAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1A1NmpOUXpFQ1hucldwbmJiU0pLdzdFb29vNmZrVWFNUHAABXh0bklkBQ1uZXV0cmlub0Fzc2V0AAh4dG5JZFN0cgkA2AQBBQV4dG5JZAAHd3hJZFN0cgIsQXRxdjU5RVl6akZHdWl0S1ZuTVJrNkg4RnVram9WM2t0UG9yYkV5czI1b24ABHd4SWQJANkEAQUHd3hJZFN0cgAKdmlyZXNJZFN0cgIsRFNiYmhMc1NUZURnNUxzaXVmazJBbmVoM0RqVnFKdVByMk05dVUxZ3d5NXAAB3ZpcmVzSWQJANkEAQUKdmlyZXNJZFN0cgERZmluZFByaWNlc0luUmFuZ2UBBnByaWNlcwQPbWluUGVyY2VudEJvdW5kAFoED21heFBlcmNlbnRCb3VuZABuBAJwMAkAkQMCBQZwcmljZXMAAAQGY2hlY2swAwkAZwIAAAkAkQMCBQZwcmljZXMAAAkAzAgCAAAFA25pbAQDcDAxCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAEAZAUCcDAEA3AwMgkAaQIJAGgCCQCRAwIFBnByaWNlcwACAGQFAnAwBANwMDMJAGkCCQBoAgkAkQMCBQZwcmljZXMAAwBkBQJwMAQDcDA0CQBpAgkAaAIJAJEDAgUGcHJpY2VzAAQAZAUCcDAEBmFycmF5MQMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMDEJAGYCBQNwMDEFD21pblBlcmNlbnRCb3VuZAcJAMwIAgABCQDMCAIAAAUDbmlsCQDMCAIAAAUDbmlsBAZhcnJheTIDAwkAZgIFD21heFBlcmNlbnRCb3VuZAUDcDAyCQBmAgUDcDAyBQ9taW5QZXJjZW50Qm91bmQHCQDMCAIAAgUGYXJyYXkxBQZhcnJheTEEBmFycmF5MwMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMDMJAGYCBQNwMDMFD21pblBlcmNlbnRCb3VuZAcJAMwIAgADBQZhcnJheTIFBmFycmF5MgMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMDQJAGYCBQNwMDQFD21pblBlcmNlbnRCb3VuZAcJAMwIAgAEBQZhcnJheTMFBmFycmF5MwQGY2hlY2sxAwkAZwIJAJADAQUGY2hlY2swAAMFBmNoZWNrMAQCcDEJAJEDAgUGcHJpY2VzAAEDCQBnAgAABQJwMQkAzAgCAAEFA25pbAQDcDEwCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAAAZAUCcDEEA3AxMgkAaQIJAGgCCQCRAwIFBnByaWNlcwACAGQFAnAxBANwMTMJAGkCCQBoAgkAkQMCBQZwcmljZXMAAwBkBQJwMQQDcDE0CQBpAgkAaAIJAJEDAgUGcHJpY2VzAAQAZAUCcDEEBmFycmF5MQMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMTAJAGYCBQNwMTAFD21pblBlcmNlbnRCb3VuZAcJAMwIAgAACQDMCAIAAQUDbmlsCQDMCAIAAQUDbmlsBAZhcnJheTIDAwkAZgIFD21heFBlcmNlbnRCb3VuZAUDcDEyCQBmAgUDcDEyBQ9taW5QZXJjZW50Qm91bmQHCQDMCAIAAgUGYXJyYXkxBQZhcnJheTEEBmFycmF5MwMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMTMJAGYCBQNwMTMFD21pblBlcmNlbnRCb3VuZAcJAMwIAgADBQZhcnJheTIFBmFycmF5MgMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMTQJAGYCBQNwMTQFD21pblBlcmNlbnRCb3VuZAcJAMwIAgAEBQZhcnJheTMFBmFycmF5MwQGY2hlY2syAwkAZwIJAJADAQUGY2hlY2sxAAMFBmNoZWNrMQQCcDIJAJEDAgUGcHJpY2VzAAIDCQBnAgAABQJwMgkAzAgCAAIFA25pbAQDcDIwCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAAAZAUCcDIEA3AyMQkAaQIJAGgCCQCRAwIFBnByaWNlcwABAGQFAnAyBANwMjMJAGkCCQBoAgkAkQMCBQZwcmljZXMAAwBkBQJwMgQDcDI0CQBpAgkAaAIJAJEDAgUGcHJpY2VzAAQAZAUCcDIEBmFycmF5MQMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMjAJAGYCBQNwMjAFD21pblBlcmNlbnRCb3VuZAcJAMwIAgAACQDMCAIAAgUDbmlsCQDMCAIAAgUDbmlsBAZhcnJheTIDAwkAZgIFD21heFBlcmNlbnRCb3VuZAUDcDIxCQBmAgUDcDIxBQ9taW5QZXJjZW50Qm91bmQHCQDMCAIAAQUGYXJyYXkxBQZhcnJheTEEBmFycmF5MwMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMjMJAGYCBQNwMjMFD21pblBlcmNlbnRCb3VuZAcJAMwIAgADBQZhcnJheTIFBmFycmF5MgMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMjQJAGYCBQNwMjQFD21pblBlcmNlbnRCb3VuZAcJAMwIAgAEBQZhcnJheTMFBmFycmF5MwQGY2hlY2szAwkAZwIJAJADAQUGY2hlY2syAAMFBmNoZWNrMgQCcDMJAJEDAgUGcHJpY2VzAAMDCQBnAgAABQJwMwkAzAgCAAMFA25pbAQDcDMwCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAAAZAUCcDMEA3AzMQkAaQIJAGgCCQCRAwIFBnByaWNlcwABAGQFAnAzBANwMzIJAGkCCQBoAgkAkQMCBQZwcmljZXMAAgBkBQJwMwQDcDM0CQBpAgkAaAIJAJEDAgUGcHJpY2VzAAQAZAUCcDMEBmFycmF5MQMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMzAJAGYCBQNwMzAFD21pblBlcmNlbnRCb3VuZAcJAMwIAgAACQDMCAIAAwUDbmlsCQDMCAIAAwUDbmlsBAZhcnJheTIDAwkAZgIFD21heFBlcmNlbnRCb3VuZAUDcDMxCQBmAgUDcDMxBQ9taW5QZXJjZW50Qm91bmQHCQDMCAIAAQUGYXJyYXkxBQZhcnJheTEEBmFycmF5MwMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMzIJAGYCBQNwMzIFD21pblBlcmNlbnRCb3VuZAcJAMwIAgACBQZhcnJheTIFBmFycmF5MgMDCQBmAgUPbWF4UGVyY2VudEJvdW5kBQNwMzQJAGYCBQNwMzQFD21pblBlcmNlbnRCb3VuZAcJAMwIAgAEBQZhcnJheTMFBmFycmF5MwMJAGcCCQCQAwEFBmNoZWNrMwADBQZjaGVjazMEAnA0CQCRAwIFBnByaWNlcwAEAwkAZwIAAAUCcDQJAMwIAgAEBQNuaWwEA3A0MAkAaQIJAGgCCQCRAwIFBnByaWNlcwAAAGQFAnA0BANwNDEJAGkCCQBoAgkAkQMCBQZwcmljZXMAAQBkBQJwNAQDcDQyCQBpAgkAaAIJAJEDAgUGcHJpY2VzAAIAZAUCcDQEA3A0MwkAaQIJAGgCCQCRAwIFBnByaWNlcwADAGQFAnA0BAZhcnJheTEDAwkAZgIFD21heFBlcmNlbnRCb3VuZAUDcDQwCQBmAgUDcDQwBQ9taW5QZXJjZW50Qm91bmQHCQDMCAIAAAkAzAgCAAQFA25pbAkAzAgCAAQFA25pbAQGYXJyYXkyAwMJAGYCBQ9tYXhQZXJjZW50Qm91bmQFA3A0MQkAZgIFA3A0MQUPbWluUGVyY2VudEJvdW5kBwkAzAgCAAEFBmFycmF5MQUGYXJyYXkxBAZhcnJheTMDAwkAZgIFD21heFBlcmNlbnRCb3VuZAUDcDQyCQBmAgUDcDQyBQ9taW5QZXJjZW50Qm91bmQHCQDMCAIAAgUGYXJyYXkyBQZhcnJheTIDAwkAZgIFD21heFBlcmNlbnRCb3VuZAUDcDQzCQBmAgUDcDQzBQ9taW5QZXJjZW50Qm91bmQHCQDMCAIAAwUGYXJyYXkzBQZhcnJheTMBEmZvcm1hdHRpbmdQcmljZU1zZwEFcHJpY2UJAJsDAQkArAICCQCsAgIJAKwCAgkArAICAhNXQVZFU05FVVRSSU5PUFJFRklYAgFfCQCkAwEFBmhlaWdodAIBXwkApAMBBQVwcmljZQEKUHJpY2VFbnRyeQMIbmV3UHJpY2UKYXNzZXRJZFN0cg1uZXdQcmljZUluZGV4BAloZWlnaHRTdHIJAKQDAQUGaGVpZ2h0BBBuZXdQcmljZUluZGV4U3RyCQCkAwEFDW5ld1ByaWNlSW5kZXgED3ByaWNlQnlBc3NldEtFWQkAuQkCCQDMCAICHCVzJXMlc19fY29tbW9uX19wcmljZUJ5QXNzZXQJAMwIAgUKYXNzZXRJZFN0cgUDbmlsBQNTRVAEEHByaWNlQnlIZWlnaHRLRVkJALkJAgkAzAgCAh8lcyVzJXMlZF9fY29tbW9uX19wcmljZUJ5SGVpZ2h0CQDMCAIFCmFzc2V0SWRTdHIJAMwIAgUJaGVpZ2h0U3RyBQNuaWwFA1NFUAQPcHJpY2VCeUluZGV4S0VZCQC5CQIJAMwIAgIeJXMlcyVzJWRfX2NvbW1vbl9fcHJpY2VCeUluZGV4CQDMCAIFCmFzc2V0SWRTdHIJAMwIAgUQbmV3UHJpY2VJbmRleFN0cgUDbmlsBQNTRVAJAMwIAgkBDEludGVnZXJFbnRyeQIFD3ByaWNlQnlBc3NldEtFWQUIbmV3UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFD3ByaWNlQnlJbmRleEtFWQUIbmV3UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFEHByaWNlQnlIZWlnaHRLRVkFCG5ld1ByaWNlBQNuaWwBF2ZpbmFsaXplVmlyZXNVc2RPbmNoYWluAQ93YXZlc1VzZFByaWNlWDYEEHd4X1ZpcmVzV2F2ZXNfbHACLEUzWWhVUk5zQ21qVWFZTmlnSDZBYXlMeGJoOXU4MXVWR1UzWnZIS3puWTV2BAx3eFJlc3RSZXN1bHQJALUJAgkBCGFzU3RyaW5nAQkA/AcEBQt3eF9yZXN0RGFwcAIRcG9vbFN0YXRzUkVBRE9OTFkJAMwIAgUQd3hfVmlyZXNXYXZlc19scAUDbmlsBQNuaWwCAl9fBBV3eF9WaXJlc1dhdmVzX1dBVkVTeDgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQx3eFJlc3RSZXN1bHQAAgQVd3hfVmlyZXNXYXZlc19WSVJFU3g4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMd3hSZXN0UmVzdWx0AAEEHXd4X1ZpcmVzV2F2ZXNfVmlyZXNVc2RQcmljZVg2CQBrAwUVd3hfVmlyZXNXYXZlc19XQVZFU3g4BQ93YXZlc1VzZFByaWNlWDYFFXd4X1ZpcmVzV2F2ZXNfVklSRVN4OAQUd3hfVmlyZXNXYXZlc19XZWlnaHQFFXd4X1ZpcmVzV2F2ZXNfVklSRVN4OAQWd3hfVmlyZXNYdG5fQWRkcmVzc1N0cgIjM1A1SGpQb3dnaXBpVkIzVXZYcGhEaVB2S3M0MjRXQzl4UXcEE3d4X1ZpcmVzWHRuX0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFFnd4X1ZpcmVzWHRuX0FkZHJlc3NTdHIEEXd4X1ZpcmVzWHRuX1hUTng2CQDwBwIFE3d4X1ZpcmVzWHRuX0FkZHJlc3MFBXh0bklkBBN3eF9WaXJlc1h0bl9WSVJFU3g4CQDwBwIFE3d4X1ZpcmVzWHRuX0FkZHJlc3MFB3ZpcmVzSWQEG3d4X1ZpcmVzWHRuX1ZpcmVzVXNkUHJpY2VYNgkAawMJAGgCBRF3eF9WaXJlc1h0bl9YVE54NgBkBQ14dG5Vc2RQcmljZVg2BRN3eF9WaXJlc1h0bl9WSVJFU3g4BBJ3eF9WaXJlc1h0bl9XZWlnaHQFE3d4X1ZpcmVzWHRuX1ZJUkVTeDgEGHN3b3BfVmlyZXNYdG5fQWRkcmVzc1N0cgIjM1BKNDhQM3Ayd3ZXVWpnUWFRaVoyY0ZicjhxbXhNb2tCR2QEFXN3b3BfVmlyZXNYdG5fQWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUYc3dvcF9WaXJlc1h0bl9BZGRyZXNzU3RyBB1zd29wX1ZpcmVzWHRuX1ZpcmVzWHRuUHJpY2VYNgkBBWFzSW50AQkA/AcEBQxzd29wUmVzdERhcHACEWNhbGNHZXRBbW91bnRDUE1NCQDMCAIFGHN3b3BfVmlyZXNYdG5fQWRkcmVzc1N0cgkAzAgCAiMzUDg4cWsxS3pGMUJLakQ3ZkM3TGpOVkFLTTRlemZmNVdFNgkAzAgCBQp2aXJlc0lkU3RyCQDMCAIAgMLXLwUDbmlsBQNuaWwEHXN3b3BfVmlyZXNYdG5fVmlyZXNVc2RQcmljZVg2CQBrAwUdc3dvcF9WaXJlc1h0bl9WaXJlc1h0blByaWNlWDYFDXh0blVzZFByaWNlWDYAwIQ9BBRzd29wX1ZpcmVzWHRuX1dlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgUVc3dvcF9WaXJlc1h0bl9BZGRyZXNzAg9BX2Fzc2V0X2JhbGFuY2UEAVcJAGQCCQBkAgUUd3hfVmlyZXNXYXZlc19XZWlnaHQFEnd4X1ZpcmVzWHRuX1dlaWdodAUUc3dvcF9WaXJlc1h0bl9XZWlnaHQED3ZpcmVzVXNkUHJpY2VYNgkAZAIJAGQCCQBrAwUdd3hfVmlyZXNXYXZlc19WaXJlc1VzZFByaWNlWDYFFHd4X1ZpcmVzV2F2ZXNfV2VpZ2h0BQFXCQBrAwUbd3hfVmlyZXNYdG5fVmlyZXNVc2RQcmljZVg2BRJ3eF9WaXJlc1h0bl9XZWlnaHQFAVcJAGsDBR1zd29wX1ZpcmVzWHRuX1ZpcmVzVXNkUHJpY2VYNgUUc3dvcF9WaXJlc1h0bl9XZWlnaHQFAVcEBWRlYnVnCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnh0blVzZFByaWNlWDY9CQCkAwEFDXh0blVzZFByaWNlWDYCHyB3eF9WaXJlc1dhdmVzX1ZpcmVzVXNkUHJpY2VYNj0JAKQDAQUdd3hfVmlyZXNXYXZlc19WaXJlc1VzZFByaWNlWDYCHSB3eF9WaXJlc1h0bl9WaXJlc1VzZFByaWNlWDY9CQCkAwEFG3d4X1ZpcmVzWHRuX1ZpcmVzVXNkUHJpY2VYNgIfIHN3b3BfVmlyZXNYdG5fVmlyZXNVc2RQcmljZVg2PQkApAMBBR1zd29wX1ZpcmVzWHRuX1ZpcmVzVXNkUHJpY2VYNgkAlAoCBQ92aXJlc1VzZFByaWNlWDYFBWRlYnVnARRmaW5hbGl6ZVd4VXNkT25jaGFpbgEPd2F2ZXNVc2RQcmljZVg2BA13eF9XeFdhdmVzX2xwAixCaVN6RmU4blNMNzhvWmFlYmZvaW41dkJaNVB6ZTZkN2thZWlqTHFyNXhaZQQMd3hSZXN0UmVzdWx0CQC1CQIJAQhhc1N0cmluZwEJAPwHBAULd3hfcmVzdERhcHACEXBvb2xTdGF0c1JFQURPTkxZCQDMCAIFDXd4X1d4V2F2ZXNfbHAFA25pbAUDbmlsAgJfXwQRd3hfV3hXYXZlc19XZWlnaHQA0IYDBBJ3eF9XeFdhdmVzX1dBVkVTeDgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQx3eFJlc3RSZXN1bHQAAgQPd3hfV3hXYXZlc19XWHg4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMd3hSZXN0UmVzdWx0AAEEF3d4X1d4V2F2ZXNfV3hVc2RQcmljZVg2CQBrAwUSd3hfV3hXYXZlc19XQVZFU3g4BQ93YXZlc1VzZFByaWNlWDYFD3d4X1d4V2F2ZXNfV1h4OAQTd3hfV3hYdG5fQWRkcmVzc1N0cgIjM1BDRU5wRUtlOGF0d0VMWjdvQ1NtY2RFZmNSdUtUclV4OTkEEHd4X1d4WHRuX0FkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFE3d4X1d4WHRuX0FkZHJlc3NTdHIED3d4X1d4WHRuX1dlaWdodADQhgMEDnd4X1d4WHRuX1hUTng2CQDwBwIFEHd4X1d4WHRuX0FkZHJlc3MFBXh0bklkBA13eF9XeFh0bl9XWHg4CQDwBwIFEHd4X1d4WHRuX0FkZHJlc3MFBHd4SWQEFXd4X1d4WHRuX1d4VXNkUHJpY2VYNgkAawMJAGgCBQ53eF9XeFh0bl9YVE54NgBkBQ14dG5Vc2RQcmljZVg2BQ13eF9XeFh0bl9XWHg4BBVzd29wX1d4WHRuX0FkZHJlc3NTdHICIzNQS2k0RzNWWDJrNDJaU21OTnJtdmdkREg3SnpSYVVoWTdSBBFzd29wX1d4WHRuX1dlaWdodACIJwQXc3dvcF9XeFh0bl9XeFh0blByaWNlWDYJAQVhc0ludAEJAPwHBAUMc3dvcFJlc3REYXBwAhFjYWxjR2V0QW1vdW50Q1BNTQkAzAgCBRVzd29wX1d4WHRuX0FkZHJlc3NTdHIJAMwIAgIjM1A4OHFrMUt6RjFCS2pEN2ZDN0xqTlZBS000ZXpmZjVXRTYJAMwIAgUHd3hJZFN0cgkAzAgCAIDC1y8FA25pbAUDbmlsBBdzd29wX1d4WHRuX1d4VXNkUHJpY2VYNgkAawMFF3N3b3BfV3hYdG5fV3hYdG5QcmljZVg2BQ14dG5Vc2RQcmljZVg2AMCEPQQBVwkAZAIJAGQCBRF3eF9XeFdhdmVzX1dlaWdodAUPd3hfV3hYdG5fV2VpZ2h0BRFzd29wX1d4WHRuX1dlaWdodAQMd3hVc2RQcmljZVg2CQBkAgkAZAIJAGsDBRd3eF9XeFdhdmVzX1d4VXNkUHJpY2VYNgURd3hfV3hXYXZlc19XZWlnaHQFAVcJAGsDBRV3eF9XeFh0bl9XeFVzZFByaWNlWDYFD3d4X1d4WHRuX1dlaWdodAUBVwkAawMFF3N3b3BfV3hYdG5fV3hVc2RQcmljZVg2BRFzd29wX1d4WHRuX1dlaWdodAUBVwQFZGVidWcJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIOeHRuVXNkUHJpY2VYNj0JAKQDAQUNeHRuVXNkUHJpY2VYNgIZIHd4X1d4V2F2ZXNfV3hVc2RQcmljZVg2PQkApAMBBRd3eF9XeFdhdmVzX1d4VXNkUHJpY2VYNgIXIHd4X1d4WHRuX1d4VXNkUHJpY2VYNj0JAKQDAQUVd3hfV3hYdG5fV3hVc2RQcmljZVg2Ahkgc3dvcF9XeFh0bl9XeFVzZFByaWNlWDY9CQCkAwEFF3N3b3BfV3hYdG5fV3hVc2RQcmljZVg2CQCUCgIFDHd4VXNkUHJpY2VYNgUFZGVidWcEAWkBDWNvbnN0cnVjdG9yVjEPEG5ldXRyaW5vQ29udHJhY3QPYXVjdGlvbkNvbnRyYWN0C3JwZENvbnRyYWN0DG1hdGhDb250cmFjdBNsaXF1aWRhdGlvbkNvbnRyYWN0DHJlc3RDb250cmFjdBRub2RlUmVnaXN0cnlDb250cmFjdBNuc2J0U3Rha2luZ0NvbnRyYWN0EG1lZGlhdG9yQ29udHJhY3QTc3VyZlN0YWtpbmdDb250cmFjdBdnbnNidENvbnRyb2xsZXJDb250cmFjdA5yZXN0VjJDb250cmFjdBJnb3Zlcm5hbmNlQ29udHJhY3QMZG9yYUNvbnRyYWN0E3Bvb2xzRmFjYWRlQ29udHJhY3QDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhJwZXJtaXNzaW9ucyBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUNvbnRyb2xDb25maWcACQEOZGF0YUNvbnRyb2xDZmcPBRBuZXV0cmlub0NvbnRyYWN0BQ9hdWN0aW9uQ29udHJhY3QFC3JwZENvbnRyYWN0BQxtYXRoQ29udHJhY3QFE2xpcXVpZGF0aW9uQ29udHJhY3QFDHJlc3RDb250cmFjdAUUbm9kZVJlZ2lzdHJ5Q29udHJhY3QFE25zYnRTdGFraW5nQ29udHJhY3QFEG1lZGlhdG9yQ29udHJhY3QFE3N1cmZTdGFraW5nQ29udHJhY3QFF2duc2J0Q29udHJvbGxlckNvbnRyYWN0BQ5yZXN0VjJDb250cmFjdAUSZ292ZXJuYW5jZUNvbnRyYWN0BQxkb3JhQ29udHJhY3QFE3Bvb2xzRmFjYWRlQ29udHJhY3QFA25pbAFpARVjYWxsRW1lcmdlbmN5U2h1dGRvd24BBnJlYXNvbgQaQXV0b0VtZXJnZW5jeU9yYWNsZUFkZHJlc3MCIzNQN2loRlZ4Qk5iSEsyMzdUTmRQeFQxeEhFdThwSGV4WFRyBA1jYWxsZXJBZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMDCQECIT0CBRpBdXRvRW1lcmdlbmN5T3JhY2xlQWRkcmVzcwUNY2FsbGVyQWRkcmVzcwkBAiE9AgkApQgBBRJnb3Zlcm5hbmNlQ29udHJhY3QFDWNhbGxlckFkZHJlc3MHCQACAQI9Y2FsbGVyIG11c3QgYmUgb25lIGFuIGVtZXJnZW5jeSBvcmFjbGUgb3IgR292ZXJuYW5jZSBjb250cmFjdAkAzAgCCQEMQm9vbGVhbkVudHJ5AgIKaXNfYmxvY2tlZAYJAMwIAgkBC1N0cmluZ0VudHJ5AgIRaXNfYmxvY2tlZF9jYWxsZXIFDWNhbGxlckFkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgIRaXNfYmxvY2tlZF9yZWFzb24FBnJlYXNvbgUDbmlsAWkBFGZpbmFsaXplQ3VycmVudFByaWNlCgZwcmljZTEFc2lnbjEGcHJpY2UyBXNpZ24yBnByaWNlMwVzaWduMwZwcmljZTQFc2lnbjQGcHJpY2U1BXNpZ241AwUJaXNCbG9ja2VkCQACAQJaY29udHJhY3QgaXMgYmxvY2tlZCBieSBFTUVSR0VOQ1kgU0hVVERPV04gYWN0aW9ucyB1bnRpbGwgcmVhY3RpdmF0aW9uIGJ5IGVtZXJnZW5jeSBvcmFjbGVzAwkBAiE9AgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgICBnByaWNlXwkApAMBBQZoZWlnaHQAAAAACQACAQIPd2FpdCBuZXh0IGJsb2NrAwkBAiE9AgkAkQMCBRFwdWJLZXlPcmFjbGVzTGlzdAkAagIFBmhlaWdodAAFCQDYBAEIBQFpD2NhbGxlclB1YmxpY0tleQkAAgEJAKwCAgkArAICCQCsAgICGk91dCBvZiB0dXJuIGZpbmFsaXphdGlvbjogCQCkAwEFBmhlaWdodAIdIGJsb2NrIHNob3VsZCBiZSBmaW5hbGl6ZSBieSAJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QJAGoCBQZoZWlnaHQABQQGcHJpY2VzCQDMCAIDCQDEEwMJARJmb3JtYXR0aW5nUHJpY2VNc2cBBQZwcmljZTEFBXNpZ24xCQDZBAEJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QAAAUGcHJpY2UxAAAJAMwIAgMJAMQTAwkBEmZvcm1hdHRpbmdQcmljZU1zZwEFBnByaWNlMgUFc2lnbjIJANkEAQkAkQMCBRFwdWJLZXlPcmFjbGVzTGlzdAABBQZwcmljZTIAAAkAzAgCAwkAxBMDCQESZm9ybWF0dGluZ1ByaWNlTXNnAQUGcHJpY2UzBQVzaWduMwkA2QQBCQCRAwIFEXB1YktleU9yYWNsZXNMaXN0AAIFBnByaWNlMwAACQDMCAIDCQDEEwMJARJmb3JtYXR0aW5nUHJpY2VNc2cBBQZwcmljZTQFBXNpZ240CQDZBAEJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QAAwUGcHJpY2U0AAAJAMwIAgMJAMQTAwkBEmZvcm1hdHRpbmdQcmljZU1zZwEFBnByaWNlNQUFc2lnbjUJANkEAQkAkQMCBRFwdWJLZXlPcmFjbGVzTGlzdAAEBQZwcmljZTUAAAUDbmlsBA56ZXJvUHJpY2VDb3VudAMJAAACCQCRAwIFBnByaWNlcwAAAAAAAQkAZAIAAAMJAAACCQCRAwIFBnByaWNlcwABAAAAAQkAZAIAAAMJAAACCQCRAwIFBnByaWNlcwACAAAAAQkAZAIAAAMJAAACCQCRAwIFBnByaWNlcwADAAAAAQkAZAIAAAMJAAACCQCRAwIFBnByaWNlcwAEAAAAAQAAAwkAZwIFDnplcm9QcmljZUNvdW50AAMJAAIBAiAzIHByaWNlcyBvciBtb3JlIGFyZSBlcXVhbHMgdG8gMAQNcHJpY2VzSW5SYW5nZQkBEWZpbmRQcmljZXNJblJhbmdlAQUGcHJpY2VzBBNwcmljZVByb3ZpZGluZ0NvdW50CQCQAwEFDXByaWNlc0luUmFuZ2UDCQBmAgADBRNwcmljZVByb3ZpZGluZ0NvdW50CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgI6Q291bGQgbm90IGZpbmFsaXplIHByaWNlIGJlY2F1c2Ugb2YgYmlnIHZhcmlhdGlvbjogaGVpZ2h0PQkApAMBBQZoZWlnaHQCAQoJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QAAAIBPQkApAMBCQCRAwIFBnByaWNlcwAAAgEKCQCRAwIFEXB1YktleU9yYWNsZXNMaXN0AAECAT0JAKQDAQkAkQMCBQZwcmljZXMAAQIBCgkAkQMCBRFwdWJLZXlPcmFjbGVzTGlzdAACAgE9CQCkAwEJAJEDAgUGcHJpY2VzAAICAQoJAJEDAgURcHViS2V5T3JhY2xlc0xpc3QAAwIBPQkApAMBCQCRAwIFBnByaWNlcwADAgEKCQCRAwIFEXB1YktleU9yYWNsZXNMaXN0AAQCAT0JAKQDAQkAkQMCBQZwcmljZXMABAQEc3VtMQkAZAIJAGQCCQCRAwIFBnByaWNlcwkAkQMCBQ1wcmljZXNJblJhbmdlAAAJAJEDAgUGcHJpY2VzCQCRAwIFDXByaWNlc0luUmFuZ2UAAQkAkQMCBQZwcmljZXMJAJEDAgUNcHJpY2VzSW5SYW5nZQACBARzdW0yAwkAZwIFE3ByaWNlUHJvdmlkaW5nQ291bnQABAkAZAIFBHN1bTEJAJEDAgUGcHJpY2VzCQCRAwIFDXByaWNlc0luUmFuZ2UAAwUEc3VtMQQIcHJpY2VTdW0DCQBnAgUTcHJpY2VQcm92aWRpbmdDb3VudAAFCQBkAgUEc3VtMgkAkQMCBQZwcmljZXMJAJEDAgUNcHJpY2VzSW5SYW5nZQAEBQRzdW0yAwkAZwIFE3ByaWNlUHJvdmlkaW5nQ291bnQABgkAAgECHkludmFsaWQgcHJpY2VzSW5SYW5nZSBjcmVhdGlvbgQIbmV3UHJpY2UJAGkCBQhwcmljZVN1bQUTcHJpY2VQcm92aWRpbmdDb3VudAQKd3hVc2RUdXBsZQkBFGZpbmFsaXplV3hVc2RPbmNoYWluAQUIbmV3UHJpY2UEDW5ld1d4VXNkUHJpY2UIBQp3eFVzZFR1cGxlAl8xBAd3eERlYnVnCAUKd3hVc2RUdXBsZQJfMgQNdmlyZXNVc2RUdXBsZQkBF2ZpbmFsaXplVmlyZXNVc2RPbmNoYWluAQUIbmV3UHJpY2UEEG5ld1ZpcmVzVXNkUHJpY2UIBQ12aXJlc1VzZFR1cGxlAl8xBAp2aXJlc0RlYnVnCAUNdmlyZXNVc2RUdXBsZQJfMgMDCQBnAgUIbmV3UHJpY2UJAGQCBQVwcmljZQkAaQIJAGgCBQVwcmljZQUScGVyY2VudFByaWNlT2Zmc2V0AGQGCQBnAgkAZQIFBXByaWNlCQBpAgkAaAIFBXByaWNlBRJwZXJjZW50UHJpY2VPZmZzZXQAZAUIbmV3UHJpY2UEBnJlYXNvbgI/YXV0b21hdGljIGVtZXJnZW5jeSBzaHV0ZG93biBiZWNhdXNlIG9mIGxhcmdlIHByaWNlIHZhcmlhYmlsaXR5CQDMCAIJAQxCb29sZWFuRW50cnkCAgppc19ibG9ja2VkBgkAzAgCCQELU3RyaW5nRW50cnkCAhFpc19ibG9ja2VkX2NhbGxlcgkApQgBBQR0aGlzCQDMCAIJAQtTdHJpbmdFbnRyeQICEWlzX2Jsb2NrZWRfcmVhc29uBQZyZWFzb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAhFibGFja19zd2FybV9wcmljZQIBXwkApAMBBQZoZWlnaHQFCG5ld1ByaWNlBQNuaWwEDW5ld1ByaWNlSW5kZXgJAGQCBQpwcmljZUluZGV4AAEJAM0IAgkAzQgCCQDOCAIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgVwcmljZQUIbmV3UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIGcHJpY2VfCQCkAwEFBmhlaWdodAUIbmV3UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIMcHJpY2VfaW5kZXhfCQCkAwEFDW5ld1ByaWNlSW5kZXgFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgILcHJpY2VfaW5kZXgFDW5ld1ByaWNlSW5kZXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIOaW5kZXhCeUhlaWdodF8JAKQDAQUGaGVpZ2h0BQ1uZXdQcmljZUluZGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICDXByaWNlQnlJbmRleF8JAKQDAQUNbmV3UHJpY2VJbmRleAUIbmV3UHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIIZGVmaWNpdF8JAKQDAQUGaGVpZ2h0BQdkZWZpY2l0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD25ldXRyaW5vU3VwcGx5XwkApAMBBQZoZWlnaHQFDm5ldXRyaW5vU3VwcGx5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEGRlZmljaXRfcGVyY2VudF8JAKQDAQUGaGVpZ2h0AwkBAiE9AgUObmV1dHJpbm9TdXBwbHkAAAkAaQIJAGgCBQdkZWZpY2l0AGQFDm5ldXRyaW5vU3VwcGx5AAAFA25pbAkBClByaWNlRW50cnkDBQhuZXdQcmljZQIFV0FWRVMFDW5ld1ByaWNlSW5kZXgJAQpQcmljZUVudHJ5AwUNbmV3V3hVc2RQcmljZQUHd3hJZFN0cgUNbmV3UHJpY2VJbmRleAkBClByaWNlRW50cnkDBRBuZXdWaXJlc1VzZFByaWNlBQp2aXJlc0lkU3RyBQ1uZXdQcmljZUluZGV4CQELU3RyaW5nRW50cnkCAg9kZWJ1Z193eFVzZENhbGMFB3d4RGVidWcJAQtTdHJpbmdFbnRyeQICEmRlYnVnX3ZpcmVzVXNkQ2FsYwUKdmlyZXNEZWJ1ZwFpAQ12YWxpZGF0ZVByaWNlAxFhdmVyYWdpbmdQZXJpb2RNcwt0b2xlcmFuY2VYNgphc3NldElkU3RyCQCUCgIFA25pbAYBAnR4AQZ2ZXJpZnkABBNwdWJLZXlBZG1pbnNMaXN0U3RyCQC5CQIJAMwIAgIsR0pkTFNhTGl2NUs3eHVlamFjOG1jUmNIb3lvM2RQckVTcnZrdEczYTZNQVIJAMwIAgIsRVl3Wm1VUmQ1S0thUVJCanNWYTZnOERQaXNGb1M2U292Ukp0RmlMNWdNSFUJAMwIAgIsRHRtQWZ1RGRDckhLOHNwZEFlQVl6cTZNc1plZ2VEOWduc3JwdVRSa0NiVkEJAMwIAgIsNVdSWEZTandjVGJOZktjSnM4WnFYbVNTV1lzU1ZKVXRNdk1xWmo1aEg0TmMFA25pbAUDU0VQBBBwdWJLZXlBZG1pbnNMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPY29udHJvbENvbnRyYWN0Agwlc19fbXVsdGlzaWcFE3B1YktleUFkbWluc0xpc3RTdHIFA1NFUAQFY291bnQJAGQCCQBkAgkAZAIDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAAAAAEAAAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEJANkEAQkAkQMCBRBwdWJLZXlBZG1pbnNMaXN0AAEAAQAAAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgkA2QQBCQCRAwIFEHB1YktleUFkbWluc0xpc3QAAgABAAADCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwADCQDZBAEJAJEDAgUQcHViS2V5QWRtaW5zTGlzdAADAAIAAAkAZwIFBWNvdW50AAMkjBAV", "height": 3802088, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: G2eKxG1BxE8gM3PNurMgfYx9xYcfhJoxVFXZ9t3Qnpry Next: 7LR9Pr52xmmaZu6o3EnnbbGb2z7jQ4krESZFp9Dpyx8J Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "a599418b70818d5e4ae2447b4bf335a65c8214b9"
4+let a = ""
55
66 let b = "__"
77
5858 func w () = "%s__controlConfig"
5959
6060
61-func x (y,z,A,B,C,D,E,F,G,H,I,J,K,L) = makeString(["%s%s%s%s%s%s%s%s%s%s%s%s%s%s", y, z, A, B, C, D, E, F, G, H, I, J, K, L], b)
61+func x (y,z,A,B,C,D,E,F,G,H,I,J,K,L,M) = makeString_2C(["%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", y, z, A, B, C, D, E, F, G, H, I, J, K, L, M], b)
6262
6363
64-func M (N,O) = fraction(fraction(N, O, 1000000), 1000000, 100000000)
64+func N (O,P) = fraction(fraction(O, P, 1000000), 1000000, 100000000)
6565
6666
67-func P (Q,R) = valueOrElse(getInteger(addressFromStringValue(Q), R), 0)
67+func Q (R,S) = valueOrElse(getInteger(addressFromStringValue(R), S), 0)
6868
6969
70-func S (Q,R) = valueOrElse(getString(Q, R), "")
70+func T (R,S) = valueOrElse(getString(R, S), "")
7171
7272
73-func T (U) = split(U, ",")
73+func U (V) = split(V, ",")
7474
7575
76-let O = valueOrElse(getInteger(this, "price"), 0)
76+let P = valueOrElse(getInteger(this, "price"), 0)
7777
78-let V = valueOrElse(getInteger(this, "price_index"), 0)
78+let W = valueOrElse(getInteger(this, "price_index"), 0)
7979
80-let W = valueOrElse(getBoolean(this, "is_blocked"), false)
80+let X = valueOrElse(getBoolean(this, "is_blocked"), false)
8181
82-let X = 7
82+let Y = 7
8383
84-let Y = valueOrElse(getString(this, "oracles"), "")
84+let Z = valueOrElse(getString(this, "oracles"), "")
8585
86-let Z = T(Y)
86+let aa = U(Z)
8787
88-let aa = Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo')
88+let ab = Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo')
8989
90-let ab = Address(base58'3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7')
90+let ac = Address(base58'3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7')
9191
92-let ac = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
92+let ad = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9393
94-let ad = this
94+let ae = this
9595
96-func ae (Q,R) = valueOrErrorMessage(getString(Q, R), makeString(["mandatory ", toString(Q), ".", R, " is not defined"], ""))
96+func af (R,S) = valueOrErrorMessage(getString(R, S), makeString(["mandatory ", toString(R), ".", S, " is not defined"], ""))
9797
9898
99-func af (ag,ah) = valueOrErrorMessage(addressFromString(ag[ah]), ("Control cfg doesn't contain address at index " + toString(ah)))
99+func ag (ah,ai) = valueOrErrorMessage(addressFromString(ah[ai]), ("Control cfg doesn't contain address at index " + toString(ai)))
100100
101101
102-let ag = split_4C(ae(this, w()), b)
102+let ah = split_4C(af(this, w()), b)
103103
104-let K = af(ag, u)
104+let K = ag(ah, u)
105105
106-let ai = valueOrElse(getInteger(aa, "balance_lock_neutrino"), 0)
106+let aj = valueOrElse(getInteger(ab, "balance_lock_neutrino"), 0)
107107
108-let aj = valueOrElse(getInteger(aa, "balance_lock_waves"), 0)
108+let ak = valueOrElse(getInteger(ab, "balance_lock_waves"), 0)
109109
110-let ak = (wavesBalance(aa).regular - aj)
110+let al = (wavesBalance(ab).regular - ak)
111111
112-let al = (((ai + value(assetInfo(ac)).quantity) - assetBalance(aa, ac)) - assetBalance(ab, ac))
112+let am = (((aj + value(assetInfo(ad)).quantity) - assetBalance(ab, ad)) - assetBalance(ac, ad))
113113
114-let am = (al - M(ak, O))
114+let an = (am - N(al, P))
115115
116-let an = "3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF"
116+let ao = "3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF"
117117
118-let ao = addressFromStringValue(an)
118+let ap = addressFromStringValue(ao)
119119
120-let ap = valueOrErrorMessage(getInteger(ao, "%s%s__price__USDN-USDT"), "DORA doesn't contain USDN/USDT price")
120+let aq = valueOrErrorMessage(getInteger(ap, "%s%s__price__USDN-USDT"), "DORA doesn't contain USDN/USDT price")
121121
122-let aq = "3P8MoPnsaurofk1VyhsdAFkeQ6ijpJYXCpW"
122+let ar = "3P8MoPnsaurofk1VyhsdAFkeQ6ijpJYXCpW"
123123
124-let ar = addressFromStringValue(aq)
124+let as = addressFromStringValue(ar)
125125
126-let as = addressFromStringValue("3P56jNQzECXnrWpnbbSJKw7Eooo6fkUaMPp")
126+let at = addressFromStringValue("3P56jNQzECXnrWpnbbSJKw7Eooo6fkUaMPp")
127127
128-let at = ac
128+let au = ad
129129
130-let au = toBase58String(at)
130+let av = toBase58String(au)
131131
132-let av = "Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on"
132+let aw = "Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on"
133133
134-let aw = fromBase58String(av)
134+let ax = fromBase58String(aw)
135135
136-let ax = "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p"
136+let ay = "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p"
137137
138-let ay = fromBase58String(ax)
138+let az = fromBase58String(ay)
139139
140-func az (aA) = {
141- let aB = 90
142- let aC = 110
143- let aD = aA[0]
144- let aE = if ((0 >= aA[0]))
140+func aA (aB) = {
141+ let aC = 90
142+ let aD = 110
143+ let aE = aB[0]
144+ let aF = if ((0 >= aB[0]))
145145 then [0]
146146 else {
147- let aF = ((aA[1] * 100) / aD)
148- let aG = ((aA[2] * 100) / aD)
149- let aH = ((aA[3] * 100) / aD)
150- let aI = ((aA[4] * 100) / aD)
151- let aJ = if (if ((aC > aF))
152- then (aF > aB)
147+ let aG = ((aB[1] * 100) / aE)
148+ let aH = ((aB[2] * 100) / aE)
149+ let aI = ((aB[3] * 100) / aE)
150+ let aJ = ((aB[4] * 100) / aE)
151+ let aK = if (if ((aD > aG))
152+ then (aG > aC)
153153 else false)
154154 then [1, 0]
155155 else [0]
156- let aK = if (if ((aC > aG))
157- then (aG > aB)
156+ let aL = if (if ((aD > aH))
157+ then (aH > aC)
158158 else false)
159- then 2 :: aJ
160- else aJ
161- let aL = if (if ((aC > aH))
162- then (aH > aB)
159+ then 2 :: aK
160+ else aK
161+ let aM = if (if ((aD > aI))
162+ then (aI > aC)
163163 else false)
164- then 3 :: aK
165- else aK
166- if (if ((aC > aI))
167- then (aI > aB)
164+ then 3 :: aL
165+ else aL
166+ if (if ((aD > aJ))
167+ then (aJ > aC)
168168 else false)
169- then 4 :: aL
170- else aL
169+ then 4 :: aM
170+ else aM
171171 }
172- let aM = if ((size(aE) >= 3))
173- then aE
172+ let aN = if ((size(aF) >= 3))
173+ then aF
174174 else {
175- let aN = aA[1]
176- if ((0 >= aN))
175+ let aO = aB[1]
176+ if ((0 >= aO))
177177 then [1]
178178 else {
179- let aO = ((aA[0] * 100) / aN)
180- let aP = ((aA[2] * 100) / aN)
181- let aQ = ((aA[3] * 100) / aN)
182- let aR = ((aA[4] * 100) / aN)
183- let aJ = if (if ((aC > aO))
184- then (aO > aB)
179+ let aP = ((aB[0] * 100) / aO)
180+ let aQ = ((aB[2] * 100) / aO)
181+ let aR = ((aB[3] * 100) / aO)
182+ let aS = ((aB[4] * 100) / aO)
183+ let aK = if (if ((aD > aP))
184+ then (aP > aC)
185185 else false)
186186 then [0, 1]
187187 else [1]
188- let aK = if (if ((aC > aP))
189- then (aP > aB)
188+ let aL = if (if ((aD > aQ))
189+ then (aQ > aC)
190190 else false)
191- then 2 :: aJ
192- else aJ
193- let aL = if (if ((aC > aQ))
194- then (aQ > aB)
191+ then 2 :: aK
192+ else aK
193+ let aM = if (if ((aD > aR))
194+ then (aR > aC)
195195 else false)
196- then 3 :: aK
197- else aK
198- if (if ((aC > aR))
199- then (aR > aB)
196+ then 3 :: aL
197+ else aL
198+ if (if ((aD > aS))
199+ then (aS > aC)
200200 else false)
201- then 4 :: aL
202- else aL
201+ then 4 :: aM
202+ else aM
203203 }
204204 }
205- let aS = if ((size(aM) >= 3))
206- then aM
205+ let aT = if ((size(aN) >= 3))
206+ then aN
207207 else {
208- let aT = aA[2]
209- if ((0 >= aT))
208+ let aU = aB[2]
209+ if ((0 >= aU))
210210 then [2]
211211 else {
212- let aU = ((aA[0] * 100) / aT)
213- let aV = ((aA[1] * 100) / aT)
214- let aW = ((aA[3] * 100) / aT)
215- let aX = ((aA[4] * 100) / aT)
216- let aJ = if (if ((aC > aU))
217- then (aU > aB)
212+ let aV = ((aB[0] * 100) / aU)
213+ let aW = ((aB[1] * 100) / aU)
214+ let aX = ((aB[3] * 100) / aU)
215+ let aY = ((aB[4] * 100) / aU)
216+ let aK = if (if ((aD > aV))
217+ then (aV > aC)
218218 else false)
219219 then [0, 2]
220220 else [2]
221- let aK = if (if ((aC > aV))
222- then (aV > aB)
221+ let aL = if (if ((aD > aW))
222+ then (aW > aC)
223223 else false)
224- then 1 :: aJ
225- else aJ
226- let aL = if (if ((aC > aW))
227- then (aW > aB)
224+ then 1 :: aK
225+ else aK
226+ let aM = if (if ((aD > aX))
227+ then (aX > aC)
228228 else false)
229- then 3 :: aK
230- else aK
231- if (if ((aC > aX))
232- then (aX > aB)
229+ then 3 :: aL
230+ else aL
231+ if (if ((aD > aY))
232+ then (aY > aC)
233233 else false)
234- then 4 :: aL
235- else aL
234+ then 4 :: aM
235+ else aM
236236 }
237237 }
238- let aY = if ((size(aS) >= 3))
239- then aS
238+ let aZ = if ((size(aT) >= 3))
239+ then aT
240240 else {
241- let aZ = aA[3]
242- if ((0 >= aZ))
241+ let ba = aB[3]
242+ if ((0 >= ba))
243243 then [3]
244244 else {
245- let ba = ((aA[0] * 100) / aZ)
246- let bb = ((aA[1] * 100) / aZ)
247- let bc = ((aA[2] * 100) / aZ)
248- let bd = ((aA[4] * 100) / aZ)
249- let aJ = if (if ((aC > ba))
250- then (ba > aB)
245+ let bb = ((aB[0] * 100) / ba)
246+ let bc = ((aB[1] * 100) / ba)
247+ let bd = ((aB[2] * 100) / ba)
248+ let be = ((aB[4] * 100) / ba)
249+ let aK = if (if ((aD > bb))
250+ then (bb > aC)
251251 else false)
252252 then [0, 3]
253253 else [3]
254- let aK = if (if ((aC > bb))
255- then (bb > aB)
254+ let aL = if (if ((aD > bc))
255+ then (bc > aC)
256256 else false)
257- then 1 :: aJ
258- else aJ
259- let aL = if (if ((aC > bc))
260- then (bc > aB)
257+ then 1 :: aK
258+ else aK
259+ let aM = if (if ((aD > bd))
260+ then (bd > aC)
261261 else false)
262- then 2 :: aK
263- else aK
264- if (if ((aC > bd))
265- then (bd > aB)
262+ then 2 :: aL
263+ else aL
264+ if (if ((aD > be))
265+ then (be > aC)
266266 else false)
267- then 4 :: aL
268- else aL
267+ then 4 :: aM
268+ else aM
269269 }
270270 }
271- if ((size(aY) >= 3))
272- then aY
271+ if ((size(aZ) >= 3))
272+ then aZ
273273 else {
274- let be = aA[4]
275- if ((0 >= be))
274+ let bf = aB[4]
275+ if ((0 >= bf))
276276 then [4]
277277 else {
278- let bf = ((aA[0] * 100) / be)
279- let bg = ((aA[1] * 100) / be)
280- let bh = ((aA[2] * 100) / be)
281- let bi = ((aA[3] * 100) / be)
282- let aJ = if (if ((aC > bf))
283- then (bf > aB)
278+ let bg = ((aB[0] * 100) / bf)
279+ let bh = ((aB[1] * 100) / bf)
280+ let bi = ((aB[2] * 100) / bf)
281+ let bj = ((aB[3] * 100) / bf)
282+ let aK = if (if ((aD > bg))
283+ then (bg > aC)
284284 else false)
285285 then [0, 4]
286286 else [4]
287- let aK = if (if ((aC > bg))
288- then (bg > aB)
287+ let aL = if (if ((aD > bh))
288+ then (bh > aC)
289289 else false)
290- then 1 :: aJ
291- else aJ
292- let aL = if (if ((aC > bh))
293- then (bh > aB)
290+ then 1 :: aK
291+ else aK
292+ let aM = if (if ((aD > bi))
293+ then (bi > aC)
294294 else false)
295- then 2 :: aK
296- else aK
297- if (if ((aC > bi))
298- then (bi > aB)
295+ then 2 :: aL
296+ else aL
297+ if (if ((aD > bj))
298+ then (bj > aC)
299299 else false)
300- then 3 :: aL
301- else aL
300+ then 3 :: aM
301+ else aM
302302 }
303303 }
304304 }
305305
306306
307-func bj (O) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(O)))
307+func bk (P) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(P)))
308308
309309
310-func bk (bl,bm,bn) = {
311- let bo = toString(height)
312- let bp = toString(bn)
313- let bq = makeString(["%s%s%s__common__priceByAsset", bm], b)
314- let br = makeString(["%s%s%s%d__common__priceByHeight", bm, bo], b)
315- let bs = makeString(["%s%s%s%d__common__priceByIndex", bm, bp], b)
316-[IntegerEntry(bq, bl), IntegerEntry(bs, bl), IntegerEntry(br, bl)]
310+func bl (bm,bn,bo) = {
311+ let bp = toString(height)
312+ let bq = toString(bo)
313+ let br = makeString(["%s%s%s__common__priceByAsset", bn], b)
314+ let bs = makeString(["%s%s%s%d__common__priceByHeight", bn, bp], b)
315+ let bt = makeString(["%s%s%s%d__common__priceByIndex", bn, bq], b)
316+[IntegerEntry(br, bm), IntegerEntry(bt, bm), IntegerEntry(bs, bm)]
317317 }
318318
319319
320-func bt (bu) = {
321- let bv = "E3YhURNsCmjUaYNigH6AayLxbh9u81uVGU3ZvHKznY5v"
322- let bw = split(c(invoke(ar, "poolStatsREADONLY", [bv], nil)), "__")
323- let bx = parseIntValue(bw[2])
324- let by = parseIntValue(bw[1])
325- let bz = fraction(bx, bu, by)
326- let bA = by
327- let bB = "3P5HjPowgipiVB3UvXphDiPvKs424WC9xQw"
328- let bC = addressFromStringValue(bB)
329- let bD = assetBalance(bC, at)
330- let bE = assetBalance(bC, ay)
331- let bF = fraction((bD * 100), ap, bE)
332- let bG = bE
333- let bH = "3PJ48P3p2wvWUjgQaQiZ2cFbr8qmxMokBGd"
334- let bI = addressFromStringValue(bH)
335- let bJ = g(invoke(as, "calcGetAmountCPMM", [bH, "3P88qk1KzF1BKjD7fC7LjNVAKM4ezff5WE6", ax, 100000000], nil))
336- let bK = fraction(bJ, ap, 1000000)
337- let bL = getIntegerValue(bI, "A_asset_balance")
338- let bM = ((bA + bG) + bL)
339- let bN = ((fraction(bz, bA, bM) + fraction(bF, bG, bM)) + fraction(bK, bL, bM))
340- let bO = ((((((("xtnUsdPriceX6=" + toString(ap)) + " wx_ViresWaves_ViresUsdPriceX6=") + toString(bz)) + " wx_ViresXtn_ViresUsdPriceX6=") + toString(bF)) + " swop_ViresXtn_ViresUsdPriceX6=") + toString(bK))
341- $Tuple2(bN, bO)
320+func bu (bv) = {
321+ let bw = "E3YhURNsCmjUaYNigH6AayLxbh9u81uVGU3ZvHKznY5v"
322+ let bx = split(c(invoke(as, "poolStatsREADONLY", [bw], nil)), "__")
323+ let by = parseIntValue(bx[2])
324+ let bz = parseIntValue(bx[1])
325+ let bA = fraction(by, bv, bz)
326+ let bB = bz
327+ let bC = "3P5HjPowgipiVB3UvXphDiPvKs424WC9xQw"
328+ let bD = addressFromStringValue(bC)
329+ let bE = assetBalance(bD, au)
330+ let bF = assetBalance(bD, az)
331+ let bG = fraction((bE * 100), aq, bF)
332+ let bH = bF
333+ let bI = "3PJ48P3p2wvWUjgQaQiZ2cFbr8qmxMokBGd"
334+ let bJ = addressFromStringValue(bI)
335+ let bK = g(invoke(at, "calcGetAmountCPMM", [bI, "3P88qk1KzF1BKjD7fC7LjNVAKM4ezff5WE6", ay, 100000000], nil))
336+ let bL = fraction(bK, aq, 1000000)
337+ let bM = getIntegerValue(bJ, "A_asset_balance")
338+ let bN = ((bB + bH) + bM)
339+ let bO = ((fraction(bA, bB, bN) + fraction(bG, bH, bN)) + fraction(bL, bM, bN))
340+ let bP = ((((((("xtnUsdPriceX6=" + toString(aq)) + " wx_ViresWaves_ViresUsdPriceX6=") + toString(bA)) + " wx_ViresXtn_ViresUsdPriceX6=") + toString(bG)) + " swop_ViresXtn_ViresUsdPriceX6=") + toString(bL))
341+ $Tuple2(bO, bP)
342342 }
343343
344344
345-func bP (bu) = {
346- let bQ = "BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe"
347- let bw = split(c(invoke(ar, "poolStatsREADONLY", [bQ], nil)), "__")
348- let bR = 50000
349- let bS = parseIntValue(bw[2])
350- let bT = parseIntValue(bw[1])
351- let bU = fraction(bS, bu, bT)
352- let bV = "3PCENpEKe8atwELZ7oCSmcdEfcRuKTrUx99"
353- let bW = addressFromStringValue(bV)
354- let bX = 50000
355- let bY = assetBalance(bW, at)
356- let bZ = assetBalance(bW, aw)
357- let ca = fraction((bY * 100), ap, bZ)
358- let cb = "3PKi4G3VX2k42ZSmNNrmvgdDH7JzRaUhY7R"
359- let cc = 5000
360- let cd = g(invoke(as, "calcGetAmountCPMM", [cb, "3P88qk1KzF1BKjD7fC7LjNVAKM4ezff5WE6", av, 100000000], nil))
361- let ce = fraction(cd, ap, 1000000)
362- let bM = ((bR + bX) + cc)
363- let cf = ((fraction(bU, bR, bM) + fraction(ca, bX, bM)) + fraction(ce, cc, bM))
364- let bO = ((((((("xtnUsdPriceX6=" + toString(ap)) + " wx_WxWaves_WxUsdPriceX6=") + toString(bU)) + " wx_WxXtn_WxUsdPriceX6=") + toString(ca)) + " swop_WxXtn_WxUsdPriceX6=") + toString(ce))
365- $Tuple2(cf, bO)
345+func bQ (bv) = {
346+ let bR = "BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe"
347+ let bx = split(c(invoke(as, "poolStatsREADONLY", [bR], nil)), "__")
348+ let bS = 50000
349+ let bT = parseIntValue(bx[2])
350+ let bU = parseIntValue(bx[1])
351+ let bV = fraction(bT, bv, bU)
352+ let bW = "3PCENpEKe8atwELZ7oCSmcdEfcRuKTrUx99"
353+ let bX = addressFromStringValue(bW)
354+ let bY = 50000
355+ let bZ = assetBalance(bX, au)
356+ let ca = assetBalance(bX, ax)
357+ let cb = fraction((bZ * 100), aq, ca)
358+ let cc = "3PKi4G3VX2k42ZSmNNrmvgdDH7JzRaUhY7R"
359+ let cd = 5000
360+ let ce = g(invoke(at, "calcGetAmountCPMM", [cc, "3P88qk1KzF1BKjD7fC7LjNVAKM4ezff5WE6", aw, 100000000], nil))
361+ let cf = fraction(ce, aq, 1000000)
362+ let bN = ((bS + bY) + cd)
363+ let cg = ((fraction(bV, bS, bN) + fraction(cb, bY, bN)) + fraction(cf, cd, bN))
364+ let bP = ((((((("xtnUsdPriceX6=" + toString(aq)) + " wx_WxWaves_WxUsdPriceX6=") + toString(bV)) + " wx_WxXtn_WxUsdPriceX6=") + toString(cb)) + " swop_WxXtn_WxUsdPriceX6=") + toString(cf))
365+ $Tuple2(cg, bP)
366366 }
367367
368368
369369 @Callable(h)
370-func constructorV1 (y,z,A,B,C,D,E,F,G,H,I,J,K,L) = if ((h.caller != this))
370+func constructorV1 (y,z,A,B,C,D,E,F,G,H,I,J,K,L,M) = if ((h.caller != this))
371371 then throw("permissions denied")
372- else [StringEntry(w(), x(y, z, A, B, C, D, E, F, G, H, I, J, K, L))]
372+ else [StringEntry(w(), x(y, z, A, B, C, D, E, F, G, H, I, J, K, L, M))]
373373
374374
375375
376376 @Callable(h)
377-func callEmergencyShutdown (cg) = {
378- let ch = "3P7ihFVxBNbHK237TNdPxT1xHEu8pHexXTr"
379- let ci = toString(h.caller)
380- if (if ((ch != ci))
381- then (toString(K) != ci)
377+func callEmergencyShutdown (ch) = {
378+ let ci = "3P7ihFVxBNbHK237TNdPxT1xHEu8pHexXTr"
379+ let cj = toString(h.caller)
380+ if (if ((ci != cj))
381+ then (toString(K) != cj)
382382 else false)
383383 then throw("caller must be one an emergency oracle or Governance contract")
384- else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", ci), StringEntry("is_blocked_reason", cg)]
384+ else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", cj), StringEntry("is_blocked_reason", ch)]
385385 }
386386
387387
388388
389389 @Callable(h)
390-func finalizeCurrentPrice (cj,ck,cl,cm,cn,co,cp,cq,cr,cs) = if (W)
390+func finalizeCurrentPrice (ck,cl,cm,cn,co,cp,cq,cr,cs,ct) = if (X)
391391 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
392392 else if ((valueOrElse(getInteger(this, ("price_" + toString(height))), 0) != 0))
393393 then throw("wait next block")
394- else if ((Z[(height % 5)] != toBase58String(h.callerPublicKey)))
395- then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + Z[(height % 5)]))
394+ else if ((aa[(height % 5)] != toBase58String(h.callerPublicKey)))
395+ then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + aa[(height % 5)]))
396396 else {
397- let aA = [if (sigVerify_8Kb(bj(cj), ck, fromBase58String(Z[0])))
398- then cj
399- else 0, if (sigVerify_8Kb(bj(cl), cm, fromBase58String(Z[1])))
400- then cl
401- else 0, if (sigVerify_8Kb(bj(cn), co, fromBase58String(Z[2])))
402- then cn
403- else 0, if (sigVerify_8Kb(bj(cp), cq, fromBase58String(Z[3])))
404- then cp
405- else 0, if (sigVerify_8Kb(bj(cr), cs, fromBase58String(Z[4])))
406- then cr
397+ let aB = [if (sigVerify_8Kb(bk(ck), cl, fromBase58String(aa[0])))
398+ then ck
399+ else 0, if (sigVerify_8Kb(bk(cm), cn, fromBase58String(aa[1])))
400+ then cm
401+ else 0, if (sigVerify_8Kb(bk(co), cp, fromBase58String(aa[2])))
402+ then co
403+ else 0, if (sigVerify_8Kb(bk(cq), cr, fromBase58String(aa[3])))
404+ then cq
405+ else 0, if (sigVerify_8Kb(bk(cs), ct, fromBase58String(aa[4])))
406+ then cs
407407 else 0]
408- let ct = if ((aA[0] == 0))
408+ let cu = if ((aB[0] == 0))
409409 then 1
410- else (0 + (if ((aA[1] == 0))
410+ else (0 + (if ((aB[1] == 0))
411411 then 1
412- else (0 + (if ((aA[2] == 0))
412+ else (0 + (if ((aB[2] == 0))
413413 then 1
414- else (0 + (if ((aA[3] == 0))
414+ else (0 + (if ((aB[3] == 0))
415415 then 1
416- else (0 + (if ((aA[4] == 0))
416+ else (0 + (if ((aB[4] == 0))
417417 then 1
418418 else 0))))))))
419- if ((ct >= 3))
419+ if ((cu >= 3))
420420 then throw("3 prices or more are equals to 0")
421421 else {
422- let cu = az(aA)
423- let cv = size(cu)
424- if ((3 > cv))
422+ let cv = aA(aB)
423+ let cw = size(cv)
424+ if ((3 > cw))
425425 then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
426-") + Z[0]) + "=") + toString(aA[0])) + "
427-") + Z[1]) + "=") + toString(aA[1])) + "
428-") + Z[2]) + "=") + toString(aA[2])) + "
429-") + Z[3]) + "=") + toString(aA[3])) + "
430-") + Z[4]) + "=") + toString(aA[4])))
426+") + aa[0]) + "=") + toString(aB[0])) + "
427+") + aa[1]) + "=") + toString(aB[1])) + "
428+") + aa[2]) + "=") + toString(aB[2])) + "
429+") + aa[3]) + "=") + toString(aB[3])) + "
430+") + aa[4]) + "=") + toString(aB[4])))
431431 else {
432- let cw = ((aA[cu[0]] + aA[cu[1]]) + aA[cu[2]])
433- let cx = if ((cv >= 4))
434- then (cw + aA[cu[3]])
435- else cw
436- let cy = if ((cv >= 5))
437- then (cx + aA[cu[4]])
432+ let cx = ((aB[cv[0]] + aB[cv[1]]) + aB[cv[2]])
433+ let cy = if ((cw >= 4))
434+ then (cx + aB[cv[3]])
438435 else cx
439- if ((cv >= 6))
436+ let cz = if ((cw >= 5))
437+ then (cy + aB[cv[4]])
438+ else cy
439+ if ((cw >= 6))
440440 then throw("Invalid pricesInRange creation")
441441 else {
442- let bl = (cy / cv)
443- let cz = bP(bl)
444- let cA = cz._1
445- let cB = cz._2
446- let cC = bt(bl)
447- let cD = cC._1
448- let cE = cC._2
449- if (if ((bl >= (O + ((O * X) / 100))))
442+ let bm = (cz / cw)
443+ let cA = bQ(bm)
444+ let cB = cA._1
445+ let cC = cA._2
446+ let cD = bu(bm)
447+ let cE = cD._1
448+ let cF = cD._2
449+ if (if ((bm >= (P + ((P * Y) / 100))))
450450 then true
451- else ((O - ((O * X) / 100)) >= bl))
451+ else ((P - ((P * Y) / 100)) >= bm))
452452 then {
453- let cg = "automatic emergency shutdown because of large price variability"
454-[BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", toString(this)), StringEntry("is_blocked_reason", cg), IntegerEntry((("black_swarm_price" + "_") + toString(height)), bl)]
453+ let ch = "automatic emergency shutdown because of large price variability"
454+[BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", toString(this)), StringEntry("is_blocked_reason", ch), IntegerEntry((("black_swarm_price" + "_") + toString(height)), bm)]
455455 }
456456 else {
457- let bn = (V + 1)
458- ((((([IntegerEntry("price", bl), IntegerEntry(("price_" + toString(height)), bl), IntegerEntry(("price_index_" + toString(bn)), height), IntegerEntry("price_index", bn), IntegerEntry(("indexByHeight_" + toString(height)), bn), IntegerEntry(("priceByIndex_" + toString(bn)), bl), IntegerEntry(("deficit_" + toString(height)), am), IntegerEntry(("neutrinoSupply_" + toString(height)), al), IntegerEntry(("deficit_percent_" + toString(height)), if ((al != 0))
459- then ((am * 100) / al)
460- else 0)] ++ bk(bl, "WAVES", bn)) ++ bk(cA, av, bn)) ++ bk(cD, ax, bn)) :+ StringEntry("debug_wxUsdCalc", cB)) :+ StringEntry("debug_viresUsdCalc", cE))
457+ let bo = (W + 1)
458+ ((((([IntegerEntry("price", bm), IntegerEntry(("price_" + toString(height)), bm), IntegerEntry(("price_index_" + toString(bo)), height), IntegerEntry("price_index", bo), IntegerEntry(("indexByHeight_" + toString(height)), bo), IntegerEntry(("priceByIndex_" + toString(bo)), bm), IntegerEntry(("deficit_" + toString(height)), an), IntegerEntry(("neutrinoSupply_" + toString(height)), am), IntegerEntry(("deficit_percent_" + toString(height)), if ((am != 0))
459+ then ((an * 100) / am)
460+ else 0)] ++ bl(bm, "WAVES", bo)) ++ bl(cB, aw, bo)) ++ bl(cE, ay, bo)) :+ StringEntry("debug_wxUsdCalc", cC)) :+ StringEntry("debug_viresUsdCalc", cF))
461461 }
462462 }
463463 }
465465 }
466466
467467
468-@Verifier(cF)
469-func cG () = {
470- let cH = makeString(["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "EYwZmURd5KKaQRBjsVa6g8DPisFoS6SovRJtFiL5gMHU", "DtmAfuDdCrHK8spdAeAYzq6MsZegeD9gnsrpuTRkCbVA", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], b)
471- let cI = split(valueOrElse(getString(ad, "%s__multisig"), cH), b)
472- let cJ = ((((if (sigVerify(cF.bodyBytes, cF.proofs[0], fromBase58String(cI[0])))
468+
469+@Callable(h)
470+func validatePrice (cG,cH,bn) = $Tuple2(nil, true)
471+
472+
473+@Verifier(cI)
474+func cJ () = {
475+ let cK = makeString(["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "EYwZmURd5KKaQRBjsVa6g8DPisFoS6SovRJtFiL5gMHU", "DtmAfuDdCrHK8spdAeAYzq6MsZegeD9gnsrpuTRkCbVA", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], b)
476+ let cL = split(valueOrElse(getString(ae, "%s__multisig"), cK), b)
477+ let cM = ((((if (sigVerify(cI.bodyBytes, cI.proofs[0], fromBase58String(cL[0])))
473478 then 1
474- else 0) + (if (sigVerify(cF.bodyBytes, cF.proofs[1], fromBase58String(cI[1])))
479+ else 0) + (if (sigVerify(cI.bodyBytes, cI.proofs[1], fromBase58String(cL[1])))
475480 then 1
476- else 0)) + (if (sigVerify(cF.bodyBytes, cF.proofs[2], fromBase58String(cI[2])))
481+ else 0)) + (if (sigVerify(cI.bodyBytes, cI.proofs[2], fromBase58String(cL[2])))
477482 then 1
478- else 0)) + (if (sigVerify(cF.bodyBytes, cF.proofs[3], fromBase58String(cI[3])))
483+ else 0)) + (if (sigVerify(cI.bodyBytes, cI.proofs[3], fromBase58String(cL[3])))
479484 then 2
480485 else 0))
481- (cJ >= 3)
486+ (cM >= 3)
482487 }
483488
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "a599418b70818d5e4ae2447b4bf335a65c8214b9"
4+let a = ""
55
66 let b = "__"
77
88 func c (d) = {
99 let e = d
1010 if ($isInstanceOf(e, "String"))
1111 then {
1212 let f = e
1313 f
1414 }
1515 else throw("fail to cast into String")
1616 }
1717
1818
1919 func g (d) = {
2020 let e = d
2121 if ($isInstanceOf(e, "Int"))
2222 then {
2323 let h = e
2424 h
2525 }
2626 else throw("fail to cast into Int")
2727 }
2828
2929
3030 let i = 1
3131
3232 let j = 2
3333
3434 let k = 3
3535
3636 let l = 4
3737
3838 let m = 5
3939
4040 let n = 6
4141
4242 let o = 7
4343
4444 let p = 8
4545
4646 let q = 9
4747
4848 let r = 10
4949
5050 let s = 11
5151
5252 let t = 12
5353
5454 let u = 13
5555
5656 let v = 14
5757
5858 func w () = "%s__controlConfig"
5959
6060
61-func x (y,z,A,B,C,D,E,F,G,H,I,J,K,L) = makeString(["%s%s%s%s%s%s%s%s%s%s%s%s%s%s", y, z, A, B, C, D, E, F, G, H, I, J, K, L], b)
61+func x (y,z,A,B,C,D,E,F,G,H,I,J,K,L,M) = makeString_2C(["%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", y, z, A, B, C, D, E, F, G, H, I, J, K, L, M], b)
6262
6363
64-func M (N,O) = fraction(fraction(N, O, 1000000), 1000000, 100000000)
64+func N (O,P) = fraction(fraction(O, P, 1000000), 1000000, 100000000)
6565
6666
67-func P (Q,R) = valueOrElse(getInteger(addressFromStringValue(Q), R), 0)
67+func Q (R,S) = valueOrElse(getInteger(addressFromStringValue(R), S), 0)
6868
6969
70-func S (Q,R) = valueOrElse(getString(Q, R), "")
70+func T (R,S) = valueOrElse(getString(R, S), "")
7171
7272
73-func T (U) = split(U, ",")
73+func U (V) = split(V, ",")
7474
7575
76-let O = valueOrElse(getInteger(this, "price"), 0)
76+let P = valueOrElse(getInteger(this, "price"), 0)
7777
78-let V = valueOrElse(getInteger(this, "price_index"), 0)
78+let W = valueOrElse(getInteger(this, "price_index"), 0)
7979
80-let W = valueOrElse(getBoolean(this, "is_blocked"), false)
80+let X = valueOrElse(getBoolean(this, "is_blocked"), false)
8181
82-let X = 7
82+let Y = 7
8383
84-let Y = valueOrElse(getString(this, "oracles"), "")
84+let Z = valueOrElse(getString(this, "oracles"), "")
8585
86-let Z = T(Y)
86+let aa = U(Z)
8787
88-let aa = Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo')
88+let ab = Address(base58'3PC9BfRwJWWiw9AREE2B3eWzCks3CYtg4yo')
8989
90-let ab = Address(base58'3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7')
90+let ac = Address(base58'3P4PCxsJqMzQBALo8zANHtBDZRRquobHQp7')
9191
92-let ac = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
92+let ad = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9393
94-let ad = this
94+let ae = this
9595
96-func ae (Q,R) = valueOrErrorMessage(getString(Q, R), makeString(["mandatory ", toString(Q), ".", R, " is not defined"], ""))
96+func af (R,S) = valueOrErrorMessage(getString(R, S), makeString(["mandatory ", toString(R), ".", S, " is not defined"], ""))
9797
9898
99-func af (ag,ah) = valueOrErrorMessage(addressFromString(ag[ah]), ("Control cfg doesn't contain address at index " + toString(ah)))
99+func ag (ah,ai) = valueOrErrorMessage(addressFromString(ah[ai]), ("Control cfg doesn't contain address at index " + toString(ai)))
100100
101101
102-let ag = split_4C(ae(this, w()), b)
102+let ah = split_4C(af(this, w()), b)
103103
104-let K = af(ag, u)
104+let K = ag(ah, u)
105105
106-let ai = valueOrElse(getInteger(aa, "balance_lock_neutrino"), 0)
106+let aj = valueOrElse(getInteger(ab, "balance_lock_neutrino"), 0)
107107
108-let aj = valueOrElse(getInteger(aa, "balance_lock_waves"), 0)
108+let ak = valueOrElse(getInteger(ab, "balance_lock_waves"), 0)
109109
110-let ak = (wavesBalance(aa).regular - aj)
110+let al = (wavesBalance(ab).regular - ak)
111111
112-let al = (((ai + value(assetInfo(ac)).quantity) - assetBalance(aa, ac)) - assetBalance(ab, ac))
112+let am = (((aj + value(assetInfo(ad)).quantity) - assetBalance(ab, ad)) - assetBalance(ac, ad))
113113
114-let am = (al - M(ak, O))
114+let an = (am - N(al, P))
115115
116-let an = "3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF"
116+let ao = "3PKkojKdd6BBzTf1RXbQVfUDraNFXXHKzQF"
117117
118-let ao = addressFromStringValue(an)
118+let ap = addressFromStringValue(ao)
119119
120-let ap = valueOrErrorMessage(getInteger(ao, "%s%s__price__USDN-USDT"), "DORA doesn't contain USDN/USDT price")
120+let aq = valueOrErrorMessage(getInteger(ap, "%s%s__price__USDN-USDT"), "DORA doesn't contain USDN/USDT price")
121121
122-let aq = "3P8MoPnsaurofk1VyhsdAFkeQ6ijpJYXCpW"
122+let ar = "3P8MoPnsaurofk1VyhsdAFkeQ6ijpJYXCpW"
123123
124-let ar = addressFromStringValue(aq)
124+let as = addressFromStringValue(ar)
125125
126-let as = addressFromStringValue("3P56jNQzECXnrWpnbbSJKw7Eooo6fkUaMPp")
126+let at = addressFromStringValue("3P56jNQzECXnrWpnbbSJKw7Eooo6fkUaMPp")
127127
128-let at = ac
128+let au = ad
129129
130-let au = toBase58String(at)
130+let av = toBase58String(au)
131131
132-let av = "Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on"
132+let aw = "Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on"
133133
134-let aw = fromBase58String(av)
134+let ax = fromBase58String(aw)
135135
136-let ax = "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p"
136+let ay = "DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p"
137137
138-let ay = fromBase58String(ax)
138+let az = fromBase58String(ay)
139139
140-func az (aA) = {
141- let aB = 90
142- let aC = 110
143- let aD = aA[0]
144- let aE = if ((0 >= aA[0]))
140+func aA (aB) = {
141+ let aC = 90
142+ let aD = 110
143+ let aE = aB[0]
144+ let aF = if ((0 >= aB[0]))
145145 then [0]
146146 else {
147- let aF = ((aA[1] * 100) / aD)
148- let aG = ((aA[2] * 100) / aD)
149- let aH = ((aA[3] * 100) / aD)
150- let aI = ((aA[4] * 100) / aD)
151- let aJ = if (if ((aC > aF))
152- then (aF > aB)
147+ let aG = ((aB[1] * 100) / aE)
148+ let aH = ((aB[2] * 100) / aE)
149+ let aI = ((aB[3] * 100) / aE)
150+ let aJ = ((aB[4] * 100) / aE)
151+ let aK = if (if ((aD > aG))
152+ then (aG > aC)
153153 else false)
154154 then [1, 0]
155155 else [0]
156- let aK = if (if ((aC > aG))
157- then (aG > aB)
156+ let aL = if (if ((aD > aH))
157+ then (aH > aC)
158158 else false)
159- then 2 :: aJ
160- else aJ
161- let aL = if (if ((aC > aH))
162- then (aH > aB)
159+ then 2 :: aK
160+ else aK
161+ let aM = if (if ((aD > aI))
162+ then (aI > aC)
163163 else false)
164- then 3 :: aK
165- else aK
166- if (if ((aC > aI))
167- then (aI > aB)
164+ then 3 :: aL
165+ else aL
166+ if (if ((aD > aJ))
167+ then (aJ > aC)
168168 else false)
169- then 4 :: aL
170- else aL
169+ then 4 :: aM
170+ else aM
171171 }
172- let aM = if ((size(aE) >= 3))
173- then aE
172+ let aN = if ((size(aF) >= 3))
173+ then aF
174174 else {
175- let aN = aA[1]
176- if ((0 >= aN))
175+ let aO = aB[1]
176+ if ((0 >= aO))
177177 then [1]
178178 else {
179- let aO = ((aA[0] * 100) / aN)
180- let aP = ((aA[2] * 100) / aN)
181- let aQ = ((aA[3] * 100) / aN)
182- let aR = ((aA[4] * 100) / aN)
183- let aJ = if (if ((aC > aO))
184- then (aO > aB)
179+ let aP = ((aB[0] * 100) / aO)
180+ let aQ = ((aB[2] * 100) / aO)
181+ let aR = ((aB[3] * 100) / aO)
182+ let aS = ((aB[4] * 100) / aO)
183+ let aK = if (if ((aD > aP))
184+ then (aP > aC)
185185 else false)
186186 then [0, 1]
187187 else [1]
188- let aK = if (if ((aC > aP))
189- then (aP > aB)
188+ let aL = if (if ((aD > aQ))
189+ then (aQ > aC)
190190 else false)
191- then 2 :: aJ
192- else aJ
193- let aL = if (if ((aC > aQ))
194- then (aQ > aB)
191+ then 2 :: aK
192+ else aK
193+ let aM = if (if ((aD > aR))
194+ then (aR > aC)
195195 else false)
196- then 3 :: aK
197- else aK
198- if (if ((aC > aR))
199- then (aR > aB)
196+ then 3 :: aL
197+ else aL
198+ if (if ((aD > aS))
199+ then (aS > aC)
200200 else false)
201- then 4 :: aL
202- else aL
201+ then 4 :: aM
202+ else aM
203203 }
204204 }
205- let aS = if ((size(aM) >= 3))
206- then aM
205+ let aT = if ((size(aN) >= 3))
206+ then aN
207207 else {
208- let aT = aA[2]
209- if ((0 >= aT))
208+ let aU = aB[2]
209+ if ((0 >= aU))
210210 then [2]
211211 else {
212- let aU = ((aA[0] * 100) / aT)
213- let aV = ((aA[1] * 100) / aT)
214- let aW = ((aA[3] * 100) / aT)
215- let aX = ((aA[4] * 100) / aT)
216- let aJ = if (if ((aC > aU))
217- then (aU > aB)
212+ let aV = ((aB[0] * 100) / aU)
213+ let aW = ((aB[1] * 100) / aU)
214+ let aX = ((aB[3] * 100) / aU)
215+ let aY = ((aB[4] * 100) / aU)
216+ let aK = if (if ((aD > aV))
217+ then (aV > aC)
218218 else false)
219219 then [0, 2]
220220 else [2]
221- let aK = if (if ((aC > aV))
222- then (aV > aB)
221+ let aL = if (if ((aD > aW))
222+ then (aW > aC)
223223 else false)
224- then 1 :: aJ
225- else aJ
226- let aL = if (if ((aC > aW))
227- then (aW > aB)
224+ then 1 :: aK
225+ else aK
226+ let aM = if (if ((aD > aX))
227+ then (aX > aC)
228228 else false)
229- then 3 :: aK
230- else aK
231- if (if ((aC > aX))
232- then (aX > aB)
229+ then 3 :: aL
230+ else aL
231+ if (if ((aD > aY))
232+ then (aY > aC)
233233 else false)
234- then 4 :: aL
235- else aL
234+ then 4 :: aM
235+ else aM
236236 }
237237 }
238- let aY = if ((size(aS) >= 3))
239- then aS
238+ let aZ = if ((size(aT) >= 3))
239+ then aT
240240 else {
241- let aZ = aA[3]
242- if ((0 >= aZ))
241+ let ba = aB[3]
242+ if ((0 >= ba))
243243 then [3]
244244 else {
245- let ba = ((aA[0] * 100) / aZ)
246- let bb = ((aA[1] * 100) / aZ)
247- let bc = ((aA[2] * 100) / aZ)
248- let bd = ((aA[4] * 100) / aZ)
249- let aJ = if (if ((aC > ba))
250- then (ba > aB)
245+ let bb = ((aB[0] * 100) / ba)
246+ let bc = ((aB[1] * 100) / ba)
247+ let bd = ((aB[2] * 100) / ba)
248+ let be = ((aB[4] * 100) / ba)
249+ let aK = if (if ((aD > bb))
250+ then (bb > aC)
251251 else false)
252252 then [0, 3]
253253 else [3]
254- let aK = if (if ((aC > bb))
255- then (bb > aB)
254+ let aL = if (if ((aD > bc))
255+ then (bc > aC)
256256 else false)
257- then 1 :: aJ
258- else aJ
259- let aL = if (if ((aC > bc))
260- then (bc > aB)
257+ then 1 :: aK
258+ else aK
259+ let aM = if (if ((aD > bd))
260+ then (bd > aC)
261261 else false)
262- then 2 :: aK
263- else aK
264- if (if ((aC > bd))
265- then (bd > aB)
262+ then 2 :: aL
263+ else aL
264+ if (if ((aD > be))
265+ then (be > aC)
266266 else false)
267- then 4 :: aL
268- else aL
267+ then 4 :: aM
268+ else aM
269269 }
270270 }
271- if ((size(aY) >= 3))
272- then aY
271+ if ((size(aZ) >= 3))
272+ then aZ
273273 else {
274- let be = aA[4]
275- if ((0 >= be))
274+ let bf = aB[4]
275+ if ((0 >= bf))
276276 then [4]
277277 else {
278- let bf = ((aA[0] * 100) / be)
279- let bg = ((aA[1] * 100) / be)
280- let bh = ((aA[2] * 100) / be)
281- let bi = ((aA[3] * 100) / be)
282- let aJ = if (if ((aC > bf))
283- then (bf > aB)
278+ let bg = ((aB[0] * 100) / bf)
279+ let bh = ((aB[1] * 100) / bf)
280+ let bi = ((aB[2] * 100) / bf)
281+ let bj = ((aB[3] * 100) / bf)
282+ let aK = if (if ((aD > bg))
283+ then (bg > aC)
284284 else false)
285285 then [0, 4]
286286 else [4]
287- let aK = if (if ((aC > bg))
288- then (bg > aB)
287+ let aL = if (if ((aD > bh))
288+ then (bh > aC)
289289 else false)
290- then 1 :: aJ
291- else aJ
292- let aL = if (if ((aC > bh))
293- then (bh > aB)
290+ then 1 :: aK
291+ else aK
292+ let aM = if (if ((aD > bi))
293+ then (bi > aC)
294294 else false)
295- then 2 :: aK
296- else aK
297- if (if ((aC > bi))
298- then (bi > aB)
295+ then 2 :: aL
296+ else aL
297+ if (if ((aD > bj))
298+ then (bj > aC)
299299 else false)
300- then 3 :: aL
301- else aL
300+ then 3 :: aM
301+ else aM
302302 }
303303 }
304304 }
305305
306306
307-func bj (O) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(O)))
307+func bk (P) = toBytes((((("WAVESNEUTRINOPREFIX" + "_") + toString(height)) + "_") + toString(P)))
308308
309309
310-func bk (bl,bm,bn) = {
311- let bo = toString(height)
312- let bp = toString(bn)
313- let bq = makeString(["%s%s%s__common__priceByAsset", bm], b)
314- let br = makeString(["%s%s%s%d__common__priceByHeight", bm, bo], b)
315- let bs = makeString(["%s%s%s%d__common__priceByIndex", bm, bp], b)
316-[IntegerEntry(bq, bl), IntegerEntry(bs, bl), IntegerEntry(br, bl)]
310+func bl (bm,bn,bo) = {
311+ let bp = toString(height)
312+ let bq = toString(bo)
313+ let br = makeString(["%s%s%s__common__priceByAsset", bn], b)
314+ let bs = makeString(["%s%s%s%d__common__priceByHeight", bn, bp], b)
315+ let bt = makeString(["%s%s%s%d__common__priceByIndex", bn, bq], b)
316+[IntegerEntry(br, bm), IntegerEntry(bt, bm), IntegerEntry(bs, bm)]
317317 }
318318
319319
320-func bt (bu) = {
321- let bv = "E3YhURNsCmjUaYNigH6AayLxbh9u81uVGU3ZvHKznY5v"
322- let bw = split(c(invoke(ar, "poolStatsREADONLY", [bv], nil)), "__")
323- let bx = parseIntValue(bw[2])
324- let by = parseIntValue(bw[1])
325- let bz = fraction(bx, bu, by)
326- let bA = by
327- let bB = "3P5HjPowgipiVB3UvXphDiPvKs424WC9xQw"
328- let bC = addressFromStringValue(bB)
329- let bD = assetBalance(bC, at)
330- let bE = assetBalance(bC, ay)
331- let bF = fraction((bD * 100), ap, bE)
332- let bG = bE
333- let bH = "3PJ48P3p2wvWUjgQaQiZ2cFbr8qmxMokBGd"
334- let bI = addressFromStringValue(bH)
335- let bJ = g(invoke(as, "calcGetAmountCPMM", [bH, "3P88qk1KzF1BKjD7fC7LjNVAKM4ezff5WE6", ax, 100000000], nil))
336- let bK = fraction(bJ, ap, 1000000)
337- let bL = getIntegerValue(bI, "A_asset_balance")
338- let bM = ((bA + bG) + bL)
339- let bN = ((fraction(bz, bA, bM) + fraction(bF, bG, bM)) + fraction(bK, bL, bM))
340- let bO = ((((((("xtnUsdPriceX6=" + toString(ap)) + " wx_ViresWaves_ViresUsdPriceX6=") + toString(bz)) + " wx_ViresXtn_ViresUsdPriceX6=") + toString(bF)) + " swop_ViresXtn_ViresUsdPriceX6=") + toString(bK))
341- $Tuple2(bN, bO)
320+func bu (bv) = {
321+ let bw = "E3YhURNsCmjUaYNigH6AayLxbh9u81uVGU3ZvHKznY5v"
322+ let bx = split(c(invoke(as, "poolStatsREADONLY", [bw], nil)), "__")
323+ let by = parseIntValue(bx[2])
324+ let bz = parseIntValue(bx[1])
325+ let bA = fraction(by, bv, bz)
326+ let bB = bz
327+ let bC = "3P5HjPowgipiVB3UvXphDiPvKs424WC9xQw"
328+ let bD = addressFromStringValue(bC)
329+ let bE = assetBalance(bD, au)
330+ let bF = assetBalance(bD, az)
331+ let bG = fraction((bE * 100), aq, bF)
332+ let bH = bF
333+ let bI = "3PJ48P3p2wvWUjgQaQiZ2cFbr8qmxMokBGd"
334+ let bJ = addressFromStringValue(bI)
335+ let bK = g(invoke(at, "calcGetAmountCPMM", [bI, "3P88qk1KzF1BKjD7fC7LjNVAKM4ezff5WE6", ay, 100000000], nil))
336+ let bL = fraction(bK, aq, 1000000)
337+ let bM = getIntegerValue(bJ, "A_asset_balance")
338+ let bN = ((bB + bH) + bM)
339+ let bO = ((fraction(bA, bB, bN) + fraction(bG, bH, bN)) + fraction(bL, bM, bN))
340+ let bP = ((((((("xtnUsdPriceX6=" + toString(aq)) + " wx_ViresWaves_ViresUsdPriceX6=") + toString(bA)) + " wx_ViresXtn_ViresUsdPriceX6=") + toString(bG)) + " swop_ViresXtn_ViresUsdPriceX6=") + toString(bL))
341+ $Tuple2(bO, bP)
342342 }
343343
344344
345-func bP (bu) = {
346- let bQ = "BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe"
347- let bw = split(c(invoke(ar, "poolStatsREADONLY", [bQ], nil)), "__")
348- let bR = 50000
349- let bS = parseIntValue(bw[2])
350- let bT = parseIntValue(bw[1])
351- let bU = fraction(bS, bu, bT)
352- let bV = "3PCENpEKe8atwELZ7oCSmcdEfcRuKTrUx99"
353- let bW = addressFromStringValue(bV)
354- let bX = 50000
355- let bY = assetBalance(bW, at)
356- let bZ = assetBalance(bW, aw)
357- let ca = fraction((bY * 100), ap, bZ)
358- let cb = "3PKi4G3VX2k42ZSmNNrmvgdDH7JzRaUhY7R"
359- let cc = 5000
360- let cd = g(invoke(as, "calcGetAmountCPMM", [cb, "3P88qk1KzF1BKjD7fC7LjNVAKM4ezff5WE6", av, 100000000], nil))
361- let ce = fraction(cd, ap, 1000000)
362- let bM = ((bR + bX) + cc)
363- let cf = ((fraction(bU, bR, bM) + fraction(ca, bX, bM)) + fraction(ce, cc, bM))
364- let bO = ((((((("xtnUsdPriceX6=" + toString(ap)) + " wx_WxWaves_WxUsdPriceX6=") + toString(bU)) + " wx_WxXtn_WxUsdPriceX6=") + toString(ca)) + " swop_WxXtn_WxUsdPriceX6=") + toString(ce))
365- $Tuple2(cf, bO)
345+func bQ (bv) = {
346+ let bR = "BiSzFe8nSL78oZaebfoin5vBZ5Pze6d7kaeijLqr5xZe"
347+ let bx = split(c(invoke(as, "poolStatsREADONLY", [bR], nil)), "__")
348+ let bS = 50000
349+ let bT = parseIntValue(bx[2])
350+ let bU = parseIntValue(bx[1])
351+ let bV = fraction(bT, bv, bU)
352+ let bW = "3PCENpEKe8atwELZ7oCSmcdEfcRuKTrUx99"
353+ let bX = addressFromStringValue(bW)
354+ let bY = 50000
355+ let bZ = assetBalance(bX, au)
356+ let ca = assetBalance(bX, ax)
357+ let cb = fraction((bZ * 100), aq, ca)
358+ let cc = "3PKi4G3VX2k42ZSmNNrmvgdDH7JzRaUhY7R"
359+ let cd = 5000
360+ let ce = g(invoke(at, "calcGetAmountCPMM", [cc, "3P88qk1KzF1BKjD7fC7LjNVAKM4ezff5WE6", aw, 100000000], nil))
361+ let cf = fraction(ce, aq, 1000000)
362+ let bN = ((bS + bY) + cd)
363+ let cg = ((fraction(bV, bS, bN) + fraction(cb, bY, bN)) + fraction(cf, cd, bN))
364+ let bP = ((((((("xtnUsdPriceX6=" + toString(aq)) + " wx_WxWaves_WxUsdPriceX6=") + toString(bV)) + " wx_WxXtn_WxUsdPriceX6=") + toString(cb)) + " swop_WxXtn_WxUsdPriceX6=") + toString(cf))
365+ $Tuple2(cg, bP)
366366 }
367367
368368
369369 @Callable(h)
370-func constructorV1 (y,z,A,B,C,D,E,F,G,H,I,J,K,L) = if ((h.caller != this))
370+func constructorV1 (y,z,A,B,C,D,E,F,G,H,I,J,K,L,M) = if ((h.caller != this))
371371 then throw("permissions denied")
372- else [StringEntry(w(), x(y, z, A, B, C, D, E, F, G, H, I, J, K, L))]
372+ else [StringEntry(w(), x(y, z, A, B, C, D, E, F, G, H, I, J, K, L, M))]
373373
374374
375375
376376 @Callable(h)
377-func callEmergencyShutdown (cg) = {
378- let ch = "3P7ihFVxBNbHK237TNdPxT1xHEu8pHexXTr"
379- let ci = toString(h.caller)
380- if (if ((ch != ci))
381- then (toString(K) != ci)
377+func callEmergencyShutdown (ch) = {
378+ let ci = "3P7ihFVxBNbHK237TNdPxT1xHEu8pHexXTr"
379+ let cj = toString(h.caller)
380+ if (if ((ci != cj))
381+ then (toString(K) != cj)
382382 else false)
383383 then throw("caller must be one an emergency oracle or Governance contract")
384- else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", ci), StringEntry("is_blocked_reason", cg)]
384+ else [BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", cj), StringEntry("is_blocked_reason", ch)]
385385 }
386386
387387
388388
389389 @Callable(h)
390-func finalizeCurrentPrice (cj,ck,cl,cm,cn,co,cp,cq,cr,cs) = if (W)
390+func finalizeCurrentPrice (ck,cl,cm,cn,co,cp,cq,cr,cs,ct) = if (X)
391391 then throw("contract is blocked by EMERGENCY SHUTDOWN actions untill reactivation by emergency oracles")
392392 else if ((valueOrElse(getInteger(this, ("price_" + toString(height))), 0) != 0))
393393 then throw("wait next block")
394- else if ((Z[(height % 5)] != toBase58String(h.callerPublicKey)))
395- then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + Z[(height % 5)]))
394+ else if ((aa[(height % 5)] != toBase58String(h.callerPublicKey)))
395+ then throw(((("Out of turn finalization: " + toString(height)) + " block should be finalize by ") + aa[(height % 5)]))
396396 else {
397- let aA = [if (sigVerify_8Kb(bj(cj), ck, fromBase58String(Z[0])))
398- then cj
399- else 0, if (sigVerify_8Kb(bj(cl), cm, fromBase58String(Z[1])))
400- then cl
401- else 0, if (sigVerify_8Kb(bj(cn), co, fromBase58String(Z[2])))
402- then cn
403- else 0, if (sigVerify_8Kb(bj(cp), cq, fromBase58String(Z[3])))
404- then cp
405- else 0, if (sigVerify_8Kb(bj(cr), cs, fromBase58String(Z[4])))
406- then cr
397+ let aB = [if (sigVerify_8Kb(bk(ck), cl, fromBase58String(aa[0])))
398+ then ck
399+ else 0, if (sigVerify_8Kb(bk(cm), cn, fromBase58String(aa[1])))
400+ then cm
401+ else 0, if (sigVerify_8Kb(bk(co), cp, fromBase58String(aa[2])))
402+ then co
403+ else 0, if (sigVerify_8Kb(bk(cq), cr, fromBase58String(aa[3])))
404+ then cq
405+ else 0, if (sigVerify_8Kb(bk(cs), ct, fromBase58String(aa[4])))
406+ then cs
407407 else 0]
408- let ct = if ((aA[0] == 0))
408+ let cu = if ((aB[0] == 0))
409409 then 1
410- else (0 + (if ((aA[1] == 0))
410+ else (0 + (if ((aB[1] == 0))
411411 then 1
412- else (0 + (if ((aA[2] == 0))
412+ else (0 + (if ((aB[2] == 0))
413413 then 1
414- else (0 + (if ((aA[3] == 0))
414+ else (0 + (if ((aB[3] == 0))
415415 then 1
416- else (0 + (if ((aA[4] == 0))
416+ else (0 + (if ((aB[4] == 0))
417417 then 1
418418 else 0))))))))
419- if ((ct >= 3))
419+ if ((cu >= 3))
420420 then throw("3 prices or more are equals to 0")
421421 else {
422- let cu = az(aA)
423- let cv = size(cu)
424- if ((3 > cv))
422+ let cv = aA(aB)
423+ let cw = size(cv)
424+ if ((3 > cw))
425425 then throw(((((((((((((((((((((("Could not finalize price because of big variation: height=" + toString(height)) + "
426-") + Z[0]) + "=") + toString(aA[0])) + "
427-") + Z[1]) + "=") + toString(aA[1])) + "
428-") + Z[2]) + "=") + toString(aA[2])) + "
429-") + Z[3]) + "=") + toString(aA[3])) + "
430-") + Z[4]) + "=") + toString(aA[4])))
426+") + aa[0]) + "=") + toString(aB[0])) + "
427+") + aa[1]) + "=") + toString(aB[1])) + "
428+") + aa[2]) + "=") + toString(aB[2])) + "
429+") + aa[3]) + "=") + toString(aB[3])) + "
430+") + aa[4]) + "=") + toString(aB[4])))
431431 else {
432- let cw = ((aA[cu[0]] + aA[cu[1]]) + aA[cu[2]])
433- let cx = if ((cv >= 4))
434- then (cw + aA[cu[3]])
435- else cw
436- let cy = if ((cv >= 5))
437- then (cx + aA[cu[4]])
432+ let cx = ((aB[cv[0]] + aB[cv[1]]) + aB[cv[2]])
433+ let cy = if ((cw >= 4))
434+ then (cx + aB[cv[3]])
438435 else cx
439- if ((cv >= 6))
436+ let cz = if ((cw >= 5))
437+ then (cy + aB[cv[4]])
438+ else cy
439+ if ((cw >= 6))
440440 then throw("Invalid pricesInRange creation")
441441 else {
442- let bl = (cy / cv)
443- let cz = bP(bl)
444- let cA = cz._1
445- let cB = cz._2
446- let cC = bt(bl)
447- let cD = cC._1
448- let cE = cC._2
449- if (if ((bl >= (O + ((O * X) / 100))))
442+ let bm = (cz / cw)
443+ let cA = bQ(bm)
444+ let cB = cA._1
445+ let cC = cA._2
446+ let cD = bu(bm)
447+ let cE = cD._1
448+ let cF = cD._2
449+ if (if ((bm >= (P + ((P * Y) / 100))))
450450 then true
451- else ((O - ((O * X) / 100)) >= bl))
451+ else ((P - ((P * Y) / 100)) >= bm))
452452 then {
453- let cg = "automatic emergency shutdown because of large price variability"
454-[BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", toString(this)), StringEntry("is_blocked_reason", cg), IntegerEntry((("black_swarm_price" + "_") + toString(height)), bl)]
453+ let ch = "automatic emergency shutdown because of large price variability"
454+[BooleanEntry("is_blocked", true), StringEntry("is_blocked_caller", toString(this)), StringEntry("is_blocked_reason", ch), IntegerEntry((("black_swarm_price" + "_") + toString(height)), bm)]
455455 }
456456 else {
457- let bn = (V + 1)
458- ((((([IntegerEntry("price", bl), IntegerEntry(("price_" + toString(height)), bl), IntegerEntry(("price_index_" + toString(bn)), height), IntegerEntry("price_index", bn), IntegerEntry(("indexByHeight_" + toString(height)), bn), IntegerEntry(("priceByIndex_" + toString(bn)), bl), IntegerEntry(("deficit_" + toString(height)), am), IntegerEntry(("neutrinoSupply_" + toString(height)), al), IntegerEntry(("deficit_percent_" + toString(height)), if ((al != 0))
459- then ((am * 100) / al)
460- else 0)] ++ bk(bl, "WAVES", bn)) ++ bk(cA, av, bn)) ++ bk(cD, ax, bn)) :+ StringEntry("debug_wxUsdCalc", cB)) :+ StringEntry("debug_viresUsdCalc", cE))
457+ let bo = (W + 1)
458+ ((((([IntegerEntry("price", bm), IntegerEntry(("price_" + toString(height)), bm), IntegerEntry(("price_index_" + toString(bo)), height), IntegerEntry("price_index", bo), IntegerEntry(("indexByHeight_" + toString(height)), bo), IntegerEntry(("priceByIndex_" + toString(bo)), bm), IntegerEntry(("deficit_" + toString(height)), an), IntegerEntry(("neutrinoSupply_" + toString(height)), am), IntegerEntry(("deficit_percent_" + toString(height)), if ((am != 0))
459+ then ((an * 100) / am)
460+ else 0)] ++ bl(bm, "WAVES", bo)) ++ bl(cB, aw, bo)) ++ bl(cE, ay, bo)) :+ StringEntry("debug_wxUsdCalc", cC)) :+ StringEntry("debug_viresUsdCalc", cF))
461461 }
462462 }
463463 }
464464 }
465465 }
466466
467467
468-@Verifier(cF)
469-func cG () = {
470- let cH = makeString(["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "EYwZmURd5KKaQRBjsVa6g8DPisFoS6SovRJtFiL5gMHU", "DtmAfuDdCrHK8spdAeAYzq6MsZegeD9gnsrpuTRkCbVA", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], b)
471- let cI = split(valueOrElse(getString(ad, "%s__multisig"), cH), b)
472- let cJ = ((((if (sigVerify(cF.bodyBytes, cF.proofs[0], fromBase58String(cI[0])))
468+
469+@Callable(h)
470+func validatePrice (cG,cH,bn) = $Tuple2(nil, true)
471+
472+
473+@Verifier(cI)
474+func cJ () = {
475+ let cK = makeString(["GJdLSaLiv5K7xuejac8mcRcHoyo3dPrESrvktG3a6MAR", "EYwZmURd5KKaQRBjsVa6g8DPisFoS6SovRJtFiL5gMHU", "DtmAfuDdCrHK8spdAeAYzq6MsZegeD9gnsrpuTRkCbVA", "5WRXFSjwcTbNfKcJs8ZqXmSSWYsSVJUtMvMqZj5hH4Nc"], b)
476+ let cL = split(valueOrElse(getString(ae, "%s__multisig"), cK), b)
477+ let cM = ((((if (sigVerify(cI.bodyBytes, cI.proofs[0], fromBase58String(cL[0])))
473478 then 1
474- else 0) + (if (sigVerify(cF.bodyBytes, cF.proofs[1], fromBase58String(cI[1])))
479+ else 0) + (if (sigVerify(cI.bodyBytes, cI.proofs[1], fromBase58String(cL[1])))
475480 then 1
476- else 0)) + (if (sigVerify(cF.bodyBytes, cF.proofs[2], fromBase58String(cI[2])))
481+ else 0)) + (if (sigVerify(cI.bodyBytes, cI.proofs[2], fromBase58String(cL[2])))
477482 then 1
478- else 0)) + (if (sigVerify(cF.bodyBytes, cF.proofs[3], fromBase58String(cI[3])))
483+ else 0)) + (if (sigVerify(cI.bodyBytes, cI.proofs[3], fromBase58String(cL[3])))
479484 then 2
480485 else 0))
481- (cJ >= 3)
486+ (cM >= 3)
482487 }
483488

github/deemru/w8io/3ef1775 
185.55 ms