tx · At4nBG6X8rf7Xr8EmwahMGmGreMVsRugxrdgjPGCX44i

3NAkaTXEn5ksi5J9kQdwmS6RdUhH8vvLjPi:  -0.01900000 Waves

2022.11.05 04:44 [2303158] smart account 3NAkaTXEn5ksi5J9kQdwmS6RdUhH8vvLjPi > SELF 0.00000000 Waves

{ "type": 13, "id": "At4nBG6X8rf7Xr8EmwahMGmGreMVsRugxrdgjPGCX44i", "fee": 1900000, "feeAssetId": null, "timestamp": 1667612698479, "version": 2, "chainId": 84, "sender": "3NAkaTXEn5ksi5J9kQdwmS6RdUhH8vvLjPi", "senderPublicKey": "FE9WhnvegU85r27QvN7xPQbDk62VjxubEV8SvUXrMcT6", "proofs": [ "2Biw3foYFnkHFJzta5TP13BVnDGAxpcMfL1WeNYhnvpd7y7vUifDSpa9i5oivgUgvy5kgVWq18ZNV6C6G4nJWKv1" ], "script": "base64:BgJiCAISBAoCCAgSCAoGCAgICAgIEgkKBwgICAgICAgSAwoBCBIECgIICBIGCgQICAgIEgkKBwgICAEBAQESCgoICAgICAEBAQESBQoDCAgEEgQKAggIEgUKAwgICBIAEgMKAQg0AAdWRVJTSU9OAgUxLjAuMAEOZ2V0U3RyaW5nQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQNrZXkCAAAIdXNlckRhcHAJAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIPY29uZl91c2Vyc19kYXBwAAtmZWVSZWNlaXZlcgkBDmdldFN0cmluZ0J5S2V5AQIRY29uZl9mZWVfcmVjZWl2ZXIAC3NpZ25Bc3NldElkCQDZBAEJAQ5nZXRTdHJpbmdCeUtleQECGGNvbmZfYWNjZXB0ZWRfYXNzZXRfU0lHTgAFY2hyaXMJAQ5nZXRTdHJpbmdCeUtleQECDGNvbmZfYWRtaW5fMQEPZ2V0SW50ZWdlckJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABD2dldEJvb2xlYW5CeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFA2tleQcAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFCHVzZXJEYXBwAhRjb25mX2RhcHBfaXNfcnVubmluZwYADm1haW50ZW5hbmNlTVNHCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwAhRjb25mX21haW50ZW5hbmNlX21zZwIAAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAEHVzZXJVbnJlZ2lzdGVyZWQCDFVOUkVHSVNURVJFRAELdmFsaWRhdGVDSUQBA2NpZAMJAQhjb250YWlucwIFA2NpZAIBLwMDCQBmAgBMCQCxAgEFA2NpZAkAAAIJALECAQkAkQMCCQC1CQIFA2NpZAIBLwAAADsHCQBmAgAQCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAQcHAAdzaWduQ3V0AAIBDWtleVVzZXJTdGF0dXMBBmNhbGxlcgkArAICAgx1c2VyX3N0YXR1c18FBmNhbGxlcgEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEHZXZlbnRJZAkArAICAhBnZXRfZXZlbnRfb3duZXJfBQdldmVudElkARFrZXlFdmVudEFkZGVkRGF0ZQIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICEGV2ZW50X2FkZGVkRGF0ZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnREYXRlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfZGF0ZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnROYW1lAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfbmFtZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnREZXNjAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfZGVzY18FB2V2ZW50SWQCAV8FBmNhbGxlcgESa2V5RXZlbnREaXNwbGF5Q2lkAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIRZXZlbnRfZGlzcGxheUNpZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnRUYWdzAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfdGFnc18FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnRGbGFnAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfZmxhZ18FB2V2ZW50SWQCAV8FBmNhbGxlcgEMa2V5RXZlbnROb3RlAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgILZXZlbnRfbm90ZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgEPa2V5RXZlbnRDcmF3bGVyAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIRZXZlbnRfY3Jhd2xlckNpZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIXZXZlbnRfdG90YWxUaWNrZXRUeXBlc18FB2V2ZW50SWQCAV8FBmNhbGxlcgEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBmNhbGxlcgdldmVudElkCQCsAgIJAKwCAgkArAICAhJldmVudF90b3RhbElzc3VlZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgEQa2V5RXZlbnRDYW5jZWxlZAIGY2FsbGVyB2V2ZW50SWQJAKwCAgkArAICCQCsAgICD2V2ZW50X2NhbmNlbGVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyARZrZXlFdmVudENhbmNlbGVkUmVhc29uAgZjYWxsZXIHZXZlbnRJZAkArAICCQCsAgIJAKwCAgIVZXZlbnRfY2FuY2VsZWRSZWFzb25fBQdldmVudElkAgFfBQZjYWxsZXIBDWtleVRpY2tldE5hbWUDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X25hbWVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkAQ1rZXlUaWNrZXREZXNjAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHRpY2tldF9kZXNjXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEOa2V5VGlja2V0UHJpY2UDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINdGlja2V0X3ByaWNlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAENa2V5VGlja2V0RGF0ZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgx0aWNrZXRfZGF0ZV8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQBFWtleVRpY2tldE1heEF2YWlsYWJsZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhR0aWNrZXRfbWF4QXZhaWxhYmxlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEPa2V5VGlja2V0T25TYWxlAwZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDnRpY2tldF9vblNhbGVfBQdldmVudElkAgFfBQZjYWxsZXICAV8FCHRpY2tldElkARNrZXlUaWNrZXRBbW91bnRVc2VkBAZjYWxsZXIHZXZlbnRJZAh0aWNrZXRJZAVuZnRJZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhJ0aWNrZXRfYW1vdW50VXNlZF8FB2V2ZW50SWQCAV8FBmNhbGxlcgIBXwUIdGlja2V0SWQCAV8FBW5mdElkARRrZXlUaWNrZXRIaXN0b3J5VXNlZAUGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQFbmZ0SWQKdXNhZ2VJbmRleAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITdGlja2V0X2hpc3RvcnlVc2VkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAIBXwUFbmZ0SWQCAV8FCnVzYWdlSW5kZXgBD2tleVRpY2tldE1heFVzZQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg50aWNrZXRfbWF4VXNlXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBmNhbGxlcgdldmVudElkCHRpY2tldElkCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgITdGlja2V0X3RvdGFsSXNzdWVkXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEQa2V5VGlja2V0Um95YWx0eQMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhF0aWNrZXRfcm95YWx0aWVzXwUHZXZlbnRJZAIBXwUGY2FsbGVyAgFfBQh0aWNrZXRJZAEOdmFsaWRhdGVTdHJpbmcCA3N0cgNtYXgDCQAAAgkAsQIBBQNzdHIAAAkAAgECGEZpZWxkIGNhbm5vdCBiZSBpcyBlbXB0eQMJAGYCCQCxAgEFA3N0cgUDbWF4CQACAQkArAICBQNzdHICDCBpcyB0b28gbG9uZwYBC3ZhbGlkYXRlSW50AQNudW0JAGYCAAAFA251bQEWZ2V0RXZlbnRPd25lckJ5RXZlbnRJZAEHZXZlbnRJZAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQCAAEMdmFsaWRhdGVVc2VyAQZjYWxsZXIECnVzZXJTdGF0dXMJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAJAQ1rZXlVc2VyU3RhdHVzAQUGY2FsbGVyBRB1c2VyVW5yZWdpc3RlcmVkAwkAAAIFCnVzZXJTdGF0dXMFEHVzZXJVbnJlZ2lzdGVyZWQCLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUKdXNlclN0YXR1cwUNdXNlclN1c3BlbmRlZAIRQWNjb3VudCBzdXNwZW5kZWQCAAERdmFsaWRhdGVFdmVudERhdGEGBmNhbGxlcgpjaWREaXNwbGF5BG5hbWULZGVzY3JpcHRpb24EdGFncwRkYXRlBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAAACCQCxAgEFCmNpZERpc3BsYXkAAAkAAgECG0Rpc3BsYXkgQ0lEIGNhbm5vdCBiZSBlbXB0eQMJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUKY2lkRGlzcGxheQkAAgECEFByb2JsZW0gd2l0aCBDSUQDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBG5hbWUArAIJAAIBAhIzMDAgQ2hhci4gbWF4IG5hbWUDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFC2Rlc2NyaXB0aW9uALgXCQACAQIaMzAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24DCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBGRhdGUA6AcJAAIBAhMxMDAwIENoYXIuIG1heCBkYXRlAwkAZgIJAJADAQkAtQkCBQR0YWdzAgEsAAUJAAIBAgs1IHRhZ3MgbWF4LgIAARJ2YWxpZGF0ZVRpY2tldERhdGEHB2V2ZW50SWQGY2FsbGVyBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBm1heFVzZQQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFBG5hbWUAyAEJAAIBAhIxMDAgQ2hhci4gbWF4IG5hbWUDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFC2Rlc2NyaXB0aW9uAOgHCQACAQIaMTAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24DAwMJAQt2YWxpZGF0ZUludAEFBXByaWNlBgkBC3ZhbGlkYXRlSW50AQUGbWF4VXNlBgkBC3ZhbGlkYXRlSW50AQUMbWF4QXZhaWxhYmxlCQACAQIUUG9zaXRpdmUgYW1vdW50IG9ubHkDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFC2Rlc2NyaXB0aW9uAOgHCQACAQIaMTAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24CAAEMaWRDYWxsZXJEYXRlAQFpAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHCQCVCgMJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEJaXNQYXltZW50AQFpAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE05vIHBheW1lbnQgYXR0YWNoZWQEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CQEFdmFsdWUBCAUHcGF5bWVudAZhbW91bnQJAJQKAgUHcGF5bWVudAUGYW1vdW50ARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMBaQxwcmljZUFzc2V0SWQMYXJ0d29ya1ByaWNlBAskdDA2NzA4Njc0NAkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQskdDA2NzA4Njc0NAJfMQQGYW1vdW50CAULJHQwNjcwODY3NDQCXzIDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQACAQIUV3JvbmcgYXNzZXQgYXR0YWNoZWQEB2Fzc2V0SWQDAwkAZgIJALECAQUMcHJpY2VBc3NldElkAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQFDHByaWNlQXNzZXRJZAcIBQdwYXltZW50B2Fzc2V0SWQJAAIBAhRXcm9uZyBhc3NldCBhdHRhY2hlZAMJAQIhPQIFDGFydHdvcmtQcmljZQUGYW1vdW50CQACAQIaUGF5bWVudCBhbW91bnQgZG9uJ3QgbWF0Y2gJAJQKAgUGYW1vdW50BQdhc3NldElkAQxpc0V2ZW50T3duZXICB2V2ZW50SWQGY2FsbGVyBApldmVudE93bmVyCQEWZ2V0RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQDCQAAAgUKZXZlbnRPd25lcgIACQACAQIPRXZlbnQgbm90IGZvdW5kCQAAAgUKZXZlbnRPd25lcgUGY2FsbGVyAQt0aWNrZXRFeGlzdAMGY2FsbGVyB2V2ZW50SWQIdGlja2V0SWQEBnRpY2tldAkBDmdldFN0cmluZ0J5S2V5AQkBDWtleVRpY2tldE5hbWUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQECIT0CCQCxAgEFBnRpY2tldAAAAQ9ldmVudElzQ2FuY2VsZWQCBmlzc3VlcgdldmVudElkCQEPZ2V0Qm9vbGVhbkJ5S2V5AQkBEGtleUV2ZW50Q2FuY2VsZWQCBQZpc3N1ZXIFB2V2ZW50SWQNBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwFpAQhhZGRFdmVudAYEbmFtZQtkZXNjcmlwdGlvbgR0YWdzCmNpZERpc3BsYXkHY3Jhd2xlcgRkYXRlBAskdDA4MDczODEyMgkBDGlkQ2FsbGVyRGF0ZQEFAWkEB2V2ZW50SWQIBQskdDA4MDczODEyMgJfMQQGY2FsbGVyCAULJHQwODA3MzgxMjICXzIECWFkZGVkRGF0ZQgFCyR0MDgwNzM4MTIyAl8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgQNdmFsaWRhdGVFdmVudAkBEXZhbGlkYXRlRXZlbnREYXRhBgUGY2FsbGVyBQpjaWREaXNwbGF5BQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwUEZGF0ZQMJAQIhPQIFDXZhbGlkYXRlRXZlbnQCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEWtleUV2ZW50QWRkZWREYXRlAgUGY2FsbGVyBQdldmVudElkBQlhZGRlZERhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAUEZGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudERlc2MCBQZjYWxsZXIFB2V2ZW50SWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlFdmVudERpc3BsYXlDaWQCBQZjYWxsZXIFB2V2ZW50SWQFCmNpZERpc3BsYXkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAUEdGFncwkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RXZlbnRDcmF3bGVyAgUGY2FsbGVyBQdldmVudElkBQdjcmF3bGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEaa2V5RXZlbnRUb3RhbFRpY2tldHNJc3N1ZWQCBQZjYWxsZXIFB2V2ZW50SWQAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBEGtleUV2ZW50Q2FuY2VsZWQCBQZjYWxsZXIFB2V2ZW50SWQHCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlFdmVudE93bmVyQnlFdmVudElkAQUHZXZlbnRJZAUGY2FsbGVyBQNuaWwBaQEJZWRpdEV2ZW50BwdldmVudElkBG5hbWULZGVzY3JpcHRpb24EdGFncwpjaWREaXNwbGF5B2NyYXdsZXIEZGF0ZQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyBA12YWxpZGF0ZUV2ZW50CQERdmFsaWRhdGVFdmVudERhdGEGBQZjYWxsZXIFCmNpZERpc3BsYXkFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzBQRkYXRlAwkBAiE9AgUNdmFsaWRhdGVFdmVudAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAplbnRyeUV4aXN0CQEOZ2V0U3RyaW5nQnlLZXkBCQEMa2V5RXZlbnROYW1lAgUGY2FsbGVyBQdldmVudElkAwkAAAIFCmVudHJ5RXhpc3QCAAkAAgECD0VudHJ5IG5vdCBmb3VuZAQEZmxhZwkBDmdldFN0cmluZ0J5S2V5AQkBDGtleUV2ZW50RmxhZwIFBmNhbGxlcgUHZXZlbnRJZAMJAAACBQRmbGFnAgdJTExFR0FMCQACAQIbQ2Fubm90IHVwZGF0ZSBJTExFR0FMIEV2ZW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFdmVudE5hbWUCBQZjYWxsZXIFB2V2ZW50SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUV2ZW50RGF0ZQIFBmNhbGxlcgUHZXZlbnRJZAUEZGF0ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnREZXNjAgUGY2FsbGVyBQdldmVudElkBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnRUYWdzAgUGY2FsbGVyBQdldmVudElkBQR0YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlFdmVudENyYXdsZXICBQZjYWxsZXIFB2V2ZW50SWQFB2NyYXdsZXIFA25pbAFpAQtkZWxldGVFdmVudAEHZXZlbnRJZAQNJHQwMTAzNDIxMDM4NgkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTAzNDIxMDM4NgJfMQQGY2FsbGVyCAUNJHQwMTAzNDIxMDM4NgJfMgQJYWRkZWREYXRlCAUNJHQwMTAzNDIxMDM4NgJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAQNZXZlbnRUb3RhbE5GVAkBD2dldEludGVnZXJCeUtleQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmNhbGxlcgUHZXZlbnRJZAMJAQIhPQIFDWV2ZW50VG90YWxORlQAAAkAAgECLUNhbm5vdCBkZWxldGUgZXZlbnQgd2l0aCBhbHJlYWR5IHNvbGQgdGlja2V0cwQXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkAwkAZgIFF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50AAAJAAIBAhhEZWxldGUgYWxsIHRpY2tldHMgZmlyc3QJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEWtleUV2ZW50QWRkZWREYXRlAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFdmVudERhdGUCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50TmFtZQIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXZlbnREZXNjAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlFdmVudERpc3BsYXlDaWQCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDGtleUV2ZW50VGFncwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RXZlbnRDcmF3bGVyAgUGY2FsbGVyBQdldmVudElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RXZlbnRDYW5jZWxlZAIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5RXZlbnRPd25lckJ5RXZlbnRJZAEFB2V2ZW50SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAUDbmlsAWkBC2NhbmNlbEV2ZW50AgdldmVudElkBnJlYXNvbgQNJHQwMTE3MjcxMTc3MQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTE3MjcxMTc3MQJfMQQGY2FsbGVyCAUNJHQwMTE3MjcxMTc3MQJfMgQJYWRkZWREYXRlCAUNJHQwMTE3MjcxMTc3MQJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBEGtleUV2ZW50Q2FuY2VsZWQCBQZjYWxsZXIFB2V2ZW50SWQGCQDMCAIJAQtTdHJpbmdFbnRyeQIJARZrZXlFdmVudENhbmNlbGVkUmVhc29uAgUGY2FsbGVyBQdldmVudElkBQZyZWFzb24FA25pbAFpAQlmbGFnRXZlbnQEB2V2ZW50SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDEyMjA2MTIyMzkJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDEyMjA2MTIyMzkCXzEEBmNhbGxlcggFDSR0MDEyMjA2MTIyMzkCXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIACQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUEZmxhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnRGbGFnAgUEYWRkcgUHZXZlbnRJZAUEZmxhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXZlbnROb3RlAgUEYWRkcgUHZXZlbnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQEJYWRkVGlja2V0BwdldmVudElkBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBk1heFVzZQlSb3lhbHRpZXMEDSR0MDEyNzU2MTI3OTYJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDEyNzU2MTI3OTYCXzEEBmNhbGxlcggFDSR0MDEyNzU2MTI3OTYCXzIEBGRhdGUIBQ0kdDAxMjc1NjEyNzk2Al8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQ9ldmVudElzQ2FuY2VsZWQCBQZjYWxsZXIFB2V2ZW50SWQJAAIBAhhFdmVudCBoYXZlIGJlZW4gY2FuY2VsZWQDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAQOdmFsaWRhdGVUaWNrZXQJARJ2YWxpZGF0ZVRpY2tldERhdGEHBQdldmVudElkBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQVwcmljZQUMbWF4QXZhaWxhYmxlBQZNYXhVc2UDCQECIT0CBQ52YWxpZGF0ZVRpY2tldAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBBd0b3RhbFRpY2tldFR5cGVGb3JFdmVudAkBD2dldEludGVnZXJCeUtleQEJARhrZXlFdmVudFRvdGFsVGlja2V0VHlwZXMCBQZjYWxsZXIFB2V2ZW50SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldE5hbWUDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQRuYW1lCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5VGlja2V0RGF0ZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldERlc2MDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQtkZXNjcmlwdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVRpY2tldFByaWNlAwUGY2FsbGVyBQdldmVudElkBQJpZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQxtYXhBdmFpbGFibGUJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQ9rZXlUaWNrZXRPblNhbGUDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBD2tleVRpY2tldE1heFVzZQMFBmNhbGxlcgUHZXZlbnRJZAUCaWQFBk1heFVzZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGY2FsbGVyBQdldmVudElkBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQBkAgUXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEGtleVRpY2tldFJveWFsdHkDBQZjYWxsZXIFB2V2ZW50SWQFAmlkBQlSb3lhbHRpZXMFA25pbAFpAQplZGl0VGlja2V0CAh0aWNrZXRJZAdldmVudElkBG5hbWULZGVzY3JpcHRpb24FcHJpY2UMbWF4QXZhaWxhYmxlBm1heFVzZQlSb3lhbHRpZXMEDSR0MDE0Mzk0MTQ0MzQJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE0Mzk0MTQ0MzQCXzEEBmNhbGxlcggFDSR0MDE0Mzk0MTQ0MzQCXzIEBGRhdGUIBQ0kdDAxNDM5NDE0NDM0Al8zBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAQEhAQkBDGlzRXZlbnRPd25lcgIFB2V2ZW50SWQFBmNhbGxlcgkAAgECI1lvdSBhcmUgbm90IHRoZSBvd25lciBvZiB0aGlzIGV2ZW50AwkBASEBCQELdGlja2V0RXhpc3QDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQOdmFsaWRhdGVUaWNrZXQJARJ2YWxpZGF0ZVRpY2tldERhdGEHBQdldmVudElkBQZjYWxsZXIFBG5hbWUFC2Rlc2NyaXB0aW9uBQVwcmljZQUMbWF4QXZhaWxhYmxlBQZtYXhVc2UDCQECIT0CBQ52YWxpZGF0ZVRpY2tldAIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAp0aWNrZXRTb2xkCQELdmFsdWVPckVsc2UCCQCfCAEJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQAAAMJAGYCBQp0aWNrZXRTb2xkBQxtYXhBdmFpbGFibGUJAAIBAj5NYXggdGlja2V0cyBhdmFpbGFibGUgY2Fubm90IGJlIGxvd2VyIHRoYW4gYW1vdW50IGFscmVhZHkgc29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleVRpY2tldERlc2MDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQtkZXNjcmlwdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVRpY2tldFByaWNlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQxtYXhBdmFpbGFibGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ9rZXlUaWNrZXRNYXhVc2UDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkBQZtYXhVc2UJAMwIAgkBDEludGVnZXJFbnRyeQIJARBrZXlUaWNrZXRSb3lhbHR5AwUGY2FsbGVyBQdldmVudElkBQJpZAUJUm95YWx0aWVzBQNuaWwBaQEPcGF1c2VUaWNrZXRTYWxlAwdldmVudElkCHRpY2tldElkBnN0YXR1cwQNJHQwMTU2NDkxNTY4OQkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTU2NDkxNTY4OQJfMQQGY2FsbGVyCAUNJHQwMTU2NDkxNTY4OQJfMgQEZGF0ZQgFDSR0MDE1NjQ5MTU2ODkCXzMECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyAwkBASEBCQEMaXNFdmVudE93bmVyAgUHZXZlbnRJZAUGY2FsbGVyCQACAQIjWW91IGFyZSBub3QgdGhlIG93bmVyIG9mIHRoaXMgZXZlbnQDCQEBIQEJAQt0aWNrZXRFeGlzdAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAAIBAhBUaWNrZXQgbm90IGZvdW5kCQDMCAIJAQxCb29sZWFuRW50cnkCCQEPa2V5VGlja2V0T25TYWxlAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAUGc3RhdHVzBQNuaWwBaQEMZGVsZXRlVGlja2V0Agh0aWNrZXRJZAdldmVudElkBA0kdDAxNjE1MjE2MTkyCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAxNjE1MjE2MTkyAl8xBAZjYWxsZXIIBQ0kdDAxNjE1MjE2MTkyAl8yBARkYXRlCAUNJHQwMTYxNTIxNjE5MgJfMwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZjYWxsZXIJAAIBAiNZb3UgYXJlIG5vdCB0aGUgb3duZXIgb2YgdGhpcyBldmVudAMJAQEhAQkBC3RpY2tldEV4aXN0AwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQECmFtb3VudFNvbGQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkAwkBAiE9AgUKYW1vdW50U29sZAAACQACAQImQ2Fubm90IGRlbGV0ZSB0aWNrZXQgdGhhdCBzb2xkIGFscmVhZHkEF3RvdGFsVGlja2V0VHlwZUZvckV2ZW50CQEPZ2V0SW50ZWdlckJ5S2V5AQkBGGtleUV2ZW50VG90YWxUaWNrZXRUeXBlcwIFBmNhbGxlcgUHZXZlbnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5VGlja2V0TmFtZQMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleVRpY2tldERhdGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlUaWNrZXREZXNjAwUGY2FsbGVyBQdldmVudElkBQh0aWNrZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEOa2V5VGlja2V0UHJpY2UDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARVrZXlUaWNrZXRNYXhBdmFpbGFibGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlUaWNrZXRPblNhbGUDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlUaWNrZXRNYXhVc2UDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlUaWNrZXRUb3RhbElzc3VlZAMFBmNhbGxlcgUHZXZlbnRJZAUIdGlja2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleVRpY2tldFJveWFsdHkDBQZjYWxsZXIFB2V2ZW50SWQFCHRpY2tldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5RXZlbnRUb3RhbFRpY2tldFR5cGVzAgUGY2FsbGVyBQdldmVudElkCQBlAgUXdG90YWxUaWNrZXRUeXBlRm9yRXZlbnQAAQUDbmlsAWkBCWJ1eVRpY2tldAMIdGlja2V0SWQHZXZlbnRJZAZpc3N1ZXIEDSR0MDE3NDkzMTc1MzEJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDE3NDkzMTc1MzECXzEEBmNhbGxlcggFDSR0MDE3NDkzMTc1MzECXzIEBGRhdGUIBQ0kdDAxNzQ5MzE3NTMxAl8zBAh0b3RhbE5GVAkBC3ZhbHVlT3JFbHNlAgkBD2dldEludGVnZXJCeUtleQECFHRvdGFsX3RpY2tldHNfaXNzdWVkAAADCQEBIQEJAQxpc0V2ZW50T3duZXICBQdldmVudElkBQZpc3N1ZXIJAAIBAh9FdmVudCBJRCBhbmQgSXNzdWVyIGRvbid0IG1hdGNoAwkBASEBCQELdGlja2V0RXhpc3QDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQACAQIQVGlja2V0IG5vdCBmb3VuZAQJZXZlbnROYW1lCQEOZ2V0U3RyaW5nQnlLZXkBCQEMa2V5RXZlbnROYW1lAgUGaXNzdWVyBQdldmVudElkAwkAAAIFCWV2ZW50TmFtZQIACQACAQIRQXJ0IGRvZXNuJ3QgZXhpc3QDCQEPZXZlbnRJc0NhbmNlbGVkAgUGaXNzdWVyBQdldmVudElkCQACAQIYRXZlbnQgaGF2ZSBiZWVuIGNhbmNlbGVkBAhpc09uU2FsZQkBD2dldEJvb2xlYW5CeUtleQEJAQ9rZXlUaWNrZXRPblNhbGUDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkAwkBASEBBQhpc09uU2FsZQkAAgECFFRpY2tldHMgbm90IGZvciBzYWxlBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAQLdGlja2V0UHJpY2UJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEOa2V5VGlja2V0UHJpY2UDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBAxwcmljZUFzc2V0SWQJANgEAQULc2lnbkFzc2V0SWQEDSR0MDE4Mzg0MTg0NTgJARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMFAWkFDHByaWNlQXNzZXRJZAULdGlja2V0UHJpY2UEBmFtb3VudAgFDSR0MDE4Mzg0MTg0NTgCXzEEB2Fzc2V0SWQIBQ0kdDAxODM4NDE4NDU4Al8yBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBFWtleVRpY2tldE1heEF2YWlsYWJsZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQEDWFtb3VudEZvclNpZ24JAGsDBQZhbW91bnQFB3NpZ25DdXQAZAQSYW1vdW50Rm9yT3JnYW5pemVyCQBlAgUGYW1vdW50BQ1hbW91bnRGb3JTaWduAwkAAAIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAgxBcnQgc29sZCBvdXQEDW5ld0Ftb3VudFNvbGQJAGQCBQphbW91bnRTb2xkAAEECWlzc3VlTWV0YQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICC09yZ2FuaXplcjogBQZpc3N1ZXICDCwKIEV2ZW50SUQ6IAUHZXZlbnRJZAINLAogVGlja2V0SUQ6IAUIdGlja2V0SWQCDiwKIEV2ZW50TmFtZTogBQlldmVudE5hbWUCCiwKIElzc3VlOiAJAKQDAQUNbmV3QW1vdW50U29sZAIBLwkApAMBBQptYXhDYW5TZWxsBAhpc3N1ZU5GVAkAwggFCQCsAgICA1NUXwkApAMBCQBkAgUIdG90YWxORlQAAQUJaXNzdWVNZXRhAAEAAAcEBWlkTkZUCQC4CAEFCGlzc3VlTkZUBApzZWxsU3RhdHVzAwkAAAIFDW5ld0Ftb3VudFNvbGQFCm1heENhblNlbGwHBgQKcmVjZWl2ZU5GVAgFAWkGY2FsbGVyBAdzb2xkS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMdGlja2V0X3NvbGRfCQCkAwEFDW5ld0Ftb3VudFNvbGQCBF9vZl8JAKQDAQUKbWF4Q2FuU2VsbAIBXwUIdGlja2V0SWQCAV8FB2V2ZW50SWQCAV8FBmlzc3VlcgIBXwkA2AQBBQVpZE5GVAQJc29sZFZhbHVlCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBBQpyZWNlaXZlTkZUAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFBmFtb3VudAIBXwkA2AQBBQVpZE5GVAQIc29sZERhdGEJAQtTdHJpbmdFbnRyeQIFB3NvbGRLZXkFCXNvbGRWYWx1ZQQNZXZlbnRUb3RhbE5GVAkBD2dldEludGVnZXJCeUtleQEJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmlzc3VlcgUHZXZlbnRJZAQOdGlja2V0VG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEUa2V5VGlja2V0VG90YWxJc3N1ZWQDBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkBAZidXlSZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgRuZnRfCQDYBAEFBWlkTkZUBQdzb2xkS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhR0b3RhbF90aWNrZXRzX2lzc3VlZAkAZAIFCHRvdGFsTkZUAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJARprZXlFdmVudFRvdGFsVGlja2V0c0lzc3VlZAIFBmlzc3VlcgUHZXZlbnRJZAkAZAIFDWV2ZW50VG90YWxORlQAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFGtleVRpY2tldFRvdGFsSXNzdWVkAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUNbmV3QW1vdW50U29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgIDU1RfCQCkAwEJAGQCBQh0b3RhbE5GVAABAghfYXNzZXRJZAkArAICCQCsAgIFCHRpY2tldElkAgFfCQDYBAEFBWlkTkZUCQDMCAIJAQxCb29sZWFuRW50cnkCCQEPa2V5VGlja2V0T25TYWxlAwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAUKc2VsbFN0YXR1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleVRpY2tldEFtb3VudFVzZWQEBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQDYBAEFBWlkTkZUAAAJAMwIAgUIaXNzdWVORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmlzc3VlcgUSYW1vdW50Rm9yT3JnYW5pemVyBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCnJlY2VpdmVORlQAAQUFaWRORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwJAMwIAgUIc29sZERhdGEFBmJ1eVJlcwFpAQl1c2VUaWNrZXQABA0kdDAyMDYxODIwNjU2CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyMDYxODIwNjU2Al8xBAZjYWxsZXIIBQ0kdDAyMDYxODIwNjU2Al8yBARkYXRlCAUNJHQwMjA2MTgyMDY1NgJfMwQNJHQwMjA2NjIyMDY5OAkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAyMDY2MjIwNjk4Al8xBAZhbW91bnQIBQ0kdDAyMDY2MjIwNjk4Al8yAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAgECFFdyb25nIGFzc2V0IGF0dGFjaGVkBAlldmVudERhdGEJAQ5nZXRTdHJpbmdCeUtleQEJAKwCAgIEbmZ0XwkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkAwkAAAIJALECAQUJZXZlbnREYXRhAAAJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQMZXZlbnREYXRhQXJyCQC1CQIFCWV2ZW50RGF0YQIBXwQGaXNzdWVyCQCRAwIFDGV2ZW50RGF0YUFycgAGBAdldmVudElkCQCRAwIFDGV2ZW50RGF0YUFycgAFBAh0aWNrZXRJZAkAkQMCBQxldmVudERhdGFBcnIABwMJAQEhAQkBC3RpY2tldEV4aXN0AwUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAkAAgECEFRpY2tldCBub3QgZm91bmQECmFtb3VudFVzZWQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQETa2V5VGlja2V0QW1vdW50VXNlZAQFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAQMbWF4VXNpbmdUaW1lCQEPZ2V0SW50ZWdlckJ5S2V5AQkBD2tleVRpY2tldE1heFVzZQMFBmlzc3VlcgUHZXZlbnRJZAUIdGlja2V0SWQDCQAAAgUMbWF4VXNpbmdUaW1lBQphbW91bnRVc2VkCQACAQkArAICCQCsAgICDFRpY2tldCB1c2VkIAkApAMBBQphbW91bnRVc2VkAg4gdGltZXMgYWxyZWFkeQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleVRpY2tldEFtb3VudFVzZWQEBQZpc3N1ZXIFB2V2ZW50SWQFCHRpY2tldElkCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQJAGQCBQphbW91bnRVc2VkAAEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVRpY2tldEhpc3RvcnlVc2VkBQUGaXNzdWVyBQdldmVudElkBQh0aWNrZXRJZAkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkCQCkAwEJAGQCBQphbW91bnRVc2VkAAEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFAmlkAgFfBQZjYWxsZXICAV8JAKQDAQUEZGF0ZQIBXwkApAMBCQBkAgUKYW1vdW50VXNlZAABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAQgFB3BheW1lbnQHYXNzZXRJZAUDbmlsAWkBC2RlbGV0ZUVudHJ5AQVlbnRyeQQGY2FsbGVyCQClCAEIBQFpBmNhbGxlcgMJAAACBQZjYWxsZXIFBWNocmlzCQDMCAIJAQtEZWxldGVFbnRyeQEFBWVudHJ5BQNuaWwJAAIBAgJubwAXtu9s", "height": 2303158, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8Cphk7Sag4JAxsVZvoae7dF4LmFeDAwvg2dfhrVTKxRD Next: none Diff:
OldNewDifferences
114114 func keyTicketTotalIssued (caller,eventId,ticketId) = ((((("ticket_totalIssued_" + eventId) + "_") + caller) + "_") + ticketId)
115115
116116
117-func keyTicketRoyalty (caller,eventId,ticketId) = ((((("ticket_royalty_" + eventId) + "_") + caller) + "_") + ticketId)
117+func keyTicketRoyalty (caller,eventId,ticketId) = ((((("ticket_royalties_" + eventId) + "_") + caller) + "_") + ticketId)
118118
119119
120120 func validateString (str,max) = if ((size(str) == 0))
195195
196196
197197 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
198- let $t067066742 = isPayment(i)
199- let payment = $t067066742._1
200- let amount = $t067066742._2
198+ let $t067086744 = isPayment(i)
199+ let payment = $t067086744._1
200+ let amount = $t067086744._2
201201 if (!(isDefined(payment.assetId)))
202202 then throw("Wrong asset attached")
203203 else {
244244
245245 @Callable(i)
246246 func addEvent (name,description,tags,cidDisplay,crawler,date) = {
247- let $t080718120 = idCallerDate(i)
248- let eventId = $t080718120._1
249- let caller = $t080718120._2
250- let addedDate = $t080718120._3
247+ let $t080738122 = idCallerDate(i)
248+ let eventId = $t080738122._1
249+ let caller = $t080738122._2
250+ let addedDate = $t080738122._3
251251 let checkUser = validateUser(caller)
252252 if ((checkUser != ""))
253253 then throw(checkUser)
291291
292292 @Callable(i)
293293 func deleteEvent (eventId) = {
294- let $t01034010384 = idCallerDate(i)
295- let id = $t01034010384._1
296- let caller = $t01034010384._2
297- let addedDate = $t01034010384._3
294+ let $t01034210386 = idCallerDate(i)
295+ let id = $t01034210386._1
296+ let caller = $t01034210386._2
297+ let addedDate = $t01034210386._3
298298 let checkUser = validateUser(caller)
299299 if ((checkUser != ""))
300300 then throw(checkUser)
317317
318318 @Callable(i)
319319 func cancelEvent (eventId,reason) = {
320- let $t01172511769 = idCallerDate(i)
321- let id = $t01172511769._1
322- let caller = $t01172511769._2
323- let addedDate = $t01172511769._3
320+ let $t01172711771 = idCallerDate(i)
321+ let id = $t01172711771._1
322+ let caller = $t01172711771._2
323+ let addedDate = $t01172711771._3
324324 let checkUser = validateUser(caller)
325325 if ((checkUser != ""))
326326 then throw(checkUser)
333333
334334 @Callable(i)
335335 func flagEvent (eventId,addr,flag,note) = {
336- let $t01220412237 = idCallerDate(i)
337- let id = $t01220412237._1
338- let caller = $t01220412237._2
336+ let $t01220612239 = idCallerDate(i)
337+ let id = $t01220612239._1
338+ let caller = $t01220612239._2
339339 if (containsElement([chris, toString(this)], caller))
340340 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
341341 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
347347
348348 @Callable(i)
349349 func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties) = {
350- let $t01275412794 = idCallerDate(i)
351- let id = $t01275412794._1
352- let caller = $t01275412794._2
353- let date = $t01275412794._3
350+ let $t01275612796 = idCallerDate(i)
351+ let id = $t01275612796._1
352+ let caller = $t01275612796._2
353+ let date = $t01275612796._3
354354 let checkUser = validateUser(caller)
355355 if ((checkUser != ""))
356356 then throw(checkUser)
373373
374374 @Callable(i)
375375 func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties) = {
376- let $t01439214432 = idCallerDate(i)
377- let id = $t01439214432._1
378- let caller = $t01439214432._2
379- let date = $t01439214432._3
376+ let $t01439414434 = idCallerDate(i)
377+ let id = $t01439414434._1
378+ let caller = $t01439414434._2
379+ let date = $t01439414434._3
380380 let checkUser = validateUser(caller)
381381 if ((checkUser != ""))
382382 then throw(checkUser)
401401
402402 @Callable(i)
403403 func pauseTicketSale (eventId,ticketId,status) = {
404- let $t01564715687 = idCallerDate(i)
405- let id = $t01564715687._1
406- let caller = $t01564715687._2
407- let date = $t01564715687._3
404+ let $t01564915689 = idCallerDate(i)
405+ let id = $t01564915689._1
406+ let caller = $t01564915689._2
407+ let date = $t01564915689._3
408408 let checkUser = validateUser(caller)
409409 if ((checkUser != ""))
410410 then throw(checkUser)
419419
420420 @Callable(i)
421421 func deleteTicket (ticketId,eventId) = {
422- let $t01615016190 = idCallerDate(i)
423- let id = $t01615016190._1
424- let caller = $t01615016190._2
425- let date = $t01615016190._3
422+ let $t01615216192 = idCallerDate(i)
423+ let id = $t01615216192._1
424+ let caller = $t01615216192._2
425+ let date = $t01615216192._3
426426 let checkUser = validateUser(caller)
427427 if ((checkUser != ""))
428428 then throw(checkUser)
445445
446446 @Callable(i)
447447 func buyTicket (ticketId,eventId,issuer) = {
448- let $t01749117529 = idCallerDate(i)
449- let id = $t01749117529._1
450- let caller = $t01749117529._2
451- let date = $t01749117529._3
448+ let $t01749317531 = idCallerDate(i)
449+ let id = $t01749317531._1
450+ let caller = $t01749317531._2
451+ let date = $t01749317531._3
452452 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
453453 if (!(isEventOwner(eventId, issuer)))
454454 then throw("Event ID and Issuer don't match")
468468 let amountSold = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
469469 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
470470 let priceAssetId = toBase58String(signAssetId)
471- let $t01838218456 = validatePriceAssetId(i, priceAssetId, ticketPrice)
472- let amount = $t01838218456._1
473- let assetId = $t01838218456._2
471+ let $t01838418458 = validatePriceAssetId(i, priceAssetId, ticketPrice)
472+ let amount = $t01838418458._1
473+ let assetId = $t01838418458._2
474474 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
475475 let amountForSign = fraction(amount, signCut, 100)
476476 let amountForOrganizer = (amount - amountForSign)
506506
507507 @Callable(i)
508508 func useTicket () = {
509- let $t02061620654 = idCallerDate(i)
510- let id = $t02061620654._1
511- let caller = $t02061620654._2
512- let date = $t02061620654._3
513- let $t02066020696 = isPayment(i)
514- let payment = $t02066020696._1
515- let amount = $t02066020696._2
509+ let $t02061820656 = idCallerDate(i)
510+ let id = $t02061820656._1
511+ let caller = $t02061820656._2
512+ let date = $t02061820656._3
513+ let $t02066220698 = isPayment(i)
514+ let payment = $t02066220698._1
515+ let amount = $t02066220698._2
516516 if (!(isDefined(payment.assetId)))
517517 then throw("Wrong asset attached")
518518 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 keyEventTotalTicketTypes (caller,eventId) = ((("event_totalTicketTypes_" + eventId) + "_") + caller)
7676
7777
7878 func keyEventTotalTicketsIssued (caller,eventId) = ((("event_totalIssued_" + eventId) + "_") + caller)
7979
8080
8181 func keyEventCanceled (caller,eventId) = ((("event_canceled_" + eventId) + "_") + caller)
8282
8383
8484 func keyEventCanceledReason (caller,eventId) = ((("event_canceledReason_" + eventId) + "_") + caller)
8585
8686
8787 func keyTicketName (caller,eventId,ticketId) = ((((("ticket_name_" + eventId) + "_") + caller) + "_") + ticketId)
8888
8989
9090 func keyTicketDesc (caller,eventId,ticketId) = ((((("ticket_desc_" + eventId) + "_") + caller) + "_") + ticketId)
9191
9292
9393 func keyTicketPrice (caller,eventId,ticketId) = ((((("ticket_price_" + eventId) + "_") + caller) + "_") + ticketId)
9494
9595
9696 func keyTicketDate (caller,eventId,ticketId) = ((((("ticket_date_" + eventId) + "_") + caller) + "_") + ticketId)
9797
9898
9999 func keyTicketMaxAvailable (caller,eventId,ticketId) = ((((("ticket_maxAvailable_" + eventId) + "_") + caller) + "_") + ticketId)
100100
101101
102102 func keyTicketOnSale (caller,eventId,ticketId) = ((((("ticket_onSale_" + eventId) + "_") + caller) + "_") + ticketId)
103103
104104
105105 func keyTicketAmountUsed (caller,eventId,ticketId,nftId) = ((((((("ticket_amountUsed_" + eventId) + "_") + caller) + "_") + ticketId) + "_") + nftId)
106106
107107
108108 func keyTicketHistoryUsed (caller,eventId,ticketId,nftId,usageIndex) = ((((((((("ticket_historyUsed_" + eventId) + "_") + caller) + "_") + ticketId) + "_") + nftId) + "_") + usageIndex)
109109
110110
111111 func keyTicketMaxUse (caller,eventId,ticketId) = ((((("ticket_maxUse_" + eventId) + "_") + caller) + "_") + ticketId)
112112
113113
114114 func keyTicketTotalIssued (caller,eventId,ticketId) = ((((("ticket_totalIssued_" + eventId) + "_") + caller) + "_") + ticketId)
115115
116116
117-func keyTicketRoyalty (caller,eventId,ticketId) = ((((("ticket_royalty_" + eventId) + "_") + caller) + "_") + ticketId)
117+func keyTicketRoyalty (caller,eventId,ticketId) = ((((("ticket_royalties_" + 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 validateEventData (caller,cidDisplay,name,description,tags,date) = {
144144 let checkUser = validateUser(caller)
145145 if ((checkUser != ""))
146146 then throw(checkUser)
147147 else if ((size(cidDisplay) == 0))
148148 then throw("Display CID cannot be empty")
149149 else if (!(validateCID(cidDisplay)))
150150 then throw("Problem with CID")
151151 else if (!(validateString(name, 300)))
152152 then throw("300 Char. max name")
153153 else if (!(validateString(description, 3000)))
154154 then throw("3000 Char. max description")
155155 else if (!(validateString(date, 1000)))
156156 then throw("1000 Char. max date")
157157 else if ((size(split(tags, ",")) > 5))
158158 then throw("5 tags max.")
159159 else ""
160160 }
161161
162162
163163 func validateTicketData (eventId,caller,name,description,price,maxAvailable,maxUse) = {
164164 let checkUser = validateUser(caller)
165165 if ((checkUser != ""))
166166 then throw(checkUser)
167167 else if (!(validateString(name, 200)))
168168 then throw("100 Char. max name")
169169 else if (!(validateString(description, 1000)))
170170 then throw("1000 Char. max description")
171171 else if (if (if (validateInt(price))
172172 then true
173173 else validateInt(maxUse))
174174 then true
175175 else validateInt(maxAvailable))
176176 then throw("Positive amount only")
177177 else if (!(validateString(description, 1000)))
178178 then throw("1000 Char. max description")
179179 else ""
180180 }
181181
182182
183183 func idCallerDate (i) = if (!(dappRunning))
184184 then throw(maintenanceMSG)
185185 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
186186
187187
188188 func isPayment (i) = if ((size(i.payments) == 0))
189189 then throw("No payment attached")
190190 else {
191191 let payment = value(i.payments[0])
192192 let amount = value(payment.amount)
193193 $Tuple2(payment, amount)
194194 }
195195
196196
197197 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
198- let $t067066742 = isPayment(i)
199- let payment = $t067066742._1
200- let amount = $t067066742._2
198+ let $t067086744 = isPayment(i)
199+ let payment = $t067086744._1
200+ let amount = $t067086744._2
201201 if (!(isDefined(payment.assetId)))
202202 then throw("Wrong asset attached")
203203 else {
204204 let assetId = if (if ((size(priceAssetId) > 0))
205205 then (toBase58String(value(payment.assetId)) == priceAssetId)
206206 else false)
207207 then payment.assetId
208208 else throw("Wrong asset attached")
209209 if ((artworkPrice != amount))
210210 then throw("Payment amount don't match")
211211 else $Tuple2(amount, assetId)
212212 }
213213 }
214214
215215
216216 func isEventOwner (eventId,caller) = {
217217 let eventOwner = getEventOwnerByEventId(eventId)
218218 if ((eventOwner == ""))
219219 then throw("Event not found")
220220 else (eventOwner == caller)
221221 }
222222
223223
224224 func ticketExist (caller,eventId,ticketId) = {
225225 let ticket = getStringByKey(keyTicketName(caller, eventId, ticketId))
226226 (size(ticket) != 0)
227227 }
228228
229229
230230 func eventIsCanceled (issuer,eventId) = getBooleanByKey(keyEventCanceled(issuer, eventId))
231231
232232
233233 @Callable(invoke)
234234 func setConf (key,val) = {
235235 let caller = toString(invoke.caller)
236236 if (containsElement([chris, toString(this)], caller))
237237 then if (contains(key, "conf_"))
238238 then [StringEntry(key, val)]
239239 else throw("Entries starting with conf_ only")
240240 else throw("You are not allowed to change this")
241241 }
242242
243243
244244
245245 @Callable(i)
246246 func addEvent (name,description,tags,cidDisplay,crawler,date) = {
247- let $t080718120 = idCallerDate(i)
248- let eventId = $t080718120._1
249- let caller = $t080718120._2
250- let addedDate = $t080718120._3
247+ let $t080738122 = idCallerDate(i)
248+ let eventId = $t080738122._1
249+ let caller = $t080738122._2
250+ let addedDate = $t080738122._3
251251 let checkUser = validateUser(caller)
252252 if ((checkUser != ""))
253253 then throw(checkUser)
254254 else {
255255 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
256256 if ((validateEvent != ""))
257257 then throw("Something went wrong!")
258258 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), IntegerEntry(keyEventTotalTicketsIssued(caller, eventId), 0), BooleanEntry(keyEventCanceled(caller, eventId), false), StringEntry(keyEventOwnerByEventId(eventId), caller)]
259259 }
260260 }
261261
262262
263263
264264 @Callable(i)
265265 func editEvent (eventId,name,description,tags,cidDisplay,crawler,date) = if (!(dappRunning))
266266 then throw(maintenanceMSG)
267267 else {
268268 let caller = toBase58String(i.caller.bytes)
269269 let checkUser = validateUser(caller)
270270 if ((checkUser != ""))
271271 then throw(checkUser)
272272 else {
273273 let validateEvent = validateEventData(caller, cidDisplay, name, description, tags, date)
274274 if ((validateEvent != ""))
275275 then throw("Something went wrong!")
276276 else {
277277 let entryExist = getStringByKey(keyEventName(caller, eventId))
278278 if ((entryExist == ""))
279279 then throw("Entry not found")
280280 else {
281281 let flag = getStringByKey(keyEventFlag(caller, eventId))
282282 if ((flag == "ILLEGAL"))
283283 then throw("Cannot update ILLEGAL Event")
284284 else [StringEntry(keyEventName(caller, eventId), name), StringEntry(keyEventDate(caller, eventId), date), StringEntry(keyEventDesc(caller, eventId), description), StringEntry(keyEventTags(caller, eventId), tags), StringEntry(keyEventCrawler(caller, eventId), crawler)]
285285 }
286286 }
287287 }
288288 }
289289
290290
291291
292292 @Callable(i)
293293 func deleteEvent (eventId) = {
294- let $t01034010384 = idCallerDate(i)
295- let id = $t01034010384._1
296- let caller = $t01034010384._2
297- let addedDate = $t01034010384._3
294+ let $t01034210386 = idCallerDate(i)
295+ let id = $t01034210386._1
296+ let caller = $t01034210386._2
297+ let addedDate = $t01034210386._3
298298 let checkUser = validateUser(caller)
299299 if ((checkUser != ""))
300300 then throw(checkUser)
301301 else if (!(isEventOwner(eventId, caller)))
302302 then throw("You are not the owner of this event")
303303 else {
304304 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(caller, eventId))
305305 if ((eventTotalNFT != 0))
306306 then throw("Cannot delete event with already sold tickets")
307307 else {
308308 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
309309 if ((totalTicketTypeForEvent > 0))
310310 then throw("Delete all tickets first")
311311 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(keyEventTotalTicketsIssued(caller, eventId)), DeleteEntry(keyEventCanceled(caller, eventId)), DeleteEntry(keyEventOwnerByEventId(eventId)), DeleteEntry(keyEventTotalTicketTypes(caller, eventId))]
312312 }
313313 }
314314 }
315315
316316
317317
318318 @Callable(i)
319319 func cancelEvent (eventId,reason) = {
320- let $t01172511769 = idCallerDate(i)
321- let id = $t01172511769._1
322- let caller = $t01172511769._2
323- let addedDate = $t01172511769._3
320+ let $t01172711771 = idCallerDate(i)
321+ let id = $t01172711771._1
322+ let caller = $t01172711771._2
323+ let addedDate = $t01172711771._3
324324 let checkUser = validateUser(caller)
325325 if ((checkUser != ""))
326326 then throw(checkUser)
327327 else if (!(isEventOwner(eventId, caller)))
328328 then throw("You are not the owner of this event")
329329 else [BooleanEntry(keyEventCanceled(caller, eventId), true), StringEntry(keyEventCanceledReason(caller, eventId), reason)]
330330 }
331331
332332
333333
334334 @Callable(i)
335335 func flagEvent (eventId,addr,flag,note) = {
336- let $t01220412237 = idCallerDate(i)
337- let id = $t01220412237._1
338- let caller = $t01220412237._2
336+ let $t01220612239 = idCallerDate(i)
337+ let id = $t01220612239._1
338+ let caller = $t01220612239._2
339339 if (containsElement([chris, toString(this)], caller))
340340 then if (containsElement(["", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
341341 then [StringEntry(keyEventFlag(addr, eventId), flag), StringEntry(keyEventNote(addr, eventId), note)]
342342 else throw(("Unknow status " + flag))
343343 else throw("You are not allowed")
344344 }
345345
346346
347347
348348 @Callable(i)
349349 func addTicket (eventId,name,description,price,maxAvailable,MaxUse,Royalties) = {
350- let $t01275412794 = idCallerDate(i)
351- let id = $t01275412794._1
352- let caller = $t01275412794._2
353- let date = $t01275412794._3
350+ let $t01275612796 = idCallerDate(i)
351+ let id = $t01275612796._1
352+ let caller = $t01275612796._2
353+ let date = $t01275612796._3
354354 let checkUser = validateUser(caller)
355355 if ((checkUser != ""))
356356 then throw(checkUser)
357357 else if (eventIsCanceled(caller, eventId))
358358 then throw("Event have been canceled")
359359 else if (!(isEventOwner(eventId, caller)))
360360 then throw("You are not the owner of this event")
361361 else {
362362 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, MaxUse)
363363 if ((validateTicket != ""))
364364 then throw("Something went wrong!")
365365 else {
366366 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
367367 [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)), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties)]
368368 }
369369 }
370370 }
371371
372372
373373
374374 @Callable(i)
375375 func editTicket (ticketId,eventId,name,description,price,maxAvailable,maxUse,Royalties) = {
376- let $t01439214432 = idCallerDate(i)
377- let id = $t01439214432._1
378- let caller = $t01439214432._2
379- let date = $t01439214432._3
376+ let $t01439414434 = idCallerDate(i)
377+ let id = $t01439414434._1
378+ let caller = $t01439414434._2
379+ let date = $t01439414434._3
380380 let checkUser = validateUser(caller)
381381 if ((checkUser != ""))
382382 then throw(checkUser)
383383 else if (!(isEventOwner(eventId, caller)))
384384 then throw("You are not the owner of this event")
385385 else if (!(ticketExist(caller, eventId, ticketId)))
386386 then throw("Ticket not found")
387387 else {
388388 let validateTicket = validateTicketData(eventId, caller, name, description, price, maxAvailable, maxUse)
389389 if ((validateTicket != ""))
390390 then throw("Something went wrong!")
391391 else {
392392 let ticketSold = valueOrElse(getInteger(keyTicketTotalIssued(caller, eventId, ticketId)), 0)
393393 if ((ticketSold > maxAvailable))
394394 then throw("Max tickets available cannot be lower than amount already sold")
395395 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, ticketId), maxUse), IntegerEntry(keyTicketRoyalty(caller, eventId, id), Royalties)]
396396 }
397397 }
398398 }
399399
400400
401401
402402 @Callable(i)
403403 func pauseTicketSale (eventId,ticketId,status) = {
404- let $t01564715687 = idCallerDate(i)
405- let id = $t01564715687._1
406- let caller = $t01564715687._2
407- let date = $t01564715687._3
404+ let $t01564915689 = idCallerDate(i)
405+ let id = $t01564915689._1
406+ let caller = $t01564915689._2
407+ let date = $t01564915689._3
408408 let checkUser = validateUser(caller)
409409 if ((checkUser != ""))
410410 then throw(checkUser)
411411 else if (!(isEventOwner(eventId, caller)))
412412 then throw("You are not the owner of this event")
413413 else if (!(ticketExist(caller, eventId, ticketId)))
414414 then throw("Ticket not found")
415415 else [BooleanEntry(keyTicketOnSale(caller, eventId, ticketId), status)]
416416 }
417417
418418
419419
420420 @Callable(i)
421421 func deleteTicket (ticketId,eventId) = {
422- let $t01615016190 = idCallerDate(i)
423- let id = $t01615016190._1
424- let caller = $t01615016190._2
425- let date = $t01615016190._3
422+ let $t01615216192 = idCallerDate(i)
423+ let id = $t01615216192._1
424+ let caller = $t01615216192._2
425+ let date = $t01615216192._3
426426 let checkUser = validateUser(caller)
427427 if ((checkUser != ""))
428428 then throw(checkUser)
429429 else if (!(isEventOwner(eventId, caller)))
430430 then throw("You are not the owner of this event")
431431 else if (!(ticketExist(caller, eventId, ticketId)))
432432 then throw("Ticket not found")
433433 else {
434434 let amountSold = getIntegerByKey(keyTicketTotalIssued(caller, eventId, ticketId))
435435 if ((amountSold != 0))
436436 then throw("Cannot delete ticket that sold already")
437437 else {
438438 let totalTicketTypeForEvent = getIntegerByKey(keyEventTotalTicketTypes(caller, eventId))
439439 [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)), DeleteEntry(keyTicketRoyalty(caller, eventId, ticketId)), IntegerEntry(keyEventTotalTicketTypes(caller, eventId), (totalTicketTypeForEvent - 1))]
440440 }
441441 }
442442 }
443443
444444
445445
446446 @Callable(i)
447447 func buyTicket (ticketId,eventId,issuer) = {
448- let $t01749117529 = idCallerDate(i)
449- let id = $t01749117529._1
450- let caller = $t01749117529._2
451- let date = $t01749117529._3
448+ let $t01749317531 = idCallerDate(i)
449+ let id = $t01749317531._1
450+ let caller = $t01749317531._2
451+ let date = $t01749317531._3
452452 let totalNFT = valueOrElse(getIntegerByKey("total_tickets_issued"), 0)
453453 if (!(isEventOwner(eventId, issuer)))
454454 then throw("Event ID and Issuer don't match")
455455 else if (!(ticketExist(issuer, eventId, ticketId)))
456456 then throw("Ticket not found")
457457 else {
458458 let eventName = getStringByKey(keyEventName(issuer, eventId))
459459 if ((eventName == ""))
460460 then throw("Art doesn't exist")
461461 else if (eventIsCanceled(issuer, eventId))
462462 then throw("Event have been canceled")
463463 else {
464464 let isOnSale = getBooleanByKey(keyTicketOnSale(issuer, eventId, ticketId))
465465 if (!(isOnSale))
466466 then throw("Tickets not for sale")
467467 else {
468468 let amountSold = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
469469 let ticketPrice = getIntegerByKey(keyTicketPrice(issuer, eventId, ticketId))
470470 let priceAssetId = toBase58String(signAssetId)
471- let $t01838218456 = validatePriceAssetId(i, priceAssetId, ticketPrice)
472- let amount = $t01838218456._1
473- let assetId = $t01838218456._2
471+ let $t01838418458 = validatePriceAssetId(i, priceAssetId, ticketPrice)
472+ let amount = $t01838418458._1
473+ let assetId = $t01838418458._2
474474 let maxCanSell = getIntegerByKey(keyTicketMaxAvailable(issuer, eventId, ticketId))
475475 let amountForSign = fraction(amount, signCut, 100)
476476 let amountForOrganizer = (amount - amountForSign)
477477 if ((amountSold == maxCanSell))
478478 then throw("Art sold out")
479479 else {
480480 let newAmountSold = (amountSold + 1)
481481 let issueMeta = ((((((((((("Organizer: " + issuer) + ",
482482 EventID: ") + eventId) + ",
483483 TicketID: ") + ticketId) + ",
484484 EventName: ") + eventName) + ",
485485 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
486486 let issueNFT = Issue(("ST_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
487487 let idNFT = calculateAssetId(issueNFT)
488488 let sellStatus = if ((newAmountSold == maxCanSell))
489489 then false
490490 else true
491491 let receiveNFT = i.caller
492492 let soldKey = ((((((((((("ticket_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + ticketId) + "_") + eventId) + "_") + issuer) + "_") + toBase58String(idNFT))
493493 let soldValue = ((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + toBase58String(idNFT))
494494 let soldData = StringEntry(soldKey, soldValue)
495495 let eventTotalNFT = getIntegerByKey(keyEventTotalTicketsIssued(issuer, eventId))
496496 let ticketTotalNFT = getIntegerByKey(keyTicketTotalIssued(issuer, eventId, ticketId))
497497 let buyRes = [StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_tickets_issued", (totalNFT + 1)), IntegerEntry(keyEventTotalTicketsIssued(issuer, eventId), (eventTotalNFT + 1)), IntegerEntry(keyTicketTotalIssued(issuer, eventId, ticketId), newAmountSold), StringEntry((("ST_" + toString((totalNFT + 1))) + "_assetId"), ((ticketId + "_") + toBase58String(idNFT))), BooleanEntry(keyTicketOnSale(issuer, eventId, ticketId), sellStatus), IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(idNFT)), 0), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForOrganizer, assetId), ScriptTransfer(receiveNFT, 1, idNFT), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
498498 soldData :: buyRes
499499 }
500500 }
501501 }
502502 }
503503 }
504504
505505
506506
507507 @Callable(i)
508508 func useTicket () = {
509- let $t02061620654 = idCallerDate(i)
510- let id = $t02061620654._1
511- let caller = $t02061620654._2
512- let date = $t02061620654._3
513- let $t02066020696 = isPayment(i)
514- let payment = $t02066020696._1
515- let amount = $t02066020696._2
509+ let $t02061820656 = idCallerDate(i)
510+ let id = $t02061820656._1
511+ let caller = $t02061820656._2
512+ let date = $t02061820656._3
513+ let $t02066220698 = isPayment(i)
514+ let payment = $t02066220698._1
515+ let amount = $t02066220698._2
516516 if (!(isDefined(payment.assetId)))
517517 then throw("Wrong asset attached")
518518 else {
519519 let eventData = getStringByKey(("nft_" + toBase58String(value(payment.assetId))))
520520 if ((size(eventData) == 0))
521521 then throw("Something went wrong")
522522 else {
523523 let eventDataArr = split(eventData, "_")
524524 let issuer = eventDataArr[6]
525525 let eventId = eventDataArr[5]
526526 let ticketId = eventDataArr[7]
527527 if (!(ticketExist(issuer, eventId, ticketId)))
528528 then throw("Ticket not found")
529529 else {
530530 let amountUsed = getIntegerByKey(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId))))
531531 let maxUsingTime = getIntegerByKey(keyTicketMaxUse(issuer, eventId, ticketId))
532532 if ((maxUsingTime == amountUsed))
533533 then throw((("Ticket used " + toString(amountUsed)) + " times already"))
534534 else [IntegerEntry(keyTicketAmountUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId))), (amountUsed + 1)), StringEntry(keyTicketHistoryUsed(issuer, eventId, ticketId, toBase58String(value(payment.assetId)), toString((amountUsed + 1))), ((((((id + "_") + caller) + "_") + toString(date)) + "_") + toString((amountUsed + 1)))), ScriptTransfer(Address(fromBase58String(caller)), 1, payment.assetId)]
535535 }
536536 }
537537 }
538538 }
539539
540540
541541
542542 @Callable(i)
543543 func deleteEntry (entry) = {
544544 let caller = toString(i.caller)
545545 if ((caller == chris))
546546 then [DeleteEntry(entry)]
547547 else throw("no")
548548 }
549549
550550

github/deemru/w8io/873ac7e 
77.13 ms