tx · EPdFjWDJjqVsMnkfaNxDDRo7eZmfhrsD4bo7GWqCWGHx

3N1rgNAEfetRH87WQqJan6zSy7Wp1byercW:  -0.01800000 Waves

2022.10.26 08:03 [2288937] smart account 3N1rgNAEfetRH87WQqJan6zSy7Wp1byercW > SELF 0.00000000 Waves

{ "type": 13, "id": "EPdFjWDJjqVsMnkfaNxDDRo7eZmfhrsD4bo7GWqCWGHx", "fee": 1800000, "feeAssetId": null, "timestamp": 1666760617766, "version": 2, "chainId": 84, "sender": "3N1rgNAEfetRH87WQqJan6zSy7Wp1byercW", "senderPublicKey": "4dLVvLszUGcr1uHnDX72QuZxqaZTntQWRbbhn8YQDgA4", "proofs": [ "3JncEN4VqDxefdxzn1rgqizyXcmk3uZJrXNe9dJ5pYcUeDvCWe2iitBcdxZbPmu1A8mFDni3NSboCHrWfCeRVprP" ], "script": "base64:BgJmCAISBAoCCAgSCQoHCAgICAgICBIKCggICAgICAgICBIDCgEIEgQKAggIEgYKBAgICAgSCAoGCAgIAQEBEgkKBwgICAgBAQESBQoDCAEEEgQKAggIEgUKAwgICBIECgIICBIDCgEINQAHVkVSU0lPTgIFMS4wLjABDmdldFN0cmluZ0J5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUDa2V5AgAACHVzZXJEYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECD2NvbmZfdXNlcnNfZGFwcAALZmVlUmVjZWl2ZXIJAQ5nZXRTdHJpbmdCeUtleQECEWNvbmZfZmVlX3JlY2VpdmVyAAtzaWduQXNzZXRJZAkA2QQBCQEOZ2V0U3RyaW5nQnlLZXkBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1NJR04ABWNocmlzCQEOZ2V0U3RyaW5nQnlLZXkBAgxjb25mX2FkbWluXzEBD2dldEludGVnZXJCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQAAAQ9nZXRCb29sZWFuQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQNrZXkHAAtkYXBwUnVubmluZwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQh1c2VyRGFwcAIUY29uZl9kYXBwX2lzX3J1bm5pbmcGAA5tYWludGVuYW5jZU1TRwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAIUY29uZl9tYWludGVuYW5jZV9tc2cCAAANdXNlclN1c3BlbmRlZAIJU1VTUEVOREVEABB1c2VyVW5yZWdpc3RlcmVkAgxVTlJFR0lTVEVSRUQBC3ZhbGlkYXRlQ0lEAQNjaWQDCQEIY29udGFpbnMCBQNjaWQCAS8DAwkAZgIATAkAsQIBBQNjaWQJAAACCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAAA7BwkAZgIAEAkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAEHBwAHc2lnbkN1dAACAQ1rZXlVc2VyU3RhdHVzAQZjYWxsZXIJAKwCAgIMdXNlcl9zdGF0dXNfBQZjYWxsZXIBFmtleUV2ZW50T3duZXJCeUV2ZW50SWQBB2V2ZW50SWQJAKwCAgIQZ2V0X2V2ZW50X293bmVyXwUHZXZlbnRJZAERa2V5RXZlbnRBZGRlZERhdGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhBldmVudF9hZGRlZERhdGVfBQdldmVudElkAgFfBQZjYWxsZXIBDGtleUV2ZW50RGF0ZQIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICC2V2ZW50X2RhdGVfBQdldmVudElkAgFfBQZjYWxsZXIBDGtleUV2ZW50TmFtZQIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICC2V2ZW50X25hbWVfBQdldmVudElkAgFfBQZjYWxsZXIBDGtleUV2ZW50RGVzYwIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICC2V2ZW50X2Rlc2NfBQdldmVudElkAgFfBQZjYWxsZXIBEmtleUV2ZW50RGlzcGxheUNpZAIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICEWV2ZW50X2Rpc3BsYXlDaWRfBQdldmVudElkAgFfBQZjYWxsZXIBDGtleUV2ZW50VGFncwIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICC2V2ZW50X3RhZ3NfBQdldmVudElkAgFfBQZjYWxsZXIBDGtleUV2ZW50RmxhZwIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICC2V2ZW50X2ZsYWdfBQdldmVudElkAgFfBQZjYWxsZXIBDGtleUV2ZW50Tm90ZQIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICC2V2ZW50X25vdGVfBQdldmVudElkAgFfBQZjYWxsZXIBD2tleUV2ZW50Q3Jhd2xlcgIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICEWV2ZW50X2NyYXdsZXJDaWRfBQdldmVudElkAgFfBQZjYWxsZXIBDGtleUV2ZW50VHlwZQIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICC2V2ZW50X3R5cGVfBQdldmVudElkAgFfBQZjYWxsZXIBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICF2V2ZW50X3RvdGFsVGlja2V0VHlwZXNfBQdldmVudElkAgFfBQZjYWxsZXIBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgISZXZlbnRfdG90YWxJc3N1ZWRfBQdldmVudElkAgFfBQZjYWxsZXIBEGtleUV2ZW50Q2FuY2VsZWQCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAg9ldmVudF9jYW5jZWxlZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgEWa2V5RXZlbnRDYW5jZWxlZFJlYXNvbgIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICFWV2ZW50X2NhbmNlbGVkUmVhc29uXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQ1rZXlUaWNrZXROYW1lAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9uYW1lXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAENa2V5VGlja2V0RGVzYwMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx0aWNrZXRfZGVzY18FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBDmtleVRpY2tldFByaWNlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDXRpY2tldF9wcmljZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBDWtleVRpY2tldERhdGUDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X2RhdGVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIUdGlja2V0X21heEF2YWlsYWJsZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBDWtleVRpY2tldFNvbGQDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X3NvbGRfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ9rZXlUaWNrZXRPblNhbGUDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIOdGlja2V0X29uU2FsZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBE2tleVRpY2tldEFtb3VudFVzZWQDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgISdGlja2V0X2Ftb3VudFVzZWRfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ9rZXlUaWNrZXRNYXhVc2UDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIOdGlja2V0X21heFVzZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBFGtleVRpY2tldFRvdGFsSXNzdWVkAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICE3RpY2tldF90b3RhbElzc3VlZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBDnZhbGlkYXRlU3RyaW5nAgNzdHIDbWF4AwkAAAIJALECAQUDc3RyAAAJAAIBAhhGaWVsZCBjYW5ub3QgYmUgaXMgZW1wdHkDCQBmAgkAsQIBBQNzdHIFA21heAkAAgEJAKwCAgUDc3RyAgwgaXMgdG9vIGxvbmcGAQt2YWxpZGF0ZUludAEDbnVtCQBmAgAABQNudW0BFmdldEV2ZW50T3duZXJCeUV2ZW50SWQBB2V2ZW50SWQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBFmtleUV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkAgABDHZhbGlkYXRlVXNlcgEGY2FsbGVyBAp1c2VyU3RhdHVzCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgUQdXNlclVucmVnaXN0ZXJlZAMJAAACBQp1c2VyU3RhdHVzBRB1c2VyVW5yZWdpc3RlcmVkAi5SZWdpc3RlciB0aGlzIGFjY291bnQgZmlyc3Qgd2l0aCAiQWNjb3VudCIgdGFiAwkAAAIFCnVzZXJTdGF0dXMFDXVzZXJTdXNwZW5kZWQCEUFjY291bnQgc3VzcGVuZGVkAgABDHZhbGlkYXRlVHlwZQEEdHlwZQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIGb25saW5lCQDMCAICB29mZmxpbmUJAMwIAgIEYm90aAUDbmlsBQR0eXBlARF2YWxpZGF0ZUV2ZW50RGF0YQcGY2FsbGVyCmNpZERpc3BsYXkEbmFtZQtkZXNjcmlwdGlvbgR0YWdzBHR5cGUEZGF0ZQQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQAAAgkAsQIBBQpjaWREaXNwbGF5AAAJAAIBAhtEaXNwbGF5IENJRCBjYW5ub3QgYmUgZW1wdHkDCQEBIQEJAQt2YWxpZGF0ZUNJRAEFCmNpZERpc3BsYXkJAAIBAhBQcm9ibGVtIHdpdGggQ0lEAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQRuYW1lAMgBCQACAQISMTAwIENoYXIuIG1heCBuYW1lAwkBASEBCQEMdmFsaWRhdGVUeXBlAQUEdHlwZQkAAgECEFdyb25nIGV2ZW50IHR5cGUDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFC2Rlc2NyaXB0aW9uAOgHCQACAQIaMTAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24DCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBGRhdGUA6AcJAAIBAhMxMDAwIENoYXIuIG1heCBkYXRlAwkAZgIJAJADAQkAtQkCBQR0YWdzAgEsAAUJAAIBAgs1IHRhZ3MgbWF4LgIAARJ2YWxpZGF0ZVRpY2tldERhdGEHB2V2ZW50SWQGY2FsbGVyBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBm1heFVzZQQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBG5hbWUAyAEJAAIBAhIxMDAgQ2hhci4gbWF4IG5hbWUDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFC2Rlc2NyaXB0aW9uAOgHCQACAQIaMTAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24DAwMJAQt2YWxpZGF0ZUludAEFBXByaWNlBgkBC3ZhbGlkYXRlSW50AQUGbWF4VXNlBgkBC3ZhbGlkYXRlSW50AQUMbWF4QXZhaWxhYmxlCQACAQIUUG9zaXRpdmUgYW1vdW50IG9ubHkDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFC2Rlc2NyaXB0aW9uAOgHCQACAQIaMTAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24CAAEMaWRDYWxsZXJEYXRlAQFpAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHCQCVCgMJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEJaXNQYXltZW50AQFpAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE05vIHBheW1lbnQgYXR0YWNoZWQEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CQEFdmFsdWUBCAUHcGF5bWVudAZhbW91bnQJAJQKAgUHcGF5bWVudAUGYW1vdW50ARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMBaQxwcmljZUFzc2V0SWQMYXJ0d29ya1ByaWNlBAskdDA2NzM5Njc3NQkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQskdDA2NzM5Njc3NQJfMQQGYW1vdW50CAULJHQwNjczOTY3NzUCXzIDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQACAQIUV3JvbmcgYXNzZXQgYXR0YWNoZWQEB2Fzc2V0SWQDAwkAZgIJALECAQUMcHJpY2VBc3NldElkAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQFDHByaWNlQXNzZXRJZAcIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhRXcm9uZyBhc3NldCBhdHRhY2hlZAMJAQIhPQIFDGFydHdvcmtQcmljZQUGYW1vdW50CQACAQIaUGF5bWVudCBhbW91bnQgZG9uJ3QgbWF0Y2gJAJQKAgUGYW1vdW50BQdhc3NldElkAQxpc0V2ZW50T3duZXICB2V2ZW50SWQGY2FsbGVyBApldmVudE93bmVyCQEWZ2V0RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQDCQAAAgUKZXZlbnRPd25lcgIACQACAQIPRXZlbnQgbm90IGZvdW5kCQAAAgUKZXZlbnRPd25lcgUGY2FsbGVyAQt0aWNrZXRFeGlzdAMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQEBnRpY2tldAkBDmdldFN0cmluZ0J5S2V5AQkBDWtleVRpY2tldE5hbWUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQECIT0CCQCxAgEFBnRpY2tldAAAAQ9ldmVudElzQ2FuY2VsZWQCBmlzc3VlcgdldmVudElkCQEPZ2V0Qm9vbGVhbkJ5S2V5AQkBEGtleUV2ZW50Q2FuY2VsZWQCBQZpc3N1ZXIFB2V2ZW50SWQNBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwFpAQhhZGRFdmVudAcEbmFtZQtkZXNjcmlwdGlvbgR0YWdzCmNpZERpc3BsYXkHY3Jhd2xlcgR0eXBlBGRhdGUECyR0MDgxMTg4MTY3CQEMaWRDYWxsZXJEYXRlAQUBaQQHZXZlbnRJZAgFCyR0MDgxMTg4MTY3Al8xBAZjYWxsZXIIBQskdDA4MTE4ODE2NwJfMgQJYWRkZWREYXRlCAULJHQwODExODgxNjcCXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyBA12YWxpZGF0ZUV2ZW50CQERdmFsaWRhdGVFdmVudERhdGEHBQZjYWxsZXIFCmNpZERpc3BsYXkFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzBQR0eXBlBQRkYXRlAwkBAiE9AgUNdmFsaWRhdGVFdmVudAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQERa2V5RXZlbnRBZGRlZERhdGUCBQZjYWxsZXIFB2V2ZW50SWQFCWFkZGVkRGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnREYXRlAgUGY2FsbGVyBQdldmVudElkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudE5hbWUCBQZjYWxsZXIFB2V2ZW50SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGVzYwIFBmNhbGxlcgUHZXZlbnRJZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleUV2ZW50RGlzcGxheUNpZAIFBmNhbGxlcgUHZXZlbnRJZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnRUYWdzAgUGY2FsbGVyBQdldmVudElkBQR0YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlFdmVudENyYXdsZXICBQZjYWxsZXIFB2V2ZW50SWQFB2NyYXdsZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50VHlwZQIFBmNhbGxlcgUHZXZlbnRJZAUEdHlwZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgUGY2FsbGVyBQdldmVudElkAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARBrZXlFdmVudENhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkBwkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQFBmNhbGxlcgUDbmlsAWkBCWVkaXRFdmVudAgHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MKY2lkRGlzcGxheQdjcmF3bGVyBHR5cGUEZGF0ZQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyBA12YWxpZGF0ZUV2ZW50CQERdmFsaWRhdGVFdmVudERhdGEHBQZjYWxsZXIFCmNpZERpc3BsYXkFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzBQR0eXBlBQRkYXRlAwkBAiE9AgUNdmFsaWRhdGVFdmVudAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAplbnRyeUV4aXN0CQEOZ2V0U3RyaW5nQnlLZXkBCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkAwkAAAIFCmVudHJ5RXhpc3QCAAkAAgECD0VudHJ5IG5vdCBmb3VuZAQEZmxhZwkBDmdldFN0cmluZ0J5S2V5AQkBDGtleUV2ZW50RmxhZwIFBmNhbGxlcgUHZXZlbnRJZAMJAAACBQRmbGFnAgdJTExFR0FMCQACAQIbQ2Fubm90IHVwZGF0ZSBJTExFR0FMIEV2ZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudE5hbWUCBQZjYWxsZXIFB2V2ZW50SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAUEZGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnREZXNjAgUGY2FsbGVyBQdldmVudElkBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnRUYWdzAgUGY2FsbGVyBQdldmVudElkBQR0YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudFR5cGUCBQZjYWxsZXIFB2V2ZW50SWQFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUV2ZW50Q3Jhd2xlcgIFBmNhbGxlcgUHZXZlbnRJZAUHY3Jhd2xlcgUDbmlsAWkBC2RlbGV0ZUV2ZW50AQdldmVudElkBA0kdDAxMDUzMTEwNTc1CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMDUzMTEwNTc1Al8xBAZjYWxsZXIIBQ0kdDAxMDUzMTEwNTc1Al8yBAlhZGRlZERhdGUIBQ0kdDAxMDUzMTEwNTc1Al8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50BA1ldmVudFRvdGFsTkZUCQEPZ2V0SW50ZWdlckJ5S2V5AQkBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgUGY2FsbGVyBQdldmVudElkAwkBAiE9AgUNZXZlbnRUb3RhbE5GVAAACQACAQItQ2Fubm90IGRlbGV0ZSBldmVudCB3aXRoIGFscmVhZHkgc29sZCB0aWNrZXRzBBd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAkBD2dldEludGVnZXJCeUtleQEJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQDCQBmAgUXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQAAAkAAgECGERlbGV0ZSBhbGwgdGlja2V0cyBmaXJzdAkAzAgCCQELRGVsZXRlRW50cnkBCQERa2V5RXZlbnRBZGRlZERhdGUCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50RGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFdmVudERlc2MCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmtleUV2ZW50RGlzcGxheUNpZAIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXZlbnRUYWdzAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlFdmVudENyYXdsZXICBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50VHlwZQIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleUV2ZW50Q2FuY2VsZWQCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQFA25pbAFpAQtjYW5jZWxFdmVudAIHZXZlbnRJZAZyZWFzb24EDSR0MDExOTY4MTIwMTIJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDExOTY4MTIwMTICXzEEBmNhbGxlcggFDSR0MDExOTY4MTIwMTICXzIECWFkZGVkRGF0ZQgFDSR0MDExOTY4MTIwMTICXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJARBrZXlFdmVudENhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkBgkAzAgCCQELU3RyaW5nRW50cnkCCQEWa2V5RXZlbnRDYW5jZWxlZFJlYXNvbgIFBmNhbGxlcgUHZXZlbnRJZAUGcmVhc29uBQNuaWwBaQEJZmxhZ0V2ZW50BAdldmVudElkBGFkZHIEZmxhZwRub3RlBA0kdDAxMjQ0NzEyNDgwCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxMjQ0NzEyNDgwAl8xBAZjYWxsZXIIBQ0kdDAxMjQ0NzEyNDgwAl8yAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICAAkAzAgCAg9DSEFOR0VfUkVRVUlSRUQJAMwIAgIHRkxBR0dFRAkAzAgCAgdJTExFR0FMBQNuaWwFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RmxhZwIFBGFkZHIFB2V2ZW50SWQFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50Tm90ZQIFBGFkZHIFB2V2ZW50SWQFBG5vdGUFA25pbAkAAgEJAKwCAgIOVW5rbm93IHN0YXR1cyAFBGZsYWcJAAIBAhNZb3UgYXJlIG5vdCBhbGxvd2VkAWkBCWFkZFRpY2tldAYHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBXByaWNlDG1heEF2YWlsYWJsZQZNYXhVc2UEDSR0MDEyOTgxMTMwMjEJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDEyOTgxMTMwMjECXzEEBmNhbGxlcggFDSR0MDEyOTgxMTMwMjECXzIEBGRhdGUIBQ0kdDAxMjk4MTEzMDIxAl8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQ9ldmVudElzQ2FuY2VsZWQCBQZjYWxsZXIFB2V2ZW50SWQJAAIBAhhFdmVudCBoYXZlIGJlZW4gY2FuY2VsZWQDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAQOdmFsaWRhdGVUaWNrZXQJARJ2YWxpZGF0ZVRpY2tldERhdGEHBQdldmVudElkBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQVwcmljZQUMbWF4QXZhaWxhYmxlBQZNYXhVc2UDCQECIT0CBQ52YWxpZGF0ZVRpY2tldAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBBd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAkBD2dldEludGVnZXJCeUtleQEJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldE5hbWUDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQRuYW1lCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5VGlja2V0RGF0ZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldERlc2MDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQtkZXNjcmlwdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVRpY2tldFByaWNlAwUGY2FsbGVyBQdldmVudElkBQJpZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQxtYXhBdmFpbGFibGUJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ9rZXlUaWNrZXRPblNhbGUDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD2tleVRpY2tldE1heFVzZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBk1heFVzZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGY2FsbGVyBQdldmVudElkBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQBkAgUXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQAAQUDbmlsAWkBCmVkaXRUaWNrZXQHCHRpY2tldElkB2V2ZW50SWQEbmFtZQtkZXNjcmlwdGlvbgVwcmljZQxtYXhBdmFpbGFibGUGbWF4VXNlBA0kdDAxNDM1NjE0Mzk2CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxNDM1NjE0Mzk2Al8xBAZjYWxsZXIIBQ0kdDAxNDM1NjE0Mzk2Al8yBARkYXRlCAUNJHQwMTQzNTYxNDM5NgJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAMJAQEhAQkBC3RpY2tldEV4aXN0AwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQEDnZhbGlkYXRlVGlja2V0CQESdmFsaWRhdGVUaWNrZXREYXRhBwUHZXZlbnRJZAUGY2FsbGVyBQRuYW1lBQtkZXNjcmlwdGlvbgUFcHJpY2UFDG1heEF2YWlsYWJsZQUGbWF4VXNlAwkBAiE9AgUOdmFsaWRhdGVUaWNrZXQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQKdGlja2V0U29sZAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQENa2V5VGlja2V0U29sZAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQAAAMJAGYCBQp0aWNrZXRTb2xkBQxtYXhBdmFpbGFibGUJAAIBAj5NYXggdGlja2V0cyBhdmFpbGFibGUgY2Fubm90IGJlIGxvd2VyIHRoYW4gYW1vdW50IGFscmVhZHkgc29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldERlc2MDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQtkZXNjcmlwdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVRpY2tldFByaWNlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQxtYXhBdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlUaWNrZXRNYXhVc2UDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQZtYXhVc2UFA25pbAFpAQ9wYXVzZVRpY2tldFNhbGUDB2V2ZW50SWQIdGlja2V0SWQGc3RhdHVzBA0kdDAxNTUyNTE1NTY1CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxNTUyNTE1NTY1Al8xBAZjYWxsZXIIBQ0kdDAxNTUyNTE1NTY1Al8yBARkYXRlCAUNJHQwMTU1MjUxNTU2NQJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBD2tleVRpY2tldE9uU2FsZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBnN0YXR1cwUDbmlsAWkBDGRlbGV0ZVRpY2tldAIIdGlja2V0SWQHZXZlbnRJZAQNJHQwMTU5MzkxNTk3OQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTU5MzkxNTk3OQJfMQQGY2FsbGVyCAUNJHQwMTU5MzkxNTk3OQJfMgQEZGF0ZQgFDSR0MDE1OTM5MTU5NzkCXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQDCQEBIQEJAQt0aWNrZXRFeGlzdAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAAIBAhBUaWNrZXQgbm90IGZvdW5kBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBDWtleVRpY2tldFNvbGQDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkAwkBAiE9AgUKYW1vdW50U29sZAAACQACAQImQ2Fubm90IGRlbGV0ZSB0aWNrZXQgdGhhdCBzb2xkIGFscmVhZHkEF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50CQEPZ2V0SW50ZWdlckJ5S2V5AQkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleVRpY2tldERhdGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlUaWNrZXREZXNjAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEOa2V5VGlja2V0UHJpY2UDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlUaWNrZXRPblNhbGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlUaWNrZXRNYXhVc2UDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQJAGUCBRd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAABBQNuaWwBaQEJYnV5VGlja2V0Awh0aWNrZXRJZAdldmVudElkBmlzc3VlcgQNJHQwMTcyMDMxNzI0MQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTcyMDMxNzI0MQJfMQQGY2FsbGVyCAUNJHQwMTcyMDMxNzI0MQJfMgQEZGF0ZQgFDSR0MDE3MjAzMTcyNDECXzMECHRvdGFsTkZUCQELdmFsdWVPckVsc2UCCQEPZ2V0SW50ZWdlckJ5S2V5AQIUdG90YWxfdGlja2V0c19pc3N1ZWQAAAMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmlzc3VlcgkAAgECH0V2ZW50IElEIGFuZCBJc3N1ZXIgZG9uJ3QgbWF0Y2gDCQEBIQEJAQt0aWNrZXRFeGlzdAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJAAIBAhBUaWNrZXQgbm90IGZvdW5kBAlldmVudE5hbWUJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlFdmVudE5hbWUCBQZpc3N1ZXIFB2V2ZW50SWQDCQAAAgUJZXZlbnROYW1lAgAJAAIBAhFBcnQgZG9lc24ndCBleGlzdAMJAQ9ldmVudElzQ2FuY2VsZWQCBQZpc3N1ZXIFB2V2ZW50SWQJAAIBAhhFdmVudCBoYXZlIGJlZW4gY2FuY2VsZWQECGlzT25TYWxlCQEPZ2V0Qm9vbGVhbkJ5S2V5AQkBD2tleVRpY2tldE9uU2FsZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQEBIQEFCGlzT25TYWxlCQACAQIUVGlja2V0cyBub3QgZm9yIHNhbGUECmFtb3VudFNvbGQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQENa2V5VGlja2V0U29sZAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQEC3RpY2tldFByaWNlCQEPZ2V0SW50ZWdlckJ5S2V5AQkBDmtleVRpY2tldFByaWNlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQMcHJpY2VBc3NldElkCQDYBAEFC3NpZ25Bc3NldElkBA0kdDAxODA4NzE4MTYxCQEUdmFsaWRhdGVQcmljZUFzc2V0SWQDBQFpBQxwcmljZUFzc2V0SWQFC3RpY2tldFByaWNlBAZhbW91bnQIBQ0kdDAxODA4NzE4MTYxAl8xBAdhc3NldElkCAUNJHQwMTgwODcxODE2MQJfMgQKbWF4Q2FuU2VsbAkBD2dldEludGVnZXJCeUtleQEJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQdzaWduQ3V0AGQEEmFtb3VudEZvck9yZ2FuaXplcgkAZQIFBmFtb3VudAUNYW1vdW50Rm9yU2lnbgMJAAACBQphbW91bnRTb2xkBQptYXhDYW5TZWxsCQACAQIMQXJ0IHNvbGQgb3V0BA1uZXdBbW91bnRTb2xkCQBkAgUKYW1vdW50U29sZAABBAlpc3N1ZU1ldGEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgtPcmdhbml6ZXI6IAUGaXNzdWVyAgwsCiBFdmVudElEOiAFB2V2ZW50SWQCDSwKIFRpY2tldElEOiAFCHRpY2tldElkAg4sCiBFdmVudE5hbWU6IAUJZXZlbnROYW1lAgosCiBJc3N1ZTogCQCkAwEFDW5ld0Ftb3VudFNvbGQCAS8JAKQDAQUKbWF4Q2FuU2VsbAQIaXNzdWVORlQJAMIIBQkArAICAgNTVF8JAKQDAQkAZAIFCHRvdGFsTkZUAAEFCWlzc3VlTWV0YQABAAAHBAVpZE5GVAkAuAgBBQhpc3N1ZU5GVAQKc2VsbFN0YXR1cwMJAAACBQ1uZXdBbW91bnRTb2xkBQptYXhDYW5TZWxsBwYECnJlY2VpdmVORlQIBQFpBmNhbGxlcgQHc29sZEtleQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X3NvbGRfCQCkAwEFDW5ld0Ftb3VudFNvbGQCBF9vZl8JAKQDAQUKbWF4Q2FuU2VsbAIBXwUHZXZlbnRJZAIBXwUGaXNzdWVyAgFfBQh0aWNrZXRJZAQJc29sZFZhbHVlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBBQpyZWNlaXZlTkZUAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFBmFtb3VudAIBXwkA2AQBBQVpZE5GVAQIc29sZERhdGEJAQtTdHJpbmdFbnRyeQIFB3NvbGRLZXkFCXNvbGRWYWx1ZQQNZXZlbnRUb3RhbE5GVAkBD2dldEludGVnZXJCeUtleQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmlzc3VlcgUHZXZlbnRJZAQOdGlja2V0VG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBAZidXlSZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlUaWNrZXRTb2xkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUNbmV3QW1vdW50U29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICBG5mdF8JANgEAQUFaWRORlQFB3NvbGRLZXkJAMwIAgkBDEludGVnZXJFbnRyeQICEHRvdGFsX25mdF9pc3N1ZWQJAGQCBQh0b3RhbE5GVAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBQZpc3N1ZXIFB2V2ZW50SWQJAGQCBQ1ldmVudFRvdGFsTkZUAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJAGQCBQ50aWNrZXRUb3RhbE5GVAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgNTVF8JAKQDAQkAZAIFCHRvdGFsTkZUAAECCF9hc3NldElkCQDYBAEFBWlkTkZUCQDMCAIJAQxCb29sZWFuRW50cnkCCQEPa2V5VGlja2V0T25TYWxlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUKc2VsbFN0YXR1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleVRpY2tldEFtb3VudFVzZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkAAAJAMwIAgUIaXNzdWVORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmlzc3VlcgUSYW1vdW50Rm9yT3JnYW5pemVyBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCnJlY2VpdmVORlQAAQUFaWRORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwJAMwIAgUIc29sZERhdGEFBmJ1eVJlcwFpAQl1c2VUaWNrZXQCB2V2ZW50SWQGaXNzdWVyBA0kdDAyMDQ0MDIwNDc4CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyMDQ0MDIwNDc4Al8xBAZjYWxsZXIIBQ0kdDAyMDQ0MDIwNDc4Al8yBARkYXRlCAUNJHQwMjA0NDAyMDQ3OAJfMwQNJHQwMjA0ODQyMDUyMAkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAyMDQ4NDIwNTIwAl8xBAZhbW91bnQIBQ0kdDAyMDQ4NDIwNTIwAl8yAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkBAh0aWNrZXRJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAwkBASEBCQELdGlja2V0RXhpc3QDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQKYW1vdW50VXNlZAkBD2dldEludGVnZXJCeUtleQEJARNrZXlUaWNrZXRBbW91bnRVc2VkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQMbWF4VXNpbmdUaW1lCQEPZ2V0SW50ZWdlckJ5S2V5AQkBD2tleVRpY2tldE1heFVzZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQAAAgUMbWF4VXNpbmdUaW1lBQphbW91bnRVc2VkCQACAQkArAICCQCsAgICDFRpY2tldCB1c2VkIAkApAMBBQphbW91bnRVc2VkAg4gdGltZXMgYWxyZWFkeQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleVRpY2tldEFtb3VudFVzZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQBkAgUKYW1vdW50VXNlZAABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAQgFB3BheW1lbnQHYXNzZXRJZAUDbmlsAWkBC2RlbGV0ZUVudHJ5AQVlbnRyeQQGY2FsbGVyCQClCAEIBQFpBmNhbGxlcgMJAAACBQZjYWxsZXIFBWNocmlzCQDMCAIJAQtEZWxldGVFbnRyeQEFBWVudHJ5BQNuaWwJAAIBAgJubwDk8Lir", "height": 2288937, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2zdvycWQd3mC5j7QTTSbJ9m9RXmyj3upDjbg8DBsJ44k Next: none Diff:
OldNewDifferences
313313 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
314314 if ((totalTicketTypeForEvent > 0))
315315 then throw("Delete all tickets first")
316- else [DeleteEntry(keyEventAddedDate(caller, eventId)), DeleteEntry(keyEventDate(caller, eventId)), DeleteEntry(keyEventName(caller, eventId)), DeleteEntry(keyEventDesc(caller, eventId)), DeleteEntry(keyEventDisplayCid(caller, eventId)), DeleteEntry(keyEventTags(caller, eventId)), DeleteEntry(keyEventCrawler(caller, eventId)), DeleteEntry(keyEventType(caller, eventId)), DeleteEntry(keyEventTotalTicketsIssued(caller, eventId)), DeleteEntry(keyEventCanceled(caller, eventId)), DeleteEntry(keyEventOwnerByEventId(eventId))]
316+ else [DeleteEntry(keyEventAddedDate(caller, eventId)), DeleteEntry(keyEventDate(caller, eventId)), DeleteEntry(keyEventName(caller, eventId)), DeleteEntry(keyEventDesc(caller, eventId)), DeleteEntry(keyEventDisplayCid(caller, eventId)), DeleteEntry(keyEventTags(caller, eventId)), DeleteEntry(keyEventCrawler(caller, eventId)), DeleteEntry(keyEventType(caller, eventId)), DeleteEntry(keyEventTotalTicketsIssued(caller, eventId)), DeleteEntry(keyEventCanceled(caller, eventId)), DeleteEntry(keyEventOwnerByEventId(eventId)), DeleteEntry(keyEventTotalTicketTypes(caller, eventId))]
317317 }
318318 }
319319 }
322322
323323 @Callable(i)
324324 func cancelEvent (eventId,reason) = {
325- let $t01190411948 = idCallerDate(i)
326- let id = $t01190411948._1
327- let caller = $t01190411948._2
328- let addedDate = $t01190411948._3
325+ let $t01196812012 = idCallerDate(i)
326+ let id = $t01196812012._1
327+ let caller = $t01196812012._2
328+ let addedDate = $t01196812012._3
329329 let checkUser = validateUser(caller)
330330 if ((checkUser != ""))
331331 then throw(checkUser)
338338
339339 @Callable(i)
340340 func flagEvent (eventId,addr,flag,note) = {
341- let $t01238312416 = idCallerDate(i)
342- let id = $t01238312416._1
343- let caller = $t01238312416._2
341+ let $t01244712480 = idCallerDate(i)
342+ let id = $t01244712480._1
343+ let caller = $t01244712480._2
344344 if (containsElement([chris, toString(this)], caller))
345345 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
346346 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
352352
353353 @Callable(i)
354354 func addTicket (eventId,name,description,price,maxAvailable,MaxUse) = {
355- let $t01291712957 = idCallerDate(i)
356- let id = $t01291712957._1
357- let caller = $t01291712957._2
358- let date = $t01291712957._3
355+ let $t01298113021 = idCallerDate(i)
356+ let id = $t01298113021._1
357+ let caller = $t01298113021._2
358+ let date = $t01298113021._3
359359 let checkUser = validateUser(caller)
360360 if ((checkUser != ""))
361361 then throw(checkUser)
378378
379379 @Callable(i)
380380 func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse) = {
381- let $t01429214332 = idCallerDate(i)
382- let id = $t01429214332._1
383- let caller = $t01429214332._2
384- let date = $t01429214332._3
381+ let $t01435614396 = idCallerDate(i)
382+ let id = $t01435614396._1
383+ let caller = $t01435614396._2
384+ let date = $t01435614396._3
385385 let checkUser = validateUser(caller)
386386 if ((checkUser != ""))
387387 then throw(checkUser)
406406
407407 @Callable(i)
408408 func pauseTicketSale (eventId,ticketId,status) = {
409- let $t01546115501 = idCallerDate(i)
410- let id = $t01546115501._1
411- let caller = $t01546115501._2
412- let date = $t01546115501._3
409+ let $t01552515565 = idCallerDate(i)
410+ let id = $t01552515565._1
411+ let caller = $t01552515565._2
412+ let date = $t01552515565._3
413413 let checkUser = validateUser(caller)
414414 if ((checkUser != ""))
415415 then throw(checkUser)
422422
423423 @Callable(i)
424424 func deleteTicket (ticketId,eventId) = {
425- let $t01587515915 = idCallerDate(i)
426- let id = $t01587515915._1
427- let caller = $t01587515915._2
428- let date = $t01587515915._3
425+ let $t01593915979 = idCallerDate(i)
426+ let id = $t01593915979._1
427+ let caller = $t01593915979._2
428+ let date = $t01593915979._3
429429 let checkUser = validateUser(caller)
430430 if ((checkUser != ""))
431431 then throw(checkUser)
448448
449449 @Callable(i)
450450 func buyTicket (ticketId,eventId,issuer) = {
451- let $t01713917177 = idCallerDate(i)
452- let id = $t01713917177._1
453- let caller = $t01713917177._2
454- let date = $t01713917177._3
451+ let $t01720317241 = idCallerDate(i)
452+ let id = $t01720317241._1
453+ let caller = $t01720317241._2
454+ let date = $t01720317241._3
455455 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
456456 if (!(isEventOwner(eventId, issuer)))
457457 then throw("Event ID and Issuer don't match")
471471 let amountSold = getIntegerByKey(keyTicketSold(issuer, eventId, ticketId))
472472 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
473473 let priceAssetId = toBase58String(signAssetId)
474- let $t01802318097 = validatePriceAssetId(i, priceAssetId, ticketPrice)
475- let amount = $t01802318097._1
476- let assetId = $t01802318097._2
474+ let $t01808718161 = validatePriceAssetId(i, priceAssetId, ticketPrice)
475+ let amount = $t01808718161._1
476+ let assetId = $t01808718161._2
477477 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
478478 let amountForSign = fraction(amount, signCut, 100)
479479 let amountForOrganizer = (amount - amountForSign)
509509
510510 @Callable(i)
511511 func useTicket (eventId,issuer) = {
512- let $t02037620414 = idCallerDate(i)
513- let id = $t02037620414._1
514- let caller = $t02037620414._2
515- let date = $t02037620414._3
516- let $t02042020456 = isPayment(i)
517- let payment = $t02042020456._1
518- let amount = $t02042020456._2
512+ let $t02044020478 = idCallerDate(i)
513+ let id = $t02044020478._1
514+ let caller = $t02044020478._2
515+ let date = $t02044020478._3
516+ let $t02048420520 = isPayment(i)
517+ let payment = $t02048420520._1
518+ let amount = $t02048420520._2
519519 if (!(isDefined(payment.assetId)))
520520 then throw("Wrong asset attached")
521521 else {
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let VERSION = "1.0.0"
55
66 func getStringByKey (key) = valueOrElse(getString(this, key), "")
77
88
99 let userDapp = value(addressFromString(getStringByKey("conf_users_dapp")))
1010
1111 let feeReceiver = getStringByKey("conf_fee_receiver")
1212
1313 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
1414
1515 let chris = getStringByKey("conf_admin_1")
1616
1717 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
1818
1919
2020 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
2121
2222
2323 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
2424
2525 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
2626
2727 let userSuspended = "SUSPENDED"
2828
2929 let userUnregistered = "UNREGISTERED"
3030
3131 func validateCID (cid) = if (contains(cid, "/"))
3232 then if (if ((76 > size(cid)))
3333 then (size(split(cid, "/")[0]) == 59)
3434 else false)
3535 then (16 > size(split(cid, "/")[1]))
3636 else false
3737 else false
3838
3939
4040 let signCut = 2
4141
4242 func keyUserStatus (caller) = ("user_status_" + caller)
4343
4444
4545 func keyEventOwnerByEventId (eventId) = ("get_event_owner_" + eventId)
4646
4747
4848 func keyEventAddedDate (caller,eventId) = ((("event_addedDate_" + eventId) + "_") + caller)
4949
5050
5151 func keyEventDate (caller,eventId) = ((("event_date_" + eventId) + "_") + caller)
5252
5353
5454 func keyEventName (caller,eventId) = ((("event_name_" + eventId) + "_") + caller)
5555
5656
5757 func keyEventDesc (caller,eventId) = ((("event_desc_" + eventId) + "_") + caller)
5858
5959
6060 func keyEventDisplayCid (caller,eventId) = ((("event_displayCid_" + eventId) + "_") + caller)
6161
6262
6363 func keyEventTags (caller,eventId) = ((("event_tags_" + eventId) + "_") + caller)
6464
6565
6666 func keyEventFlag (caller,eventId) = ((("event_flag_" + eventId) + "_") + caller)
6767
6868
6969 func keyEventNote (caller,eventId) = ((("event_note_" + eventId) + "_") + caller)
7070
7171
7272 func keyEventCrawler (caller,eventId) = ((("event_crawlerCid_" + eventId) + "_") + caller)
7373
7474
7575 func keyEventType (caller,eventId) = ((("event_type_" + eventId) + "_") + caller)
7676
7777
7878 func keyEventTotalTicketTypes (caller,eventId) = ((("event_totalTicketTypes_" + eventId) + "_") + caller)
7979
8080
8181 func keyEventTotalTicketsIssued (caller,eventId) = ((("event_totalIssued_" + eventId) + "_") + caller)
8282
8383
8484 func keyEventCanceled (caller,eventId) = ((("event_canceled_" + eventId) + "_") + caller)
8585
8686
8787 func keyEventCanceledReason (caller,eventId) = ((("event_canceledReason_" + eventId) + "_") + caller)
8888
8989
9090 func keyTicketName (caller,eventId,ticketId) = ((((("ticket_name_" + eventId) + "_") + caller) + "_") + ticketId)
9191
9292
9393 func keyTicketDesc (caller,eventId,ticketId) = ((((("ticket_desc_" + eventId) + "_") + caller) + "_") + ticketId)
9494
9595
9696 func keyTicketPrice (caller,eventId,ticketId) = ((((("ticket_price_" + eventId) + "_") + caller) + "_") + ticketId)
9797
9898
9999 func keyTicketDate (caller,eventId,ticketId) = ((((("ticket_date_" + eventId) + "_") + caller) + "_") + ticketId)
100100
101101
102102 func keyTicketMaxAvailable (caller,eventId,ticketId) = ((((("ticket_maxAvailable_" + eventId) + "_") + caller) + "_") + ticketId)
103103
104104
105105 func keyTicketSold (caller,eventId,ticketId) = ((((("ticket_sold_" + eventId) + "_") + caller) + "_") + ticketId)
106106
107107
108108 func keyTicketOnSale (caller,eventId,ticketId) = ((((("ticket_onSale_" + eventId) + "_") + caller) + "_") + ticketId)
109109
110110
111111 func keyTicketAmountUsed (caller,eventId,ticketId) = ((((("ticket_amountUsed_" + eventId) + "_") + caller) + "_") + ticketId)
112112
113113
114114 func keyTicketMaxUse (caller,eventId,ticketId) = ((((("ticket_maxUse_" + eventId) + "_") + caller) + "_") + ticketId)
115115
116116
117117 func keyTicketTotalIssued (caller,eventId,ticketId) = ((((("ticket_totalIssued_" + eventId) + "_") + caller) + "_") + ticketId)
118118
119119
120120 func validateString (str,max) = if ((size(str) == 0))
121121 then throw("Field cannot be is empty")
122122 else if ((size(str) > max))
123123 then throw((str + " is too long"))
124124 else true
125125
126126
127127 func validateInt (num) = (0 > num)
128128
129129
130130 func getEventOwnerByEventId (eventId) = valueOrElse(getString(this, keyEventOwnerByEventId(eventId)), "")
131131
132132
133133 func validateUser (caller) = {
134134 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
135135 if ((userStatus == userUnregistered))
136136 then "Register this account first with \"Account\" tab"
137137 else if ((userStatus == userSuspended))
138138 then "Account suspended"
139139 else ""
140140 }
141141
142142
143143 func validateType (type) = containsElement(["online", "offline", "both"], type)
144144
145145
146146 func validateEventData (caller,cidDisplay,name,description,tags,type,date) = {
147147 let checkUser = validateUser(caller)
148148 if ((checkUser != ""))
149149 then throw(checkUser)
150150 else if ((size(cidDisplay) == 0))
151151 then throw("Display CID cannot be empty")
152152 else if (!(validateCID(cidDisplay)))
153153 then throw("Problem with CID")
154154 else if (!(validateString(name, 200)))
155155 then throw("100 Char. max name")
156156 else if (!(validateType(type)))
157157 then throw("Wrong event type")
158158 else if (!(validateString(description, 1000)))
159159 then throw("1000 Char. max description")
160160 else if (!(validateString(date, 1000)))
161161 then throw("1000 Char. max date")
162162 else if ((size(split(tags, ",")) > 5))
163163 then throw("5 tags max.")
164164 else ""
165165 }
166166
167167
168168 func validateTicketData (eventId,caller,name,description,price,maxAvailable,maxUse) = {
169169 let checkUser = validateUser(caller)
170170 if ((checkUser != ""))
171171 then throw(checkUser)
172172 else if (!(validateString(name, 200)))
173173 then throw("100 Char. max name")
174174 else if (!(validateString(description, 1000)))
175175 then throw("1000 Char. max description")
176176 else if (if (if (validateInt(price))
177177 then true
178178 else validateInt(maxUse))
179179 then true
180180 else validateInt(maxAvailable))
181181 then throw("Positive amount only")
182182 else if (!(validateString(description, 1000)))
183183 then throw("1000 Char. max description")
184184 else ""
185185 }
186186
187187
188188 func idCallerDate (i) = if (!(dappRunning))
189189 then throw(maintenanceMSG)
190190 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
191191
192192
193193 func isPayment (i) = if ((size(i.payments) == 0))
194194 then throw("No payment attached")
195195 else {
196196 let payment = value(i.payments[0])
197197 let amount = value(payment.amount)
198198 $Tuple2(payment, amount)
199199 }
200200
201201
202202 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
203203 let $t067396775 = isPayment(i)
204204 let payment = $t067396775._1
205205 let amount = $t067396775._2
206206 if (!(isDefined(payment.assetId)))
207207 then throw("Wrong asset attached")
208208 else {
209209 let assetId = if (if ((size(priceAssetId) > 0))
210210 then (toBase58String(value(payment.assetId)) == priceAssetId)
211211 else false)
212212 then payment.assetId
213213 else throw("Wrong asset attached")
214214 if ((artworkPrice != amount))
215215 then throw("Payment amount don't match")
216216 else $Tuple2(amount, assetId)
217217 }
218218 }
219219
220220
221221 func isEventOwner (eventId,caller) = {
222222 let eventOwner = getEventOwnerByEventId(eventId)
223223 if ((eventOwner == ""))
224224 then throw("Event not found")
225225 else (eventOwner == caller)
226226 }
227227
228228
229229 func ticketExist (caller,eventId,ticketId) = {
230230 let ticket = getStringByKey(keyTicketName(caller, eventId, ticketId))
231231 (size(ticket) != 0)
232232 }
233233
234234
235235 func eventIsCanceled (issuer,eventId) = getBooleanByKey(keyEventCanceled(issuer, eventId))
236236
237237
238238 @Callable(invoke)
239239 func setConf (key,val) = {
240240 let caller = toString(invoke.caller)
241241 if (containsElement([chris, toString(this)], caller))
242242 then if (contains(key, "conf_"))
243243 then [StringEntry(key, val)]
244244 else throw("Entries starting with conf_ only")
245245 else throw("You are not allowed to change this")
246246 }
247247
248248
249249
250250 @Callable(i)
251251 func addEvent (name,description,tags,cidDisplay,crawler,type,date) = {
252252 let $t081188167 = idCallerDate(i)
253253 let eventId = $t081188167._1
254254 let caller = $t081188167._2
255255 let addedDate = $t081188167._3
256256 let checkUser = validateUser(caller)
257257 if ((checkUser != ""))
258258 then throw(checkUser)
259259 else {
260260 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, type, date)
261261 if ((validateEvent != ""))
262262 then throw("Something went wrong!")
263263 else [IntegerEntry(keyEventAddedDate(caller, eventId), addedDate), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventDisplayCid(caller, eventId), cidDisplay), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler), StringEntry(keyEventType(caller, eventId), type), IntegerEntry(keyEventTotalTicketsIssued(caller, eventId), 0), BooleanEntry(keyEventCanceled(caller, eventId), false), StringEntry(keyEventOwnerByEventId(eventId), caller)]
264264 }
265265 }
266266
267267
268268
269269 @Callable(i)
270270 func editEvent (eventId,name,description,tags,cidDisplay,crawler,type,date) = if (!(dappRunning))
271271 then throw(maintenanceMSG)
272272 else {
273273 let caller = toBase58String(i.caller.bytes)
274274 let checkUser = validateUser(caller)
275275 if ((checkUser != ""))
276276 then throw(checkUser)
277277 else {
278278 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, type, date)
279279 if ((validateEvent != ""))
280280 then throw("Something went wrong!")
281281 else {
282282 let entryExist = getStringByKey(keyEventName(caller, eventId))
283283 if ((entryExist == ""))
284284 then throw("Entry not found")
285285 else {
286286 let flag = getStringByKey(keyEventFlag(caller, eventId))
287287 if ((flag == "ILLEGAL"))
288288 then throw("Cannot update ILLEGAL Event")
289289 else [StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventType(caller, eventId), type), StringEntry(keyEventCrawler(caller, eventId), crawler)]
290290 }
291291 }
292292 }
293293 }
294294
295295
296296
297297 @Callable(i)
298298 func deleteEvent (eventId) = {
299299 let $t01053110575 = idCallerDate(i)
300300 let id = $t01053110575._1
301301 let caller = $t01053110575._2
302302 let addedDate = $t01053110575._3
303303 let checkUser = validateUser(caller)
304304 if ((checkUser != ""))
305305 then throw(checkUser)
306306 else if (!(isEventOwner(eventId, caller)))
307307 then throw("You are not the owner of this event")
308308 else {
309309 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(caller, eventId))
310310 if ((eventTotalNFT != 0))
311311 then throw("Cannot delete event with already sold tickets")
312312 else {
313313 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
314314 if ((totalTicketTypeForEvent > 0))
315315 then throw("Delete all tickets first")
316- else [DeleteEntry(keyEventAddedDate(caller, eventId)), DeleteEntry(keyEventDate(caller, eventId)), DeleteEntry(keyEventName(caller, eventId)), DeleteEntry(keyEventDesc(caller, eventId)), DeleteEntry(keyEventDisplayCid(caller, eventId)), DeleteEntry(keyEventTags(caller, eventId)), DeleteEntry(keyEventCrawler(caller, eventId)), DeleteEntry(keyEventType(caller, eventId)), DeleteEntry(keyEventTotalTicketsIssued(caller, eventId)), DeleteEntry(keyEventCanceled(caller, eventId)), DeleteEntry(keyEventOwnerByEventId(eventId))]
316+ else [DeleteEntry(keyEventAddedDate(caller, eventId)), DeleteEntry(keyEventDate(caller, eventId)), DeleteEntry(keyEventName(caller, eventId)), DeleteEntry(keyEventDesc(caller, eventId)), DeleteEntry(keyEventDisplayCid(caller, eventId)), DeleteEntry(keyEventTags(caller, eventId)), DeleteEntry(keyEventCrawler(caller, eventId)), DeleteEntry(keyEventType(caller, eventId)), DeleteEntry(keyEventTotalTicketsIssued(caller, eventId)), DeleteEntry(keyEventCanceled(caller, eventId)), DeleteEntry(keyEventOwnerByEventId(eventId)), DeleteEntry(keyEventTotalTicketTypes(caller, eventId))]
317317 }
318318 }
319319 }
320320
321321
322322
323323 @Callable(i)
324324 func cancelEvent (eventId,reason) = {
325- let $t01190411948 = idCallerDate(i)
326- let id = $t01190411948._1
327- let caller = $t01190411948._2
328- let addedDate = $t01190411948._3
325+ let $t01196812012 = idCallerDate(i)
326+ let id = $t01196812012._1
327+ let caller = $t01196812012._2
328+ let addedDate = $t01196812012._3
329329 let checkUser = validateUser(caller)
330330 if ((checkUser != ""))
331331 then throw(checkUser)
332332 else if (!(isEventOwner(eventId, caller)))
333333 then throw("You are not the owner of this event")
334334 else [BooleanEntry(keyEventCanceled(caller, eventId), true), StringEntry(keyEventCanceledReason(caller, eventId), reason)]
335335 }
336336
337337
338338
339339 @Callable(i)
340340 func flagEvent (eventId,addr,flag,note) = {
341- let $t01238312416 = idCallerDate(i)
342- let id = $t01238312416._1
343- let caller = $t01238312416._2
341+ let $t01244712480 = idCallerDate(i)
342+ let id = $t01244712480._1
343+ let caller = $t01244712480._2
344344 if (containsElement([chris, toString(this)], caller))
345345 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
346346 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
347347 else throw(("Unknow status " + flag))
348348 else throw("You are not allowed")
349349 }
350350
351351
352352
353353 @Callable(i)
354354 func addTicket (eventId,name,description,price,maxAvailable,MaxUse) = {
355- let $t01291712957 = idCallerDate(i)
356- let id = $t01291712957._1
357- let caller = $t01291712957._2
358- let date = $t01291712957._3
355+ let $t01298113021 = idCallerDate(i)
356+ let id = $t01298113021._1
357+ let caller = $t01298113021._2
358+ let date = $t01298113021._3
359359 let checkUser = validateUser(caller)
360360 if ((checkUser != ""))
361361 then throw(checkUser)
362362 else if (eventIsCanceled(caller, eventId))
363363 then throw("Event have been canceled")
364364 else if (!(isEventOwner(eventId, caller)))
365365 then throw("You are not the owner of this event")
366366 else {
367367 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, MaxUse)
368368 if ((validateTicket != ""))
369369 then throw("Something went wrong!")
370370 else {
371371 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
372372 [StringEntry(keyTicketName(caller, eventId, id), name), IntegerEntry(keyTicketDate(caller, eventId, id), date), StringEntry(keyTicketDesc(caller, eventId, id), description), IntegerEntry(keyTicketPrice(caller, eventId, id), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, id), maxAvailable), BooleanEntry(keyTicketOnSale(caller, eventId, id), true), IntegerEntry(keyTicketMaxUse(caller, eventId, id), MaxUse), IntegerEntry(keyTicketTotalIssued(caller, eventId, id), 0), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent + 1))]
373373 }
374374 }
375375 }
376376
377377
378378
379379 @Callable(i)
380380 func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse) = {
381- let $t01429214332 = idCallerDate(i)
382- let id = $t01429214332._1
383- let caller = $t01429214332._2
384- let date = $t01429214332._3
381+ let $t01435614396 = idCallerDate(i)
382+ let id = $t01435614396._1
383+ let caller = $t01435614396._2
384+ let date = $t01435614396._3
385385 let checkUser = validateUser(caller)
386386 if ((checkUser != ""))
387387 then throw(checkUser)
388388 else if (!(isEventOwner(eventId, caller)))
389389 then throw("You are not the owner of this event")
390390 else if (!(ticketExist(caller, eventId, ticketId)))
391391 then throw("Ticket not found")
392392 else {
393393 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, maxUse)
394394 if ((validateTicket != ""))
395395 then throw("Something went wrong!")
396396 else {
397397 let ticketSold = valueOrElse(getInteger(keyTicketSold(caller, eventId, ticketId)), 0)
398398 if ((ticketSold > maxAvailable))
399399 then throw("Max tickets available cannot be lower than amount already sold")
400400 else [StringEntry(keyTicketName(caller, eventId, ticketId), name), StringEntry(keyTicketDesc(caller, eventId, ticketId), description), IntegerEntry(keyTicketPrice(caller, eventId, ticketId), price), IntegerEntry(keyTicketMaxAvailable(caller, eventId, ticketId), maxAvailable), IntegerEntry(keyTicketMaxUse(caller, eventId, id), maxUse)]
401401 }
402402 }
403403 }
404404
405405
406406
407407 @Callable(i)
408408 func pauseTicketSale (eventId,ticketId,status) = {
409- let $t01546115501 = idCallerDate(i)
410- let id = $t01546115501._1
411- let caller = $t01546115501._2
412- let date = $t01546115501._3
409+ let $t01552515565 = idCallerDate(i)
410+ let id = $t01552515565._1
411+ let caller = $t01552515565._2
412+ let date = $t01552515565._3
413413 let checkUser = validateUser(caller)
414414 if ((checkUser != ""))
415415 then throw(checkUser)
416416 else if (!(isEventOwner(eventId, caller)))
417417 then throw("You are not the owner of this event")
418418 else [BooleanEntry(keyTicketOnSale(caller, eventId, id), status)]
419419 }
420420
421421
422422
423423 @Callable(i)
424424 func deleteTicket (ticketId,eventId) = {
425- let $t01587515915 = idCallerDate(i)
426- let id = $t01587515915._1
427- let caller = $t01587515915._2
428- let date = $t01587515915._3
425+ let $t01593915979 = idCallerDate(i)
426+ let id = $t01593915979._1
427+ let caller = $t01593915979._2
428+ let date = $t01593915979._3
429429 let checkUser = validateUser(caller)
430430 if ((checkUser != ""))
431431 then throw(checkUser)
432432 else if (!(isEventOwner(eventId, caller)))
433433 then throw("You are not the owner of this event")
434434 else if (!(ticketExist(caller, eventId, ticketId)))
435435 then throw("Ticket not found")
436436 else {
437437 let amountSold = getIntegerByKey(keyTicketSold(caller, eventId, ticketId))
438438 if ((amountSold != 0))
439439 then throw("Cannot delete ticket that sold already")
440440 else {
441441 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
442442 [DeleteEntry(keyTicketName(caller, eventId, ticketId)), DeleteEntry(keyTicketDate(caller, eventId, ticketId)), DeleteEntry(keyTicketDesc(caller, eventId, ticketId)), DeleteEntry(keyTicketPrice(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxAvailable(caller, eventId, ticketId)), DeleteEntry(keyTicketOnSale(caller, eventId, ticketId)), DeleteEntry(keyTicketMaxUse(caller, eventId, ticketId)), DeleteEntry(keyTicketTotalIssued(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
443443 }
444444 }
445445 }
446446
447447
448448
449449 @Callable(i)
450450 func buyTicket (ticketId,eventId,issuer) = {
451- let $t01713917177 = idCallerDate(i)
452- let id = $t01713917177._1
453- let caller = $t01713917177._2
454- let date = $t01713917177._3
451+ let $t01720317241 = idCallerDate(i)
452+ let id = $t01720317241._1
453+ let caller = $t01720317241._2
454+ let date = $t01720317241._3
455455 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
456456 if (!(isEventOwner(eventId, issuer)))
457457 then throw("Event ID and Issuer don't match")
458458 else if (!(ticketExist(issuer, eventId, ticketId)))
459459 then throw("Ticket not found")
460460 else {
461461 let eventName = getStringByKey(keyEventName(issuer, eventId))
462462 if ((eventName == ""))
463463 then throw("Art doesn't exist")
464464 else if (eventIsCanceled(issuer, eventId))
465465 then throw("Event have been canceled")
466466 else {
467467 let isOnSale = getBooleanByKey(keyTicketOnSale(issuer, eventId, ticketId))
468468 if (!(isOnSale))
469469 then throw("Tickets not for sale")
470470 else {
471471 let amountSold = getIntegerByKey(keyTicketSold(issuer, eventId, ticketId))
472472 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
473473 let priceAssetId = toBase58String(signAssetId)
474- let $t01802318097 = validatePriceAssetId(i, priceAssetId, ticketPrice)
475- let amount = $t01802318097._1
476- let assetId = $t01802318097._2
474+ let $t01808718161 = validatePriceAssetId(i, priceAssetId, ticketPrice)
475+ let amount = $t01808718161._1
476+ let assetId = $t01808718161._2
477477 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
478478 let amountForSign = fraction(amount, signCut, 100)
479479 let amountForOrganizer = (amount - amountForSign)
480480 if ((amountSold == maxCanSell))
481481 then throw("Art sold out")
482482 else {
483483 let newAmountSold = (amountSold + 1)
484484 let issueMeta = ((((((((((("Organizer: " + issuer) + ",
485485 EventID: ") + eventId) + ",
486486 TicketID: ") + ticketId) + ",
487487 EventName: ") + eventName) + ",
488488 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
489489 let issueNFT = Issue(("ST_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
490490 let idNFT = calculateAssetId(issueNFT)
491491 let sellStatus = if ((newAmountSold == maxCanSell))
492492 then false
493493 else true
494494 let receiveNFT = i.caller
495495 let soldKey = ((((((((("ticket_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + eventId) + "_") + issuer) + "_") + ticketId)
496496 let soldValue = ((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + toBase58String(idNFT))
497497 let soldData = StringEntry(soldKey, soldValue)
498498 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(issuer, eventId))
499499 let ticketTotalNFT = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
500500 let buyRes = [IntegerEntry(keyTicketSold(issuer, eventId, ticketId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEventTotalTicketsIssued(issuer, eventId), (eventTotalNFT + 1)), IntegerEntry(keyTicketTotalIssued(issuer, eventId, ticketId), (ticketTotalNFT + 1)), StringEntry((("ST_" + toString((totalNFT + 1))) + "_assetId"), toBase58String(idNFT)), BooleanEntry(keyTicketOnSale(issuer, eventId, ticketId), sellStatus), IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId), 0), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForOrganizer, assetId), ScriptTransfer(receiveNFT, 1, idNFT), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
501501 soldData :: buyRes
502502 }
503503 }
504504 }
505505 }
506506 }
507507
508508
509509
510510 @Callable(i)
511511 func useTicket (eventId,issuer) = {
512- let $t02037620414 = idCallerDate(i)
513- let id = $t02037620414._1
514- let caller = $t02037620414._2
515- let date = $t02037620414._3
516- let $t02042020456 = isPayment(i)
517- let payment = $t02042020456._1
518- let amount = $t02042020456._2
512+ let $t02044020478 = idCallerDate(i)
513+ let id = $t02044020478._1
514+ let caller = $t02044020478._2
515+ let date = $t02044020478._3
516+ let $t02048420520 = isPayment(i)
517+ let payment = $t02048420520._1
518+ let amount = $t02048420520._2
519519 if (!(isDefined(payment.assetId)))
520520 then throw("Wrong asset attached")
521521 else {
522522 let ticketId = toBase58String(value(payment.assetId))
523523 if (!(ticketExist(issuer, eventId, ticketId)))
524524 then throw("Ticket not found")
525525 else {
526526 let amountUsed = getIntegerByKey(keyTicketAmountUsed(issuer, eventId, ticketId))
527527 let maxUsingTime = getIntegerByKey(keyTicketMaxUse(issuer, eventId, ticketId))
528528 if ((maxUsingTime == amountUsed))
529529 then throw((("Ticket used " + toString(amountUsed)) + " times already"))
530530 else [IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId), (amountUsed + 1)), ScriptTransfer(Address(fromBase58String(caller)), 1, payment.assetId)]
531531 }
532532 }
533533 }
534534
535535
536536
537537 @Callable(i)
538538 func deleteEntry (entry) = {
539539 let caller = toString(i.caller)
540540 if ((caller == chris))
541541 then [DeleteEntry(entry)]
542542 else throw("no")
543543 }
544544
545545

github/deemru/w8io/fabc49c 
68.05 ms