tx · BUWmPvsmKTKiion78DmS9xZrAgfxnnbvdQAyyGR6M7SA

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.01900000 Waves

2023.03.24 07:00 [2503580] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "BUWmPvsmKTKiion78DmS9xZrAgfxnnbvdQAyyGR6M7SA", "fee": 1900000, "feeAssetId": null, "timestamp": 1679630403997, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "27ZBB5YRVd5Z5miTCHDf2oLZuS2ha7tmnN3h4Djh8cMFxHtBPkSwbgRzZwk3CwTdYoE9cwYnzEfDMBkD1vmsayzu" ], "script": "base64:BgKKFQgCEgQKAggIEhAKDggICAgICAgICAgICAEIEg8KDQgICAgICAgICAgIAQgSBgoECAgICBIECgIICBIICgYIAQEIAQgSBAoCCAgSBAoCCAgSBwoFCAgICAgSBgoECAgICCIOZ2V0U3RyaW5nQnlLZXkiA2tleSIIdW5pdFRlc3QiCW9yYWNsZUZlZSIIc2lnbkRhcHAiC2ZlZVJlY2VpdmVyIgh1c2VyRGFwcCINd2hpdGVsaXN0RGFwcCILc2lnbkFzc2V0SWQiC3VzZG5Bc3NldElkIgt1c2R0QXNzZXRJZCIMd2F2ZXNBc3NldElkIgVjaHJpcyIZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZSIPZ2V0SW50ZWdlckJ5S2V5Ig5jaGVja1doaXRlbGlzdCIPZ2V0Qm9vbGVhbkJ5S2V5IgdzaWduQ3V0Igt1c2RuV2F2ZUN1dCIOZGVmYXVsdExpY2VuY2UiEmRlZmF1bHRIYXNoTGljZW5jZSILZGFwcFJ1bm5pbmciDm1haW50ZW5hbmNlTVNHIg11c2VyU3VzcGVuZGVkIgt1c2VyUmVtb3ZlZCIQdXNlclVucmVnaXN0ZXJlZCILdXNlckFsbG93ZWQiGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UiFGNoZWNrU2lnbkNlcnRpZmljYXRlIgZzaWduSUQiBU93bmVyIgpzaGEyNTZIYXNoIgckbWF0Y2gwIgFhIgt2YWxpZGF0ZUNJRCIDY2lkIgx2YWxpZGF0ZUhhc2giBGhhc2giDWtleVVzZXJTdGF0dXMiBmNhbGxlciIHa2V5RGF0ZSIFYXJ0SWQiB2tleU5hbWUiB2tleURlc2MiDWtleURpc3BsYXlDaWQiDWtleUV4cG9ydEhhc2giDGtleUV4cG9ydENpZCIKa2V5TWF4TWludCIJa2V5U2lnbklEIglrZXlJc3N1ZWQiCWtleU9uU2FsZSIOa2V5TGljZW5jZUhhc2giDWtleUxpY2VuY2VDaWQiB2tleVRhZ3MiB2tleVR5cGUiB2tleU5vdGUiCmtleUNyYXdsZXIiDGtleVJveWFsdGllcyIIa2V5UHJpY2UiCmtleUVuZFNhbGUiEmtleUFzc2V0SWRBY2NlcHRlZCIHa2V5RmxhZyISa2V5QXJ0aXN0QWdlbnRBZGRyIgphcnRpc3RBZGRyIhRrZXlQcmltYXJ5U2hhcmVBZ2VudCIYa2V5QXJ0aXN0UHVibGljQWdlbnRBZGRyIhprZXlQcmltYXJ5U2hhcmVQdWJsaWNBZ2VudCIRa2V5SGFzaEJ5VHhpZEFkZHIiBHR4aWQiDmtleU93bmVyQnlIYXNoIg1rZXlpZEJ5U2lnbmlkIgZzaWduSWQiEmtleVR4aWRCeUhhc2hPd25lciIOdmFsaWRhdGVBbGxDSUQiCmNpZERpc3BsYXkiCWNpZEV4cG9ydCIKY2lkTGljZW5jZSIPdmFsaWRhdGVBbGxIYXNoIgxzaGEyNTZFeHBvcnQiDXNoYTI1NkxpY2VuY2UiDnZhbGlkYXRlU3RyaW5nIgNzdHIiA21heCIMdmFsaWRhdGVVc2VyIgp1c2VyU3RhdHVzIgpzZXRMSWNlbmNlIhN2YWxpZGF0ZUFydHdvcmtEYXRhIgpsaWNlbmNlQ0lEIgtsaWNlbmNlSGFzaCIEbmFtZSILZGVzY3JpcHRpb24iBHRhZ3MiCXJveWFsdGllcyIJY2hlY2tVc2VyIglpc1BheW1lbnQiAWkiB3BheW1lbnQiBmFtb3VudCIPdmFsaWRhdGVQYXltZW50IgskdDA5MTgwOTIxNiIHYXNzZXRJZCILaXNBcnRNaW50ZWQiCWFkZHJUb1VzZSIBYiIUdmFsaWRhdGVQcmljZUFzc2V0SWQiDHByaWNlQXNzZXRJZCIMYXJ0d29ya1ByaWNlIgskdDA5ODA0OTg0MCIQYWNjZXB0ZWRBc3NldElkcyIPdmFsaWRhdGVNaW5TZWxsIgVwcmljZSIMbWluU2VsbFdhdmVzIgttaW5TZWxsVXNkbiILbWluU2VsbFNpZ24iDWdldEJpZEFzc2V0SWQiFmdldFByaWNlQXNzZXRJZEZyb21CaWQiCmJpZERhdGFLZXkiB2JpZERhdGEiCmJpZERhdGFBcnIiCWJpZEFtb3VudCIKYmlkQXNzZXRJZCIVaWRDYWxsZXJEYXRlU3BvbnNvcmVkIgZwdWJLZXkiC2lzU3BvbnNvcmVkIhNnZXRfc3BvbnNvcmVkX3dhdmVzIgxpZENhbGxlckRhdGUiB2J1eU1pbnQiBmlzc3VlciIFYmlkSWQiCGJpZE93bmVyIg0kdDAxMzAzNDEzMTA0IgJpZCIEZGF0ZSIKbmV3X2NhbGxlciIFaXNCaWQiCGJsb2NrRW5kIg5jYWxsZXJJc0lzc3VlciIIdG90YWxORlQiC2FydHdvcmtOYW1lIghpc09uU2FsZSIKYW1vdW50U29sZCIKbWF4Q2FuU2VsbCINJHQwMTQ5ODAxNTE3MiIFYWdlbnQiCmFnZW50U2hhcmUiC3B1YmxpY0FnZW50IhBwdWJsaWNBZ2VudFNoYXJlIg1pc1doaXRlbGlzdGVkIgNjdXQiDWFtb3VudEZvclNpZ24iDmFtb3VudEZvckFnZW50IhRhbW91bnRGb3JQdWJsaWNBZ2VudCIQYW1vdW50Rm9yQ3JlYXRvciINbmV3QW1vdW50U29sZCIJaXNzdWVNZXRhIghpc3N1ZU5GVCIFaWRORlQiCnNlbGxTdGF0dXMiCnJlY2VpdmVORlQiCmFzc2V0SWRCaWQiCWJpZERlbE9sZCIJYmlkVXBkYXRlIgdzb2xkS2V5Iglzb2xkVmFsdWUiCHNvbGREYXRhIhRjb21taXNzaW9uc1dpdGhBZ2VudCIaY29tbWlzc2lvbnNXaXRoUHVibGljQWdlbnQiCnR4VG9DYWxsZXIiBmJ1eVJlcyIIYXNTdHJpbmciAmJ2IgNidjAiBmludm9rZSIDdmFsIgR0eXBlIgdjcmF3bGVyIg0kdDAyMDM1MjIwNDI1Ig0kdDAyMDUyNjIwNTk1Ig92YWxpZGF0ZUFydHdvcmsiEHdoaXRlbGlzdGVkX2Ryb3AiDSR0MDIwODk0MjA5NzgiCmVudHJ5RXhpc3QiCWhhc2hFeGlzdCIPaXNTaWduQ2VydGlmaWVkIhdkZWNyZWFzZV93aGl0ZWxpc3RfZHJvcCINJHQwMjQwMTYyNDA4NiINJHQwMjQwOTYyNDE2NSIEZmxhZyIEYWRkciIEbm90ZSINJHQwMjU3OTYyNTgzMCINJHQwMjYyNjYyNjMwMCIMZGF0YVRvRGVsZXRlIgdtYXhNaW50Ig0kdDAyOTEzNjI5MjA2IgZiaWROYnIiCmJhc2VIZWlnaHQiDSR0MDMxNTkyMzE2MzIiDSR0MDMxNjM3MzE2NzMiDSR0MDMyODkzMzI5NjQiB2NhbGxlcjEiDSR0MDMzMTk5MzMyNjAiDXJldHVybk1vbmV5VG8iCWJpZFN0YXR1cyICdHgiCHZlcmlmaWVyIgNpbnZOAQFhAQFiCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAWICAAABYwcAAWQJAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX29yYWNsZV9mZWUAAWUJAQV2YWx1ZQEJAKYIAQkBAWEBAhFjb25mX3NpZ253ZWJfZGFwcAABZgkBAWEBAhFjb25mX2ZlZV9yZWNlaXZlcgABZwMFAWMJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX3VzZXJzX2RhcHAAAWgJAQV2YWx1ZQEJAKYIAQkBAWEBAhNjb25mX3doaXRlbGlzdF9kYXBwAAFpCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAFqCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0ROAAFrCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0RUAAFsAQAAAW0JAQFhAQIMY29uZl9hZG1pbl8xAQFuAQFiCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUBZAUBYgIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEBbwEBYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFiAAABAXABAWIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBaAUBYgAAAQFxAQFiCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFAWIHAAFyAAcAAXMACgABdAkBAWEBAhRjb25mX2RlZmF1bHRfbGljZW5jZQABdQkBAWEBAhljb25mX2RlZmF1bHRfbGljZW5jZV9oYXNoAAF2CQELdmFsdWVPckVsc2UCCQCbCAIFAWcCFGNvbmZfZGFwcF9pc19ydW5uaW5nBgABdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnAhRjb25mX21haW50ZW5hbmNlX21zZwIAAAF4AglTVVNQRU5ERUQAAXkCB1JFTU9WRUQAAXoCDFVOUkVHSVNURVJFRAABQQIHQUxMT1dFRAABQgkBAW4BCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBBQFpAQFDAwFEAUUBRgQBRwkAnQgCBQFlCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUBRAIBXwUBRQMJAAECBQFHAgZTdHJpbmcEAUgFAUcDCQEIY29udGFpbnMCBQFIBQFGBgcHAQFJAQFKAwkBCGNvbnRhaW5zAgUBSgIBLwMDCQBmAgBMCQCxAgEFAUoJAAACCQCxAgEJAJEDAgkAtQkCBQFKAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFAUoCAS8AAQcHAQFLAQFMCQAAAgkAsQIBBQFMAEABAU0BAU4JAKwCAgIMdXNlcl9zdGF0dXNfBQFOAQFPAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9kYXRlXwUBUAIBXwUBTgEBUQIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfbmFtZV8FAVACAV8FAU4BAVICAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X2Rlc2NfBQFQAgFfBQFOAQFTAgFOAVAJAKwCAgkArAICCQCsAgICEGFydF9kaXNwbGF5X2NpZF8FAVACAV8FAU4BAVQCAU4BUAkArAICCQCsAgIJAKwCAgIQYXJ0X2V4cG9ydF9oYXNoXwUBUAIBXwUBTgEBVQIBTgFQCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FAVACAV8FAU4BAVYCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQFQAgFfBQFOAQFXAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9zaWduaWRfBQFQAgFfBQFOAQFYAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9pc3N1ZWRfBQFQAgFfBQFOAQFZAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQFQAgFfBQFOAQFaAgFOAVAJAKwCAgkArAICCQCsAgICEWFydF9saWNlbmNlX2hhc2hfBQFQAgFfBQFOAQJhYQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQFQAgFfBQFOAQJhYgIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfdGFnc18FAVACAV8FAU4BAmFjAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF90eXBlXwUBUAIBXwUBTgECYWQCAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQFQAgFfBQFOAQJhZQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfY3Jhd2xlcl9jaWRfBQFQAgFfBQFOAQJhZgIBTgFQCQCsAgIJAKwCAgkArAICAg5hcnRfcm95YWx0aWVzXwUBUAIBXwUBTgECYWcCAU4BUAkArAICCQCsAgIJAKwCAgIKYXJ0X3ByaWNlXwUBUAIBXwUBTgECYWgCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X2VuZHNhbGVfBQFQAgFfBQFOAQJhaQIBTgFQCQCsAgIJAKwCAgkArAICAhJhcnRfYXNzZXRBY2NlcHRlZF8FAVACAV8FAU4BAmFqAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUBUAIBXwUBTgECYWsBAmFsCQCsAgICDWFydGlzdF9hZ2VudF8FAmFsAQJhbQECYWwJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQJhbAECYW4BAmFsCQCsAgICFGFydGlzdF9wdWJsaWNfYWdlbnRfBQJhbAECYW8BAmFsCQCsAgICHGFydGlzdF9wdWJsaWNfYWdlbnRfcHJpbWFyeV8FAmFsAQJhcAIBTgJhcQkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUCYXECAV8FAU4BAmFyAQFGCQCsAgICEmdldF9vd25lcl9ieV9oYXNoXwUBRgECYXMCAU4CYXQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUCYXQCAV8FAU4BAmF1AgFGAU4JAKwCAgIXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JANgEAQkA1BYBCQCbAwEJAKwCAgUBRgUBTgECYXYDAmF3AmF4AmF5AwkBASEBCQEBSQEFAmF3CQACAQIRV3JvbmcgRGlzcGxheSBDSUQDCQEBIQEJAQFJAQUCYXgJAAIBAhBXcm9uZyBFeHBvcnQgQ0lEAwMJAQIhPQIFAmF5AgAJAQEhAQkBAUkBBQJheQcJAAIBAhFXcm9uZyBMaWNlbmNlIENJRAYBAmF6AgJhQQJhQgMJAQEhAQkBAUsBBQJhQQkAAgECGEV4cG9ydCBIYXNoIDY0IGNoYXIuIG1heAMJAQEhAQkBAUsBBQJhQgkAAgECGUxpY2VuY2UgSGFzaCA2NCBjaGFyLiBtYXgGAQJhQwICYUQCYUUDCQAAAgkAsQIBBQJhRAAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUCYUQFAmFFCQACAQkArAICBQJhRAIMIGlzIHRvbyBsb25nBgECYUYBAU4EAmFHCQELdmFsdWVPckVsc2UCCQCdCAIFAWcJAQFNAQUBTgUBegMDCQAAAgUCYUcFAXoGCQAAAgUCYUcFAUECLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUCYUcFAXgCEUFjY291bnQgc3VzcGVuZGVkAwkAAAIFAmFHBQF5Ag9BY2NvdW50IHJlbW92ZWQCAAECYUgCAmF5AmFCBAFKAwkAAAIJALECAQUCYXkAAAUBdAUCYXkEAUwDCQAAAgkAsQIBBQJhQgAABQF1BQJhQgkAlAoCBQFKBQFMAQJhSQoBTgJhdwJheAJhSgJhQQJhSwJhTAJhTQJhTgJhTwQCYVAJAQJhRgEFAU4DCQECIT0CBQJhUAIACQACAQUCYVADCQAAAgkAsQIBBQJhdwAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQECYXYDBQJhdwUCYXgFAmFKCQACAQIQUHJvYmxlbSB3aXRoIENJRAMJAQEhAQkBAmF6AgUCYUEFAmFLCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBAmFDAgUCYUwAZAkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBAmFDAgUCYU0A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDCQBmAgAABQJhTwYJAGYCBQJhTwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQMJAGYCCQCQAwEJALUJAgUCYU4CASwABQkAAgECCzUgdGFncyBtYXguAgABAmFRAQJhUgMJAAACCQCQAwEIBQJhUghwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQCYVMJAQV2YWx1ZQEJAJEDAggFAmFSCHBheW1lbnRzAAAEAmFUCQEFdmFsdWUBCAUCYVMGYW1vdW50CQCUCgIFAmFTBQJhVAECYVUBAmFSBAJhVgkBAmFRAQUCYVIEAmFTCAUCYVYCXzEEAmFUCAUCYVYCXzIEAmFXAwMJAQlpc0RlZmluZWQBCAUCYVMHYXNzZXRJZAkAAAIIBQJhUwdhc3NldElkBQFpBwgFAmFTB2Fzc2V0SWQJAAIBAitPbmx5IFNJR04gdG9rZW4gYWNjZXB0ZWQgYXMgdHJhbnNhY3Rpb24gZmVlAwkBAiE9AgUCYVQFAUIJAAIBCQCsAgICGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAKQDAQUBQgkAlAoCBQJhVAUCYVcBAmFYAgJhWQFQBAFHCQCaCAIFBHRoaXMJAQFYAgUCYVkFAVADCQABAgUBRwIDSW50BAJhWgUBRwMJAQIhPQIFAmFaAAAGBwcBAmJhAwJhUgJiYgJiYwQCYmQJAQJhUQEFAmFSBAJhUwgFAmJkAl8xBAJhVAgFAmJkAl8yBAJhVwMJAQEhAQkBCWlzRGVmaW5lZAEIBQJhUwdhc3NldElkBQR1bml0AwMJAGYCCQCxAgEFAmJiAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQJhUwdhc3NldElkBQJiYgcIBQJhUwdhc3NldElkCQACAQIOV3JvbmcgYXNzZXQgaWQDAwkAAAIFAmFXBQR1bml0CQECIT0CBQJiYgIABwkAAgECDldyb25nIGFzc2V0IGlkAwkBAiE9AgUCYmMFAmFUCQACAQITUGF5bWVudCBkb24ndCBtYXRjaAkAlAoCBQJhVAUCYVcBAmJlAQJhVwMDAwMDCQECIT0CBQJhVwkA2AQBBQFpCQECIT0CBQJhVwkA2AQBBQFsBwkBAiE9AgUCYVcCBVdBVkVTBwkBAiE9AgUCYVcJANgEAQUBagcJAQIhPQIFAmFXCQDYBAEFAWsHCQACAQImT25seSBTSUdOLCBVU0ROLFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQGAQJiZgICYVcCYmcEAmJoAwUBYwAKCQEBbgECDndhdmVzX21pbl9zZWxsBAJiaQDAhD0EAmJqAwUBYwABCQBoAgUBQgACAwMDAwMDCQAAAgUCYVcJANgEAQUBagkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBawkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBaQkAZgIFAmJqBQJiZwcJAQIhPQIFAmJnAAAHBgMDAwkAAAIFAmFXCQDYBAEFAWwGCQAAAgUCYVcCBVdBVkVTCQBmAgUCYmgFAmJnBwkBAiE9AgUCYmcAAAcJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UGAQJiawECYVcDCQAAAgUCYVcCBVdBVkVTBQR1bml0CQDZBAEFAmFXAQJibAECYm0EAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOAwkAAAIFAmJuAgAJAAIBAg1CaWQgbm90IGZvdW5kBAJibwkAtQkCBQJibgIBXwQCYnAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibwABBAJicQkBAmJrAQkAkQMCBQJibwAAAwkAZwIAAAUCYnAJAAIBAgxXcm9uZyBhbW91bnQJAJQKAgUCYnAFAmJxAQJicgICYVICYnMDCQEBIQEFAXYJAAIBBQF3BAJidAMJAQIhPQIFAmJzAgAJAQt2YWx1ZU9yRWxzZQIJAQFwAQkArAICCQClCAEJAKcIAQkA2QQBBQJicwIJX2ZyZWVfdHhzAAAAAAQBTgMDCQAAAgkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzCQBmAgUCYnQAAAcJAKUIAQkApwgBCQDZBAEFAmJzCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzBAJidQMDCQECIT0CBQJicwIACQBmAgUCYnQAAAcJAPwHBAUBaAIJdXNlRnJlZVR4CQDMCAIJAKUIAQkApwgBCQDZBAEFAmJzBQNuaWwFA25pbAUEdW5pdAkAlgoECQDYBAEIBQJhUg10cmFuc2FjdGlvbklkBQFOCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCYnQBAmJ2AQJhUgMJAQEhAQUBdgkAAgEFAXcJAJUKAwkA2AQBCAUCYVINdHJhbnNhY3Rpb25JZAkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwgFCWxhc3RCbG9jawl0aW1lc3RhbXABAmJ3BgJhUgFQAmJ4AmJ5AmJ6AmJzBAJiQQkBAmJyAgUCYVIFAmJzBAJiQggFAmJBAl8xBAFOCAUCYkECXzIEAmJDCAUCYkECXzMEAmJ0CAUCYkECXzQDBgkAAgEJAKQDAQUCYnQEAmJEAwMJAAACCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzCQClCAEFBHRoaXMJAGYCBQJidAAABwkApQgBCQCnCAEJANkEAQUCYnMJANgEAQgIBQJhUgZjYWxsZXIFYnl0ZXMDBgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFAmJEAgMgLyAFAmJ4AgMgLyAFAmJ6AgMgLyAFAmJzBAJiRQMDAwkAAAIFAU4FAmJ4CQECIT0CBQJiegIABwkBAiE9AgUCYnkCAAcGBwQCYkYJAQFvAQkBAmFoAgUBTgUBUAMDAwkBAiE9AgUCYkYAAAkAZwIFBmhlaWdodAUCYkYHCQEBIQEFAmJFBwkAAgECC1NhbGUgZW5kZWQuBAJiRwkAAAIFAU4FAmJ4BAJiSAkBAW8BAhB0b3RhbF9uZnRfaXNzdWVkBAFECQEBYQEJAQFXAgUCYngFAVAEAmJJCQEBYQEJAQFRAgUCYngFAVADCQAAAgUCYkkCAAkAAgECEUFydCBkb2Vzbid0IGV4aXN0BAJiSgkBAXEBCQEBWQIFAmJ4BQFQBAJiSwkBAW8BCQEBWAIFAmJ4BQFQBAJiYwMFAmJHCQBoAgUBQgACCQEBbwEJAQJhZwIFAmJ4BQFQBAJiYgMFAmJHCQDYBAEFAWkJAQFhAQkBAmFpAgUCYngFAVAEAmJMCQEBbwEJAQFWAgUCYngFAVADAwMJAQEhAQUCYkUJAQEhAQUCYkcHAwMJAGcCAAAFAmJjBgkBASEBBQJiSgYJAGcCAAAFAmJMBwkAAgECEEFydCBub3QgZm9yIHNhbGUDAwMJAQEhAQUCYkUFAmJHBwkAZwIAAAUCYkwHCQACAQIUTWF4IGlzc3VhYmxlIG5vdCBzZXQEAmFQCQECYUYBBQJieAMDBQJiRQkBAiE9AgUCYVACAAcJAAIBBQJhUAQCYm0JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIEYmlkXwUBUAIBXwUCYngCAV8FAmJ6AgFfBQJieQQCYk0DBQJiRQkBAmJsAQUCYm0JAQJiYQMFAmFSBQJiYgUCYmMEAmFUCAUCYk0CXzEEAmFXCAUCYk0CXzIEAmJOCQELdmFsdWVPckVsc2UCCQCdCAIFAWcJAQJhawEFAmJ4BQFmBAJiTwkBC3ZhbHVlT3JFbHNlAgkAmggCBQFnCQECYW0BBQJieAAABAJiUAkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnCQECYW4BBQJieAUBZgQCYlEJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBZwkBAmFvAQUCYngAAAQCYlIJAQFwAQUCYngEAmJTAwkAZgIFAmJSBQZoZWlnaHQAAAMJAAACBQJhVwUBaQUBcgUBcwQCYlQJAGsDBQJhVAUCYlMAZAQCYlUDAwMJAQIhPQIFAmJOBQFmCQBmAgUCYk8AAAcJAGYCBQZoZWlnaHQFAmJSBwkAawMFAmFUBQJiTwCQTgAABAJiVgMDAwkBAiE9AgUCYlAFAWYJAGYCBQJiUQAABwkAZgIFBmhlaWdodAUCYlIHCQBrAwUCYVQFAmJRAJBOAAAEAmJXCQBlAgUCYVQFAmJUAwkAAAIFAmJLBQJiTAkAAgECDEFydCBzb2xkIG91dAQCYlgJAGQCBQJiSwABBAJiWQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCUNyZWF0b3I6IAUCYngCCiwKIEFydElEOiAFAVACCywKIFNpZ25JRDogBQFEAhEsCiBBcnR3b3JrIG5hbWU6IAUCYkkCCiwKIElzc3VlOiAJAKQDAQUCYlgCAS8JAKQDAQUCYkwEAmJaCQDCCAUJAKwCAgIDU0FfCQCkAwEJAGQCBQJiSAABBQJiWQABAAAHBAJjYQkAuAgBBQJiWgQCY2IDAwkAAAIFAmJYBQJiTAYJAQEhAQUCYkoHBgQCY2MDAwMJAAACBQFOBQJieAkBAiE9AgUCYnoCAAcJAQIhPQIFAmJ5AgAHCQERQGV4dHJOYXRpdmUoMTA2MikBBQJieggFAmFSBmNhbGxlcgQCY2QDCQEBIQEJAQlpc0RlZmluZWQBBQJhVwIFV0FWRVMJANgEAQkBBXZhbHVlAQUCYVcEAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOBAJjZQkBC0RlbGV0ZUVudHJ5AQkArAICBQJibQIFX09QRU4EAmNmCQELU3RyaW5nRW50cnkCCQCsAgIFAmJtAgdfQ0xPU0VECQCsAgIJAKwCAgUCYm4CAV8JAKQDAQUCYkMEAmNnCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCWFydF9zb2xkXwkApAMBBQJiWAIEX29mXwkApAMBBQJiTAIBXwUBUAIBXwUCYngEAmNoAwkBASEBBQJiRQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQFOAgFfCQCkAwEFAmJDAgFfBQJiQgIBXwkApAMBBQJiYwIBXwUCYmICAV8JANgEAQUCY2EJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBBQJjYwIBXwkApAMBBQJiQwIBXwUCYkICAV8JAKQDAQUCYVQCAV8FAmNkAgFfCQDYBAEFAmNhBAJjaQkBC1N0cmluZ0VudHJ5AgUCY2cFAmNoBAJjagMJAQIhPQIFAmJVAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAWYJAGUCBQJiVAUCYlUFAmFXCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJiTgUCYlUFAmFXBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAWYFAmJUBQJhVwUDbmlsBAJjawMJAQIhPQIFAmJWAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAmJQBQJiVgUCYVcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAmJ4CQBlAgUCYlcFAmJWBQJhVwUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJieAUCYlcFAmFXBQNuaWwEAmNsAwkAZgIFAmJ0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAU4AAAUEdW5pdAUDbmlsBQNuaWwEAmNtCQDOCAIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFAmJ4BQFQBQJiWAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgICBG5mdF8JANgEAQUCY2EFAmNnCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhB0b3RhbF9uZnRfaXNzdWVkCQBkAgUCYkgAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFoAgUCYngFAVAAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBAVkCBQJieAUBUAUCY2IJAMwIAgUCYloJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY2MAAQUCY2EFA25pbAUCY2oFAmNrBQJjbAMFAmJFCQDMCAIFAmNpCQDMCAIFAmNmCQDMCAIFAmNlBQJjbQkAzAgCBQJjaQUCY20BAmNuAQJjbwQBRwUCY28DCQABAgUBRwIGU3RyaW5nBAJjcAUBRwUCY3AJAAIBAiRTcG9uc29yZWQgUHVibGljIEtleSBTdHJpbmcgZXhwZWN0ZWQKAmNxAQdzZXRDb25mAgFiAmNyBAFOCQClCAEIBQJjcQZjYWxsZXIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQFtCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQFOAwkBCGNvbnRhaW5zAgUBYgIFY29uZl8JAMwIAgkBC1N0cmluZ0VudHJ5AgUBYgUCY3IFA25pbAkAAgECIEVudHJpZXMgc3RhcnRpbmcgd2l0aCBjb25mXyBvbmx5CQACAQIiWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdGhpcwJhUgEKYWRkQXJ0d29yaw4BRgFEAmFMAmFNAmFOAmNzAmF3AmFBAmF4AmFCAmF5AmN0AmFPAmJzBAJjdQkBAmJyAgUCYVIFAmJzBAFQCAUCY3UCXzEEAU4IBQJjdQJfMgQCYkMIBQJjdQJfMwQCYnQIBQJjdQJfNAMJAQEhAQkBAUsBBQFGCQACAQIkSGFzaCBzaG91bGQgYmUgNjQgY2hhcmFjdGVycyBtYXhpbXVtBAJjdgkBAmFIAgUCYXkFAmFCBAJhSggFAmN2Al8xBAJhSwgFAmN2Al8yBAJjdwkBAmFJCgUBTgUCYXcFAmF4BQJhSgUCYUEFAmFLBQJhTAUCYU0FAmFOBQJhTwMJAQIhPQIFAmN3AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEAmN4CQBmAgkBAXABCQCsAgIFAU4CC19mcmVlX2Ryb3BzAAAEAmN5AwUCY3gJAJQKAgAABQFECQECYVUBBQJhUgQCYVQIBQJjeQJfMQQCYVcIBQJjeQJfMgMJAQEhAQkBCWlzRGVmaW5lZAEFAmFUCQACAQIUU29tZXRoaW5nIHdlbnQgd3JvbmcEAmN6CQEBYQEJAQJhdQIFAUYFAU4DCQECIT0CBQJjegIACQACAQIUWW91IGFscmVhZHkgYWRkZWQgaXQEAmNBCQEBYQEJAQJhcgEFAUYDCQECIT0CBQJjQQIACQACAQIXSGFzaCBhbHJlYWR5IHJlZ2lzdGVyZWQEAmNCCQEBQwMFAUQFAU4FAUYDCQEBIQEFAmNCCQACAQIsU2lnbiBDZXJ0aWZpY2F0ZSBub3QgZm91bmQgZm9yIHRoaXMgYWRkcmVzcy4EAmNDAwUCY3gJAPwHBAUBaAILdXNlRnJlZURyb3AJAMwIAgUBTgUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCY0MFAmNDBAJjbAMJAGYCBQJidAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFOAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFyAQUBRgUBTgkAzAgCCQELU3RyaW5nRW50cnkCCQECYXUCBQFGBQFOBQFQCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBTwIFAU4FAVAFAmJDCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFRAgUBTgUBUAUCYUwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVICBQFOBQFQBQJhTQkAzAgCCQELU3RyaW5nRW50cnkCCQEBUwIFAU4FAVAFAmF3CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFVAgUBTgUBUAUCYXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVQCBQFOBQFQBQJhQQkAzAgCCQELU3RyaW5nRW50cnkCCQEBWgIFAU4FAVAFAmFLCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIFAU4FAVAFAmFKCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYwIFAU4FAVAFAmNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYgIFAU4FAVAFAmFOCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVgIFAU4FAVAAAAkAzAgCCQELU3RyaW5nRW50cnkCCQEBVwIFAU4FAVAFAUQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUBTgUBUAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEBWQIFAU4FAVAHCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhcwIFAU4FAUQFAVAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFwAgUBTgUBUAUBRgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWUCBQFOBQFQBQJjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFmAgUBTgUBUAUCYU8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAWYFAmFUBQFpBQNuaWwFAmNsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFSAQ11cGRhdGVBcnR3b3JrDQJhcQJhTAJhTQJhTgJjcwJhdwJhQQJheAJhQgJheQJjdAJhTwJicwMJAQEhAQUBdgkAAgEFAXcEAmNECQECYnICBQJhUgUCYnMEAmJCCAUCY0QCXzEEAU4IBQJjRAJfMgQCYkMIBQJjRAJfMwQCYnQIBQJjRAJfNAQCY0UJAQJhSAIFAmF5BQJhQgQCYUoIBQJjRQJfMQQCYUsIBQJjRQJfMgQCY3cJAQJhSQoFAU4FAmF3BQJheAUCYUoFAmFBBQJhSwUCYUwFAmFNBQJhTgUCYU8DCQECIT0CBQJjdwIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAJjegkBAWEBCQEBUQIFAU4FAmFxAwkAAAIFAmN6AgAJAAIBAg9FbnRyeSBub3QgZm91bmQEAmNGCQEBYQEJAQJhagIFAU4FAmFxAwkAAAIFAmNGAgdJTExFR0FMCQACAQIdQ2Fubm90IHVwZGF0ZSBJTExFR0FMIGFydHdvcmsDCQEBIQEJAQJhWAIFAU4FAmFxBAJjbAMJAGYCBQJidAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFOAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVECBQFOBQJhcQUCYUwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVICBQFOBQJhcQUCYU0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVMCBQFOBQJhcQUCYXcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVUCBQFOBQJhcQUCYXgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVQCBQFOBQJhcQUCYUEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgUBTgUCYXEFAmFKCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAgUBTgUCYXEFAmFLCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYgIFAU4FAmFxBQJhTgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWMCBQFOBQJhcQUCY3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFlAgUBTgUCYXEFAmN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWYCBQFOBQJhcQUCYU8FA25pbAUCY2wJAAIBAg5BbHJlYWR5IG1pbnRlZAJhUgELZmxhZ0FydHdvcmsEAVACY0cCY0YCY0gEAmNJCQECYnYBBQJhUgQCYkIIBQJjSQJfMQQBTggFAmNJAl8yAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICB0NPTlNFTlQJAMwIAgIACQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUCY0YJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFqAgUCY0cFAVAFAmNGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZAIFAmNHBQFQBQJjSAUDbmlsCQACAQkArAICAg5Vbmtub3cgc3RhdHVzIAUCY0YJAAIBAhNZb3UgYXJlIG5vdCBhbGxvd2VkAmFSAQ1kZWxldGVBcnR3b3JrAgFQAmNHBAJjSgkBAmJ2AQUCYVIEAmJCCAUCY0oCXzEEAU4IBQJjSgJfMgQCYVkDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQFtCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQFOBQJjRwUBTgQCY3oJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkBAWEBCQEBUQIFAmFZBQFQAiBObyBhcnQgbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwMJAAACBQJjegIACQACAQIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MEAUYJAQFhAQkBAmFwAgUCYVkFAVADCQAAAgUBRgIACQACAQIlTm8gYXJ0IGhhc2ggbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwQBRAkBAWEBCQEBVwIFAmFZBQFQAwkAAAIFAUQCAAkAAgECE05vIFNJR04gSUQgbWF0Y2hpbmcEAmNLCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFPAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVECBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBUgIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFTAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVUCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBVAIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFaAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFhAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFjAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFiAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVYCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBVwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFYAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVkCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWoCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWcCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWkCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYXIBBQFGCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhcwIFAmFZBQFECQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhdQIFAUYFAmFZCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhaAIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhZAIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhZQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhZgIFAmFZBQFQBQNuaWwDCQEBIQEJAQJhWAIFAmFZBQFQAwkBASEBBQF2CQACAQUBdwUCY0sDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQFtCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQFOBQJjSwkAAgECKEFydCBhbHJlYWR5IG1pbnRlZCwgeW91IGNhbm5vdCBkZWxldGUgaXQCYVIBC3NlbGxBcnR3b3JrBgFQAmJnAmNMAmFXAmJGAmJzBAJjTQkBAmJyAgUCYVIFAmJzBAJiQggFAmNNAl8xBAFOCAUCY00CXzIEAmJDCAUCY00CXzMEAmJ0CAUCY00CXzQEAmJJCQEBYQEJAQFRAgUBTgUBUAMJAAACBQJiSQIACQACAQIjVGhpcyBhcnQgZG9lc24ndCBtYXRjaCB5b3VyIGFjY291bnQEAmNGCQEBYQEJAQJhagIFAU4FAVADCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAg9DSEFOR0VfUkVRVUlSRUQJAMwIAgIHRkxBR0dFRAkAzAgCAgdJTExFR0FMBQNuaWwFAmNGCQACAQIPRmxhZ2dlZCBhcnR3b3JrBAJjTgkBAW8BCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUBUAMJAGYCAAAFAmJGCQACAQIMTmVnYXRpdmUgZW5kAwMJAGYCBQJiRgAAAwkBAiE9AgUCY0wAAQYJAQIhPQIFAmJnAAAHCQACAQI6VGltZWQgb2ZmZXIgb25seSBhbGxvd2VkIGZvciB1bmlxdWUgZWRpdGlvbiBhbmQgb2ZmZXIgb25seQQCY08DCQAAAgUCYkYAAAAABQZoZWlnaHQDCQEBIQEJAQJiZQEFAmFXCQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchAwkBASEBCQECYmYCBQJhVwUCYmcJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEAmFQCQECYUYBBQFOAwkBAiE9AgUCYVACAAkAAgEFAmFQBAJiSwkBAW8BCQEBWAIFAU4FAVAEAmJMCQEBbwEJAQFWAgUBTgUBUAMJAGYCBQJjTABkCQACAQIcMTAwIGVkaXRpb25zIG1heCBwZXIgYXJ0d29yawMDCQECIT0CBQJiSwAACQAAAgUCYksFAmJMBwkAAgECFE1heCBlZGl0aW9uIHJlYWNoZWQuAwMJAGYCBQJiSwAACQECIT0CBQJiTAUCY0wHCQACAQImQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIGFueW1vcmUDAwkAZgIFAmNOAAAJAQIhPQIFAmJMBQJjTAcJAAIBAjFDYW5ub3QgY2hhbmdlIG1heGltdW0gaXNzdWFibGUgd2l0aCBhY3RpdmUgb3JkZXJzBAJjYgMDCQBmAgUCYmcAAAkAZgIFAmNMAAAHBgcEAmNsAwkAZgIFAmJ0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAU4AAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBAVkCBQFOBQFQBQJjYgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFnAgUBTgUBUAUCYmcJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFWAgUBTgUBUAUCY0wJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFpAgUBTgUBUAUCYVcJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhaAIFAU4FAVAJAGQCBQJjTwUCYkYFA25pbAUCY2wCYVIBCmJ1eUFydHdvcmsCAVACYngJAQJidwYFAmFSBQFQBQJieAIAAgACAAJhUgEGc2V0QmlkAgFQAmJ4BAJjUAkBAmJ2AQUCYVIEAmJCCAUCY1ACXzEEAU4IBQJjUAJfMgQCYkMIBQJjUAJfMwQCY1EJAQJhUQEFAmFSBAJhUwgFAmNRAl8xBAJhVAgFAmNRAl8yBAJhVwMJAQEhAQkBCWlzRGVmaW5lZAEIBQJhUwdhc3NldElkAgVXQVZFUwkA2AQBCQEFdmFsdWUBCAUCYVMHYXNzZXRJZAQCYkYJAQFvAQkBAmFoAgUCYngFAVADAwkBAiE9AgUCYkYAAAkAZwIFBmhlaWdodAUCYkYHCQACAQILU2FsZSBlbmRlZC4EAmNOCQEBbwEJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQAwkBASEBCQECYmUBBQJhVwkAAgECEmFzc2V0IG5vdCBhY2NlcHRlZAMJAQEhAQkBAmJmAgUCYVcFAmFUCQACAQIOV3JvbmcgbWluIHNlbGwEAmJLCQEBbwEJAQFYAgUCYngFAVAEAmJMCQEBbwEJAQFWAgUCYngFAVADCQBnAgAABQJiTAkAAgECI05vIG1heCBlZGl0aW9uIHNldCBmb3IgdGhpcyBhcnR3b3JrAwkAZwIFAmJLBQJiTAkAAgECGFNvbGQgb3V0LCB5b3UgY2Fubm90IGJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIEYmlkXwUBUAIBXwUCYngCAV8FAU4CAV8FAmJCAgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICBQJhVwIBXwkApAMBBQJhVAIBXwkApAMBBQJiQwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVAJAGQCBQJjTgABBQNuaWwCYVIBCWFjY2VwdEJpZAUBUAJieAJieQJiegJicwQCY1IJAQJicgIFAmFSBQJicwQCYkIIBQJjUgJfMQQCY1MIBQJjUgJfMgQCYkMIBQJjUgJfMwQCYnQIBQJjUgJfNAMJAQIhPQIFAmNTBQJieAkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24JAQJidwYFAmFSBQFQBQJieAUCYnkFAmJ6BQJicwJhUgEJY2FuY2VsQmlkBAFQAmJ4AmJ5AmJ6BAJjVAkBAmJ2AQUCYVIEAmJCCAUCY1QCXzEEAU4IBQJjVAJfMgQCYkMIBQJjVAJfMwMDCQECIT0CBQFOBQJiegkBAiE9AgUBTgUCYngHCQACAQIZWW91IGNhbm5vdCBkbyB0aGlzIGFjdGlvbgQCY1UDCQAAAgUBTgUCYngFAmJ6BQFOBAJjTgkBAW8BCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUBUAQCYm0JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIEYmlkXwUBUAIBXwUCYngCAV8FAmJ6AgFfBQJieQQCYm4JAQFhAQkArAICBQJibQIFX09QRU4DCQAAAgUCYm4CAAkAAgECDUJpZCBub3QgZm91bmQEAmJvCQC1CQIFAmJuAgFfBAJhVwkBAmJrAQkAkQMCBQJibwAABAJjVgIIQ0FOQ0VMRUQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICBQJibQIFX09QRU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFAmJtAgFfBQJjVgkArAICCQCsAgIFAmJuAgFfCQCkAwEFAmJDCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUBUAkAZQIFAmNOAAEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAmNVCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYm8AAQUCYVcFA25pbAECY1cBAmNYAAQBRwUCY1cDCQABAgUBRwIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EAmNZBQFHAwMDAwkAAAIIBQJjWQhmdW5jdGlvbgIKYWRkQXJ0d29yawkAAAIIBQJjWQRkQXBwBQR0aGlzBwkAAAIIBQJjWQNmZWUAoMIeBwkAAAIIBQJjWQpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAkA2QQBCQECY24BCQCRAwIIBQJjWQRhcmdzAA0DAwMDCQAAAggFAmNZCGZ1bmN0aW9uAg11cGRhdGVBcnR3b3JrCQAAAggFAmNZBGRBcHAFBHRoaXMHCQAAAggFAmNZA2ZlZQCgwh4HCQAAAggFAmNZCmZlZUFzc2V0SWQFBHVuaXQHCQD0AwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACQDZBAEJAQJjbgEJAJEDAggFAmNZBGFyZ3MADAMDAwMJAAACCAUCY1kIZnVuY3Rpb24CC3NlbGxBcnR3b3JrCQAAAggFAmNZBGRBcHAFBHRoaXMHCQAAAggFAmNZA2ZlZQCgwh4HCQAAAggFAmNZCmZlZUFzc2V0SWQFBHVuaXQHCQD0AwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACQDZBAEJAQJjbgEJAJEDAggFAmNZBGFyZ3MABQMDAwMJAAACCAUCY1kIZnVuY3Rpb24CCWFjY2VwdEJpZAkAAAIIBQJjWQRkQXBwBQR0aGlzBwkAAAIIBQJjWQNmZWUAoMIeBwkAAAIIBQJjWQpmZWVBc3NldElkBQR1bml0BwkAyBMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAkA2QQBCQECY24BCQCRAwIIBQJjWQRhcmdzAAQJAPQDAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAIBQJjVw9zZW5kZXJQdWJsaWNLZXkJAPQDAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAIBQJjVw9zZW5kZXJQdWJsaWNLZXlxNE9G", "height": 2503580, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AmQMAA9kpqWAbpWnjhziZShNUHoSnVNMK88gK5yWLcBg Next: 8A55QnKc8T26dqvS56mu1n45iPV2i91yNgg1iPUNK5CE Diff:
OldNewDifferences
390390 else false)
391391 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
392392 else unit
393- if ((get_sponsored_waves == get_sponsored_waves))
394- then $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, isSponsored)
395- else throw("Strict value is not equal to itself.")
393+ $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, isSponsored)
396394 }
397395
398396
402400
403401
404402 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
405- let $t01303713107 = idCallerDateSponsored(i, pubKey)
406- let id = $t01303713107._1
407- let caller = $t01303713107._2
408- let date = $t01303713107._3
409- let isSponsored = $t01303713107._4
403+ let $t01303413104 = idCallerDateSponsored(i, pubKey)
404+ let id = $t01303413104._1
405+ let caller = $t01303413104._2
406+ let date = $t01303413104._3
407+ let isSponsored = $t01303413104._4
410408 if (true)
411409 then throw(toString(isSponsored))
412410 else {
473471 then throw(checkUser)
474472 else {
475473 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
476- let $t01498315175 = if (isBid)
474+ let $t01498015172 = if (isBid)
477475 then getPriceAssetIdFromBid(bidDataKey)
478476 else validatePriceAssetId(i, priceAssetId, artworkPrice)
479- let amount = $t01498315175._1
480- let assetId = $t01498315175._2
477+ let amount = $t01498015172._1
478+ let assetId = $t01498015172._2
481479 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
482480 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
483481 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
583581
584582 @Callable(i)
585583 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
586- let $t02035520428 = idCallerDateSponsored(i, pubKey)
587- let artId = $t02035520428._1
588- let caller = $t02035520428._2
589- let date = $t02035520428._3
590- let isSponsored = $t02035520428._4
584+ let $t02035220425 = idCallerDateSponsored(i, pubKey)
585+ let artId = $t02035220425._1
586+ let caller = $t02035220425._2
587+ let date = $t02035220425._3
588+ let isSponsored = $t02035220425._4
591589 if (!(validateHash(sha256Hash)))
592590 then throw("Hash should be 64 characters maximum")
593591 else {
594- let $t02052920598 = setLIcence(cidLicence, sha256Licence)
595- let licenceCID = $t02052920598._1
596- let licenceHash = $t02052920598._2
592+ let $t02052620595 = setLIcence(cidLicence, sha256Licence)
593+ let licenceCID = $t02052620595._1
594+ let licenceHash = $t02052620595._2
597595 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
598596 if ((validateArtwork != ""))
599597 then throw("Something went wrong!")
600598 else {
601599 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
602- let $t02089720981 = if (whitelisted_drop)
600+ let $t02089420978 = if (whitelisted_drop)
603601 then $Tuple2(0, signID)
604602 else validatePayment(i)
605- let amount = $t02089720981._1
606- let assetId = $t02089720981._2
603+ let amount = $t02089420978._1
604+ let assetId = $t02089420978._2
607605 if (!(isDefined(amount)))
608606 then throw("Something went wrong")
609607 else {
644642 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
645643 then throw(maintenanceMSG)
646644 else {
647- let $t02401924089 = idCallerDateSponsored(i, pubKey)
648- let id = $t02401924089._1
649- let caller = $t02401924089._2
650- let date = $t02401924089._3
651- let isSponsored = $t02401924089._4
652- let $t02409924168 = setLIcence(cidLicence, sha256Licence)
653- let licenceCID = $t02409924168._1
654- let licenceHash = $t02409924168._2
645+ let $t02401624086 = idCallerDateSponsored(i, pubKey)
646+ let id = $t02401624086._1
647+ let caller = $t02401624086._2
648+ let date = $t02401624086._3
649+ let isSponsored = $t02401624086._4
650+ let $t02409624165 = setLIcence(cidLicence, sha256Licence)
651+ let licenceCID = $t02409624165._1
652+ let licenceHash = $t02409624165._2
655653 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
656654 if ((validateArtwork != ""))
657655 then throw("Something went wrong!")
679677
680678 @Callable(i)
681679 func flagArtwork (artId,addr,flag,note) = {
682- let $t02579925833 = idCallerDate(i)
683- let id = $t02579925833._1
684- let caller = $t02579925833._2
680+ let $t02579625830 = idCallerDate(i)
681+ let id = $t02579625830._1
682+ let caller = $t02579625830._2
685683 if (containsElement([chris, toString(this)], caller))
686684 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
687685 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
693691
694692 @Callable(i)
695693 func deleteArtwork (artId,addr) = {
696- let $t02626926303 = idCallerDate(i)
697- let id = $t02626926303._1
698- let caller = $t02626926303._2
694+ let $t02626626300 = idCallerDate(i)
695+ let id = $t02626626300._1
696+ let caller = $t02626626300._2
699697 let addrToUse = if (containsElement([chris, toString(this)], caller))
700698 then addr
701699 else caller
728726
729727 @Callable(i)
730728 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
731- let $t02913929209 = idCallerDateSponsored(i, pubKey)
732- let id = $t02913929209._1
733- let caller = $t02913929209._2
734- let date = $t02913929209._3
735- let isSponsored = $t02913929209._4
729+ let $t02913629206 = idCallerDateSponsored(i, pubKey)
730+ let id = $t02913629206._1
731+ let caller = $t02913629206._2
732+ let date = $t02913629206._3
733+ let isSponsored = $t02913629206._4
736734 let artworkName = getStringByKey(keyName(caller, artId))
737735 if ((artworkName == ""))
738736 then throw("This art doesn't match your account")
806804
807805 @Callable(i)
808806 func setBid (artId,issuer) = {
809- let $t03159531635 = idCallerDate(i)
810- let id = $t03159531635._1
811- let caller = $t03159531635._2
812- let date = $t03159531635._3
813- let $t03164031676 = isPayment(i)
814- let payment = $t03164031676._1
815- let amount = $t03164031676._2
807+ let $t03159231632 = idCallerDate(i)
808+ let id = $t03159231632._1
809+ let caller = $t03159231632._2
810+ let date = $t03159231632._3
811+ let $t03163731673 = isPayment(i)
812+ let payment = $t03163731673._1
813+ let amount = $t03163731673._2
816814 let assetId = if (!(isDefined(payment.assetId)))
817815 then "WAVES"
818816 else toBase58String(value(payment.assetId))
843841
844842 @Callable(i)
845843 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
846- let $t03289632967 = idCallerDateSponsored(i, pubKey)
847- let id = $t03289632967._1
848- let caller1 = $t03289632967._2
849- let date = $t03289632967._3
850- let isSponsored = $t03289632967._4
844+ let $t03289332964 = idCallerDateSponsored(i, pubKey)
845+ let id = $t03289332964._1
846+ let caller1 = $t03289332964._2
847+ let date = $t03289332964._3
848+ let isSponsored = $t03289332964._4
851849 if ((caller1 != issuer))
852850 then throw("You cannot do this action")
853851 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
857855
858856 @Callable(i)
859857 func cancelBid (artId,issuer,bidId,bidOwner) = {
860- let $t03320233263 = idCallerDate(i)
861- let id = $t03320233263._1
862- let caller = $t03320233263._2
863- let date = $t03320233263._3
858+ let $t03319933260 = idCallerDate(i)
859+ let id = $t03319933260._1
860+ let caller = $t03319933260._2
861+ let date = $t03319933260._3
864862 if (if ((caller != bidOwner))
865863 then (caller != issuer)
866864 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringByKey (key) = valueOrElse(getString(this, key), "")
55
66
77 let unitTest = false
88
99 let oracleFee = value(addressFromString(getStringByKey("conf_oracle_fee")))
1010
1111 let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
1212
1313 let feeReceiver = getStringByKey("conf_fee_receiver")
1414
1515 let userDapp = if (unitTest)
1616 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1717 else value(addressFromString(getStringByKey("conf_users_dapp")))
1818
1919 let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
2020
2121 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
2222
2323 let usdnAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDN"))
2424
2525 let usdtAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDT"))
2626
2727 let wavesAssetId = base58''
2828
2929 let chris = getStringByKey("conf_admin_1")
3030
3131 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
3232
3333
3434 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
3535
3636
3737 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
3838
3939
4040 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
4141
4242
4343 let signCut = 7
4444
4545 let usdnWaveCut = 10
4646
4747 let defaultLicence = getStringByKey("conf_default_licence")
4848
4949 let defaultHashLicence = getStringByKey("conf_default_licence_hash")
5050
5151 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
5252
5353 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
5454
5555 let userSuspended = "SUSPENDED"
5656
5757 let userRemoved = "REMOVED"
5858
5959 let userUnregistered = "UNREGISTERED"
6060
6161 let userAllowed = "ALLOWED"
6262
6363 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6464
6565 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6666 case a: String =>
6767 if (contains(a, sha256Hash))
6868 then true
6969 else false
7070 case _ =>
7171 false
7272 }
7373
7474
7575 func validateCID (cid) = if (contains(cid, "/"))
7676 then if (if ((76 > size(cid)))
7777 then (size(split(cid, "/")[0]) == 59)
7878 else false)
7979 then (16 > size(split(cid, "/")[1]))
8080 else false
8181 else false
8282
8383
8484 func validateHash (hash) = (size(hash) == 64)
8585
8686
8787 func keyUserStatus (caller) = ("user_status_" + caller)
8888
8989
9090 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9191
9292
9393 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9494
9595
9696 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
9797
9898
9999 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
100100
101101
102102 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
103103
104104
105105 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
106106
107107
108108 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
109109
110110
111111 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
112112
113113
114114 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
115115
116116
117117 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
118118
119119
120120 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
121121
122122
123123 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
124124
125125
126126 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
127127
128128
129129 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
130130
131131
132132 func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
133133
134134
135135 func keyCrawler (caller,artId) = ((("art_crawler_cid_" + artId) + "_") + caller)
136136
137137
138138 func keyRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
139139
140140
141141 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
142142
143143
144144 func keyEndSale (caller,artId) = ((("art_endsale_" + artId) + "_") + caller)
145145
146146
147147 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
148148
149149
150150 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
151151
152152
153153 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
154154
155155
156156 func keyPrimaryShareAgent (artistAddr) = ("artist_agent_primary_" + artistAddr)
157157
158158
159159 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
160160
161161
162162 func keyPrimarySharePublicAgent (artistAddr) = ("artist_public_agent_primary_" + artistAddr)
163163
164164
165165 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
166166
167167
168168 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
169169
170170
171171 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
172172
173173
174174 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
175175
176176
177177 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
178178 then throw("Wrong Display CID")
179179 else if (!(validateCID(cidExport)))
180180 then throw("Wrong Export CID")
181181 else if (if ((cidLicence != ""))
182182 then !(validateCID(cidLicence))
183183 else false)
184184 then throw("Wrong Licence CID")
185185 else true
186186
187187
188188 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
189189 then throw("Export Hash 64 char. max")
190190 else if (!(validateHash(sha256Licence)))
191191 then throw("Licence Hash 64 char. max")
192192 else true
193193
194194
195195 func validateString (str,max) = if ((size(str) == 0))
196196 then throw("Field cannot be is empty")
197197 else if ((size(str) > max))
198198 then throw((str + " is too long"))
199199 else true
200200
201201
202202 func validateUser (caller) = {
203203 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
204204 if (if ((userStatus == userUnregistered))
205205 then true
206206 else (userStatus == userAllowed))
207207 then "Register this account first with \"Account\" tab"
208208 else if ((userStatus == userSuspended))
209209 then "Account suspended"
210210 else if ((userStatus == userRemoved))
211211 then "Account removed"
212212 else ""
213213 }
214214
215215
216216 func setLIcence (cidLicence,sha256Licence) = {
217217 let cid = if ((size(cidLicence) == 0))
218218 then defaultLicence
219219 else cidLicence
220220 let hash = if ((size(sha256Licence) == 0))
221221 then defaultHashLicence
222222 else sha256Licence
223223 $Tuple2(cid, hash)
224224 }
225225
226226
227227 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags,royalties) = {
228228 let checkUser = validateUser(caller)
229229 if ((checkUser != ""))
230230 then throw(checkUser)
231231 else if ((size(cidDisplay) == 0))
232232 then throw("Display CID cannot be empty")
233233 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
234234 then throw("Problem with CID")
235235 else if (!(validateAllHash(sha256Export, licenceHash)))
236236 then throw("Problem with Hashes")
237237 else if (!(validateString(name, 100)))
238238 then throw("100 Char. max name")
239239 else if (!(validateString(description, 1000)))
240240 then throw("1000 Char. max description")
241241 else if (if ((0 > royalties))
242242 then true
243243 else (royalties > 1000))
244244 then throw("Royalties cannot be less than 0% or higher than 10%")
245245 else if ((size(split(tags, ",")) > 5))
246246 then throw("5 tags max.")
247247 else ""
248248 }
249249
250250
251251 func isPayment (i) = if ((size(i.payments) == 0))
252252 then throw("No payment attached")
253253 else {
254254 let payment = value(i.payments[0])
255255 let amount = value(payment.amount)
256256 $Tuple2(payment, amount)
257257 }
258258
259259
260260 func validatePayment (i) = {
261261 let $t091809216 = isPayment(i)
262262 let payment = $t091809216._1
263263 let amount = $t091809216._2
264264 let assetId = if (if (isDefined(payment.assetId))
265265 then (payment.assetId == signAssetId)
266266 else false)
267267 then payment.assetId
268268 else throw("Only SIGN token accepted as transaction fee")
269269 if ((amount != currentCertificationPrice))
270270 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
271271 else $Tuple2(amount, assetId)
272272 }
273273
274274
275275 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
276276 case b: Int =>
277277 if ((b != 0))
278278 then true
279279 else false
280280 case _ =>
281281 false
282282 }
283283
284284
285285 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
286286 let $t098049840 = isPayment(i)
287287 let payment = $t098049840._1
288288 let amount = $t098049840._2
289289 let assetId = if (!(isDefined(payment.assetId)))
290290 then unit
291291 else if (if ((size(priceAssetId) > 0))
292292 then (toBase58String(value(payment.assetId)) == priceAssetId)
293293 else false)
294294 then payment.assetId
295295 else throw("Wrong asset id")
296296 if (if ((assetId == unit))
297297 then (priceAssetId != "")
298298 else false)
299299 then throw("Wrong asset id")
300300 else if ((artworkPrice != amount))
301301 then throw("Payment don't match")
302302 else $Tuple2(amount, assetId)
303303 }
304304
305305
306306 func acceptedAssetIds (assetId) = if (if (if (if (if ((assetId != toBase58String(signAssetId)))
307307 then (assetId != toBase58String(wavesAssetId))
308308 else false)
309309 then (assetId != "WAVES")
310310 else false)
311311 then (assetId != toBase58String(usdnAssetId))
312312 else false)
313313 then (assetId != toBase58String(usdtAssetId))
314314 else false)
315315 then throw("Only SIGN, USDN,USDT or WAVES accepted")
316316 else true
317317
318318
319319 func validateMinSell (assetId,price) = {
320320 let minSellWaves = if (unitTest)
321321 then 10
322322 else getIntegerByKeyFromOracle("waves_min_sell")
323323 let minSellUsdn = 1000000
324324 let minSellSign = if (unitTest)
325325 then 1
326326 else (currentCertificationPrice * 2)
327327 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
328328 then (minSellUsdn > price)
329329 else false)
330330 then (price != 0)
331331 else false)
332332 then true
333333 else if (if ((assetId == toBase58String(usdtAssetId)))
334334 then (minSellUsdn > price)
335335 else false)
336336 then (price != 0)
337337 else false)
338338 then true
339339 else if (if ((assetId == toBase58String(signAssetId)))
340340 then (minSellSign > price)
341341 else false)
342342 then (price != 0)
343343 else false)
344344 then true
345345 else if (if (if ((assetId == toBase58String(wavesAssetId)))
346346 then true
347347 else (assetId == "WAVES"))
348348 then (minSellWaves > price)
349349 else false)
350350 then (price != 0)
351351 else false)
352352 then throw("Wrong minimum sell price")
353353 else true
354354 }
355355
356356
357357 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
358358 then unit
359359 else fromBase58String(assetId)
360360
361361
362362 func getPriceAssetIdFromBid (bidDataKey) = {
363363 let bidData = getStringByKey((bidDataKey + "_OPEN"))
364364 if ((bidData == ""))
365365 then throw("Bid not found")
366366 else {
367367 let bidDataArr = split(bidData, "_")
368368 let bidAmount = parseIntValue(bidDataArr[1])
369369 let bidAssetId = getBidAssetId(bidDataArr[0])
370370 if ((0 >= bidAmount))
371371 then throw("Wrong amount")
372372 else $Tuple2(bidAmount, bidAssetId)
373373 }
374374 }
375375
376376
377377 func idCallerDateSponsored (i,pubKey) = if (!(dappRunning))
378378 then throw(maintenanceMSG)
379379 else {
380380 let isSponsored = if ((pubKey != ""))
381381 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
382382 else 0
383383 let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
384384 then (isSponsored > 0)
385385 else false)
386386 then toString(addressFromPublicKey(fromBase58String(pubKey)))
387387 else toBase58String(i.caller.bytes)
388388 let get_sponsored_waves = if (if ((pubKey != ""))
389389 then (isSponsored > 0)
390390 else false)
391391 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
392392 else unit
393- if ((get_sponsored_waves == get_sponsored_waves))
394- then $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, isSponsored)
395- else throw("Strict value is not equal to itself.")
393+ $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, isSponsored)
396394 }
397395
398396
399397 func idCallerDate (i) = if (!(dappRunning))
400398 then throw(maintenanceMSG)
401399 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
402400
403401
404402 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
405- let $t01303713107 = idCallerDateSponsored(i, pubKey)
406- let id = $t01303713107._1
407- let caller = $t01303713107._2
408- let date = $t01303713107._3
409- let isSponsored = $t01303713107._4
403+ let $t01303413104 = idCallerDateSponsored(i, pubKey)
404+ let id = $t01303413104._1
405+ let caller = $t01303413104._2
406+ let date = $t01303413104._3
407+ let isSponsored = $t01303413104._4
410408 if (true)
411409 then throw(toString(isSponsored))
412410 else {
413411 let new_caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
414412 then (isSponsored > 0)
415413 else false)
416414 then toString(addressFromPublicKey(fromBase58String(pubKey)))
417415 else toBase58String(i.caller.bytes)
418416 if (true)
419417 then throw(((((((new_caller + " / ") + issuer) + " / ") + bidOwner) + " / ") + pubKey))
420418 else {
421419 let isBid = if (if (if ((caller == issuer))
422420 then (bidOwner != "")
423421 else false)
424422 then (bidId != "")
425423 else false)
426424 then true
427425 else false
428426 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
429427 if (if (if ((blockEnd != 0))
430428 then (height >= blockEnd)
431429 else false)
432430 then !(isBid)
433431 else false)
434432 then throw("Sale ended.")
435433 else {
436434 let callerIsIssuer = (caller == issuer)
437435 let totalNFT = getIntegerByKey("total_nft_issued")
438436 let signID = getStringByKey(keySignID(issuer, artId))
439437 let artworkName = getStringByKey(keyName(issuer, artId))
440438 if ((artworkName == ""))
441439 then throw("Art doesn't exist")
442440 else {
443441 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
444442 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
445443 let artworkPrice = if (callerIsIssuer)
446444 then (currentCertificationPrice * 2)
447445 else getIntegerByKey(keyPrice(issuer, artId))
448446 let priceAssetId = if (callerIsIssuer)
449447 then toBase58String(signAssetId)
450448 else getStringByKey(keyAssetIdAccepted(issuer, artId))
451449 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
452450 if (if (if (!(isBid))
453451 then !(callerIsIssuer)
454452 else false)
455453 then if (if ((0 >= artworkPrice))
456454 then true
457455 else !(isOnSale))
458456 then true
459457 else (0 >= maxCanSell)
460458 else false)
461459 then throw("Art not for sale")
462460 else if (if (if (!(isBid))
463461 then callerIsIssuer
464462 else false)
465463 then (0 >= maxCanSell)
466464 else false)
467465 then throw("Max issuable not set")
468466 else {
469467 let checkUser = validateUser(issuer)
470468 if (if (isBid)
471469 then (checkUser != "")
472470 else false)
473471 then throw(checkUser)
474472 else {
475473 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
476- let $t01498315175 = if (isBid)
474+ let $t01498015172 = if (isBid)
477475 then getPriceAssetIdFromBid(bidDataKey)
478476 else validatePriceAssetId(i, priceAssetId, artworkPrice)
479- let amount = $t01498315175._1
480- let assetId = $t01498315175._2
477+ let amount = $t01498015172._1
478+ let assetId = $t01498015172._2
481479 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
482480 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
483481 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
484482 let publicAgentShare = valueOrElse(getInteger(userDapp, keyPrimarySharePublicAgent(issuer)), 0)
485483 let isWhitelisted = checkWhitelist(issuer)
486484 let cut = if ((isWhitelisted > height))
487485 then 0
488486 else if ((assetId == signAssetId))
489487 then signCut
490488 else usdnWaveCut
491489 let amountForSign = fraction(amount, cut, 100)
492490 let amountForAgent = if (if (if ((agent != feeReceiver))
493491 then (agentShare > 0)
494492 else false)
495493 then (height > isWhitelisted)
496494 else false)
497495 then fraction(amount, agentShare, 10000)
498496 else 0
499497 let amountForPublicAgent = if (if (if ((publicAgent != feeReceiver))
500498 then (publicAgentShare > 0)
501499 else false)
502500 then (height > isWhitelisted)
503501 else false)
504502 then fraction(amount, publicAgentShare, 10000)
505503 else 0
506504 let amountForCreator = (amount - amountForSign)
507505 if ((amountSold == maxCanSell))
508506 then throw("Art sold out")
509507 else {
510508 let newAmountSold = (amountSold + 1)
511509 let issueMeta = ((((((((((("Creator: " + issuer) + ",
512510 ArtID: ") + artId) + ",
513511 SignID: ") + signID) + ",
514512 Artwork name: ") + artworkName) + ",
515513 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
516514 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
517515 let idNFT = calculateAssetId(issueNFT)
518516 let sellStatus = if (if ((newAmountSold == maxCanSell))
519517 then true
520518 else !(isOnSale))
521519 then false
522520 else true
523521 let receiveNFT = if (if (if ((caller == issuer))
524522 then (bidOwner != "")
525523 else false)
526524 then (bidId != "")
527525 else false)
528526 then addressFromStringValue(bidOwner)
529527 else i.caller
530528 let assetIdBid = if (!(isDefined(assetId)))
531529 then "WAVES"
532530 else toBase58String(value(assetId))
533531 let bidData = getStringByKey((bidDataKey + "_OPEN"))
534532 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
535533 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
536534 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
537535 let soldValue = if (!(isBid))
538536 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
539537 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
540538 let soldData = StringEntry(soldKey, soldValue)
541539 let commissionsWithAgent = if ((amountForAgent != 0))
542540 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
543541 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
544542 let commissionsWithPublicAgent = if ((amountForPublicAgent != 0))
545543 then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(issuer)), (amountForCreator - amountForPublicAgent), assetId)]
546544 else [ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId)]
547545 let txToCaller = if ((isSponsored > 0))
548546 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
549547 else nil
550548 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(receiveNFT, 1, idNFT)] ++ commissionsWithAgent) ++ commissionsWithPublicAgent) ++ txToCaller)
551549 if (isBid)
552550 then [soldData, bidUpdate, bidDelOld] :: buyRes
553551 else soldData :: buyRes
554552 }
555553 }
556554 }
557555 }
558556 }
559557 }
560558 }
561559 }
562560
563561
564562 func asString (bv) = match bv {
565563 case bv0: String =>
566564 bv0
567565 case _ =>
568566 throw("Sponsored Public Key String expected")
569567 }
570568
571569
572570 @Callable(invoke)
573571 func setConf (key,val) = {
574572 let caller = toString(invoke.caller)
575573 if (containsElement([chris, toString(this)], caller))
576574 then if (contains(key, "conf_"))
577575 then [StringEntry(key, val)]
578576 else throw("Entries starting with conf_ only")
579577 else throw("You are not allowed to change this")
580578 }
581579
582580
583581
584582 @Callable(i)
585583 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
586- let $t02035520428 = idCallerDateSponsored(i, pubKey)
587- let artId = $t02035520428._1
588- let caller = $t02035520428._2
589- let date = $t02035520428._3
590- let isSponsored = $t02035520428._4
584+ let $t02035220425 = idCallerDateSponsored(i, pubKey)
585+ let artId = $t02035220425._1
586+ let caller = $t02035220425._2
587+ let date = $t02035220425._3
588+ let isSponsored = $t02035220425._4
591589 if (!(validateHash(sha256Hash)))
592590 then throw("Hash should be 64 characters maximum")
593591 else {
594- let $t02052920598 = setLIcence(cidLicence, sha256Licence)
595- let licenceCID = $t02052920598._1
596- let licenceHash = $t02052920598._2
592+ let $t02052620595 = setLIcence(cidLicence, sha256Licence)
593+ let licenceCID = $t02052620595._1
594+ let licenceHash = $t02052620595._2
597595 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
598596 if ((validateArtwork != ""))
599597 then throw("Something went wrong!")
600598 else {
601599 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
602- let $t02089720981 = if (whitelisted_drop)
600+ let $t02089420978 = if (whitelisted_drop)
603601 then $Tuple2(0, signID)
604602 else validatePayment(i)
605- let amount = $t02089720981._1
606- let assetId = $t02089720981._2
603+ let amount = $t02089420978._1
604+ let assetId = $t02089420978._2
607605 if (!(isDefined(amount)))
608606 then throw("Something went wrong")
609607 else {
610608 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
611609 if ((entryExist != ""))
612610 then throw("You already added it")
613611 else {
614612 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
615613 if ((hashExist != ""))
616614 then throw("Hash already registered")
617615 else {
618616 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
619617 if (!(isSignCertified))
620618 then throw("Sign Certificate not found for this address.")
621619 else {
622620 let decrease_whitelist_drop = if (whitelisted_drop)
623621 then invoke(whitelistDapp, "useFreeDrop", [caller], nil)
624622 else unit
625623 if ((decrease_whitelist_drop == decrease_whitelist_drop))
626624 then {
627625 let txToCaller = if ((isSponsored > 0))
628626 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
629627 else nil
630628 ([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), IntegerEntry(keyRoyalties(caller, artId), royalties), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, signAssetId)] ++ txToCaller)
631629 }
632630 else throw("Strict value is not equal to itself.")
633631 }
634632 }
635633 }
636634 }
637635 }
638636 }
639637 }
640638
641639
642640
643641 @Callable(i)
644642 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
645643 then throw(maintenanceMSG)
646644 else {
647- let $t02401924089 = idCallerDateSponsored(i, pubKey)
648- let id = $t02401924089._1
649- let caller = $t02401924089._2
650- let date = $t02401924089._3
651- let isSponsored = $t02401924089._4
652- let $t02409924168 = setLIcence(cidLicence, sha256Licence)
653- let licenceCID = $t02409924168._1
654- let licenceHash = $t02409924168._2
645+ let $t02401624086 = idCallerDateSponsored(i, pubKey)
646+ let id = $t02401624086._1
647+ let caller = $t02401624086._2
648+ let date = $t02401624086._3
649+ let isSponsored = $t02401624086._4
650+ let $t02409624165 = setLIcence(cidLicence, sha256Licence)
651+ let licenceCID = $t02409624165._1
652+ let licenceHash = $t02409624165._2
655653 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
656654 if ((validateArtwork != ""))
657655 then throw("Something went wrong!")
658656 else {
659657 let entryExist = getStringByKey(keyName(caller, txid))
660658 if ((entryExist == ""))
661659 then throw("Entry not found")
662660 else {
663661 let flag = getStringByKey(keyFlag(caller, txid))
664662 if ((flag == "ILLEGAL"))
665663 then throw("Cannot update ILLEGAL artwork")
666664 else if (!(isArtMinted(caller, txid)))
667665 then {
668666 let txToCaller = if ((isSponsored > 0))
669667 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
670668 else nil
671669 ([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), IntegerEntry(keyRoyalties(caller, txid), royalties)] ++ txToCaller)
672670 }
673671 else throw("Already minted")
674672 }
675673 }
676674 }
677675
678676
679677
680678 @Callable(i)
681679 func flagArtwork (artId,addr,flag,note) = {
682- let $t02579925833 = idCallerDate(i)
683- let id = $t02579925833._1
684- let caller = $t02579925833._2
680+ let $t02579625830 = idCallerDate(i)
681+ let id = $t02579625830._1
682+ let caller = $t02579625830._2
685683 if (containsElement([chris, toString(this)], caller))
686684 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
687685 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
688686 else throw(("Unknow status " + flag))
689687 else throw("You are not allowed")
690688 }
691689
692690
693691
694692 @Callable(i)
695693 func deleteArtwork (artId,addr) = {
696- let $t02626926303 = idCallerDate(i)
697- let id = $t02626926303._1
698- let caller = $t02626926303._2
694+ let $t02626626300 = idCallerDate(i)
695+ let id = $t02626626300._1
696+ let caller = $t02626626300._2
699697 let addrToUse = if (containsElement([chris, toString(this)], caller))
700698 then addr
701699 else caller
702700 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
703701 if ((entryExist == ""))
704702 then throw("No art matching for this address")
705703 else {
706704 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
707705 if ((sha256Hash == ""))
708706 then throw("No art hash matching for this address")
709707 else {
710708 let signID = getStringByKey(keySignID(addrToUse, artId))
711709 if ((signID == ""))
712710 then throw("No SIGN ID matching")
713711 else {
714712 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)), DeleteEntry(keyRoyalties(addrToUse, artId))]
715713 if (!(isArtMinted(addrToUse, artId)))
716714 then if (!(dappRunning))
717715 then throw(maintenanceMSG)
718716 else dataToDelete
719717 else if (containsElement([chris, toString(this)], caller))
720718 then dataToDelete
721719 else throw("Art already minted, you cannot delete it")
722720 }
723721 }
724722 }
725723 }
726724
727725
728726
729727 @Callable(i)
730728 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
731- let $t02913929209 = idCallerDateSponsored(i, pubKey)
732- let id = $t02913929209._1
733- let caller = $t02913929209._2
734- let date = $t02913929209._3
735- let isSponsored = $t02913929209._4
729+ let $t02913629206 = idCallerDateSponsored(i, pubKey)
730+ let id = $t02913629206._1
731+ let caller = $t02913629206._2
732+ let date = $t02913629206._3
733+ let isSponsored = $t02913629206._4
736734 let artworkName = getStringByKey(keyName(caller, artId))
737735 if ((artworkName == ""))
738736 then throw("This art doesn't match your account")
739737 else {
740738 let flag = getStringByKey(keyFlag(caller, artId))
741739 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
742740 then throw("Flagged artwork")
743741 else {
744742 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
745743 if ((0 > blockEnd))
746744 then throw("Negative end")
747745 else if (if ((blockEnd > 0))
748746 then if ((maxMint != 1))
749747 then true
750748 else (price != 0)
751749 else false)
752750 then throw("Timed offer only allowed for unique edition and offer only")
753751 else {
754752 let baseHeight = if ((blockEnd == 0))
755753 then 0
756754 else height
757755 if (!(acceptedAssetIds(assetId)))
758756 then throw("Something went wrong!")
759757 else if (!(validateMinSell(assetId, price)))
760758 then throw("Something went wrong!")
761759 else {
762760 let checkUser = validateUser(caller)
763761 if ((checkUser != ""))
764762 then throw(checkUser)
765763 else {
766764 let amountSold = getIntegerByKey(keyIssued(caller, artId))
767765 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
768766 if ((maxMint > 100))
769767 then throw("100 editions max per artwork")
770768 else if (if ((amountSold != 0))
771769 then (amountSold == maxCanSell)
772770 else false)
773771 then throw("Max edition reached.")
774772 else if (if ((amountSold > 0))
775773 then (maxCanSell != maxMint)
776774 else false)
777775 then throw("Cannot change maximum issuable anymore")
778776 else if (if ((bidNbr > 0))
779777 then (maxCanSell != maxMint)
780778 else false)
781779 then throw("Cannot change maximum issuable with active orders")
782780 else {
783781 let sellStatus = if (if ((price > 0))
784782 then (maxMint > 0)
785783 else false)
786784 then true
787785 else false
788786 let txToCaller = if ((isSponsored > 0))
789787 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
790788 else nil
791789 ([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))] ++ txToCaller)
792790 }
793791 }
794792 }
795793 }
796794 }
797795 }
798796 }
799797
800798
801799
802800 @Callable(i)
803801 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "", "")
804802
805803
806804
807805 @Callable(i)
808806 func setBid (artId,issuer) = {
809- let $t03159531635 = idCallerDate(i)
810- let id = $t03159531635._1
811- let caller = $t03159531635._2
812- let date = $t03159531635._3
813- let $t03164031676 = isPayment(i)
814- let payment = $t03164031676._1
815- let amount = $t03164031676._2
807+ let $t03159231632 = idCallerDate(i)
808+ let id = $t03159231632._1
809+ let caller = $t03159231632._2
810+ let date = $t03159231632._3
811+ let $t03163731673 = isPayment(i)
812+ let payment = $t03163731673._1
813+ let amount = $t03163731673._2
816814 let assetId = if (!(isDefined(payment.assetId)))
817815 then "WAVES"
818816 else toBase58String(value(payment.assetId))
819817 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
820818 if (if ((blockEnd != 0))
821819 then (height >= blockEnd)
822820 else false)
823821 then throw("Sale ended.")
824822 else {
825823 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
826824 if (!(acceptedAssetIds(assetId)))
827825 then throw("asset not accepted")
828826 else if (!(validateMinSell(assetId, amount)))
829827 then throw("Wrong min sell")
830828 else {
831829 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
832830 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
833831 if ((0 >= maxCanSell))
834832 then throw("No max edition set for this artwork")
835833 else if ((amountSold >= maxCanSell))
836834 then throw("Sold out, you cannot bid")
837835 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
838836 }
839837 }
840838 }
841839
842840
843841
844842 @Callable(i)
845843 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
846- let $t03289632967 = idCallerDateSponsored(i, pubKey)
847- let id = $t03289632967._1
848- let caller1 = $t03289632967._2
849- let date = $t03289632967._3
850- let isSponsored = $t03289632967._4
844+ let $t03289332964 = idCallerDateSponsored(i, pubKey)
845+ let id = $t03289332964._1
846+ let caller1 = $t03289332964._2
847+ let date = $t03289332964._3
848+ let isSponsored = $t03289332964._4
851849 if ((caller1 != issuer))
852850 then throw("You cannot do this action")
853851 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
854852 }
855853
856854
857855
858856 @Callable(i)
859857 func cancelBid (artId,issuer,bidId,bidOwner) = {
860- let $t03320233263 = idCallerDate(i)
861- let id = $t03320233263._1
862- let caller = $t03320233263._2
863- let date = $t03320233263._3
858+ let $t03319933260 = idCallerDate(i)
859+ let id = $t03319933260._1
860+ let caller = $t03319933260._2
861+ let date = $t03319933260._3
864862 if (if ((caller != bidOwner))
865863 then (caller != issuer)
866864 else false)
867865 then throw("You cannot do this action")
868866 else {
869867 let returnMoneyTo = if ((caller == issuer))
870868 then bidOwner
871869 else caller
872870 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
873871 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
874872 let bidData = getStringByKey((bidDataKey + "_OPEN"))
875873 if ((bidData == ""))
876874 then throw("Bid not found")
877875 else {
878876 let bidDataArr = split(bidData, "_")
879877 let assetId = getBidAssetId(bidDataArr[0])
880878 let bidStatus = "CANCELED"
881879 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
882880 }
883881 }
884882 }
885883
886884
887885 @Verifier(tx)
888886 func verifier () = match tx {
889887 case inv: InvokeScriptTransaction =>
890888 if (if (if (if ((inv.function == "addArtwork"))
891889 then (inv.dApp == this)
892890 else false)
893891 then (inv.fee == 500000)
894892 else false)
895893 then (inv.feeAssetId == unit)
896894 else false)
897895 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[13])))
898896 else if (if (if (if ((inv.function == "updateArtwork"))
899897 then (inv.dApp == this)
900898 else false)
901899 then (inv.fee == 500000)
902900 else false)
903901 then (inv.feeAssetId == unit)
904902 else false)
905903 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[12])))
906904 else if (if (if (if ((inv.function == "sellArtwork"))
907905 then (inv.dApp == this)
908906 else false)
909907 then (inv.fee == 500000)
910908 else false)
911909 then (inv.feeAssetId == unit)
912910 else false)
913911 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
914912 else if (if (if (if ((inv.function == "acceptBid"))
915913 then (inv.dApp == this)
916914 else false)
917915 then (inv.fee == 500000)
918916 else false)
919917 then (inv.feeAssetId == unit)
920918 else false)
921919 then sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[4])))
922920 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
923921 case _ =>
924922 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
925923 }
926924

github/deemru/w8io/873ac7e 
111.31 ms