tx · FM3GR4mX8F3GfyxApi8R7fPotqqREwvNcJ9MR8GciHC

3N1rgNAEfetRH87WQqJan6zSy7Wp1byercW:  -0.01800000 Waves

2022.10.26 07:46 [2288920] smart account 3N1rgNAEfetRH87WQqJan6zSy7Wp1byercW > SELF 0.00000000 Waves

{ "type": 13, "id": "FM3GR4mX8F3GfyxApi8R7fPotqqREwvNcJ9MR8GciHC", "fee": 1800000, "feeAssetId": null, "timestamp": 1666759625175, "version": 2, "chainId": 84, "sender": "3N1rgNAEfetRH87WQqJan6zSy7Wp1byercW", "senderPublicKey": "4dLVvLszUGcr1uHnDX72QuZxqaZTntQWRbbhn8YQDgA4", "proofs": [ "2Faeh7c49FLzpbnngNofoKuuZVHwG52DWwbU2kXy4ztAn69AaTjz89uix2MyUkz3fx5CpkHPNs95Zy1aPQowJPyu" ], "script": "base64:BgJhCAISBAoCCAgSCQoHCAgICAgICBIKCggICAgICAgICBIDCgEIEgQKAggIEgYKBAgICAgSCAoGCAgIAQEBEgkKBwgICAgBAQESBQoDCAEEEgQKAggIEgUKAwgICBIECgIICDUAB1ZFUlNJT04CBTEuMC4wAQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1c2VyRGFwcAkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAg9jb25mX3VzZXJzX2RhcHAAC2ZlZVJlY2VpdmVyCQEOZ2V0U3RyaW5nQnlLZXkBAhFjb25mX2ZlZV9yZWNlaXZlcgALc2lnbkFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAVjaHJpcwkBDmdldFN0cmluZ0J5S2V5AQIMY29uZl9hZG1pbl8xAQ9nZXRJbnRlZ2VyQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEPZ2V0Qm9vbGVhbkJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwALZGFwcFJ1bm5pbmcJAQt2YWx1ZU9yRWxzZQIJAJsIAgUIdXNlckRhcHACFGNvbmZfZGFwcF9pc19ydW5uaW5nBgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHACFGNvbmZfbWFpbnRlbmFuY2VfbXNnAgAADXVzZXJTdXNwZW5kZWQCCVNVU1BFTkRFRAAQdXNlclVucmVnaXN0ZXJlZAIMVU5SRUdJU1RFUkVEAQt2YWxpZGF0ZUNJRAEDY2lkAwkBCGNvbnRhaW5zAgUDY2lkAgEvAwMJAGYCAEwJALECAQUDY2lkCQAAAgkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFA2NpZAIBLwABBwcAB3NpZ25DdXQAAgENa2V5VXNlclN0YXR1cwEGY2FsbGVyCQCsAgICDHVzZXJfc3RhdHVzXwUGY2FsbGVyARZrZXlFdmVudE93bmVyQnlFdmVudElkAQdldmVudElkCQCsAgICEGdldF9ldmVudF9vd25lcl8FB2V2ZW50SWQBEWtleUV2ZW50QWRkZWREYXRlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIQZXZlbnRfYWRkZWREYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudERhdGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9kYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudE5hbWUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9uYW1lXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudERlc2MCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9kZXNjXwUHZXZlbnRJZAIBXwUGY2FsbGVyARJrZXlFdmVudERpc3BsYXlDaWQCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhFldmVudF9kaXNwbGF5Q2lkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudFRhZ3MCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF90YWdzXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudEZsYWcCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9mbGFnXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudE5vdGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF9ub3RlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQ9rZXlFdmVudENyYXdsZXICBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhFldmVudF9jcmF3bGVyQ2lkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAQxrZXlFdmVudFR5cGUCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAgtldmVudF90eXBlXwUHZXZlbnRJZAIBXwUGY2FsbGVyARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhdldmVudF90b3RhbFRpY2tldFR5cGVzXwUHZXZlbnRJZAIBXwUGY2FsbGVyARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICEmV2ZW50X3RvdGFsSXNzdWVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyARBrZXlFdmVudENhbmNlbGVkAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIPZXZlbnRfY2FuY2VsZWRfBQdldmVudElkAgFfBQZjYWxsZXIBFmtleUV2ZW50Q2FuY2VsZWRSZWFzb24CBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhVldmVudF9jYW5jZWxlZFJlYXNvbl8FB2V2ZW50SWQCAV8FBmNhbGxlcgENa2V5VGlja2V0TmFtZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx0aWNrZXRfbmFtZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBDWtleVRpY2tldERlc2MDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X2Rlc2NfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ5rZXlUaWNrZXRQcmljZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg10aWNrZXRfcHJpY2VfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ1rZXlUaWNrZXREYXRlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9kYXRlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEVa2V5VGlja2V0TWF4QXZhaWxhYmxlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFHRpY2tldF9tYXhBdmFpbGFibGVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ1rZXlUaWNrZXRTb2xkAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9zb2xkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEPa2V5VGlja2V0T25TYWxlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnRpY2tldF9vblNhbGVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkARNrZXlUaWNrZXRBbW91bnRVc2VkAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEnRpY2tldF9hbW91bnRVc2VkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEPa2V5VGlja2V0TWF4VXNlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnRpY2tldF9tYXhVc2VfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkARRrZXlUaWNrZXRUb3RhbElzc3VlZAMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhN0aWNrZXRfdG90YWxJc3N1ZWRfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ52YWxpZGF0ZVN0cmluZwIDc3RyA21heAMJAAACCQCxAgEFA3N0cgAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUDc3RyBQNtYXgJAAIBCQCsAgIFA3N0cgIMIGlzIHRvbyBsb25nBgELdmFsaWRhdGVJbnQBA251bQkAZgIAAAUDbnVtARZnZXRFdmVudE93bmVyQnlFdmVudElkAQdldmVudElkCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJARZrZXlFdmVudE93bmVyQnlFdmVudElkAQUHZXZlbnRJZAIAAQx2YWxpZGF0ZVVzZXIBBmNhbGxlcgQKdXNlclN0YXR1cwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIFEHVzZXJVbnJlZ2lzdGVyZWQDCQAAAgUKdXNlclN0YXR1cwUQdXNlclVucmVnaXN0ZXJlZAIuUmVnaXN0ZXIgdGhpcyBhY2NvdW50IGZpcnN0IHdpdGggIkFjY291bnQiIHRhYgMJAAACBQp1c2VyU3RhdHVzBQ11c2VyU3VzcGVuZGVkAhFBY2NvdW50IHN1c3BlbmRlZAIAAQx2YWxpZGF0ZVR5cGUBBHR5cGUJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICBm9ubGluZQkAzAgCAgdvZmZsaW5lCQDMCAICBGJvdGgFA25pbAUEdHlwZQERdmFsaWRhdGVFdmVudERhdGEHBmNhbGxlcgpjaWREaXNwbGF5BG5hbWULZGVzY3JpcHRpb24EdGFncwR0eXBlBGRhdGUECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkAAAIJALECAQUKY2lkRGlzcGxheQAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQELdmFsaWRhdGVDSUQBBQpjaWREaXNwbGF5CQACAQIQUHJvYmxlbSB3aXRoIENJRAMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEbmFtZQDIAQkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBDHZhbGlkYXRlVHlwZQEFBHR5cGUJAAIBAhBXcm9uZyBldmVudCB0eXBlAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQRkYXRlAOgHCQACAQITMTAwMCBDaGFyLiBtYXggZGF0ZQMJAGYCCQCQAwEJALUJAgUEdGFncwIBLAAFCQACAQILNSB0YWdzIG1heC4CAAESdmFsaWRhdGVUaWNrZXREYXRhBwdldmVudElkBmNhbGxlcgRuYW1lC2Rlc2NyaXB0aW9uBXByaWNlDG1heEF2YWlsYWJsZQZtYXhVc2UECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQRuYW1lAMgBCQACAQISMTAwIENoYXIuIG1heCBuYW1lAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwMDCQELdmFsaWRhdGVJbnQBBQVwcmljZQYJAQt2YWxpZGF0ZUludAEFBm1heFVzZQYJAQt2YWxpZGF0ZUludAEFDG1heEF2YWlsYWJsZQkAAgECFFBvc2l0aXZlIGFtb3VudCBvbmx5AwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAgABDGlkQ2FsbGVyRGF0ZQEBaQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwkAlQoDCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJANgEAQgIBQFpBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABCWlzUGF5bWVudAEBaQMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhNObyBwYXltZW50IGF0dGFjaGVkBAdwYXltZW50CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBmFtb3VudAkBBXZhbHVlAQgFB3BheW1lbnQGYW1vdW50CQCUCgIFB3BheW1lbnQFBmFtb3VudAEUdmFsaWRhdGVQcmljZUFzc2V0SWQDAWkMcHJpY2VBc3NldElkDGFydHdvcmtQcmljZQQLJHQwNjczOTY3NzUJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAULJHQwNjczOTY3NzUCXzEEBmFtb3VudAgFCyR0MDY3Mzk2Nzc1Al8yAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkBAdhc3NldElkAwMJAGYCCQCxAgEFDHByaWNlQXNzZXRJZAAACQAAAgkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBQxwcmljZUFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIUV3JvbmcgYXNzZXQgYXR0YWNoZWQDCQECIT0CBQxhcnR3b3JrUHJpY2UFBmFtb3VudAkAAgECGlBheW1lbnQgYW1vdW50IGRvbid0IG1hdGNoCQCUCgIFBmFtb3VudAUHYXNzZXRJZAEMaXNFdmVudE93bmVyAgdldmVudElkBmNhbGxlcgQKZXZlbnRPd25lcgkBFmdldEV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkAwkAAAIFCmV2ZW50T3duZXICAAkAAgECD0V2ZW50IG5vdCBmb3VuZAkAAAIFCmV2ZW50T3duZXIFBmNhbGxlcgELdGlja2V0RXhpc3QDBmNhbGxlcgdldmVudElkCHRpY2tldElkBAZ0aWNrZXQJAQ5nZXRTdHJpbmdCeUtleQEJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkBAiE9AgkAsQIBBQZ0aWNrZXQAAAEPZXZlbnRJc0NhbmNlbGVkAgZpc3N1ZXIHZXZlbnRJZAkBD2dldEJvb2xlYW5CeUtleQEJARBrZXlFdmVudENhbmNlbGVkAgUGaXNzdWVyBQdldmVudElkDAZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEIYWRkRXZlbnQHBG5hbWULZGVzY3JpcHRpb24EdGFncwpjaWREaXNwbGF5B2NyYXdsZXIEdHlwZQRkYXRlBAskdDA4MTE4ODE2NwkBDGlkQ2FsbGVyRGF0ZQEFAWkEB2V2ZW50SWQIBQskdDA4MTE4ODE2NwJfMQQGY2FsbGVyCAULJHQwODExODgxNjcCXzIECWFkZGVkRGF0ZQgFCyR0MDgxMTg4MTY3Al8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgQNdmFsaWRhdGVFdmVudAkBEXZhbGlkYXRlRXZlbnREYXRhBwUGY2FsbGVyBQpjaWREaXNwbGF5BQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwUEdHlwZQUEZGF0ZQMJAQIhPQIFDXZhbGlkYXRlRXZlbnQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWtleUV2ZW50QWRkZWREYXRlAgUGY2FsbGVyBQdldmVudElkBQlhZGRlZERhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAUEZGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERlc2MCBQZjYWxsZXIFB2V2ZW50SWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlFdmVudERpc3BsYXlDaWQCBQZjYWxsZXIFB2V2ZW50SWQFCmNpZERpc3BsYXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAUEdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RXZlbnRDcmF3bGVyAgUGY2FsbGVyBQdldmVudElkBQdjcmF3bGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudFR5cGUCBQZjYWxsZXIFB2V2ZW50SWQFBHR5cGUJAMwIAgkBDEludGVnZXJFbnRyeQIJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmNhbGxlcgUHZXZlbnRJZAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEQa2V5RXZlbnRDYW5jZWxlZAIFBmNhbGxlcgUHZXZlbnRJZAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFmtleUV2ZW50T3duZXJCeUV2ZW50SWQBBQdldmVudElkBQZjYWxsZXIFA25pbAFpAQllZGl0RXZlbnQIB2V2ZW50SWQEbmFtZQtkZXNjcmlwdGlvbgR0YWdzCmNpZERpc3BsYXkHY3Jhd2xlcgR0eXBlBGRhdGUDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cEBmNhbGxlcgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgQNdmFsaWRhdGVFdmVudAkBEXZhbGlkYXRlRXZlbnREYXRhBwUGY2FsbGVyBQpjaWREaXNwbGF5BQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwUEdHlwZQUEZGF0ZQMJAQIhPQIFDXZhbGlkYXRlRXZlbnQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQKZW50cnlFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAMJAAACBQplbnRyeUV4aXN0AgAJAAIBAg9FbnRyeSBub3QgZm91bmQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlFdmVudEZsYWcCBQZjYWxsZXIFB2V2ZW50SWQDCQAAAgUEZmxhZwIHSUxMRUdBTAkAAgECG0Nhbm5vdCB1cGRhdGUgSUxMRUdBTCBFdmVudAkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGVzYwIFBmNhbGxlcgUHZXZlbnRJZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAUEdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnRUeXBlAgUGY2FsbGVyBQdldmVudElkBQR0eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlFdmVudENyYXdsZXICBQZjYWxsZXIFB2V2ZW50SWQFB2NyYXdsZXIFA25pbAFpAQtkZWxldGVFdmVudAEHZXZlbnRJZAQNJHQwMTA1MzExMDU3NQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTA1MzExMDU3NQJfMQQGY2FsbGVyCAUNJHQwMTA1MzExMDU3NQJfMgQJYWRkZWREYXRlCAUNJHQwMTA1MzExMDU3NQJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAQNZXZlbnRUb3RhbE5GVAkBD2dldEludGVnZXJCeUtleQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmNhbGxlcgUHZXZlbnRJZAMJAQIhPQIFDWV2ZW50VG90YWxORlQAAAkAAgECLUNhbm5vdCBkZWxldGUgZXZlbnQgd2l0aCBhbHJlYWR5IHNvbGQgdGlja2V0cwQXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkAwkAZgIFF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50AAAJAAIBAhhEZWxldGUgYWxsIHRpY2tldHMgZmlyc3QJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEWtleUV2ZW50QWRkZWREYXRlAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXZlbnREZXNjAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlFdmVudERpc3BsYXlDaWQCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RXZlbnRDcmF3bGVyAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFdmVudFR5cGUCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUV2ZW50VG90YWxUaWNrZXRzSXNzdWVkAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlFdmVudENhbmNlbGVkAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlFdmVudE93bmVyQnlFdmVudElkAQUHZXZlbnRJZAUDbmlsAWkBC2NhbmNlbEV2ZW50AgdldmVudElkBnJlYXNvbgQNJHQwMTE5MDQxMTk0OAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTE5MDQxMTk0OAJfMQQGY2FsbGVyCAUNJHQwMTE5MDQxMTk0OAJfMgQJYWRkZWREYXRlCAUNJHQwMTE5MDQxMTk0OAJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBEGtleUV2ZW50Q2FuY2VsZWQCBQZjYWxsZXIFB2V2ZW50SWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlFdmVudENhbmNlbGVkUmVhc29uAgUGY2FsbGVyBQdldmVudElkBQZyZWFzb24FA25pbAFpAQlmbGFnRXZlbnQEB2V2ZW50SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDEyMzgzMTI0MTYJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDEyMzgzMTI0MTYCXzEEBmNhbGxlcggFDSR0MDEyMzgzMTI0MTYCXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIACQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUEZmxhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnRGbGFnAgUEYWRkcgUHZXZlbnRJZAUEZmxhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROb3RlAgUEYWRkcgUHZXZlbnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQEJYWRkVGlja2V0BgdldmVudElkBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBk1heFVzZQQNJHQwMTI5MTcxMjk1NwkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTI5MTcxMjk1NwJfMQQGY2FsbGVyCAUNJHQwMTI5MTcxMjk1NwJfMgQEZGF0ZQgFDSR0MDEyOTE3MTI5NTcCXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBD2V2ZW50SXNDYW5jZWxlZAIFBmNhbGxlcgUHZXZlbnRJZAkAAgECGEV2ZW50IGhhdmUgYmVlbiBjYW5jZWxlZAMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50BA52YWxpZGF0ZVRpY2tldAkBEnZhbGlkYXRlVGlja2V0RGF0YQcFB2V2ZW50SWQFBmNhbGxlcgUEbmFtZQULZGVzY3JpcHRpb24FBXByaWNlBQxtYXhBdmFpbGFibGUFBk1heFVzZQMJAQIhPQIFDnZhbGlkYXRlVGlja2V0AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50CQEPZ2V0SW50ZWdlckJ5S2V5AQkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBG5hbWUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlUaWNrZXREYXRlAwUGY2FsbGVyBQdldmVudElkBQJpZAUEZGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0RGVzYwMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5VGlja2V0UHJpY2UDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFDG1heEF2YWlsYWJsZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBD2tleVRpY2tldE9uU2FsZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQGCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEPa2V5VGlja2V0TWF4VXNlAwUGY2FsbGVyBQdldmVudElkBQJpZAUGTWF4VXNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZjYWxsZXIFB2V2ZW50SWQFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQJAGQCBRd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAABBQNuaWwBaQEKZWRpdFRpY2tldAcIdGlja2V0SWQHZXZlbnRJZARuYW1lC2Rlc2NyaXB0aW9uBXByaWNlDG1heEF2YWlsYWJsZQZtYXhVc2UEDSR0MDE0MjkyMTQzMzIJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE0MjkyMTQzMzICXzEEBmNhbGxlcggFDSR0MDE0MjkyMTQzMzICXzIEBGRhdGUIBQ0kdDAxNDI5MjE0MzMyAl8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50AwkBASEBCQELdGlja2V0RXhpc3QDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQOdmFsaWRhdGVUaWNrZXQJARJ2YWxpZGF0ZVRpY2tldERhdGEHBQdldmVudElkBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQVwcmljZQUMbWF4QXZhaWxhYmxlBQZtYXhVc2UDCQECIT0CBQ52YWxpZGF0ZVRpY2tldAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAp0aWNrZXRTb2xkCQELdmFsdWVPckVsc2UCCQCfCAEJAQ1rZXlUaWNrZXRTb2xkAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAAAAwkAZgIFCnRpY2tldFNvbGQFDG1heEF2YWlsYWJsZQkAAgECPk1heCB0aWNrZXRzIGF2YWlsYWJsZSBjYW5ub3QgYmUgbG93ZXIgdGhhbiBhbW91bnQgYWxyZWFkeSBzb2xkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0RGVzYwMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5VGlja2V0UHJpY2UDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFDG1heEF2YWlsYWJsZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD2tleVRpY2tldE1heFVzZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBm1heFVzZQUDbmlsAWkBD3BhdXNlVGlja2V0U2FsZQMHZXZlbnRJZAh0aWNrZXRJZAZzdGF0dXMEDSR0MDE1NDYxMTU1MDEJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE1NDYxMTU1MDECXzEEBmNhbGxlcggFDSR0MDE1NDYxMTU1MDECXzIEBGRhdGUIBQ0kdDAxNTQ2MTE1NTAxAl8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50CQDMCAIJAQxCb29sZWFuRW50cnkCCQEPa2V5VGlja2V0T25TYWxlAwUGY2FsbGVyBQdldmVudElkBQJpZAUGc3RhdHVzBQNuaWwBaQEMZGVsZXRlVGlja2V0Agh0aWNrZXRJZAdldmVudElkBA0kdDAxNTg3NTE1OTE1CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxNTg3NTE1OTE1Al8xBAZjYWxsZXIIBQ0kdDAxNTg3NTE1OTE1Al8yBARkYXRlCAUNJHQwMTU4NzUxNTkxNQJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAMJAQEhAQkBC3RpY2tldEV4aXN0AwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQECmFtb3VudFNvbGQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQENa2V5VGlja2V0U29sZAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQECIT0CBQphbW91bnRTb2xkAAAJAAIBAiZDYW5ub3QgZGVsZXRlIHRpY2tldCB0aGF0IHNvbGQgYWxyZWFkeQQXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlUaWNrZXROYW1lAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5VGlja2V0RGF0ZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleVRpY2tldERlc2MDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ5rZXlUaWNrZXRQcmljZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleVRpY2tldE9uU2FsZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleVRpY2tldE1heFVzZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQJAGUCBRd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAABBQNuaWwBaQEJYnV5VGlja2V0Awh0aWNrZXRJZAdldmVudElkBmlzc3VlcgQNJHQwMTcwNzExNzEwOQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTcwNzExNzEwOQJfMQQGY2FsbGVyCAUNJHQwMTcwNzExNzEwOQJfMgQEZGF0ZQgFDSR0MDE3MDcxMTcxMDkCXzMECHRvdGFsTkZUCQELdmFsdWVPckVsc2UCCQEPZ2V0SW50ZWdlckJ5S2V5AQIUdG90YWxfdGlja2V0c19pc3N1ZWQAAAMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmlzc3VlcgkAAgECH0V2ZW50IElEIGFuZCBJc3N1ZXIgZG9uJ3QgbWF0Y2gDCQEBIQEJAQt0aWNrZXRFeGlzdAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJAAIBAhBUaWNrZXQgbm90IGZvdW5kBAlldmVudE5hbWUJAQ5nZXRTdHJpbmdCeUtleQEJAQxrZXlFdmVudE5hbWUCBQZpc3N1ZXIFB2V2ZW50SWQDCQAAAgUJZXZlbnROYW1lAgAJAAIBAhFBcnQgZG9lc24ndCBleGlzdAMJAQ9ldmVudElzQ2FuY2VsZWQCBQZpc3N1ZXIFB2V2ZW50SWQJAAIBAhhFdmVudCBoYXZlIGJlZW4gY2FuY2VsZWQECGlzT25TYWxlCQEPZ2V0Qm9vbGVhbkJ5S2V5AQkBD2tleVRpY2tldE9uU2FsZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQEBIQEFCGlzT25TYWxlCQACAQIUVGlja2V0cyBub3QgZm9yIHNhbGUECmFtb3VudFNvbGQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQENa2V5VGlja2V0U29sZAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQEC3RpY2tldFByaWNlCQEPZ2V0SW50ZWdlckJ5S2V5AQkBDmtleVRpY2tldFByaWNlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQMcHJpY2VBc3NldElkCQDYBAEFC3NpZ25Bc3NldElkBA0kdDAxNzk1NTE4MDI5CQEUdmFsaWRhdGVQcmljZUFzc2V0SWQDBQFpBQxwcmljZUFzc2V0SWQFC3RpY2tldFByaWNlBAZhbW91bnQIBQ0kdDAxNzk1NTE4MDI5Al8xBAdhc3NldElkCAUNJHQwMTc5NTUxODAyOQJfMgQKbWF4Q2FuU2VsbAkBD2dldEludGVnZXJCeUtleQEJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBA1hbW91bnRGb3JTaWduCQBrAwUGYW1vdW50BQdzaWduQ3V0AGQEEmFtb3VudEZvck9yZ2FuaXplcgkAZQIFBmFtb3VudAUNYW1vdW50Rm9yU2lnbgMJAAACBQphbW91bnRTb2xkBQptYXhDYW5TZWxsCQACAQIMQXJ0IHNvbGQgb3V0BA1uZXdBbW91bnRTb2xkCQBkAgUKYW1vdW50U29sZAABBAlpc3N1ZU1ldGEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgtPcmdhbml6ZXI6IAUGaXNzdWVyAgwsCiBFdmVudElEOiAFB2V2ZW50SWQCDSwKIFRpY2tldElEOiAFCHRpY2tldElkAg4sCiBFdmVudE5hbWU6IAUJZXZlbnROYW1lAgosCiBJc3N1ZTogCQCkAwEFDW5ld0Ftb3VudFNvbGQCAS8JAKQDAQUKbWF4Q2FuU2VsbAQIaXNzdWVORlQJAMIIBQkArAICAgNTVF8JAKQDAQkAZAIFCHRvdGFsTkZUAAEFCWlzc3VlTWV0YQABAAAHBAVpZE5GVAkAuAgBBQhpc3N1ZU5GVAQKc2VsbFN0YXR1cwMJAAACBQ1uZXdBbW91bnRTb2xkBQptYXhDYW5TZWxsBwYECnJlY2VpdmVORlQIBQFpBmNhbGxlcgQHc29sZEtleQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X3NvbGRfCQCkAwEFDW5ld0Ftb3VudFNvbGQCBF9vZl8JAKQDAQUKbWF4Q2FuU2VsbAIBXwUHZXZlbnRJZAIBXwUGaXNzdWVyAgFfBQh0aWNrZXRJZAQJc29sZFZhbHVlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBBQpyZWNlaXZlTkZUAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFBmFtb3VudAIBXwkA2AQBBQVpZE5GVAQIc29sZERhdGEJAQtTdHJpbmdFbnRyeQIFB3NvbGRLZXkFCXNvbGRWYWx1ZQQNZXZlbnRUb3RhbE5GVAkBD2dldEludGVnZXJCeUtleQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmlzc3VlcgUHZXZlbnRJZAQOdGlja2V0VG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBAZidXlSZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlUaWNrZXRTb2xkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUNbmV3QW1vdW50U29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICBG5mdF8JANgEAQUFaWRORlQFB3NvbGRLZXkJAMwIAgkBDEludGVnZXJFbnRyeQICEHRvdGFsX25mdF9pc3N1ZWQJAGQCBQh0b3RhbE5GVAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBQZpc3N1ZXIFB2V2ZW50SWQJAGQCBQ1ldmVudFRvdGFsTkZUAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJAGQCBQ50aWNrZXRUb3RhbE5GVAABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICAgNTVF8JAKQDAQkAZAIFCHRvdGFsTkZUAAECCF9hc3NldElkCQDYBAEFBWlkTkZUCQDMCAIJAQxCb29sZWFuRW50cnkCCQEPa2V5VGlja2V0T25TYWxlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUKc2VsbFN0YXR1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleVRpY2tldEFtb3VudFVzZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkAAAJAMwIAgUIaXNzdWVORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmlzc3VlcgUSYW1vdW50Rm9yT3JnYW5pemVyBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCnJlY2VpdmVORlQAAQUFaWRORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwJAMwIAgUIc29sZERhdGEFBmJ1eVJlcwFpAQl1c2VUaWNrZXQCB2V2ZW50SWQGaXNzdWVyBA0kdDAyMDMwODIwMzQ2CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyMDMwODIwMzQ2Al8xBAZjYWxsZXIIBQ0kdDAyMDMwODIwMzQ2Al8yBARkYXRlCAUNJHQwMjAzMDgyMDM0NgJfMwQNJHQwMjAzNTIyMDM4OAkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAyMDM1MjIwMzg4Al8xBAZhbW91bnQIBQ0kdDAyMDM1MjIwMzg4Al8yAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkBAh0aWNrZXRJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAwkBASEBCQELdGlja2V0RXhpc3QDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQKYW1vdW50VXNlZAkBD2dldEludGVnZXJCeUtleQEJARNrZXlUaWNrZXRBbW91bnRVc2VkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQMbWF4VXNpbmdUaW1lCQEPZ2V0SW50ZWdlckJ5S2V5AQkBD2tleVRpY2tldE1heFVzZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQAAAgUMbWF4VXNpbmdUaW1lBQphbW91bnRVc2VkCQACAQkArAICCQCsAgICDFRpY2tldCB1c2VkIAkApAMBBQphbW91bnRVc2VkAg4gdGltZXMgYWxyZWFkeQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleVRpY2tldEFtb3VudFVzZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQBkAgUKYW1vdW50VXNlZAABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAQgFB3BheW1lbnQHYXNzZXRJZAUDbmlsAIF0mOg=", "height": 2288920, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: bzyAH92iAHm7XFjzt4E2bHtNhUFLCUzSWgWBMkQxBNR Next: 2zdvycWQd3mC5j7QTTSbJ9m9RXmyj3upDjbg8DBsJ44k Diff:
OldNewDifferences
431431 then throw(checkUser)
432432 else if (!(isEventOwner(eventId, caller)))
433433 then throw("You are not the owner of this event")
434- else {
435- let amountSold = getIntegerByKey(keyTicketSold(caller, eventId, ticketId))
436- if ((amountSold != 0))
437- then throw("Cannot delete ticket that sold already")
438- else {
439- let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
434+ else if (!(ticketExist(caller, eventId, ticketId)))
435+ then throw("Ticket not found")
436+ else {
437+ let amountSold = getIntegerByKey(keyTicketSold(caller, eventId, ticketId))
438+ if ((amountSold != 0))
439+ then throw("Cannot delete ticket that sold already")
440+ else {
441+ let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
440442 [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)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
441- }
442- }
443+ }
444+ }
443445 }
444446
445447
446448
447449 @Callable(i)
448450 func buyTicket (ticketId,eventId,issuer) = {
449- let $t01707217110 = idCallerDate(i)
450- let id = $t01707217110._1
451- let caller = $t01707217110._2
452- let date = $t01707217110._3
451+ let $t01707117109 = idCallerDate(i)
452+ let id = $t01707117109._1
453+ let caller = $t01707117109._2
454+ let date = $t01707117109._3
453455 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
454456 if (!(isEventOwner(eventId, issuer)))
455457 then throw("Event ID and Issuer don't match")
469471 let amountSold = getIntegerByKey(keyTicketSold(issuer, eventId, ticketId))
470472 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
471473 let priceAssetId = toBase58String(signAssetId)
472- let $t01795618030 = validatePriceAssetId(i, priceAssetId, ticketPrice)
473- let amount = $t01795618030._1
474- let assetId = $t01795618030._2
474+ let $t01795518029 = validatePriceAssetId(i, priceAssetId, ticketPrice)
475+ let amount = $t01795518029._1
476+ let assetId = $t01795518029._2
475477 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
476478 let amountForSign = fraction(amount, signCut, 100)
477479 let amountForOrganizer = (amount - amountForSign)
507509
508510 @Callable(i)
509511 func useTicket (eventId,issuer) = {
510- let $t02030920347 = idCallerDate(i)
511- let id = $t02030920347._1
512- let caller = $t02030920347._2
513- let date = $t02030920347._3
514- let $t02035320389 = isPayment(i)
515- let payment = $t02035320389._1
516- let amount = $t02035320389._2
512+ let $t02030820346 = idCallerDate(i)
513+ let id = $t02030820346._1
514+ let caller = $t02030820346._2
515+ let date = $t02030820346._3
516+ let $t02035220388 = isPayment(i)
517+ let payment = $t02035220388._1
518+ let amount = $t02035220388._2
517519 if (!(isDefined(payment.assetId)))
518520 then throw("Wrong asset attached")
519521 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")
316316 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))]
317317 }
318318 }
319319 }
320320
321321
322322
323323 @Callable(i)
324324 func cancelEvent (eventId,reason) = {
325325 let $t01190411948 = idCallerDate(i)
326326 let id = $t01190411948._1
327327 let caller = $t01190411948._2
328328 let addedDate = $t01190411948._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) = {
341341 let $t01238312416 = idCallerDate(i)
342342 let id = $t01238312416._1
343343 let caller = $t01238312416._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) = {
355355 let $t01291712957 = idCallerDate(i)
356356 let id = $t01291712957._1
357357 let caller = $t01291712957._2
358358 let date = $t01291712957._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) = {
381381 let $t01429214332 = idCallerDate(i)
382382 let id = $t01429214332._1
383383 let caller = $t01429214332._2
384384 let date = $t01429214332._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) = {
409409 let $t01546115501 = idCallerDate(i)
410410 let id = $t01546115501._1
411411 let caller = $t01546115501._2
412412 let date = $t01546115501._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) = {
425425 let $t01587515915 = idCallerDate(i)
426426 let id = $t01587515915._1
427427 let caller = $t01587515915._2
428428 let date = $t01587515915._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")
434- else {
435- let amountSold = getIntegerByKey(keyTicketSold(caller, eventId, ticketId))
436- if ((amountSold != 0))
437- then throw("Cannot delete ticket that sold already")
438- else {
439- let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
434+ else if (!(ticketExist(caller, eventId, ticketId)))
435+ then throw("Ticket not found")
436+ else {
437+ let amountSold = getIntegerByKey(keyTicketSold(caller, eventId, ticketId))
438+ if ((amountSold != 0))
439+ then throw("Cannot delete ticket that sold already")
440+ else {
441+ let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
440442 [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)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
441- }
442- }
443+ }
444+ }
443445 }
444446
445447
446448
447449 @Callable(i)
448450 func buyTicket (ticketId,eventId,issuer) = {
449- let $t01707217110 = idCallerDate(i)
450- let id = $t01707217110._1
451- let caller = $t01707217110._2
452- let date = $t01707217110._3
451+ let $t01707117109 = idCallerDate(i)
452+ let id = $t01707117109._1
453+ let caller = $t01707117109._2
454+ let date = $t01707117109._3
453455 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
454456 if (!(isEventOwner(eventId, issuer)))
455457 then throw("Event ID and Issuer don't match")
456458 else if (!(ticketExist(issuer, eventId, ticketId)))
457459 then throw("Ticket not found")
458460 else {
459461 let eventName = getStringByKey(keyEventName(issuer, eventId))
460462 if ((eventName == ""))
461463 then throw("Art doesn't exist")
462464 else if (eventIsCanceled(issuer, eventId))
463465 then throw("Event have been canceled")
464466 else {
465467 let isOnSale = getBooleanByKey(keyTicketOnSale(issuer, eventId, ticketId))
466468 if (!(isOnSale))
467469 then throw("Tickets not for sale")
468470 else {
469471 let amountSold = getIntegerByKey(keyTicketSold(issuer, eventId, ticketId))
470472 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
471473 let priceAssetId = toBase58String(signAssetId)
472- let $t01795618030 = validatePriceAssetId(i, priceAssetId, ticketPrice)
473- let amount = $t01795618030._1
474- let assetId = $t01795618030._2
474+ let $t01795518029 = validatePriceAssetId(i, priceAssetId, ticketPrice)
475+ let amount = $t01795518029._1
476+ let assetId = $t01795518029._2
475477 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
476478 let amountForSign = fraction(amount, signCut, 100)
477479 let amountForOrganizer = (amount - amountForSign)
478480 if ((amountSold == maxCanSell))
479481 then throw("Art sold out")
480482 else {
481483 let newAmountSold = (amountSold + 1)
482484 let issueMeta = ((((((((((("Organizer: " + issuer) + ",
483485 EventID: ") + eventId) + ",
484486 TicketID: ") + ticketId) + ",
485487 EventName: ") + eventName) + ",
486488 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
487489 let issueNFT = Issue(("ST_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
488490 let idNFT = calculateAssetId(issueNFT)
489491 let sellStatus = if ((newAmountSold == maxCanSell))
490492 then false
491493 else true
492494 let receiveNFT = i.caller
493495 let soldKey = ((((((((("ticket_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + eventId) + "_") + issuer) + "_") + ticketId)
494496 let soldValue = ((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + toBase58String(idNFT))
495497 let soldData = StringEntry(soldKey, soldValue)
496498 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(issuer, eventId))
497499 let ticketTotalNFT = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
498500 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)]
499501 soldData :: buyRes
500502 }
501503 }
502504 }
503505 }
504506 }
505507
506508
507509
508510 @Callable(i)
509511 func useTicket (eventId,issuer) = {
510- let $t02030920347 = idCallerDate(i)
511- let id = $t02030920347._1
512- let caller = $t02030920347._2
513- let date = $t02030920347._3
514- let $t02035320389 = isPayment(i)
515- let payment = $t02035320389._1
516- let amount = $t02035320389._2
512+ let $t02030820346 = idCallerDate(i)
513+ let id = $t02030820346._1
514+ let caller = $t02030820346._2
515+ let date = $t02030820346._3
516+ let $t02035220388 = isPayment(i)
517+ let payment = $t02035220388._1
518+ let amount = $t02035220388._2
517519 if (!(isDefined(payment.assetId)))
518520 then throw("Wrong asset attached")
519521 else {
520522 let ticketId = toBase58String(value(payment.assetId))
521523 if (!(ticketExist(issuer, eventId, ticketId)))
522524 then throw("Ticket not found")
523525 else {
524526 let amountUsed = getIntegerByKey(keyTicketAmountUsed(issuer, eventId, ticketId))
525527 let maxUsingTime = getIntegerByKey(keyTicketMaxUse(issuer, eventId, ticketId))
526528 if ((maxUsingTime == amountUsed))
527529 then throw((("Ticket used " + toString(amountUsed)) + " times already"))
528530 else [IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId), (amountUsed + 1)), ScriptTransfer(Address(fromBase58String(caller)), 1, payment.assetId)]
529531 }
530532 }
531533 }
532534
533535

github/deemru/w8io/03bedc9 
61.16 ms