tx · 5n6ZqEQpyvCW2hXGULkWmzXznHexDojRkCKkMqAzLkhk

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.01900000 Waves

2023.03.24 06:54 [2503574] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "5n6ZqEQpyvCW2hXGULkWmzXznHexDojRkCKkMqAzLkhk", "fee": 1900000, "feeAssetId": null, "timestamp": 1679630066281, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "4H17cXxPGq8R5rBrbxKtnR8kYNbwoxZiKxiTv4885zPhQeAo5f8UB5gtzDwLL9LTpV3453HMEkQqTrbYBJoQ1tQz" ], "script": "base64:BgKKFQgCEgQKAggIEhAKDggICAgICAgICAgICAEIEg8KDQgICAgICAgICAgIAQgSBgoECAgICBIECgIICBIICgYIAQEIAQgSBAoCCAgSBAoCCAgSBwoFCAgICAgSBgoECAgICCIOZ2V0U3RyaW5nQnlLZXkiA2tleSIIdW5pdFRlc3QiCW9yYWNsZUZlZSIIc2lnbkRhcHAiC2ZlZVJlY2VpdmVyIgh1c2VyRGFwcCINd2hpdGVsaXN0RGFwcCILc2lnbkFzc2V0SWQiC3VzZG5Bc3NldElkIgt1c2R0QXNzZXRJZCIMd2F2ZXNBc3NldElkIgVjaHJpcyIZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZSIPZ2V0SW50ZWdlckJ5S2V5Ig5jaGVja1doaXRlbGlzdCIPZ2V0Qm9vbGVhbkJ5S2V5IgdzaWduQ3V0Igt1c2RuV2F2ZUN1dCIOZGVmYXVsdExpY2VuY2UiEmRlZmF1bHRIYXNoTGljZW5jZSILZGFwcFJ1bm5pbmciDm1haW50ZW5hbmNlTVNHIg11c2VyU3VzcGVuZGVkIgt1c2VyUmVtb3ZlZCIQdXNlclVucmVnaXN0ZXJlZCILdXNlckFsbG93ZWQiGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UiFGNoZWNrU2lnbkNlcnRpZmljYXRlIgZzaWduSUQiBU93bmVyIgpzaGEyNTZIYXNoIgckbWF0Y2gwIgFhIgt2YWxpZGF0ZUNJRCIDY2lkIgx2YWxpZGF0ZUhhc2giBGhhc2giDWtleVVzZXJTdGF0dXMiBmNhbGxlciIHa2V5RGF0ZSIFYXJ0SWQiB2tleU5hbWUiB2tleURlc2MiDWtleURpc3BsYXlDaWQiDWtleUV4cG9ydEhhc2giDGtleUV4cG9ydENpZCIKa2V5TWF4TWludCIJa2V5U2lnbklEIglrZXlJc3N1ZWQiCWtleU9uU2FsZSIOa2V5TGljZW5jZUhhc2giDWtleUxpY2VuY2VDaWQiB2tleVRhZ3MiB2tleVR5cGUiB2tleU5vdGUiCmtleUNyYXdsZXIiDGtleVJveWFsdGllcyIIa2V5UHJpY2UiCmtleUVuZFNhbGUiEmtleUFzc2V0SWRBY2NlcHRlZCIHa2V5RmxhZyISa2V5QXJ0aXN0QWdlbnRBZGRyIgphcnRpc3RBZGRyIhRrZXlQcmltYXJ5U2hhcmVBZ2VudCIYa2V5QXJ0aXN0UHVibGljQWdlbnRBZGRyIhprZXlQcmltYXJ5U2hhcmVQdWJsaWNBZ2VudCIRa2V5SGFzaEJ5VHhpZEFkZHIiBHR4aWQiDmtleU93bmVyQnlIYXNoIg1rZXlpZEJ5U2lnbmlkIgZzaWduSWQiEmtleVR4aWRCeUhhc2hPd25lciIOdmFsaWRhdGVBbGxDSUQiCmNpZERpc3BsYXkiCWNpZEV4cG9ydCIKY2lkTGljZW5jZSIPdmFsaWRhdGVBbGxIYXNoIgxzaGEyNTZFeHBvcnQiDXNoYTI1NkxpY2VuY2UiDnZhbGlkYXRlU3RyaW5nIgNzdHIiA21heCIMdmFsaWRhdGVVc2VyIgp1c2VyU3RhdHVzIgpzZXRMSWNlbmNlIhN2YWxpZGF0ZUFydHdvcmtEYXRhIgpsaWNlbmNlQ0lEIgtsaWNlbmNlSGFzaCIEbmFtZSILZGVzY3JpcHRpb24iBHRhZ3MiCXJveWFsdGllcyIJY2hlY2tVc2VyIglpc1BheW1lbnQiAWkiB3BheW1lbnQiBmFtb3VudCIPdmFsaWRhdGVQYXltZW50IgskdDA5MTgwOTIxNiIHYXNzZXRJZCILaXNBcnRNaW50ZWQiCWFkZHJUb1VzZSIBYiIUdmFsaWRhdGVQcmljZUFzc2V0SWQiDHByaWNlQXNzZXRJZCIMYXJ0d29ya1ByaWNlIgskdDA5ODA0OTg0MCIQYWNjZXB0ZWRBc3NldElkcyIPdmFsaWRhdGVNaW5TZWxsIgVwcmljZSIMbWluU2VsbFdhdmVzIgttaW5TZWxsVXNkbiILbWluU2VsbFNpZ24iDWdldEJpZEFzc2V0SWQiFmdldFByaWNlQXNzZXRJZEZyb21CaWQiCmJpZERhdGFLZXkiB2JpZERhdGEiCmJpZERhdGFBcnIiCWJpZEFtb3VudCIKYmlkQXNzZXRJZCIVaWRDYWxsZXJEYXRlU3BvbnNvcmVkIgZwdWJLZXkiC2lzU3BvbnNvcmVkIhNnZXRfc3BvbnNvcmVkX3dhdmVzIgxpZENhbGxlckRhdGUiB2J1eU1pbnQiBmlzc3VlciIFYmlkSWQiCGJpZE93bmVyIg0kdDAxMzA0NDEzMTE0IgJpZCIEZGF0ZSIKbmV3X2NhbGxlciIFaXNCaWQiCGJsb2NrRW5kIg5jYWxsZXJJc0lzc3VlciIIdG90YWxORlQiC2FydHdvcmtOYW1lIghpc09uU2FsZSIKYW1vdW50U29sZCIKbWF4Q2FuU2VsbCINJHQwMTQ5ODYxNTE3OCIFYWdlbnQiCmFnZW50U2hhcmUiC3B1YmxpY0FnZW50IhBwdWJsaWNBZ2VudFNoYXJlIg1pc1doaXRlbGlzdGVkIgNjdXQiDWFtb3VudEZvclNpZ24iDmFtb3VudEZvckFnZW50IhRhbW91bnRGb3JQdWJsaWNBZ2VudCIQYW1vdW50Rm9yQ3JlYXRvciINbmV3QW1vdW50U29sZCIJaXNzdWVNZXRhIghpc3N1ZU5GVCIFaWRORlQiCnNlbGxTdGF0dXMiCnJlY2VpdmVORlQiCmFzc2V0SWRCaWQiCWJpZERlbE9sZCIJYmlkVXBkYXRlIgdzb2xkS2V5Iglzb2xkVmFsdWUiCHNvbGREYXRhIhRjb21taXNzaW9uc1dpdGhBZ2VudCIaY29tbWlzc2lvbnNXaXRoUHVibGljQWdlbnQiCnR4VG9DYWxsZXIiBmJ1eVJlcyIIYXNTdHJpbmciAmJ2IgNidjAiBmludm9rZSIDdmFsIgR0eXBlIgdjcmF3bGVyIg0kdDAyMDM1NDIwNDI3Ig0kdDAyMDUyODIwNTk3Ig92YWxpZGF0ZUFydHdvcmsiEHdoaXRlbGlzdGVkX2Ryb3AiDSR0MDIwODk2MjA5ODAiCmVudHJ5RXhpc3QiCWhhc2hFeGlzdCIPaXNTaWduQ2VydGlmaWVkIhdkZWNyZWFzZV93aGl0ZWxpc3RfZHJvcCINJHQwMjQwMTQyNDA4NCINJHQwMjQwOTQyNDE2MyIEZmxhZyIEYWRkciIEbm90ZSINJHQwMjU3OTAyNTgyNCINJHQwMjYyNjAyNjI5NCIMZGF0YVRvRGVsZXRlIgdtYXhNaW50Ig0kdDAyOTEzMDI5MjAwIgZiaWROYnIiCmJhc2VIZWlnaHQiDSR0MDMxNTgyMzE2MjIiDSR0MDMxNjI3MzE2NjMiDSR0MDMyODgzMzI5NTQiB2NhbGxlcjEiDSR0MDMzMTg5MzMyNTAiDXJldHVybk1vbmV5VG8iCWJpZFN0YXR1cyICdHgiCHZlcmlmaWVyIgNpbnZOAQFhAQFiCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAWICAAABYwcAAWQJAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX29yYWNsZV9mZWUAAWUJAQV2YWx1ZQEJAKYIAQkBAWEBAhFjb25mX3NpZ253ZWJfZGFwcAABZgkBAWEBAhFjb25mX2ZlZV9yZWNlaXZlcgABZwMFAWMJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX3VzZXJzX2RhcHAAAWgJAQV2YWx1ZQEJAKYIAQkBAWEBAhNjb25mX3doaXRlbGlzdF9kYXBwAAFpCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAFqCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0ROAAFrCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0RUAAFsAQAAAW0JAQFhAQIMY29uZl9hZG1pbl8xAQFuAQFiCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUBZAUBYgIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEBbwEBYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFiAAABAXABAWIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBaAUBYgAAAQFxAQFiCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFAWIHAAFyAAcAAXMACgABdAkBAWEBAhRjb25mX2RlZmF1bHRfbGljZW5jZQABdQkBAWEBAhljb25mX2RlZmF1bHRfbGljZW5jZV9oYXNoAAF2CQELdmFsdWVPckVsc2UCCQCbCAIFAWcCFGNvbmZfZGFwcF9pc19ydW5uaW5nBgABdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnAhRjb25mX21haW50ZW5hbmNlX21zZwIAAAF4AglTVVNQRU5ERUQAAXkCB1JFTU9WRUQAAXoCDFVOUkVHSVNURVJFRAABQQIHQUxMT1dFRAABQgkBAW4BCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBBQFpAQFDAwFEAUUBRgQBRwkAnQgCBQFlCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUBRAIBXwUBRQMJAAECBQFHAgZTdHJpbmcEAUgFAUcDCQEIY29udGFpbnMCBQFIBQFGBgcHAQFJAQFKAwkBCGNvbnRhaW5zAgUBSgIBLwMDCQBmAgBMCQCxAgEFAUoJAAACCQCxAgEJAJEDAgkAtQkCBQFKAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFAUoCAS8AAQcHAQFLAQFMCQAAAgkAsQIBBQFMAEABAU0BAU4JAKwCAgIMdXNlcl9zdGF0dXNfBQFOAQFPAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9kYXRlXwUBUAIBXwUBTgEBUQIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfbmFtZV8FAVACAV8FAU4BAVICAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X2Rlc2NfBQFQAgFfBQFOAQFTAgFOAVAJAKwCAgkArAICCQCsAgICEGFydF9kaXNwbGF5X2NpZF8FAVACAV8FAU4BAVQCAU4BUAkArAICCQCsAgIJAKwCAgIQYXJ0X2V4cG9ydF9oYXNoXwUBUAIBXwUBTgEBVQIBTgFQCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FAVACAV8FAU4BAVYCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQFQAgFfBQFOAQFXAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9zaWduaWRfBQFQAgFfBQFOAQFYAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9pc3N1ZWRfBQFQAgFfBQFOAQFZAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQFQAgFfBQFOAQFaAgFOAVAJAKwCAgkArAICCQCsAgICEWFydF9saWNlbmNlX2hhc2hfBQFQAgFfBQFOAQJhYQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQFQAgFfBQFOAQJhYgIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfdGFnc18FAVACAV8FAU4BAmFjAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF90eXBlXwUBUAIBXwUBTgECYWQCAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQFQAgFfBQFOAQJhZQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfY3Jhd2xlcl9jaWRfBQFQAgFfBQFOAQJhZgIBTgFQCQCsAgIJAKwCAgkArAICAg5hcnRfcm95YWx0aWVzXwUBUAIBXwUBTgECYWcCAU4BUAkArAICCQCsAgIJAKwCAgIKYXJ0X3ByaWNlXwUBUAIBXwUBTgECYWgCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X2VuZHNhbGVfBQFQAgFfBQFOAQJhaQIBTgFQCQCsAgIJAKwCAgkArAICAhJhcnRfYXNzZXRBY2NlcHRlZF8FAVACAV8FAU4BAmFqAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUBUAIBXwUBTgECYWsBAmFsCQCsAgICDWFydGlzdF9hZ2VudF8FAmFsAQJhbQECYWwJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQJhbAECYW4BAmFsCQCsAgICFGFydGlzdF9wdWJsaWNfYWdlbnRfBQJhbAECYW8BAmFsCQCsAgICHGFydGlzdF9wdWJsaWNfYWdlbnRfcHJpbWFyeV8FAmFsAQJhcAIBTgJhcQkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUCYXECAV8FAU4BAmFyAQFGCQCsAgICEmdldF9vd25lcl9ieV9oYXNoXwUBRgECYXMCAU4CYXQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUCYXQCAV8FAU4BAmF1AgFGAU4JAKwCAgIXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JANgEAQkA1BYBCQCbAwEJAKwCAgUBRgUBTgECYXYDAmF3AmF4AmF5AwkBASEBCQEBSQEFAmF3CQACAQIRV3JvbmcgRGlzcGxheSBDSUQDCQEBIQEJAQFJAQUCYXgJAAIBAhBXcm9uZyBFeHBvcnQgQ0lEAwMJAQIhPQIFAmF5AgAJAQEhAQkBAUkBBQJheQcJAAIBAhFXcm9uZyBMaWNlbmNlIENJRAYBAmF6AgJhQQJhQgMJAQEhAQkBAUsBBQJhQQkAAgECGEV4cG9ydCBIYXNoIDY0IGNoYXIuIG1heAMJAQEhAQkBAUsBBQJhQgkAAgECGUxpY2VuY2UgSGFzaCA2NCBjaGFyLiBtYXgGAQJhQwICYUQCYUUDCQAAAgkAsQIBBQJhRAAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUCYUQFAmFFCQACAQkArAICBQJhRAIMIGlzIHRvbyBsb25nBgECYUYBAU4EAmFHCQELdmFsdWVPckVsc2UCCQCdCAIFAWcJAQFNAQUBTgUBegMDCQAAAgUCYUcFAXoGCQAAAgUCYUcFAUECLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUCYUcFAXgCEUFjY291bnQgc3VzcGVuZGVkAwkAAAIFAmFHBQF5Ag9BY2NvdW50IHJlbW92ZWQCAAECYUgCAmF5AmFCBAFKAwkAAAIJALECAQUCYXkAAAUBdAUCYXkEAUwDCQAAAgkAsQIBBQJhQgAABQF1BQJhQgkAlAoCBQFKBQFMAQJhSQoBTgJhdwJheAJhSgJhQQJhSwJhTAJhTQJhTgJhTwQCYVAJAQJhRgEFAU4DCQECIT0CBQJhUAIACQACAQUCYVADCQAAAgkAsQIBBQJhdwAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQECYXYDBQJhdwUCYXgFAmFKCQACAQIQUHJvYmxlbSB3aXRoIENJRAMJAQEhAQkBAmF6AgUCYUEFAmFLCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBAmFDAgUCYUwAZAkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBAmFDAgUCYU0A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDCQBmAgAABQJhTwYJAGYCBQJhTwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQMJAGYCCQCQAwEJALUJAgUCYU4CASwABQkAAgECCzUgdGFncyBtYXguAgABAmFRAQJhUgMJAAACCQCQAwEIBQJhUghwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQCYVMJAQV2YWx1ZQEJAJEDAggFAmFSCHBheW1lbnRzAAAEAmFUCQEFdmFsdWUBCAUCYVMGYW1vdW50CQCUCgIFAmFTBQJhVAECYVUBAmFSBAJhVgkBAmFRAQUCYVIEAmFTCAUCYVYCXzEEAmFUCAUCYVYCXzIEAmFXAwMJAQlpc0RlZmluZWQBCAUCYVMHYXNzZXRJZAkAAAIIBQJhUwdhc3NldElkBQFpBwgFAmFTB2Fzc2V0SWQJAAIBAitPbmx5IFNJR04gdG9rZW4gYWNjZXB0ZWQgYXMgdHJhbnNhY3Rpb24gZmVlAwkBAiE9AgUCYVQFAUIJAAIBCQCsAgICGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAKQDAQUBQgkAlAoCBQJhVAUCYVcBAmFYAgJhWQFQBAFHCQCaCAIFBHRoaXMJAQFYAgUCYVkFAVADCQABAgUBRwIDSW50BAJhWgUBRwMJAQIhPQIFAmFaAAAGBwcBAmJhAwJhUgJiYgJiYwQCYmQJAQJhUQEFAmFSBAJhUwgFAmJkAl8xBAJhVAgFAmJkAl8yBAJhVwMJAQEhAQkBCWlzRGVmaW5lZAEIBQJhUwdhc3NldElkBQR1bml0AwMJAGYCCQCxAgEFAmJiAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQJhUwdhc3NldElkBQJiYgcIBQJhUwdhc3NldElkCQACAQIOV3JvbmcgYXNzZXQgaWQDAwkAAAIFAmFXBQR1bml0CQECIT0CBQJiYgIABwkAAgECDldyb25nIGFzc2V0IGlkAwkBAiE9AgUCYmMFAmFUCQACAQITUGF5bWVudCBkb24ndCBtYXRjaAkAlAoCBQJhVAUCYVcBAmJlAQJhVwMDAwMDCQECIT0CBQJhVwkA2AQBBQFpCQECIT0CBQJhVwkA2AQBBQFsBwkBAiE9AgUCYVcCBVdBVkVTBwkBAiE9AgUCYVcJANgEAQUBagcJAQIhPQIFAmFXCQDYBAEFAWsHCQACAQImT25seSBTSUdOLCBVU0ROLFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQGAQJiZgICYVcCYmcEAmJoAwUBYwAKCQEBbgECDndhdmVzX21pbl9zZWxsBAJiaQDAhD0EAmJqAwUBYwABCQBoAgUBQgACAwMDAwMDCQAAAgUCYVcJANgEAQUBagkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBawkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBaQkAZgIFAmJqBQJiZwcJAQIhPQIFAmJnAAAHBgMDAwkAAAIFAmFXCQDYBAEFAWwGCQAAAgUCYVcCBVdBVkVTCQBmAgUCYmgFAmJnBwkBAiE9AgUCYmcAAAcJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UGAQJiawECYVcDCQAAAgUCYVcCBVdBVkVTBQR1bml0CQDZBAEFAmFXAQJibAECYm0EAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOAwkAAAIFAmJuAgAJAAIBAg1CaWQgbm90IGZvdW5kBAJibwkAtQkCBQJibgIBXwQCYnAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibwABBAJicQkBAmJrAQkAkQMCBQJibwAAAwkAZwIAAAUCYnAJAAIBAgxXcm9uZyBhbW91bnQJAJQKAgUCYnAFAmJxAQJicgICYVICYnMDCQEBIQEFAXYJAAIBBQF3BAJidAMJAQIhPQIFAmJzAgAJAQt2YWx1ZU9yRWxzZQIJAQFwAQkArAICCQClCAEJAKcIAQkA2QQBBQJicwIJX2ZyZWVfdHhzAAAAAAMJAAACBQJidAUCYnQEAU4DAwkAAAIJANgEAQgIBQJhUgZjYWxsZXIFYnl0ZXMJAKUIAQUEdGhpcwkAZgIFAmJ0AAAHCQClCAEJAKcIAQkA2QQBBQJicwkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwQCYnUDAwkBAiE9AgUCYnMCAAkAZgIFAmJ0AAAHCQD8BwQFAWgCCXVzZUZyZWVUeAkAzAgCCQClCAEJAKcIAQkA2QQBBQJicwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCYnUFAmJ1CQCWCgQJANgEAQgFAmFSDXRyYW5zYWN0aW9uSWQFAU4IBQlsYXN0QmxvY2sJdGltZXN0YW1wCQBmAgUCYnQAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECYnYBAmFSAwkBASEBBQF2CQACAQUBdwkAlQoDCQDYBAEIBQJhUg10cmFuc2FjdGlvbklkCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAECYncGAmFSAVACYngCYnkCYnoCYnMEAmJBCQECYnICBQJhUgUCYnMEAmJCCAUCYkECXzEEAU4IBQJiQQJfMgQCYkMIBQJiQQJfMwQCYnQIBQJiQQJfNAMGCQACAQkApQMBBQJidAQCYkQDAwkAAAIJANgEAQgIBQJhUgZjYWxsZXIFYnl0ZXMJAKUIAQUEdGhpcwUCYnQHCQClCAEJAKcIAQkA2QQBBQJicwkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwMGCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUCYkQCAyAvIAUCYngCAyAvIAUCYnoCAyAvIAUCYnMEAmJFAwMDCQAAAgUBTgUCYngJAQIhPQIFAmJ6AgAHCQECIT0CBQJieQIABwYHBAJiRgkBAW8BCQECYWgCBQFOBQFQAwMDCQECIT0CBQJiRgAACQBnAgUGaGVpZ2h0BQJiRgcJAQEhAQUCYkUHCQACAQILU2FsZSBlbmRlZC4EAmJHCQAAAgUBTgUCYngEAmJICQEBbwECEHRvdGFsX25mdF9pc3N1ZWQEAUQJAQFhAQkBAVcCBQJieAUBUAQCYkkJAQFhAQkBAVECBQJieAUBUAMJAAACBQJiSQIACQACAQIRQXJ0IGRvZXNuJ3QgZXhpc3QEAmJKCQEBcQEJAQFZAgUCYngFAVAEAmJLCQEBbwEJAQFYAgUCYngFAVAEAmJjAwUCYkcJAGgCBQFCAAIJAQFvAQkBAmFnAgUCYngFAVAEAmJiAwUCYkcJANgEAQUBaQkBAWEBCQECYWkCBQJieAUBUAQCYkwJAQFvAQkBAVYCBQJieAUBUAMDAwkBASEBBQJiRQkBASEBBQJiRwcDAwkAZwIAAAUCYmMGCQEBIQEFAmJKBgkAZwIAAAUCYkwHCQACAQIQQXJ0IG5vdCBmb3Igc2FsZQMDAwkBASEBBQJiRQUCYkcHCQBnAgAABQJiTAcJAAIBAhRNYXggaXNzdWFibGUgbm90IHNldAQCYVAJAQJhRgEFAmJ4AwMFAmJFCQECIT0CBQJhUAIABwkAAgEFAmFQBAJibQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQFQAgFfBQJieAIBXwUCYnoCAV8FAmJ5BAJiTQMFAmJFCQECYmwBBQJibQkBAmJhAwUCYVIFAmJiBQJiYwQCYVQIBQJiTQJfMQQCYVcIBQJiTQJfMgQCYk4JAQt2YWx1ZU9yRWxzZQIJAJ0IAgUBZwkBAmFrAQUCYngFAWYEAmJPCQELdmFsdWVPckVsc2UCCQCaCAIFAWcJAQJhbQEFAmJ4AAAEAmJQCQELdmFsdWVPckVsc2UCCQCdCAIFAWcJAQJhbgEFAmJ4BQFmBAJiUQkBC3ZhbHVlT3JFbHNlAgkAmggCBQFnCQECYW8BBQJieAAABAJiUgkBAXABBQJieAQCYlMDCQBmAgUCYlIFBmhlaWdodAAAAwkAAAIFAmFXBQFpBQFyBQFzBAJiVAkAawMFAmFUBQJiUwBkBAJiVQMDAwkBAiE9AgUCYk4FAWYJAGYCBQJiTwAABwkAZgIFBmhlaWdodAUCYlIHCQBrAwUCYVQFAmJPAJBOAAAEAmJWAwMDCQECIT0CBQJiUAUBZgkAZgIFAmJRAAAHCQBmAgUGaGVpZ2h0BQJiUgcJAGsDBQJhVAUCYlEAkE4AAAQCYlcJAGUCBQJhVAUCYlQDCQAAAgUCYksFAmJMCQACAQIMQXJ0IHNvbGQgb3V0BAJiWAkAZAIFAmJLAAEEAmJZCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJQ3JlYXRvcjogBQJieAIKLAogQXJ0SUQ6IAUBUAILLAogU2lnbklEOiAFAUQCESwKIEFydHdvcmsgbmFtZTogBQJiSQIKLAogSXNzdWU6IAkApAMBBQJiWAIBLwkApAMBBQJiTAQCYloJAMIIBQkArAICAgNTQV8JAKQDAQkAZAIFAmJIAAEFAmJZAAEAAAcEAmNhCQC4CAEFAmJaBAJjYgMDCQAAAgUCYlgFAmJMBgkBASEBBQJiSgcGBAJjYwMDAwkAAAIFAU4FAmJ4CQECIT0CBQJiegIABwkBAiE9AgUCYnkCAAcJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmJ6CAUCYVIGY2FsbGVyBAJjZAMJAQEhAQkBCWlzRGVmaW5lZAEFAmFXAgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJhVwQCYm4JAQFhAQkArAICBQJibQIFX09QRU4EAmNlCQELRGVsZXRlRW50cnkBCQCsAgIFAmJtAgVfT1BFTgQCY2YJAQtTdHJpbmdFbnRyeQIJAKwCAgUCYm0CB19DTE9TRUQJAKwCAgkArAICBQJibgIBXwkApAMBBQJiQwQCY2cJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJYXJ0X3NvbGRfCQCkAwEFAmJYAgRfb2ZfCQCkAwEFAmJMAgFfBQFQAgFfBQJieAQCY2gDCQEBIQEFAmJFCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFAU4CAV8JAKQDAQUCYkMCAV8FAmJCAgFfCQCkAwEFAmJjAgFfBQJiYgIBXwkA2AQBBQJjYQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEFAmNjAgFfCQCkAwEFAmJDAgFfBQJiQgIBXwkApAMBBQJhVAIBXwUCY2QCAV8JANgEAQUCY2EEAmNpCQELU3RyaW5nRW50cnkCBQJjZwUCY2gEAmNqAwkBAiE9AgUCYlUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBZgkAZQIFAmJUBQJiVQUCYVcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAmJOBQJiVQUCYVcFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBZgUCYlQFAmFXBQNuaWwEAmNrAwkBAiE9AgUCYlYAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYlAFAmJWBQJhVwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYngJAGUCBQJiVwUCYlYFAmFXBQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAmJ4BQJiVwUCYVcFA25pbAQCY2wDBQJidAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAQCY20JAM4IAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUCYngFAVAFAmJYCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIEbmZ0XwkA2AQBBQJjYQUCY2cJAMwIAgkBDEludGVnZXJFbnRyeQICEHRvdGFsX25mdF9pc3N1ZWQJAGQCBQJiSAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWgCBQJieAUBUAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEBWQIFAmJ4BQFQBQJjYgkAzAgCBQJiWgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJjYwABBQJjYQUDbmlsBQJjagUCY2sFAmNsAwUCYkUJAMwIAgUCY2kJAMwIAgUCY2YJAMwIAgUCY2UFAmNtCQDMCAIFAmNpBQJjbQECY24BAmNvBAFHBQJjbwMJAAECBQFHAgZTdHJpbmcEAmNwBQFHBQJjcAkAAgECJFNwb25zb3JlZCBQdWJsaWMgS2V5IFN0cmluZyBleHBlY3RlZAoCY3EBB3NldENvbmYCAWICY3IEAU4JAKUIAQgFAmNxBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAW0JAMwIAgkApQgBBQR0aGlzBQNuaWwFAU4DCQEIY29udGFpbnMCBQFiAgVjb25mXwkAzAgCCQELU3RyaW5nRW50cnkCBQFiBQJjcgUDbmlsCQACAQIgRW50cmllcyBzdGFydGluZyB3aXRoIGNvbmZfIG9ubHkJAAIBAiJZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGlzAmFSAQphZGRBcnR3b3JrDgFGAUQCYUwCYU0CYU4CY3MCYXcCYUECYXgCYUICYXkCY3QCYU8CYnMEAmN1CQECYnICBQJhUgUCYnMEAVAIBQJjdQJfMQQBTggFAmN1Al8yBAJiQwgFAmN1Al8zBAJidAgFAmN1Al80AwkBASEBCQEBSwEFAUYJAAIBAiRIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0EAmN2CQECYUgCBQJheQUCYUIEAmFKCAUCY3YCXzEEAmFLCAUCY3YCXzIEAmN3CQECYUkKBQFOBQJhdwUCYXgFAmFKBQJhQQUCYUsFAmFMBQJhTQUCYU4FAmFPAwkBAiE9AgUCY3cCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQCY3gJAGYCCQEBcAEJAKwCAgUBTgILX2ZyZWVfZHJvcHMAAAQCY3kDBQJjeAkAlAoCAAAFAUQJAQJhVQEFAmFSBAJhVAgFAmN5Al8xBAJhVwgFAmN5Al8yAwkBASEBCQEJaXNEZWZpbmVkAQUCYVQJAAIBAhRTb21ldGhpbmcgd2VudCB3cm9uZwQCY3oJAQFhAQkBAmF1AgUBRgUBTgMJAQIhPQIFAmN6AgAJAAIBAhRZb3UgYWxyZWFkeSBhZGRlZCBpdAQCY0EJAQFhAQkBAmFyAQUBRgMJAQIhPQIFAmNBAgAJAAIBAhdIYXNoIGFscmVhZHkgcmVnaXN0ZXJlZAQCY0IJAQFDAwUBRAUBTgUBRgMJAQEhAQUCY0IJAAIBAixTaWduIENlcnRpZmljYXRlIG5vdCBmb3VuZCBmb3IgdGhpcyBhZGRyZXNzLgQCY0MDBQJjeAkA/AcEBQFoAgt1c2VGcmVlRHJvcAkAzAgCBQFOBQNuaWwFA25pbAUEdW5pdAMJAAACBQJjQwUCY0MEAmNsAwUCYnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAU4AAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCCQECYXIBBQFGBQFOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhdQIFAUYFAU4FAVAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFPAgUBTgUBUAUCYkMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVECBQFOBQFQBQJhTAkAzAgCCQELU3RyaW5nRW50cnkCCQEBUgIFAU4FAVAFAmFNCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFTAgUBTgUBUAUCYXcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVUCBQFOBQFQBQJheAkAzAgCCQELU3RyaW5nRW50cnkCCQEBVAIFAU4FAVAFAmFBCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAgUBTgUBUAUCYUsJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgUBTgUBUAUCYUoJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFjAgUBTgUBUAUCY3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFiAgUBTgUBUAUCYU4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFWAgUBTgUBUAAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFXAgUBTgUBUAUBRAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQFOBQFQAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFZAgUBTgUBUAcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFzAgUBTgUBRAUBUAkAzAgCCQELU3RyaW5nRW50cnkCCQECYXACBQFOBQFQBQFGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQIFAU4FAVAFAmN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWYCBQFOBQFQBQJhTwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBZgUCYVQFAWkFA25pbAUCY2wJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYVIBDXVwZGF0ZUFydHdvcmsNAmFxAmFMAmFNAmFOAmNzAmF3AmFBAmF4AmFCAmF5AmN0AmFPAmJzAwkBASEBBQF2CQACAQUBdwQCY0QJAQJicgIFAmFSBQJicwQCYkIIBQJjRAJfMQQBTggFAmNEAl8yBAJiQwgFAmNEAl8zBAJidAgFAmNEAl80BAJjRQkBAmFIAgUCYXkFAmFCBAJhSggFAmNFAl8xBAJhSwgFAmNFAl8yBAJjdwkBAmFJCgUBTgUCYXcFAmF4BQJhSgUCYUEFAmFLBQJhTAUCYU0FAmFOBQJhTwMJAQIhPQIFAmN3AgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEAmN6CQEBYQEJAQFRAgUBTgUCYXEDCQAAAgUCY3oCAAkAAgECD0VudHJ5IG5vdCBmb3VuZAQCY0YJAQFhAQkBAmFqAgUBTgUCYXEDCQAAAgUCY0YCB0lMTEVHQUwJAAIBAh1DYW5ub3QgdXBkYXRlIElMTEVHQUwgYXJ0d29yawMJAQEhAQkBAmFYAgUBTgUCYXEEAmNsAwUCYnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFAU4AAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCCQEBUQIFAU4FAmFxBQJhTAkAzAgCCQELU3RyaW5nRW50cnkCCQEBUgIFAU4FAmFxBQJhTQkAzAgCCQELU3RyaW5nRW50cnkCCQEBUwIFAU4FAmFxBQJhdwkAzAgCCQELU3RyaW5nRW50cnkCCQEBVQIFAU4FAmFxBQJheAkAzAgCCQELU3RyaW5nRW50cnkCCQEBVAIFAU4FAmFxBQJhQQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECBQFOBQJhcQUCYUoJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoCBQFOBQJhcQUCYUsJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFiAgUBTgUCYXEFAmFOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYwIFAU4FAmFxBQJjcwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWUCBQFOBQJhcQUCY3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhZgIFAU4FAmFxBQJhTwUDbmlsBQJjbAkAAgECDkFscmVhZHkgbWludGVkAmFSAQtmbGFnQXJ0d29yawQBUAJjRwJjRgJjSAQCY0kJAQJidgEFAmFSBAJiQggFAmNJAl8xBAFOCAUCY0kCXzIDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQFtCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQFOAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIHQ09OU0VOVAkAzAgCAgAJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQJjRgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWoCBQJjRwUBUAUCY0YJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgUCY0cFAVAFAmNIBQNuaWwJAAIBCQCsAgICDlVua25vdyBzdGF0dXMgBQJjRgkAAgECE1lvdSBhcmUgbm90IGFsbG93ZWQCYVIBDWRlbGV0ZUFydHdvcmsCAVACY0cEAmNKCQECYnYBBQJhUgQCYkIIBQJjSgJfMQQBTggFAmNKAl8yBAJhWQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAW0JAMwIAgkApQgBBQR0aGlzBQNuaWwFAU4FAmNHBQFOBAJjegkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQEBYQEJAQFRAgUCYVkFAVACIE5vIGFydCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzAwkAAAIFAmN6AgAJAAIBAiBObyBhcnQgbWF0Y2hpbmcgZm9yIHRoaXMgYWRkcmVzcwQBRgkBAWEBCQECYXACBQJhWQUBUAMJAAACBQFGAgAJAAIBAiVObyBhcnQgaGFzaCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzBAFECQEBYQEJAQFXAgUCYVkFAVADCQAAAgUBRAIACQACAQITTm8gU0lHTiBJRCBtYXRjaGluZwQCY0sJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAU8CBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBUQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFSAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVMCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBVQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFUAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVoCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWECBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWMCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWICBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBVgIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFXAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVgCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBWQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhagIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhZwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhaQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhcgEFAUYJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFzAgUCYVkFAUQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmF1AgUBRgUCYVkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFoAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFkAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFlAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFmAgUCYVkFAVAFA25pbAMJAQEhAQkBAmFYAgUCYVkFAVADCQEBIQEFAXYJAAIBBQF3BQJjSwMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAW0JAMwIAgkApQgBBQR0aGlzBQNuaWwFAU4FAmNLCQACAQIoQXJ0IGFscmVhZHkgbWludGVkLCB5b3UgY2Fubm90IGRlbGV0ZSBpdAJhUgELc2VsbEFydHdvcmsGAVACYmcCY0wCYVcCYkYCYnMEAmNNCQECYnICBQJhUgUCYnMEAmJCCAUCY00CXzEEAU4IBQJjTQJfMgQCYkMIBQJjTQJfMwQCYnQIBQJjTQJfNAQCYkkJAQFhAQkBAVECBQFOBQFQAwkAAAIFAmJJAgAJAAIBAiNUaGlzIGFydCBkb2Vzbid0IG1hdGNoIHlvdXIgYWNjb3VudAQCY0YJAQFhAQkBAmFqAgUBTgUBUAMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUCY0YJAAIBAg9GbGFnZ2VkIGFydHdvcmsEAmNOCQEBbwEJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQAwkAZgIAAAUCYkYJAAIBAgxOZWdhdGl2ZSBlbmQDAwkAZgIFAmJGAAADCQECIT0CBQJjTAABBgkBAiE9AgUCYmcAAAcJAAIBAjpUaW1lZCBvZmZlciBvbmx5IGFsbG93ZWQgZm9yIHVuaXF1ZSBlZGl0aW9uIGFuZCBvZmZlciBvbmx5BAJjTwMJAAACBQJiRgAAAAAFBmhlaWdodAMJAQEhAQkBAmJlAQUCYVcJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEDCQEBIQEJAQJiZgIFAmFXBQJiZwkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQCYVAJAQJhRgEFAU4DCQECIT0CBQJhUAIACQACAQUCYVAEAmJLCQEBbwEJAQFYAgUBTgUBUAQCYkwJAQFvAQkBAVYCBQFOBQFQAwkAZgIFAmNMAGQJAAIBAhwxMDAgZWRpdGlvbnMgbWF4IHBlciBhcnR3b3JrAwMJAQIhPQIFAmJLAAAJAAACBQJiSwUCYkwHCQACAQIUTWF4IGVkaXRpb24gcmVhY2hlZC4DAwkAZgIFAmJLAAAJAQIhPQIFAmJMBQJjTAcJAAIBAiZDYW5ub3QgY2hhbmdlIG1heGltdW0gaXNzdWFibGUgYW55bW9yZQMDCQBmAgUCY04AAAkBAiE9AgUCYkwFAmNMBwkAAgECMUNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSB3aXRoIGFjdGl2ZSBvcmRlcnMEAmNiAwMJAGYCBQJiZwAACQBmAgUCY0wAAAcGBwQCY2wDBQJidAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQxCb29sZWFuRW50cnkCCQEBWQIFAU4FAVAFAmNiCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWcCBQFOBQFQBQJiZwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVYCBQFOBQFQBQJjTAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWkCBQFOBQFQBQJhVwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFoAgUBTgUBUAkAZAIFAmNPBQJiRgUDbmlsBQJjbAJhUgEKYnV5QXJ0d29yawIBUAJieAkBAmJ3BgUCYVIFAVAFAmJ4AgACAAIAAmFSAQZzZXRCaWQCAVACYngEAmNQCQECYnYBBQJhUgQCYkIIBQJjUAJfMQQBTggFAmNQAl8yBAJiQwgFAmNQAl8zBAJjUQkBAmFRAQUCYVIEAmFTCAUCY1ECXzEEAmFUCAUCY1ECXzIEAmFXAwkBASEBCQEJaXNEZWZpbmVkAQgFAmFTB2Fzc2V0SWQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEIBQJhUwdhc3NldElkBAJiRgkBAW8BCQECYWgCBQJieAUBUAMDCQECIT0CBQJiRgAACQBnAgUGaGVpZ2h0BQJiRgcJAAIBAgtTYWxlIGVuZGVkLgQCY04JAQFvAQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVADCQEBIQEJAQJiZQEFAmFXCQACAQISYXNzZXQgbm90IGFjY2VwdGVkAwkBASEBCQECYmYCBQJhVwUCYVQJAAIBAg5Xcm9uZyBtaW4gc2VsbAQCYksJAQFvAQkBAVgCBQJieAUBUAQCYkwJAQFvAQkBAVYCBQJieAUBUAMJAGcCAAAFAmJMCQACAQIjTm8gbWF4IGVkaXRpb24gc2V0IGZvciB0aGlzIGFydHdvcmsDCQBnAgUCYksFAmJMCQACAQIYU29sZCBvdXQsIHlvdSBjYW5ub3QgYmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQFQAgFfBQJieAIBXwUBTgIBXwUCYkICBV9PUEVOCQCsAgIJAKwCAgkArAICCQCsAgIFAmFXAgFfCQCkAwEFAmFUAgFfCQCkAwEFAmJDCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUBUAkAZAIFAmNOAAEFA25pbAJhUgEJYWNjZXB0QmlkBQFQAmJ4AmJ5AmJ6AmJzBAJjUgkBAmJyAgUCYVIFAmJzBAJiQggFAmNSAl8xBAJjUwgFAmNSAl8yBAJiQwgFAmNSAl8zBAJidAgFAmNSAl80AwkBAiE9AgUCY1MFAmJ4CQACAQIZWW91IGNhbm5vdCBkbyB0aGlzIGFjdGlvbgkBAmJ3BgUCYVIFAVAFAmJ4BQJieQUCYnoFAmJzAmFSAQljYW5jZWxCaWQEAVACYngCYnkCYnoEAmNUCQECYnYBBQJhUgQCYkIIBQJjVAJfMQQBTggFAmNUAl8yBAJiQwgFAmNUAl8zAwMJAQIhPQIFAU4FAmJ6CQECIT0CBQFOBQJieAcJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uBAJjVQMJAAACBQFOBQJieAUCYnoFAU4EAmNOCQEBbwEJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQBAJibQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQFQAgFfBQJieAIBXwUCYnoCAV8FAmJ5BAJibgkBAWEBCQCsAgIFAmJtAgVfT1BFTgMJAAACBQJibgIACQACAQINQmlkIG5vdCBmb3VuZAQCYm8JALUJAgUCYm4CAV8EAmFXCQECYmsBCQCRAwIFAmJvAAAEAmNWAghDQU5DRUxFRAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIFAmJtAgVfT1BFTgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgUCYm0CAV8FAmNWCQCsAgIJAKwCAgUCYm4CAV8JAKQDAQUCYkMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQCQBlAgUCY04AAQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCY1UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibwABBQJhVwUDbmlsAQJjVwECY1gABAFHBQJjVwMJAAECBQFHAhdJbnZva2VTY3JpcHRUcmFuc2FjdGlvbgQCY1kFAUcDAwMDCQAAAggFAmNZCGZ1bmN0aW9uAgphZGRBcnR3b3JrCQAAAggFAmNZBGRBcHAFBHRoaXMHCQAAAggFAmNZA2ZlZQCgwh4HCQAAAggFAmNZCmZlZUFzc2V0SWQFBHVuaXQHCQD0AwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACQDZBAEJAQJjbgEJAJEDAggFAmNZBGFyZ3MADQMDAwMJAAACCAUCY1kIZnVuY3Rpb24CDXVwZGF0ZUFydHdvcmsJAAACCAUCY1kEZEFwcAUEdGhpcwcJAAACCAUCY1kDZmVlAKDCHgcJAAACCAUCY1kKZmVlQXNzZXRJZAUEdW5pdAcJAPQDAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAJANkEAQkBAmNuAQkAkQMCCAUCY1kEYXJncwAMAwMDAwkAAAIIBQJjWQhmdW5jdGlvbgILc2VsbEFydHdvcmsJAAACCAUCY1kEZEFwcAUEdGhpcwcJAAACCAUCY1kDZmVlAKDCHgcJAAACCAUCY1kKZmVlQXNzZXRJZAUEdW5pdAcJAPQDAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAJANkEAQkBAmNuAQkAkQMCCAUCY1kEYXJncwAFAwMDAwkAAAIIBQJjWQhmdW5jdGlvbgIJYWNjZXB0QmlkCQAAAggFAmNZBGRBcHAFBHRoaXMHCQAAAggFAmNZA2ZlZQCgwh4HCQAAAggFAmNZCmZlZUFzc2V0SWQFBHVuaXQHCQDIEwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACQDZBAEJAQJjbgEJAJEDAggFAmNZBGFyZ3MABAkA9AMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAgFAmNXD3NlbmRlclB1YmxpY0tleQkA9AMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAgFAmNXD3NlbmRlclB1YmxpY0tlecYcb14=", "height": 2503574, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E62xW1pw9jgsZWimhpYQf5o6ytu658QTQt6nywD19fmV Next: D5DNmHBBNvQX8fZnK9ct8VdFY218zBphrbaaVyoRPkrJ Diff:
OldNewDifferences
393393 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
394394 else unit
395395 if ((get_sponsored_waves == get_sponsored_waves))
396- then if (true)
397- then throw(toString((isSponsored > 0)))
398- else $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
396+ then $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
399397 else throw("Strict value is not equal to itself.")
400398 }
401399 else throw("Strict value is not equal to itself.")
408406
409407
410408 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
411- let $t01310013170 = idCallerDateSponsored(i, pubKey)
412- let id = $t01310013170._1
413- let caller = $t01310013170._2
414- let date = $t01310013170._3
415- let isSponsored = $t01310013170._4
409+ let $t01304413114 = idCallerDateSponsored(i, pubKey)
410+ let id = $t01304413114._1
411+ let caller = $t01304413114._2
412+ let date = $t01304413114._3
413+ let isSponsored = $t01304413114._4
416414 if (true)
417- then throw(((toString((toBase58String(i.caller.bytes) == toString(this))) + " / ") + toString(isSponsored)))
415+ then throw(toString(isSponsored))
418416 else {
419417 let new_caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
420418 then isSponsored
479477 then throw(checkUser)
480478 else {
481479 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
482- let $t01511215304 = if (isBid)
480+ let $t01498615178 = if (isBid)
483481 then getPriceAssetIdFromBid(bidDataKey)
484482 else validatePriceAssetId(i, priceAssetId, artworkPrice)
485- let amount = $t01511215304._1
486- let assetId = $t01511215304._2
483+ let amount = $t01498615178._1
484+ let assetId = $t01498615178._2
487485 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
488486 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
489487 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
589587
590588 @Callable(i)
591589 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
592- let $t02048020553 = idCallerDateSponsored(i, pubKey)
593- let artId = $t02048020553._1
594- let caller = $t02048020553._2
595- let date = $t02048020553._3
596- let isSponsored = $t02048020553._4
590+ let $t02035420427 = idCallerDateSponsored(i, pubKey)
591+ let artId = $t02035420427._1
592+ let caller = $t02035420427._2
593+ let date = $t02035420427._3
594+ let isSponsored = $t02035420427._4
597595 if (!(validateHash(sha256Hash)))
598596 then throw("Hash should be 64 characters maximum")
599597 else {
600- let $t02065420723 = setLIcence(cidLicence, sha256Licence)
601- let licenceCID = $t02065420723._1
602- let licenceHash = $t02065420723._2
598+ let $t02052820597 = setLIcence(cidLicence, sha256Licence)
599+ let licenceCID = $t02052820597._1
600+ let licenceHash = $t02052820597._2
603601 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
604602 if ((validateArtwork != ""))
605603 then throw("Something went wrong!")
606604 else {
607605 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
608- let $t02102221106 = if (whitelisted_drop)
606+ let $t02089620980 = if (whitelisted_drop)
609607 then $Tuple2(0, signID)
610608 else validatePayment(i)
611- let amount = $t02102221106._1
612- let assetId = $t02102221106._2
609+ let amount = $t02089620980._1
610+ let assetId = $t02089620980._2
613611 if (!(isDefined(amount)))
614612 then throw("Something went wrong")
615613 else {
650648 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
651649 then throw(maintenanceMSG)
652650 else {
653- let $t02414024210 = idCallerDateSponsored(i, pubKey)
654- let id = $t02414024210._1
655- let caller = $t02414024210._2
656- let date = $t02414024210._3
657- let isSponsored = $t02414024210._4
658- let $t02422024289 = setLIcence(cidLicence, sha256Licence)
659- let licenceCID = $t02422024289._1
660- let licenceHash = $t02422024289._2
651+ let $t02401424084 = idCallerDateSponsored(i, pubKey)
652+ let id = $t02401424084._1
653+ let caller = $t02401424084._2
654+ let date = $t02401424084._3
655+ let isSponsored = $t02401424084._4
656+ let $t02409424163 = setLIcence(cidLicence, sha256Licence)
657+ let licenceCID = $t02409424163._1
658+ let licenceHash = $t02409424163._2
661659 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
662660 if ((validateArtwork != ""))
663661 then throw("Something went wrong!")
685683
686684 @Callable(i)
687685 func flagArtwork (artId,addr,flag,note) = {
688- let $t02591625950 = idCallerDate(i)
689- let id = $t02591625950._1
690- let caller = $t02591625950._2
686+ let $t02579025824 = idCallerDate(i)
687+ let id = $t02579025824._1
688+ let caller = $t02579025824._2
691689 if (containsElement([chris, toString(this)], caller))
692690 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
693691 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
699697
700698 @Callable(i)
701699 func deleteArtwork (artId,addr) = {
702- let $t02638626420 = idCallerDate(i)
703- let id = $t02638626420._1
704- let caller = $t02638626420._2
700+ let $t02626026294 = idCallerDate(i)
701+ let id = $t02626026294._1
702+ let caller = $t02626026294._2
705703 let addrToUse = if (containsElement([chris, toString(this)], caller))
706704 then addr
707705 else caller
734732
735733 @Callable(i)
736734 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
737- let $t02925629326 = idCallerDateSponsored(i, pubKey)
738- let id = $t02925629326._1
739- let caller = $t02925629326._2
740- let date = $t02925629326._3
741- let isSponsored = $t02925629326._4
735+ let $t02913029200 = idCallerDateSponsored(i, pubKey)
736+ let id = $t02913029200._1
737+ let caller = $t02913029200._2
738+ let date = $t02913029200._3
739+ let isSponsored = $t02913029200._4
742740 let artworkName = getStringByKey(keyName(caller, artId))
743741 if ((artworkName == ""))
744742 then throw("This art doesn't match your account")
812810
813811 @Callable(i)
814812 func setBid (artId,issuer) = {
815- let $t03170831748 = idCallerDate(i)
816- let id = $t03170831748._1
817- let caller = $t03170831748._2
818- let date = $t03170831748._3
819- let $t03175331789 = isPayment(i)
820- let payment = $t03175331789._1
821- let amount = $t03175331789._2
813+ let $t03158231622 = idCallerDate(i)
814+ let id = $t03158231622._1
815+ let caller = $t03158231622._2
816+ let date = $t03158231622._3
817+ let $t03162731663 = isPayment(i)
818+ let payment = $t03162731663._1
819+ let amount = $t03162731663._2
822820 let assetId = if (!(isDefined(payment.assetId)))
823821 then "WAVES"
824822 else toBase58String(value(payment.assetId))
849847
850848 @Callable(i)
851849 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
852- let $t03300933080 = idCallerDateSponsored(i, pubKey)
853- let id = $t03300933080._1
854- let caller1 = $t03300933080._2
855- let date = $t03300933080._3
856- let isSponsored = $t03300933080._4
850+ let $t03288332954 = idCallerDateSponsored(i, pubKey)
851+ let id = $t03288332954._1
852+ let caller1 = $t03288332954._2
853+ let date = $t03288332954._3
854+ let isSponsored = $t03288332954._4
857855 if ((caller1 != issuer))
858856 then throw("You cannot do this action")
859857 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
863861
864862 @Callable(i)
865863 func cancelBid (artId,issuer,bidId,bidOwner) = {
866- let $t03331533376 = idCallerDate(i)
867- let id = $t03331533376._1
868- let caller = $t03331533376._2
869- let date = $t03331533376._3
864+ let $t03318933250 = idCallerDate(i)
865+ let id = $t03318933250._1
866+ let caller = $t03318933250._2
867+ let date = $t03318933250._3
870868 if (if ((caller != bidOwner))
871869 then (caller != issuer)
872870 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 if ((isSponsored == isSponsored))
384384 then {
385385 let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
386386 then (isSponsored > 0)
387387 else false)
388388 then toString(addressFromPublicKey(fromBase58String(pubKey)))
389389 else toBase58String(i.caller.bytes)
390390 let get_sponsored_waves = if (if ((pubKey != ""))
391391 then (isSponsored > 0)
392392 else false)
393393 then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
394394 else unit
395395 if ((get_sponsored_waves == get_sponsored_waves))
396- then if (true)
397- then throw(toString((isSponsored > 0)))
398- else $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
396+ then $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
399397 else throw("Strict value is not equal to itself.")
400398 }
401399 else throw("Strict value is not equal to itself.")
402400 }
403401
404402
405403 func idCallerDate (i) = if (!(dappRunning))
406404 then throw(maintenanceMSG)
407405 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
408406
409407
410408 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
411- let $t01310013170 = idCallerDateSponsored(i, pubKey)
412- let id = $t01310013170._1
413- let caller = $t01310013170._2
414- let date = $t01310013170._3
415- let isSponsored = $t01310013170._4
409+ let $t01304413114 = idCallerDateSponsored(i, pubKey)
410+ let id = $t01304413114._1
411+ let caller = $t01304413114._2
412+ let date = $t01304413114._3
413+ let isSponsored = $t01304413114._4
416414 if (true)
417- then throw(((toString((toBase58String(i.caller.bytes) == toString(this))) + " / ") + toString(isSponsored)))
415+ then throw(toString(isSponsored))
418416 else {
419417 let new_caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
420418 then isSponsored
421419 else false)
422420 then toString(addressFromPublicKey(fromBase58String(pubKey)))
423421 else toBase58String(i.caller.bytes)
424422 if (true)
425423 then throw(((((((new_caller + " / ") + issuer) + " / ") + bidOwner) + " / ") + pubKey))
426424 else {
427425 let isBid = if (if (if ((caller == issuer))
428426 then (bidOwner != "")
429427 else false)
430428 then (bidId != "")
431429 else false)
432430 then true
433431 else false
434432 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
435433 if (if (if ((blockEnd != 0))
436434 then (height >= blockEnd)
437435 else false)
438436 then !(isBid)
439437 else false)
440438 then throw("Sale ended.")
441439 else {
442440 let callerIsIssuer = (caller == issuer)
443441 let totalNFT = getIntegerByKey("total_nft_issued")
444442 let signID = getStringByKey(keySignID(issuer, artId))
445443 let artworkName = getStringByKey(keyName(issuer, artId))
446444 if ((artworkName == ""))
447445 then throw("Art doesn't exist")
448446 else {
449447 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
450448 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
451449 let artworkPrice = if (callerIsIssuer)
452450 then (currentCertificationPrice * 2)
453451 else getIntegerByKey(keyPrice(issuer, artId))
454452 let priceAssetId = if (callerIsIssuer)
455453 then toBase58String(signAssetId)
456454 else getStringByKey(keyAssetIdAccepted(issuer, artId))
457455 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
458456 if (if (if (!(isBid))
459457 then !(callerIsIssuer)
460458 else false)
461459 then if (if ((0 >= artworkPrice))
462460 then true
463461 else !(isOnSale))
464462 then true
465463 else (0 >= maxCanSell)
466464 else false)
467465 then throw("Art not for sale")
468466 else if (if (if (!(isBid))
469467 then callerIsIssuer
470468 else false)
471469 then (0 >= maxCanSell)
472470 else false)
473471 then throw("Max issuable not set")
474472 else {
475473 let checkUser = validateUser(issuer)
476474 if (if (isBid)
477475 then (checkUser != "")
478476 else false)
479477 then throw(checkUser)
480478 else {
481479 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
482- let $t01511215304 = if (isBid)
480+ let $t01498615178 = if (isBid)
483481 then getPriceAssetIdFromBid(bidDataKey)
484482 else validatePriceAssetId(i, priceAssetId, artworkPrice)
485- let amount = $t01511215304._1
486- let assetId = $t01511215304._2
483+ let amount = $t01498615178._1
484+ let assetId = $t01498615178._2
487485 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
488486 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
489487 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
490488 let publicAgentShare = valueOrElse(getInteger(userDapp, keyPrimarySharePublicAgent(issuer)), 0)
491489 let isWhitelisted = checkWhitelist(issuer)
492490 let cut = if ((isWhitelisted > height))
493491 then 0
494492 else if ((assetId == signAssetId))
495493 then signCut
496494 else usdnWaveCut
497495 let amountForSign = fraction(amount, cut, 100)
498496 let amountForAgent = if (if (if ((agent != feeReceiver))
499497 then (agentShare > 0)
500498 else false)
501499 then (height > isWhitelisted)
502500 else false)
503501 then fraction(amount, agentShare, 10000)
504502 else 0
505503 let amountForPublicAgent = if (if (if ((publicAgent != feeReceiver))
506504 then (publicAgentShare > 0)
507505 else false)
508506 then (height > isWhitelisted)
509507 else false)
510508 then fraction(amount, publicAgentShare, 10000)
511509 else 0
512510 let amountForCreator = (amount - amountForSign)
513511 if ((amountSold == maxCanSell))
514512 then throw("Art sold out")
515513 else {
516514 let newAmountSold = (amountSold + 1)
517515 let issueMeta = ((((((((((("Creator: " + issuer) + ",
518516 ArtID: ") + artId) + ",
519517 SignID: ") + signID) + ",
520518 Artwork name: ") + artworkName) + ",
521519 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
522520 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
523521 let idNFT = calculateAssetId(issueNFT)
524522 let sellStatus = if (if ((newAmountSold == maxCanSell))
525523 then true
526524 else !(isOnSale))
527525 then false
528526 else true
529527 let receiveNFT = if (if (if ((caller == issuer))
530528 then (bidOwner != "")
531529 else false)
532530 then (bidId != "")
533531 else false)
534532 then addressFromStringValue(bidOwner)
535533 else i.caller
536534 let assetIdBid = if (!(isDefined(assetId)))
537535 then "WAVES"
538536 else toBase58String(value(assetId))
539537 let bidData = getStringByKey((bidDataKey + "_OPEN"))
540538 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
541539 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
542540 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
543541 let soldValue = if (!(isBid))
544542 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
545543 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
546544 let soldData = StringEntry(soldKey, soldValue)
547545 let commissionsWithAgent = if ((amountForAgent != 0))
548546 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
549547 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
550548 let commissionsWithPublicAgent = if ((amountForPublicAgent != 0))
551549 then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(issuer)), (amountForCreator - amountForPublicAgent), assetId)]
552550 else [ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId)]
553551 let txToCaller = if (isSponsored)
554552 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
555553 else nil
556554 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)
557555 if (isBid)
558556 then [soldData, bidUpdate, bidDelOld] :: buyRes
559557 else soldData :: buyRes
560558 }
561559 }
562560 }
563561 }
564562 }
565563 }
566564 }
567565 }
568566
569567
570568 func asString (bv) = match bv {
571569 case bv0: String =>
572570 bv0
573571 case _ =>
574572 throw("Sponsored Public Key String expected")
575573 }
576574
577575
578576 @Callable(invoke)
579577 func setConf (key,val) = {
580578 let caller = toString(invoke.caller)
581579 if (containsElement([chris, toString(this)], caller))
582580 then if (contains(key, "conf_"))
583581 then [StringEntry(key, val)]
584582 else throw("Entries starting with conf_ only")
585583 else throw("You are not allowed to change this")
586584 }
587585
588586
589587
590588 @Callable(i)
591589 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
592- let $t02048020553 = idCallerDateSponsored(i, pubKey)
593- let artId = $t02048020553._1
594- let caller = $t02048020553._2
595- let date = $t02048020553._3
596- let isSponsored = $t02048020553._4
590+ let $t02035420427 = idCallerDateSponsored(i, pubKey)
591+ let artId = $t02035420427._1
592+ let caller = $t02035420427._2
593+ let date = $t02035420427._3
594+ let isSponsored = $t02035420427._4
597595 if (!(validateHash(sha256Hash)))
598596 then throw("Hash should be 64 characters maximum")
599597 else {
600- let $t02065420723 = setLIcence(cidLicence, sha256Licence)
601- let licenceCID = $t02065420723._1
602- let licenceHash = $t02065420723._2
598+ let $t02052820597 = setLIcence(cidLicence, sha256Licence)
599+ let licenceCID = $t02052820597._1
600+ let licenceHash = $t02052820597._2
603601 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
604602 if ((validateArtwork != ""))
605603 then throw("Something went wrong!")
606604 else {
607605 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
608- let $t02102221106 = if (whitelisted_drop)
606+ let $t02089620980 = if (whitelisted_drop)
609607 then $Tuple2(0, signID)
610608 else validatePayment(i)
611- let amount = $t02102221106._1
612- let assetId = $t02102221106._2
609+ let amount = $t02089620980._1
610+ let assetId = $t02089620980._2
613611 if (!(isDefined(amount)))
614612 then throw("Something went wrong")
615613 else {
616614 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
617615 if ((entryExist != ""))
618616 then throw("You already added it")
619617 else {
620618 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
621619 if ((hashExist != ""))
622620 then throw("Hash already registered")
623621 else {
624622 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
625623 if (!(isSignCertified))
626624 then throw("Sign Certificate not found for this address.")
627625 else {
628626 let decrease_whitelist_drop = if (whitelisted_drop)
629627 then invoke(whitelistDapp, "useFreeDrop", [caller], nil)
630628 else unit
631629 if ((decrease_whitelist_drop == decrease_whitelist_drop))
632630 then {
633631 let txToCaller = if (isSponsored)
634632 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
635633 else nil
636634 ([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)
637635 }
638636 else throw("Strict value is not equal to itself.")
639637 }
640638 }
641639 }
642640 }
643641 }
644642 }
645643 }
646644
647645
648646
649647 @Callable(i)
650648 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
651649 then throw(maintenanceMSG)
652650 else {
653- let $t02414024210 = idCallerDateSponsored(i, pubKey)
654- let id = $t02414024210._1
655- let caller = $t02414024210._2
656- let date = $t02414024210._3
657- let isSponsored = $t02414024210._4
658- let $t02422024289 = setLIcence(cidLicence, sha256Licence)
659- let licenceCID = $t02422024289._1
660- let licenceHash = $t02422024289._2
651+ let $t02401424084 = idCallerDateSponsored(i, pubKey)
652+ let id = $t02401424084._1
653+ let caller = $t02401424084._2
654+ let date = $t02401424084._3
655+ let isSponsored = $t02401424084._4
656+ let $t02409424163 = setLIcence(cidLicence, sha256Licence)
657+ let licenceCID = $t02409424163._1
658+ let licenceHash = $t02409424163._2
661659 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
662660 if ((validateArtwork != ""))
663661 then throw("Something went wrong!")
664662 else {
665663 let entryExist = getStringByKey(keyName(caller, txid))
666664 if ((entryExist == ""))
667665 then throw("Entry not found")
668666 else {
669667 let flag = getStringByKey(keyFlag(caller, txid))
670668 if ((flag == "ILLEGAL"))
671669 then throw("Cannot update ILLEGAL artwork")
672670 else if (!(isArtMinted(caller, txid)))
673671 then {
674672 let txToCaller = if (isSponsored)
675673 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
676674 else nil
677675 ([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)
678676 }
679677 else throw("Already minted")
680678 }
681679 }
682680 }
683681
684682
685683
686684 @Callable(i)
687685 func flagArtwork (artId,addr,flag,note) = {
688- let $t02591625950 = idCallerDate(i)
689- let id = $t02591625950._1
690- let caller = $t02591625950._2
686+ let $t02579025824 = idCallerDate(i)
687+ let id = $t02579025824._1
688+ let caller = $t02579025824._2
691689 if (containsElement([chris, toString(this)], caller))
692690 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
693691 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
694692 else throw(("Unknow status " + flag))
695693 else throw("You are not allowed")
696694 }
697695
698696
699697
700698 @Callable(i)
701699 func deleteArtwork (artId,addr) = {
702- let $t02638626420 = idCallerDate(i)
703- let id = $t02638626420._1
704- let caller = $t02638626420._2
700+ let $t02626026294 = idCallerDate(i)
701+ let id = $t02626026294._1
702+ let caller = $t02626026294._2
705703 let addrToUse = if (containsElement([chris, toString(this)], caller))
706704 then addr
707705 else caller
708706 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
709707 if ((entryExist == ""))
710708 then throw("No art matching for this address")
711709 else {
712710 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
713711 if ((sha256Hash == ""))
714712 then throw("No art hash matching for this address")
715713 else {
716714 let signID = getStringByKey(keySignID(addrToUse, artId))
717715 if ((signID == ""))
718716 then throw("No SIGN ID matching")
719717 else {
720718 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))]
721719 if (!(isArtMinted(addrToUse, artId)))
722720 then if (!(dappRunning))
723721 then throw(maintenanceMSG)
724722 else dataToDelete
725723 else if (containsElement([chris, toString(this)], caller))
726724 then dataToDelete
727725 else throw("Art already minted, you cannot delete it")
728726 }
729727 }
730728 }
731729 }
732730
733731
734732
735733 @Callable(i)
736734 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
737- let $t02925629326 = idCallerDateSponsored(i, pubKey)
738- let id = $t02925629326._1
739- let caller = $t02925629326._2
740- let date = $t02925629326._3
741- let isSponsored = $t02925629326._4
735+ let $t02913029200 = idCallerDateSponsored(i, pubKey)
736+ let id = $t02913029200._1
737+ let caller = $t02913029200._2
738+ let date = $t02913029200._3
739+ let isSponsored = $t02913029200._4
742740 let artworkName = getStringByKey(keyName(caller, artId))
743741 if ((artworkName == ""))
744742 then throw("This art doesn't match your account")
745743 else {
746744 let flag = getStringByKey(keyFlag(caller, artId))
747745 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
748746 then throw("Flagged artwork")
749747 else {
750748 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
751749 if ((0 > blockEnd))
752750 then throw("Negative end")
753751 else if (if ((blockEnd > 0))
754752 then if ((maxMint != 1))
755753 then true
756754 else (price != 0)
757755 else false)
758756 then throw("Timed offer only allowed for unique edition and offer only")
759757 else {
760758 let baseHeight = if ((blockEnd == 0))
761759 then 0
762760 else height
763761 if (!(acceptedAssetIds(assetId)))
764762 then throw("Something went wrong!")
765763 else if (!(validateMinSell(assetId, price)))
766764 then throw("Something went wrong!")
767765 else {
768766 let checkUser = validateUser(caller)
769767 if ((checkUser != ""))
770768 then throw(checkUser)
771769 else {
772770 let amountSold = getIntegerByKey(keyIssued(caller, artId))
773771 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
774772 if ((maxMint > 100))
775773 then throw("100 editions max per artwork")
776774 else if (if ((amountSold != 0))
777775 then (amountSold == maxCanSell)
778776 else false)
779777 then throw("Max edition reached.")
780778 else if (if ((amountSold > 0))
781779 then (maxCanSell != maxMint)
782780 else false)
783781 then throw("Cannot change maximum issuable anymore")
784782 else if (if ((bidNbr > 0))
785783 then (maxCanSell != maxMint)
786784 else false)
787785 then throw("Cannot change maximum issuable with active orders")
788786 else {
789787 let sellStatus = if (if ((price > 0))
790788 then (maxMint > 0)
791789 else false)
792790 then true
793791 else false
794792 let txToCaller = if (isSponsored)
795793 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
796794 else nil
797795 ([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)
798796 }
799797 }
800798 }
801799 }
802800 }
803801 }
804802 }
805803
806804
807805
808806 @Callable(i)
809807 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "", "")
810808
811809
812810
813811 @Callable(i)
814812 func setBid (artId,issuer) = {
815- let $t03170831748 = idCallerDate(i)
816- let id = $t03170831748._1
817- let caller = $t03170831748._2
818- let date = $t03170831748._3
819- let $t03175331789 = isPayment(i)
820- let payment = $t03175331789._1
821- let amount = $t03175331789._2
813+ let $t03158231622 = idCallerDate(i)
814+ let id = $t03158231622._1
815+ let caller = $t03158231622._2
816+ let date = $t03158231622._3
817+ let $t03162731663 = isPayment(i)
818+ let payment = $t03162731663._1
819+ let amount = $t03162731663._2
822820 let assetId = if (!(isDefined(payment.assetId)))
823821 then "WAVES"
824822 else toBase58String(value(payment.assetId))
825823 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
826824 if (if ((blockEnd != 0))
827825 then (height >= blockEnd)
828826 else false)
829827 then throw("Sale ended.")
830828 else {
831829 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
832830 if (!(acceptedAssetIds(assetId)))
833831 then throw("asset not accepted")
834832 else if (!(validateMinSell(assetId, amount)))
835833 then throw("Wrong min sell")
836834 else {
837835 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
838836 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
839837 if ((0 >= maxCanSell))
840838 then throw("No max edition set for this artwork")
841839 else if ((amountSold >= maxCanSell))
842840 then throw("Sold out, you cannot bid")
843841 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
844842 }
845843 }
846844 }
847845
848846
849847
850848 @Callable(i)
851849 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
852- let $t03300933080 = idCallerDateSponsored(i, pubKey)
853- let id = $t03300933080._1
854- let caller1 = $t03300933080._2
855- let date = $t03300933080._3
856- let isSponsored = $t03300933080._4
850+ let $t03288332954 = idCallerDateSponsored(i, pubKey)
851+ let id = $t03288332954._1
852+ let caller1 = $t03288332954._2
853+ let date = $t03288332954._3
854+ let isSponsored = $t03288332954._4
857855 if ((caller1 != issuer))
858856 then throw("You cannot do this action")
859857 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
860858 }
861859
862860
863861
864862 @Callable(i)
865863 func cancelBid (artId,issuer,bidId,bidOwner) = {
866- let $t03331533376 = idCallerDate(i)
867- let id = $t03331533376._1
868- let caller = $t03331533376._2
869- let date = $t03331533376._3
864+ let $t03318933250 = idCallerDate(i)
865+ let id = $t03318933250._1
866+ let caller = $t03318933250._2
867+ let date = $t03318933250._3
870868 if (if ((caller != bidOwner))
871869 then (caller != issuer)
872870 else false)
873871 then throw("You cannot do this action")
874872 else {
875873 let returnMoneyTo = if ((caller == issuer))
876874 then bidOwner
877875 else caller
878876 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
879877 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
880878 let bidData = getStringByKey((bidDataKey + "_OPEN"))
881879 if ((bidData == ""))
882880 then throw("Bid not found")
883881 else {
884882 let bidDataArr = split(bidData, "_")
885883 let assetId = getBidAssetId(bidDataArr[0])
886884 let bidStatus = "CANCELED"
887885 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
888886 }
889887 }
890888 }
891889
892890
893891 @Verifier(tx)
894892 func verifier () = match tx {
895893 case inv: InvokeScriptTransaction =>
896894 if (if (if (if ((inv.function == "addArtwork"))
897895 then (inv.dApp == this)
898896 else false)
899897 then (inv.fee == 500000)
900898 else false)
901899 then (inv.feeAssetId == unit)
902900 else false)
903901 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[13])))
904902 else if (if (if (if ((inv.function == "updateArtwork"))
905903 then (inv.dApp == this)
906904 else false)
907905 then (inv.fee == 500000)
908906 else false)
909907 then (inv.feeAssetId == unit)
910908 else false)
911909 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[12])))
912910 else if (if (if (if ((inv.function == "sellArtwork"))
913911 then (inv.dApp == this)
914912 else false)
915913 then (inv.fee == 500000)
916914 else false)
917915 then (inv.feeAssetId == unit)
918916 else false)
919917 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
920918 else if (if (if (if ((inv.function == "acceptBid"))
921919 then (inv.dApp == this)
922920 else false)
923921 then (inv.fee == 500000)
924922 else false)
925923 then (inv.feeAssetId == unit)
926924 else false)
927925 then sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[4])))
928926 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
929927 case _ =>
930928 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
931929 }
932930

github/deemru/w8io/169f3d6 
171.57 ms