tx · 5HCYZ5sZ7T97L6sD4uAdTCSoEiNoa79Y16oNJU5ZuvVS

3N7HtrKeFFLz5oy6PfGv1Lg3GwPk4gCPdGy:  -0.02200000 Waves

2024.11.17 21:42 [3375830] smart account 3N7HtrKeFFLz5oy6PfGv1Lg3GwPk4gCPdGy > SELF 0.00000000 Waves

{ "type": 13, "id": "5HCYZ5sZ7T97L6sD4uAdTCSoEiNoa79Y16oNJU5ZuvVS", "fee": 2200000, "feeAssetId": null, "timestamp": 1731868959124, "version": 2, "chainId": 84, "sender": "3N7HtrKeFFLz5oy6PfGv1Lg3GwPk4gCPdGy", "senderPublicKey": "FsR18761ZAsUqsTd7TK3XmR6bhihs1UXVmpHYxz5JzQ1", "proofs": [ "3QqrNzChwDiakE9yZmyQQskdoYynRHjTfSunLPy4ZqaL1PDsRjAJkVBexm1Ld6jQnELDtRNjxzsLSUYCnCPc1arX" ], "script": "base64:BgJCCAISBgoECAgICBIDCgEIEgMKAQESBAoCCAESAwoBARIECgIIARIAEgMKAQgSAwoBARIDCgEBEgASAwoBCBIDCgEIggEACkRBWV9NSUxMSVMAgLiZKQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABBhY3JlczJBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUDRVSDNUOW5YcE1OcFVtU21RalBtRXozRzg1dDN6bjZlQQMJAAACAQFUBQckbWF0Y2gwAiMzTkJQeDFGY2l1M0pRTkVHWjIxalNuVGR1dExOR0dCVVNYaAkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAOTUlOU0hPUFBBWU1FTlQAoI0GAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQANSWR4Q2ZnV2xnRGFwcAAEABRJZHhDZmdQdXp6bGVQb29sRGFwcAAFABRJZHhDZmdJbnZlc3RGdW5kRGFwcAAGAA9JZHhDZmdBY3Jlc0RhcHAACAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgEPa2V5UmVzdDJBZGRyZXNzAAINJXNfX3Jlc3QyQWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwABJwdXp6bGVQb29sQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdQdXp6bGVQb29sRGFwcAASaW52ZXN0RnVuZENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnSW52ZXN0RnVuZERhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHAADXdsZ0Fzc2V0SWRLZXkCC3dsZ19hc3NldElkAAp3bGdBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgULd2xnQ29udHJhY3QFDXdsZ0Fzc2V0SWRLZXkCGFdMR09MRCBpcyBub3QgaXNzdWVkIHlldAEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAPd2xnQmFzZUFtb3VudFhwAIDQ28P0AgEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyAAV4cFdsZwCQTgEJbGV2ZWxCeVhQAQJ4cAkAawMFDHhwTGV2ZWxTY2FsZQkAbAYFAnhwAAQFD3hwTGV2ZWxSZWNpcFBvdwAEAAQFBERPV04FBlNDQUxFOAEHbGV2ZWxVcAIJY3VyckxldmVsBW5ld1hQBAhuZXdMZXZlbAkBCWxldmVsQnlYUAEFBW5ld1hQCQDMCAIFCG5ld0xldmVsCQDMCAIJAGgCBRJudW1Qb2ludHNPbkxldmVsVXAJAGUCBQhuZXdMZXZlbAUJY3VyckxldmVsBQNuaWwACE1JTExJT042AICA6YOx3hYAC1BMQVlFUlNIQVJFAIC1GAAJREFZTUlMTElTAIC4mSkAC3RlYW1BZGRyS2V5Agh0ZWFtQWRkcgAPbGFzdFRlYW1UaW1lS2V5AhRsYXN0Q2xhaW1lZFRpbWVfdGVhbQARdGVhbUFtb3VudExlZnRLZXkCDnRlYW1BbW91bnRMZWZ0ABVsYXN0QWN0aXZpdGllc1RpbWVLZXkCGmxhc3RDbGFpbWVkVGltZV9hY3Rpdml0aWVzABBhY3RBbW91bnRMZWZ0S2V5AhRhY3Rpdml0aWVzQW1vdW50TGVmdAAUc3Rha2Vyc0Ftb3VudExlZnRLZXkCEXN0YWtlcnNBbW91bnRMZWZ0ARlrZXlMYXN0V2xnVHJhZGVUaW1lQnlVc2VyAQRhZGRyCQCsAgICEGxhc3RBcmJUaW1lVXNlcl8FBGFkZHIBGmtleUxhc3RXbGdUcmFkZUxpbWl0QnlVc2VyAQRhZGRyCQCsAgICEWxhc3RXbGdMaW1pdFVzZXJfBQRhZGRyAA93bGdJc3N1ZVRpbWVLZXkCDXdsZ19pc3N1ZVRpbWUAEndsZ0lzc3VlZEFtb3VudEtleQIQd2xnX2lzc3VlZEFtb3VudAEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBGFkZHIJAKwCAgIYYWNyZXNTdGFrZWRBbW91bnRCeVVzZXJfBQRhZGRyARhrZXlXbGdTdGFrZWRBbW91bnRCeVVzZXIBBGFkZHIJAKwCAgIWd2xnU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgARd2xnU3Rha2VkVG90YWxLZXkCFHdsZ1N0YWtlZEFtb3VudFRvdGFsARZrZXlXbGdTdGFrZWRUaW1lQnlVc2VyAQRhZGRyCQCsAgICFHdsZ1N0YWtlZFRpbWVCeVVzZXJfBQRhZGRyAANNNl8AwIQ9AANNOF8AgMLXLwAKVEVBTV9TSEFSRQDAmgwADkFDVElWSVRZX1NIQVJFAKCNBgAMUExBWUVSX1NIQVJFAIC1GAALWUVBUl9NSUxMSVMAgIbrx3UABkRBWV9NUwCAuJkpAApEQVlfQkxPQ0tTAKALAAdJU1NVRTEwAICU69wDAA9QTEFZRVJTMTBfU0hBUkUAgOowABFNQVJLRVRJTkcxMF9TSEFSRQCgjQYADFRFQU0xMF9TSEFSRQCgjQYAEU5FV19TVEFLSU5HX1NUQVJUAIDzuMKxMgAQbWFya2V0aW5nQWRkcktleQINbWFya2V0aW5nQWRkcgAKdGVhbUFkcktleQIIdGVhbUFkZHIADmxhc3RUZWFtVGltS2V5AhRsYXN0Q2xhaW1lZFRpbWVfdGVhbQAOdGVhbUFtdExlZnRLZXkCDnRlYW1BbW91bnRMZWZ0ABRsYXN0QWN0aXZpdGllc1RpbUtleQIabGFzdENsYWltZWRUaW1lX2FjdGl2aXRpZXMADWFjdEFtdExlZnRLZXkCFGFjdGl2aXRpZXNBbW91bnRMZWZ0ABFzdGFrZXJzQW10TGVmdEtleQIRc3Rha2Vyc0Ftb3VudExlZnQBFmtleUxhc3RDbGFpbVRpbWVCeVVzZXIBBGFkZHIJAKwCAgIUbGFzdENsYWltZWRUaW1lVXNlcl8FBGFkZHIBDWRpc3RyQnlQZXJpb2QCDGlzc3VlZEFtb3VudAZwZXJpb2QJAGsDBQxpc3N1ZWRBbW91bnQJAGgCBQxQTEFZRVJfU0hBUkUJAGQCBQZwZXJpb2QAAQkAaAIABgUDTTZfABF3bGdJc3N1ZTEwVGltZUtleQIPd2xnX2lzc3VlMTBUaW1lAA53bGdJc3N1ZVRpbUtleQINd2xnX2lzc3VlVGltZQAPd2xnSXNzdWVkQW10S2V5AhB3bGdfaXNzdWVkQW1vdW50AA56Yklzc3VlZEFtdEtleQISemJpbGxfaXNzdWVkQW1vdW50ARdrZXlBY3Jlc1N0YWtlZEFtdEJ5VXNlcgEEYWRkcgkArAICAhhhY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcl8FBGFkZHIAFHRvdGFsRmFybWluZ1Bvd2VyS2V5AhF0b3RhbEZhcm1pbmdQb3dlcgAJZGFwcDJSZXN0AAAADGRhcHAyU3Rha2luZwABAAhkYXBwMldsZwACAAtkYXBwMlB1enpsZQADAA9kYXBwMkludmVzdEZ1bmQABAAKbGV2ZWxBY3JlcwkAzAgCAAAJAMwIAgAKCQDMCAIAFAkAzAgCACgJAMwIAgBQCQDMCAIAlgEJAMwIAgD6AQkAzAgCAJADCQDMCAIAvAUJAMwIAgDoBwUDbmlsAQ9nZXRMZXZlbEJ5QWNyZXMBBWFjcmVzBANhY3IJAGkCCQBkAgUFYWNyZXMA/8HXLwUDTThfCgEHY2hlY2tlcgIDYWNjBGl0ZW0DCQBnAgUEaXRlbQUDYWNyBQNhY2MJAGQCBQNhY2MAAQoAAiRsBQpsZXZlbEFjcmVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARZnZXRGYXJtaW5nUG93ZXJCeUFjcmVzAQVhY3JlcwkAaAIJAGgCBQVhY3JlcwAUCQBkAgkBD2dldExldmVsQnlBY3JlcwEFBWFjcmVzAAQBEGdldEZhcm1pbmdQb3dlcnMCEnVzZXJBZGRyU3RyT3JFbXB0eQ5hY3JlczJDb250cmFjdAQHdG90YWxGUAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5hY3JlczJDb250cmFjdAUUdG90YWxGYXJtaW5nUG93ZXJLZXkAAAQJdXNlckFjcmVzCQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0CQEXa2V5QWNyZXNTdGFrZWRBbXRCeVVzZXIBBRJ1c2VyQWRkclN0ck9yRW1wdHkAAAQGdXNlckZQCQEWZ2V0RmFybWluZ1Bvd2VyQnlBY3JlcwEFCXVzZXJBY3JlcwkAzAgCBQd0b3RhbEZQCQDMCAIFBnVzZXJGUAUDbmlsAQprZXlVc2VyQmV0AQRhZGRyCQCsAgICCHVzZXJCZXRfBQRhZGRyAQ5rZXlVc2VyVGlja2V0cwEEYWRkcgkArAICAgx1c2VyVGlja2V0c18FBGFkZHIAD2tleVRvdGFsVGlja2V0cwIMdG90YWxUaWNrZXRzAQp3aW5uaW5nQmV0AQNkYXkJAGoCCQCxCQEJAQV2YWx1ZQEICQEFdmFsdWUBCQDtBwEJAGgCBQNkYXkFCkRBWV9CTE9DS1MDdnJmAAQACmlkeFRvdGFsRlAAAAAJaWR4VXNlckZQAAEAC2l4V2xnQW1vdW50AAAACGl4V2xnV2xnAAEACml4V2xnUHJpY2UAAgAOaXhXbGdJc3N1ZVRpbWUACAAPaXhXbGdUZWFtQW1MZWZ0AAsAE2l4V2xnVGVhbUFtQXZhaWxOb3cADAAOaXhXbGdBY3RBbUxlZnQADwASaXhXbGdBY3RBbUF2YWlsTm93ABAAEGl4V2xnQW1MZWZ0VG90YWwAEwATaXhXbGdVc2VyQW1BdmFpbE5vdwAXABBpeFdsZ0VmZlVzZXJUaW1lABgAEml4V2xnSXNzdWUxMEFtb3VudAAZABtpeFdsZ01hcmtldGluZ0lzc3VlMTBBbW91bnQAGgAWaXhXbGdUZWFtSXNzdWUxMEFtb3VudAAbAA9peFdsZ1VzZXIxMHBhcnQAHAAQaXhXbGdJc3N1ZTEwVGltZQAdAQxnZXRXbGdTdGF0czIEC3VzZXJBZGRyT3B0CWNvbnRyYWN0cwZ1c2R0SWQVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBAxpc3N1ZWRBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFD3dsZ0lzc3VlZEFtdEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0BAdyZXN0VXNkCQDwBwIJAJEDAgUJY29udHJhY3RzBQlkYXBwMlJlc3QFBnVzZHRJZAQGd2xnVXNkCQBlAgkA8AcCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFBnVzZHRJZAUVdXNkdEJhbGFuY2VDb3JyZWN0aW9uBAlwdXp6bGVVc2QJAPAHAgkAkQMCBQljb250cmFjdHMFC2RhcHAyUHV6emxlBQZ1c2R0SWQECWFjcmVzMlVzZAkA8AcCCQCRAwIFCWNvbnRyYWN0cwUMZGFwcDJTdGFraW5nBQZ1c2R0SWQEEWludmVzdEZuZENvbnRyYWN0CQCRAwIFCWNvbnRyYWN0cwUPZGFwcDJJbnZlc3RGdW5kBA9pbnZlc3RGdW5kVG90YWwJAGQCCQDwBwIFEWludmVzdEZuZENvbnRyYWN0BQZ1c2R0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgURaW52ZXN0Rm5kQ29udHJhY3QFDnpiSXNzdWVkQW10S2V5AAAEDXRvdGFsRnVuZHNVc2QJAGQCCQBkAgUJYWNyZXMyVXNkBQZ3bGdVc2QFD2ludmVzdEZ1bmRUb3RhbAQFd2xnSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcCC3dsZ19hc3NldElkAhNOb3QgaW5pdGlhbGl6ZWQgeWV0BANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlpc3N1ZVRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDndsZ0lzc3VlVGltS2V5Ag9Ob3QgaW5pdGlhbGl6ZWQEBndsZ1dsZwkA8AcCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFBXdsZ0lkBAl0ZWFtVG90YWwJAGsDBQxpc3N1ZWRBbW91bnQFClRFQU1fU0hBUkUFA002XwQOdGVhbUFtb3VudExlZnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBQ50ZWFtQW10TGVmdEtleQUJdGVhbVRvdGFsBAxsYXN0VGVhbVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBQ5sYXN0VGVhbVRpbUtleQUJaXNzdWVUaW1lBAh0ZWFtQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQkAnQgCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFCnRlYW1BZHJLZXkEFnRlYW1BbW91bnRBdmFpbGFibGVOb3cJAJcDAQkAzAgCCQBrAwUJdGVhbVRvdGFsCQBlAgUDbm93BQxsYXN0VGVhbVRpbWUJAGgCAAMFC1lFQVJfTUlMTElTCQDMCAIFDnRlYW1BbW91bnRMZWZ0BQNuaWwECnRlYW1XbGdvbGQJAPAHAgUIdGVhbUFkZHIFBXdsZ0lkBAhhY3RUb3RhbAkAawMFDGlzc3VlZEFtb3VudAUOQUNUSVZJVFlfU0hBUkUFA002XwQNYWN0QW1vdW50TGVmdAkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFDWFjdEFtdExlZnRLZXkFCGFjdFRvdGFsBBJsYXN0QWN0aXZpdGllc1RpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBRRsYXN0QWN0aXZpdGllc1RpbUtleQUJaXNzdWVUaW1lBBVhY3RBbW91bnRBdmFpbGFibGVOb3cJAJcDAQkAzAgCCQBrAwUIYWN0VG90YWwJAGUCBQNub3cFEmxhc3RBY3Rpdml0aWVzVGltZQkAaAIAAwULWUVBUl9NSUxMSVMJAMwIAgUNYWN0QW1vdW50TGVmdAUDbmlsBAlhY3RXbGdvbGQJAPAHAgkAkQMCBQljb250cmFjdHMFCWRhcHAyUmVzdAUFd2xnSWQEDGxhc3RVc2VyVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcJARZrZXlMYXN0Q2xhaW1UaW1lQnlVc2VyAQULdXNlckFkZHJPcHQFCWlzc3VlVGltZQQObGFzdFVzZXJQZXJpb2QJAGkCCQBlAgUMbGFzdFVzZXJUaW1lBQlpc3N1ZVRpbWUFC1lFQVJfTUlMTElTBApub3dMaW1pdGVkCQCXAwEJAMwIAgUDbm93CQDMCAIJAGQCBQlpc3N1ZVRpbWUJAGgCAAMFC1lFQVJfTUlMTElTBQNuaWwECWN1clBlcmlvZAkAlwMBCQDMCAIJAGkCCQBlAgUDbm93BQlpc3N1ZVRpbWUFC1lFQVJfTUlMTElTCQDMCAIAAgUDbmlsBANlZmYJARBnZXRGYXJtaW5nUG93ZXJzAgULdXNlckFkZHJPcHQJAJEDAgUJY29udHJhY3RzBQxkYXBwMlN0YWtpbmcEFWN1clBlcmlvZERpc3RyaWJ1dGlvbgkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQFCWN1clBlcmlvZAQNcHJldlBlcmlvZEVuZAkAZAIFCWlzc3VlVGltZQkAaAIFC1lFQVJfTUlMTElTBQljdXJQZXJpb2QEEXByZXZQcmV2UGVyaW9kRW5kCQBkAgUJaXNzdWVUaW1lCQBoAgULWUVBUl9NSUxMSVMJAGUCBQljdXJQZXJpb2QAAQQCYTAJAGsDBRVjdXJQZXJpb2REaXN0cmlidXRpb24JAGUCBQpub3dMaW1pdGVkBQxsYXN0VXNlclRpbWUFC1lFQVJfTUlMTElTBA11c2VyQXZhaWxhYmxlAwkAAAIFDmxhc3RVc2VyUGVyaW9kBQljdXJQZXJpb2QFAmEwAwkAAAIFDmxhc3RVc2VyUGVyaW9kCQBlAgUJY3VyUGVyaW9kAAEEAmExCQBrAwkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAQkAZQIFDXByZXZQZXJpb2RFbmQFDGxhc3RVc2VyVGltZQULWUVBUl9NSUxMSVMJAGQCBQJhMQUCYTAEAmEyCQBrAwkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAgkAZQIFEXByZXZQcmV2UGVyaW9kRW5kBQxsYXN0VXNlclRpbWUFC1lFQVJfTUlMTElTBAJhMQkBDWRpc3RyQnlQZXJpb2QCBQxpc3N1ZWRBbW91bnQJAGUCBQljdXJQZXJpb2QAAQkAZAIJAGQCBQJhMgUCYTEFAmEwBA9hbW91bnRMZWZ0VG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgkAkQMCBQljb250cmFjdHMFCGRhcHAyV2xnBRFzdGFrZXJzQW10TGVmdEtleQAABAp1c2VyQW1vdW50AwkBAiE9AgkAkQMCBQNlZmYFCmlkeFRvdGFsRlAAAAkAawMFDXVzZXJBdmFpbGFibGUJAJEDAgUDZWZmBQlpZHhVc2VyRlAJAJEDAgUDZWZmBQppZHhUb3RhbEZQAAAED2xhc3RJc3N1ZTEwVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCCQCRAwIFCWNvbnRyYWN0cwUIZGFwcDJXbGcFEXdsZ0lzc3VlMTBUaW1lS2V5BRFORVdfU1RBS0lOR19TVEFSVAQNaXNzdWUxMEFtb3VudAkAawMFB0lTU1VFMTAJAJYDAQkAzAgCCQBlAgUDbm93BQ9sYXN0SXNzdWUxMFRpbWUJAMwIAgAABQNuaWwFBkRBWV9NUwQWbWFya2V0aW5nSXNzdWUxMEFtb3VudAkAawMFDWlzc3VlMTBBbW91bnQFEU1BUktFVElORzEwX1NIQVJFBQNNNl8EEXRlYW1Jc3N1ZTEwQW1vdW50CQBrAwUNaXNzdWUxMEFtb3VudAUMVEVBTTEwX1NIQVJFBQNNNl8EDnVzZXIxMEludGVydmFsCQCWAwEJAMwIAgkAZQIFA25vdwkAlgMBCQDMCAIFEU5FV19TVEFLSU5HX1NUQVJUCQDMCAIFDGxhc3RVc2VyVGltZQUDbmlsCQDMCAIAAAUDbmlsBAp1c2VyMTBwYXJ0AwkBAiE9AgkAkQMCBQNlZmYFCmlkeFRvdGFsRlAAAAkAawMJAGsDCQBrAwUHSVNTVUUxMAUOdXNlcjEwSW50ZXJ2YWwFBkRBWV9NUwkAkQMCBQNlZmYFCWlkeFVzZXJGUAkAkQMCBQNlZmYFCmlkeFRvdGFsRlAFD1BMQVlFUlMxMF9TSEFSRQUDTTZfAAAEDm5ld0lzc3VlMTBUaW1lCQCWAwEJAMwIAgURTkVXX1NUQUtJTkdfU1RBUlQJAMwIAgUDbm93BQNuaWwJAMwIAgUMaXNzdWVkQW1vdW50CQDMCAIFBndsZ1dsZwkAzAgCCQBrAwUNdG90YWxGdW5kc1VzZAUDTThfBQxpc3N1ZWRBbW91bnQJAMwIAgUNdG90YWxGdW5kc1VzZAkAzAgCBQdyZXN0VXNkCQDMCAIFCWFjcmVzMlVzZAkAzAgCBQZ3bGdVc2QJAMwIAgUJcHV6emxlVXNkCQDMCAIFCWlzc3VlVGltZQkAzAgCBQxsYXN0VGVhbVRpbWUJAMwIAgUJdGVhbVRvdGFsCQDMCAIFDnRlYW1BbW91bnRMZWZ0CQDMCAIFFnRlYW1BbW91bnRBdmFpbGFibGVOb3cJAMwIAgUKdGVhbVdsZ29sZAkAzAgCBQhhY3RUb3RhbAkAzAgCBQ1hY3RBbW91bnRMZWZ0CQDMCAIFFWFjdEFtb3VudEF2YWlsYWJsZU5vdwkAzAgCBQlhY3RXbGdvbGQJAMwIAgUJY3VyUGVyaW9kCQDMCAIFD2Ftb3VudExlZnRUb3RhbAkAzAgCBRVjdXJQZXJpb2REaXN0cmlidXRpb24JAMwIAgUMbGFzdFVzZXJUaW1lCQDMCAIFD2ludmVzdEZ1bmRUb3RhbAkAzAgCBQp1c2VyQW1vdW50CQDMCAIFCm5vd0xpbWl0ZWQJAMwIAgUNaXNzdWUxMEFtb3VudAkAzAgCBRZtYXJrZXRpbmdJc3N1ZTEwQW1vdW50CQDMCAIFEXRlYW1Jc3N1ZTEwQW1vdW50CQDMCAIFCnVzZXIxMHBhcnQJAMwIAgUObmV3SXNzdWUxMFRpbWUJAMwIAgkAkQMCBQNlZmYFCmlkeFRvdGFsRlAFA25pbAADbmV0CQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABABZkZWZhdWx0UmVzdDJBZGRyZXNzU3RyBAckbWF0Y2gwBQNuZXQDCQAAAgEBVwUHJG1hdGNoMAIjM1BGd1l0YThiaUV6MzF6cGVGZTVESks4d0U1dHJTcFFWRjgDCQAAAgEBVAUHJG1hdGNoMAIjM043VXVZYXI2MjY0UDU4RkJoVldLUFFBaDRZdWEyaGduZ3YJAAIBAg1Vbmtub3duIGNoYWluAA1wcm9maXRBZGRyS2V5Agpwcm9maXRBZGRyABlzdGFrZXJzQW1vdW50UGFpZFRvdGFsS2V5AhZzdGFrZXJzQW1vdW50UGFpZFRvdGFsARhrZXlTdGFrZXJzQW1vdW50UGFpZFVzZXIBBGFkZHIJAKwCAgIWc3Rha2Vyc0Ftb3VudFBhaWRVc2VyXwUEYWRkcgANcmVzdDJDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEPa2V5UmVzdDJBZGRyZXNzAAUWZGVmYXVsdFJlc3QyQWRkcmVzc1N0cgAOYWNyZXMyQ29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEFEGFjcmVzMkFkZHJlc3NTdHIBB3Byb2xvZzIACQEFYXNJbnQBCQD9BwQFDmFjcmVzMkNvbnRyYWN0AgpzYXZlTGFzdFR4BQNuaWwFA25pbAESZ2V0U3dhcExpbWl0V2xnb2xkAQRhZGRyBAhsYXN0VGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEZa2V5TGFzdFdsZ1RyYWRlVGltZUJ5VXNlcgEFBGFkZHIAAAQMZGVmYXVsdExpbWl0CQELdmFsdWVPckVsc2UCCQCaCAIFDmFjcmVzMkNvbnRyYWN0CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQRhZGRyAAAEDWxhc3RMaW1pdExlZnQJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBGmtleUxhc3RXbGdUcmFkZUxpbWl0QnlVc2VyAQUEYWRkcgUMZGVmYXVsdExpbWl0BAxjdXJyZW50TGltaXQJAGQCBQ1sYXN0TGltaXRMZWZ0CQBrAwUMZGVmYXVsdExpbWl0CQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCGxhc3RUaW1lBQpEQVlfTUlMTElTCQCXAwEJAMwIAgUMY3VycmVudExpbWl0CQDMCAIFDGRlZmF1bHRMaW1pdAUDbmlsAQ5jbGFpbUludGVybmFsMgEEYWRkcgQIY3VyU3RhdHMJAQxnZXRXbGdTdGF0czIEBQRhZGRyCQDMCAIFDXJlc3QyQ29udHJhY3QJAMwIAgUOYWNyZXMyQ29udHJhY3QJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUScHV6emxlUG9vbENvbnRyYWN0CQDMCAIFEmludmVzdEZ1bmRDb250cmFjdAUDbmlsBQt1c2R0QXNzZXRJZAAABAt1c2VyVGltZUtleQkBFmtleUxhc3RDbGFpbVRpbWVCeVVzZXIBBQRhZGRyBAxsYXN0VXNlclRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQULdXNlclRpbWVLZXkAAAQLdXNlckVmZlRpbWUJAJEDAgUIY3VyU3RhdHMFEGl4V2xnRWZmVXNlclRpbWUDCQAAAgUMbGFzdFVzZXJUaW1lBQt1c2VyRWZmVGltZQkAlAoCBQNuaWwAAAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJaXNzdWVUaW1lCQCRAwIFCGN1clN0YXRzBQ5peFdsZ0lzc3VlVGltZQQOdGVhbUFtb3VudExlZnQJAJEDAgUIY3VyU3RhdHMFD2l4V2xnVGVhbUFtTGVmdAQKdGVhbUFtb3VudAkAZAIJAJEDAgUIY3VyU3RhdHMFE2l4V2xnVGVhbUFtQXZhaWxOb3cJAJEDAgUIY3VyU3RhdHMFFml4V2xnVGVhbUlzc3VlMTBBbW91bnQEDHRlYW1UcmFuc2ZlcgMJAGYCBQp0ZWFtQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQkAoggBBQt0ZWFtQWRkcktleQUKdGVhbUFtb3VudAUKd2xnQXNzZXRJZAUDbmlsBQNuaWwEDWFjdEFtb3VudExlZnQJAJEDAgUIY3VyU3RhdHMFDml4V2xnQWN0QW1MZWZ0BAlhY3RBbW91bnQJAJEDAgUIY3VyU3RhdHMFEml4V2xnQWN0QW1BdmFpbE5vdwQLYWN0VHJhbnNmZXIDCQBmAgUJYWN0QW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQlhY3RBbW91bnQFCndsZ0Fzc2V0SWQFA25pbAUDbmlsBA9tYXJrZXRpbmdBbW91bnQJAJEDAgUIY3VyU3RhdHMFG2l4V2xnTWFya2V0aW5nSXNzdWUxMEFtb3VudAQRbWFya2V0aW5nVHJhbnNmZXIDCQBmAgUPbWFya2V0aW5nQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQkAoggBBRBtYXJrZXRpbmdBZGRyS2V5BQ9tYXJrZXRpbmdBbW91bnQFCndsZ0Fzc2V0SWQFA25pbAUDbmlsBAp1c2VyQW1vdW50CQCRAwIFCGN1clN0YXRzBRNpeFdsZ1VzZXJBbUF2YWlsTm93BAd1c2VyS2V5CQEYa2V5U3Rha2Vyc0Ftb3VudFBhaWRVc2VyAQUEYWRkcgQJdXNlclRvdGFsCQBkAgUKdXNlckFtb3VudAkAkQMCBQhjdXJTdGF0cwUPaXhXbGdVc2VyMTBwYXJ0BA5pc3N1ZWQxMEFtb3VudAkAkQMCBQhjdXJTdGF0cwUSaXhXbGdJc3N1ZTEwQW1vdW50CQCUCgIJAM4IAgkAzggCCQDOCAIJAMwIAgkBB1JlaXNzdWUDBQp3bGdBc3NldElkBQ5pc3N1ZWQxMEFtb3VudAYJAMwIAgkBDEludGVnZXJFbnRyeQIFEndsZ0lzc3VlZEFtb3VudEtleQkAZAIJAJEDAgUIY3VyU3RhdHMFC2l4V2xnQW1vdW50BQ5pc3N1ZWQxMEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgURd2xnSXNzdWUxMFRpbWVLZXkJAJEDAgUIY3VyU3RhdHMFEGl4V2xnSXNzdWUxMFRpbWUJAMwIAgkBDEludGVnZXJFbnRyeQIFB3VzZXJLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFB3VzZXJLZXkAAAUKdXNlckFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUZc3Rha2Vyc0Ftb3VudFBhaWRUb3RhbEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUZc3Rha2Vyc0Ftb3VudFBhaWRUb3RhbEtleQAABQp1c2VyQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRzdGFrZXJzQW1vdW50TGVmdEtleQkAZQIJAJEDAgUIY3VyU3RhdHMFEGl4V2xnQW1MZWZ0VG90YWwFCnVzZXJBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEXRlYW1BbW91bnRMZWZ0S2V5CQBkAgkAZQIFDnRlYW1BbW91bnRMZWZ0BQp0ZWFtQW1vdW50CQCRAwIFCGN1clN0YXRzBRZpeFdsZ1RlYW1Jc3N1ZTEwQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9sYXN0VGVhbVRpbWVLZXkFA25vdwkAzAgCCQEMSW50ZWdlckVudHJ5AgUQYWN0QW1vdW50TGVmdEtleQkAZQIFDWFjdEFtb3VudExlZnQFCWFjdEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgUVbGFzdEFjdGl2aXRpZXNUaW1lS2V5BQNub3cJAMwIAgkBDEludGVnZXJFbnRyeQIFC3VzZXJUaW1lS2V5BQt1c2VyRWZmVGltZQUDbmlsBQx0ZWFtVHJhbnNmZXIFC2FjdFRyYW5zZmVyBRFtYXJrZXRpbmdUcmFuc2ZlcgUJdXNlclRvdGFsAQ50YWtlWHBJbnRlcm5hbAIEYWRkcgVkZWx0YQQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQHdGltZUtleQkBFmtleVdsZ1N0YWtlZFRpbWVCeVVzZXIBBQRhZGRyBAlhbW91bnRLZXkJARhrZXlXbGdTdGFrZWRBbW91bnRCeVVzZXIBBQRhZGRyBAhsYXN0VGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQd0aW1lS2V5AAAEB29sZFVzZXIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJYW1vdW50S2V5AAAECG9sZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEXdsZ1N0YWtlZFRvdGFsS2V5AAAEAnhwCQBrAwkAawMFBXhwV2xnBQdvbGRVc2VyBQ93bGdCYXNlQW1vdW50WHAJAGUCBQhsYXN0VGltZQUDbm93BQlEQVlNSUxMSVMJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQUDbm93CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlhbW91bnRLZXkJAGQCBQdvbGRVc2VyBQVkZWx0YQkAzAgCCQEMSW50ZWdlckVudHJ5AgURd2xnU3Rha2VkVG90YWxLZXkJAGQCBQhvbGRUb3RhbAUFZGVsdGEFA25pbAUCeHAFB29sZFVzZXIBFGNsYWltVGlja2V0c0ludGVybmFsAgRhZGRyCnVzZXJCZXRTdHIED3RvdGFsVGlja2V0c0tleQUPa2V5VG90YWxUaWNrZXRzBAp0aWNrZXRzS2V5CQEOa2V5VXNlclRpY2tldHMBBQRhZGRyBAZiZXRLZXkJAQprZXlVc2VyQmV0AQUEYWRkcgQGZGF5QmV0CQC1CQIFCnVzZXJCZXRTdHICAV8ED29sZFRvdGFsVGlja2V0cwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ90b3RhbFRpY2tldHNLZXkAAAQKb2xkVGlja2V0cwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQp0aWNrZXRzS2V5AAAEDGRlbHRhVGlja2V0cwMJAAACCQEKd2lubmluZ0JldAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZkYXlCZXQAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBmRheUJldAABAAEAAAkAlQoDAwkAAAIFDGRlbHRhVGlja2V0cwAABQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIFCnRpY2tldHNLZXkJAGQCBQpvbGRUaWNrZXRzBQxkZWx0YVRpY2tldHMJAMwIAgkBDEludGVnZXJFbnRyeQIFD3RvdGFsVGlja2V0c0tleQkAZAIFD29sZFRvdGFsVGlja2V0cwUMZGVsdGFUaWNrZXRzBQNuaWwJAQtEZWxldGVFbnRyeQEFBmJldEtleQUMZGVsdGFUaWNrZXRzDQFpAQ1jb25zdHJ1Y3RvclYxBAhyZXN0QWRkcg1tYXJrZXRpbmdBZGRyCHRlYW1BZGRyCnByb2ZpdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAMJAQlpc0RlZmluZWQBCQChCAEFDXdsZ0Fzc2V0SWRLZXkJAAIBAhNBbHJlYWR5IGluaXRpYWxpemVkBAxpc3N1ZWRBbW91bnQFCE1JTExJT042BAVpc3N1ZQkAwwgHAgZXTEdPTEQCIFdhdmVzTGFuZHMgR29sZCBpbnZlc3RtZW50IHRva2VuBQxpc3N1ZWRBbW91bnQACAYFBHVuaXQAAAQHYXNzZXRJZAkAuAgBBQVpc3N1ZQkAzAgCBQVpc3N1ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUPd2xnSXNzdWVUaW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSd2xnSXNzdWVkQW1vdW50S2V5BQxpc3N1ZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFGXN0YWtlcnNBbW91bnRQYWlkVG90YWxLZXkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUUc3Rha2Vyc0Ftb3VudExlZnRLZXkJAGsDBQhNSUxMSU9ONgULUExBWUVSU0hBUkUFBU1VTFQ2CQDMCAIJAQtCaW5hcnlFbnRyeQIFDXdsZ0Fzc2V0SWRLZXkFB2Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUQbWFya2V0aW5nQWRkcktleQUNbWFya2V0aW5nQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQt0ZWFtQWRkcktleQUIdGVhbUFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUNcHJvZml0QWRkcktleQUKcHJvZml0QWRkcgUDbmlsAWkBDWNvbnN0cnVjdG9yVjIBCXJlc3QyQWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlSZXN0MkFkZHJlc3MABQlyZXN0MkFkZHIFA25pbAFpAQZidXlXbGcBDG1pblRvUmVjZWl2ZQQMcHJvbG9nUmVzdWx0CQEHcHJvbG9nMgADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQHdXNkdEFtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEBmNhbGxlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBmNhbGxlcgMJAGYCBQ5NSU5TSE9QUEFZTUVOVAUHdXNkdEFtdAkAAgEJAKwCAgkArAICAhJZb3UgY2FuIHRyYWRlIG1pbiAJAQpmaXhlZFBvaW50AgUOTUlOU0hPUFBBWU1FTlQABgIFIFVTRFQECGN1clN0YXRzCQEMZ2V0V2xnU3RhdHMyBAIACQDMCAIFDXJlc3QyQ29udHJhY3QJAMwIAgUOYWNyZXMyQ29udHJhY3QJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUScHV6emxlUG9vbENvbnRyYWN0CQDMCAIFEmludmVzdEZ1bmRDb250cmFjdAUDbmlsBQt1c2R0QXNzZXRJZAUHdXNkdEFtdAQMY3VyV2xnQW1vdW50CQCRAwIFCGN1clN0YXRzBQtpeFdsZ0Ftb3VudAQId2xnUHJpY2UJAJEDAgUIY3VyU3RhdHMFCml4V2xnUHJpY2UECGJ1eVByaWNlCQBuBAUId2xnUHJpY2UABgAFBQdDRUlMSU5HBAl3bGdBbW91bnQJAGsDBQd1c2R0QW10BQVNVUxUOAUIYnV5UHJpY2UEBm1heFdsZwkBEmdldFN3YXBMaW1pdFdsZ29sZAEFBGFkZHIDCQBmAgUJd2xnQW1vdW50BQZtYXhXbGcJAAIBCQCsAgIJAKwCAgIQWW91IGNhbiBnZXQgbWF4IAkBCmZpeGVkUG9pbnQCBQZtYXhXbGcACAIVIFdMR09MRCBhdCB0aGUgbW9tZW50AwkAZgIFDG1pblRvUmVjZWl2ZQUJd2xnQW1vdW50CQACAQIwUHJpY2UgY2hhbmdlZCBkdXJpbmcgb3BlcmF0aW9uLCBwbGVhc2UgdHJ5IGFnYWluBAxwcm9maXRBbW91bnQJAGkCBQd1c2R0QW10AAYJAJQKAgkAzAgCCQEHUmVpc3N1ZQMFCndsZ0Fzc2V0SWQFCXdsZ0Ftb3VudAYJAMwIAgkBDEludGVnZXJFbnRyeQIFEndsZ0lzc3VlZEFtb3VudEtleQkAZAIFDGN1cldsZ0Ftb3VudAUJd2xnQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEZa2V5TGFzdFdsZ1RyYWRlVGltZUJ5VXNlcgEFBGFkZHIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaa2V5TGFzdFdsZ1RyYWRlTGltaXRCeVVzZXIBBQRhZGRyCQBlAgUGbWF4V2xnBQl3bGdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQkAoggBBQ1wcm9maXRBZGRyS2V5BQxwcm9maXRBbW91bnQFC3VzZHRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUJd2xnQW1vdW50BQp3bGdBc3NldElkBQNuaWwFDHByb2xvZ1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5idXlXbGdSRUFET05MWQIHYWRkcmVzcwd1c2R0QW10BAhjdXJTdGF0cwkBDGdldFdsZ1N0YXRzMgQCAAkAzAgCBQ1yZXN0MkNvbnRyYWN0CQDMCAIFDmFjcmVzMkNvbnRyYWN0CQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFEnB1enpsZVBvb2xDb250cmFjdAkAzAgCBRJpbnZlc3RGdW5kQ29udHJhY3QFA25pbAULdXNkdEFzc2V0SWQFB3VzZHRBbXQECHdsZ1ByaWNlCQCRAwIFCGN1clN0YXRzBQppeFdsZ1ByaWNlBAhidXlQcmljZQkAbgQFCHdsZ1ByaWNlAAYABQUHQ0VJTElORwQJd2xnQW1vdW50CQBrAwUHdXNkdEFtdAUFTVVMVDgFCGJ1eVByaWNlBAZtYXhXbGcJARJnZXRTd2FwTGltaXRXbGdvbGQBBQdhZGRyZXNzBAdtYXhVc2R0CQBrAwUGbWF4V2xnBQhidXlQcmljZQUFTVVMVDgEDHByb2ZpdEFtb3VudAkAaQIFB3VzZHRBbXQABgkAlAoCBQNuaWwJAMwIAgUJd2xnQW1vdW50CQDMCAIFDk1JTlNIT1BQQVlNRU5UCQDMCAIFB21heFVzZHQJAMwIAgUMcHJvZml0QW1vdW50BQNuaWwBaQEHc2VsbFdsZwEJbWluQW1vdW50BAxwcm9sb2dSZXN1bHQJAQdwcm9sb2cyAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAZ3bGdBbXQIBQNwbXQGYW1vdW50BAZjYWxsZXIIBQFpBmNhbGxlcgQEYWRkcgkApQgBBQZjYWxsZXIEBm1heFdsZwkBEmdldFN3YXBMaW1pdFdsZ29sZAEFBGFkZHIDCQBmAgUGd2xnQW10BQZtYXhXbGcJAAIBCQCsAgIJAKwCAgISWW91IGNhbiBzcGVuZCBtYXggCQEKZml4ZWRQb2ludAIFBm1heFdsZwAIAhUgV0xHT0xEIGF0IHRoZSBtb21lbnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhBAhjdXJTdGF0cwkBDGdldFdsZ1N0YXRzMgQCAAkAzAgCBQ1yZXN0MkNvbnRyYWN0CQDMCAIFDmFjcmVzMkNvbnRyYWN0CQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFEnB1enpsZVBvb2xDb250cmFjdAkAzAgCBRJpbnZlc3RGdW5kQ29udHJhY3QFA25pbAULdXNkdEFzc2V0SWQAAAQMY3VyV2xnQW1vdW50CQCRAwIFCGN1clN0YXRzBQtpeFdsZ0Ftb3VudAQJc2VsbFByaWNlCQBpAgkAkQMCBQhjdXJTdGF0cwUKaXhXbGdQcmljZQACBAd1c2R0QW10CQBrAwUGd2xnQW10BQlzZWxsUHJpY2UFBU1VTFQ4AwkAZgIFDk1JTlNIT1BQQVlNRU5UBQd1c2R0QW10CQACAQkArAICCQCsAgICEllvdSBjYW4gdHJhZGUgbWluIAkBCmZpeGVkUG9pbnQCBQ5NSU5TSE9QUEFZTUVOVAAGAgUgVVNEVAMJAGYCBQltaW5BbW91bnQFB3VzZHRBbXQJAAIBAjBQcmljZSBjaGFuZ2VkIGR1cmluZyBvcGVyYXRpb24sIHBsZWFzZSB0cnkgYWdhaW4EDHByb2ZpdEFtb3VudAkAaQIFB3VzZHRBbXQABQkAlAoCCQDMCAIJAQRCdXJuAgUKd2xnQXNzZXRJZAUGd2xnQW10CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJ3bGdJc3N1ZWRBbW91bnRLZXkJAGUCBQxjdXJXbGdBbW91bnQFBndsZ0FtdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGWtleUxhc3RXbGdUcmFkZVRpbWVCeVVzZXIBBQRhZGRyCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmtleUxhc3RXbGdUcmFkZUxpbWl0QnlVc2VyAQUEYWRkcgkAZQIFBm1heFdsZwUGd2xnQW10CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEJAKIIAQUNcHJvZml0QWRkcktleQUMcHJvZml0QW1vdW50BQt1c2R0QXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFB3VzZHRBbXQFC3VzZHRBc3NldElkBQNuaWwFDHByb2xvZ1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9zZWxsV2xnUkVBRE9OTFkCB2FkZHJlc3MGd2xnQW10BAZtYXhXbGcJARJnZXRTd2FwTGltaXRXbGdvbGQBBQdhZGRyZXNzBAhjdXJTdGF0cwkBDGdldFdsZ1N0YXRzMgQCAAkAzAgCBQ1yZXN0MkNvbnRyYWN0CQDMCAIFDmFjcmVzMkNvbnRyYWN0CQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFEnB1enpsZVBvb2xDb250cmFjdAkAzAgCBRJpbnZlc3RGdW5kQ29udHJhY3QFA25pbAULdXNkdEFzc2V0SWQAAAQJc2VsbFByaWNlCQBpAgkAkQMCBQhjdXJTdGF0cwUKaXhXbGdQcmljZQACBAd1c2R0QW10CQBrAwUGd2xnQW10BQlzZWxsUHJpY2UFBU1VTFQ4BAZtaW5XbGcJAGsDBQ5NSU5TSE9QUEFZTUVOVAUFTVVMVDgFCXNlbGxQcmljZQQMcHJvZml0QW1vdW50CQBpAgUHdXNkdEFtdAAFCQCUCgIFA25pbAkAzAgCBQd1c2R0QW10CQDMCAIFBm1pbldsZwkAzAgCBQZtYXhXbGcJAMwIAgUMcHJvZml0QW1vdW50BQNuaWwBaQEFY2xhaW0ABAxwcm9sb2dSZXN1bHQJAQdwcm9sb2cyAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBA0kdDAxMjA3NDEyMTQzCQEOY2xhaW1JbnRlcm5hbDIBCQClCAEIBQFpBmNhbGxlcgQHYWN0aW9ucwgFDSR0MDEyMDc0MTIxNDMCXzEEEHdsZ0NsYWltZWRBbW91bnQIBQ0kdDAxMjA3NDEyMTQzAl8yCQCUCgIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRB3bGdDbGFpbWVkQW1vdW50BQp3bGdBc3NldElkBQxwcm9sb2dSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESb25TdGFrZVVuc3Rha2VMYW5kAQRhZGRyAwMDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkBAiE9AggFAWkGY2FsbGVyBQ1hY3Jlc0NvbnRyYWN0BwkBAiE9AggFAWkGY2FsbGVyBQ5hY3JlczJDb250cmFjdAcJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNJHQwMTI0NjIxMjUxNgkBDmNsYWltSW50ZXJuYWwyAQUEYWRkcgQHYWN0aW9ucwgFDSR0MDEyNDYyMTI1MTYCXzEEEHdsZ0NsYWltZWRBbW91bnQIBQ0kdDAxMjQ2MjEyNTE2Al8yCQCUCgIDCQBmAgUQd2xnQ2xhaW1lZEFtb3VudAAACQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIFEHdsZ0NsYWltZWRBbW91bnQFCndsZ0Fzc2V0SWQFB2FjdGlvbnMFEHdsZ0NsYWltZWRBbW91bnQBaQEKYnVybldsZ29sZAEGd2xnQW10AwkBAiE9AggFAWkGY2FsbGVyBQ5hY3JlczJDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAhjdXJTdGF0cwkBDGdldFdsZ1N0YXRzMgQCAAkAzAgCBQ1yZXN0MkNvbnRyYWN0CQDMCAIFDmFjcmVzMkNvbnRyYWN0CQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFEnB1enpsZVBvb2xDb250cmFjdAkAzAgCBRJpbnZlc3RGdW5kQ29udHJhY3QFA25pbAULdXNkdEFzc2V0SWQAAAMJAGYCBQZ3bGdBbXQJAJEDAgUIY3VyU3RhdHMFCGl4V2xnV2xnCQACAQkArAICCQCsAgIJAKwCAgIFT25seSAJAQpmaXhlZFBvaW50AgkAkQMCBQhjdXJTdGF0cwUIaXhXbGdXbGcACAIlIFdMR09MRCBsZWZ0IG9uIGNvbnRyYWN0LCBjYW4ndCBidXJuIAkBCmZpeGVkUG9pbnQCBQZ3bGdBbXQACAQNd2xnQW1vdW50TGVmdAkAZQIJAJEDAgUIY3VyU3RhdHMFC2l4V2xnQW1vdW50BQZ3bGdBbXQJAJQKAgkAzAgCCQEEQnVybgIFCndsZ0Fzc2V0SWQFBndsZ0FtdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSd2xnSXNzdWVkQW1vdW50S2V5BQ13bGdBbW91bnRMZWZ0BQNuaWwFDXdsZ0Ftb3VudExlZnQBaQEMYmV0Rm9yVGlja2V0AQNiZXQEDHByb2xvZ1Jlc3VsdAkBB3Byb2xvZzIAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQDCQECIT0CCQBpAgUDYmV0AAQAAAkAAgECG0ludmFsaWQgYmV0OiBzaG91bGQgYmUgMC4uMwQGbW9tZW50CQBqAgUGaGVpZ2h0BQpEQVlfQkxPQ0tTAwkAZgIFBm1vbWVudAkAZQIFCkRBWV9CTE9DS1MAAwkAAgEJAKwCAgkArAICAjFDYW5ub3QgYmV0OiB0aGUgZGF5IGlzIGFsbW9zdCBlbmRlZCwgcGxlYXNlIHdhaXQgCQCkAwEJAGUCBQpEQVlfQkxPQ0tTBQZtb21lbnQCByBibG9ja3MEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAtzdGFrZWRBY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5hY3JlczJDb250cmFjdAkBF2tleUFjcmVzU3Rha2VkQW10QnlVc2VyAQUEYWRkcgAABANsdmwJAQ9nZXRMZXZlbEJ5QWNyZXMBBQtzdGFrZWRBY3JlcwMJAAACBQNsdmwAAAkAAgECI1lvdSBuZWVkIHRvIHN0YWtlIHNvbWUgQUNSRVMgdG8gYmV0BAh0b21vcnJvdwkAZAIJAGkCBQZoZWlnaHQFCkRBWV9CTE9DS1MAAQQGYmV0S2V5CQEKa2V5VXNlckJldAEFBGFkZHIECnVzZXJCZXRTdHIJAKIIAQUGYmV0S2V5BAtuZXdCZXRFbnRyeQkBC1N0cmluZ0VudHJ5AgUGYmV0S2V5CQCsAgIJAKwCAgkApAMBBQh0b21vcnJvdwIBXwkApAMBBQNiZXQDCQEJaXNEZWZpbmVkAQUKdXNlckJldFN0cgQHdXNlckJldAkBBXZhbHVlAQUKdXNlckJldFN0cgMJAAACCQCRAwIJALUJAgUHdXNlckJldAIBXwAACQCkAwEFCHRvbW9ycm93CQACAQIcWW91IGFscmVhZHkgYmV0IGZvciB0b21vcnJvdwQBcgkBFGNsYWltVGlja2V0c0ludGVybmFsAgUEYWRkcgUHdXNlckJldAkAlAoCCQDNCAIJAM0IAggFAXICXzEIBQFyAl8yBQtuZXdCZXRFbnRyeQgFAXICXzIJAJQKAgkAzAgCBQtuZXdCZXRFbnRyeQUDbmlsAAAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMY2xhaW1UaWNrZXRzAAQMcHJvbG9nUmVzdWx0CQEHcHJvbG9nMgADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIECnVzZXJCZXRTdHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEKa2V5VXNlckJldAEFBGFkZHICHFlvdSBoYXZlIG5vIHRpY2tldHMgdG8gY2xhaW0EAXIJARRjbGFpbVRpY2tldHNJbnRlcm5hbAIFBGFkZHIFCnVzZXJCZXRTdHIJAJQKAgkAzQgCCAUBcgJfMQgFAXICXzIIBQFyAl8zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCXRha2VXbGdYcAEEYWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUPc3Rha2luZ0NvbnRyYWN0CQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDSR0MDIwNTgwMjA2MjMJAQ50YWtlWHBJbnRlcm5hbAIFBGFkZHIAAAQHYWN0aW9ucwgFDSR0MDIwNTgwMjA2MjMCXzEEAnhwCAUNJHQwMjA1ODAyMDYyMwJfMgkAlAoCBQdhY3Rpb25zBQJ4cAFpARJjaGVja1dsZ1hwUkVBRE9OTFkBBGFkZHIEDSR0MDIwNzAwMjA3NDgJAQ50YWtlWHBJbnRlcm5hbAIFBGFkZHIAAAQHaWdub3JlZAgFDSR0MDIwNzAwMjA3NDgCXzEEB2RlbHRhWFAIBQ0kdDAyMDcwMDIwNzQ4Al8yBAVuZXdYUAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEJa2V5VXNlclhQAQUEYWRkcgAABQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyAAAFBW5ld1hQCQCUCgIFA25pbAkAzQgCBQlsdmxQb2ludHMFBW5ld1hQAJ7DEwY=", "height": 3375830, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7gbRoMG6CsZTqFywwXtMe34zNTsC9zBwsdNrq7Fny9n7 Next: 7MmNkgeNVV88KCFta6N48v6Rs41XfyrDQSmJFyNQFnj2 Diff:
OldNewDifferences
527527 then throw("Price changed during operation, please try again")
528528 else {
529529 let profitAmount = (usdtAmt / 6)
530- $Tuple2([Reissue(wlgAssetId, wlgAmount, true), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount + wlgAmount)), IntegerEntry(keyLastWlgTradeTimeByUser(addr), lastBlock.timestamp), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, wlgAmount, wlgAssetId)], prologResult)
530+ $Tuple2([Reissue(wlgAssetId, wlgAmount, true), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount + wlgAmount)), IntegerEntry(keyLastWlgTradeTimeByUser(addr), lastBlock.timestamp), IntegerEntry(keyLastWlgTradeLimitByUser(addr), (maxWlg - wlgAmount)), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, wlgAmount, wlgAssetId)], prologResult)
531531 }
532532 }
533533 }
580580 then throw("Price changed during operation, please try again")
581581 else {
582582 let profitAmount = (usdtAmt / 5)
583- $Tuple2([Burn(wlgAssetId, wlgAmt), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount - wlgAmt)), IntegerEntry(keyLastWlgTradeTimeByUser(addr), lastBlock.timestamp), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, usdtAmt, usdtAssetId)], prologResult)
583+ $Tuple2([Burn(wlgAssetId, wlgAmt), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount - wlgAmt)), IntegerEntry(keyLastWlgTradeTimeByUser(addr), lastBlock.timestamp), IntegerEntry(keyLastWlgTradeLimitByUser(addr), (maxWlg - wlgAmt)), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, usdtAmt, usdtAssetId)], prologResult)
584584 }
585585 }
586586 }
609609 then if ((size(i.payments) != 0))
610610 then throw("No payments required")
611611 else {
612- let $t01193312002 = claimInternal2(toString(i.caller))
613- let actions = $t01193312002._1
614- let wlgClaimedAmount = $t01193312002._2
612+ let $t01207412143 = claimInternal2(toString(i.caller))
613+ let actions = $t01207412143._1
614+ let wlgClaimedAmount = $t01207412143._2
615615 $Tuple2((actions :+ ScriptTransfer(i.caller, wlgClaimedAmount, wlgAssetId)), prologResult)
616616 }
617617 else throw("Strict value is not equal to itself.")
627627 else false)
628628 then throw("Permission denied")
629629 else {
630- let $t01232112375 = claimInternal2(addr)
631- let actions = $t01232112375._1
632- let wlgClaimedAmount = $t01232112375._2
630+ let $t01246212516 = claimInternal2(addr)
631+ let actions = $t01246212516._1
632+ let wlgClaimedAmount = $t01246212516._2
633633 $Tuple2(if ((wlgClaimedAmount > 0))
634634 then (actions :+ ScriptTransfer(addressFromStringValue(addr), wlgClaimedAmount, wlgAssetId))
635635 else actions, wlgClaimedAmount)
715715 func takeWlgXp (addr) = if ((i.caller != stakingContract))
716716 then throw("Permission denied")
717717 else {
718- let $t02043920482 = takeXpInternal(addr, 0)
719- let actions = $t02043920482._1
720- let xp = $t02043920482._2
718+ let $t02058020623 = takeXpInternal(addr, 0)
719+ let actions = $t02058020623._1
720+ let xp = $t02058020623._2
721721 $Tuple2(actions, xp)
722722 }
723723
725725
726726 @Callable(i)
727727 func checkWlgXpREADONLY (addr) = {
728- let $t02055920607 = takeXpInternal(addr, 0)
729- let ignored = $t02055920607._1
730- let deltaXP = $t02055920607._2
728+ let $t02070020748 = takeXpInternal(addr, 0)
729+ let ignored = $t02070020748._1
730+ let deltaXP = $t02070020748._2
731731 let newXP = (valueOrElse(getInteger(stakingContract, keyUserXP(addr)), 0) + deltaXP)
732732 let lvlPoints = levelUp(valueOrElse(getInteger(stakingContract, keyUserLevel(addr)), 0), newXP)
733733 $Tuple2(nil, (lvlPoints :+ newXP))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let DAY_MILLIS = 86400000
55
66 let chain = take(drop(this.bytes, 1), 1)
77
88 let usdtAssetId = match chain {
99 case _ =>
1010 if ((base58'2W' == $match0))
1111 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
1212 else if ((base58'2T' == $match0))
1313 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
1414 else throw("Unknown chain")
1515 }
1616
1717 let defaultRestAddressStr = match chain {
1818 case _ =>
1919 if ((base58'2W' == $match0))
2020 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
2121 else if ((base58'2T' == $match0))
2222 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
2323 else throw("Unknown chain")
2424 }
2525
2626 let acres2AddressStr = match chain {
2727 case _ =>
2828 if ((base58'2W' == $match0))
2929 then "3P4UH3T9nXpMNpUmSmQjPmEz3G85t3zn6eA"
3030 else if ((base58'2T' == $match0))
3131 then "3NBPx1Fciu3JQNEGZ21jSnTdutLNGGBUSXh"
3232 else throw("Unknown chain")
3333 }
3434
3535 let SEP = "__"
3636
3737 let MULT6 = 1000000
3838
3939 let MULT8 = 100000000
4040
4141 let MINSHOPPAYMENT = 100000
4242
4343 func getStringOrFail (address,key) = valueOrErrorMessage(getString(address, key), makeString(["mandatory ", toString(address), ".", key, " is not defined"], ""))
4444
4545
4646 let IdxCfgStakingDapp = 1
4747
4848 let IdxCfgWlgDapp = 4
4949
5050 let IdxCfgPuzzlePoolDapp = 5
5151
5252 let IdxCfgInvestFundDapp = 6
5353
5454 let IdxCfgAcresDapp = 8
5555
5656 func keyRestCfg () = "%s__restConfig"
5757
5858
5959 func keyRestAddress () = "%s__restAddr"
6060
6161
6262 func keyRest2Address () = "%s__rest2Addr"
6363
6464
6565 func readRestCfgOrFail (rest) = split_4C(getStringOrFail(rest, keyRestCfg()), SEP)
6666
6767
6868 func getContractAddressOrFail (restCfg,idx) = valueOrErrorMessage(addressFromString(restCfg[idx]), ("Rest cfg doesn't contain address at index " + toString(idx)))
6969
7070
7171 let restContract = addressFromStringValue(valueOrElse(getString(this, keyRestAddress()), defaultRestAddressStr))
7272
7373 let restCfg = readRestCfgOrFail(restContract)
7474
7575 let stakingContract = getContractAddressOrFail(restCfg, IdxCfgStakingDapp)
7676
7777 let wlgContract = getContractAddressOrFail(restCfg, IdxCfgWlgDapp)
7878
7979 let puzzlePoolContract = getContractAddressOrFail(restCfg, IdxCfgPuzzlePoolDapp)
8080
8181 let investFundContract = getContractAddressOrFail(restCfg, IdxCfgInvestFundDapp)
8282
8383 let acresContract = getContractAddressOrFail(restCfg, IdxCfgAcresDapp)
8484
8585 let wlgAssetIdKey = "wlg_assetId"
8686
8787 let wlgAssetId = valueOrErrorMessage(getBinary(wlgContract, wlgAssetIdKey), "WLGOLD is not issued yet")
8888
8989 func asInt (v) = match v {
9090 case n: Int =>
9191 n
9292 case _ =>
9393 throw("fail to cast into Int")
9494 }
9595
9696
9797 func fixedPoint (val,decimals) = {
9898 let tenPow = pow(10, 0, decimals, 0, 0, DOWN)
9999 let lowPart = toString((val % tenPow))
100100 let zeroes = drop(toString(tenPow), (1 + size(lowPart)))
101101 (((toString((val / tenPow)) + ".") + zeroes) + lowPart)
102102 }
103103
104104
105105 let SCALE8 = 100000000
106106
107107 let xpLevelScale = 3200
108108
109109 let xpLevelRecipPow = 4000
110110
111111 let numPointsOnLevelUp = 3
112112
113113 let wlgBaseAmountXp = 100000000000
114114
115115 func keyUserXP (addr) = ("userXP_" + addr)
116116
117117
118118 func keyUserLevel (addr) = ("userLevel_" + addr)
119119
120120
121121 let xpWlg = 10000
122122
123123 func levelByXP (xp) = fraction(xpLevelScale, pow(xp, 4, xpLevelRecipPow, 4, 4, DOWN), SCALE8)
124124
125125
126126 func levelUp (currLevel,newXP) = {
127127 let newLevel = levelByXP(newXP)
128128 [newLevel, (numPointsOnLevelUp * (newLevel - currLevel))]
129129 }
130130
131131
132132 let MILLION6 = 100000000000000
133133
134134 let PLAYERSHARE = 400000
135135
136136 let DAYMILLIS = 86400000
137137
138138 let teamAddrKey = "teamAddr"
139139
140140 let lastTeamTimeKey = "lastClaimedTime_team"
141141
142142 let teamAmountLeftKey = "teamAmountLeft"
143143
144144 let lastActivitiesTimeKey = "lastClaimedTime_activities"
145145
146146 let actAmountLeftKey = "activitiesAmountLeft"
147147
148148 let stakersAmountLeftKey = "stakersAmountLeft"
149149
150150 func keyLastWlgTradeTimeByUser (addr) = ("lastArbTimeUser_" + addr)
151151
152152
153153 func keyLastWlgTradeLimitByUser (addr) = ("lastWlgLimitUser_" + addr)
154154
155155
156156 let wlgIssueTimeKey = "wlg_issueTime"
157157
158158 let wlgIssuedAmountKey = "wlg_issuedAmount"
159159
160160 func keyAcresStakedAmountByUser (addr) = ("acresStakedAmountByUser_" + addr)
161161
162162
163163 func keyWlgStakedAmountByUser (addr) = ("wlgStakedAmountByUser_" + addr)
164164
165165
166166 let wlgStakedTotalKey = "wlgStakedAmountTotal"
167167
168168 func keyWlgStakedTimeByUser (addr) = ("wlgStakedTimeByUser_" + addr)
169169
170170
171171 let M6_ = 1000000
172172
173173 let M8_ = 100000000
174174
175175 let TEAM_SHARE = 200000
176176
177177 let ACTIVITY_SHARE = 100000
178178
179179 let PLAYER_SHARE = 400000
180180
181181 let YEAR_MILLIS = 31557600000
182182
183183 let DAY_MS = 86400000
184184
185185 let DAY_BLOCKS = 1440
186186
187187 let ISSUE10 = 1000000000
188188
189189 let PLAYERS10_SHARE = 800000
190190
191191 let MARKETING10_SHARE = 100000
192192
193193 let TEAM10_SHARE = 100000
194194
195195 let NEW_STAKING_START = 1731279600000
196196
197197 let marketingAddrKey = "marketingAddr"
198198
199199 let teamAdrKey = "teamAddr"
200200
201201 let lastTeamTimKey = "lastClaimedTime_team"
202202
203203 let teamAmtLeftKey = "teamAmountLeft"
204204
205205 let lastActivitiesTimKey = "lastClaimedTime_activities"
206206
207207 let actAmtLeftKey = "activitiesAmountLeft"
208208
209209 let stakersAmtLeftKey = "stakersAmountLeft"
210210
211211 func keyLastClaimTimeByUser (addr) = ("lastClaimedTimeUser_" + addr)
212212
213213
214214 func distrByPeriod (issuedAmount,period) = fraction(issuedAmount, (PLAYER_SHARE * (period + 1)), (6 * M6_))
215215
216216
217217 let wlgIssue10TimeKey = "wlg_issue10Time"
218218
219219 let wlgIssueTimKey = "wlg_issueTime"
220220
221221 let wlgIssuedAmtKey = "wlg_issuedAmount"
222222
223223 let zbIssuedAmtKey = "zbill_issuedAmount"
224224
225225 func keyAcresStakedAmtByUser (addr) = ("acresStakedAmountByUser_" + addr)
226226
227227
228228 let totalFarmingPowerKey = "totalFarmingPower"
229229
230230 let dapp2Rest = 0
231231
232232 let dapp2Staking = 1
233233
234234 let dapp2Wlg = 2
235235
236236 let dapp2Puzzle = 3
237237
238238 let dapp2InvestFund = 4
239239
240240 let levelAcres = [0, 10, 20, 40, 80, 150, 250, 400, 700, 1000]
241241
242242 func getLevelByAcres (acres) = {
243243 let acr = ((acres + 99999999) / M8_)
244244 func checker (acc,item) = if ((item >= acr))
245245 then acc
246246 else (acc + 1)
247247
248248 let $l = levelAcres
249249 let $s = size($l)
250250 let $acc0 = 0
251251 func $f0_1 ($a,$i) = if (($i >= $s))
252252 then $a
253253 else checker($a, $l[$i])
254254
255255 func $f0_2 ($a,$i) = if (($i >= $s))
256256 then $a
257257 else throw("List size exceeds 10")
258258
259259 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
260260 }
261261
262262
263263 func getFarmingPowerByAcres (acres) = ((acres * 20) * (getLevelByAcres(acres) + 4))
264264
265265
266266 func getFarmingPowers (userAddrStrOrEmpty,acres2Contract) = {
267267 let totalFP = valueOrElse(getInteger(acres2Contract, totalFarmingPowerKey), 0)
268268 let userAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(userAddrStrOrEmpty)), 0)
269269 let userFP = getFarmingPowerByAcres(userAcres)
270270 [totalFP, userFP]
271271 }
272272
273273
274274 func keyUserBet (addr) = ("userBet_" + addr)
275275
276276
277277 func keyUserTickets (addr) = ("userTickets_" + addr)
278278
279279
280280 let keyTotalTickets = "totalTickets"
281281
282282 func winningBet (day) = (toInt(value(value(blockInfoByHeight((day * DAY_BLOCKS))).vrf)) % 4)
283283
284284
285285 let idxTotalFP = 0
286286
287287 let idxUserFP = 1
288288
289289 let ixWlgAmount = 0
290290
291291 let ixWlgWlg = 1
292292
293293 let ixWlgPrice = 2
294294
295295 let ixWlgIssueTime = 8
296296
297297 let ixWlgTeamAmLeft = 11
298298
299299 let ixWlgTeamAmAvailNow = 12
300300
301301 let ixWlgActAmLeft = 15
302302
303303 let ixWlgActAmAvailNow = 16
304304
305305 let ixWlgAmLeftTotal = 19
306306
307307 let ixWlgUserAmAvailNow = 23
308308
309309 let ixWlgEffUserTime = 24
310310
311311 let ixWlgIssue10Amount = 25
312312
313313 let ixWlgMarketingIssue10Amount = 26
314314
315315 let ixWlgTeamIssue10Amount = 27
316316
317317 let ixWlgUser10part = 28
318318
319319 let ixWlgIssue10Time = 29
320320
321321 func getWlgStats2 (userAddrOpt,contracts,usdtId,usdtBalanceCorrection) = {
322322 let issuedAmount = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssuedAmtKey), "WLGOLD is not issued yet")
323323 let restUsd = assetBalance(contracts[dapp2Rest], usdtId)
324324 let wlgUsd = (assetBalance(contracts[dapp2Wlg], usdtId) - usdtBalanceCorrection)
325325 let puzzleUsd = assetBalance(contracts[dapp2Puzzle], usdtId)
326326 let acres2Usd = assetBalance(contracts[dapp2Staking], usdtId)
327327 let investFndContract = contracts[dapp2InvestFund]
328328 let investFundTotal = (assetBalance(investFndContract, usdtId) + valueOrElse(getInteger(investFndContract, zbIssuedAmtKey), 0))
329329 let totalFundsUsd = ((acres2Usd + wlgUsd) + investFundTotal)
330330 let wlgId = valueOrErrorMessage(getBinary(contracts[dapp2Wlg], "wlg_assetId"), "Not initialized yet")
331331 let now = lastBlock.timestamp
332332 let issueTime = valueOrErrorMessage(getInteger(contracts[dapp2Wlg], wlgIssueTimKey), "Not initialized")
333333 let wlgWlg = assetBalance(contracts[dapp2Wlg], wlgId)
334334 let teamTotal = fraction(issuedAmount, TEAM_SHARE, M6_)
335335 let teamAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], teamAmtLeftKey), teamTotal)
336336 let lastTeamTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastTeamTimKey), issueTime)
337337 let teamAddr = addressFromStringValue(value(getString(contracts[dapp2Wlg], teamAdrKey)))
338338 let teamAmountAvailableNow = min([fraction(teamTotal, (now - lastTeamTime), (3 * YEAR_MILLIS)), teamAmountLeft])
339339 let teamWlgold = assetBalance(teamAddr, wlgId)
340340 let actTotal = fraction(issuedAmount, ACTIVITY_SHARE, M6_)
341341 let actAmountLeft = valueOrElse(getInteger(contracts[dapp2Wlg], actAmtLeftKey), actTotal)
342342 let lastActivitiesTime = valueOrElse(getInteger(contracts[dapp2Wlg], lastActivitiesTimKey), issueTime)
343343 let actAmountAvailableNow = min([fraction(actTotal, (now - lastActivitiesTime), (3 * YEAR_MILLIS)), actAmountLeft])
344344 let actWlgold = assetBalance(contracts[dapp2Rest], wlgId)
345345 let lastUserTime = valueOrElse(getInteger(contracts[dapp2Wlg], keyLastClaimTimeByUser(userAddrOpt)), issueTime)
346346 let lastUserPeriod = ((lastUserTime - issueTime) / YEAR_MILLIS)
347347 let nowLimited = min([now, (issueTime + (3 * YEAR_MILLIS))])
348348 let curPeriod = min([((now - issueTime) / YEAR_MILLIS), 2])
349349 let eff = getFarmingPowers(userAddrOpt, contracts[dapp2Staking])
350350 let curPeriodDistribution = distrByPeriod(issuedAmount, curPeriod)
351351 let prevPeriodEnd = (issueTime + (YEAR_MILLIS * curPeriod))
352352 let prevPrevPeriodEnd = (issueTime + (YEAR_MILLIS * (curPeriod - 1)))
353353 let a0 = fraction(curPeriodDistribution, (nowLimited - lastUserTime), YEAR_MILLIS)
354354 let userAvailable = if ((lastUserPeriod == curPeriod))
355355 then a0
356356 else if ((lastUserPeriod == (curPeriod - 1)))
357357 then {
358358 let a1 = fraction(distrByPeriod(issuedAmount, (curPeriod - 1)), (prevPeriodEnd - lastUserTime), YEAR_MILLIS)
359359 (a1 + a0)
360360 }
361361 else {
362362 let a2 = fraction(distrByPeriod(issuedAmount, (curPeriod - 2)), (prevPrevPeriodEnd - lastUserTime), YEAR_MILLIS)
363363 let a1 = distrByPeriod(issuedAmount, (curPeriod - 1))
364364 ((a2 + a1) + a0)
365365 }
366366 let amountLeftTotal = valueOrElse(getInteger(contracts[dapp2Wlg], stakersAmtLeftKey), 0)
367367 let userAmount = if ((eff[idxTotalFP] != 0))
368368 then fraction(userAvailable, eff[idxUserFP], eff[idxTotalFP])
369369 else 0
370370 let lastIssue10Time = valueOrElse(getInteger(contracts[dapp2Wlg], wlgIssue10TimeKey), NEW_STAKING_START)
371371 let issue10Amount = fraction(ISSUE10, max([(now - lastIssue10Time), 0]), DAY_MS)
372372 let marketingIssue10Amount = fraction(issue10Amount, MARKETING10_SHARE, M6_)
373373 let teamIssue10Amount = fraction(issue10Amount, TEAM10_SHARE, M6_)
374374 let user10Interval = max([(now - max([NEW_STAKING_START, lastUserTime])), 0])
375375 let user10part = if ((eff[idxTotalFP] != 0))
376376 then fraction(fraction(fraction(ISSUE10, user10Interval, DAY_MS), eff[idxUserFP], eff[idxTotalFP]), PLAYERS10_SHARE, M6_)
377377 else 0
378378 let newIssue10Time = max([NEW_STAKING_START, now])
379379 [issuedAmount, wlgWlg, fraction(totalFundsUsd, M8_, issuedAmount), totalFundsUsd, restUsd, acres2Usd, wlgUsd, puzzleUsd, issueTime, lastTeamTime, teamTotal, teamAmountLeft, teamAmountAvailableNow, teamWlgold, actTotal, actAmountLeft, actAmountAvailableNow, actWlgold, curPeriod, amountLeftTotal, curPeriodDistribution, lastUserTime, investFundTotal, userAmount, nowLimited, issue10Amount, marketingIssue10Amount, teamIssue10Amount, user10part, newIssue10Time, eff[idxTotalFP]]
380380 }
381381
382382
383383 let net = take(drop(this.bytes, 1), 1)
384384
385385 let defaultRest2AddressStr = match net {
386386 case _ =>
387387 if ((base58'2W' == $match0))
388388 then "3PFwYta8biEz31zpeFe5DJK8wE5trSpQVF8"
389389 else if ((base58'2T' == $match0))
390390 then "3N7UuYar6264P58FBhVWKPQAh4Yua2hgngv"
391391 else throw("Unknown chain")
392392 }
393393
394394 let profitAddrKey = "profitAddr"
395395
396396 let stakersAmountPaidTotalKey = "stakersAmountPaidTotal"
397397
398398 func keyStakersAmountPaidUser (addr) = ("stakersAmountPaidUser_" + addr)
399399
400400
401401 let rest2Contract = addressFromStringValue(valueOrElse(getString(this, keyRest2Address()), defaultRest2AddressStr))
402402
403403 let acres2Contract = addressFromStringValue(acres2AddressStr)
404404
405405 func prolog2 () = asInt(reentrantInvoke(acres2Contract, "saveLastTx", nil, nil))
406406
407407
408408 func getSwapLimitWlgold (addr) = {
409409 let lastTime = valueOrElse(getInteger(keyLastWlgTradeTimeByUser(addr)), 0)
410410 let defaultLimit = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmountByUser(addr)), 0)
411411 let lastLimitLeft = valueOrElse(getInteger(keyLastWlgTradeLimitByUser(addr)), defaultLimit)
412412 let currentLimit = (lastLimitLeft + fraction(defaultLimit, (lastBlock.timestamp - lastTime), DAY_MILLIS))
413413 min([currentLimit, defaultLimit])
414414 }
415415
416416
417417 func claimInternal2 (addr) = {
418418 let curStats = getWlgStats2(addr, [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
419419 let userTimeKey = keyLastClaimTimeByUser(addr)
420420 let lastUserTime = valueOrElse(getInteger(userTimeKey), 0)
421421 let userEffTime = curStats[ixWlgEffUserTime]
422422 if ((lastUserTime == userEffTime))
423423 then $Tuple2(nil, 0)
424424 else {
425425 let now = lastBlock.timestamp
426426 let issueTime = curStats[ixWlgIssueTime]
427427 let teamAmountLeft = curStats[ixWlgTeamAmLeft]
428428 let teamAmount = (curStats[ixWlgTeamAmAvailNow] + curStats[ixWlgTeamIssue10Amount])
429429 let teamTransfer = if ((teamAmount > 0))
430430 then [ScriptTransfer(addressFromStringValue(value(getString(teamAddrKey))), teamAmount, wlgAssetId)]
431431 else nil
432432 let actAmountLeft = curStats[ixWlgActAmLeft]
433433 let actAmount = curStats[ixWlgActAmAvailNow]
434434 let actTransfer = if ((actAmount > 0))
435435 then [ScriptTransfer(restContract, actAmount, wlgAssetId)]
436436 else nil
437437 let marketingAmount = curStats[ixWlgMarketingIssue10Amount]
438438 let marketingTransfer = if ((marketingAmount > 0))
439439 then [ScriptTransfer(addressFromStringValue(value(getString(marketingAddrKey))), marketingAmount, wlgAssetId)]
440440 else nil
441441 let userAmount = curStats[ixWlgUserAmAvailNow]
442442 let userKey = keyStakersAmountPaidUser(addr)
443443 let userTotal = (userAmount + curStats[ixWlgUser10part])
444444 let issued10Amount = curStats[ixWlgIssue10Amount]
445445 $Tuple2(((([Reissue(wlgAssetId, issued10Amount, true), IntegerEntry(wlgIssuedAmountKey, (curStats[ixWlgAmount] + issued10Amount)), IntegerEntry(wlgIssue10TimeKey, curStats[ixWlgIssue10Time]), IntegerEntry(userKey, (valueOrElse(getInteger(userKey), 0) + userAmount)), IntegerEntry(stakersAmountPaidTotalKey, (valueOrElse(getInteger(stakersAmountPaidTotalKey), 0) + userAmount)), IntegerEntry(stakersAmountLeftKey, (curStats[ixWlgAmLeftTotal] - userAmount)), IntegerEntry(teamAmountLeftKey, ((teamAmountLeft - teamAmount) + curStats[ixWlgTeamIssue10Amount])), IntegerEntry(lastTeamTimeKey, now), IntegerEntry(actAmountLeftKey, (actAmountLeft - actAmount)), IntegerEntry(lastActivitiesTimeKey, now), IntegerEntry(userTimeKey, userEffTime)] ++ teamTransfer) ++ actTransfer) ++ marketingTransfer), userTotal)
446446 }
447447 }
448448
449449
450450 func takeXpInternal (addr,delta) = {
451451 let now = lastBlock.timestamp
452452 let timeKey = keyWlgStakedTimeByUser(addr)
453453 let amountKey = keyWlgStakedAmountByUser(addr)
454454 let lastTime = valueOrElse(getInteger(timeKey), 0)
455455 let oldUser = valueOrElse(getInteger(amountKey), 0)
456456 let oldTotal = valueOrElse(getInteger(wlgStakedTotalKey), 0)
457457 let xp = fraction(fraction(xpWlg, oldUser, wlgBaseAmountXp), (lastTime - now), DAYMILLIS)
458458 $Tuple3([IntegerEntry(timeKey, now), IntegerEntry(amountKey, (oldUser + delta)), IntegerEntry(wlgStakedTotalKey, (oldTotal + delta))], xp, oldUser)
459459 }
460460
461461
462462 func claimTicketsInternal (addr,userBetStr) = {
463463 let totalTicketsKey = keyTotalTickets
464464 let ticketsKey = keyUserTickets(addr)
465465 let betKey = keyUserBet(addr)
466466 let dayBet = split(userBetStr, "_")
467467 let oldTotalTickets = valueOrElse(getInteger(totalTicketsKey), 0)
468468 let oldTickets = valueOrElse(getInteger(ticketsKey), 0)
469469 let deltaTickets = if ((winningBet(parseIntValue(dayBet[0])) == parseIntValue(dayBet[1])))
470470 then 1
471471 else 0
472472 $Tuple3(if ((deltaTickets == 0))
473473 then nil
474474 else [IntegerEntry(ticketsKey, (oldTickets + deltaTickets)), IntegerEntry(totalTicketsKey, (oldTotalTickets + deltaTickets))], DeleteEntry(betKey), deltaTickets)
475475 }
476476
477477
478478 @Callable(i)
479479 func constructorV1 (restAddr,marketingAddr,teamAddr,profitAddr) = if ((i.caller != this))
480480 then throw("Permission denied")
481481 else if (isDefined(getBinary(wlgAssetIdKey)))
482482 then throw("Already initialized")
483483 else {
484484 let issuedAmount = MILLION6
485485 let issue = Issue("WLGOLD", "WavesLands Gold investment token", issuedAmount, 8, true, unit, 0)
486486 let assetId = calculateAssetId(issue)
487487 [issue, IntegerEntry(wlgIssueTimeKey, lastBlock.timestamp), IntegerEntry(wlgIssuedAmountKey, issuedAmount), IntegerEntry(stakersAmountPaidTotalKey, 0), IntegerEntry(stakersAmountLeftKey, fraction(MILLION6, PLAYERSHARE, MULT6)), BinaryEntry(wlgAssetIdKey, assetId), StringEntry(keyRestAddress(), restAddr), StringEntry(marketingAddrKey, marketingAddr), StringEntry(teamAddrKey, teamAddr), StringEntry(profitAddrKey, profitAddr)]
488488 }
489489
490490
491491
492492 @Callable(i)
493493 func constructorV2 (rest2Addr) = if ((i.caller != this))
494494 then throw("Permission denied")
495495 else [StringEntry(keyRest2Address(), rest2Addr)]
496496
497497
498498
499499 @Callable(i)
500500 func buyWlg (minToReceive) = {
501501 let prologResult = prolog2()
502502 if ((prologResult == prologResult))
503503 then if ((size(i.payments) != 1))
504504 then throw("exactly 1 payment must be attached")
505505 else {
506506 let pmt = i.payments[0]
507507 let usdtAmt = pmt.amount
508508 if (if (!(isDefined(pmt.assetId)))
509509 then true
510510 else (value(pmt.assetId) != usdtAssetId))
511511 then throw("USDT payments only!")
512512 else {
513513 let caller = i.caller
514514 let addr = toString(caller)
515515 if ((MINSHOPPAYMENT > usdtAmt))
516516 then throw((("You can trade min " + fixedPoint(MINSHOPPAYMENT, 6)) + " USDT"))
517517 else {
518518 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, usdtAmt)
519519 let curWlgAmount = curStats[ixWlgAmount]
520520 let wlgPrice = curStats[ixWlgPrice]
521521 let buyPrice = fraction(wlgPrice, 6, 5, CEILING)
522522 let wlgAmount = fraction(usdtAmt, MULT8, buyPrice)
523523 let maxWlg = getSwapLimitWlgold(addr)
524524 if ((wlgAmount > maxWlg))
525525 then throw((("You can get max " + fixedPoint(maxWlg, 8)) + " WLGOLD at the moment"))
526526 else if ((minToReceive > wlgAmount))
527527 then throw("Price changed during operation, please try again")
528528 else {
529529 let profitAmount = (usdtAmt / 6)
530- $Tuple2([Reissue(wlgAssetId, wlgAmount, true), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount + wlgAmount)), IntegerEntry(keyLastWlgTradeTimeByUser(addr), lastBlock.timestamp), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, wlgAmount, wlgAssetId)], prologResult)
530+ $Tuple2([Reissue(wlgAssetId, wlgAmount, true), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount + wlgAmount)), IntegerEntry(keyLastWlgTradeTimeByUser(addr), lastBlock.timestamp), IntegerEntry(keyLastWlgTradeLimitByUser(addr), (maxWlg - wlgAmount)), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, wlgAmount, wlgAssetId)], prologResult)
531531 }
532532 }
533533 }
534534 }
535535 else throw("Strict value is not equal to itself.")
536536 }
537537
538538
539539
540540 @Callable(i)
541541 func buyWlgREADONLY (address,usdtAmt) = {
542542 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, usdtAmt)
543543 let wlgPrice = curStats[ixWlgPrice]
544544 let buyPrice = fraction(wlgPrice, 6, 5, CEILING)
545545 let wlgAmount = fraction(usdtAmt, MULT8, buyPrice)
546546 let maxWlg = getSwapLimitWlgold(address)
547547 let maxUsdt = fraction(maxWlg, buyPrice, MULT8)
548548 let profitAmount = (usdtAmt / 6)
549549 $Tuple2(nil, [wlgAmount, MINSHOPPAYMENT, maxUsdt, profitAmount])
550550 }
551551
552552
553553
554554 @Callable(i)
555555 func sellWlg (minAmount) = {
556556 let prologResult = prolog2()
557557 if ((prologResult == prologResult))
558558 then if ((size(i.payments) != 1))
559559 then throw("exactly 1 payment must be attached")
560560 else {
561561 let pmt = i.payments[0]
562562 let wlgAmt = pmt.amount
563563 let caller = i.caller
564564 let addr = toString(caller)
565565 let maxWlg = getSwapLimitWlgold(addr)
566566 if ((wlgAmt > maxWlg))
567567 then throw((("You can spend max " + fixedPoint(maxWlg, 8)) + " WLGOLD at the moment"))
568568 else if (if (!(isDefined(pmt.assetId)))
569569 then true
570570 else (value(pmt.assetId) != wlgAssetId))
571571 then throw("WLGOLD payments only!")
572572 else {
573573 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
574574 let curWlgAmount = curStats[ixWlgAmount]
575575 let sellPrice = (curStats[ixWlgPrice] / 2)
576576 let usdtAmt = fraction(wlgAmt, sellPrice, MULT8)
577577 if ((MINSHOPPAYMENT > usdtAmt))
578578 then throw((("You can trade min " + fixedPoint(MINSHOPPAYMENT, 6)) + " USDT"))
579579 else if ((minAmount > usdtAmt))
580580 then throw("Price changed during operation, please try again")
581581 else {
582582 let profitAmount = (usdtAmt / 5)
583- $Tuple2([Burn(wlgAssetId, wlgAmt), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount - wlgAmt)), IntegerEntry(keyLastWlgTradeTimeByUser(addr), lastBlock.timestamp), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, usdtAmt, usdtAssetId)], prologResult)
583+ $Tuple2([Burn(wlgAssetId, wlgAmt), IntegerEntry(wlgIssuedAmountKey, (curWlgAmount - wlgAmt)), IntegerEntry(keyLastWlgTradeTimeByUser(addr), lastBlock.timestamp), IntegerEntry(keyLastWlgTradeLimitByUser(addr), (maxWlg - wlgAmt)), ScriptTransfer(addressFromStringValue(value(getString(profitAddrKey))), profitAmount, usdtAssetId), ScriptTransfer(caller, usdtAmt, usdtAssetId)], prologResult)
584584 }
585585 }
586586 }
587587 else throw("Strict value is not equal to itself.")
588588 }
589589
590590
591591
592592 @Callable(i)
593593 func sellWlgREADONLY (address,wlgAmt) = {
594594 let maxWlg = getSwapLimitWlgold(address)
595595 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
596596 let sellPrice = (curStats[ixWlgPrice] / 2)
597597 let usdtAmt = fraction(wlgAmt, sellPrice, MULT8)
598598 let minWlg = fraction(MINSHOPPAYMENT, MULT8, sellPrice)
599599 let profitAmount = (usdtAmt / 5)
600600 $Tuple2(nil, [usdtAmt, minWlg, maxWlg, profitAmount])
601601 }
602602
603603
604604
605605 @Callable(i)
606606 func claim () = {
607607 let prologResult = prolog2()
608608 if ((prologResult == prologResult))
609609 then if ((size(i.payments) != 0))
610610 then throw("No payments required")
611611 else {
612- let $t01193312002 = claimInternal2(toString(i.caller))
613- let actions = $t01193312002._1
614- let wlgClaimedAmount = $t01193312002._2
612+ let $t01207412143 = claimInternal2(toString(i.caller))
613+ let actions = $t01207412143._1
614+ let wlgClaimedAmount = $t01207412143._2
615615 $Tuple2((actions :+ ScriptTransfer(i.caller, wlgClaimedAmount, wlgAssetId)), prologResult)
616616 }
617617 else throw("Strict value is not equal to itself.")
618618 }
619619
620620
621621
622622 @Callable(i)
623623 func onStakeUnstakeLand (addr) = if (if (if ((i.caller != stakingContract))
624624 then (i.caller != acresContract)
625625 else false)
626626 then (i.caller != acres2Contract)
627627 else false)
628628 then throw("Permission denied")
629629 else {
630- let $t01232112375 = claimInternal2(addr)
631- let actions = $t01232112375._1
632- let wlgClaimedAmount = $t01232112375._2
630+ let $t01246212516 = claimInternal2(addr)
631+ let actions = $t01246212516._1
632+ let wlgClaimedAmount = $t01246212516._2
633633 $Tuple2(if ((wlgClaimedAmount > 0))
634634 then (actions :+ ScriptTransfer(addressFromStringValue(addr), wlgClaimedAmount, wlgAssetId))
635635 else actions, wlgClaimedAmount)
636636 }
637637
638638
639639
640640 @Callable(i)
641641 func burnWlgold (wlgAmt) = if ((i.caller != acres2Contract))
642642 then throw("Permission denied")
643643 else {
644644 let curStats = getWlgStats2("", [rest2Contract, acres2Contract, wlgContract, puzzlePoolContract, investFundContract], usdtAssetId, 0)
645645 if ((wlgAmt > curStats[ixWlgWlg]))
646646 then throw(((("Only " + fixedPoint(curStats[ixWlgWlg], 8)) + " WLGOLD left on contract, can't burn ") + fixedPoint(wlgAmt, 8)))
647647 else {
648648 let wlgAmountLeft = (curStats[ixWlgAmount] - wlgAmt)
649649 $Tuple2([Burn(wlgAssetId, wlgAmt), IntegerEntry(wlgIssuedAmountKey, wlgAmountLeft)], wlgAmountLeft)
650650 }
651651 }
652652
653653
654654
655655 @Callable(i)
656656 func betForTicket (bet) = {
657657 let prologResult = prolog2()
658658 if ((prologResult == prologResult))
659659 then if ((size(i.payments) != 0))
660660 then throw("No payments required")
661661 else if (((bet / 4) != 0))
662662 then throw("Invalid bet: should be 0..3")
663663 else {
664664 let moment = (height % DAY_BLOCKS)
665665 if ((moment > (DAY_BLOCKS - 3)))
666666 then throw((("Cannot bet: the day is almost ended, please wait " + toString((DAY_BLOCKS - moment))) + " blocks"))
667667 else {
668668 let addr = toString(i.caller)
669669 let stakedAcres = valueOrElse(getInteger(acres2Contract, keyAcresStakedAmtByUser(addr)), 0)
670670 let lvl = getLevelByAcres(stakedAcres)
671671 if ((lvl == 0))
672672 then throw("You need to stake some ACRES to bet")
673673 else {
674674 let tomorrow = ((height / DAY_BLOCKS) + 1)
675675 let betKey = keyUserBet(addr)
676676 let userBetStr = getString(betKey)
677677 let newBetEntry = StringEntry(betKey, ((toString(tomorrow) + "_") + toString(bet)))
678678 if (isDefined(userBetStr))
679679 then {
680680 let userBet = value(userBetStr)
681681 if ((split(userBet, "_")[0] == toString(tomorrow)))
682682 then throw("You already bet for tomorrow")
683683 else {
684684 let r = claimTicketsInternal(addr, userBet)
685685 $Tuple2(((r._1 :+ r._2) :+ newBetEntry), r._2)
686686 }
687687 }
688688 else $Tuple2([newBetEntry], 0)
689689 }
690690 }
691691 }
692692 else throw("Strict value is not equal to itself.")
693693 }
694694
695695
696696
697697 @Callable(i)
698698 func claimTickets () = {
699699 let prologResult = prolog2()
700700 if ((prologResult == prologResult))
701701 then if ((size(i.payments) != 0))
702702 then throw("No payments required")
703703 else {
704704 let addr = toString(i.caller)
705705 let userBetStr = valueOrErrorMessage(getString(keyUserBet(addr)), "You have no tickets to claim")
706706 let r = claimTicketsInternal(addr, userBetStr)
707707 $Tuple2((r._1 :+ r._2), r._3)
708708 }
709709 else throw("Strict value is not equal to itself.")
710710 }
711711
712712
713713
714714 @Callable(i)
715715 func takeWlgXp (addr) = if ((i.caller != stakingContract))
716716 then throw("Permission denied")
717717 else {
718- let $t02043920482 = takeXpInternal(addr, 0)
719- let actions = $t02043920482._1
720- let xp = $t02043920482._2
718+ let $t02058020623 = takeXpInternal(addr, 0)
719+ let actions = $t02058020623._1
720+ let xp = $t02058020623._2
721721 $Tuple2(actions, xp)
722722 }
723723
724724
725725
726726 @Callable(i)
727727 func checkWlgXpREADONLY (addr) = {
728- let $t02055920607 = takeXpInternal(addr, 0)
729- let ignored = $t02055920607._1
730- let deltaXP = $t02055920607._2
728+ let $t02070020748 = takeXpInternal(addr, 0)
729+ let ignored = $t02070020748._1
730+ let deltaXP = $t02070020748._2
731731 let newXP = (valueOrElse(getInteger(stakingContract, keyUserXP(addr)), 0) + deltaXP)
732732 let lvlPoints = levelUp(valueOrElse(getInteger(stakingContract, keyUserLevel(addr)), 0), newXP)
733733 $Tuple2(nil, (lvlPoints :+ newXP))
734734 }
735735
736736

github/deemru/w8io/026f985 
85.16 ms