tx · FtVbtHUpfGTH4pLVAJ4KdP5b1u6wLqq7sxbT3LNwVDSy

3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn:  -0.02300000 Waves

2023.08.17 14:22 [2714528] smart account 3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn > SELF 0.00000000 Waves

{ "type": 13, "id": "FtVbtHUpfGTH4pLVAJ4KdP5b1u6wLqq7sxbT3LNwVDSy", "fee": 2300000, "feeAssetId": null, "timestamp": 1692271394823, "version": 2, "chainId": 84, "sender": "3N2M4PztorHwrfENp7D6LhYGgGodjiD1fjn", "senderPublicKey": "Fj9LPkCtmW3pDnVU6wPQnvqpZJCBieWSvZqY5FAGeCyp", "proofs": [ "2YKmoiidZ5TnLT6Hf73iZ2fUSoJUXUGQu5YVqCqzPzGz5Yk5HidHRGyhtcW6obEyaNLeS9taBJDAbHo13axnpMJN", "2tB7DWjutLpA7dXUCUEtrvUPRCggo4k7yH9oQxSWLG6GGT2Swf8AcggeKPu5yFfQ5bogYdKMsxhVxBgkheGz8GhT" ], "script": "base64:BgIhCAISABIAEgQKAggIEgMKAQgSBwoFCAgIAQESAwoBCBIAUQAGU0NBTEU4AIDC1y8AC0xFTkRFUlNfQVBSCQDMCAIAlgEJAMwIAgB4CQDMCAIAZAkAzAgCAFAJAMwIAgA8CQDMCAIAKAkAzAgCAB4JAMwIAgAUCQDMCAIACgUDbmlsABNMRU5ERVJTX0FQUl9QRVJJT0RTCQDMCAICAzEtMQkAzAgCAgMyLTIJAMwIAgIDMy0zCQDMCAICAzQtNAkAzAgCAgM1LTgJAMwIAgIEOS0xMgkAzAgCAgcxNCAtIDE2CQDMCAICBTE3LTIwCQDMCAICBjIwLTEwNAUDbmlsABNMRU5ERVJTX01BWF9QRVJJT0RTAGgABkxQX0FQUgkAzAgCAJYBCQDMCAIAeAkAzAgCAGQJAMwIAgBQCQDMCAIAPAkAzAgCACgFA25pbAAOTFBfQVBSX1BFUklPRFMJAMwIAgIDMS0xCQDMCAICAzItMgkAzAgCAgMzLTMJAMwIAgIDNC00CQDMCAICAzUtOAkAzAgCAgQ5LTEyBQNuaWwADkxQX01BWF9QRVJJT0RTAAwADGtTdGFydEhlaWdodAILc3RhcnRIZWlnaHQADWtQZXJpb2RMZW5ndGgCDHBlcmlvZExlbmd0aAARa0xlbmRlcnNNYXhBbW91bnQCEWxlbmRSZXdhcmRzQW1vdW50AAxrTFBNYXhBbW91bnQCDmxwUmV3YXJkQW1vdW50AAdrVG9rZW5zAgZ0b2tlbnMAC2tVc2VyU3VwcGx5AhBfdXNlclRvdGFsU3VwcGx5AA5rVG9rZW5JbnRlcmVzdAIOX3Rva2VuSW50ZXJlc3QAFGtUb2tlbkludGVyZXN0SGVpZ2h0AhRfdG9rZW5JbnRlcmVzdEhlaWdodAAUa1Rva2VuUmV3YXJkUGVyQmxvY2sCFF90b2tlblJld2FyZFBlckJsb2NrABNrUmV3YXJkVXBkYXRlSGVpZ2h0AhJyZXdhcmRVcGRhdGVIZWlnaHQAEWtVc2VyTGVuZEludGVyZXN0AhFfdXNlckxhbmRJbnRlcmVzdAAXa1VzZXJMZW5kQXZhaWxhYmxlQ2xhaW0CF191c2VyTGVuZEF2YWlsYWJsZUNsYWltABVrVXNlckxwQXZhaWxhYmxlQ2xhaW0CFV91c2VyTHBBdmFpbGFibGVDbGFpbQALa0xwSW50ZXJlc3QCCmxwSW50ZXJlc3QAEWtMcEludGVyZXN0SGVpZ2h0AhBscEludGVyZXN0SGVpZ2h0AA1rUHJldkxQU3VwcGx5AhFwcmV2TFBUb3RhbFN1cHBseQARa0xwUmV3YXJkUGVyQmxvY2sCEGxwUmV3YXJkUGVyQmxvY2sAD2tVc2VyTHBJbnRlcmVzdAIPX3VzZXJMcEludGVyZXN0AA5rUHJpY2VJbk9yYWNsZQIHX3R3YXA1QgAUa1ByZXZMZW5kVG9rZW5TdXBwbHkCFF9wcmV2TGVuZFRvdGFsU3VwcGx5AAxrQVhMWVRva2VuSWQCC2F4bHlUb2tlbklkABBrTGVuZFRva2VuU3VwcGx5Ag90b3RhbF9zdXBwbGllZF8AD2tMZW5kVXNlclN1cHBseQIKX3N1cHBsaWVkXwAQa0xlbmRTZXR1cFRva2VucwIMc2V0dXBfdG9rZW5zAA5rU0ZUb3RhbFN1cHBseQIaX3RvdGFsX3NoYXJlX3Rva2Vuc19sb2NrZWQAEmtTRlVzZXJUb3RhbFN1cHBseQIUX3NoYXJlX3Rva2Vuc19sb2NrZWQACWtBeGx5UG9vbAIIYXhseVBvb2wABWtMcElkAg5zaGFyZV9hc3NldF9pZAAMa1ByaWNlT3JhY2xlAgxwcmljZV9vcmFjbGUAEWtBeGx5TWFpbkNvbnRyYWN0AgxtYWluQ29udHJhY3QAFmtBeGx5VG9rZW5vbWljQ29udHJhY3QCEXRva2Vub21pY0NvbnRyYWN0ABJrU0ZGYXJtaW5nQ29udHJhY3QCE3N3b3BmaV9mYXJtaW5nX2FkZHIADWtMZW5kQ29udHJhY3QCEWxlbmRfc2VydmljZV9hZGRyAAlrQWRtaW4xUEsCFWdyb3VwMV9hZG1pbjFfcHViX2tleQAJa0FkbWluMlBLAhVncm91cDFfYWRtaW4yX3B1Yl9rZXkACWtBZG1pbjNQSwIVZ3JvdXAxX2FkbWluM19wdWJfa2V5AA9rT3BlcmF0b3JDYWxsUEsCEmFkbWluX2NhbGxfcHViX2tleQAIYXhseVBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQlrQXhseVBvb2wCFkNhbid0IGdldCBheGx5UG9vbCBrZXkADG1haW5Db250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFEWtBeGx5TWFpbkNvbnRyYWN0AhlDYW4ndCBnZXQgbWFpbkNvbnRhY3Qga2V5AA10b2tlbkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUWa0F4bHlUb2tlbm9taWNDb250cmFjdAIfQ2FuJ3QgZ2V0IHRva2Vub21pY0NvbnRyYWN0IGtleQAMbGVuZENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMbWFpbkNvbnRyYWN0BQ1rTGVuZENvbnRyYWN0Ah9DYW4ndCBnZXQgbGVuZF9zZXJ2aWNlX2FkZHIga2V5ABFzZkZhcm1pbmdDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDG1haW5Db250cmFjdAUSa1NGRmFybWluZ0NvbnRyYWN0AiFDYW4ndCBnZXQgc3dvcGZpX2Zhcm1pbmdfYWRkciBrZXkAD3ByaWNlT3JhY2xlQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDG1haW5Db250cmFjdAUMa1ByaWNlT3JhY2xlAhpDYW4ndCBnZXQgcHJpY2Vfb3JhY2xlIGtleQAIYWRtaW4xUEsJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDG1haW5Db250cmFjdAUJa0FkbWluMVBLAhJDYW4ndCBnZXQgYWRtaW4xUEsACGFkbWluMlBLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQxtYWluQ29udHJhY3QFCWtBZG1pbjJQSwISQ2FuJ3QgZ2V0IGFkbWluMlBLAAhhZG1pbjNQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUMbWFpbkNvbnRyYWN0BQlrQWRtaW4zUEsCFENhbid0IGdldCBvcGVyYXRvclBLAApvcGVyYXRvclBLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ9rT3BlcmF0b3JDYWxsUEsCFENhbid0IGdldCBvcGVyYXRvclBLAAZheGx5SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ10b2tlbkNvbnRyYWN0BQxrQVhMWVRva2VuSWQCF0Nhbid0IGdldCBBeGx5IHRva2VuIGlkAAtzdGFydEhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUMa1N0YXJ0SGVpZ2h0AAxwZXJpb2RMZW5ndGgJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFDWtQZXJpb2RMZW5ndGgACWN1clBlcmlvZAkAaQIJAGUCBQZoZWlnaHQFC3N0YXJ0SGVpZ2h0BQxwZXJpb2RMZW5ndGgADWxlbmRNYXhBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDXRva2VuQ29udHJhY3QFEWtMZW5kZXJzTWF4QW1vdW50ABNsZW5kTWF4UGVyaW9kQW1vdW50CQBpAgUNbGVuZE1heEFtb3VudAUTTEVOREVSU19NQVhfUEVSSU9EUwALbHBNYXhBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDXRva2VuQ29udHJhY3QFDGtMUE1heEFtb3VudAARbHBNYXhQZXJpb2RBbW91bnQJAGkCBQtscE1heEFtb3VudAUOTFBfTUFYX1BFUklPRFMACWFsbFRva2VucwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQdrVG9rZW5zAgEsAQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFCGFkbWluMVBLCQDMCAIFCGFkbWluMlBLCQDMCAIFCGFkbWluM1BLBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECKE9ubHkgYWRtaW4gZ3JvdXAxIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEOaXNPcGVyYXRvckNhbGwBAWkDCQAAAggFAWkPY2FsbGVyUHVibGljS2V5BQpvcGVyYXRvclBLBQR1bml0CQACAQIkT25seSBvcGVyYXRvciBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc0xhbmRDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUMbGVuZENvbnRyYWN0BQR1bml0CQACAQIpT25seSBsYW5kIGNvbnRyYWN0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BD2lzU0ZGYXJtaW5nQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFEXNmRmFybWluZ0NvbnRyYWN0BQR1bml0CQACAQIpT25seSBsYW5kIGNvbnRyYWN0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BDWdldEFzc2V0UHJpY2UBB2Fzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQdhc3NldElkBQ5rUHJpY2VJbk9yYWNsZQEQZ2V0QXNzZXREZWNpbWFscwEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwAIBAckbWF0Y2gwCQDsBwEJANkEAQUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAIBQVhc3NldAhkZWNpbWFscwkAAgECEENhbid0IGZpbmQgYXNzZXQBEWdldEFzc2V0UHJlY2lzaW9uAQdhc3NldElkCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHYXNzZXRJZAAAAAAFBERPV04BFWdldEFkb3B0ZWRBUFJCeVBlcmlvZAMGcGVyaW9kCmFwclBlcmlvZHMDYXByCgEDZm9yAgFhB2FwZXJpb2QECyR0MDUzNDA1MzYyBQFhBAVpbmRleAgFCyR0MDUzNDA1MzYyAl8xBAVmb3VuZAgFCyR0MDUzNDA1MzYyAl8yBAJmdAkAtQkCBQdhcGVyaW9kAgEtBAskdDA1Mzk5NTQ2MgkAlAoCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZnQAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmZ0AAEEBGZyb20IBQskdDA1Mzk5NTQ2MgJfMQQCdG8IBQskdDA1Mzk5NTQ2MgJfMgMFBWZvdW5kBQFhAwMJAGcCBQZwZXJpb2QFBGZyb20JAGcCBQJ0bwUGcGVyaW9kBwkAlAoCBQVpbmRleAYJAJQKAgkAZAIFBWluZGV4AAEHBAskdDA1NTk5NTY2NQoAAiRsBRNMRU5ERVJTX0FQUl9QRVJJT0RTCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNmb3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDkJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkEBWluZGV4CAULJHQwNTU5OTU2NjUCXzEEBWZvdW5kCAULJHQwNTU5OTU2NjUCXzIDBQVmb3VuZAkAawMJAGgCCQCRAwIFC0xFTkRFUlNfQVBSBQVpbmRleAUGU0NBTEU4AAcA7QIAAAEXZ2V0VG90YWxTdXBwbHlBbGxUb2tlbnMACgEDZm9yAgFhB3Rva2VuSWQECyR0MDU4NTM1OTA5BQFhBAt0b3RhbFN1cHBseQgFCyR0MDU4NTM1OTA5Al8xBA50b3RhbFN1cHBseVVzZAgFCyR0MDU4NTM1OTA5Al8yBBF0b3RhbFN1cHBseVVzZEFsbAgFCyR0MDU4NTM1OTA5Al8zBAd0U3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDGxlbmRDb250cmFjdAkArAICBRBrTGVuZFRva2VuU3VwcGx5BQd0b2tlbklkAAAECmFzc2V0UHJpY2UJAQ1nZXRBc3NldFByaWNlAQUHdG9rZW5JZAQOYXNzZXRQcmVjaXNpb24JARFnZXRBc3NldFByZWNpc2lvbgEFB3Rva2VuSWQECnRTdXBwbHlVc2QJAGsDBQd0U3VwcGx5BQphc3NldFByaWNlBQ5hc3NldFByZWNpc2lvbgkAlQoDCQDNCAIFC3RvdGFsU3VwcGx5BQd0U3VwcGx5CQDNCAIFDnRvdGFsU3VwcGx5VXNkBQp0U3VwcGx5VXNkCQBkAgURdG90YWxTdXBwbHlVc2RBbGwFCnRTdXBwbHlVc2QKAAIkbAUJYWxsVG9rZW5zCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNmb3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDMwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeARFnZXRUb3RhbFN1cHBseVVzZAEHdG9rZW5JZAQHdFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQxsZW5kQ29udHJhY3QJAKwCAgUQa0xlbmRUb2tlblN1cHBseQUHdG9rZW5JZAAABAphc3NldFByaWNlCQENZ2V0QXNzZXRQcmljZQEFB3Rva2VuSWQEDmFzc2V0UHJlY2lzaW9uCQERZ2V0QXNzZXRQcmVjaXNpb24BBQd0b2tlbklkCQBrAwUHdFN1cHBseQUKYXNzZXRQcmljZQUOYXNzZXRQcmVjaXNpb24BFGNhbGNOZXdUb2tlbkludGVyZXN0Agd0b2tlbklkC3RvdGFsU3VwcGx5AwkAZwIFBmhlaWdodAULc3RhcnRIZWlnaHQAAAQOcmV3YXJkUGVyQmxvY2sJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUHdG9rZW5JZAUUa1Rva2VuUmV3YXJkUGVyQmxvY2sEC29sZEludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFB3Rva2VuSWQFDmtUb2tlbkludGVyZXN0BAx1cGRhdGVIZWlnaHQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUHdG9rZW5JZAUUa1Rva2VuSW50ZXJlc3RIZWlnaHQEBnJld2FyZAkAaAIJAGUCBQZoZWlnaHQFDHVwZGF0ZUhlaWdodAUOcmV3YXJkUGVyQmxvY2sECGludGVyZXN0AwkAZgIFC3RvdGFsU3VwcGx5AAAJAGsDBQZyZXdhcmQFBlNDQUxFOAULdG90YWxTdXBwbHkAAAkAZAIFC29sZEludGVyZXN0BQhpbnRlcmVzdAERY2FsY05ld0xwSW50ZXJlc3QBC3RvdGFsU3VwcGx5AwkAZwIFBmhlaWdodAULc3RhcnRIZWlnaHQAAAQOcmV3YXJkUGVyQmxvY2sJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtMcFJld2FyZFBlckJsb2NrBAtvbGRJbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwULa0xwSW50ZXJlc3QEDHVwZGF0ZUhlaWdodAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwURa0xwSW50ZXJlc3RIZWlnaHQEBnJld2FyZAkAaAIJAGUCBQZoZWlnaHQFDHVwZGF0ZUhlaWdodAUOcmV3YXJkUGVyQmxvY2sECGludGVyZXN0AwkAZgIFC3RvdGFsU3VwcGx5AAAJAGsDBQZyZXdhcmQFBlNDQUxFOAULdG90YWxTdXBwbHkAAAkAZAIFC29sZEludGVyZXN0BQhpbnRlcmVzdAESY2FsY0xlbmRVc2VyUmV3YXJkAgR1c2VyB3Rva2VuSWQEC3RvdGFsU3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDGxlbmRDb250cmFjdAkArAICBRBrTGVuZFRva2VuU3VwcGx5BQd0b2tlbklkAAAEDXRva2VuSW50ZXJlc3QJARRjYWxjTmV3VG9rZW5JbnRlcmVzdAIFB3Rva2VuSWQFC3RvdGFsU3VwcGx5BAp1c2VyU3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDGxlbmRDb250cmFjdAkArAICCQCsAgIFBHVzZXIFD2tMZW5kVXNlclN1cHBseQUHdG9rZW5JZAAABBF1c2VyVG9rZW5JbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQd0b2tlbklkAgFfBQR1c2VyBRFrVXNlckxlbmRJbnRlcmVzdAMJAAACBQp1c2VyU3VwcGx5AAAFDXRva2VuSW50ZXJlc3QAAAQGcmV3YXJkCQBrAwUKdXNlclN1cHBseQkAZQIFDXRva2VuSW50ZXJlc3QFEXVzZXJUb2tlbkludGVyZXN0BQZTQ0FMRTgJAJUKAwUGcmV3YXJkBQ10b2tlbkludGVyZXN0BQp1c2VyU3VwcGx5ARBjYWxjTHBVc2VyUmV3YXJkAQR1c2VyBAt0b3RhbFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBRFzZkZhcm1pbmdDb250cmFjdAkArAICBQhheGx5UG9vbAUOa1NGVG90YWxTdXBwbHkAAAQNdG9rZW5JbnRlcmVzdAkBEWNhbGNOZXdMcEludGVyZXN0AQULdG90YWxTdXBwbHkECnVzZXJTdXBwbHkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMbGVuZENvbnRyYWN0CQCsAgIJAKwCAgkArAICBQhheGx5UG9vbAIBXwUEdXNlcgUSa1NGVXNlclRvdGFsU3VwcGx5AAAEEXVzZXJUb2tlbkludGVyZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUPa1VzZXJMcEludGVyZXN0AwkAAAIFCnVzZXJTdXBwbHkAAAUNdG9rZW5JbnRlcmVzdAAABAZyZXdhcmQJAGsDBQp1c2VyU3VwcGx5CQBlAgUNdG9rZW5JbnRlcmVzdAURdXNlclRva2VuSW50ZXJlc3QFBlNDQUxFOAkAlQoDBQZyZXdhcmQFDXRva2VuSW50ZXJlc3QFCnVzZXJTdXBwbHkBGGNsYWltTGVuZGVyUmV3YXJkc0NvbW1vbgIEdXNlcghyZWFkT25seQoBBWNsYWltAgFhB3Rva2VuSWQECyR0MDg3NTM4Nzk3BQFhBAh0b2tlbklkcwgFCyR0MDg3NTM4Nzk3Al8xBAdjQW1vdW50CAULJHQwODc1Mzg3OTcCXzIEBXRvdGFsCAULJHQwODc1Mzg3OTcCXzMECGVudGVyaWVzCAULJHQwODc1Mzg3OTcCXzQEEnVzZXJBdmFpbGFibGVDbGFpbQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQd0b2tlbklkAgFfBQR1c2VyBRdrVXNlckxlbmRBdmFpbGFibGVDbGFpbQAABAskdDA4OTEwODk4OQkBEmNhbGNMZW5kVXNlclJld2FyZAIFBHVzZXIFB3Rva2VuSWQEB3VSZXdhcmQIBQskdDA4OTEwODk4OQJfMQQQbmV3VG9rZW5JbnRlcmVzdAgFCyR0MDg5MTA4OTg5Al8yBAp1c2VyU3VwcGx5CAULJHQwODkxMDg5ODkCXzMEDHRvdGFsVG9DbGFpbQkAZAIFEnVzZXJBdmFpbGFibGVDbGFpbQUHdVJld2FyZAMDCQBmAgUMdG90YWxUb0NsYWltAAAGCQBmAgUKdXNlclN1cHBseQAABAxuZXdFbnRyZXJpZXMDAwUIcmVhZE9ubHkGCQAAAgUMdG90YWxUb0NsYWltAAAFCGVudGVyaWVzCQDOCAIFCGVudGVyaWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQd0b2tlbklkAgFfBQR1c2VyBRFrVXNlckxlbmRJbnRlcmVzdAUQbmV3VG9rZW5JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUHdG9rZW5JZAIBXwUEdXNlcgUXa1VzZXJMZW5kQXZhaWxhYmxlQ2xhaW0AAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBQ5rVG9rZW5JbnRlcmVzdAUQbmV3VG9rZW5JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBRRrVG9rZW5JbnRlcmVzdEhlaWdodAUGaGVpZ2h0BQNuaWwJAJYKBAkAzQgCBQh0b2tlbklkcwUHdG9rZW5JZAkAzQgCBQdjQW1vdW50BQx0b3RhbFRvQ2xhaW0JAGQCBQV0b3RhbAUMdG90YWxUb0NsYWltBQxuZXdFbnRyZXJpZXMJAJYKBAUIdG9rZW5JZHMFB2NBbW91bnQFBXRvdGFsBQhlbnRlcmllcwoAAiRsBQlhbGxUb2tlbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAUDbmlsAAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFY2xhaW0CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDMwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeARRjbGFpbUxwUmV3YXJkc0NvbW1vbgIEdXNlcghyZWFkT25seQQSdXNlckF2YWlsYWJsZUNsYWltCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUVa1VzZXJMcEF2YWlsYWJsZUNsYWltAAAECyR0MDk5MTY5OTgxCQEQY2FsY0xwVXNlclJld2FyZAEFBHVzZXIEB3VSZXdhcmQIBQskdDA5OTE2OTk4MQJfMQQNbmV3THBJbnRlcmVzdAgFCyR0MDk5MTY5OTgxAl8yBAp1c2VyU3VwcGx5CAULJHQwOTkxNjk5ODECXzMEDHRvdGFsVG9DbGFpbQkAZAIFEnVzZXJBdmFpbGFibGVDbGFpbQUHdVJld2FyZAMDBQhyZWFkT25seQYJAAACBQx0b3RhbFRvQ2xhaW0AAAkAlAoCBQx0b3RhbFRvQ2xhaW0FA25pbAkAlAoCBQx0b3RhbFRvQ2xhaW0JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUPa1VzZXJMcEludGVyZXN0BQ1uZXdMcEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFFWtVc2VyTHBBdmFpbGFibGVDbGFpbQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrTHBJbnRlcmVzdAUNbmV3THBJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa0xwSW50ZXJlc3RIZWlnaHQFBmhlaWdodAUDbmlsAQ1nZXRUb2tlbnNBUFJzAAQJYXhseVByaWNlCQENZ2V0QXNzZXRQcmljZQEFBmF4bHlJZAQNYXhseVByZWNpc2lvbgkBEWdldEFzc2V0UHJlY2lzaW9uAQUGYXhseUlkCgEKdG9rZW5zQXBycwIDYXByB3Rva2VuSWQEBHJ3cGIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQd0b2tlbklkBRRrVG9rZW5SZXdhcmRQZXJCbG9jawAABAdyd3BiVXNkCQBrAwUEcndwYgUJYXhseVByaWNlBQ1heGx5UHJlY2lzaW9uBAZyd1llYXIJAGgCCQBoAgUHcndwYlVzZAUMcGVyaW9kTGVuZ3RoADQEDnRvdGFsU3VwcGx5VXNkCQERZ2V0VG90YWxTdXBwbHlVc2QBBQd0b2tlbklkCQDNCAIFA2FwcgkAawMFBnJ3WWVhcgUGU0NBTEU4BQ50b3RhbFN1cHBseVVzZAQEYXBycwoAAiRsBQlhbGxUb2tlbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnRva2Vuc0FwcnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDMwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeBA1scFRvdGFsU3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBRFzZkZhcm1pbmdDb250cmFjdAkArAICBQhheGx5UG9vbAUOa1NGVG90YWxTdXBwbHkEBGxwSWQJARFAZXh0ck5hdGl2ZSgxMDUzKQIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCGF4bHlQb29sBQVrTHBJZAQLbHBQcmVjaXNpb24JARFnZXRBc3NldFByZWNpc2lvbgEFBGxwSWQEB2xwUHJpY2UKAAFACQCRAwIKAAFACQD8BwQFDG1haW5Db250cmFjdAIaZ2V0U2hhcmVBc3NldFByaWNlUkVBRE9OTFkJAMwIAgkAzAgCBQRscElkBQNuaWwFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQQbHBUb3RhbFN1cHBseVVzZAkAawMFDWxwVG90YWxTdXBwbHkFB2xwUHJpY2UFC2xwUHJlY2lzaW9uBARyd3BiCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFEWtMcFJld2FyZFBlckJsb2NrAAAEB3J3cGJVc2QJAGsDBQRyd3BiBQlheGx5UHJpY2UFDWF4bHlQcmVjaXNpb24EBnJ3WWVhcgkAaAIJAGgCBQdyd3BiVXNkBQxwZXJpb2RMZW5ndGgANAQFbHBBcHIJAGsDBQZyd1llYXIFBlNDQUxFOAUQbHBUb3RhbFN1cHBseVVzZAkAlQoDBQlhbGxUb2tlbnMFBGFwcnMFBWxwQXByBwFpARJjbGFpbUxlbmRlclJld2FyZHMABAhjbGFpbVJlcwkBGGNsYWltTGVuZGVyUmV3YXJkc0NvbW1vbgIJAKUIAQgFAWkGY2FsbGVyBwMJAAACCAUIY2xhaW1SZXMCXzMAAAkAAgECI2NsYWltIGFtb3VudCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwBANpbnYJAPwHBAUNdG9rZW5Db250cmFjdAISd2l0aGRyYXdMZW5kUmV3YXJkCQDMCAIIBQhjbGFpbVJlcwJfMwkAzAgCCQClCAEIBQFpBmNhbGxlcgUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYIBQhjbGFpbVJlcwJfNAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jbGFpbUxwUmV3YXJkcwAECGNsYWltUmVzCQEUY2xhaW1McFJld2FyZHNDb21tb24CCQClCAEIBQFpBmNhbGxlcgcDCQAAAggFCGNsYWltUmVzAl8xAAAJAAIBAiNjbGFpbSBhbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAQDaW52CQD8BwQFDXRva2VuQ29udHJhY3QCEHdpdGhkcmF3THBSZXdhcmQJAMwIAggFCGNsYWltUmVzAl8xCQDMCAIJAKUIAQgFAWkGY2FsbGVyBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludggFCGNsYWltUmVzAl8yCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCmxlbmRBY3Rpb24CBHVzZXIHdG9rZW5JZAkBC3ZhbHVlT3JFbHNlAgkBCmlzTGFuZENhbGwBBQFpBBJ1c2VyQXZhaWxhYmxlQ2xhaW0JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQd0b2tlbklkBRdrVXNlckxlbmRBdmFpbGFibGVDbGFpbQAABA0kdDAxMjM0MzEyNDEwCQESY2FsY0xlbmRVc2VyUmV3YXJkAgUEdXNlcgUHdG9rZW5JZAQHdVJld2FyZAgFDSR0MDEyMzQzMTI0MTACXzEEEG5ld1Rva2VuSW50ZXJlc3QIBQ0kdDAxMjM0MzEyNDEwAl8yCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQd0b2tlbklkBRFrVXNlckxlbmRJbnRlcmVzdAUQbmV3VG9rZW5JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUHdG9rZW5JZAUXa1VzZXJMZW5kQXZhaWxhYmxlQ2xhaW0JAGQCBRJ1c2VyQXZhaWxhYmxlQ2xhaW0FB3VSZXdhcmQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUOa1Rva2VuSW50ZXJlc3QFEG5ld1Rva2VuSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1Rva2VuSW50ZXJlc3RIZWlnaHQFBmhlaWdodAUDbmlsAWkBCGxwQWN0aW9uAQR1c2VyCQELdmFsdWVPckVsc2UCCQEPaXNTRkZhcm1pbmdDYWxsAQUBaQQSdXNlckF2YWlsYWJsZUNsYWltCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFFWtVc2VyTHBBdmFpbGFibGVDbGFpbQAABA0kdDAxMjg3NTEyOTI4CQEQY2FsY0xwVXNlclJld2FyZAEFBHVzZXIEB3VSZXdhcmQIBQ0kdDAxMjg3NTEyOTI4Al8xBA1uZXdMcEludGVyZXN0CAUNJHQwMTI4NzUxMjkyOAJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBQ9rVXNlckxwSW50ZXJlc3QFDW5ld0xwSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEdXNlcgUVa1VzZXJMcEF2YWlsYWJsZUNsYWltCQBkAgUSdXNlckF2YWlsYWJsZUNsYWltBQd1UmV3YXJkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFC2tMcEludGVyZXN0BQ1uZXdMcEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEWtMcEludGVyZXN0SGVpZ2h0BQZoZWlnaHQFA25pbAFpAQRpbml0BRRheGx5TWFpbkNvbnRyYWN0QWRkchlheGx5VG9rZW5vbWljQ29udHJhY3RBZGRyDGF4bHlQb29sQWRkchJmYXJtaW5nU3RhcnRIZWlnaHQMcGVyaW9kTGVuZ3RoCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFFGF4bHlNYWluQ29udHJhY3RBZGRyCQACAQIVV3JvbmcgZmFybWluZyBhZGRyZXNzAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBRlheGx5VG9rZW5vbWljQ29udHJhY3RBZGRyCQACAQIbV3JvbmcgbWFpbiBjb250cmFjdCBhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIFEWtBeGx5TWFpbkNvbnRyYWN0BRRheGx5TWFpbkNvbnRyYWN0QWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBRZrQXhseVRva2Vub21pY0NvbnRyYWN0BRlheGx5VG9rZW5vbWljQ29udHJhY3RBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBeGx5UG9vbAUMYXhseVBvb2xBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrU3RhcnRIZWlnaHQFEmZhcm1pbmdTdGFydEhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa1BlcmlvZExlbmd0aAUMcGVyaW9kTGVuZ3RoCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tUb2tlbnMCAAUDbmlsAWkBDGluaXROZXdUb2tlbgEHdG9rZW5JZAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgUHdG9rZW5JZAUOa1Rva2VuSW50ZXJlc3QJAAIBAhR0b2tlbiBhbHJlYWR5IGluaXRlZAMJAQEhAQkBCGNvbnRhaW5zAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUMbGVuZENvbnRyYWN0BRBrTGVuZFNldHVwVG9rZW5zBQd0b2tlbklkCQACAQITbm8gdG9rZW4gb24gbGFuZGluZwQMbmV3QWxsVG9rZW5zAwkAAAIJAJADAQUJYWxsVG9rZW5zAAAJAMwIAgUHdG9rZW5JZAUDbmlsCQDNCAIFCWFsbFRva2VucwUHdG9rZW5JZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBQ5rVG9rZW5JbnRlcmVzdAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtUb2tlbkludGVyZXN0SGVpZ2h0CQCWAwEJAMwIAgULc3RhcnRIZWlnaHQJAMwIAgUGaGVpZ2h0BQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUHa1Rva2VucwkAuQkCBQxuZXdBbGxUb2tlbnMCASwJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUUa1Rva2VuUmV3YXJkUGVyQmxvY2sAAAUDbmlsAWkBDXVwZGF0ZVJld2FyZHMACQELdmFsdWVPckVsc2UCCQEOaXNPcGVyYXRvckNhbGwBBQFpBBBsYXN0VXBkYXRlSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFE2tSZXdhcmRVcGRhdGVIZWlnaHQAAAMJAGYCCQBkAgUQbGFzdFVwZGF0ZUhlaWdodAUMcGVyaW9kTGVuZ3RoBQZoZWlnaHQJAAIBAiVyZXdhcmRzIGFscmVkeSB1cGRhdGVkIGluIHRoaXMgcGVyaW9kBA0kdDAxNDc2NTE0ODQ1CQEXZ2V0VG90YWxTdXBwbHlBbGxUb2tlbnMABAt0b3RhbFN1cHBseQgFDSR0MDE0NzY1MTQ4NDUCXzEEDnRvdGFsU3VwcGx5VXNkCAUNJHQwMTQ3NjUxNDg0NQJfMgQRdG90YWxTdXBwbHlVc2RBbGwIBQ0kdDAxNDc2NTE0ODQ1Al8zBAlheGx5UHJpY2UJAQ1nZXRBc3NldFByaWNlAQUGYXhseUlkBA1heGx5UHJlY2lzaW9uCQERZ2V0QXNzZXRQcmVjaXNpb24BBQZheGx5SWQEBm1heEFQUgkBFWdldEFkb3B0ZWRBUFJCeVBlcmlvZAMFCWN1clBlcmlvZAUTTEVOREVSU19BUFJfUEVSSU9EUwULTEVOREVSU19BUFIKAQx1cGRhdGVSZXdhcmQCAWEHdG9rZW5JZAQNJHQwMTUwODkxNTExNAUBYQQIZW50ZXJpZXMIBQ0kdDAxNTA4OTE1MTE0Al8xBAVpbmRleAgFDSR0MDE1MDg5MTUxMTQCXzIDCQAAAgkAkQMCBQt0b3RhbFN1cHBseQUFaW5kZXgAAAkAlAoCCQDOCAIFCGVudGVyaWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtUb2tlblJld2FyZFBlckJsb2NrAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUOa1Rva2VuSW50ZXJlc3QJARRjYWxjTmV3VG9rZW5JbnRlcmVzdAIFB3Rva2VuSWQJAJEDAgULdG90YWxTdXBwbHkFBWluZGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtUb2tlbkludGVyZXN0SGVpZ2h0BQZoZWlnaHQFA25pbAkAZAIFBWluZGV4AAEEBXNoYXJlCQBrAwkAkQMCBQ50b3RhbFN1cHBseVVzZAUFaW5kZXgFBlNDQUxFOAURdG90YWxTdXBwbHlVc2RBbGwECW1heFJld2FyZAkAawMFBXNoYXJlBRNsZW5kTWF4UGVyaW9kQW1vdW50BQZTQ0FMRTgEDG1heFJld2FyZFVzZAkAawMFCW1heFJld2FyZAUJYXhseVByaWNlBQ1heGx5UHJlY2lzaW9uBA9wcmV2VG90YWxTdXBwbHkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUUa1ByZXZMZW5kVG9rZW5TdXBwbHkAAAQGcnRDb2VmAwMJAAACBQ9wcmV2VG90YWxTdXBwbHkAAAYJAAACCQCRAwIFC3RvdGFsU3VwcGx5BQVpbmRleAAAAAAJAGsDBQ9wcmV2VG90YWxTdXBwbHkFBlNDQUxFOAkAkQMCBQt0b3RhbFN1cHBseQUFaW5kZXgEBnJld2FyZAkAaQIJAJcDAQkAzAgCCQBoAgUGbWF4QVBSCQBkAgUGU0NBTEU4BQZydENvZWYJAMwIAgkAawMFBm1heEFQUgkAaAIADwUGU0NBTEU4AAoFA25pbAUGU0NBTEU4BAlyZXdhcmRVc2QJAJcDAQkAzAgCBQxtYXhSZXdhcmRVc2QJAMwIAgkAawMJAJEDAgUOdG90YWxTdXBwbHlVc2QFBWluZGV4BQZyZXdhcmQFBlNDQUxFOAUDbmlsBAxyZXdhcmRQZXJpb2QJAGsDBQlyZXdhcmRVc2QFCWF4bHlQcmljZQUNYXhseVByZWNpc2lvbgQOcmV3YXJkUGVyQmxvY2sJAGkCBQxyZXdhcmRQZXJpb2QFDHBlcmlvZExlbmd0aAkAlAoCCQDOCAIFCGVudGVyaWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtQcmV2TGVuZFRva2VuU3VwcGx5CQCRAwIFC3RvdGFsU3VwcGx5BQVpbmRleAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbklkBRRrVG9rZW5SZXdhcmRQZXJCbG9jawUOcmV3YXJkUGVyQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUHdG9rZW5JZAUOa1Rva2VuSW50ZXJlc3QJARRjYWxjTmV3VG9rZW5JbnRlcmVzdAIFB3Rva2VuSWQJAJEDAgULdG90YWxTdXBwbHkFBWluZGV4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSWQFFGtUb2tlbkludGVyZXN0SGVpZ2h0BQZoZWlnaHQFA25pbAkAZAIFBWluZGV4AAEEDSR0MDE2NTg1MTY2NTcKAAIkbAUJYWxsVG9rZW5zCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMdXBkYXRlUmV3YXJkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAzMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgQOdG9rZW5zRW50ZXJpZXMIBQ0kdDAxNjU4NTE2NjU3Al8xBAVpbmRleAgFDSR0MDE2NTg1MTY2NTcCXzIECGxwTWF4QVBSCQEVZ2V0QWRvcHRlZEFQUkJ5UGVyaW9kAwUJY3VyUGVyaW9kBQ5MUF9BUFJfUEVSSU9EUwUGTFBfQVBSBA1scFRvdGFsU3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBRFzZkZhcm1pbmdDb250cmFjdAkArAICBQhheGx5UG9vbAUOa1NGVG90YWxTdXBwbHkEC3ByZUxQU3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDWtQcmV2TFBTdXBwbHkAAAQEbHBJZAkBEUBleHRyTmF0aXZlKDEwNTMpAgkBEUBleHRyTmF0aXZlKDEwNjIpAQUIYXhseVBvb2wFBWtMcElkBAtscFByZWNpc2lvbgkBEWdldEFzc2V0UHJlY2lzaW9uAQUEbHBJZAQHbHBQcmljZQoAAUAJAJEDAgoAAUAJAPwHBAUMbWFpbkNvbnRyYWN0AhpnZXRTaGFyZUFzc2V0UHJpY2VSRUFET05MWQkAzAgCCQDMCAIFBGxwSWQFA25pbAUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAAADCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BBBscFRvdGFsU3VwcGx5VXNkCQBrAwUNbHBUb3RhbFN1cHBseQUHbHBQcmljZQULbHBQcmVjaXNpb24EDm1heExQUmV3YXJkVXNkCQBrAwURbHBNYXhQZXJpb2RBbW91bnQFCWF4bHlQcmljZQUNYXhseVByZWNpc2lvbgQIcnRMUENvZWYDAwkAAAIFC3ByZUxQU3VwcGx5AAAGCQAAAgUNbHBUb3RhbFN1cHBseQAAAAAJAGsDBQtwcmVMUFN1cHBseQUGU0NBTEU4BQ1scFRvdGFsU3VwcGx5BAhyZXdhcmRMcAkAaQIJAJcDAQkAzAgCCQBoAgUIbHBNYXhBUFIJAGQCBQZTQ0FMRTgFCHJ0TFBDb2VmCQDMCAIJAGsDBQhscE1heEFQUgkAaAIADwUGU0NBTEU4AAoFA25pbAUGU0NBTEU4BAtyZXdhcmRMcFVzZAkAlwMBCQDMCAIFDm1heExQUmV3YXJkVXNkCQDMCAIJAGsDBRBscFRvdGFsU3VwcGx5VXNkBQhyZXdhcmRMcAUGU0NBTEU4BQNuaWwEDnJld2FyZExwUGVyaW9kCQBrAwULcmV3YXJkTHBVc2QFCWF4bHlQcmljZQUNYXhseVByZWNpc2lvbgQQcmV3YXJkTHBQZXJCbG9jawkAaQIFDnJld2FyZExwUGVyaW9kBQxwZXJpb2RMZW5ndGgECmxwRW50ZXJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtQcmV2TFBTdXBwbHkFDWxwVG90YWxTdXBwbHkJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtMcFJld2FyZFBlckJsb2NrBRByZXdhcmRMcFBlckJsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrTHBJbnRlcmVzdAkBEWNhbGNOZXdMcEludGVyZXN0AQUNbHBUb3RhbFN1cHBseQkAzAgCCQEMSW50ZWdlckVudHJ5AgURa0xwSW50ZXJlc3RIZWlnaHQFBmhlaWdodAUDbmlsCQDNCAIJAM4IAgUKbHBFbnRlcmllcwUOdG9rZW5zRW50ZXJpZXMJAQxJbnRlZ2VyRW50cnkCBRNrUmV3YXJkVXBkYXRlSGVpZ2h0BQZoZWlnaHQBAnR4AQZ2ZXJpZnkABBNtdWx0aVNpZ25lZEJ5QWRtaW5zBBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQhhZG1pbjFQSwABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFCGFkbWluMlBLAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUIYWRtaW4zUEsAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAIEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDAEBmlzU2VsZgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQQKaXNSaWdodEZlZQMJAAACCAUDaW52A2ZlZQCg9zYJAAACCAUDaW52CmZlZUFzc2V0SWQFBHVuaXQHBAppc0luaXRDYWxsCQAAAggFA2ludghmdW5jdGlvbgIEaW5pdAQMaXNub1BheW1lbnRzCQAAAgkAkAMBCAUDaW52CHBheW1lbnRzAAADAwMDBQppc1JpZ2h0RmVlBQppc0luaXRDYWxsBwUGaXNTZWxmBwUMaXNub1BheW1lbnRzBwYFE211bHRpU2lnbmVkQnlBZG1pbnMFE211bHRpU2lnbmVkQnlBZG1pbnN4fo59", "height": 2714528, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AaJfjphPicUsARKyY6bVziu4JTwjbb2GnxMq7op9RaDu Next: HPd3puN7tEcmzDUKnvuojKqwJ42wuyfm9xUkHuGPHmjT Diff:
OldNewDifferences
470470 then throw("token already inited")
471471 else if (!(contains(getStringValue(V, E), aU)))
472472 then throw("no token on landing")
473- else [IntegerEntry((aU + n), 0), IntegerEntry((aU + o), height), StringEntry(l, makeString((ak :+ aU), ",")), IntegerEntry(p, 0)])
473+ else {
474+ let cf = if ((size(ak) == 0))
475+ then [aU]
476+ else (ak :+ aU)
477+[IntegerEntry((aU + n), 0), IntegerEntry((aU + o), max([ad, height])), StringEntry(l, makeString(cf, ",")), IntegerEntry((aU + p), 0)]
478+ })
474479
475480
476481
477482 @Callable(am)
478483 func updateRewards () = valueOrElse(ao(am), {
479- let cf = valueOrElse(getInteger(this, q), 0)
480- if (((cf + ae) > height))
484+ let cg = valueOrElse(getInteger(this, q), 0)
485+ if (((cg + ae) > height))
481486 then throw("rewards alredy updated in this period")
482487 else {
483- let cg = aT()
484- let aW = cg._1
485- let aX = cg._2
486- let aY = cg._3
488+ let ch = aT()
489+ let aW = ch._1
490+ let aX = ch._2
491+ let aY = ch._3
487492 let bJ = ar(ac)
488493 let bK = aw(ac)
489- let ch = ax(af, c, b)
490- func ci (aC,aU) = {
491- let cj = aC
492- let by = cj._1
493- let aF = cj._2
494+ let ci = ax(af, c, b)
495+ func cj (aC,aU) = {
496+ let ck = aC
497+ let by = ck._1
498+ let aF = ck._2
494499 if ((aW[aF] == 0))
495500 then $Tuple2((by ++ [IntegerEntry((aU + p), 0), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), height)]), (aF + 1))
496501 else {
497- let ck = fraction(aX[aF], a, aY)
498- let cl = fraction(ck, ah, a)
499- let cm = fraction(cl, bJ, bK)
500- let cn = valueOrElse(getInteger(this, A), 0)
501- let co = if (if ((cn == 0))
502+ let cl = fraction(aX[aF], a, aY)
503+ let cm = fraction(cl, ah, a)
504+ let cn = fraction(cm, bJ, bK)
505+ let co = valueOrElse(getInteger(this, A), 0)
506+ let cp = if (if ((co == 0))
502507 then true
503508 else (aW[aF] == 0))
504509 then 0
505- else fraction(cn, a, aW[aF])
506- let bi = (min([(ch * (a + co)), fraction(ch, (15 * a), 10)]) / a)
507- let cp = min([cm, fraction(aX[aF], bi, a)])
508- let cq = fraction(cp, bJ, bK)
509- let bf = (cq / ae)
510+ else fraction(co, a, aW[aF])
511+ let bi = (min([(ci * (a + cp)), fraction(ci, (15 * a), 10)]) / a)
512+ let cq = min([cn, fraction(aX[aF], bi, a)])
513+ let cr = fraction(cq, bJ, bK)
514+ let bf = (cr / ae)
510515 $Tuple2((by ++ [IntegerEntry((aU + A), aW[aF]), IntegerEntry((aU + p), bf), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), height)]), (aF + 1))
511516 }
512517 }
513518
514- let cr = {
519+ let cs = {
515520 let aM = ak
516521 let aN = size(aM)
517522 let aO = $Tuple2(nil, 0)
518523 func aP (aQ,aR) = if ((aR >= aN))
519524 then aQ
520- else ci(aQ, aM[aR])
525+ else cj(aQ, aM[aR])
521526
522527 func aS (aQ,aR) = if ((aR >= aN))
523528 then aQ
525530
526531 aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
527532 }
528- let cs = cr._1
529- let aF = cr._2
530- let ct = ax(af, f, e)
533+ let ct = cs._1
534+ let aF = cs._2
535+ let cu = ax(af, f, e)
531536 let bQ = getIntegerValue(W, (S + F))
532- let cu = valueOrElse(getInteger(this, w), 0)
537+ let cv = valueOrElse(getInteger(this, w), 0)
533538 let bR = getStringValue(addressFromStringValue(S), I)
534539 let bS = aw(bR)
535540 let bT = {
544549 else throw(($getType(bU) + " couldn't be cast to Int"))
545550 }
546551 let bV = fraction(bQ, bT, bS)
547- let cv = fraction(aj, bJ, bK)
548- let cw = if (if ((cu == 0))
552+ let cw = fraction(aj, bJ, bK)
553+ let cx = if (if ((cv == 0))
549554 then true
550555 else (bQ == 0))
551556 then 0
552- else fraction(cu, a, bQ)
553- let cx = (min([(ct * (a + cw)), fraction(ct, (15 * a), 10)]) / a)
554- let cy = min([cv, fraction(bV, cx, a)])
555- let cz = fraction(cy, bJ, bK)
556- let cA = (cz / ae)
557- let cB = [IntegerEntry(w, bQ), IntegerEntry(x, cA), IntegerEntry(u, bk(bQ)), IntegerEntry(v, height)]
558- ((cB ++ cs) :+ IntegerEntry(q, height))
557+ else fraction(cv, a, bQ)
558+ let cy = (min([(cu * (a + cx)), fraction(cu, (15 * a), 10)]) / a)
559+ let cz = min([cw, fraction(bV, cy, a)])
560+ let cA = fraction(cz, bJ, bK)
561+ let cB = (cA / ae)
562+ let cC = [IntegerEntry(w, bQ), IntegerEntry(x, cB), IntegerEntry(u, bk(bQ)), IntegerEntry(v, height)]
563+ ((cC ++ ct) :+ IntegerEntry(q, height))
559564 }
560565 })
561566
562567
563-@Verifier(cC)
564-func cD () = {
565- let cE = {
566- let cF = if (sigVerify(cC.bodyBytes, cC.proofs[0], Y))
568+@Verifier(cD)
569+func cE () = {
570+ let cF = {
571+ let cG = if (sigVerify(cD.bodyBytes, cD.proofs[0], Y))
567572 then 1
568573 else 0
569- let cG = if (sigVerify(cC.bodyBytes, cC.proofs[1], Z))
574+ let cH = if (sigVerify(cD.bodyBytes, cD.proofs[1], Z))
570575 then 1
571576 else 0
572- let cH = if (sigVerify(cC.bodyBytes, cC.proofs[2], aa))
577+ let cI = if (sigVerify(cD.bodyBytes, cD.proofs[2], aa))
573578 then 1
574579 else 0
575- (((cF + cG) + cH) >= 2)
580+ (((cG + cH) + cI) >= 2)
576581 }
577- let au = cC
582+ let au = cD
578583 if ($isInstanceOf(au, "InvokeScriptTransaction"))
579584 then {
580585 let bY = au
581- let cI = sigVerify(cC.bodyBytes, cC.proofs[0], cC.senderPublicKey)
582- let cJ = if ((bY.fee == 900000))
586+ let cJ = sigVerify(cD.bodyBytes, cD.proofs[0], cD.senderPublicKey)
587+ let cK = if ((bY.fee == 900000))
583588 then (bY.feeAssetId == unit)
584589 else false
585- let cK = (bY.function == "init")
586- let cL = (size(bY.payments) == 0)
587- if (if (if (if (cJ)
588- then cK
589- else false)
590- then cI
591- else false)
590+ let cL = (bY.function == "init")
591+ let cM = (size(bY.payments) == 0)
592+ if (if (if (if (cK)
592593 then cL
593594 else false)
595+ then cJ
596+ else false)
597+ then cM
598+ else false)
594599 then true
595- else cE
600+ else cF
596601 }
597- else cE
602+ else cF
598603 }
599604
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = [150, 120, 100, 80, 60, 40, 30, 20, 10]
77
88 let c = ["1-1", "2-2", "3-3", "4-4", "5-8", "9-12", "14 - 16", "17-20", "20-104"]
99
1010 let d = 104
1111
1212 let e = [150, 120, 100, 80, 60, 40]
1313
1414 let f = ["1-1", "2-2", "3-3", "4-4", "5-8", "9-12"]
1515
1616 let g = 12
1717
1818 let h = "startHeight"
1919
2020 let i = "periodLength"
2121
2222 let j = "lendRewardsAmount"
2323
2424 let k = "lpRewardAmount"
2525
2626 let l = "tokens"
2727
2828 let m = "_userTotalSupply"
2929
3030 let n = "_tokenInterest"
3131
3232 let o = "_tokenInterestHeight"
3333
3434 let p = "_tokenRewardPerBlock"
3535
3636 let q = "rewardUpdateHeight"
3737
3838 let r = "_userLandInterest"
3939
4040 let s = "_userLendAvailableClaim"
4141
4242 let t = "_userLpAvailableClaim"
4343
4444 let u = "lpInterest"
4545
4646 let v = "lpInterestHeight"
4747
4848 let w = "prevLPTotalSupply"
4949
5050 let x = "lpRewardPerBlock"
5151
5252 let y = "_userLpInterest"
5353
5454 let z = "_twap5B"
5555
5656 let A = "_prevLendTotalSupply"
5757
5858 let B = "axlyTokenId"
5959
6060 let C = "total_supplied_"
6161
6262 let D = "_supplied_"
6363
6464 let E = "setup_tokens"
6565
6666 let F = "_total_share_tokens_locked"
6767
6868 let G = "_share_tokens_locked"
6969
7070 let H = "axlyPool"
7171
7272 let I = "share_asset_id"
7373
7474 let J = "price_oracle"
7575
7676 let K = "mainContract"
7777
7878 let L = "tokenomicContract"
7979
8080 let M = "swopfi_farming_addr"
8181
8282 let N = "lend_service_addr"
8383
8484 let O = "group1_admin1_pub_key"
8585
8686 let P = "group1_admin2_pub_key"
8787
8888 let Q = "group1_admin3_pub_key"
8989
9090 let R = "admin_call_pub_key"
9191
9292 let S = valueOrErrorMessage(getString(this, H), "Can't get axlyPool key")
9393
9494 let T = addressFromStringValue(valueOrErrorMessage(getString(this, K), "Can't get mainContact key"))
9595
9696 let U = addressFromStringValue(valueOrErrorMessage(getString(this, L), "Can't get tokenomicContract key"))
9797
9898 let V = addressFromStringValue(valueOrErrorMessage(getString(T, N), "Can't get lend_service_addr key"))
9999
100100 let W = addressFromStringValue(valueOrErrorMessage(getString(T, M), "Can't get swopfi_farming_addr key"))
101101
102102 let X = addressFromStringValue(valueOrErrorMessage(getString(T, J), "Can't get price_oracle key"))
103103
104104 let Y = fromBase58String(valueOrErrorMessage(getString(T, O), "Can't get admin1PK"))
105105
106106 let Z = fromBase58String(valueOrErrorMessage(getString(T, P), "Can't get admin2PK"))
107107
108108 let aa = fromBase58String(valueOrErrorMessage(getString(T, Q), "Can't get operatorPK"))
109109
110110 let ab = fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get operatorPK"))
111111
112112 let ac = valueOrErrorMessage(getString(U, B), "Can't get Axly token id")
113113
114114 let ad = getIntegerValue(this, h)
115115
116116 let ae = getIntegerValue(this, i)
117117
118118 let af = ((height - ad) / ae)
119119
120120 let ag = getIntegerValue(U, j)
121121
122122 let ah = (ag / d)
123123
124124 let ai = getIntegerValue(U, k)
125125
126126 let aj = (ai / g)
127127
128128 let ak = split(getStringValue(this, l), ",")
129129
130130 func al (am) = if (containsElement([Y, Z, aa], am.callerPublicKey))
131131 then unit
132132 else throw("Only admin group1 can call this function")
133133
134134
135135 func an (am) = if ((am.caller == this))
136136 then unit
137137 else throw("Only contract itself can call this function")
138138
139139
140140 func ao (am) = if ((am.callerPublicKey == ab))
141141 then unit
142142 else throw("Only operator can call this function")
143143
144144
145145 func ap (am) = if ((am.caller == V))
146146 then unit
147147 else throw("Only land contract can call this function")
148148
149149
150150 func aq (am) = if ((am.caller == W))
151151 then unit
152152 else throw("Only land contract can call this function")
153153
154154
155155 func ar (as) = getIntegerValue(X, (as + z))
156156
157157
158158 func at (as) = if ((as == "WAVES"))
159159 then 8
160160 else {
161161 let au = assetInfo(fromBase58String(as))
162162 if ($isInstanceOf(au, "Asset"))
163163 then {
164164 let av = au
165165 av.decimals
166166 }
167167 else throw("Can't find asset")
168168 }
169169
170170
171171 func aw (as) = pow(10, 0, at(as), 0, 0, DOWN)
172172
173173
174174 func ax (ay,az,aA) = {
175175 func aB (aC,aD) = {
176176 let aE = aC
177177 let aF = aE._1
178178 let aG = aE._2
179179 let aH = split(aD, "-")
180180 let aI = $Tuple2(parseIntValue(aH[0]), parseIntValue(aH[1]))
181181 let aJ = aI._1
182182 let aK = aI._2
183183 if (aG)
184184 then aC
185185 else if (if ((ay >= aJ))
186186 then (aK >= ay)
187187 else false)
188188 then $Tuple2(aF, true)
189189 else $Tuple2((aF + 1), false)
190190 }
191191
192192 let aL = {
193193 let aM = c
194194 let aN = size(aM)
195195 let aO = $Tuple2(0, false)
196196 func aP (aQ,aR) = if ((aR >= aN))
197197 then aQ
198198 else aB(aQ, aM[aR])
199199
200200 func aS (aQ,aR) = if ((aR >= aN))
201201 then aQ
202202 else throw("List size exceeds 9")
203203
204204 aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9)
205205 }
206206 let aF = aL._1
207207 let aG = aL._2
208208 if (aG)
209209 then fraction((b[aF] * a), 7, 365)
210210 else 0
211211 }
212212
213213
214214 func aT () = {
215215 func aB (aC,aU) = {
216216 let aV = aC
217217 let aW = aV._1
218218 let aX = aV._2
219219 let aY = aV._3
220220 let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
221221 let ba = ar(aU)
222222 let bb = aw(aU)
223223 let bc = fraction(aZ, ba, bb)
224224 $Tuple3((aW :+ aZ), (aX :+ bc), (aY + bc))
225225 }
226226
227227 let aM = ak
228228 let aN = size(aM)
229229 let aO = $Tuple3(nil, nil, 0)
230230 func aP (aQ,aR) = if ((aR >= aN))
231231 then aQ
232232 else aB(aQ, aM[aR])
233233
234234 func aS (aQ,aR) = if ((aR >= aN))
235235 then aQ
236236 else throw("List size exceeds 30")
237237
238238 aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
239239 }
240240
241241
242242 func bd (aU) = {
243243 let aZ = valueOrElse(getInteger(V, (C + aU)), 0)
244244 let ba = ar(aU)
245245 let bb = aw(aU)
246246 fraction(aZ, ba, bb)
247247 }
248248
249249
250250 func be (aU,aW) = if ((height >= ad))
251251 then 0
252252 else {
253253 let bf = getIntegerValue(this, (aU + p))
254254 let bg = getIntegerValue(this, (aU + n))
255255 let bh = getIntegerValue(this, (aU + o))
256256 let bi = ((height - bh) * bf)
257257 let bj = if ((aW > 0))
258258 then fraction(bi, a, aW)
259259 else 0
260260 (bg + bj)
261261 }
262262
263263
264264 func bk (aW) = if ((height >= ad))
265265 then 0
266266 else {
267267 let bf = getIntegerValue(this, x)
268268 let bg = getIntegerValue(this, u)
269269 let bh = getIntegerValue(this, v)
270270 let bi = ((height - bh) * bf)
271271 let bj = if ((aW > 0))
272272 then fraction(bi, a, aW)
273273 else 0
274274 (bg + bj)
275275 }
276276
277277
278278 func bl (bm,aU) = {
279279 let aW = valueOrElse(getInteger(V, (C + aU)), 0)
280280 let bn = be(aU, aW)
281281 let bo = valueOrElse(getInteger(V, ((bm + D) + aU)), 0)
282282 let bp = valueOrElse(getInteger(this, (((aU + "_") + bm) + r)), if ((bo == 0))
283283 then bn
284284 else 0)
285285 let bi = fraction(bo, (bn - bp), a)
286286 $Tuple3(bi, bn, bo)
287287 }
288288
289289
290290 func bq (bm) = {
291291 let aW = valueOrElse(getInteger(W, (S + F)), 0)
292292 let bn = bk(aW)
293293 let bo = valueOrElse(getInteger(V, (((S + "_") + bm) + G)), 0)
294294 let bp = valueOrElse(getInteger(this, (bm + y)), if ((bo == 0))
295295 then bn
296296 else 0)
297297 let bi = fraction(bo, (bn - bp), a)
298298 $Tuple3(bi, bn, bo)
299299 }
300300
301301
302302 func br (bm,bs) = {
303303 func bt (aC,aU) = {
304304 let bu = aC
305305 let bv = bu._1
306306 let bw = bu._2
307307 let bx = bu._3
308308 let by = bu._4
309309 let bz = valueOrElse(getInteger(this, (((aU + "_") + bm) + s)), 0)
310310 let bA = bl(bm, aU)
311311 let bB = bA._1
312312 let bC = bA._2
313313 let bo = bA._3
314314 let bD = (bz + bB)
315315 if (if ((bD > 0))
316316 then true
317317 else (bo > 0))
318318 then {
319319 let bE = if (if (bs)
320320 then true
321321 else (bD == 0))
322322 then by
323323 else (by ++ [IntegerEntry((((aU + "_") + bm) + r), bC), IntegerEntry((((aU + "_") + bm) + s), 0), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)])
324324 $Tuple4((bv :+ aU), (bw :+ bD), (bx + bD), bE)
325325 }
326326 else $Tuple4(bv, bw, bx, by)
327327 }
328328
329329 let aM = ak
330330 let aN = size(aM)
331331 let aO = $Tuple4(nil, nil, 0, nil)
332332 func aP (aQ,aR) = if ((aR >= aN))
333333 then aQ
334334 else bt(aQ, aM[aR])
335335
336336 func aS (aQ,aR) = if ((aR >= aN))
337337 then aQ
338338 else throw("List size exceeds 30")
339339
340340 aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
341341 }
342342
343343
344344 func bF (bm,bs) = {
345345 let bz = valueOrElse(getInteger(this, (bm + t)), 0)
346346 let bG = bq(bm)
347347 let bB = bG._1
348348 let bH = bG._2
349349 let bo = bG._3
350350 let bD = (bz + bB)
351351 if (if (bs)
352352 then true
353353 else (bD == 0))
354354 then $Tuple2(bD, nil)
355355 else $Tuple2(bD, [IntegerEntry((bm + y), bH), IntegerEntry((bm + t), 0), IntegerEntry(u, bH), IntegerEntry(v, height)])
356356 }
357357
358358
359359 func bI () = {
360360 let bJ = ar(ac)
361361 let bK = aw(ac)
362362 func bL (aA,aU) = {
363363 let bM = valueOrElse(getInteger(this, (aU + p)), 0)
364364 let bN = fraction(bM, bJ, bK)
365365 let bO = ((bN * ae) * 52)
366366 let aX = bd(aU)
367367 (aA :+ fraction(bO, a, aX))
368368 }
369369
370370 let bP = {
371371 let aM = ak
372372 let aN = size(aM)
373373 let aO = nil
374374 func aP (aQ,aR) = if ((aR >= aN))
375375 then aQ
376376 else bL(aQ, aM[aR])
377377
378378 func aS (aQ,aR) = if ((aR >= aN))
379379 then aQ
380380 else throw("List size exceeds 30")
381381
382382 aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
383383 }
384384 let bQ = getIntegerValue(W, (S + F))
385385 let bR = getStringValue(addressFromStringValue(S), I)
386386 let bS = aw(bR)
387387 let bT = {
388388 let bU = ({
389389 let bU = invoke(T, "getShareAssetPriceREADONLY", [[bR]], nil)
390390 if ($isInstanceOf(bU, "List[Any]"))
391391 then bU
392392 else throw(($getType(bU) + " couldn't be cast to List[Any]"))
393393 })[0]
394394 if ($isInstanceOf(bU, "Int"))
395395 then bU
396396 else throw(($getType(bU) + " couldn't be cast to Int"))
397397 }
398398 let bV = fraction(bQ, bT, bS)
399399 let bM = valueOrElse(getInteger(this, x), 0)
400400 let bN = fraction(bM, bJ, bK)
401401 let bO = ((bN * ae) * 52)
402402 let bW = fraction(bO, a, bV)
403403 $Tuple3(ak, bP, bW)
404404 }
405405
406406
407407 @Callable(am)
408408 func claimLenderRewards () = {
409409 let bX = br(toString(am.caller), false)
410410 if ((bX._3 == 0))
411411 then throw("claim amount must be greater than 0")
412412 else {
413413 let bY = invoke(U, "withdrawLendReward", [bX._3, toString(am.caller)], nil)
414414 if ((bY == bY))
415415 then bX._4
416416 else throw("Strict value is not equal to itself.")
417417 }
418418 }
419419
420420
421421
422422 @Callable(am)
423423 func claimLpRewards () = {
424424 let bX = bF(toString(am.caller), false)
425425 if ((bX._1 == 0))
426426 then throw("claim amount must be greater than 0")
427427 else {
428428 let bY = invoke(U, "withdrawLpReward", [bX._1, toString(am.caller)], nil)
429429 if ((bY == bY))
430430 then bX._2
431431 else throw("Strict value is not equal to itself.")
432432 }
433433 }
434434
435435
436436
437437 @Callable(am)
438438 func lendAction (bm,aU) = valueOrElse(ap(am), {
439439 let bz = valueOrElse(getInteger(this, (aU + s)), 0)
440440 let bZ = bl(bm, aU)
441441 let bB = bZ._1
442442 let bC = bZ._2
443443 [IntegerEntry((((bm + "_") + aU) + r), bC), IntegerEntry((((bm + "_") + aU) + s), (bz + bB)), IntegerEntry((aU + n), bC), IntegerEntry((aU + o), height)]
444444 })
445445
446446
447447
448448 @Callable(am)
449449 func lpAction (bm) = valueOrElse(aq(am), {
450450 let bz = valueOrElse(getInteger(this, t), 0)
451451 let ca = bq(bm)
452452 let bB = ca._1
453453 let bH = ca._2
454454 [IntegerEntry((bm + y), bH), IntegerEntry((bm + t), (bz + bB)), IntegerEntry((bm + u), bH), IntegerEntry((bm + v), height)]
455455 })
456456
457457
458458
459459 @Callable(am)
460460 func init (cb,cc,cd,ce,ae) = valueOrElse(an(am), if (!(isDefined(addressFromString(cb))))
461461 then throw("Wrong farming address")
462462 else if (!(isDefined(addressFromString(cc))))
463463 then throw("Wrong main contract address")
464464 else [StringEntry(K, cb), StringEntry(L, cc), StringEntry(H, cd), IntegerEntry(h, ce), IntegerEntry(i, ae), StringEntry(l, "")])
465465
466466
467467
468468 @Callable(am)
469469 func initNewToken (aU) = valueOrElse(al(am), if (isDefined(getInteger(this, (aU + n))))
470470 then throw("token already inited")
471471 else if (!(contains(getStringValue(V, E), aU)))
472472 then throw("no token on landing")
473- else [IntegerEntry((aU + n), 0), IntegerEntry((aU + o), height), StringEntry(l, makeString((ak :+ aU), ",")), IntegerEntry(p, 0)])
473+ else {
474+ let cf = if ((size(ak) == 0))
475+ then [aU]
476+ else (ak :+ aU)
477+[IntegerEntry((aU + n), 0), IntegerEntry((aU + o), max([ad, height])), StringEntry(l, makeString(cf, ",")), IntegerEntry((aU + p), 0)]
478+ })
474479
475480
476481
477482 @Callable(am)
478483 func updateRewards () = valueOrElse(ao(am), {
479- let cf = valueOrElse(getInteger(this, q), 0)
480- if (((cf + ae) > height))
484+ let cg = valueOrElse(getInteger(this, q), 0)
485+ if (((cg + ae) > height))
481486 then throw("rewards alredy updated in this period")
482487 else {
483- let cg = aT()
484- let aW = cg._1
485- let aX = cg._2
486- let aY = cg._3
488+ let ch = aT()
489+ let aW = ch._1
490+ let aX = ch._2
491+ let aY = ch._3
487492 let bJ = ar(ac)
488493 let bK = aw(ac)
489- let ch = ax(af, c, b)
490- func ci (aC,aU) = {
491- let cj = aC
492- let by = cj._1
493- let aF = cj._2
494+ let ci = ax(af, c, b)
495+ func cj (aC,aU) = {
496+ let ck = aC
497+ let by = ck._1
498+ let aF = ck._2
494499 if ((aW[aF] == 0))
495500 then $Tuple2((by ++ [IntegerEntry((aU + p), 0), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), height)]), (aF + 1))
496501 else {
497- let ck = fraction(aX[aF], a, aY)
498- let cl = fraction(ck, ah, a)
499- let cm = fraction(cl, bJ, bK)
500- let cn = valueOrElse(getInteger(this, A), 0)
501- let co = if (if ((cn == 0))
502+ let cl = fraction(aX[aF], a, aY)
503+ let cm = fraction(cl, ah, a)
504+ let cn = fraction(cm, bJ, bK)
505+ let co = valueOrElse(getInteger(this, A), 0)
506+ let cp = if (if ((co == 0))
502507 then true
503508 else (aW[aF] == 0))
504509 then 0
505- else fraction(cn, a, aW[aF])
506- let bi = (min([(ch * (a + co)), fraction(ch, (15 * a), 10)]) / a)
507- let cp = min([cm, fraction(aX[aF], bi, a)])
508- let cq = fraction(cp, bJ, bK)
509- let bf = (cq / ae)
510+ else fraction(co, a, aW[aF])
511+ let bi = (min([(ci * (a + cp)), fraction(ci, (15 * a), 10)]) / a)
512+ let cq = min([cn, fraction(aX[aF], bi, a)])
513+ let cr = fraction(cq, bJ, bK)
514+ let bf = (cr / ae)
510515 $Tuple2((by ++ [IntegerEntry((aU + A), aW[aF]), IntegerEntry((aU + p), bf), IntegerEntry((aU + n), be(aU, aW[aF])), IntegerEntry((aU + o), height)]), (aF + 1))
511516 }
512517 }
513518
514- let cr = {
519+ let cs = {
515520 let aM = ak
516521 let aN = size(aM)
517522 let aO = $Tuple2(nil, 0)
518523 func aP (aQ,aR) = if ((aR >= aN))
519524 then aQ
520- else ci(aQ, aM[aR])
525+ else cj(aQ, aM[aR])
521526
522527 func aS (aQ,aR) = if ((aR >= aN))
523528 then aQ
524529 else throw("List size exceeds 30")
525530
526531 aS(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aP(aO, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30)
527532 }
528- let cs = cr._1
529- let aF = cr._2
530- let ct = ax(af, f, e)
533+ let ct = cs._1
534+ let aF = cs._2
535+ let cu = ax(af, f, e)
531536 let bQ = getIntegerValue(W, (S + F))
532- let cu = valueOrElse(getInteger(this, w), 0)
537+ let cv = valueOrElse(getInteger(this, w), 0)
533538 let bR = getStringValue(addressFromStringValue(S), I)
534539 let bS = aw(bR)
535540 let bT = {
536541 let bU = ({
537542 let bU = invoke(T, "getShareAssetPriceREADONLY", [[bR]], nil)
538543 if ($isInstanceOf(bU, "List[Any]"))
539544 then bU
540545 else throw(($getType(bU) + " couldn't be cast to List[Any]"))
541546 })[0]
542547 if ($isInstanceOf(bU, "Int"))
543548 then bU
544549 else throw(($getType(bU) + " couldn't be cast to Int"))
545550 }
546551 let bV = fraction(bQ, bT, bS)
547- let cv = fraction(aj, bJ, bK)
548- let cw = if (if ((cu == 0))
552+ let cw = fraction(aj, bJ, bK)
553+ let cx = if (if ((cv == 0))
549554 then true
550555 else (bQ == 0))
551556 then 0
552- else fraction(cu, a, bQ)
553- let cx = (min([(ct * (a + cw)), fraction(ct, (15 * a), 10)]) / a)
554- let cy = min([cv, fraction(bV, cx, a)])
555- let cz = fraction(cy, bJ, bK)
556- let cA = (cz / ae)
557- let cB = [IntegerEntry(w, bQ), IntegerEntry(x, cA), IntegerEntry(u, bk(bQ)), IntegerEntry(v, height)]
558- ((cB ++ cs) :+ IntegerEntry(q, height))
557+ else fraction(cv, a, bQ)
558+ let cy = (min([(cu * (a + cx)), fraction(cu, (15 * a), 10)]) / a)
559+ let cz = min([cw, fraction(bV, cy, a)])
560+ let cA = fraction(cz, bJ, bK)
561+ let cB = (cA / ae)
562+ let cC = [IntegerEntry(w, bQ), IntegerEntry(x, cB), IntegerEntry(u, bk(bQ)), IntegerEntry(v, height)]
563+ ((cC ++ ct) :+ IntegerEntry(q, height))
559564 }
560565 })
561566
562567
563-@Verifier(cC)
564-func cD () = {
565- let cE = {
566- let cF = if (sigVerify(cC.bodyBytes, cC.proofs[0], Y))
568+@Verifier(cD)
569+func cE () = {
570+ let cF = {
571+ let cG = if (sigVerify(cD.bodyBytes, cD.proofs[0], Y))
567572 then 1
568573 else 0
569- let cG = if (sigVerify(cC.bodyBytes, cC.proofs[1], Z))
574+ let cH = if (sigVerify(cD.bodyBytes, cD.proofs[1], Z))
570575 then 1
571576 else 0
572- let cH = if (sigVerify(cC.bodyBytes, cC.proofs[2], aa))
577+ let cI = if (sigVerify(cD.bodyBytes, cD.proofs[2], aa))
573578 then 1
574579 else 0
575- (((cF + cG) + cH) >= 2)
580+ (((cG + cH) + cI) >= 2)
576581 }
577- let au = cC
582+ let au = cD
578583 if ($isInstanceOf(au, "InvokeScriptTransaction"))
579584 then {
580585 let bY = au
581- let cI = sigVerify(cC.bodyBytes, cC.proofs[0], cC.senderPublicKey)
582- let cJ = if ((bY.fee == 900000))
586+ let cJ = sigVerify(cD.bodyBytes, cD.proofs[0], cD.senderPublicKey)
587+ let cK = if ((bY.fee == 900000))
583588 then (bY.feeAssetId == unit)
584589 else false
585- let cK = (bY.function == "init")
586- let cL = (size(bY.payments) == 0)
587- if (if (if (if (cJ)
588- then cK
589- else false)
590- then cI
591- else false)
590+ let cL = (bY.function == "init")
591+ let cM = (size(bY.payments) == 0)
592+ if (if (if (if (cK)
592593 then cL
593594 else false)
595+ then cJ
596+ else false)
597+ then cM
598+ else false)
594599 then true
595- else cE
600+ else cF
596601 }
597- else cE
602+ else cF
598603 }
599604

github/deemru/w8io/169f3d6 
85.05 ms