tx · G5hdor2oDRP8bt23XKE2N1gLSpT8h3kKNBghcTz4hfnt 3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk: -0.01700000 Waves 2022.10.13 00:55 [2269700] smart account 3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk > SELF 0.00000000 Waves
{ "type": 13, "id": "G5hdor2oDRP8bt23XKE2N1gLSpT8h3kKNBghcTz4hfnt", "fee": 1700000, "feeAssetId": null, "timestamp": 1665611766817, "version": 2, "chainId": 84, "sender": "3N3dmyiBdj7pmjnQrzTTvmfzKSqndSzCMmk", "senderPublicKey": "AR4BeE6hYADMvKxgRQs4ADN3krEqb2j8WE3WfJxzL3zE", "proofs": [ "3T6Ep6i4rJC11QSxskRp3J1yFcqFjppGiBMX6LeBNaL7VMMq3GMDBLmzoeC2oLa4YiR9k1E1qdqF6DMgkTjwgyBe" ], "script": "base64:BgJFCAISAwoBCBIAEgMKAQgSAwoBCBIDCgEIEgcKBQgIAQEIEgMKAQgSBAoCCAgSBQoDCAgBEgMKAQgSABIFCgMICAgSABIAJwAFd2F2ZXMAgMLXLwAOdGlja2V0UHJpY2VJbnQAwIQ9AAt0aWNrZXRQcmljZQUOdGlja2V0UHJpY2VJbnQABmludkZlZQCgwh4AEndpdGhkcmF3RmVlUGVyY2VudAAFABZmZWVDb2xsZWN0b3JBZGRyZXNzS2V5AhNmZWVDb2xsZWN0b3JBZGRyZXNzABl0b3VybmFtZW50QnV5SW5GZWVQZXJjZW50AAoADmRlcG9zaXRBc3NldElkAiw1dWUxZml1VjZqNlVCcjZYZjI4UW1zNnk1RnF6S3RxdmF4eGh3dTdoVFE1OAAfYWxsb3dlZFNwZWNpYWxUb3VybmFtZW50Q3JlYXRvcgIjM05BZUJXQ1pGYkJERkxZbzlHTkpOb0U1aFEzYU1zVjVLc04BDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABEmdldFRpY2tldHNDb3VudEtleQENYWRkcmVzc1N0cmluZwkArAICBQ1hZGRyZXNzU3RyaW5nAg1fdGlja2V0c0NvdW50ASJidXlJbkFtb3VudEZvclRvdXJuYW1lbnRGb3JBY2NvdW50Agx0b3VybmFtZW50SWQHYWNjb3VudAkArAICCQCsAgIFDHRvdXJuYW1lbnRJZAIXX2J1eUluQW1vdW50Rm9yQWNjb3VudF8FB2FjY291bnQBI2J1eUluQXNzZXRJZEZvclRvdXJuYW1lbnRGb3JBY2NvdW50Agx0b3VybmFtZW50SWQHYWNjb3VudAkArAICCQCsAgIFDHRvdXJuYW1lbnRJZAIYX2J1eUluQXNzZXRJZEZvckFjY291bnRfBQdhY2NvdW50AR10aWNrZXRGb3JUb3VybmFtZW50Rm9yQWNjb3VudAIMdG91cm5hbWVudElkB2FjY291bnQJAKwCAgkArAICBQx0b3VybmFtZW50SWQCEl90aWNrZXRGb3JBY2NvdW50XwUHYWNjb3VudAEmdG91cm5hbWVudFRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCJF90b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAEvdG91cm5hbWVudFRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnRNaW51c0ZlZXNLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCLV90b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudE1pbnVzRmVlcwEUdG91cm5hbWVudENyZWF0b3JLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCEl90b3VybmFtZW50Q3JlYXRvcgERdG91cm5hbWVudE5hbWVLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCD190b3VybmFtZW50TmFtZQEYdG91cm5hbWVudFByaXplQW1vdW50S2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhZfdG91cm5hbWVudFByaXplQW1vdW50ARx0b3VybmFtZW50TWF4UGxheWVyc0NvdW50S2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhpfdG91cm5hbWVudE1heFBsYXllcnNDb3VudAEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIXX3RvdXJuYW1lbnRQbGF5ZXJzQ291bnQBGXRvdXJuYW1lbnRQcml6ZUFzc2V0SWRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCF190b3VybmFtZW50UHJpemVBc3NldElkARt0b3VybmFtZW50UHJpemVBc3NldE5hbWVLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCGV90b3VybmFtZW50UHJpemVBc3NldE5hbWUBGHRvdXJuYW1lbnRCdXlJbkFtb3VudEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIWX3RvdXJuYW1lbnRCdXlJbkFtb3VudAEZdG91cm5hbWVudEJ1eUluQXNzZXRJZEtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIXX3RvdXJuYW1lbnRCdXlJbkFzc2V0SWQBG3RvdXJuYW1lbnRCdXlJbkFzc2V0TmFtZUtleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIZX3RvdXJuYW1lbnRCdXlJbkFzc2V0TmFtZQEfdG91cm5hbWVudEJ1eUluQXNzZXREZWNpbWFsc0tleQEMdG91cm5hbWVudElkCQCsAgIFDHRvdXJuYW1lbnRJZAIdX3RvdXJuYW1lbnRCdXlJbkFzc2V0RGVjaW1hbHMBH3RvdXJuYW1lbnRQcml6ZUFzc2V0RGVjaW1hbHNLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCHV90b3VybmFtZW50UHJpemVBc3NldERlY2ltYWxzARN0b3VybmFtZW50U3RhdHVzS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhFfdG91cm5hbWVudFN0YXR1cwEedG91cm5hbWVudEJ1eUluRmVlQ29sbGVjdGVkS2V5AQx0b3VybmFtZW50SWQJAKwCAgUMdG91cm5hbWVudElkAhxfdG91cm5hbWVudEJ1eUluRmVlQ29sbGVjdGVkASF0b3VybmFtZW50V2lubmluZ1RyYW5zYWN0aW9uSWRLZXkBDHRvdXJuYW1lbnRJZAkArAICBQx0b3VybmFtZW50SWQCH190b3VybmFtZW50V2lubmluZ1RyYW5zYWN0aW9uSWQBDWdhbWVXaW5uZXJLZXkBBmdhbWVJZAkArAICBQZnYW1lSWQCB193aW5uZXIBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEHYWRkcmVzcwkArAICBQdhZGRyZXNzAg9fYXZhaWxhYmxlRnVuZHMBGmFkZHJlc3NUb3RhbExvY2tlZEZ1bmRzS2V5AQdhZGRyZXNzCQCsAgIFB2FkZHJlc3MCEV90b3RhbExvY2tlZEZ1bmRzASFhZGRyZXNzTG9ja2VkRnVuZHNUb3RhbEhpc3RvcnlLZXkBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIYX2xvY2tlZEZ1bmRzVG90YWxIaXN0b3J5ARxhZGRyZXNzTG9ja2VkRnVuZHNGb3JHYW1lS2V5AgdhZGRyZXNzBmdhbWVJZAkArAICCQCsAgIFB2FkZHJlc3MCDV9sb2NrZWRGdW5kc18FBmdhbWVJZAEaYWRkcmVzc0F2YWlsYWJsZVJld2FyZHNLZXkBB2FkZHJlc3MJAKwCAgUHYWRkcmVzcwIRX2F2YWlsYWJsZVJld2FyZHMBD2dldFRpY2tldHNDb3VudAENYWRkcmVzc1N0cmluZwkBDXRyeUdldEludGVnZXIBCQESZ2V0VGlja2V0c0NvdW50S2V5AQUNYWRkcmVzc1N0cmluZwENY29uc3VtZVRpY2tldAEKcGxheWVyQWRkcgQSY3VycmVudFRpY2tldENvdW50CQEPZ2V0VGlja2V0c0NvdW50AQUKcGxheWVyQWRkcgQVbmV3Q3VycmVudFRpY2tldENvdW50CQBlAgUSY3VycmVudFRpY2tldENvdW50AAEDCQBmAgAABRVuZXdDdXJyZW50VGlja2V0Q291bnQAAAUVbmV3Q3VycmVudFRpY2tldENvdW50DgFpARZzZXRGZWVDb2xsZWN0b3JBZGRyZXNzAQ1jb2xsZWN0b3JBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKQWRtaW4gT25seQkAzAgCCQELU3RyaW5nRW50cnkCBRZmZWVDb2xsZWN0b3JBZGRyZXNzS2V5BQ1jb2xsZWN0b3JBZGRyBQNuaWwBaQEMZGVwb3NpdEZ1bmRzAAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQIhUGxlYXNlIGF0dGFjaCBleGFjdGx5IG9uZSBwYXltZW50AwkBAiE9AggFA3BtdAdhc3NldElkCQDZBAEFDmRlcG9zaXRBc3NldElkCQACAQIZWW91IGNhbiBvbmx5IGRlcG9zaXQgVVNETgQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBVjdXJyZW50QXZhaWxhYmxlRnVuZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIJAGQCBRVjdXJyZW50QXZhaWxhYmxlRnVuZHMIBQNwbXQGYW1vdW50BQNuaWwAAQFpARhjYW5jZWxTaWduVXBUb1RvdXJuYW1lbnQBDHRvdXJuYW1lbnRJZAQQdG91cm5hbWVudFN0YXR1cwkBEUBleHRyTmF0aXZlKDEwNTgpAQkBE3RvdXJuYW1lbnRTdGF0dXNLZXkBBQx0b3VybmFtZW50SWQDCQECIT0CBRB0b3VybmFtZW50U3RhdHVzAgxyZWdpc3RyYXRpb24JAAIBAihUb3VybmFtZW50IGlzIG5vdCBpbiByZWdpc3RyYXRpb24gcGhhc2UhBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMED3BhaWRCdXlJbkFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBImJ1eUluQW1vdW50Rm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIEEHBhaWRCdXlJbkFzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEJASNidXlJbkFzc2V0SWRGb3JUb3VybmFtZW50Rm9yQWNjb3VudAIFDHRvdXJuYW1lbnRJZAUNY2FsbGVyQWRkclN0cgQdYWxyZWFkeVJlZ2lzdGVyZWRQbGF5ZXJzQ291bnQJAQ10cnlHZXRJbnRlZ2VyAQkBGXRvdXJuYW1lbnRQbGF5ZXJzQ291bnRLZXkBBQx0b3VybmFtZW50SWQEGXRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnQJAGUCCQENdHJ5R2V0SW50ZWdlcgEJASZ0b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAUPcGFpZEJ1eUluQW1vdW50BAlmZWVzVGFrZW4JAGsDBRl0b3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50BRl0b3VybmFtZW50QnV5SW5GZWVQZXJjZW50AGQJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1jYWxsZXJBZGRyU3RyBQ9wYWlkQnV5SW5BbW91bnQJANkEAQUQcGFpZEJ1eUluQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEddGlja2V0Rm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImJ1eUluQW1vdW50Rm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBI2J1eUluQXNzZXRJZEZvclRvdXJuYW1lbnRGb3JBY2NvdW50AgUMdG91cm5hbWVudElkBQ1jYWxsZXJBZGRyU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAkAZQIFHWFscmVhZHlSZWdpc3RlcmVkUGxheWVyc0NvdW50AAEJAMwIAgkBDEludGVnZXJFbnRyeQIJASZ0b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAUZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBL3RvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50TWludXNGZWVzS2V5AQUMdG91cm5hbWVudElkCQBlAgUZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAUJZmVlc1Rha2VuBQNuaWwAAQFpARJzaWduVXBUb1RvdXJuYW1lbnQBDHRvdXJuYW1lbnRJZAQPbWF4UGxheWVyc0NvdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEcdG91cm5hbWVudE1heFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAQdYWxyZWFkeVJlZ2lzdGVyZWRQbGF5ZXJzQ291bnQJAQ10cnlHZXRJbnRlZ2VyAQkBGXRvdXJuYW1lbnRQbGF5ZXJzQ291bnRLZXkBBQx0b3VybmFtZW50SWQEEHRvdXJuYW1lbnRTdGF0dXMJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkAwMJAQIhPQIFEHRvdXJuYW1lbnRTdGF0dXMCDHJlZ2lzdHJhdGlvbgkBAiE9AgUQdG91cm5hbWVudFN0YXR1cwIHc3RhcnRlZAcJAAIBAihUb3VybmFtZW50IGlzIG5vdCBpbiByZWdpc3RyYXRpb24gcGhhc2UhAwkAAAIFHWFscmVhZHlSZWdpc3RlcmVkUGxheWVyc0NvdW50BQ9tYXhQbGF5ZXJzQ291bnQJAAIBAjVUb3VybmFtZW50IGlzIGN1cnJlbnRseSBmdWxsLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIQQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQIhUGxlYXNlIGF0dGFjaCBleGFjdGx5IG9uZSBwYXltZW50BAxidXlJbkFzc2V0aWQEByRtYXRjaDAIBQNwbXQHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgRVbml0BAFiBQckbWF0Y2gwAgADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiCQACAQILTWF0Y2ggZXJyb3IEE2J1eUluUmVxdWlyZWRBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJARh0b3VybmFtZW50QnV5SW5BbW91bnRLZXkBBQx0b3VybmFtZW50SWQEFGJ1eUluUmVxdWlyZWRBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQEZdG91cm5hbWVudEJ1eUluQXNzZXRJZEtleQEFDHRvdXJuYW1lbnRJZAMJAQIhPQIFE2J1eUluUmVxdWlyZWRBbW91bnQIBQNwbXQGYW1vdW50CQACAQkArAICAixBdHRhY2hlZCBwYXltZW50IGFtb3VudCBpcyBpbnZhbGlkLCBtdXN0IGJlIAkApAMBBRNidXlJblJlcXVpcmVkQW1vdW50AwkBAiE9AgUUYnV5SW5SZXF1aXJlZEFzc2V0SWQFDGJ1eUluQXNzZXRpZAkAAgEJAKwCAgIuQXR0YWNoZWQgcGF5bWVudCBhc3NldCBpZCBpcyBpbnZhbGlkLCBtdXN0IGJlIAUUYnV5SW5SZXF1aXJlZEFzc2V0SWQEDWNhbGxlckFkZHJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkBJnRvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50S2V5AQUMdG91cm5hbWVudElkCAUDcG10BmFtb3VudAQJZmVlc1Rha2VuCQBrAwUZdG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudAUZdG91cm5hbWVudEJ1eUluRmVlUGVyY2VudABkCQCUCgIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAR10aWNrZXRGb3JUb3VybmFtZW50Rm9yQWNjb3VudAIFDHRvdXJuYW1lbnRJZAUNY2FsbGVyQWRkclN0cgYJAMwIAgkBDEludGVnZXJFbnRyeQIJASJidXlJbkFtb3VudEZvclRvdXJuYW1lbnRGb3JBY2NvdW50AgUMdG91cm5hbWVudElkBQ1jYWxsZXJBZGRyU3RyCAUDcG10BmFtb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQEjYnV5SW5Bc3NldElkRm9yVG91cm5hbWVudEZvckFjY291bnQCBQx0b3VybmFtZW50SWQFDWNhbGxlckFkZHJTdHIFDGJ1eUluQXNzZXRpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGXRvdXJuYW1lbnRQbGF5ZXJzQ291bnRLZXkBBQx0b3VybmFtZW50SWQJAGQCBR1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEmdG91cm5hbWVudFRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnRLZXkBBQx0b3VybmFtZW50SWQFGXRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAS90b3VybmFtZW50VG90YWxCdXlJbkNvbGxlY3RlZEFtb3VudE1pbnVzRmVlc0tleQEFDHRvdXJuYW1lbnRJZAkAZQIFGXRvdGFsQnV5SW5Db2xsZWN0ZWRBbW91bnQFCWZlZXNUYWtlbgUDbmlsAAEBaQEQY2FuY2VsVG91cm5hbWVudAEMdG91cm5hbWVudElkBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEEXRvdXJuYW1lbnRDcmVhdG9yCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEUdG91cm5hbWVudENyZWF0b3JLZXkBBQx0b3VybmFtZW50SWQEDGNyZWF0b3JDaGVjawMJAAACBRF0b3VybmFtZW50Q3JlYXRvcgUNY2FsbGVyQWRkclN0cgYDCQAAAggFAWkGY2FsbGVyBQR0aGlzBgkAAgECJk9ubHkgdG91cm5hbWVudCBjcmVhdG9yIGNhbiBjYW5jZWwgaXQhAwkAAAIFDGNyZWF0b3JDaGVjawUMY3JlYXRvckNoZWNrBBB0b3VybmFtZW50U3RhdHVzCQERQGV4dHJOYXRpdmUoMTA1OCkBCQETdG91cm5hbWVudFN0YXR1c0tleQEFDHRvdXJuYW1lbnRJZAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIFEHRvdXJuYW1lbnRTdGF0dXMCDHJlZ2lzdHJhdGlvbgcJAAIBAihUb3VybmFtZW50IGlzIG5vdCBpbiByZWdpc3RyYXRpb24gcGhhc2UhBB1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAkBDXRyeUdldEludGVnZXIBCQEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAMJAGYCBR1hbHJlYWR5UmVnaXN0ZXJlZFBsYXllcnNDb3VudAAACQACAQJFQ2Fubm90IGNhbmNlbCBhIHRvdXJuYW1lbnQgd2hlbiBwbGF5ZXJzIGFyZSBhbHJlYWR5IHJlZ2lzdGVyZWQgdG8gaXQhBBV0b3VybmFtZW50UHJpemVBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARh0b3VybmFtZW50UHJpemVBbW91bnRLZXkBBQx0b3VybmFtZW50SWQEFnRvdXJuYW1lbnRQcml6ZUFzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARl0b3VybmFtZW50UHJpemVBc3NldElkS2V5AQUMdG91cm5hbWVudElkCQCUCgIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGHRvdXJuYW1lbnRQcml6ZUFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEZdG91cm5hbWVudFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEcdG91cm5hbWVudE1heFBsYXllcnNDb3VudEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEZdG91cm5hbWVudFByaXplQXNzZXRJZEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEbdG91cm5hbWVudFByaXplQXNzZXROYW1lS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAR90b3VybmFtZW50UHJpemVBc3NldERlY2ltYWxzS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARh0b3VybmFtZW50QnV5SW5BbW91bnRLZXkBBQx0b3VybmFtZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBG3RvdXJuYW1lbnRCdXlJbkFzc2V0TmFtZUtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEfdG91cm5hbWVudEJ1eUluQXNzZXREZWNpbWFsc0tleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEZdG91cm5hbWVudEJ1eUluQXNzZXRJZEtleQEFDHRvdXJuYW1lbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQERdG91cm5hbWVudE5hbWVLZXkBBQx0b3VybmFtZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFHRvdXJuYW1lbnRDcmVhdG9yS2V5AQUMdG91cm5hbWVudElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFEXRvdXJuYW1lbnRDcmVhdG9yBRV0b3VybmFtZW50UHJpemVBbW91bnQJANkEAQUWdG91cm5hbWVudFByaXplQXNzZXRJZAUDbmlsAAEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEQY3JlYXRlVG91cm5hbWVudAUMdG91cm5hbWVudElkBG5hbWUMcGxheWVyc0NvdW50C2J1eUluQW1vdW50DGJ1eUluQXNzZXRJZAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAABA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMDCQAAAgUNY2FsbGVyQWRkclN0cgUfYWxsb3dlZFNwZWNpYWxUb3VybmFtZW50Q3JlYXRvcgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQAAAkAAgECIVBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAQRdG91cm5hbWVudENyZWF0b3IEByRtYXRjaDAJAKIIAQkBFHRvdXJuYW1lbnRDcmVhdG9yS2V5AQUMdG91cm5hbWVudElkAwkAAQIFByRtYXRjaDACBlN0cmluZwQHY3JlYXRvcgUHJG1hdGNoMAkAAgEJAKwCAgInVG91cm5hbWVudCBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoaXMgaWQgBQx0b3VybmFtZW50SWQFBHVuaXQDCQAAAgURdG91cm5hbWVudENyZWF0b3IFEXRvdXJuYW1lbnRDcmVhdG9yBAxwcml6ZUFzc2V0SWQEByRtYXRjaDAIBQNwbXQHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgRVbml0BAFiBQckbWF0Y2gwAgADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiCQACAQILTWF0Y2ggZXJyb3IEDGFzc2V0RGV0YWlscwQHJG1hdGNoMAgFA3BtdAdhc3NldElkAwkAAQIFByRtYXRjaDACBFVuaXQEAWIFByRtYXRjaDAJAMwIAgIFV2F2ZXMJAMwIAgAIBQNuaWwDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAQHJG1hdGNoMQkA7AcBBQFiAwkAAQIFByRtYXRjaDECBUFzc2V0BAVhc3NldAUHJG1hdGNoMQkAzAgCCAUFYXNzZXQEbmFtZQkAzAgCCAUFYXNzZXQIZGVjaW1hbHMFA25pbAkAAgECEENhbid0IGZpbmQgYXNzZXQJAAIBAgtNYXRjaCBlcnJvcgQKYnV5SW5Bc3NldAQHJG1hdGNoMAkA7AcBCQDZBAEFDGJ1eUluQXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAJAMwIAggFBWFzc2V0BG5hbWUJAMwIAggFBWFzc2V0CGRlY2ltYWxzBQNuaWwJAMwIAgIACQDMCAIAAAUDbmlsBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGHRvdXJuYW1lbnRQcml6ZUFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJARl0b3VybmFtZW50UGxheWVyc0NvdW50S2V5AQUMdG91cm5hbWVudElkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJARx0b3VybmFtZW50TWF4UGxheWVyc0NvdW50S2V5AQUMdG91cm5hbWVudElkBQxwbGF5ZXJzQ291bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGXRvdXJuYW1lbnRQcml6ZUFzc2V0SWRLZXkBBQx0b3VybmFtZW50SWQFDHByaXplQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEbdG91cm5hbWVudFByaXplQXNzZXROYW1lS2V5AQUMdG91cm5hbWVudElkCgABQAkAkQMCBQxhc3NldERldGFpbHMAAAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcJAMwIAgkBDEludGVnZXJFbnRyeQIJAR90b3VybmFtZW50UHJpemVBc3NldERlY2ltYWxzS2V5AQUMdG91cm5hbWVudElkCgABQAkAkQMCBQxhc3NldERldGFpbHMAAQMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE3RvdXJuYW1lbnRTdGF0dXNLZXkBBQx0b3VybmFtZW50SWQCDHJlZ2lzdHJhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGHRvdXJuYW1lbnRCdXlJbkFtb3VudEtleQEFDHRvdXJuYW1lbnRJZAULYnV5SW5BbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBG3RvdXJuYW1lbnRCdXlJbkFzc2V0TmFtZUtleQEFDHRvdXJuYW1lbnRJZAoAAUAJAJEDAgUKYnV5SW5Bc3NldAAAAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBH3RvdXJuYW1lbnRCdXlJbkFzc2V0RGVjaW1hbHNLZXkBBQx0b3VybmFtZW50SWQKAAFACQCRAwIFCmJ1eUluQXNzZXQAAQMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBGXRvdXJuYW1lbnRCdXlJbkFzc2V0SWRLZXkBBQx0b3VybmFtZW50SWQFDGJ1eUluQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQERdG91cm5hbWVudE5hbWVLZXkBBQx0b3VybmFtZW50SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFHRvdXJuYW1lbnRDcmVhdG9yS2V5AQUMdG91cm5hbWVudElkBQ1jYWxsZXJBZGRyU3RyBQNuaWwAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ9zdGFydFRvdXJuYW1lbnQBDHRvdXJuYW1lbnRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECCkFkbWluIE9ubHkJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQETdG91cm5hbWVudFN0YXR1c0tleQEFDHRvdXJuYW1lbnRJZAIHc3RhcnRlZAUDbmlsAAEBaQEQZmluaXNoVG91cm5hbWVudAIMdG91cm5hbWVudElkHXdpbm5pbmdUcmFuc2ZlcnRUcmFuc2FjdGlvbklkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKQWRtaW4gT25seQQRdG91cm5hbWVudENyZWF0b3IJARFAZXh0ck5hdGl2ZSgxMDU4KQEJARR0b3VybmFtZW50Q3JlYXRvcktleQEFDHRvdXJuYW1lbnRJZAQadG91cm5hbWVudFRvdGFsQnV5SW5BbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQkBJnRvdXJuYW1lbnRUb3RhbEJ1eUluQ29sbGVjdGVkQW1vdW50S2V5AQUMdG91cm5hbWVudElkBBV0b3VybmFtZW50QnV5SW5BbW91bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARh0b3VybmFtZW50QnV5SW5BbW91bnRLZXkBBQx0b3VybmFtZW50SWQEFnRvdXJuYW1lbnRCdXlJbkFzc2V0SWQEByRtYXRjaDAJAKIIAQkBGXRvdXJuYW1lbnRCdXlJbkFzc2V0SWRLZXkBBQx0b3VybmFtZW50SWQDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAJpZAUHJG1hdGNoMAMJAAACBQJpZAIABQR1bml0CQDZBAEFAmlkBQR1bml0BBJ0b3VybmFtZW50QnV5SW5GZWUJAGsDBRp0b3VybmFtZW50VG90YWxCdXlJbkFtb3VudAUZdG91cm5hbWVudEJ1eUluRmVlUGVyY2VudABkBBV0b3VybmFtZW50UHJpemVBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJARh0b3VybmFtZW50UHJpemVBbW91bnRLZXkBBQx0b3VybmFtZW50SWQDCQBmAgUVdG91cm5hbWVudFByaXplQW1vdW50AAAJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQEhdG91cm5hbWVudFdpbm5pbmdUcmFuc2FjdGlvbklkS2V5AQUMdG91cm5hbWVudElkBR13aW5uaW5nVHJhbnNmZXJ0VHJhbnNhY3Rpb25JZAkAzAgCCQELU3RyaW5nRW50cnkCCQETdG91cm5hbWVudFN0YXR1c0tleQEFDHRvdXJuYW1lbnRJZAIIZmluaXNoZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAR50b3VybmFtZW50QnV5SW5GZWVDb2xsZWN0ZWRLZXkBBQx0b3VybmFtZW50SWQFEnRvdXJuYW1lbnRCdXlJbkZlZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBRF0b3VybmFtZW50Q3JlYXRvcgkAZQIFGnRvdXJuYW1lbnRUb3RhbEJ1eUluQW1vdW50BRJ0b3VybmFtZW50QnV5SW5GZWUFFnRvdXJuYW1lbnRCdXlJbkFzc2V0SWQFA25pbAABBApzZXJ2aWNlRmVlCQBrAwUSdG91cm5hbWVudEJ1eUluRmVlABQAZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJASF0b3VybmFtZW50V2lubmluZ1RyYW5zYWN0aW9uSWRLZXkBBQx0b3VybmFtZW50SWQFHXdpbm5pbmdUcmFuc2ZlcnRUcmFuc2FjdGlvbklkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARN0b3VybmFtZW50U3RhdHVzS2V5AQUMdG91cm5hbWVudElkAghmaW5pc2hlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHnRvdXJuYW1lbnRCdXlJbkZlZUNvbGxlY3RlZEtleQEFDHRvdXJuYW1lbnRJZAUSdG91cm5hbWVudEJ1eUluRmVlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFEXRvdXJuYW1lbnRDcmVhdG9yCQBlAgUSdG91cm5hbWVudEJ1eUluRmVlBQpzZXJ2aWNlRmVlBRZ0b3VybmFtZW50QnV5SW5Bc3NldElkBQNuaWwAAQFpAQ5wbGF5ZXJFeGl0R2FtZQMGZ2FtZUlkCnBsYXllckFkZHIPZXhpdFN0YWNrQW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKQWRtaW4gT25seQQXY3VycmVudFRvdGFsTG9ja2VkRnVuZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGmFkZHJlc3NUb3RhbExvY2tlZEZ1bmRzS2V5AQUKcGxheWVyQWRkcgQgY3VycmVudEdhbWVMb2NrZWRBbW91bnRGb3JQbGF5ZXIJAQ10cnlHZXRJbnRlZ2VyAQkBHGFkZHJlc3NMb2NrZWRGdW5kc0ZvckdhbWVLZXkCBQpwbGF5ZXJBZGRyBQZnYW1lSWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmFkZHJlc3NUb3RhbExvY2tlZEZ1bmRzS2V5AQUKcGxheWVyQWRkcgkAZQIFF2N1cnJlbnRUb3RhbExvY2tlZEZ1bmRzBSBjdXJyZW50R2FtZUxvY2tlZEFtb3VudEZvclBsYXllcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHGFkZHJlc3NMb2NrZWRGdW5kc0ZvckdhbWVLZXkCBQpwbGF5ZXJBZGRyBQZnYW1lSWQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQpwbGF5ZXJBZGRyBQ9leGl0U3RhY2tBbW91bnQJANkEAQUOZGVwb3NpdEFzc2V0SWQFA25pbAABAWkBEGxvY2tGdW5kc0ZvckdhbWUBBmdhbWVJZAQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQIhUGxlYXNlIGF0dGFjaCBleGFjdGx5IG9uZSBwYXltZW50AwkBAiE9AggFA3BtdAdhc3NldElkCQDZBAEFDmRlcG9zaXRBc3NldElkCQACAQIZWW91IGNhbiBvbmx5IGRlcG9zaXQgVVNETgQNY2FsbGVyQWRkclN0cgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBdjdXJyZW50VG90YWxMb2NrZWRGdW5kcwkBDXRyeUdldEludGVnZXIBCQEaYWRkcmVzc1RvdGFsTG9ja2VkRnVuZHNLZXkBBQ1jYWxsZXJBZGRyU3RyBB5jdXJyZW50TG9ja2VkRnVuZHNUb3RhbEhpc3RvcnkJAQ10cnlHZXRJbnRlZ2VyAQkBIWFkZHJlc3NMb2NrZWRGdW5kc1RvdGFsSGlzdG9yeUtleQEFDWNhbGxlckFkZHJTdHIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmFkZHJlc3NUb3RhbExvY2tlZEZ1bmRzS2V5AQUNY2FsbGVyQWRkclN0cgkAZAIFF2N1cnJlbnRUb3RhbExvY2tlZEZ1bmRzCAUDcG10BmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBIWFkZHJlc3NMb2NrZWRGdW5kc1RvdGFsSGlzdG9yeUtleQEFDWNhbGxlckFkZHJTdHIJAGQCBR5jdXJyZW50TG9ja2VkRnVuZHNUb3RhbEhpc3RvcnkIBQNwbXQGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEcYWRkcmVzc0xvY2tlZEZ1bmRzRm9yR2FtZUtleQIFDWNhbGxlckFkZHJTdHIFBmdhbWVJZAgFA3BtdAZhbW91bnQFA25pbAABAWkBDXdpdGhkcmF3RnVuZHMABA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEEGZlZUNvbGxlY3RvckFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJARFAZXh0ck5hdGl2ZSgxMDU4KQEFFmZlZUNvbGxlY3RvckFkZHJlc3NLZXkEFWN1cnJlbnRBdmFpbGFibGVGdW5kcwkBDXRyeUdldEludGVnZXIBCQEYYWRkcmVzc0F2YWlsYWJsZUZ1bmRzS2V5AQUNY2FsbGVyQWRkclN0cgQLd2l0aGRyYXdGZWUJAGsDBRVjdXJyZW50QXZhaWxhYmxlRnVuZHMFEndpdGhkcmF3RmVlUGVyY2VudABkBBRhY3R1YWxBdmFpbGFibGVGdW5kcwkAZQIFFWN1cnJlbnRBdmFpbGFibGVGdW5kcwULd2l0aGRyYXdGZWUDCQBnAgAABRRhY3R1YWxBdmFpbGFibGVGdW5kcwkAAgECHk5vIGF2YWlsYWJsZSBmdW5kcyB0byB3aXRoZHJhdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGGFkZHJlc3NBdmFpbGFibGVGdW5kc0tleQEFDWNhbGxlckFkZHJTdHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFFGFjdHVhbEF2YWlsYWJsZUZ1bmRzCQDZBAEFDmRlcG9zaXRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFEGZlZUNvbGxlY3RvckFkZHIFC3dpdGhkcmF3RmVlCQDZBAEFDmRlcG9zaXRBc3NldElkBQNuaWwBaQEQc2V0V2lubmVySGVhZHNVcAMGZ2FtZUlkDXdpbm5lckFkZHJTdHIPb3RoZXJQbGF5ZXJBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKQWRtaW4gT25seQQTYXZhaWxhYmxlUmV3YXJkc0tleQkBGmFkZHJlc3NBdmFpbGFibGVSZXdhcmRzS2V5AQUNd2lubmVyQWRkclN0cgQXY3VycmVudEF2YWlsYWJsZVJld2FyZHMJAQ10cnlHZXRJbnRlZ2VyAQUTYXZhaWxhYmxlUmV3YXJkc0tleQQUbmV3VGlja2V0Q291bnRXaW5uZXIJAQ1jb25zdW1lVGlja2V0AQUNd2lubmVyQWRkclN0cgQZbmV3VGlja2V0Q291bnRPdGhlclBsYXllcgkBDWNvbnN1bWVUaWNrZXQBBQ9vdGhlclBsYXllckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWdhbWVXaW5uZXJLZXkBBQZnYW1lSWQFDXdpbm5lckFkZHJTdHIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2F2YWlsYWJsZVJld2FyZHNLZXkJAGQCBRdjdXJyZW50QXZhaWxhYmxlUmV3YXJkcwkAaAIFC3RpY2tldFByaWNlAAIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJnZXRUaWNrZXRzQ291bnRLZXkBBQ13aW5uZXJBZGRyU3RyBRRuZXdUaWNrZXRDb3VudFdpbm5lcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmdldFRpY2tldHNDb3VudEtleQEFD290aGVyUGxheWVyQWRkcgUZbmV3VGlja2V0Q291bnRPdGhlclBsYXllcgUDbmlsAWkBD3dpdGhkcmF3UmV3YXJkcwAEDWNhbGxlckFkZHJTdHIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQQZmVlQ29sbGVjdG9yQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBEUBleHRyTmF0aXZlKDEwNTgpAQUWZmVlQ29sbGVjdG9yQWRkcmVzc0tleQQXY3VycmVudEF2YWlsYWJsZVJld2FyZHMJAQ10cnlHZXRJbnRlZ2VyAQkBGmFkZHJlc3NBdmFpbGFibGVSZXdhcmRzS2V5AQUNY2FsbGVyQWRkclN0cgQLd2l0aGRyYXdGZWUJAGsDBRdjdXJyZW50QXZhaWxhYmxlUmV3YXJkcwUSd2l0aGRyYXdGZWVQZXJjZW50AGQEFmFjdHVhbEF2YWlsYWJsZVJld2FyZHMJAGUCCQBlAgUXY3VycmVudEF2YWlsYWJsZVJld2FyZHMFBmludkZlZQULd2l0aGRyYXdGZWUDCQBnAgAABRdjdXJyZW50QXZhaWxhYmxlUmV3YXJkcwkAAgECIE5vIGF2YWlsYWJsZSByZXdhcmRzIHRvIHdpdGhkcmF3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaYWRkcmVzc0F2YWlsYWJsZVJld2FyZHNLZXkBBQ1jYWxsZXJBZGRyU3RyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRZhY3R1YWxBdmFpbGFibGVSZXdhcmRzBQR1bml0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFEGZlZUNvbGxlY3RvckFkZHIFC3dpdGhkcmF3RmVlBQR1bml0BQNuaWwBaQEKYnV5VGlja2V0cwAEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECIVBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAMJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQJAAIBAidUaWNrZXRzIGNhbiBvbmx5IGliZSBwdXJjaGFzZWQgaW4gV2F2ZXMDCQECIT0CCAUDcG10BmFtb3VudAULdGlja2V0UHJpY2UJAAIBCQCsAgIJAKwCAgIfVGhlIHBheW1lbnQgbXVzdCBiZSBvZiBleGFjdGx5IAkApAMBBQ50aWNrZXRQcmljZUludAIGIHdhdmVzBA1jYWxsZXJBZGRyU3RyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEE2N1cnJlbnRUaWNrZXRzQ291bnQJAQ10cnlHZXRJbnRlZ2VyAQkBEmdldFRpY2tldHNDb3VudEtleQEFDWNhbGxlckFkZHJTdHIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmdldFRpY2tldHNDb3VudEtleQEFDWNhbGxlckFkZHJTdHIJAGQCBRNjdXJyZW50VGlja2V0c0NvdW50AAEFA25pbAABAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tledrstLg=", "height": 2269700, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EetVfLRTc6AprVomR3jMvM3bX7o3vitiphjCR6xzEt81 Next: mqaXQwJjaKyyzQCzr264a4H3HpWDgULRGVkPpirXzhT Diff:
Old | New | Differences | |
---|---|---|---|
17 | 17 | ||
18 | 18 | let h = "5ue1fiuV6j6UBr6Xf28Qms6y5FqzKtqvaxxhwu7hTQ58" | |
19 | 19 | ||
20 | - | func i (j) = { | |
21 | - | let k = getInteger(this, j) | |
22 | - | if ($isInstanceOf(k, "Int")) | |
20 | + | let i = "3NAeBWCZFbBDFLYo9GNJNoE5hQ3aMsV5KsN" | |
21 | + | ||
22 | + | func j (k) = { | |
23 | + | let l = getInteger(this, k) | |
24 | + | if ($isInstanceOf(l, "Int")) | |
23 | 25 | then { | |
24 | - | let | |
25 | - | | |
26 | + | let m = l | |
27 | + | m | |
26 | 28 | } | |
27 | 29 | else 0 | |
28 | 30 | } | |
29 | 31 | ||
30 | 32 | ||
31 | - | func | |
33 | + | func n (o) = (o + "_ticketsCount") | |
32 | 34 | ||
33 | 35 | ||
34 | - | func | |
36 | + | func p (q,r) = ((q + "_buyInAmountForAccount_") + r) | |
35 | 37 | ||
36 | 38 | ||
37 | - | func | |
39 | + | func s (q,r) = ((q + "_buyInAssetIdForAccount_") + r) | |
38 | 40 | ||
39 | 41 | ||
40 | - | func | |
42 | + | func t (q,r) = ((q + "_ticketForAccount_") + r) | |
41 | 43 | ||
42 | 44 | ||
43 | - | func | |
45 | + | func u (q) = (q + "_tournamentTotalBuyInCollectedAmount") | |
44 | 46 | ||
45 | 47 | ||
46 | - | func | |
48 | + | func v (q) = (q + "_tournamentTotalBuyInCollectedAmountMinusFees") | |
47 | 49 | ||
48 | 50 | ||
49 | - | func | |
51 | + | func w (q) = (q + "_tournamentCreator") | |
50 | 52 | ||
51 | 53 | ||
52 | - | func | |
54 | + | func x (q) = (q + "_tournamentName") | |
53 | 55 | ||
54 | 56 | ||
55 | - | func | |
57 | + | func y (q) = (q + "_tournamentPrizeAmount") | |
56 | 58 | ||
57 | 59 | ||
58 | - | func | |
60 | + | func z (q) = (q + "_tournamentMaxPlayersCount") | |
59 | 61 | ||
60 | 62 | ||
61 | - | func | |
63 | + | func A (q) = (q + "_tournamentPlayersCount") | |
62 | 64 | ||
63 | 65 | ||
64 | - | func | |
66 | + | func B (q) = (q + "_tournamentPrizeAssetId") | |
65 | 67 | ||
66 | 68 | ||
67 | - | func | |
69 | + | func C (q) = (q + "_tournamentPrizeAssetName") | |
68 | 70 | ||
69 | 71 | ||
70 | - | func | |
72 | + | func D (q) = (q + "_tournamentBuyInAmount") | |
71 | 73 | ||
72 | 74 | ||
73 | - | func | |
75 | + | func E (q) = (q + "_tournamentBuyInAssetId") | |
74 | 76 | ||
75 | 77 | ||
76 | - | func | |
78 | + | func F (q) = (q + "_tournamentBuyInAssetName") | |
77 | 79 | ||
78 | 80 | ||
79 | - | func | |
81 | + | func G (q) = (q + "_tournamentBuyInAssetDecimals") | |
80 | 82 | ||
81 | 83 | ||
82 | - | func | |
84 | + | func H (q) = (q + "_tournamentPrizeAssetDecimals") | |
83 | 85 | ||
84 | 86 | ||
85 | - | func | |
87 | + | func I (q) = (q + "_tournamentStatus") | |
86 | 88 | ||
87 | 89 | ||
88 | - | func | |
90 | + | func J (q) = (q + "_tournamentBuyInFeeCollected") | |
89 | 91 | ||
90 | 92 | ||
91 | - | func | |
93 | + | func K (q) = (q + "_tournamentWinningTransactionId") | |
92 | 94 | ||
93 | 95 | ||
94 | - | func | |
96 | + | func L (M) = (M + "_winner") | |
95 | 97 | ||
96 | 98 | ||
97 | - | func | |
99 | + | func N (O) = (O + "_availableFunds") | |
98 | 100 | ||
99 | 101 | ||
100 | - | func | |
102 | + | func P (O) = (O + "_totalLockedFunds") | |
101 | 103 | ||
102 | 104 | ||
103 | - | func | |
105 | + | func Q (O) = (O + "_lockedFundsTotalHistory") | |
104 | 106 | ||
105 | 107 | ||
106 | - | func | |
108 | + | func R (O,M) = ((O + "_lockedFunds_") + M) | |
107 | 109 | ||
108 | 110 | ||
109 | - | func | |
111 | + | func S (O) = (O + "_availableRewards") | |
110 | 112 | ||
111 | 113 | ||
112 | - | func | |
114 | + | func T (o) = j(n(o)) | |
113 | 115 | ||
114 | 116 | ||
115 | - | func | |
116 | - | let | |
117 | - | let | |
118 | - | if ((0 > | |
117 | + | func U (V) = { | |
118 | + | let W = T(V) | |
119 | + | let X = (W - 1) | |
120 | + | if ((0 > X)) | |
119 | 121 | then 0 | |
120 | - | else | |
122 | + | else X | |
121 | 123 | } | |
122 | 124 | ||
123 | 125 | ||
124 | - | @Callable( | |
125 | - | func setFeeCollectorAddress ( | |
126 | + | @Callable(Y) | |
127 | + | func setFeeCollectorAddress (Z) = if ((Y.caller != this)) | |
126 | 128 | then throw("Admin Only") | |
127 | - | else [StringEntry(f, | |
129 | + | else [StringEntry(f, Z)] | |
128 | 130 | ||
129 | 131 | ||
130 | 132 | ||
131 | - | @Callable( | |
133 | + | @Callable(Y) | |
132 | 134 | func depositFunds () = { | |
133 | - | let | |
134 | - | then | |
135 | + | let aa = if ((size(Y.payments) == 1)) | |
136 | + | then Y.payments[0] | |
135 | 137 | else throw("Please attach exactly one payment") | |
136 | - | if (( | |
138 | + | if ((aa.assetId != fromBase58String(h))) | |
137 | 139 | then throw("You can only deposit USDN") | |
138 | 140 | else { | |
139 | - | let | |
140 | - | let | |
141 | - | $Tuple2([IntegerEntry( | |
141 | + | let ab = toBase58String(Y.caller.bytes) | |
142 | + | let ac = j(N(ab)) | |
143 | + | $Tuple2([IntegerEntry(N(ab), (ac + aa.amount))], 1) | |
142 | 144 | } | |
143 | 145 | } | |
144 | 146 | ||
145 | 147 | ||
146 | 148 | ||
147 | - | @Callable( | |
148 | - | func cancelSignUpToTournament ( | |
149 | - | let | |
150 | - | if (( | |
149 | + | @Callable(Y) | |
150 | + | func cancelSignUpToTournament (q) = { | |
151 | + | let ad = getStringValue(I(q)) | |
152 | + | if ((ad != "registration")) | |
151 | 153 | then throw("Tournament is not in registration phase!") | |
152 | 154 | else { | |
153 | - | let | |
154 | - | let | |
155 | - | let | |
156 | - | let | |
157 | - | let | |
158 | - | let | |
159 | - | $Tuple2([ScriptTransfer(addressFromStringValue( | |
155 | + | let ab = toBase58String(Y.caller.bytes) | |
156 | + | let ae = getIntegerValue(p(q, ab)) | |
157 | + | let af = getStringValue(s(q, ab)) | |
158 | + | let ag = j(A(q)) | |
159 | + | let ah = (j(u(q)) - ae) | |
160 | + | let ai = fraction(ah, g, 100) | |
161 | + | $Tuple2([ScriptTransfer(addressFromStringValue(ab), ae, fromBase58String(af)), DeleteEntry(t(q, ab)), DeleteEntry(p(q, ab)), DeleteEntry(s(q, ab)), IntegerEntry(A(q), (ag - 1)), IntegerEntry(u(q), ah), IntegerEntry(v(q), (ah - ai))], 1) | |
160 | 162 | } | |
161 | 163 | } | |
162 | 164 | ||
163 | 165 | ||
164 | 166 | ||
165 | - | @Callable( | |
166 | - | func signUpToTournament ( | |
167 | - | let | |
168 | - | let | |
169 | - | let | |
170 | - | if (if (( | |
171 | - | then ( | |
167 | + | @Callable(Y) | |
168 | + | func signUpToTournament (q) = { | |
169 | + | let aj = getIntegerValue(this, z(q)) | |
170 | + | let ag = j(A(q)) | |
171 | + | let ad = getStringValue(I(q)) | |
172 | + | if (if ((ad != "registration")) | |
173 | + | then (ad != "started") | |
172 | 174 | else false) | |
173 | 175 | then throw("Tournament is not in registration phase!") | |
174 | - | else if (( | |
176 | + | else if ((ag == aj)) | |
175 | 177 | then throw("Tournament is currently full, please try again later!") | |
176 | 178 | else { | |
177 | - | let | |
178 | - | then | |
179 | + | let aa = if ((size(Y.payments) == 1)) | |
180 | + | then Y.payments[0] | |
179 | 181 | else throw("Please attach exactly one payment") | |
180 | - | let | |
181 | - | let | |
182 | - | if ($isInstanceOf( | |
182 | + | let ak = { | |
183 | + | let l = aa.assetId | |
184 | + | if ($isInstanceOf(l, "Unit")) | |
183 | 185 | then { | |
184 | - | let | |
186 | + | let m = l | |
185 | 187 | "" | |
186 | 188 | } | |
187 | - | else if ($isInstanceOf( | |
189 | + | else if ($isInstanceOf(l, "ByteVector")) | |
188 | 190 | then { | |
189 | - | let | |
190 | - | toBase58String( | |
191 | + | let m = l | |
192 | + | toBase58String(m) | |
191 | 193 | } | |
192 | 194 | else throw("Match error") | |
193 | 195 | } | |
194 | - | let | |
195 | - | let | |
196 | - | if (( | |
197 | - | then throw(("Attached payment amount is invalid, must be " + toString( | |
198 | - | else if (( | |
199 | - | then throw(("Attached payment asset id is invalid, must be " + | |
196 | + | let al = getIntegerValue(this, D(q)) | |
197 | + | let am = getStringValue(this, E(q)) | |
198 | + | if ((al != aa.amount)) | |
199 | + | then throw(("Attached payment amount is invalid, must be " + toString(al))) | |
200 | + | else if ((am != ak)) | |
201 | + | then throw(("Attached payment asset id is invalid, must be " + am)) | |
200 | 202 | else { | |
201 | - | let | |
202 | - | let | |
203 | - | let | |
204 | - | $Tuple2([BooleanEntry( | |
203 | + | let ab = toBase58String(Y.caller.bytes) | |
204 | + | let ah = (j(u(q)) + aa.amount) | |
205 | + | let ai = fraction(ah, g, 100) | |
206 | + | $Tuple2([BooleanEntry(t(q, ab), true), IntegerEntry(p(q, ab), aa.amount), StringEntry(s(q, ab), ak), IntegerEntry(A(q), (ag + 1)), IntegerEntry(u(q), ah), IntegerEntry(v(q), (ah - ai))], 1) | |
205 | 207 | } | |
206 | 208 | } | |
207 | 209 | } | |
208 | 210 | ||
209 | 211 | ||
210 | 212 | ||
211 | - | @Callable( | |
212 | - | func cancelTournament ( | |
213 | - | let | |
214 | - | let | |
215 | - | let | |
213 | + | @Callable(Y) | |
214 | + | func cancelTournament (q) = { | |
215 | + | let ab = toBase58String(Y.caller.bytes) | |
216 | + | let an = getStringValue(w(q)) | |
217 | + | let ao = if ((an == ab)) | |
216 | 218 | then true | |
217 | - | else if (( | |
219 | + | else if ((Y.caller == this)) | |
218 | 220 | then true | |
219 | 221 | else throw("Only tournament creator can cancel it!") | |
220 | - | if (( | |
222 | + | if ((ao == ao)) | |
221 | 223 | then { | |
222 | - | let | |
223 | - | if (if (( | |
224 | - | then ( | |
224 | + | let ad = getStringValue(I(q)) | |
225 | + | if (if ((Y.caller != this)) | |
226 | + | then (ad != "registration") | |
225 | 227 | else false) | |
226 | 228 | then throw("Tournament is not in registration phase!") | |
227 | 229 | else { | |
228 | - | let | |
229 | - | if (( | |
230 | + | let ag = j(A(q)) | |
231 | + | if ((ag > 0)) | |
230 | 232 | then throw("Cannot cancel a tournament when players are already registered to it!") | |
231 | 233 | else { | |
232 | - | let | |
233 | - | let | |
234 | - | $Tuple2([DeleteEntry( | |
234 | + | let ap = getIntegerValue(y(q)) | |
235 | + | let aq = getStringValue(B(q)) | |
236 | + | $Tuple2([DeleteEntry(y(q)), DeleteEntry(A(q)), DeleteEntry(z(q)), DeleteEntry(B(q)), DeleteEntry(C(q)), DeleteEntry(H(q)), DeleteEntry(I(q)), DeleteEntry(D(q)), DeleteEntry(F(q)), DeleteEntry(G(q)), DeleteEntry(E(q)), DeleteEntry(x(q)), DeleteEntry(w(q)), ScriptTransfer(addressFromStringValue(an), ap, fromBase58String(aq))], 1) | |
235 | 237 | } | |
236 | 238 | } | |
237 | 239 | } | |
240 | 242 | ||
241 | 243 | ||
242 | 244 | ||
243 | - | @Callable(X) | |
244 | - | func createTournament (p,aq,ar,as,at) = { | |
245 | - | let Z = if ((size(X.payments) == 1)) | |
246 | - | then X.payments[0] | |
247 | - | else throw("Please attach exactly one payment") | |
248 | - | let am = { | |
249 | - | let k = getString(v(p)) | |
250 | - | if ($isInstanceOf(k, "String")) | |
245 | + | @Callable(Y) | |
246 | + | func createTournament (q,ar,as,at,au) = { | |
247 | + | let aa = if ((size(Y.payments) == 1)) | |
248 | + | then Y.payments[0] | |
249 | + | else { | |
250 | + | let ab = toBase58String(Y.caller.bytes) | |
251 | + | if ((ab == i)) | |
252 | + | then AttachedPayment(unit, 0) | |
253 | + | else throw("Please attach exactly one payment") | |
254 | + | } | |
255 | + | let an = { | |
256 | + | let l = getString(w(q)) | |
257 | + | if ($isInstanceOf(l, "String")) | |
251 | 258 | then { | |
252 | - | let | |
253 | - | throw(("Tournament already exists with this id " + | |
259 | + | let av = l | |
260 | + | throw(("Tournament already exists with this id " + q)) | |
254 | 261 | } | |
255 | 262 | else unit | |
256 | 263 | } | |
257 | - | if (( | |
264 | + | if ((an == an)) | |
258 | 265 | then { | |
259 | - | let | |
260 | - | let | |
261 | - | if ($isInstanceOf( | |
266 | + | let aw = { | |
267 | + | let l = aa.assetId | |
268 | + | if ($isInstanceOf(l, "Unit")) | |
262 | 269 | then { | |
263 | - | let | |
270 | + | let m = l | |
264 | 271 | "" | |
265 | 272 | } | |
266 | - | else if ($isInstanceOf( | |
273 | + | else if ($isInstanceOf(l, "ByteVector")) | |
267 | 274 | then { | |
268 | - | let | |
269 | - | toBase58String( | |
275 | + | let m = l | |
276 | + | toBase58String(m) | |
270 | 277 | } | |
271 | 278 | else throw("Match error") | |
272 | 279 | } | |
273 | - | let | |
274 | - | let | |
275 | - | if ($isInstanceOf( | |
280 | + | let ax = { | |
281 | + | let l = aa.assetId | |
282 | + | if ($isInstanceOf(l, "Unit")) | |
276 | 283 | then { | |
277 | - | let | |
284 | + | let m = l | |
278 | 285 | ["Waves", 8] | |
279 | 286 | } | |
280 | - | else if ($isInstanceOf( | |
287 | + | else if ($isInstanceOf(l, "ByteVector")) | |
281 | 288 | then { | |
282 | - | let | |
283 | - | let | |
284 | - | if ($isInstanceOf( | |
289 | + | let m = l | |
290 | + | let ay = assetInfo(m) | |
291 | + | if ($isInstanceOf(ay, "Asset")) | |
285 | 292 | then { | |
286 | - | let | |
287 | - | [ | |
293 | + | let az = ay | |
294 | + | [az.name, az.decimals] | |
288 | 295 | } | |
289 | 296 | else throw("Can't find asset") | |
290 | 297 | } | |
291 | 298 | else throw("Match error") | |
292 | 299 | } | |
293 | - | let | |
294 | - | let | |
295 | - | if ($isInstanceOf( | |
300 | + | let aA = { | |
301 | + | let l = assetInfo(fromBase58String(au)) | |
302 | + | if ($isInstanceOf(l, "Asset")) | |
296 | 303 | then { | |
297 | - | let | |
298 | - | [ | |
304 | + | let az = l | |
305 | + | [az.name, az.decimals] | |
299 | 306 | } | |
300 | 307 | else ["", 0] | |
301 | 308 | } | |
302 | - | let | |
303 | - | $Tuple2([IntegerEntry( | |
304 | - | let | |
305 | - | if ($isInstanceOf( | |
306 | - | then | |
307 | - | else throw(($getType( | |
308 | - | }), IntegerEntry( | |
309 | - | let | |
310 | - | if ($isInstanceOf( | |
311 | - | then | |
312 | - | else throw(($getType( | |
313 | - | }), StringEntry( | |
314 | - | let | |
315 | - | if ($isInstanceOf( | |
316 | - | then | |
317 | - | else throw(($getType( | |
318 | - | }), IntegerEntry( | |
319 | - | let | |
320 | - | if ($isInstanceOf( | |
321 | - | then | |
322 | - | else throw(($getType( | |
323 | - | }), StringEntry( | |
309 | + | let ab = toBase58String(Y.caller.bytes) | |
310 | + | $Tuple2([IntegerEntry(y(q), aa.amount), IntegerEntry(A(q), 0), IntegerEntry(z(q), as), StringEntry(B(q), aw), StringEntry(C(q), { | |
311 | + | let aB = ax[0] | |
312 | + | if ($isInstanceOf(aB, "String")) | |
313 | + | then aB | |
314 | + | else throw(($getType(aB) + " couldn't be cast to String")) | |
315 | + | }), IntegerEntry(H(q), { | |
316 | + | let aB = ax[1] | |
317 | + | if ($isInstanceOf(aB, "Int")) | |
318 | + | then aB | |
319 | + | else throw(($getType(aB) + " couldn't be cast to Int")) | |
320 | + | }), StringEntry(I(q), "registration"), IntegerEntry(D(q), at), StringEntry(F(q), { | |
321 | + | let aB = aA[0] | |
322 | + | if ($isInstanceOf(aB, "String")) | |
323 | + | then aB | |
324 | + | else throw(($getType(aB) + " couldn't be cast to String")) | |
325 | + | }), IntegerEntry(G(q), { | |
326 | + | let aB = aA[1] | |
327 | + | if ($isInstanceOf(aB, "Int")) | |
328 | + | then aB | |
329 | + | else throw(($getType(aB) + " couldn't be cast to Int")) | |
330 | + | }), StringEntry(E(q), au), StringEntry(x(q), ar), StringEntry(w(q), ab)], 1) | |
324 | 331 | } | |
325 | 332 | else throw("Strict value is not equal to itself.") | |
326 | 333 | } | |
327 | 334 | ||
328 | 335 | ||
329 | 336 | ||
330 | - | @Callable( | |
331 | - | func startTournament ( | |
337 | + | @Callable(Y) | |
338 | + | func startTournament (q) = if ((Y.caller != this)) | |
332 | 339 | then throw("Admin Only") | |
333 | - | else $Tuple2([StringEntry( | |
340 | + | else $Tuple2([StringEntry(I(q), "started")], 1) | |
334 | 341 | ||
335 | 342 | ||
336 | 343 | ||
337 | - | @Callable( | |
338 | - | func finishTournament ( | |
344 | + | @Callable(Y) | |
345 | + | func finishTournament (q,aC) = if ((Y.caller != this)) | |
339 | 346 | then throw("Admin Only") | |
340 | 347 | else { | |
341 | - | let | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | if ($isInstanceOf( | |
348 | + | let an = getStringValue(w(q)) | |
349 | + | let aD = j(u(q)) | |
350 | + | let aE = getIntegerValue(D(q)) | |
351 | + | let aF = { | |
352 | + | let l = getString(E(q)) | |
353 | + | if ($isInstanceOf(l, "String")) | |
347 | 354 | then { | |
348 | - | let | |
349 | - | if (( | |
355 | + | let aG = l | |
356 | + | if ((aG == "")) | |
350 | 357 | then unit | |
351 | - | else fromBase58String( | |
358 | + | else fromBase58String(aG) | |
352 | 359 | } | |
353 | 360 | else unit | |
354 | 361 | } | |
355 | - | let aG = fraction(aC, g, 100) | |
356 | - | $Tuple2([StringEntry(J(p), aB), StringEntry(H(p), "finished"), IntegerEntry(I(p), aG), ScriptTransfer(addressFromStringValue(am), (aC - aG), aE)], 1) | |
362 | + | let aH = fraction(aD, g, 100) | |
363 | + | let ap = getIntegerValue(y(q)) | |
364 | + | if ((ap > 0)) | |
365 | + | then $Tuple2([StringEntry(K(q), aC), StringEntry(I(q), "finished"), IntegerEntry(J(q), aH), ScriptTransfer(addressFromStringValue(an), (aD - aH), aF)], 1) | |
366 | + | else { | |
367 | + | let aI = fraction(aH, 20, 100) | |
368 | + | $Tuple2([StringEntry(K(q), aC), StringEntry(I(q), "finished"), IntegerEntry(J(q), aH), ScriptTransfer(addressFromStringValue(an), (aH - aI), aF)], 1) | |
369 | + | } | |
357 | 370 | } | |
358 | 371 | ||
359 | 372 | ||
360 | 373 | ||
361 | - | @Callable( | |
362 | - | func playerExitGame ( | |
374 | + | @Callable(Y) | |
375 | + | func playerExitGame (M,V,aJ) = if ((Y.caller != this)) | |
363 | 376 | then throw("Admin Only") | |
364 | 377 | else { | |
365 | - | let | |
366 | - | let | |
367 | - | $Tuple2([IntegerEntry( | |
378 | + | let aK = j(P(V)) | |
379 | + | let aL = j(R(V, M)) | |
380 | + | $Tuple2([IntegerEntry(P(V), (aK - aL)), IntegerEntry(R(V, M), 0), ScriptTransfer(addressFromStringValue(V), aJ, fromBase58String(h))], 1) | |
368 | 381 | } | |
369 | 382 | ||
370 | 383 | ||
371 | 384 | ||
372 | - | @Callable( | |
373 | - | func lockFundsForGame ( | |
374 | - | let | |
375 | - | then | |
385 | + | @Callable(Y) | |
386 | + | func lockFundsForGame (M) = { | |
387 | + | let aa = if ((size(Y.payments) == 1)) | |
388 | + | then Y.payments[0] | |
376 | 389 | else throw("Please attach exactly one payment") | |
377 | - | if (( | |
390 | + | if ((aa.assetId != fromBase58String(h))) | |
378 | 391 | then throw("You can only deposit USDN") | |
379 | 392 | else { | |
380 | - | let | |
381 | - | let | |
382 | - | let | |
383 | - | $Tuple2([IntegerEntry( | |
393 | + | let ab = toBase58String(Y.caller.bytes) | |
394 | + | let aK = j(P(ab)) | |
395 | + | let aM = j(Q(ab)) | |
396 | + | $Tuple2([IntegerEntry(P(ab), (aK + aa.amount)), IntegerEntry(Q(ab), (aM + aa.amount)), IntegerEntry(R(ab, M), aa.amount)], 1) | |
384 | 397 | } | |
385 | 398 | } | |
386 | 399 | ||
387 | 400 | ||
388 | 401 | ||
389 | - | @Callable( | |
402 | + | @Callable(Y) | |
390 | 403 | func withdrawFunds () = { | |
391 | - | let | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | if ((0 >= | |
404 | + | let ab = toBase58String(Y.caller.bytes) | |
405 | + | let aN = addressFromStringValue(getStringValue(f)) | |
406 | + | let ac = j(N(ab)) | |
407 | + | let aO = fraction(ac, e, 100) | |
408 | + | let aP = (ac - aO) | |
409 | + | if ((0 >= aP)) | |
397 | 410 | then throw("No available funds to withdraw") | |
398 | - | else [IntegerEntry( | |
411 | + | else [IntegerEntry(N(ab), 0), ScriptTransfer(Y.caller, aP, fromBase58String(h)), ScriptTransfer(aN, aO, fromBase58String(h))] | |
399 | 412 | } | |
400 | 413 | ||
401 | 414 | ||
402 | 415 | ||
403 | - | @Callable( | |
404 | - | func setWinnerHeadsUp ( | |
416 | + | @Callable(Y) | |
417 | + | func setWinnerHeadsUp (M,aQ,aR) = if ((Y.caller != this)) | |
405 | 418 | then throw("Admin Only") | |
406 | 419 | else { | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | [StringEntry( | |
420 | + | let aS = S(aQ) | |
421 | + | let aT = j(aS) | |
422 | + | let aU = U(aQ) | |
423 | + | let aV = U(aR) | |
424 | + | [StringEntry(L(M), aQ), IntegerEntry(aS, (aT + (c * 2))), IntegerEntry(n(aQ), aU), IntegerEntry(n(aR), aV)] | |
412 | 425 | } | |
413 | 426 | ||
414 | 427 | ||
415 | 428 | ||
416 | - | @Callable( | |
429 | + | @Callable(Y) | |
417 | 430 | func withdrawRewards () = { | |
418 | - | let | |
419 | - | let | |
420 | - | let | |
421 | - | let | |
422 | - | let | |
423 | - | if ((0 >= | |
431 | + | let ab = toBase58String(Y.caller.bytes) | |
432 | + | let aN = addressFromStringValue(getStringValue(f)) | |
433 | + | let aT = j(S(ab)) | |
434 | + | let aO = fraction(aT, e, 100) | |
435 | + | let aW = ((aT - d) - aO) | |
436 | + | if ((0 >= aT)) | |
424 | 437 | then throw("No available rewards to withdraw") | |
425 | - | else [IntegerEntry( | |
438 | + | else [IntegerEntry(S(ab), 0), ScriptTransfer(Y.caller, aW, unit), ScriptTransfer(aN, aO, unit)] | |
426 | 439 | } | |
427 | 440 | ||
428 | 441 | ||
429 | 442 | ||
430 | - | @Callable( | |
443 | + | @Callable(Y) | |
431 | 444 | func buyTickets () = { | |
432 | - | let | |
433 | - | then | |
445 | + | let aa = if ((size(Y.payments) == 1)) | |
446 | + | then Y.payments[0] | |
434 | 447 | else throw("Please attach exactly one payment") | |
435 | - | if (isDefined( | |
448 | + | if (isDefined(aa.assetId)) | |
436 | 449 | then throw("Tickets can only ibe purchased in Waves") | |
437 | - | else if (( | |
450 | + | else if ((aa.amount != c)) | |
438 | 451 | then throw((("The payment must be of exactly " + toString(b)) + " waves")) | |
439 | 452 | else { | |
440 | - | let | |
441 | - | let | |
442 | - | $Tuple2([IntegerEntry( | |
453 | + | let ab = toBase58String(Y.caller.bytes) | |
454 | + | let aX = j(n(ab)) | |
455 | + | $Tuple2([IntegerEntry(n(ab), (aX + 1))], 1) | |
443 | 456 | } | |
444 | 457 | } | |
445 | 458 | ||
446 | 459 | ||
447 | - | @Verifier( | |
448 | - | func | |
460 | + | @Verifier(aY) | |
461 | + | func aZ () = sigVerify(aY.bodyBytes, aY.proofs[0], aY.senderPublicKey) | |
449 | 462 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 100000000 | |
5 | 5 | ||
6 | 6 | let b = 1000000 | |
7 | 7 | ||
8 | 8 | let c = b | |
9 | 9 | ||
10 | 10 | let d = 500000 | |
11 | 11 | ||
12 | 12 | let e = 5 | |
13 | 13 | ||
14 | 14 | let f = "feeCollectorAddress" | |
15 | 15 | ||
16 | 16 | let g = 10 | |
17 | 17 | ||
18 | 18 | let h = "5ue1fiuV6j6UBr6Xf28Qms6y5FqzKtqvaxxhwu7hTQ58" | |
19 | 19 | ||
20 | - | func i (j) = { | |
21 | - | let k = getInteger(this, j) | |
22 | - | if ($isInstanceOf(k, "Int")) | |
20 | + | let i = "3NAeBWCZFbBDFLYo9GNJNoE5hQ3aMsV5KsN" | |
21 | + | ||
22 | + | func j (k) = { | |
23 | + | let l = getInteger(this, k) | |
24 | + | if ($isInstanceOf(l, "Int")) | |
23 | 25 | then { | |
24 | - | let | |
25 | - | | |
26 | + | let m = l | |
27 | + | m | |
26 | 28 | } | |
27 | 29 | else 0 | |
28 | 30 | } | |
29 | 31 | ||
30 | 32 | ||
31 | - | func | |
33 | + | func n (o) = (o + "_ticketsCount") | |
32 | 34 | ||
33 | 35 | ||
34 | - | func | |
36 | + | func p (q,r) = ((q + "_buyInAmountForAccount_") + r) | |
35 | 37 | ||
36 | 38 | ||
37 | - | func | |
39 | + | func s (q,r) = ((q + "_buyInAssetIdForAccount_") + r) | |
38 | 40 | ||
39 | 41 | ||
40 | - | func | |
42 | + | func t (q,r) = ((q + "_ticketForAccount_") + r) | |
41 | 43 | ||
42 | 44 | ||
43 | - | func | |
45 | + | func u (q) = (q + "_tournamentTotalBuyInCollectedAmount") | |
44 | 46 | ||
45 | 47 | ||
46 | - | func | |
48 | + | func v (q) = (q + "_tournamentTotalBuyInCollectedAmountMinusFees") | |
47 | 49 | ||
48 | 50 | ||
49 | - | func | |
51 | + | func w (q) = (q + "_tournamentCreator") | |
50 | 52 | ||
51 | 53 | ||
52 | - | func | |
54 | + | func x (q) = (q + "_tournamentName") | |
53 | 55 | ||
54 | 56 | ||
55 | - | func | |
57 | + | func y (q) = (q + "_tournamentPrizeAmount") | |
56 | 58 | ||
57 | 59 | ||
58 | - | func | |
60 | + | func z (q) = (q + "_tournamentMaxPlayersCount") | |
59 | 61 | ||
60 | 62 | ||
61 | - | func | |
63 | + | func A (q) = (q + "_tournamentPlayersCount") | |
62 | 64 | ||
63 | 65 | ||
64 | - | func | |
66 | + | func B (q) = (q + "_tournamentPrizeAssetId") | |
65 | 67 | ||
66 | 68 | ||
67 | - | func | |
69 | + | func C (q) = (q + "_tournamentPrizeAssetName") | |
68 | 70 | ||
69 | 71 | ||
70 | - | func | |
72 | + | func D (q) = (q + "_tournamentBuyInAmount") | |
71 | 73 | ||
72 | 74 | ||
73 | - | func | |
75 | + | func E (q) = (q + "_tournamentBuyInAssetId") | |
74 | 76 | ||
75 | 77 | ||
76 | - | func | |
78 | + | func F (q) = (q + "_tournamentBuyInAssetName") | |
77 | 79 | ||
78 | 80 | ||
79 | - | func | |
81 | + | func G (q) = (q + "_tournamentBuyInAssetDecimals") | |
80 | 82 | ||
81 | 83 | ||
82 | - | func | |
84 | + | func H (q) = (q + "_tournamentPrizeAssetDecimals") | |
83 | 85 | ||
84 | 86 | ||
85 | - | func | |
87 | + | func I (q) = (q + "_tournamentStatus") | |
86 | 88 | ||
87 | 89 | ||
88 | - | func | |
90 | + | func J (q) = (q + "_tournamentBuyInFeeCollected") | |
89 | 91 | ||
90 | 92 | ||
91 | - | func | |
93 | + | func K (q) = (q + "_tournamentWinningTransactionId") | |
92 | 94 | ||
93 | 95 | ||
94 | - | func | |
96 | + | func L (M) = (M + "_winner") | |
95 | 97 | ||
96 | 98 | ||
97 | - | func | |
99 | + | func N (O) = (O + "_availableFunds") | |
98 | 100 | ||
99 | 101 | ||
100 | - | func | |
102 | + | func P (O) = (O + "_totalLockedFunds") | |
101 | 103 | ||
102 | 104 | ||
103 | - | func | |
105 | + | func Q (O) = (O + "_lockedFundsTotalHistory") | |
104 | 106 | ||
105 | 107 | ||
106 | - | func | |
108 | + | func R (O,M) = ((O + "_lockedFunds_") + M) | |
107 | 109 | ||
108 | 110 | ||
109 | - | func | |
111 | + | func S (O) = (O + "_availableRewards") | |
110 | 112 | ||
111 | 113 | ||
112 | - | func | |
114 | + | func T (o) = j(n(o)) | |
113 | 115 | ||
114 | 116 | ||
115 | - | func | |
116 | - | let | |
117 | - | let | |
118 | - | if ((0 > | |
117 | + | func U (V) = { | |
118 | + | let W = T(V) | |
119 | + | let X = (W - 1) | |
120 | + | if ((0 > X)) | |
119 | 121 | then 0 | |
120 | - | else | |
122 | + | else X | |
121 | 123 | } | |
122 | 124 | ||
123 | 125 | ||
124 | - | @Callable( | |
125 | - | func setFeeCollectorAddress ( | |
126 | + | @Callable(Y) | |
127 | + | func setFeeCollectorAddress (Z) = if ((Y.caller != this)) | |
126 | 128 | then throw("Admin Only") | |
127 | - | else [StringEntry(f, | |
129 | + | else [StringEntry(f, Z)] | |
128 | 130 | ||
129 | 131 | ||
130 | 132 | ||
131 | - | @Callable( | |
133 | + | @Callable(Y) | |
132 | 134 | func depositFunds () = { | |
133 | - | let | |
134 | - | then | |
135 | + | let aa = if ((size(Y.payments) == 1)) | |
136 | + | then Y.payments[0] | |
135 | 137 | else throw("Please attach exactly one payment") | |
136 | - | if (( | |
138 | + | if ((aa.assetId != fromBase58String(h))) | |
137 | 139 | then throw("You can only deposit USDN") | |
138 | 140 | else { | |
139 | - | let | |
140 | - | let | |
141 | - | $Tuple2([IntegerEntry( | |
141 | + | let ab = toBase58String(Y.caller.bytes) | |
142 | + | let ac = j(N(ab)) | |
143 | + | $Tuple2([IntegerEntry(N(ab), (ac + aa.amount))], 1) | |
142 | 144 | } | |
143 | 145 | } | |
144 | 146 | ||
145 | 147 | ||
146 | 148 | ||
147 | - | @Callable( | |
148 | - | func cancelSignUpToTournament ( | |
149 | - | let | |
150 | - | if (( | |
149 | + | @Callable(Y) | |
150 | + | func cancelSignUpToTournament (q) = { | |
151 | + | let ad = getStringValue(I(q)) | |
152 | + | if ((ad != "registration")) | |
151 | 153 | then throw("Tournament is not in registration phase!") | |
152 | 154 | else { | |
153 | - | let | |
154 | - | let | |
155 | - | let | |
156 | - | let | |
157 | - | let | |
158 | - | let | |
159 | - | $Tuple2([ScriptTransfer(addressFromStringValue( | |
155 | + | let ab = toBase58String(Y.caller.bytes) | |
156 | + | let ae = getIntegerValue(p(q, ab)) | |
157 | + | let af = getStringValue(s(q, ab)) | |
158 | + | let ag = j(A(q)) | |
159 | + | let ah = (j(u(q)) - ae) | |
160 | + | let ai = fraction(ah, g, 100) | |
161 | + | $Tuple2([ScriptTransfer(addressFromStringValue(ab), ae, fromBase58String(af)), DeleteEntry(t(q, ab)), DeleteEntry(p(q, ab)), DeleteEntry(s(q, ab)), IntegerEntry(A(q), (ag - 1)), IntegerEntry(u(q), ah), IntegerEntry(v(q), (ah - ai))], 1) | |
160 | 162 | } | |
161 | 163 | } | |
162 | 164 | ||
163 | 165 | ||
164 | 166 | ||
165 | - | @Callable( | |
166 | - | func signUpToTournament ( | |
167 | - | let | |
168 | - | let | |
169 | - | let | |
170 | - | if (if (( | |
171 | - | then ( | |
167 | + | @Callable(Y) | |
168 | + | func signUpToTournament (q) = { | |
169 | + | let aj = getIntegerValue(this, z(q)) | |
170 | + | let ag = j(A(q)) | |
171 | + | let ad = getStringValue(I(q)) | |
172 | + | if (if ((ad != "registration")) | |
173 | + | then (ad != "started") | |
172 | 174 | else false) | |
173 | 175 | then throw("Tournament is not in registration phase!") | |
174 | - | else if (( | |
176 | + | else if ((ag == aj)) | |
175 | 177 | then throw("Tournament is currently full, please try again later!") | |
176 | 178 | else { | |
177 | - | let | |
178 | - | then | |
179 | + | let aa = if ((size(Y.payments) == 1)) | |
180 | + | then Y.payments[0] | |
179 | 181 | else throw("Please attach exactly one payment") | |
180 | - | let | |
181 | - | let | |
182 | - | if ($isInstanceOf( | |
182 | + | let ak = { | |
183 | + | let l = aa.assetId | |
184 | + | if ($isInstanceOf(l, "Unit")) | |
183 | 185 | then { | |
184 | - | let | |
186 | + | let m = l | |
185 | 187 | "" | |
186 | 188 | } | |
187 | - | else if ($isInstanceOf( | |
189 | + | else if ($isInstanceOf(l, "ByteVector")) | |
188 | 190 | then { | |
189 | - | let | |
190 | - | toBase58String( | |
191 | + | let m = l | |
192 | + | toBase58String(m) | |
191 | 193 | } | |
192 | 194 | else throw("Match error") | |
193 | 195 | } | |
194 | - | let | |
195 | - | let | |
196 | - | if (( | |
197 | - | then throw(("Attached payment amount is invalid, must be " + toString( | |
198 | - | else if (( | |
199 | - | then throw(("Attached payment asset id is invalid, must be " + | |
196 | + | let al = getIntegerValue(this, D(q)) | |
197 | + | let am = getStringValue(this, E(q)) | |
198 | + | if ((al != aa.amount)) | |
199 | + | then throw(("Attached payment amount is invalid, must be " + toString(al))) | |
200 | + | else if ((am != ak)) | |
201 | + | then throw(("Attached payment asset id is invalid, must be " + am)) | |
200 | 202 | else { | |
201 | - | let | |
202 | - | let | |
203 | - | let | |
204 | - | $Tuple2([BooleanEntry( | |
203 | + | let ab = toBase58String(Y.caller.bytes) | |
204 | + | let ah = (j(u(q)) + aa.amount) | |
205 | + | let ai = fraction(ah, g, 100) | |
206 | + | $Tuple2([BooleanEntry(t(q, ab), true), IntegerEntry(p(q, ab), aa.amount), StringEntry(s(q, ab), ak), IntegerEntry(A(q), (ag + 1)), IntegerEntry(u(q), ah), IntegerEntry(v(q), (ah - ai))], 1) | |
205 | 207 | } | |
206 | 208 | } | |
207 | 209 | } | |
208 | 210 | ||
209 | 211 | ||
210 | 212 | ||
211 | - | @Callable( | |
212 | - | func cancelTournament ( | |
213 | - | let | |
214 | - | let | |
215 | - | let | |
213 | + | @Callable(Y) | |
214 | + | func cancelTournament (q) = { | |
215 | + | let ab = toBase58String(Y.caller.bytes) | |
216 | + | let an = getStringValue(w(q)) | |
217 | + | let ao = if ((an == ab)) | |
216 | 218 | then true | |
217 | - | else if (( | |
219 | + | else if ((Y.caller == this)) | |
218 | 220 | then true | |
219 | 221 | else throw("Only tournament creator can cancel it!") | |
220 | - | if (( | |
222 | + | if ((ao == ao)) | |
221 | 223 | then { | |
222 | - | let | |
223 | - | if (if (( | |
224 | - | then ( | |
224 | + | let ad = getStringValue(I(q)) | |
225 | + | if (if ((Y.caller != this)) | |
226 | + | then (ad != "registration") | |
225 | 227 | else false) | |
226 | 228 | then throw("Tournament is not in registration phase!") | |
227 | 229 | else { | |
228 | - | let | |
229 | - | if (( | |
230 | + | let ag = j(A(q)) | |
231 | + | if ((ag > 0)) | |
230 | 232 | then throw("Cannot cancel a tournament when players are already registered to it!") | |
231 | 233 | else { | |
232 | - | let | |
233 | - | let | |
234 | - | $Tuple2([DeleteEntry( | |
234 | + | let ap = getIntegerValue(y(q)) | |
235 | + | let aq = getStringValue(B(q)) | |
236 | + | $Tuple2([DeleteEntry(y(q)), DeleteEntry(A(q)), DeleteEntry(z(q)), DeleteEntry(B(q)), DeleteEntry(C(q)), DeleteEntry(H(q)), DeleteEntry(I(q)), DeleteEntry(D(q)), DeleteEntry(F(q)), DeleteEntry(G(q)), DeleteEntry(E(q)), DeleteEntry(x(q)), DeleteEntry(w(q)), ScriptTransfer(addressFromStringValue(an), ap, fromBase58String(aq))], 1) | |
235 | 237 | } | |
236 | 238 | } | |
237 | 239 | } | |
238 | 240 | else throw("Strict value is not equal to itself.") | |
239 | 241 | } | |
240 | 242 | ||
241 | 243 | ||
242 | 244 | ||
243 | - | @Callable(X) | |
244 | - | func createTournament (p,aq,ar,as,at) = { | |
245 | - | let Z = if ((size(X.payments) == 1)) | |
246 | - | then X.payments[0] | |
247 | - | else throw("Please attach exactly one payment") | |
248 | - | let am = { | |
249 | - | let k = getString(v(p)) | |
250 | - | if ($isInstanceOf(k, "String")) | |
245 | + | @Callable(Y) | |
246 | + | func createTournament (q,ar,as,at,au) = { | |
247 | + | let aa = if ((size(Y.payments) == 1)) | |
248 | + | then Y.payments[0] | |
249 | + | else { | |
250 | + | let ab = toBase58String(Y.caller.bytes) | |
251 | + | if ((ab == i)) | |
252 | + | then AttachedPayment(unit, 0) | |
253 | + | else throw("Please attach exactly one payment") | |
254 | + | } | |
255 | + | let an = { | |
256 | + | let l = getString(w(q)) | |
257 | + | if ($isInstanceOf(l, "String")) | |
251 | 258 | then { | |
252 | - | let | |
253 | - | throw(("Tournament already exists with this id " + | |
259 | + | let av = l | |
260 | + | throw(("Tournament already exists with this id " + q)) | |
254 | 261 | } | |
255 | 262 | else unit | |
256 | 263 | } | |
257 | - | if (( | |
264 | + | if ((an == an)) | |
258 | 265 | then { | |
259 | - | let | |
260 | - | let | |
261 | - | if ($isInstanceOf( | |
266 | + | let aw = { | |
267 | + | let l = aa.assetId | |
268 | + | if ($isInstanceOf(l, "Unit")) | |
262 | 269 | then { | |
263 | - | let | |
270 | + | let m = l | |
264 | 271 | "" | |
265 | 272 | } | |
266 | - | else if ($isInstanceOf( | |
273 | + | else if ($isInstanceOf(l, "ByteVector")) | |
267 | 274 | then { | |
268 | - | let | |
269 | - | toBase58String( | |
275 | + | let m = l | |
276 | + | toBase58String(m) | |
270 | 277 | } | |
271 | 278 | else throw("Match error") | |
272 | 279 | } | |
273 | - | let | |
274 | - | let | |
275 | - | if ($isInstanceOf( | |
280 | + | let ax = { | |
281 | + | let l = aa.assetId | |
282 | + | if ($isInstanceOf(l, "Unit")) | |
276 | 283 | then { | |
277 | - | let | |
284 | + | let m = l | |
278 | 285 | ["Waves", 8] | |
279 | 286 | } | |
280 | - | else if ($isInstanceOf( | |
287 | + | else if ($isInstanceOf(l, "ByteVector")) | |
281 | 288 | then { | |
282 | - | let | |
283 | - | let | |
284 | - | if ($isInstanceOf( | |
289 | + | let m = l | |
290 | + | let ay = assetInfo(m) | |
291 | + | if ($isInstanceOf(ay, "Asset")) | |
285 | 292 | then { | |
286 | - | let | |
287 | - | [ | |
293 | + | let az = ay | |
294 | + | [az.name, az.decimals] | |
288 | 295 | } | |
289 | 296 | else throw("Can't find asset") | |
290 | 297 | } | |
291 | 298 | else throw("Match error") | |
292 | 299 | } | |
293 | - | let | |
294 | - | let | |
295 | - | if ($isInstanceOf( | |
300 | + | let aA = { | |
301 | + | let l = assetInfo(fromBase58String(au)) | |
302 | + | if ($isInstanceOf(l, "Asset")) | |
296 | 303 | then { | |
297 | - | let | |
298 | - | [ | |
304 | + | let az = l | |
305 | + | [az.name, az.decimals] | |
299 | 306 | } | |
300 | 307 | else ["", 0] | |
301 | 308 | } | |
302 | - | let | |
303 | - | $Tuple2([IntegerEntry( | |
304 | - | let | |
305 | - | if ($isInstanceOf( | |
306 | - | then | |
307 | - | else throw(($getType( | |
308 | - | }), IntegerEntry( | |
309 | - | let | |
310 | - | if ($isInstanceOf( | |
311 | - | then | |
312 | - | else throw(($getType( | |
313 | - | }), StringEntry( | |
314 | - | let | |
315 | - | if ($isInstanceOf( | |
316 | - | then | |
317 | - | else throw(($getType( | |
318 | - | }), IntegerEntry( | |
319 | - | let | |
320 | - | if ($isInstanceOf( | |
321 | - | then | |
322 | - | else throw(($getType( | |
323 | - | }), StringEntry( | |
309 | + | let ab = toBase58String(Y.caller.bytes) | |
310 | + | $Tuple2([IntegerEntry(y(q), aa.amount), IntegerEntry(A(q), 0), IntegerEntry(z(q), as), StringEntry(B(q), aw), StringEntry(C(q), { | |
311 | + | let aB = ax[0] | |
312 | + | if ($isInstanceOf(aB, "String")) | |
313 | + | then aB | |
314 | + | else throw(($getType(aB) + " couldn't be cast to String")) | |
315 | + | }), IntegerEntry(H(q), { | |
316 | + | let aB = ax[1] | |
317 | + | if ($isInstanceOf(aB, "Int")) | |
318 | + | then aB | |
319 | + | else throw(($getType(aB) + " couldn't be cast to Int")) | |
320 | + | }), StringEntry(I(q), "registration"), IntegerEntry(D(q), at), StringEntry(F(q), { | |
321 | + | let aB = aA[0] | |
322 | + | if ($isInstanceOf(aB, "String")) | |
323 | + | then aB | |
324 | + | else throw(($getType(aB) + " couldn't be cast to String")) | |
325 | + | }), IntegerEntry(G(q), { | |
326 | + | let aB = aA[1] | |
327 | + | if ($isInstanceOf(aB, "Int")) | |
328 | + | then aB | |
329 | + | else throw(($getType(aB) + " couldn't be cast to Int")) | |
330 | + | }), StringEntry(E(q), au), StringEntry(x(q), ar), StringEntry(w(q), ab)], 1) | |
324 | 331 | } | |
325 | 332 | else throw("Strict value is not equal to itself.") | |
326 | 333 | } | |
327 | 334 | ||
328 | 335 | ||
329 | 336 | ||
330 | - | @Callable( | |
331 | - | func startTournament ( | |
337 | + | @Callable(Y) | |
338 | + | func startTournament (q) = if ((Y.caller != this)) | |
332 | 339 | then throw("Admin Only") | |
333 | - | else $Tuple2([StringEntry( | |
340 | + | else $Tuple2([StringEntry(I(q), "started")], 1) | |
334 | 341 | ||
335 | 342 | ||
336 | 343 | ||
337 | - | @Callable( | |
338 | - | func finishTournament ( | |
344 | + | @Callable(Y) | |
345 | + | func finishTournament (q,aC) = if ((Y.caller != this)) | |
339 | 346 | then throw("Admin Only") | |
340 | 347 | else { | |
341 | - | let | |
342 | - | let | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | if ($isInstanceOf( | |
348 | + | let an = getStringValue(w(q)) | |
349 | + | let aD = j(u(q)) | |
350 | + | let aE = getIntegerValue(D(q)) | |
351 | + | let aF = { | |
352 | + | let l = getString(E(q)) | |
353 | + | if ($isInstanceOf(l, "String")) | |
347 | 354 | then { | |
348 | - | let | |
349 | - | if (( | |
355 | + | let aG = l | |
356 | + | if ((aG == "")) | |
350 | 357 | then unit | |
351 | - | else fromBase58String( | |
358 | + | else fromBase58String(aG) | |
352 | 359 | } | |
353 | 360 | else unit | |
354 | 361 | } | |
355 | - | let aG = fraction(aC, g, 100) | |
356 | - | $Tuple2([StringEntry(J(p), aB), StringEntry(H(p), "finished"), IntegerEntry(I(p), aG), ScriptTransfer(addressFromStringValue(am), (aC - aG), aE)], 1) | |
362 | + | let aH = fraction(aD, g, 100) | |
363 | + | let ap = getIntegerValue(y(q)) | |
364 | + | if ((ap > 0)) | |
365 | + | then $Tuple2([StringEntry(K(q), aC), StringEntry(I(q), "finished"), IntegerEntry(J(q), aH), ScriptTransfer(addressFromStringValue(an), (aD - aH), aF)], 1) | |
366 | + | else { | |
367 | + | let aI = fraction(aH, 20, 100) | |
368 | + | $Tuple2([StringEntry(K(q), aC), StringEntry(I(q), "finished"), IntegerEntry(J(q), aH), ScriptTransfer(addressFromStringValue(an), (aH - aI), aF)], 1) | |
369 | + | } | |
357 | 370 | } | |
358 | 371 | ||
359 | 372 | ||
360 | 373 | ||
361 | - | @Callable( | |
362 | - | func playerExitGame ( | |
374 | + | @Callable(Y) | |
375 | + | func playerExitGame (M,V,aJ) = if ((Y.caller != this)) | |
363 | 376 | then throw("Admin Only") | |
364 | 377 | else { | |
365 | - | let | |
366 | - | let | |
367 | - | $Tuple2([IntegerEntry( | |
378 | + | let aK = j(P(V)) | |
379 | + | let aL = j(R(V, M)) | |
380 | + | $Tuple2([IntegerEntry(P(V), (aK - aL)), IntegerEntry(R(V, M), 0), ScriptTransfer(addressFromStringValue(V), aJ, fromBase58String(h))], 1) | |
368 | 381 | } | |
369 | 382 | ||
370 | 383 | ||
371 | 384 | ||
372 | - | @Callable( | |
373 | - | func lockFundsForGame ( | |
374 | - | let | |
375 | - | then | |
385 | + | @Callable(Y) | |
386 | + | func lockFundsForGame (M) = { | |
387 | + | let aa = if ((size(Y.payments) == 1)) | |
388 | + | then Y.payments[0] | |
376 | 389 | else throw("Please attach exactly one payment") | |
377 | - | if (( | |
390 | + | if ((aa.assetId != fromBase58String(h))) | |
378 | 391 | then throw("You can only deposit USDN") | |
379 | 392 | else { | |
380 | - | let | |
381 | - | let | |
382 | - | let | |
383 | - | $Tuple2([IntegerEntry( | |
393 | + | let ab = toBase58String(Y.caller.bytes) | |
394 | + | let aK = j(P(ab)) | |
395 | + | let aM = j(Q(ab)) | |
396 | + | $Tuple2([IntegerEntry(P(ab), (aK + aa.amount)), IntegerEntry(Q(ab), (aM + aa.amount)), IntegerEntry(R(ab, M), aa.amount)], 1) | |
384 | 397 | } | |
385 | 398 | } | |
386 | 399 | ||
387 | 400 | ||
388 | 401 | ||
389 | - | @Callable( | |
402 | + | @Callable(Y) | |
390 | 403 | func withdrawFunds () = { | |
391 | - | let | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | if ((0 >= | |
404 | + | let ab = toBase58String(Y.caller.bytes) | |
405 | + | let aN = addressFromStringValue(getStringValue(f)) | |
406 | + | let ac = j(N(ab)) | |
407 | + | let aO = fraction(ac, e, 100) | |
408 | + | let aP = (ac - aO) | |
409 | + | if ((0 >= aP)) | |
397 | 410 | then throw("No available funds to withdraw") | |
398 | - | else [IntegerEntry( | |
411 | + | else [IntegerEntry(N(ab), 0), ScriptTransfer(Y.caller, aP, fromBase58String(h)), ScriptTransfer(aN, aO, fromBase58String(h))] | |
399 | 412 | } | |
400 | 413 | ||
401 | 414 | ||
402 | 415 | ||
403 | - | @Callable( | |
404 | - | func setWinnerHeadsUp ( | |
416 | + | @Callable(Y) | |
417 | + | func setWinnerHeadsUp (M,aQ,aR) = if ((Y.caller != this)) | |
405 | 418 | then throw("Admin Only") | |
406 | 419 | else { | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | [StringEntry( | |
420 | + | let aS = S(aQ) | |
421 | + | let aT = j(aS) | |
422 | + | let aU = U(aQ) | |
423 | + | let aV = U(aR) | |
424 | + | [StringEntry(L(M), aQ), IntegerEntry(aS, (aT + (c * 2))), IntegerEntry(n(aQ), aU), IntegerEntry(n(aR), aV)] | |
412 | 425 | } | |
413 | 426 | ||
414 | 427 | ||
415 | 428 | ||
416 | - | @Callable( | |
429 | + | @Callable(Y) | |
417 | 430 | func withdrawRewards () = { | |
418 | - | let | |
419 | - | let | |
420 | - | let | |
421 | - | let | |
422 | - | let | |
423 | - | if ((0 >= | |
431 | + | let ab = toBase58String(Y.caller.bytes) | |
432 | + | let aN = addressFromStringValue(getStringValue(f)) | |
433 | + | let aT = j(S(ab)) | |
434 | + | let aO = fraction(aT, e, 100) | |
435 | + | let aW = ((aT - d) - aO) | |
436 | + | if ((0 >= aT)) | |
424 | 437 | then throw("No available rewards to withdraw") | |
425 | - | else [IntegerEntry( | |
438 | + | else [IntegerEntry(S(ab), 0), ScriptTransfer(Y.caller, aW, unit), ScriptTransfer(aN, aO, unit)] | |
426 | 439 | } | |
427 | 440 | ||
428 | 441 | ||
429 | 442 | ||
430 | - | @Callable( | |
443 | + | @Callable(Y) | |
431 | 444 | func buyTickets () = { | |
432 | - | let | |
433 | - | then | |
445 | + | let aa = if ((size(Y.payments) == 1)) | |
446 | + | then Y.payments[0] | |
434 | 447 | else throw("Please attach exactly one payment") | |
435 | - | if (isDefined( | |
448 | + | if (isDefined(aa.assetId)) | |
436 | 449 | then throw("Tickets can only ibe purchased in Waves") | |
437 | - | else if (( | |
450 | + | else if ((aa.amount != c)) | |
438 | 451 | then throw((("The payment must be of exactly " + toString(b)) + " waves")) | |
439 | 452 | else { | |
440 | - | let | |
441 | - | let | |
442 | - | $Tuple2([IntegerEntry( | |
453 | + | let ab = toBase58String(Y.caller.bytes) | |
454 | + | let aX = j(n(ab)) | |
455 | + | $Tuple2([IntegerEntry(n(ab), (aX + 1))], 1) | |
443 | 456 | } | |
444 | 457 | } | |
445 | 458 | ||
446 | 459 | ||
447 | - | @Verifier( | |
448 | - | func | |
460 | + | @Verifier(aY) | |
461 | + | func aZ () = sigVerify(aY.bodyBytes, aY.proofs[0], aY.senderPublicKey) | |
449 | 462 |
github/deemru/w8io/873ac7e 248.93 ms ◑