tx · 5vpBMYm5BUbJWE2fdcsexSTmGPuA9PFUknX93aFZzwAw

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.02200000 Waves

2022.07.14 11:25 [2139149] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "5vpBMYm5BUbJWE2fdcsexSTmGPuA9PFUknX93aFZzwAw", "fee": 2200000, "feeAssetId": null, "timestamp": 1657787197732, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "3PzyPVjf2RDjSMdmSnicKFahfXNSQK7F2b1stLmM6Hy1fAMskoPFdMTmkz5NxnMtrexiu1d8y5kmGFdW2eyhhPZj" ], "script": "base64:BgJaCAISBAoCCAgSDgoMCAgICAgICAgICAgIEg0KCwgICAgICAgICAgIEgYKBAgICAgSBAoCCAgSBwoFCAEBCAESBAoCCAgSBAoCCAgSBgoECAgICBIGCgQICAgISgAHVkVSU0lPTgB0AQ5nZXRTdHJpbmdCeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFA2tleQIAAAh1bml0VGVzdAcACW9yYWNsZUZlZQkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAg9jb25mX29yYWNsZV9mZWUACHNpZ25EYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECEWNvbmZfc2lnbndlYl9kYXBwAAtmZWVSZWNlaXZlcgkBDmdldFN0cmluZ0J5S2V5AQIRY29uZl9mZWVfcmVjZWl2ZXIACHVzZXJEYXBwAwUIdW5pdFRlc3QJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIPY29uZl91c2Vyc19kYXBwAA13aGl0ZWxpc3REYXBwCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECE2NvbmZfd2hpdGVsaXN0X2RhcHAAC3NpZ25Bc3NldElkCQDZBAEJAQ5nZXRTdHJpbmdCeUtleQECGGNvbmZfYWNjZXB0ZWRfYXNzZXRfU0lHTgALdXNkbkFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0ROAAx3YXZlc0Fzc2V0SWQBAAAFY2hyaXMJAQ5nZXRTdHJpbmdCeUtleQECDGNvbmZfYWRtaW5fMQAEam9lcAkBDmdldFN0cmluZ0J5S2V5AQIMY29uZl9hZG1pbl8yARlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAQNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQlvcmFjbGVGZWUFA2tleQIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEPZ2V0SW50ZWdlckJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUDa2V5AAABDmNoZWNrV2hpdGVsaXN0AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNd2hpdGVsaXN0RGFwcAUDa2V5AAABD2dldEJvb2xlYW5CeUtleQEDa2V5CQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFA2tleQcAB3NpZ25DdXQABwALdXNkbldhdmVDdXQACgAOZGVmYXVsdExpY2VuY2UJAQ5nZXRTdHJpbmdCeUtleQECFGNvbmZfZGVmYXVsdF9saWNlbmNlABJkZWZhdWx0SGFzaExpY2VuY2UJAQ5nZXRTdHJpbmdCeUtleQECGWNvbmZfZGVmYXVsdF9saWNlbmNlX2hhc2gAC2RhcHBSdW5uaW5nCQELdmFsdWVPckVsc2UCCQCbCAIFCHVzZXJEYXBwAhRjb25mX2RhcHBfaXNfcnVubmluZwYADm1haW50ZW5hbmNlTVNHCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwAhRjb25mX21haW50ZW5hbmNlX21zZwIAAA11c2VyU3VzcGVuZGVkAglTVVNQRU5ERUQAC3VzZXJSZW1vdmVkAgdSRU1PVkVEABB1c2VyVW5yZWdpc3RlcmVkAgxVTlJFR0lTVEVSRUQAC3VzZXJBbGxvd2VkAgdBTExPV0VEABljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQEJAKwCAgISY2VydGlmaWNhdGlvbl9mZWVfCQDYBAEFC3NpZ25Bc3NldElkARRjaGVja1NpZ25DZXJ0aWZpY2F0ZQMGc2lnbklEBU93bmVyCnNoYTI1Nkhhc2gEByRtYXRjaDAJAJ0IAgUIc2lnbkRhcHAJAKwCAgkArAICCQCsAgICCGRhdGFfZmNfBQZzaWduSUQCAV8FBU93bmVyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBYQUHJG1hdGNoMAMJAQhjb250YWlucwIFAWEFCnNoYTI1Nkhhc2gGBwcBC3ZhbGlkYXRlQ0lEAQNjaWQDCQEIY29udGFpbnMCBQNjaWQCAS8DAwkAZgIATAkAsQIBBQNjaWQJAAACCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAAA7BwkAZgIAEAkAsQIBCQCRAwIJALUJAgUDY2lkAgEvAAEHBwEMdmFsaWRhdGVIYXNoAQRoYXNoCQAAAgkAsQIBBQRoYXNoAEABDWtleVVzZXJTdGF0dXMBBmNhbGxlcgkArAICAgx1c2VyX3N0YXR1c18FBmNhbGxlcgEHa2V5RGF0ZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZGF0ZV8FBWFydElkAgFfBQZjYWxsZXIBB2tleU5hbWUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X25hbWVfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlEZXNjAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9kZXNjXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5RGlzcGxheUNpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfZGlzcGxheV9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQ1rZXlFeHBvcnRIYXNoAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9leHBvcnRfaGFzaF8FBWFydElkAgFfBQZjYWxsZXIBDGtleUV4cG9ydENpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FBWFydElkAgFfBQZjYWxsZXIBCmtleU1heE1pbnQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQVhcnRJZAIBXwUGY2FsbGVyAQlrZXlTaWduSUQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X3NpZ25pZF8FBWFydElkAgFfBQZjYWxsZXIBCWtleUlzc3VlZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgthcnRfaXNzdWVkXwUFYXJ0SWQCAV8FBmNhbGxlcgEJa2V5T25TYWxlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQVhcnRJZAIBXwUGY2FsbGVyAQ5rZXlMaWNlbmNlSGFzaAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhFhcnRfbGljZW5jZV9oYXNoXwUFYXJ0SWQCAV8FBmNhbGxlcgENa2V5TGljZW5jZUNpZAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlUYWdzAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF90YWdzXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5VHlwZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfdHlwZV8FBWFydElkAgFfBQZjYWxsZXIBB2tleU5vdGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQVhcnRJZAIBXwUGY2FsbGVyAQprZXlDcmF3bGVyAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9jcmF3bGVyX2NpZF8FBWFydElkAgFfBQZjYWxsZXIBCGtleVByaWNlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCmFydF9wcmljZV8FBWFydElkAgFfBQZjYWxsZXIBCmtleUVuZFNhbGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIMYXJ0X2VuZHNhbGVfBQVhcnRJZAIBXwUGY2FsbGVyARJrZXlBc3NldElkQWNjZXB0ZWQCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgISYXJ0X2Fzc2V0QWNjZXB0ZWRfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlGbGFnAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUFYXJ0SWQCAV8FBmNhbGxlcgESa2V5QXJ0aXN0QWdlbnRBZGRyAQphcnRpc3RBZGRyCQCsAgICDWFydGlzdF9hZ2VudF8FCmFydGlzdEFkZHIBD2tleVByaW1hcnlTaGFyZQEKYXJ0aXN0QWRkcgkArAICAhVhcnRpc3RfYWdlbnRfcHJpbWFyeV8FCmFydGlzdEFkZHIBEWtleUhhc2hCeVR4aWRBZGRyAgZjYWxsZXIEdHhpZAkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUEdHhpZAIBXwUGY2FsbGVyAQ5rZXlPd25lckJ5SGFzaAEKc2hhMjU2SGFzaAkArAICAhJnZXRfb3duZXJfYnlfaGFzaF8FCnNoYTI1Nkhhc2gBDWtleWlkQnlTaWduaWQCBmNhbGxlcgZzaWduSWQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUGc2lnbklkAgFfBQZjYWxsZXIBEmtleVR4aWRCeUhhc2hPd25lcgIKc2hhMjU2SGFzaAZjYWxsZXIJAKwCAgIXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JANgEAQkA1BYBCQCbAwEJAKwCAgUKc2hhMjU2SGFzaAUGY2FsbGVyAQ52YWxpZGF0ZUFsbENJRAMKY2lkRGlzcGxheQljaWRFeHBvcnQKY2lkTGljZW5jZQMJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUKY2lkRGlzcGxheQkAAgECEVdyb25nIERpc3BsYXkgQ0lEAwkBASEBCQELdmFsaWRhdGVDSUQBBQljaWRFeHBvcnQJAAIBAhBXcm9uZyBFeHBvcnQgQ0lEAwMJAQIhPQIFCmNpZExpY2VuY2UCAAkBASEBCQELdmFsaWRhdGVDSUQBBQpjaWRMaWNlbmNlBwkAAgECEVdyb25nIExpY2VuY2UgQ0lEBgEPdmFsaWRhdGVBbGxIYXNoAgxzaGEyNTZFeHBvcnQNc2hhMjU2TGljZW5jZQMJAQEhAQkBDHZhbGlkYXRlSGFzaAEFDHNoYTI1NkV4cG9ydAkAAgECGEV4cG9ydCBIYXNoIDY0IGNoYXIuIG1heAMJAQEhAQkBDHZhbGlkYXRlSGFzaAEFDXNoYTI1NkxpY2VuY2UJAAIBAhlMaWNlbmNlIEhhc2ggNjQgY2hhci4gbWF4BgEOdmFsaWRhdGVTdHJpbmcCA3N0cgNtYXgDCQAAAgkAsQIBBQNzdHIAAAkAAgECGEZpZWxkIGNhbm5vdCBiZSBpcyBlbXB0eQMJAGYCCQCxAgEFA3N0cgUDbWF4CQACAQkArAICBQNzdHICDCBpcyB0b28gbG9uZwYBDHZhbGlkYXRlVXNlcgEGY2FsbGVyBAp1c2VyU3RhdHVzCQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwCQENa2V5VXNlclN0YXR1cwEFBmNhbGxlcgUQdXNlclVucmVnaXN0ZXJlZAMDCQAAAgUKdXNlclN0YXR1cwUQdXNlclVucmVnaXN0ZXJlZAYJAAACBQp1c2VyU3RhdHVzBQt1c2VyQWxsb3dlZAIuUmVnaXN0ZXIgdGhpcyBhY2NvdW50IGZpcnN0IHdpdGggIkFjY291bnQiIHRhYgMJAAACBQp1c2VyU3RhdHVzBQ11c2VyU3VzcGVuZGVkAhFBY2NvdW50IHN1c3BlbmRlZAMJAAACBQp1c2VyU3RhdHVzBQt1c2VyUmVtb3ZlZAIPQWNjb3VudCByZW1vdmVkAgABCnNldExJY2VuY2UCCmNpZExpY2VuY2UNc2hhMjU2TGljZW5jZQQDY2lkAwkAAAIJALECAQUKY2lkTGljZW5jZQAABQ5kZWZhdWx0TGljZW5jZQUKY2lkTGljZW5jZQQEaGFzaAMJAAACCQCxAgEFDXNoYTI1NkxpY2VuY2UAAAUSZGVmYXVsdEhhc2hMaWNlbmNlBQ1zaGEyNTZMaWNlbmNlCQCUCgIFA2NpZAUEaGFzaAETdmFsaWRhdGVBcnR3b3JrRGF0YQkGY2FsbGVyCmNpZERpc3BsYXkJY2lkRXhwb3J0CmxpY2VuY2VDSUQMc2hhMjU2RXhwb3J0C2xpY2VuY2VIYXNoBG5hbWULZGVzY3JpcHRpb24EdGFncwQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIDCQAAAgkAsQIBBQpjaWREaXNwbGF5AAAJAAIBAhtEaXNwbGF5IENJRCBjYW5ub3QgYmUgZW1wdHkDCQEBIQEJAQ52YWxpZGF0ZUFsbENJRAMFCmNpZERpc3BsYXkFCWNpZEV4cG9ydAUKbGljZW5jZUNJRAkAAgECEFByb2JsZW0gd2l0aCBDSUQDCQEBIQEJAQ92YWxpZGF0ZUFsbEhhc2gCBQxzaGEyNTZFeHBvcnQFC2xpY2VuY2VIYXNoCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBDnZhbGlkYXRlU3RyaW5nAgUEbmFtZQBkCQACAQISMTAwIENoYXIuIG1heCBuYW1lAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQtkZXNjcmlwdGlvbgDoBwkAAgECGjEwMDAgQ2hhci4gbWF4IGRlc2NyaXB0aW9uAwkAZgIJAJADAQkAtQkCBQR0YWdzAgEsAAUJAAIBAgs1IHRhZ3MgbWF4LgIAAQlpc1BheW1lbnQBAWkDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQHcGF5bWVudAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAZhbW91bnQJAQV2YWx1ZQEIBQdwYXltZW50BmFtb3VudAkAlAoCBQdwYXltZW50BQZhbW91bnQBD3ZhbGlkYXRlUGF5bWVudAEBaQQLJHQwODQzMzg0NjkJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAULJHQwODQzMzg0NjkCXzEEBmFtb3VudAgFCyR0MDg0MzM4NDY5Al8yBAdhc3NldElkAwMJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkCQAAAggFB3BheW1lbnQHYXNzZXRJZAULc2lnbkFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIrT25seSBTSUdOIHRva2VuIGFjY2VwdGVkIGFzIHRyYW5zYWN0aW9uIGZlZQMJAQIhPQIFBmFtb3VudAUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkAAgEJAKwCAgIZUGF5bWVudCBhbW91bnQgc2hvdWxkIGJlIAkApAMBBRljdXJyZW50Q2VydGlmaWNhdGlvblByaWNlCQCUCgIFBmFtb3VudAUHYXNzZXRJZAELaXNBcnRNaW50ZWQCCWFkZHJUb1VzZQVhcnRJZAQHJG1hdGNoMAkAmggCBQR0aGlzCQEJa2V5SXNzdWVkAgUJYWRkclRvVXNlBQVhcnRJZAMJAAECBQckbWF0Y2gwAgNJbnQEAWIFByRtYXRjaDADCQECIT0CBQFiAAAGBwcBFHZhbGlkYXRlUHJpY2VBc3NldElkAwFpDHByaWNlQXNzZXRJZAxhcnR3b3JrUHJpY2UECyR0MDkwNjI5MDk4CQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFCyR0MDkwNjI5MDk4Al8xBAZhbW91bnQIBQskdDA5MDYyOTA5OAJfMgQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQFBHVuaXQDAwkAZgIJALECAQUMcHJpY2VBc3NldElkAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQFDHByaWNlQXNzZXRJZAcIBQdwYXltZW50B2Fzc2V0SWQJAAIBAg5Xcm9uZyBhc3NldCBpZAMDCQAAAgUHYXNzZXRJZAUEdW5pdAkBAiE9AgUMcHJpY2VBc3NldElkAgAHCQACAQIOV3JvbmcgYXNzZXQgaWQDCQECIT0CBQxhcnR3b3JrUHJpY2UFBmFtb3VudAkAAgECE1BheW1lbnQgZG9uJ3QgbWF0Y2gJAJQKAgUGYW1vdW50BQdhc3NldElkARBhY2NlcHRlZEFzc2V0SWRzAQdhc3NldElkAwMDAwkBAiE9AgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAkBAiE9AgUHYXNzZXRJZAkA2AQBBQx3YXZlc0Fzc2V0SWQHCQECIT0CBQdhc3NldElkAgVXQVZFUwcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkbkFzc2V0SWQHCQACAQIhT25seSBTSUdOLCBVU0ROIG9yIFdBVkVTIGFjY2VwdGVkBgEPdmFsaWRhdGVNaW5TZWxsAgdhc3NldElkBXByaWNlBAxtaW5TZWxsV2F2ZXMDBQh1bml0VGVzdAAKCQEZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZQECDndhdmVzX21pbl9zZWxsBAttaW5TZWxsVXNkbgDAhD0EC21pblNlbGxTaWduAwUIdW5pdFRlc3QAAQkAaAIFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAgMDAwMDCQAAAgUHYXNzZXRJZAkA2AQBBQt1c2RuQXNzZXRJZAkAZgIFC21pblNlbGxVc2RuBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDCQAAAgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAkAZgIFC21pblNlbGxTaWduBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDAwkAAAIFB2Fzc2V0SWQJANgEAQUMd2F2ZXNBc3NldElkBgkAAAIFB2Fzc2V0SWQCBVdBVkVTCQBmAgUMbWluU2VsbFdhdmVzBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHCQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBgENZ2V0QmlkQXNzZXRJZAEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARZnZXRQcmljZUFzc2V0SWRGcm9tQmlkAQpiaWREYXRhS2V5BAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOAwkAAAIFB2JpZERhdGECAAkAAgECDUJpZCBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQJYmlkQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBApiaWRBc3NldElkCQENZ2V0QmlkQXNzZXRJZAEJAJEDAgUKYmlkRGF0YUFycgAAAwkAZwIAAAUJYmlkQW1vdW50CQACAQIMV3JvbmcgYW1vdW50CQCUCgIFCWJpZEFtb3VudAUKYmlkQXNzZXRJZAEMaWRDYWxsZXJEYXRlAQFpAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHCQCVCgMJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAEHYnV5TWludAUBaQVhcnRJZAZpc3N1ZXIFYmlkSWQIYmlkT3duZXIEDSR0MDExMzIzMTEzODAJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDExMzIzMTEzODACXzEEBmNhbGxlcggFDSR0MDExMzIzMTEzODACXzIEBGRhdGUIBQ0kdDAxMTMyMzExMzgwAl8zBAVpc0JpZAMDAwkAAAIJANgEAQgIBQFpBmNhbGxlcgVieXRlcwUGaXNzdWVyCQECIT0CBQhiaWRPd25lcgIABwkBAiE9AgUFYmlkSWQCAAcGBwQIYmxvY2tFbmQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEKa2V5RW5kU2FsZQIFBmNhbGxlcgUFYXJ0SWQDAwMJAQIhPQIFCGJsb2NrRW5kAAAJAGcCBQZoZWlnaHQFCGJsb2NrRW5kBwkBASEBBQVpc0JpZAcJAAIBAgtTYWxlIGVuZGVkLgQOY2FsbGVySXNJc3N1ZXIJAAACCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMFBmlzc3VlcgQIdG90YWxORlQJAQ9nZXRJbnRlZ2VyQnlLZXkBAhB0b3RhbF9uZnRfaXNzdWVkBAZzaWduSUQJAQ5nZXRTdHJpbmdCeUtleQEJAQlrZXlTaWduSUQCBQZpc3N1ZXIFBWFydElkBAthcnR3b3JrTmFtZQkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQZpc3N1ZXIFBWFydElkAwkAAAIFC2FydHdvcmtOYW1lAgAJAAIBAhFBcnQgZG9lc24ndCBleGlzdAQIaXNPblNhbGUJAQ9nZXRCb29sZWFuQnlLZXkBCQEJa2V5T25TYWxlAgUGaXNzdWVyBQVhcnRJZAQKYW1vdW50U29sZAkBD2dldEludGVnZXJCeUtleQEJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBAxhcnR3b3JrUHJpY2UDBQ5jYWxsZXJJc0lzc3VlcgkAaAIFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UAAgkBD2dldEludGVnZXJCeUtleQEJAQhrZXlQcmljZQIFBmlzc3VlcgUFYXJ0SWQEDHByaWNlQXNzZXRJZAMFDmNhbGxlcklzSXNzdWVyCQDYBAEFC3NpZ25Bc3NldElkCQEOZ2V0U3RyaW5nQnlLZXkBCQESa2V5QXNzZXRJZEFjY2VwdGVkAgUGaXNzdWVyBQVhcnRJZAQKbWF4Q2FuU2VsbAkBD2dldEludGVnZXJCeUtleQEJAQprZXlNYXhNaW50AgUGaXNzdWVyBQVhcnRJZAMDAwkBASEBBQVpc0JpZAkBASEBBQ5jYWxsZXJJc0lzc3VlcgcDAwkAZwIAAAUMYXJ0d29ya1ByaWNlBgkBASEBBQhpc09uU2FsZQYJAGcCAAAFCm1heENhblNlbGwHCQACAQIQQXJ0IG5vdCBmb3Igc2FsZQMDAwkBASEBBQVpc0JpZAUOY2FsbGVySXNJc3N1ZXIHCQBnAgAABQptYXhDYW5TZWxsBwkAAgECFE1heCBpc3N1YWJsZSBub3Qgc2V0BAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZpc3N1ZXIDAwUFaXNCaWQJAQIhPQIFCWNoZWNrVXNlcgIABwkAAgEFCWNoZWNrVXNlcgQKYmlkRGF0YUtleQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQVhcnRJZAIBXwUGaXNzdWVyAgFfBQhiaWRPd25lcgIBXwUFYmlkSWQEDSR0MDEzMTMxMTMyOTgDBQVpc0JpZAkBFmdldFByaWNlQXNzZXRJZEZyb21CaWQBBQpiaWREYXRhS2V5CQEUdmFsaWRhdGVQcmljZUFzc2V0SWQDBQFpBQxwcmljZUFzc2V0SWQFDGFydHdvcmtQcmljZQQGYW1vdW50CAUNJHQwMTMxMzExMzI5OAJfMQQHYXNzZXRJZAgFDSR0MDEzMTMxMTMyOTgCXzIEBWFnZW50CQELdmFsdWVPckVsc2UCCQCdCAIFCHVzZXJEYXBwCQESa2V5QXJ0aXN0QWdlbnRBZGRyAQUGaXNzdWVyBQtmZWVSZWNlaXZlcgQKYWdlbnRTaGFyZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQh1c2VyRGFwcAkBD2tleVByaW1hcnlTaGFyZQEFBmlzc3VlcgAABA1pc1doaXRlbGlzdGVkCQEOY2hlY2tXaGl0ZWxpc3QBBQZpc3N1ZXIEA2N1dAMJAGYCBQ1pc1doaXRlbGlzdGVkBQZoZWlnaHQAAAMJAAACBQdhc3NldElkBQtzaWduQXNzZXRJZAUHc2lnbkN1dAULdXNkbldhdmVDdXQEDWFtb3VudEZvclNpZ24JAGsDBQZhbW91bnQFA2N1dABkBA5hbW91bnRGb3JBZ2VudAMDAwkBAiE9AgUFYWdlbnQFC2ZlZVJlY2VpdmVyCQBmAgUKYWdlbnRTaGFyZQAABwkAZgIFBmhlaWdodAUNaXNXaGl0ZWxpc3RlZAcJAGsDBQZhbW91bnQFCmFnZW50U2hhcmUAZAAABBBhbW91bnRGb3JDcmVhdG9yCQBlAgUGYW1vdW50BQ1hbW91bnRGb3JTaWduAwkAAAIFCmFtb3VudFNvbGQFCm1heENhblNlbGwJAAIBAgxBcnQgc29sZCBvdXQEDW5ld0Ftb3VudFNvbGQJAGQCBQphbW91bnRTb2xkAAEECWlzc3VlTWV0YQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCUNyZWF0b3I6IAUGaXNzdWVyAgosCiBBcnRJRDogBQVhcnRJZAILLAogU2lnbklEOiAFBnNpZ25JRAIRLAogQXJ0d29yayBuYW1lOiAFC2FydHdvcmtOYW1lAgosCiBJc3N1ZTogCQCkAwEFDW5ld0Ftb3VudFNvbGQCAS8JAKQDAQUKbWF4Q2FuU2VsbAQIaXNzdWVORlQJAMIIBQkArAICAgNTQV8JAKQDAQkAZAIFCHRvdGFsTkZUAAEFCWlzc3VlTWV0YQABAAAHBAVpZE5GVAkAuAgBBQhpc3N1ZU5GVAQKc2VsbFN0YXR1cwMDCQAAAgUNbmV3QW1vdW50U29sZAUKbWF4Q2FuU2VsbAYJAQEhAQUIaXNPblNhbGUHBgQKcmVjZWl2ZU5GVAMDAwkAAAIFBmNhbGxlcgUGaXNzdWVyCQECIT0CBQhiaWRPd25lcgIABwkBAiE9AgUFYmlkSWQCAAcJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCGJpZE93bmVyCAUBaQZjYWxsZXIECmFzc2V0SWRCaWQDCQEBIQEJAQlpc0RlZmluZWQBBQdhc3NldElkAgVXQVZFUwkA2AQBCQEFdmFsdWUBBQdhc3NldElkBAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOBAliaWREZWxPbGQJAQtEZWxldGVFbnRyeQEJAKwCAgUKYmlkRGF0YUtleQIFX09QRU4ECWJpZFVwZGF0ZQkBC1N0cmluZ0VudHJ5AgkArAICBQpiaWREYXRhS2V5AgdfQ0xPU0VECQCsAgIJAKwCAgUHYmlkRGF0YQIBXwkApAMBBQRkYXRlBAdzb2xkS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCWFydF9zb2xkXwkApAMBBQ1uZXdBbW91bnRTb2xkAgRfb2ZfCQCkAwEFCm1heENhblNlbGwCAV8FBWFydElkAgFfBQZpc3N1ZXIECXNvbGRWYWx1ZQMJAQEhAQUFaXNCaWQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUGY2FsbGVyAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFDGFydHdvcmtQcmljZQIBXwUMcHJpY2VBc3NldElkAgFfCQDYBAEFBWlkTkZUCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQUKcmVjZWl2ZU5GVAIBXwkApAMBBQRkYXRlAgFfBQJpZAIBXwkApAMBBQZhbW91bnQCAV8FCmFzc2V0SWRCaWQCAV8JANgEAQUFaWRORlQECHNvbGREYXRhCQELU3RyaW5nRW50cnkCBQdzb2xkS2V5BQlzb2xkVmFsdWUEC2NvbW1pc3Npb25zAwkBAiE9AgUOYW1vdW50Rm9yQWdlbnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIJAGUCBQ1hbW91bnRGb3JTaWduBQ5hbW91bnRGb3JBZ2VudAUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUFYWdlbnQFDmFtb3VudEZvckFnZW50BQdhc3NldElkBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQ1hbW91bnRGb3JTaWduBQdhc3NldElkBQNuaWwEBmJ1eVJlcwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5SXNzdWVkAgUGaXNzdWVyBQVhcnRJZAUNbmV3QW1vdW50U29sZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICBG5mdF8JANgEAQUFaWRORlQFB3NvbGRLZXkJAMwIAgkBDEludGVnZXJFbnRyeQICEHRvdGFsX25mdF9pc3N1ZWQJAGQCBQh0b3RhbE5GVAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5RW5kU2FsZQIFBmlzc3VlcgUFYXJ0SWQAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCWtleU9uU2FsZQIFBmlzc3VlcgUFYXJ0SWQFCnNlbGxTdGF0dXMJAMwIAgUIaXNzdWVORlQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFBmlzc3VlcgUQYW1vdW50Rm9yQ3JlYXRvcgUHYXNzZXRJZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQpyZWNlaXZlTkZUAAEFBWlkTkZUBQNuaWwFC2NvbW1pc3Npb25zAwUFaXNCaWQJAMwIAgUIc29sZERhdGEJAMwIAgUJYmlkVXBkYXRlCQDMCAIFCWJpZERlbE9sZAUGYnV5UmVzCQDMCAIFCHNvbGREYXRhBQZidXlSZXMKBmludm9rZQEHc2V0Q29uZgIDa2V5A3ZhbAQGY2FsbGVyCQClCAEIBQZpbnZva2UGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQhjb250YWlucwIFA2tleQIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwFpAQphZGRBcnR3b3JrDApzaGEyNTZIYXNoBnNpZ25JRARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MEdHlwZQpjaWREaXNwbGF5DHNoYTI1NkV4cG9ydAljaWRFeHBvcnQNc2hhMjU2TGljZW5jZQpjaWRMaWNlbmNlB2NyYXdsZXIEDSR0MDE3MDgzMTcxMjQJAQxpZENhbGxlckRhdGUBBQFpBAVhcnRJZAgFDSR0MDE3MDgzMTcxMjQCXzEEBmNhbGxlcggFDSR0MDE3MDgzMTcxMjQCXzIEBGRhdGUIBQ0kdDAxNzA4MzE3MTI0Al8zAwkBASEBCQEMdmFsaWRhdGVIYXNoAQUKc2hhMjU2SGFzaAkAAgECJEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQQNJHQwMTcyMjUxNzI5NAkBCnNldExJY2VuY2UCBQpjaWRMaWNlbmNlBQ1zaGEyNTZMaWNlbmNlBApsaWNlbmNlQ0lECAUNJHQwMTcyMjUxNzI5NAJfMQQLbGljZW5jZUhhc2gIBQ0kdDAxNzIyNTE3Mjk0Al8yBA92YWxpZGF0ZUFydHdvcmsJARN2YWxpZGF0ZUFydHdvcmtEYXRhCQUGY2FsbGVyBQpjaWREaXNwbGF5BQljaWRFeHBvcnQFCmxpY2VuY2VDSUQFDHNoYTI1NkV4cG9ydAULbGljZW5jZUhhc2gFBG5hbWUFC2Rlc2NyaXB0aW9uBQR0YWdzAwkBAiE9AgUPdmFsaWRhdGVBcnR3b3JrAgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEDSR0MDE3NTEzMTc1NTUJAQ92YWxpZGF0ZVBheW1lbnQBBQFpBAZhbW91bnQIBQ0kdDAxNzUxMzE3NTU1Al8xBAdhc3NldElkCAUNJHQwMTc1MTMxNzU1NQJfMgMJAQEhAQkBCWlzRGVmaW5lZAEFBmFtb3VudAkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBAplbnRyeUV4aXN0CQEOZ2V0U3RyaW5nQnlLZXkBCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUGY2FsbGVyAwkBAiE9AgUKZW50cnlFeGlzdAIACQACAQIUWW91IGFscmVhZHkgYWRkZWQgaXQECWhhc2hFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBDmtleU93bmVyQnlIYXNoAQUKc2hhMjU2SGFzaAMJAQIhPQIFCWhhc2hFeGlzdAIACQACAQIXSGFzaCBhbHJlYWR5IHJlZ2lzdGVyZWQED2lzU2lnbkNlcnRpZmllZAkBFGNoZWNrU2lnbkNlcnRpZmljYXRlAwUGc2lnbklEBQZjYWxsZXIFCnNoYTI1Nkhhc2gDCQEBIQEFD2lzU2lnbkNlcnRpZmllZAkAAgECLFNpZ24gQ2VydGlmaWNhdGUgbm90IGZvdW5kIGZvciB0aGlzIGFkZHJlc3MuCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlPd25lckJ5SGFzaAEFCnNoYTI1Nkhhc2gFBmNhbGxlcgkAzAgCCQELU3RyaW5nRW50cnkCCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUGY2FsbGVyBQVhcnRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBB2tleURhdGUCBQZjYWxsZXIFBWFydElkBQRkYXRlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlOYW1lAgUGY2FsbGVyBQVhcnRJZAUEbmFtZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5RGVzYwIFBmNhbGxlcgUFYXJ0SWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlEaXNwbGF5Q2lkAgUGY2FsbGVyBQVhcnRJZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXhwb3J0Q2lkAgUGY2FsbGVyBQVhcnRJZAUJY2lkRXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlFeHBvcnRIYXNoAgUGY2FsbGVyBQVhcnRJZAUMc2hhMjU2RXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlMaWNlbmNlSGFzaAIFBmNhbGxlcgUFYXJ0SWQFC2xpY2VuY2VIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlMaWNlbmNlQ2lkAgUGY2FsbGVyBQVhcnRJZAUKbGljZW5jZUNJRAkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VHlwZQIFBmNhbGxlcgUFYXJ0SWQFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleVRhZ3MCBQZjYWxsZXIFBWFydElkBQR0YWdzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5TWF4TWludAIFBmNhbGxlcgUFYXJ0SWQAAAkAzAgCCQELU3RyaW5nRW50cnkCCQEJa2V5U2lnbklEAgUGY2FsbGVyBQVhcnRJZAUGc2lnbklECQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5SXNzdWVkAgUGY2FsbGVyBQVhcnRJZAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGY2FsbGVyBQVhcnRJZAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleWlkQnlTaWduaWQCBQZjYWxsZXIFBnNpZ25JRAUFYXJ0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUhhc2hCeVR4aWRBZGRyAgUGY2FsbGVyBQVhcnRJZAUKc2hhMjU2SGFzaAkAzAgCCQELU3RyaW5nRW50cnkCCQEKa2V5Q3Jhd2xlcgIFBmNhbGxlcgUFYXJ0SWQFB2NyYXdsZXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFC2ZlZVJlY2VpdmVyBQZhbW91bnQFB2Fzc2V0SWQFA25pbAFpAQ11cGRhdGVBcnR3b3JrCwR0eGlkBG5hbWULZGVzY3JpcHRpb24EdGFncwR0eXBlCmNpZERpc3BsYXkMc2hhMjU2RXhwb3J0CWNpZEV4cG9ydA1zaGEyNTZMaWNlbmNlCmNpZExpY2VuY2UHY3Jhd2xlcgMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQGY2FsbGVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEDSR0MDIwMjg3MjAzNTYJAQpzZXRMSWNlbmNlAgUKY2lkTGljZW5jZQUNc2hhMjU2TGljZW5jZQQKbGljZW5jZUNJRAgFDSR0MDIwMjg3MjAzNTYCXzEEC2xpY2VuY2VIYXNoCAUNJHQwMjAyODcyMDM1NgJfMgQPdmFsaWRhdGVBcnR3b3JrCQETdmFsaWRhdGVBcnR3b3JrRGF0YQkFBmNhbGxlcgUKY2lkRGlzcGxheQUJY2lkRXhwb3J0BQpsaWNlbmNlQ0lEBQxzaGEyNTZFeHBvcnQFC2xpY2VuY2VIYXNoBQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwMJAQIhPQIFD3ZhbGlkYXRlQXJ0d29yawIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAplbnRyeUV4aXN0CQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5TmFtZQIFBmNhbGxlcgUEdHhpZAMJAAACBQplbnRyeUV4aXN0AgAJAAIBAg9FbnRyeSBub3QgZm91bmQEBGZsYWcJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlGbGFnAgUGY2FsbGVyBQR0eGlkAwkAAAIFBGZsYWcCB0lMTEVHQUwJAAIBAh1DYW5ub3QgdXBkYXRlIElMTEVHQUwgYXJ0d29yawMJAQEhAQkBC2lzQXJ0TWludGVkAgUGY2FsbGVyBQR0eGlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlOYW1lAgUGY2FsbGVyBQR0eGlkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlEZXNjAgUGY2FsbGVyBQR0eGlkBQtkZXNjcmlwdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5RGlzcGxheUNpZAIFBmNhbGxlcgUEdHhpZAUKY2lkRGlzcGxheQkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RXhwb3J0Q2lkAgUGY2FsbGVyBQR0eGlkBQljaWRFeHBvcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleUV4cG9ydEhhc2gCBQZjYWxsZXIFBHR4aWQFDHNoYTI1NkV4cG9ydAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5TGljZW5jZUNpZAIFBmNhbGxlcgUEdHhpZAUKbGljZW5jZUNJRAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5TGljZW5jZUhhc2gCBQZjYWxsZXIFBHR4aWQFC2xpY2VuY2VIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlUYWdzAgUGY2FsbGVyBQR0eGlkBQR0YWdzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlUeXBlAgUGY2FsbGVyBQR0eGlkBQR0eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQprZXlDcmF3bGVyAgUGY2FsbGVyBQR0eGlkBQdjcmF3bGVyBQNuaWwJAAIBAg5BbHJlYWR5IG1pbnRlZAFpAQtmbGFnQXJ0d29yawQFYXJ0SWQEYWRkcgRmbGFnBG5vdGUEDSR0MDIxNzgxMjE4MTQJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDIxNzgxMjE4MTQCXzEEBmNhbGxlcggFDSR0MDIxNzgxMjE4MTQCXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIHQ09OU0VOVAkAzAgCAgAJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQRmbGFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlGbGFnAgUEYWRkcgUFYXJ0SWQFBGZsYWcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleU5vdGUCBQRhZGRyBQVhcnRJZAUEbm90ZQUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUEZmxhZwkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQBaQENZGVsZXRlQXJ0d29yawIFYXJ0SWQEYWRkcgQNJHQwMjIyNTAyMjI4MwkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjIyNTAyMjI4MwJfMQQGY2FsbGVyCAUNJHQwMjIyNTAyMjI4MwJfMgQJYWRkclRvVXNlAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgUEam9lcAkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyBQRhZGRyBQZjYWxsZXIECmVudHJ5RXhpc3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQlhZGRyVG9Vc2UFBWFydElkAiBObyBhcnQgbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwMJAAACBQplbnRyeUV4aXN0AgAJAAIBAiBObyBhcnQgbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwQKc2hhMjU2SGFzaAkBDmdldFN0cmluZ0J5S2V5AQkBEWtleUhhc2hCeVR4aWRBZGRyAgUJYWRkclRvVXNlBQVhcnRJZAMJAAACBQpzaGEyNTZIYXNoAgAJAAIBAiVObyBhcnQgaGFzaCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzBAZzaWduSUQJAQ5nZXRTdHJpbmdCeUtleQEJAQlrZXlTaWduSUQCBQlhZGRyVG9Vc2UFBWFydElkAwkAAAIFBnNpZ25JRAIACQACAQITTm8gU0lHTiBJRCBtYXRjaGluZwQMZGF0YVRvRGVsZXRlCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlEYXRlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5TmFtZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleURlc2MCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlEaXNwbGF5Q2lkAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5RXhwb3J0Q2lkAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5RXhwb3J0SGFzaAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmtleUxpY2VuY2VIYXNoAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5TGljZW5jZUNpZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleVR5cGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlUYWdzAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEKa2V5TWF4TWludAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWtleVNpZ25JRAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWtleUlzc3VlZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCWtleU9uU2FsZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleUZsYWcCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQhrZXlQcmljZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmtleUFzc2V0SWRBY2NlcHRlZAIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDmtleU93bmVyQnlIYXNoAQUKc2hhMjU2SGFzaAkAzAgCCQELRGVsZXRlRW50cnkBCQENa2V5aWRCeVNpZ25pZAIFCWFkZHJUb1VzZQUGc2lnbklECQDMCAIJAQtEZWxldGVFbnRyeQEJARJrZXlUeGlkQnlIYXNoT3duZXICBQpzaGEyNTZIYXNoBQlhZGRyVG9Vc2UJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCmtleUVuZFNhbGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlOb3RlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEKa2V5Q3Jhd2xlcgIFCWFkZHJUb1VzZQUFYXJ0SWQFA25pbAMJAQEhAQkBC2lzQXJ0TWludGVkAgUJYWRkclRvVXNlBQVhcnRJZAMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwUMZGF0YVRvRGVsZXRlAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgUMZGF0YVRvRGVsZXRlCQACAQIoQXJ0IGFscmVhZHkgbWludGVkLCB5b3UgY2Fubm90IGRlbGV0ZSBpdAFpAQtzZWxsQXJ0d29yawUFYXJ0SWQFcHJpY2UHbWF4TWludAdhc3NldElkCGJsb2NrRW5kBA0kdDAyNTA1NjI1MDg5CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyNTA1NjI1MDg5Al8xBAZjYWxsZXIIBQ0kdDAyNTA1NjI1MDg5Al8yBAthcnR3b3JrTmFtZQkBDmdldFN0cmluZ0J5S2V5AQkBB2tleU5hbWUCBQZjYWxsZXIFBWFydElkAwkAAAIFC2FydHdvcmtOYW1lAgAJAAIBAiNUaGlzIGFydCBkb2Vzbid0IG1hdGNoIHlvdXIgYWNjb3VudAQEZmxhZwkBDmdldFN0cmluZ0J5S2V5AQkBB2tleUZsYWcCBQZjYWxsZXIFBWFydElkAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQRmbGFnCQACAQIPRmxhZ2dlZCBhcnR3b3JrBAZiaWROYnIJAQ9nZXRJbnRlZ2VyQnlLZXkBCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQDCQBmAgAABQhibG9ja0VuZAkAAgECDE5lZ2F0aXZlIGVuZAMDCQBmAgUIYmxvY2tFbmQAAAMJAQIhPQIFB21heE1pbnQAAQYJAQIhPQIFBXByaWNlAAAHCQACAQI6VGltZWQgb2ZmZXIgb25seSBhbGxvd2VkIGZvciB1bmlxdWUgZWRpdGlvbiBhbmQgb2ZmZXIgb25seQQKYmFzZUhlaWdodAMJAAACBQhibG9ja0VuZAAAAAAFBmhlaWdodAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQdhc3NldElkCQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchAwkBASEBCQEPdmFsaWRhdGVNaW5TZWxsAgUHYXNzZXRJZAUFcHJpY2UJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmNhbGxlcgMJAQIhPQIFCWNoZWNrVXNlcgIACQACAQUJY2hlY2tVc2VyBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCWtleUlzc3VlZAIFBmNhbGxlcgUFYXJ0SWQECm1heENhblNlbGwJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEKa2V5TWF4TWludAIFBmNhbGxlcgUFYXJ0SWQDCQBmAgUHbWF4TWludABkCQACAQIcMTAwIGVkaXRpb25zIG1heCBwZXIgYXJ0d29yawMDCQECIT0CBQphbW91bnRTb2xkAAAJAAACBQphbW91bnRTb2xkBQptYXhDYW5TZWxsBwkAAgECFE1heCBlZGl0aW9uIHJlYWNoZWQuAwMJAGYCBQphbW91bnRTb2xkAAAJAQIhPQIFCm1heENhblNlbGwFB21heE1pbnQHCQACAQImQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIGFueW1vcmUDAwkAZgIFBmJpZE5icgAACQECIT0CBQptYXhDYW5TZWxsBQdtYXhNaW50BwkAAgECMUNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSB3aXRoIGFjdGl2ZSBvcmRlcnMECnNlbGxTdGF0dXMDAwkAZgIFBXByaWNlAAAJAGYCBQdtYXhNaW50AAAHBgcJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQlrZXlPblNhbGUCBQZjYWxsZXIFBWFydElkBQpzZWxsU3RhdHVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEIa2V5UHJpY2UCBQZjYWxsZXIFBWFydElkBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCmtleU1heE1pbnQCBQZjYWxsZXIFBWFydElkBQdtYXhNaW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlBc3NldElkQWNjZXB0ZWQCBQZjYWxsZXIFBWFydElkBQdhc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5RW5kU2FsZQIFBmNhbGxlcgUFYXJ0SWQJAGQCBQpiYXNlSGVpZ2h0BQhibG9ja0VuZAUDbmlsAWkBCmJ1eUFydHdvcmsCBWFydElkBmlzc3VlcgkBB2J1eU1pbnQFBQFpBQVhcnRJZAUGaXNzdWVyAgACAAFpAQZzZXRCaWQCBWFydElkBmlzc3VlcgQNJHQwMjczNDYyNzM4NAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMjczNDYyNzM4NAJfMQQGY2FsbGVyCAUNJHQwMjczNDYyNzM4NAJfMgQEZGF0ZQgFDSR0MDI3MzQ2MjczODQCXzMEDSR0MDI3Mzg5Mjc0MjUJAQlpc1BheW1lbnQBBQFpBAdwYXltZW50CAUNJHQwMjczODkyNzQyNQJfMQQGYW1vdW50CAUNJHQwMjczODkyNzQyNQJfMgQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEIBQdwYXltZW50B2Fzc2V0SWQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEIBQdwYXltZW50B2Fzc2V0SWQECGJsb2NrRW5kCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleUVuZFNhbGUCBQZpc3N1ZXIFBWFydElkAwMJAQIhPQIFCGJsb2NrRW5kAAAJAGcCBQZoZWlnaHQFCGJsb2NrRW5kBwkAAgECC1NhbGUgZW5kZWQuBAZiaWROYnIJAQ9nZXRJbnRlZ2VyQnlLZXkBCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQDCQEBIQEJARBhY2NlcHRlZEFzc2V0SWRzAQUHYXNzZXRJZAkAAgECEmFzc2V0IG5vdCBhY2NlcHRlZAMJAQEhAQkBD3ZhbGlkYXRlTWluU2VsbAIFB2Fzc2V0SWQFBmFtb3VudAkAAgECDldyb25nIG1pbiBzZWxsBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCWtleUlzc3VlZAIFBmlzc3VlcgUFYXJ0SWQECm1heENhblNlbGwJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEKa2V5TWF4TWludAIFBmlzc3VlcgUFYXJ0SWQDCQBnAgAABQptYXhDYW5TZWxsCQACAQIjTm8gbWF4IGVkaXRpb24gc2V0IGZvciB0aGlzIGFydHdvcmsDCQBnAgUKYW1vdW50U29sZAUKbWF4Q2FuU2VsbAkAAgECGFNvbGQgb3V0LCB5b3UgY2Fubm90IGJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIEYmlkXwUFYXJ0SWQCAV8FBmlzc3VlcgIBXwUGY2FsbGVyAgFfBQJpZAIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgUHYXNzZXRJZAIBXwkApAMBBQZhbW91bnQCAV8JAKQDAQUEZGF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkCQBkAgUGYmlkTmJyAAEFA25pbAFpAQlhY2NlcHRCaWQEBWFydElkBmlzc3VlcgViaWRJZAhiaWRPd25lcgQGY2FsbGVyCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMDCQECIT0CBQZjYWxsZXIFBmlzc3VlcgkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24JAQdidXlNaW50BQUBaQUFYXJ0SWQFBmlzc3VlcgUFYmlkSWQFCGJpZE93bmVyAWkBCWNhbmNlbEJpZAQFYXJ0SWQGaXNzdWVyBWJpZElkCGJpZE93bmVyBA0kdDAyODg1MjI4OTExCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyODg1MjI4OTExAl8xBAZjYWxsZXIIBQ0kdDAyODg1MjI4OTExAl8yBARkYXRlCAUNJHQwMjg4NTIyODkxMQJfMwMDCQECIT0CBQZjYWxsZXIFCGJpZE93bmVyCQECIT0CBQZjYWxsZXIFBmlzc3VlcgcJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uBA1yZXR1cm5Nb25leVRvAwkAAAIFBmNhbGxlcgUGaXNzdWVyBQhiaWRPd25lcgUGY2FsbGVyBAZiaWROYnIJAQ9nZXRJbnRlZ2VyQnlLZXkBCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQECmJpZERhdGFLZXkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIEYmlkXwUFYXJ0SWQCAV8FBmlzc3VlcgIBXwUIYmlkT3duZXICAV8FBWJpZElkBAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOAwkAAAIFB2JpZERhdGECAAkAAgECDUJpZCBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQHYXNzZXRJZAkBDWdldEJpZEFzc2V0SWQBCQCRAwIFCmJpZERhdGFBcnIAAAQJYmlkU3RhdHVzAghDQU5DRUxFRAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQpiaWREYXRhS2V5AgFfBQliaWRTdGF0dXMJAKwCAgkArAICBQdiaWREYXRhAgFfCQCkAwEFBGRhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAkAZQIFBmJpZE5icgABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQ1yZXR1cm5Nb25leVRvCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBQdhc3NldElkBQNuaWwAjwMG/w==", "height": 2139149, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: dKvJNGqb28yHPXLadGqS8EAC2p8kqmAMBU9nCLFrru2 Next: DD8gpzZ9q8V5sGCB4FavNCS6hXZeL7TwPeGSqWgjhbVg Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let VERSION = 116
5+
46 func getStringByKey (key) = valueOrElse(getString(this, key), "")
57
68
245247
246248
247249 func validatePayment (i) = {
248- let $t01021610252 = isPayment(i)
249- let payment = $t01021610252._1
250- let amount = $t01021610252._2
250+ let $t084338469 = isPayment(i)
251+ let payment = $t084338469._1
252+ let amount = $t084338469._2
251253 let assetId = if (if (isDefined(payment.assetId))
252254 then (payment.assetId == signAssetId)
253255 else false)
270272
271273
272274 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
273- let $t01084510881 = isPayment(i)
274- let payment = $t01084510881._1
275- let amount = $t01084510881._2
275+ let $t090629098 = isPayment(i)
276+ let payment = $t090629098._1
277+ let amount = $t090629098._2
276278 let assetId = if (!(isDefined(payment.assetId)))
277279 then unit
278280 else if (if ((size(priceAssetId) > 0))
359361
360362
361363 func buyMint (i,artId,issuer,bidId,bidOwner) = {
362- let $t01310613163 = idCallerDate(i)
363- let id = $t01310613163._1
364- let caller = $t01310613163._2
365- let date = $t01310613163._3
364+ let $t01132311380 = idCallerDate(i)
365+ let id = $t01132311380._1
366+ let caller = $t01132311380._2
367+ let date = $t01132311380._3
366368 let isBid = if (if (if ((toBase58String(i.caller.bytes) == issuer))
367369 then (bidOwner != "")
368370 else false)
418420 then throw(checkUser)
419421 else {
420422 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
421- let $t01491415081 = if (isBid)
423+ let $t01313113298 = if (isBid)
422424 then getPriceAssetIdFromBid(bidDataKey)
423425 else validatePriceAssetId(i, priceAssetId, artworkPrice)
424- let amount = $t01491415081._1
425- let assetId = $t01491415081._2
426+ let amount = $t01313113298._1
427+ let assetId = $t01313113298._2
426428 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
427429 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShare(issuer)), 0)
428430 let isWhitelisted = checkWhitelist(issuer)
503505
504506 @Callable(i)
505507 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = {
506- let $t01886618907 = idCallerDate(i)
507- let artId = $t01886618907._1
508- let caller = $t01886618907._2
509- let date = $t01886618907._3
508+ let $t01708317124 = idCallerDate(i)
509+ let artId = $t01708317124._1
510+ let caller = $t01708317124._2
511+ let date = $t01708317124._3
510512 if (!(validateHash(sha256Hash)))
511513 then throw("Hash should be 64 characters maximum")
512514 else {
513- let $t01900819077 = setLIcence(cidLicence, sha256Licence)
514- let licenceCID = $t01900819077._1
515- let licenceHash = $t01900819077._2
515+ let $t01722517294 = setLIcence(cidLicence, sha256Licence)
516+ let licenceCID = $t01722517294._1
517+ let licenceHash = $t01722517294._2
516518 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
517519 if ((validateArtwork != ""))
518520 then throw("Something went wrong!")
519521 else {
520- let $t01929619338 = validatePayment(i)
521- let amount = $t01929619338._1
522- let assetId = $t01929619338._2
522+ let $t01751317555 = validatePayment(i)
523+ let amount = $t01751317555._1
524+ let assetId = $t01751317555._2
523525 if (!(isDefined(amount)))
524526 then throw("Something went wrong")
525527 else {
549551 then throw(maintenanceMSG)
550552 else {
551553 let caller = toBase58String(i.caller.bytes)
552- let $t02207022139 = setLIcence(cidLicence, sha256Licence)
553- let licenceCID = $t02207022139._1
554- let licenceHash = $t02207022139._2
554+ let $t02028720356 = setLIcence(cidLicence, sha256Licence)
555+ let licenceCID = $t02028720356._1
556+ let licenceHash = $t02028720356._2
555557 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
556558 if ((validateArtwork != ""))
557559 then throw("Something went wrong!")
574576
575577 @Callable(i)
576578 func flagArtwork (artId,addr,flag,note) = {
577- let $t02356423597 = idCallerDate(i)
578- let id = $t02356423597._1
579- let caller = $t02356423597._2
579+ let $t02178121814 = idCallerDate(i)
580+ let id = $t02178121814._1
581+ let caller = $t02178121814._2
580582 if (containsElement([chris, toString(this)], caller))
581583 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
582584 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
588590
589591 @Callable(i)
590592 func deleteArtwork (artId,addr) = {
591- let $t02403324066 = idCallerDate(i)
592- let id = $t02403324066._1
593- let caller = $t02403324066._2
593+ let $t02225022283 = idCallerDate(i)
594+ let id = $t02225022283._1
595+ let caller = $t02225022283._2
594596 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
595597 then addr
596598 else caller
623625
624626 @Callable(i)
625627 func sellArtwork (artId,price,maxMint,assetId,blockEnd) = {
626- let $t02683926872 = idCallerDate(i)
627- let id = $t02683926872._1
628- let caller = $t02683926872._2
628+ let $t02505625089 = idCallerDate(i)
629+ let id = $t02505625089._1
630+ let caller = $t02505625089._2
629631 let artworkName = getStringByKey(keyName(caller, artId))
630632 if ((artworkName == ""))
631633 then throw("This art doesn't match your account")
696698
697699 @Callable(i)
698700 func setBid (artId,issuer) = {
699- let $t02912929167 = idCallerDate(i)
700- let id = $t02912929167._1
701- let caller = $t02912929167._2
702- let date = $t02912929167._3
703- let $t02917229208 = isPayment(i)
704- let payment = $t02917229208._1
705- let amount = $t02917229208._2
701+ let $t02734627384 = idCallerDate(i)
702+ let id = $t02734627384._1
703+ let caller = $t02734627384._2
704+ let date = $t02734627384._3
705+ let $t02738927425 = isPayment(i)
706+ let payment = $t02738927425._1
707+ let amount = $t02738927425._2
706708 let assetId = if (!(isDefined(payment.assetId)))
707709 then "WAVES"
708710 else toBase58String(value(payment.assetId))
743745
744746 @Callable(i)
745747 func cancelBid (artId,issuer,bidId,bidOwner) = {
746- let $t03063530694 = idCallerDate(i)
747- let id = $t03063530694._1
748- let caller = $t03063530694._2
749- let date = $t03063530694._3
748+ let $t02885228911 = idCallerDate(i)
749+ let id = $t02885228911._1
750+ let caller = $t02885228911._2
751+ let date = $t02885228911._3
750752 if (if ((caller != bidOwner))
751753 then (caller != issuer)
752754 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4+let VERSION = 116
5+
46 func getStringByKey (key) = valueOrElse(getString(this, key), "")
57
68
79 let unitTest = false
810
911 let oracleFee = value(addressFromString(getStringByKey("conf_oracle_fee")))
1012
1113 let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
1214
1315 let feeReceiver = getStringByKey("conf_fee_receiver")
1416
1517 let userDapp = if (unitTest)
1618 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1719 else value(addressFromString(getStringByKey("conf_users_dapp")))
1820
1921 let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
2022
2123 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
2224
2325 let usdnAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDN"))
2426
2527 let wavesAssetId = base58''
2628
2729 let chris = getStringByKey("conf_admin_1")
2830
2931 let joep = getStringByKey("conf_admin_2")
3032
3133 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
3234
3335
3436 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
3537
3638
3739 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
3840
3941
4042 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
4143
4244
4345 let signCut = 7
4446
4547 let usdnWaveCut = 10
4648
4749 let defaultLicence = getStringByKey("conf_default_licence")
4850
4951 let defaultHashLicence = getStringByKey("conf_default_licence_hash")
5052
5153 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
5254
5355 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
5456
5557 let userSuspended = "SUSPENDED"
5658
5759 let userRemoved = "REMOVED"
5860
5961 let userUnregistered = "UNREGISTERED"
6062
6163 let userAllowed = "ALLOWED"
6264
6365 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6466
6567 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6668 case a: String =>
6769 if (contains(a, sha256Hash))
6870 then true
6971 else false
7072 case _ =>
7173 false
7274 }
7375
7476
7577 func validateCID (cid) = if (contains(cid, "/"))
7678 then if (if ((76 > size(cid)))
7779 then (size(split(cid, "/")[0]) == 59)
7880 else false)
7981 then (16 > size(split(cid, "/")[1]))
8082 else false
8183 else false
8284
8385
8486 func validateHash (hash) = (size(hash) == 64)
8587
8688
8789 func keyUserStatus (caller) = ("user_status_" + caller)
8890
8991
9092 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9193
9294
9395 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9496
9597
9698 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
9799
98100
99101 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
100102
101103
102104 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
103105
104106
105107 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
106108
107109
108110 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
109111
110112
111113 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
112114
113115
114116 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
115117
116118
117119 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
118120
119121
120122 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
121123
122124
123125 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
124126
125127
126128 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
127129
128130
129131 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
130132
131133
132134 func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
133135
134136
135137 func keyCrawler (caller,artId) = ((("art_crawler_cid_" + artId) + "_") + caller)
136138
137139
138140 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
139141
140142
141143 func keyEndSale (caller,artId) = ((("art_endsale_" + artId) + "_") + caller)
142144
143145
144146 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
145147
146148
147149 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
148150
149151
150152 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
151153
152154
153155 func keyPrimaryShare (artistAddr) = ("artist_agent_primary_" + artistAddr)
154156
155157
156158 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
157159
158160
159161 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
160162
161163
162164 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
163165
164166
165167 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
166168
167169
168170 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
169171 then throw("Wrong Display CID")
170172 else if (!(validateCID(cidExport)))
171173 then throw("Wrong Export CID")
172174 else if (if ((cidLicence != ""))
173175 then !(validateCID(cidLicence))
174176 else false)
175177 then throw("Wrong Licence CID")
176178 else true
177179
178180
179181 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
180182 then throw("Export Hash 64 char. max")
181183 else if (!(validateHash(sha256Licence)))
182184 then throw("Licence Hash 64 char. max")
183185 else true
184186
185187
186188 func validateString (str,max) = if ((size(str) == 0))
187189 then throw("Field cannot be is empty")
188190 else if ((size(str) > max))
189191 then throw((str + " is too long"))
190192 else true
191193
192194
193195 func validateUser (caller) = {
194196 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
195197 if (if ((userStatus == userUnregistered))
196198 then true
197199 else (userStatus == userAllowed))
198200 then "Register this account first with \"Account\" tab"
199201 else if ((userStatus == userSuspended))
200202 then "Account suspended"
201203 else if ((userStatus == userRemoved))
202204 then "Account removed"
203205 else ""
204206 }
205207
206208
207209 func setLIcence (cidLicence,sha256Licence) = {
208210 let cid = if ((size(cidLicence) == 0))
209211 then defaultLicence
210212 else cidLicence
211213 let hash = if ((size(sha256Licence) == 0))
212214 then defaultHashLicence
213215 else sha256Licence
214216 $Tuple2(cid, hash)
215217 }
216218
217219
218220 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags) = {
219221 let checkUser = validateUser(caller)
220222 if ((checkUser != ""))
221223 then throw(checkUser)
222224 else if ((size(cidDisplay) == 0))
223225 then throw("Display CID cannot be empty")
224226 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
225227 then throw("Problem with CID")
226228 else if (!(validateAllHash(sha256Export, licenceHash)))
227229 then throw("Problem with Hashes")
228230 else if (!(validateString(name, 100)))
229231 then throw("100 Char. max name")
230232 else if (!(validateString(description, 1000)))
231233 then throw("1000 Char. max description")
232234 else if ((size(split(tags, ",")) > 5))
233235 then throw("5 tags max.")
234236 else ""
235237 }
236238
237239
238240 func isPayment (i) = if ((size(i.payments) == 0))
239241 then throw("No payment attached")
240242 else {
241243 let payment = value(i.payments[0])
242244 let amount = value(payment.amount)
243245 $Tuple2(payment, amount)
244246 }
245247
246248
247249 func validatePayment (i) = {
248- let $t01021610252 = isPayment(i)
249- let payment = $t01021610252._1
250- let amount = $t01021610252._2
250+ let $t084338469 = isPayment(i)
251+ let payment = $t084338469._1
252+ let amount = $t084338469._2
251253 let assetId = if (if (isDefined(payment.assetId))
252254 then (payment.assetId == signAssetId)
253255 else false)
254256 then payment.assetId
255257 else throw("Only SIGN token accepted as transaction fee")
256258 if ((amount != currentCertificationPrice))
257259 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
258260 else $Tuple2(amount, assetId)
259261 }
260262
261263
262264 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
263265 case b: Int =>
264266 if ((b != 0))
265267 then true
266268 else false
267269 case _ =>
268270 false
269271 }
270272
271273
272274 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
273- let $t01084510881 = isPayment(i)
274- let payment = $t01084510881._1
275- let amount = $t01084510881._2
275+ let $t090629098 = isPayment(i)
276+ let payment = $t090629098._1
277+ let amount = $t090629098._2
276278 let assetId = if (!(isDefined(payment.assetId)))
277279 then unit
278280 else if (if ((size(priceAssetId) > 0))
279281 then (toBase58String(value(payment.assetId)) == priceAssetId)
280282 else false)
281283 then payment.assetId
282284 else throw("Wrong asset id")
283285 if (if ((assetId == unit))
284286 then (priceAssetId != "")
285287 else false)
286288 then throw("Wrong asset id")
287289 else if ((artworkPrice != amount))
288290 then throw("Payment don't match")
289291 else $Tuple2(amount, assetId)
290292 }
291293
292294
293295 func acceptedAssetIds (assetId) = if (if (if (if ((assetId != toBase58String(signAssetId)))
294296 then (assetId != toBase58String(wavesAssetId))
295297 else false)
296298 then (assetId != "WAVES")
297299 else false)
298300 then (assetId != toBase58String(usdnAssetId))
299301 else false)
300302 then throw("Only SIGN, USDN or WAVES accepted")
301303 else true
302304
303305
304306 func validateMinSell (assetId,price) = {
305307 let minSellWaves = if (unitTest)
306308 then 10
307309 else getIntegerByKeyFromOracle("waves_min_sell")
308310 let minSellUsdn = 1000000
309311 let minSellSign = if (unitTest)
310312 then 1
311313 else (currentCertificationPrice * 2)
312314 if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
313315 then (minSellUsdn > price)
314316 else false)
315317 then (price != 0)
316318 else false)
317319 then true
318320 else if (if ((assetId == toBase58String(signAssetId)))
319321 then (minSellSign > price)
320322 else false)
321323 then (price != 0)
322324 else false)
323325 then true
324326 else if (if (if ((assetId == toBase58String(wavesAssetId)))
325327 then true
326328 else (assetId == "WAVES"))
327329 then (minSellWaves > price)
328330 else false)
329331 then (price != 0)
330332 else false)
331333 then throw("Wrong minimum sell price")
332334 else true
333335 }
334336
335337
336338 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
337339 then unit
338340 else fromBase58String(assetId)
339341
340342
341343 func getPriceAssetIdFromBid (bidDataKey) = {
342344 let bidData = getStringByKey((bidDataKey + "_OPEN"))
343345 if ((bidData == ""))
344346 then throw("Bid not found")
345347 else {
346348 let bidDataArr = split(bidData, "_")
347349 let bidAmount = parseIntValue(bidDataArr[1])
348350 let bidAssetId = getBidAssetId(bidDataArr[0])
349351 if ((0 >= bidAmount))
350352 then throw("Wrong amount")
351353 else $Tuple2(bidAmount, bidAssetId)
352354 }
353355 }
354356
355357
356358 func idCallerDate (i) = if (!(dappRunning))
357359 then throw(maintenanceMSG)
358360 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
359361
360362
361363 func buyMint (i,artId,issuer,bidId,bidOwner) = {
362- let $t01310613163 = idCallerDate(i)
363- let id = $t01310613163._1
364- let caller = $t01310613163._2
365- let date = $t01310613163._3
364+ let $t01132311380 = idCallerDate(i)
365+ let id = $t01132311380._1
366+ let caller = $t01132311380._2
367+ let date = $t01132311380._3
366368 let isBid = if (if (if ((toBase58String(i.caller.bytes) == issuer))
367369 then (bidOwner != "")
368370 else false)
369371 then (bidId != "")
370372 else false)
371373 then true
372374 else false
373375 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
374376 if (if (if ((blockEnd != 0))
375377 then (height >= blockEnd)
376378 else false)
377379 then !(isBid)
378380 else false)
379381 then throw("Sale ended.")
380382 else {
381383 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
382384 let totalNFT = getIntegerByKey("total_nft_issued")
383385 let signID = getStringByKey(keySignID(issuer, artId))
384386 let artworkName = getStringByKey(keyName(issuer, artId))
385387 if ((artworkName == ""))
386388 then throw("Art doesn't exist")
387389 else {
388390 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
389391 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
390392 let artworkPrice = if (callerIsIssuer)
391393 then (currentCertificationPrice * 2)
392394 else getIntegerByKey(keyPrice(issuer, artId))
393395 let priceAssetId = if (callerIsIssuer)
394396 then toBase58String(signAssetId)
395397 else getStringByKey(keyAssetIdAccepted(issuer, artId))
396398 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
397399 if (if (if (!(isBid))
398400 then !(callerIsIssuer)
399401 else false)
400402 then if (if ((0 >= artworkPrice))
401403 then true
402404 else !(isOnSale))
403405 then true
404406 else (0 >= maxCanSell)
405407 else false)
406408 then throw("Art not for sale")
407409 else if (if (if (!(isBid))
408410 then callerIsIssuer
409411 else false)
410412 then (0 >= maxCanSell)
411413 else false)
412414 then throw("Max issuable not set")
413415 else {
414416 let checkUser = validateUser(issuer)
415417 if (if (isBid)
416418 then (checkUser != "")
417419 else false)
418420 then throw(checkUser)
419421 else {
420422 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
421- let $t01491415081 = if (isBid)
423+ let $t01313113298 = if (isBid)
422424 then getPriceAssetIdFromBid(bidDataKey)
423425 else validatePriceAssetId(i, priceAssetId, artworkPrice)
424- let amount = $t01491415081._1
425- let assetId = $t01491415081._2
426+ let amount = $t01313113298._1
427+ let assetId = $t01313113298._2
426428 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
427429 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShare(issuer)), 0)
428430 let isWhitelisted = checkWhitelist(issuer)
429431 let cut = if ((isWhitelisted > height))
430432 then 0
431433 else if ((assetId == signAssetId))
432434 then signCut
433435 else usdnWaveCut
434436 let amountForSign = fraction(amount, cut, 100)
435437 let amountForAgent = if (if (if ((agent != feeReceiver))
436438 then (agentShare > 0)
437439 else false)
438440 then (height > isWhitelisted)
439441 else false)
440442 then fraction(amount, agentShare, 100)
441443 else 0
442444 let amountForCreator = (amount - amountForSign)
443445 if ((amountSold == maxCanSell))
444446 then throw("Art sold out")
445447 else {
446448 let newAmountSold = (amountSold + 1)
447449 let issueMeta = ((((((((((("Creator: " + issuer) + ",
448450 ArtID: ") + artId) + ",
449451 SignID: ") + signID) + ",
450452 Artwork name: ") + artworkName) + ",
451453 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
452454 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
453455 let idNFT = calculateAssetId(issueNFT)
454456 let sellStatus = if (if ((newAmountSold == maxCanSell))
455457 then true
456458 else !(isOnSale))
457459 then false
458460 else true
459461 let receiveNFT = if (if (if ((caller == issuer))
460462 then (bidOwner != "")
461463 else false)
462464 then (bidId != "")
463465 else false)
464466 then addressFromStringValue(bidOwner)
465467 else i.caller
466468 let assetIdBid = if (!(isDefined(assetId)))
467469 then "WAVES"
468470 else toBase58String(value(assetId))
469471 let bidData = getStringByKey((bidDataKey + "_OPEN"))
470472 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
471473 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
472474 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
473475 let soldValue = if (!(isBid))
474476 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
475477 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
476478 let soldData = StringEntry(soldKey, soldValue)
477479 let commissions = if ((amountForAgent != 0))
478480 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
479481 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
480482 let buyRes = ([IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(receiveNFT, 1, idNFT)] ++ commissions)
481483 if (isBid)
482484 then [soldData, bidUpdate, bidDelOld] :: buyRes
483485 else soldData :: buyRes
484486 }
485487 }
486488 }
487489 }
488490 }
489491 }
490492
491493
492494 @Callable(invoke)
493495 func setConf (key,val) = {
494496 let caller = toString(invoke.caller)
495497 if (containsElement([chris, toString(this)], caller))
496498 then if (contains(key, "conf_"))
497499 then [StringEntry(key, val)]
498500 else throw("Entries starting with conf_ only")
499501 else throw("You are not allowed to change this")
500502 }
501503
502504
503505
504506 @Callable(i)
505507 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = {
506- let $t01886618907 = idCallerDate(i)
507- let artId = $t01886618907._1
508- let caller = $t01886618907._2
509- let date = $t01886618907._3
508+ let $t01708317124 = idCallerDate(i)
509+ let artId = $t01708317124._1
510+ let caller = $t01708317124._2
511+ let date = $t01708317124._3
510512 if (!(validateHash(sha256Hash)))
511513 then throw("Hash should be 64 characters maximum")
512514 else {
513- let $t01900819077 = setLIcence(cidLicence, sha256Licence)
514- let licenceCID = $t01900819077._1
515- let licenceHash = $t01900819077._2
515+ let $t01722517294 = setLIcence(cidLicence, sha256Licence)
516+ let licenceCID = $t01722517294._1
517+ let licenceHash = $t01722517294._2
516518 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
517519 if ((validateArtwork != ""))
518520 then throw("Something went wrong!")
519521 else {
520- let $t01929619338 = validatePayment(i)
521- let amount = $t01929619338._1
522- let assetId = $t01929619338._2
522+ let $t01751317555 = validatePayment(i)
523+ let amount = $t01751317555._1
524+ let assetId = $t01751317555._2
523525 if (!(isDefined(amount)))
524526 then throw("Something went wrong")
525527 else {
526528 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
527529 if ((entryExist != ""))
528530 then throw("You already added it")
529531 else {
530532 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
531533 if ((hashExist != ""))
532534 then throw("Hash already registered")
533535 else {
534536 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
535537 if (!(isSignCertified))
536538 then throw("Sign Certificate not found for this address.")
537539 else [StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
538540 }
539541 }
540542 }
541543 }
542544 }
543545 }
544546
545547
546548
547549 @Callable(i)
548550 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler) = if (!(dappRunning))
549551 then throw(maintenanceMSG)
550552 else {
551553 let caller = toBase58String(i.caller.bytes)
552- let $t02207022139 = setLIcence(cidLicence, sha256Licence)
553- let licenceCID = $t02207022139._1
554- let licenceHash = $t02207022139._2
554+ let $t02028720356 = setLIcence(cidLicence, sha256Licence)
555+ let licenceCID = $t02028720356._1
556+ let licenceHash = $t02028720356._2
555557 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags)
556558 if ((validateArtwork != ""))
557559 then throw("Something went wrong!")
558560 else {
559561 let entryExist = getStringByKey(keyName(caller, txid))
560562 if ((entryExist == ""))
561563 then throw("Entry not found")
562564 else {
563565 let flag = getStringByKey(keyFlag(caller, txid))
564566 if ((flag == "ILLEGAL"))
565567 then throw("Cannot update ILLEGAL artwork")
566568 else if (!(isArtMinted(caller, txid)))
567569 then [StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler)]
568570 else throw("Already minted")
569571 }
570572 }
571573 }
572574
573575
574576
575577 @Callable(i)
576578 func flagArtwork (artId,addr,flag,note) = {
577- let $t02356423597 = idCallerDate(i)
578- let id = $t02356423597._1
579- let caller = $t02356423597._2
579+ let $t02178121814 = idCallerDate(i)
580+ let id = $t02178121814._1
581+ let caller = $t02178121814._2
580582 if (containsElement([chris, toString(this)], caller))
581583 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
582584 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
583585 else throw(("Unknow status " + flag))
584586 else throw("You are not allowed")
585587 }
586588
587589
588590
589591 @Callable(i)
590592 func deleteArtwork (artId,addr) = {
591- let $t02403324066 = idCallerDate(i)
592- let id = $t02403324066._1
593- let caller = $t02403324066._2
593+ let $t02225022283 = idCallerDate(i)
594+ let id = $t02225022283._1
595+ let caller = $t02225022283._2
594596 let addrToUse = if (containsElement([chris, joep, toString(this)], caller))
595597 then addr
596598 else caller
597599 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
598600 if ((entryExist == ""))
599601 then throw("No art matching for this address")
600602 else {
601603 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
602604 if ((sha256Hash == ""))
603605 then throw("No art hash matching for this address")
604606 else {
605607 let signID = getStringByKey(keySignID(addrToUse, artId))
606608 if ((signID == ""))
607609 then throw("No SIGN ID matching")
608610 else {
609611 let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId))]
610612 if (!(isArtMinted(addrToUse, artId)))
611613 then if (!(dappRunning))
612614 then throw(maintenanceMSG)
613615 else dataToDelete
614616 else if (containsElement([chris, toString(this)], caller))
615617 then dataToDelete
616618 else throw("Art already minted, you cannot delete it")
617619 }
618620 }
619621 }
620622 }
621623
622624
623625
624626 @Callable(i)
625627 func sellArtwork (artId,price,maxMint,assetId,blockEnd) = {
626- let $t02683926872 = idCallerDate(i)
627- let id = $t02683926872._1
628- let caller = $t02683926872._2
628+ let $t02505625089 = idCallerDate(i)
629+ let id = $t02505625089._1
630+ let caller = $t02505625089._2
629631 let artworkName = getStringByKey(keyName(caller, artId))
630632 if ((artworkName == ""))
631633 then throw("This art doesn't match your account")
632634 else {
633635 let flag = getStringByKey(keyFlag(caller, artId))
634636 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
635637 then throw("Flagged artwork")
636638 else {
637639 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
638640 if ((0 > blockEnd))
639641 then throw("Negative end")
640642 else if (if ((blockEnd > 0))
641643 then if ((maxMint != 1))
642644 then true
643645 else (price != 0)
644646 else false)
645647 then throw("Timed offer only allowed for unique edition and offer only")
646648 else {
647649 let baseHeight = if ((blockEnd == 0))
648650 then 0
649651 else height
650652 if (!(acceptedAssetIds(assetId)))
651653 then throw("Something went wrong!")
652654 else if (!(validateMinSell(assetId, price)))
653655 then throw("Something went wrong!")
654656 else {
655657 let checkUser = validateUser(caller)
656658 if ((checkUser != ""))
657659 then throw(checkUser)
658660 else {
659661 let amountSold = getIntegerByKey(keyIssued(caller, artId))
660662 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
661663 if ((maxMint > 100))
662664 then throw("100 editions max per artwork")
663665 else if (if ((amountSold != 0))
664666 then (amountSold == maxCanSell)
665667 else false)
666668 then throw("Max edition reached.")
667669 else if (if ((amountSold > 0))
668670 then (maxCanSell != maxMint)
669671 else false)
670672 then throw("Cannot change maximum issuable anymore")
671673 else if (if ((bidNbr > 0))
672674 then (maxCanSell != maxMint)
673675 else false)
674676 then throw("Cannot change maximum issuable with active orders")
675677 else {
676678 let sellStatus = if (if ((price > 0))
677679 then (maxMint > 0)
678680 else false)
679681 then true
680682 else false
681683 [BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId), IntegerEntry(keyEndSale(caller, artId), (baseHeight + blockEnd))]
682684 }
683685 }
684686 }
685687 }
686688 }
687689 }
688690 }
689691
690692
691693
692694 @Callable(i)
693695 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
694696
695697
696698
697699 @Callable(i)
698700 func setBid (artId,issuer) = {
699- let $t02912929167 = idCallerDate(i)
700- let id = $t02912929167._1
701- let caller = $t02912929167._2
702- let date = $t02912929167._3
703- let $t02917229208 = isPayment(i)
704- let payment = $t02917229208._1
705- let amount = $t02917229208._2
701+ let $t02734627384 = idCallerDate(i)
702+ let id = $t02734627384._1
703+ let caller = $t02734627384._2
704+ let date = $t02734627384._3
705+ let $t02738927425 = isPayment(i)
706+ let payment = $t02738927425._1
707+ let amount = $t02738927425._2
706708 let assetId = if (!(isDefined(payment.assetId)))
707709 then "WAVES"
708710 else toBase58String(value(payment.assetId))
709711 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
710712 if (if ((blockEnd != 0))
711713 then (height >= blockEnd)
712714 else false)
713715 then throw("Sale ended.")
714716 else {
715717 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
716718 if (!(acceptedAssetIds(assetId)))
717719 then throw("asset not accepted")
718720 else if (!(validateMinSell(assetId, amount)))
719721 then throw("Wrong min sell")
720722 else {
721723 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
722724 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
723725 if ((0 >= maxCanSell))
724726 then throw("No max edition set for this artwork")
725727 else if ((amountSold >= maxCanSell))
726728 then throw("Sold out, you cannot bid")
727729 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
728730 }
729731 }
730732 }
731733
732734
733735
734736 @Callable(i)
735737 func acceptBid (artId,issuer,bidId,bidOwner) = {
736738 let caller = toBase58String(i.caller.bytes)
737739 if ((caller != issuer))
738740 then throw("You cannot do this action")
739741 else buyMint(i, artId, issuer, bidId, bidOwner)
740742 }
741743
742744
743745
744746 @Callable(i)
745747 func cancelBid (artId,issuer,bidId,bidOwner) = {
746- let $t03063530694 = idCallerDate(i)
747- let id = $t03063530694._1
748- let caller = $t03063530694._2
749- let date = $t03063530694._3
748+ let $t02885228911 = idCallerDate(i)
749+ let id = $t02885228911._1
750+ let caller = $t02885228911._2
751+ let date = $t02885228911._3
750752 if (if ((caller != bidOwner))
751753 then (caller != issuer)
752754 else false)
753755 then throw("You cannot do this action")
754756 else {
755757 let returnMoneyTo = if ((caller == issuer))
756758 then bidOwner
757759 else caller
758760 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
759761 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
760762 let bidData = getStringByKey((bidDataKey + "_OPEN"))
761763 if ((bidData == ""))
762764 then throw("Bid not found")
763765 else {
764766 let bidDataArr = split(bidData, "_")
765767 let assetId = getBidAssetId(bidDataArr[0])
766768 let bidStatus = "CANCELED"
767769 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
768770 }
769771 }
770772 }
771773
772774

github/deemru/w8io/873ac7e 
93.35 ms