tx · BHyH6uAtrjc6Us4HwhHkTeML713NAgbnEhF7CbBdoWAk

3N2Tdcx5fzxJAKP5hMp9W35Cp1EFzfiJ1zG:  -0.01400000 Waves

2020.10.15 12:03 [1221466] smart account 3N2Tdcx5fzxJAKP5hMp9W35Cp1EFzfiJ1zG > SELF 0.00000000 Waves

{ "type": 13, "id": "BHyH6uAtrjc6Us4HwhHkTeML713NAgbnEhF7CbBdoWAk", "fee": 1400000, "feeAssetId": null, "timestamp": 1602752703978, "version": 2, "chainId": 84, "sender": "3N2Tdcx5fzxJAKP5hMp9W35Cp1EFzfiJ1zG", "senderPublicKey": "9SULUbW7L2jV2nv8v48Kdzox4cZ8jEfg778yJHJpgVwM", "proofs": [ "stJ9RS8gt5NQ6jT2dc8VVZnK9WSe1bJpKPnB5nrAwvHYwhpgJA3d2aDo4XDVDkEpN321DnxK1GeqaXFVjRD8Xig" ], "script": "base64:AAIEAAAAAAAAAFoIAhIGCgQICAgIEgMKAQgSBgoECAgICBIECgIICBIDCgEIEg4KDAgICAgICAEICAgICBINCgsICAgICAEICAgICBIECgIICBIGCgQIAQEIEgQKAggIEgMKAQgAAAA5AAAAAA9zdG9yYWdlVmVyaWZpZXIJAQAAAAV2YWx1ZQAAAAEJAAQmAAAAAQIAAAAjM04yczVSdGFIUEJlbkNzeDJFQ2NvRlJiWUh4M25vWmhYVzEAAAAADHNpZ25WZXJpZmllcgkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTkMyOGhTaXZybXNUVVhhWUQxeDZMMzYySjRacFVub1RkQgAAAAALZmVlUmVjZWl2ZXICAAAAIzNOMUU2dFhkZFJvVmFSZlE5ZFEzdmc1TGFXMmZzZDhIS3ViAAAAAAtzaWduQXNzZXRJZAEAAAAg6KVqvMp3QvJwYTI1Sk9Fg7m5HuWZZxfDcerZC6EEresAAAAAC3VzZG5Bc3NldElkAQAAACAP8hwSrOTEPJrsRhqrJaiw7LoHK0bMbYhy8LXikkkBtAAAAAAMd2F2ZXNBc3NldElkAQAAAAAAAAAAB3NpZ25DdXQAAAAAAAAAAAgAAAAAB3VzZG5DdXQAAAAAAAAAAAoAAAAACHdhdmVzQ3V0AAAAAAAAAAAKAAAAAAVhZG1pbgIAAAAjM01zRzZqUE5DclZKVXRZQjdYSkJ4Uzd1dFdzWEFmNG45VnAAAAAABmFkbWluMgIAAAAjM016bTRWTHdzTjl1WndiVE16UGozWHV4VjZrRWZBUjhVRE4AAAAAD1dISVRFTElTVEVET05MWQYAAAAAC3VzZXJBbGxvd2VkAgAAAAdBTExPV0VEAAAAAA51c2VyUmVnaXN0ZXJlZAIAAAAKUkVHSVNURVJFRAAAAAAMdXNlclZlcmlmaWVkAgAAAAhWRVJJRklFRAAAAAANdXNlclN1c3BlbmRlZAIAAAAJU1VTUEVOREVEAAAAAAt1c2VyUmVtb3ZlZAIAAAAHUkVNT1ZFRAAAAAAQdXNlclVucmVnaXN0ZXJlZAIAAAAMVU5SRUdJU1RFUkVEAAAAAAl1c2VyUmVzZXQCAAAABVJFU0VUAAAAAAZvblNhbGUCAAAAB09OX1NBTEUAAAAABHNvbGQCAAAABFNPTEQAAAAACGNh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CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAphcnRfcHJpY2VfBQAAAAVhcnRJZAIAAAABXwUAAAAKY2FsbGVyQWRkcgEAAAAVa2V5QXJ0QXNzZXRJZEFjY2VwdGVkAAAAAgAAAApjYWxsZXJBZGRyAAAABWFydElkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABJhcnRfYXNzZXRBY2NlcHRlZF8FAAAABWFydElkAgAAAAFfBQAAAApjYWxsZXJBZGRyAQAAABRrZXlBcnRIYXNoQnlUeGlkQWRkcgAAAAIAAAAKY2FsbGVyQWRkcgAAAAR0eGlkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABNnZXRfaGFzaGJ5dHhpZGFkZHJfBQAAAAR0eGlkAgAAAAFfBQAAAApjYWxsZXJBZGRyAQAAABFrZXlBcnRPd25lckJ5SGFzaAAAAAEAAAAKc2hhMjU2SGFzaAkAASwAAAACAgAAABJnZXRfb3duZXJfYnlfaGFzaF8FAAAACnNoYTI1Nkhhc2gBAAAAE2tleUFydEFydGlkQnlTaWduaWQAAAACAAAACmNhbGxlckFkZHIAAAAGc2lnbklkCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABJnZXRfYXJ0aWRieXNpZ25pZF8FAAAABnNpZ25JZAIAAAABXwUAAAAKY2FsbGVyQWRkcgEAAAAVa2V5QXJ0VHhpZEJ5SGFzaE93bmVyAAAAAgAAAApzaGEyNTZIYXNoAAAACmNhbGxlckFkZHIJAAEsAAAAAgIAAAAXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JAAJYAAAAAQkAC1QAAAABCQABmwAAAAEJAAEsAAAAAgUAAAAKc2hhMjU2SGFzaAUAAAAKY2FsbGVyQWRkcgAAAAsAAAABaQEAAAAMcmVnaXN0ZXJVc2VyAAAABAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABXRodW1iAAAABnNvY2lhbAQAAAAKY2FsbGVyQWRkcgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAD3VzZXJDYW5SZWdpc3RlcgkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAADWtleVVzZXJTdGF0dXMAAAABBQAAAApjYWxsZXJBZGRyBAAAAAJpZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAAl0aW1lc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAwMJAAAAAAAAAgUAAAAPdXNlckNhblJlZ2lzdGVyBQAAAA11c2VyU3VzcGVuZGVkBgkAAAAAAAACBQAAAA91c2VyQ2FuUmVnaXN0ZXIFAAAAC3VzZXJSZW1vdmVkCQAAAgAAAAECAAAAS1lvdSBhcmUgbm93IGFsbG93ZWQgdG8gcmVnaXN0ZXIsIHlvdXIgYWNjb3VudCBoYXZlIGJlZW4gc3VzcGVuZGVkLyByZW1vdmVkLgMJAAAAAAAAAgUAAAAPdXNlckNhblJlZ2lzdGVyBQAAAA51c2VyUmVnaXN0ZXJlZAkAAAIAAAABAgAAAD1Zb3UgYXJlIGFscmVhZHkgcmVnaXN0ZXJlZCwgcGxlYXNlIHVzZSB1cGRhdGUgbWV0aG9kIGluc3RlYWQuAwMJAAAAAAAAAgUAAAAPdXNlckNhblJlZ2lzdGVyAgAAAAAFAAAAD1dISVRFTElTVEVET05MWQcJAAACAAAAAQIAAABNWW91IGFyZSBub3cgYWxsb3dlZCB0byByZWdpc3RlciB5ZXQsIHBsZWFzZSBjb250YWN0IHVzIGZpcnN0IHRvIGdldCBhcHByb3ZlZC4DAwkAAAAAAAACBQAAAARuYW1lAgAAAAAGCQAAAAAAAAIFAAAAC2Rlc2NyaXB0aW9uAgAAAAAJAAACAAAAAQIAAAAkTmFtZSBhbmQgZGVzY3JpcHRpb24gY2Fubm90IGJlIGVtcHR5AwkAAGYAAAACCQABMQAAAAEFAAAAC2Rlc2NyaXB0aW9uAAAAAAAAAAJYCQAAAgAAAAECAAAAKjYwMCBDaGFyYWN0ZXJzIG1heGltdW0gZm9yIHRoZSBkZXNjcmlwdGlvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAC2tleVVzZXJEYXRlAAAAAQUAAAAKY2FsbGVyQWRkcgUAAAAJdGltZXN0YW1wCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlVc2VyQWRkcgAAAAEFAAAACmNhbGxlckFkZHIJAAEsAAAAAgkAASwAAAACBQAAAAJpZAIAAAABXwkAAaQAAAABCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAALa2V5VXNlck5hbWUAAAABBQAAAApjYWxsZXJBZGRyBQAAAARuYW1lCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlVc2VyRGVzYwAAAAEFAAAACmNhbGxlckFkZHIFAAAAC2Rlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlVc2VyU29jaWFsAAAAAQUAAAAKY2FsbGVyQWRkcgUAAAAGc29jaWFsCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlVc2VyVGh1bWIAAAABBQAAAApjYWxsZXJBZGRyBQAAAAV0aHVtYgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5VXNlclN0YXR1cwAAAAEFAAAACmNhbGxlckFkZHIFAAAADnVzZXJSZWdpc3RlcmVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAICAAAADmxhc3RfaW52b2tlX2lkBQAAAAJpZAUAAAADbmlsAAAAAWkBAAAAC2RlbGV0ZUVudHJ5AAAAAQAAAAVlbnRyeQQAAAAKY2FsbGVyQWRkcgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAACmNhbGxlckFkZHIFAAAABWFkbWluCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAABWVudHJ5BQAAAANuaWwJAAACAAAAAQIAAAACbm8AAAABaQEAAAAKdXBkYXRlVXNlcgAAAAQAAAAEbmFtZQAAAAtkZXNjcmlwdGlvbgAAAAV0aHVtYgAAAAZzb2NpYWwEAAAACmNhbGxlckFkZHIJAAQlAAAAAQkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAA91c2VyQ2FuUmVnaXN0ZXIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA1rZXlVc2VyU3RhdHVzAAAAAQUAAAAKY2FsbGVyQWRkcgMDCQAAAAAAAAIFAAAAD3VzZXJDYW5SZWdpc3RlcgUAAAANdXNlclN1c3BlbmRlZAYJAAAAAAAAAgUAAAAPdXNlckNhblJlZ2lzdGVyBQAAAAt1c2VyUmVtb3ZlZAkAAAIAAAABAgAAAEtZb3UgYXJlIG5vdyBhbGxvd2VkIHRvIHJlZ2lzdGVyLCB5b3VyIGFjY291bnQgaGF2ZSBiZWVuIHN1c3BlbmRlZC8gcmVtb3ZlZC4DAwkAAAAAAAACBQAAAA91c2VyQ2FuUmVnaXN0ZXICAAAAAAYJAAAAAAAAAgUAAAAPdXNlckNhblJlZ2lzdGVyBQAAAAt1c2VyQWxsb3dlZAkAAAIAAAABAgAAACdQbGVhc2UgcmVnaXN0ZXIgZmlyc3Qgd2l0aCByZWdpc3RlclVzZXIEAAAAAmlkCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQEAAAACXRpbWVzdGFtcAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXADAwkAAAAAAAACBQAAAARuYW1lAgAAAAAGCQAAAAAAAAIFAAAAC2Rlc2NyaXB0aW9uAgAAAAAJAAACAAAAAQIAAAAkTmFtZSBhbmQgZGVzY3JpcHRpb24gY2Fubm90IGJlIGVtcHR5AwkAAGYAAAACCQABMQAAAAEFAAAAC2Rlc2NyaXB0aW9uAAAAAAAAAAJYCQAAAgAAAAECAAAAKjYwMCBDaGFyYWN0ZXJzIG1heGltdW0gZm9yIHRoZSBkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAALa2V5VXNlck5hbWUAAAABBQAAAApjYWxsZXJBZGRyBQAAAARuYW1lCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlVc2VyRGVzYwAAAAEFAAAACmNhbGxlckFkZHIFAAAAC2Rlc2NyaXB0aW9uCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlVc2VyU29jaWFsAAAAAQUAAAAKY2FsbGVyQWRkcgUAAAAGc29jaWFsCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlVc2VyVGh1bWIAAAABBQAAAApjYWxsZXJBZGRyBQAAAAV0aHVtYgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAACaWQFAAAAA25pbAAAAAFpAQAAABBjaGFuZ2VVc2VyU3RhdHVzAAAAAgAAAAdhZGRyZXNzAAAABnN0YXR1cwQAAAAKY2FsbGVyQWRkcgkABCUAAAABCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAAmlkCQACWAAAAAEIBQAAAAFpAAAADXRyYW5zYWN0aW9uSWQEAAAADWN1cnJlbnRTdGF0dXMJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA1rZXlVc2VyU3RhdHVzAAAAAQUAAAAHYWRkcmVzcwQAAAALc3RhdHVzVG9TZXQDCQAAAAAAAAIFAAAABnN0YXR1cwUAAAAMdXNlclZlcmlmaWVkBQAAAAx1c2VyVmVyaWZpZWQDCQAAAAAAAAIFAAAABnN0YXR1cwUAAAAOdXNlclJlZ2lzdGVyZWQFAAAADnVzZXJSZWdpc3RlcmVkAwkAAAAAAAACBQAAAAZzdGF0dXMFAAAADXVzZXJTdXNwZW5kZWQFAAAADXVzZXJTdXNwZW5kZWQDCQAAAAAAAAIFAAAABnN0YXR1cwUAAAALdXNlclJlbW92ZWQFAAAAC3VzZXJSZW1vdmVkAwkAAAAAAAACBQAAAAZzdGF0dXMFAAAAC3VzZXJBbGxvd2VkBQAAAAt1c2VyQWxsb3dlZAMDCQAAAAAAAAIFAAAABnN0YXR1cwUAAAAJdXNlclJlc2V0CQAAAAAAAAIFAAAADWN1cnJlbnRTdGF0dXMFAAAAC3VzZXJBbGxvd2VkBwIAAAAACQAAAgAAAAECAAAADlVua25vd24gc3RhdHVzAwMJAAAAAAAAAgUAAAANY3VycmVudFN0YXR1cwUAAAALdXNlckFsbG93ZWQJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAt1c2VyQWxsb3dlZAcJAAACAAAAAQIAAAAcVGhpcyB1c2VyIGlzIGFscmVhZHkgYWxsb3dlZAMDCQAAAAAAAAIFAAAADWN1cnJlbnRTdGF0dXMFAAAADnVzZXJSZWdpc3RlcmVkCQAAAAAAAAIFAAAABnN0YXR1cwUAAAALdXNlckFsbG93ZWQHCQAAAgAAAAECAAAAK1RoaXMgdXNlciBpcyBhbHJlYWR5IGFsbG93ZWQgYW5kIHJlZ2lzdGVyZWQDAwkAAAAAAAACBQAAAA1jdXJyZW50U3RhdHVzBQAAAAx1c2VyVmVyaWZpZWQJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAt1c2VyQWxsb3dlZAcJAAACAAAAAQIAAAApVGhpcyB1c2VyIGlzIGFscmVhZHkgYWxsb3dlZCBhbmQgdmVyaWZpZWQDAwkAAAAAAAACBQAAAApjYWxsZXJBZGRyBQAAAAVhZG1pbgYJAAAAAAAAAgUAAAAKY2FsbGVyQWRkcgUAAAAGYWRtaW4yCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlVc2VyU3RhdHVzAAAAAQUAAAAHYWRkcmVzcwUAAAALc3RhdHVzVG9TZXQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgIAAAAObGFzdF9pbnZva2VfaWQFAAAAAmlkBQAAAANuaWwJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAqWW91IGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UgdXNlciBzdGF0dXMgBQAAAApjYWxsZXJBZGRyAgAAAAMgLyAFAAAABWFkbWluAAAAAWkBAAAACmNyZWRpdFVzZXIAAAABAAAAB2FkZHJlc3MEAAAACmNhbGxlckFkZHIJAAQlAAAAAQkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAJpZAkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkAwMJAAAAAAAAAgUAAAAKY2FsbGVyQWRkcgUAAAAFYWRtaW4GCQAAAAAAAAIFAAAACmNhbGxlckFkZHIFAAAABmFkbWluMgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAAHYWRkcmVzcwAAAAAi7LJcAAUAAAALc2lnbkFzc2V0SWQFAAAAA25pbAkAAAIAAAABAgAAAB5Zb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGRvIHRoYXQAAAAGaW52b2tlAQAAAAphZGRBcnR3b3JrAAAADAAAAApzaGEyNTZIYXNoAAAABnNpZ25JRAAAAARuYW1lAAAAC2Rlc2NyaXB0aW9uAAAABHRhZ3MAAAAEdHlwZQAAAAdtYXhtaW50AAAACmNpZERpc3BsYXkAAAAMc2hhMjU2RXhwb3J0AAAACWNpZEV4cG9ydAAAAA1zaGEyNTZMaWNlbmNlAAAACmNpZExpY2VuY2UEAAAABWFydElkCQACWAAAAAEIBQAAAAZpbnZva2UAAAANdHJhbnNhY3Rpb25JZAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAABmludm9rZQAAAAZjYWxsZXIAAAAFYnl0ZXMDCQEAAAABIQAAAAEJAQAAAAt2YWxpZGF0ZUNJRAAAAAEFAAAACmNpZERpc3BsYXkJAAACAAAAAQIAAAAYV3JvbmcgRGlzcGxheSBDSUQgbGVuZ3RoAwkBAAAAASEAAAABCQEAAAALdmFsaWRhdGVDSUQAAAABBQAAAAljaWRFeHBvcnQJAAACAAAAAQIAAAAXV3JvbmcgRXhwb3J0IENJRCBsZW5ndGgDCQEAAAABIQAAAAEJAQAAAAt2YWxpZGF0ZUNJRAAAAAEFAAAACmNpZExpY2VuY2UJAAACAAAAAQIAAAAYV3JvbmcgTGljZW5jZSBDSUQgbGVuZ3RoAwkBAAAAASEAAAABCQEAAAAMdmFsaWRhdGVIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAkAAAIAAAABAgAAACtTb3VyY2UgSGFzaCBzaG91bGQgYmUgNjQgY2hhcmFjdGVycyBtYXhpbXVtAwkBAAAAASEAAAABCQEAAAAMdmFsaWRhdGVIYXNoAAAAAQUAAAAMc2hhMjU2RXhwb3J0CQAAAgAAAAECAAAAK0V4cG9ydCBIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0DCQEAAAABIQAAAAEJAQAAAAx2YWxpZGF0ZUhhc2gAAAABBQAAAA1zaGEyNTZMaWNlbmNlCQAAAgAAAAECAAAALExpY2VuY2UgSGFzaCBzaG91bGQgYmUgNjQgY2hhcmFjdGVycyBtYXhpbXVtAwkAAAAAAAACCQABkAAAAAEIBQAAAAZpbnZva2UAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQIAAAATTm8gcGF5bWVudCBhdHRhY2hlZAQAAAAHcGF5bWVudAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAAGaW52b2tlAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAAZhbW91bnQJAQAAAAV2YWx1ZQAAAAEIBQAAAAdwYXltZW50AAAABmFtb3VudAQAAAAHYXNzZXRJZAMDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAB3BheW1lbnQAAAAHYXNzZXRJZAkAAAAAAAACCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBQAAAAtzaWduQXNzZXRJZAcIBQAAAAdwYXltZW50AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAmT25seSBTSUdOIHRva2VuIGFjY2VwdGVkIGF0IHRoZSBtb21lbnQEAAAAGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAPc3RvcmFnZVZlcmlmaWVyCQABLAAAAAICAAAAEmNlcnRpZmljYXRpb25fZmVlXwkAAlgAAAABBQAAAAtzaWduQXNzZXRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAVwcmljZQUAAAAHJG1hdGNoMAUAAAAFcHJpY2UJAAACAAAAAQIAAAAZUHJpY2UgdW5kZWZpbmVkIGluIG9yYWNsZQMJAQAAAAIhPQAAAAIFAAAABmFtb3VudAUAAAAZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkAAAIAAAABCQABLAAAAAICAAAAGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAAGkAAAAAQUAAAAZY3VycmVudENlcnRpZmljYXRpb25QcmljZQQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAFWtleUFydFR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAADWNhbGxlckFkZHJlc3MDCQEAAAACIT0AAAACBQAAAAplbnRyeUV4aXN0AgAAAAAJAAACAAAAAQIAAAAqWW91IGFscmVhZHkgYWRkZWQgdGhpcyBhcnR3b3JrIG9uIFNpZ24gQXJ0BAAAAAloYXNoRXhpc3QJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFrZXlBcnRPd25lckJ5SGFzaAAAAAEFAAAACnNoYTI1Nkhhc2gDCQEAAAACIT0AAAACBQAAAAloYXNoRXhpc3QCAAAAAAkAAAIAAAABAgAAADNUaGlzIGFydHdvcmsgaGFzaCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgb24gU2lnbiBBcnQEAAAAD2lzU2lnbkNlcnRpZmllZAkBAAAAFGNoZWNrU2lnbkNlcnRpZmljYXRlAAAAAwUAAAAGc2lnbklEBQAAAA1jYWxsZXJBZGRyZXNzBQAAAApzaGEyNTZIYXNoAwkBAAAAASEAAAABBQAAAA9pc1NpZ25DZXJ0aWZpZWQJAAACAAAAAQIAAABLU2lnbiBDZXJ0aWZpY2F0ZSBub3QgZm91bmQgb24gU2lnbi13ZWIuYXBwIHNtYXJ0IGNvbnRyYWN0IGZvciB0aGlzIGFkZHJlc3MuAwkAAAAAAAACCQABMQAAAAEFAAAACmNpZERpc3BsYXkAAAAAAAAAAAAJAAACAAAAAQIAAAAbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkAAAAAAAACCQABMQAAAAEFAAAABG5hbWUAAAAAAAAAAAAJAAACAAAAAQIAAAAVVGl0bGUgY2Fubm90IGJlIGVtcHR5AwkAAGYAAAACCQABMQAAAAEFAAAABG5hbWUAAAAAAAAAAGQJAAACAAAAAQIAAAAjMTAwIENoYXJhY3RlcnMgbWF4aW11bSBmb3IgdGhlIG5hbWUDCQAAZgAAAAIJAAExAAAAAQUAAAALZGVzY3JpcHRpb24AAAAAAAAAA+gJAAACAAAAAQIAAAArMTAwMCBDaGFyYWN0ZXJzIG1heGltdW0gZm9yIHRoZSBkZXNjcmlwdGlvbgMJAAAAAAAAAgkAATEAAAABBQAAAAtkZXNjcmlwdGlvbgAAAAAAAAAAAAkAAAIAAAABAgAAABtEZXNjcmlwdGlvbiBjYW5ub3QgYmUgZW1wdHkEAAAACHRhZ3NMaXN0CQAEtQAAAAIFAAAABHRhZ3MCAAAAASwDCQAAZgAAAAIJAAGQAAAAAQUAAAAIdGFnc0xpc3QAAAAAAAAAAAUJAAACAAAAAQIAAAA4VGFncyBzaG91bGQgYmUgbWF4aW11bSA1IHNpbmdsZSB3b3JkIHNlcGFyYXRlZCBieSBzcGFjZS4EAAAAEHVzZXJJc1JlZ2lzdGVyZWQEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAAx1c2VyX3N0YXR1c18FAAAADWNhbGxlckFkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwUAAAAQdXNlclVucmVnaXN0ZXJlZAQAAAAJdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAMDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAQdXNlcklzUmVnaXN0ZXJlZAkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAABB1c2VyVW5yZWdpc3RlcmVkBwkAAAIAAAABAgAAADhQbGVhc2UgcmVnaXN0ZXIgdGhpcyBhY2NvdW50IGZpcnN0IHdpdGggIlVzZXIgaW5mb3MiIHRhYgMJAAAAAAAAAgUAAAAQdXNlcklzUmVnaXN0ZXJlZAUAAAANdXNlclN1c3BlbmRlZAkAAAIAAAABAgAAABlZb3VyIGFjY291bnQgaXMgc3VzcGVuZGVkAwkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAAAt1c2VyUmVtb3ZlZAkAAAIAAAABAgAAAB5Zb3VyIGFjY291bnQgaGF2ZSBiZWVuIHJlbW92ZWQDCQAAZgAAAAIFAAAAB21heG1pbnQAAAAAAAAAAAoJAAACAAAAAQIAAAAfTWF4aW11bSAxMCBlZGl0aW9ucyBwZXIgYXJ0d29yawMJAQAAAAIhPQAAAAIJAAExAAAAAQUAAAAKc2hhMjU2SGFzaAAAAAAAAAAAQAkAAAIAAAABAgAAADFIYXNoIHNob3VsZCBiZSBzaGEyNTYgc3RyaW5nIGNvbXBvc2VkIG9mIDY0IGNoYXIuCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABFrZXlBcnRPd25lckJ5SGFzaAAAAAEFAAAACnNoYTI1Nkhhc2gFAAAADWNhbGxlckFkZHJlc3MJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFWtleUFydFR4aWRCeUhhc2hPd25lcgAAAAIFAAAACnNoYTI1Nkhhc2gFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAKa2V5QXJ0RGF0ZQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAAl0aW1lc3RhbXAJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydE5hbWUAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAEbmFtZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0RGVzYwAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0RGlzcGxheUNpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAApjaWREaXNwbGF5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlBcnRFeHBvcnRDaWQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAJY2lkRXhwb3J0CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAADHNoYTI1NkV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAARa2V5QXJ0TGljZW5jZUhhc2gAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAANc2hhMjU2TGljZW5jZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0TGljZW5jZUNpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAApjaWRMaWNlbmNlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnRUeXBlAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAABHR5cGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydFRhZ3MAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAEdGFncwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADWtleUFydE1heE1pbnQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAHbWF4bWludAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMa2V5QXJ0U2lnbklEAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAABnNpZ25JRAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGtleUFydElzc3VlZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkAAAAAAAAAAAACQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAMa2V5QXJ0T25TYWxlAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQHCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlBcnRBcnRpZEJ5U2lnbmlkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAGc2lnbklEBQAAAAVhcnRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFGtleUFydEhhc2hCeVR4aWRBZGRyAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAACnNoYTI1Nkhhc2gJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAC2ZlZVJlY2VpdmVyBQAAAAZhbW91bnQFAAAAB2Fzc2V0SWQFAAAAA25pbAAAAAZpbnZva2UBAAAADXVwZGF0ZUFydHdvcmsAAAALAAAABHR4aWQAAAAEbmFtZQAAAAtkZXNjcmlwdGlvbgAAAAR0YWdzAAAABHR5cGUAAAAHbWF4bWludAAAAApjaWREaXNwbGF5AAAADHNoYTI1NkV4cG9ydAAAAAljaWRFeHBvcnQAAAANc2hhMjU2TGljZW5jZQAAAApjaWRMaWNlbmNlBAAAAAh1cGRhdGVJZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAZpbnZva2UAAAAGY2FsbGVyAAAABWJ5dGVzAwkBAAAAASEAAAABCQEAAAALdmFsaWRhdGVDSUQAAAABBQAAAApjaWREaXNwbGF5CQAAAgAAAAECAAAAGFdyb25nIERpc3BsYXkgQ0lEIGxlbmd0aAMJAQAAAAEhAAAAAQkBAAAAC3ZhbGlkYXRlQ0lEAAAAAQUAAAAJY2lkRXhwb3J0CQAAAgAAAAECAAAAF1dyb25nIEV4cG9ydCBDSUQgbGVuZ3RoAwkBAAAAASEAAAABCQEAAAALdmFsaWRhdGVDSUQAAAABBQAAAApjaWRMaWNlbmNlCQAAAgAAAAECAAAAGFdyb25nIExpY2VuY2UgQ0lEIGxlbmd0aAMJAQAAAAEhAAAAAQkBAAAADHZhbGlkYXRlSGFzaAAAAAEFAAAADHNoYTI1NkV4cG9ydAkAAAIAAAABAgAAACtFeHBvcnQgSGFzaCBzaG91bGQgYmUgNjQgY2hhcmFjdGVycyBtYXhpbXVtAwkBAAAAASEAAAABCQEAAAAMdmFsaWRhdGVIYXNoAAAAAQUAAAANc2hhMjU2TGljZW5jZQkAAAIAAAABAgAAACxMaWNlbmNlIEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQQAAAAKZW50cnlFeGlzdAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAACmtleUFydE5hbWUAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkAwkAAAAAAAACBQAAAAplbnRyeUV4aXN0AgAAAAAJAAACAAAAAQIAAAAxVGhpcyBlbnRyeSBkb2Vzbid0IGV4aXN0IG9yIHlvdSBhcmUgbm90IHRoZSBvd25lcgMJAAAAAAAAAgkAATEAAAABBQAAAARuYW1lAAAAAAAAAAAACQAAAgAAAAECAAAAFVRpdGxlIGNhbm5vdCBiZSBlbXB0eQMJAABmAAAAAgkAATEAAAABBQAAAARuYW1lAAAAAAAAAABkCQAAAgAAAAECAAAAIzEwMCBDaGFyYWN0ZXJzIG1heGltdW0gZm9yIHRoZSBuYW1lAwkAAGYAAAACCQABMQAAAAEFAAAAC2Rlc2NyaXB0aW9uAAAAAAAAAAPoCQAAAgAAAAECAAAAKzEwMDAgQ2hhcmFjdGVycyBtYXhpbXVtIGZvciB0aGUgZGVzY3JpcHRpb24DCQAAAAAAAAIJAAExAAAAAQUAAAALZGVzY3JpcHRpb24AAAAAAAAAAAAJAAACAAAAAQIAAAAbRGVzY3JpcHRpb24gY2Fubm90IGJlIGVtcHR5BAAAAA1hcnR3b3JrTWludGVkBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAQAAAAxrZXlBcnRJc3N1ZWQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDADCQAAAAAAAAIFAAAAAWIAAAAAAAAAAAAHBgcEAAAACHRhZ3NMaXN0CQAEtQAAAAIFAAAABHRhZ3MCAAAAASwDCQAAZgAAAAIJAAGQAAAAAQUAAAAIdGFnc0xpc3QAAAAAAAAAAAUJAAACAAAAAQIAAAA4VGFncyBzaG91bGQgYmUgbWF4aW11bSA1IHNpbmdsZSB3b3JkIHNlcGFyYXRlZCBieSBzcGFjZS4EAAAAEHVzZXJJc1JlZ2lzdGVyZWQEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAAAx1c2VyX3N0YXR1c18FAAAADWNhbGxlckFkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwUAAAAQdXNlclVucmVnaXN0ZXJlZAMDCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAAQdXNlcklzUmVnaXN0ZXJlZAkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAABB1c2VyVW5yZWdpc3RlcmVkBwkAAAIAAAABAgAAADhQbGVhc2UgcmVnaXN0ZXIgdGhpcyBhY2NvdW50IGZpcnN0IHdpdGggIlVzZXIgaW5mb3MiIHRhYgMJAAAAAAAAAgUAAAAQdXNlcklzUmVnaXN0ZXJlZAUAAAANdXNlclN1c3BlbmRlZAkAAAIAAAABAgAAABlZb3VyIGFjY291bnQgaXMgc3VzcGVuZGVkAwkAAAAAAAACBQAAABB1c2VySXNSZWdpc3RlcmVkBQAAAAt1c2VyUmVtb3ZlZAkAAAIAAAABAgAAAB5Zb3VyIGFjY291bnQgaGF2ZSBiZWVuIHJlbW92ZWQDCQAAZgAAAAIFAAAAB21heG1pbnQAAAAAAAAAAAoJAAACAAAAAQIAAAAfTWF4aW11bSAxMCBlZGl0aW9ucyBwZXIgYXJ0d29yawMJAQAAAAEhAAAAAQUAAAANYXJ0d29ya01pbnRlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAABG5hbWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAACmtleUFydERlc2MAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkBQAAAAtkZXNjcmlwdGlvbgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0RGlzcGxheUNpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAACmNpZERpc3BsYXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleUFydEV4cG9ydENpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAACWNpZEV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0RXhwb3J0SGFzaAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAADHNoYTI1NkV4cG9ydAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5QXJ0TGljZW5jZUNpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAACmNpZExpY2VuY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEWtleUFydExpY2VuY2VIYXNoAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAANc2hhMjU2TGljZW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADWtleUFydE1heE1pbnQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAR0eGlkBQAAAAdtYXhtaW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAprZXlBcnRUYWdzAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAEdHhpZAUAAAAEdGFncwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAKa2V5QXJ0VHlwZQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABHR4aWQFAAAABHR5cGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgIAAAAObGFzdF9pbnZva2VfaWQFAAAACHVwZGF0ZUlkBQAAAANuaWwJAAACAAAAAQIAAAA3WW91IGNhbm5vdCBlZGl0IGFydHdvcmsgdGhhdCBoYXZlIGFscmVhZHkgbWludGVkIE5GVChzKQAAAAFpAQAAAA1kZWxldGVBcnR3b3JrAAAAAgAAAAVhcnRJZAAAAAdhZGRyZXNzBAAAAA1jYWxsZXJBZGRyZXNzCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAACaWQJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAAMYWRkcmVzc1RvVXNlAwMJAAAAAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYWRtaW4GCQAAAAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABmFkbWluMgUAAAAHYWRkcmVzcwUAAAANY2FsbGVyQWRkcmVzcwQAAAAKZW50cnlFeGlzdAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQEAAAAKa2V5QXJ0TmFtZQAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAUAAAABcwkAAAIAAAABAgAAADdObyBhcnR3b3JrIG1hdGNoaW5nIHRoaXMgcmVxdWVzdCBvciB5b3UgYXJlIG5vdCBhbGxvd2VkBAAAAA1hcnR3b3JrTWludGVkBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAQAAAAxrZXlBcnRJc3N1ZWQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWIFAAAAByRtYXRjaDADCQAAAAAAAAIFAAAAAWIAAAAAAAAAAAAHBgcEAAAACnNoYTI1Nkhhc2gEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkBAAAAFGtleUFydEhhc2hCeVR4aWRBZGRyAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzCQAAAgAAAAECAAAAJU5vIGFydHdvcmsgaGFzaCBtYXRjaGluZyB0aGlzIHJlcXVlc3QEAAAABnNpZ25JRAQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAR0aGlzCQEAAAAMa2V5QXJ0U2lnbklEAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwBQAAAAFzCQAAAgAAAAECAAAAIE5vIFNJR04gSUQgbWF0Y2hpbmcgdGhpcyByZXF1ZXN0BAAAAAxkYXRhVG9EZWxldGUJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydERhdGUAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAAprZXlBcnROYW1lAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAKa2V5QXJ0RGVzYwAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEGtleUFydERpc3BsYXlDaWQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA9rZXlBcnRFeHBvcnRDaWQAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlBcnRFeHBvcnRIYXNoAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAARa2V5QXJ0TGljZW5jZUhhc2gAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABBrZXlBcnRMaWNlbmNlQ2lkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAKa2V5QXJ0VHlwZQAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAFYXJ0SWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAACmtleUFydFRhZ3MAAAACBQAAAAxhZGRyZXNzVG9Vc2UFAAAABWFydElkCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAAA1rZXlBcnRNYXhNaW50AAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAMa2V5QXJ0U2lnbklEAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAMa2V5QXJ0SXNzdWVkAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAMa2V5QXJ0T25TYWxlAAAAAgUAAAAMYWRkcmVzc1RvVXNlBQAAAAVhcnRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACAgAAAA5sYXN0X2ludm9rZV9pZAUAAAACaWQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAEWtleUFydE93bmVyQnlIYXNoAAAAAQUAAAAKc2hhMjU2SGFzaAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAATa2V5QXJ0QXJ0aWRCeVNpZ25pZAAAAAIFAAAADGFkZHJlc3NUb1VzZQUAAAAGc2lnbklECQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABVrZXlBcnRUeGlkQnlIYXNoT3duZXIAAAACBQAAAApzaGEyNTZIYXNoBQAAAAxhZGRyZXNzVG9Vc2UFAAAAA25pbAMDCQAAAAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFkbWluBgkAAAAAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAZhZG1pbjIFAAAADGRhdGFUb0RlbGV0ZQMJAQAAAAEhAAAAAQUAAAANYXJ0d29ya01pbnRlZAUAAAAMZGF0YVRvRGVsZXRlCQAAAgAAAAECAAAAOlRoaXMgYXJ0d29yayBhbHJlYWR5IGhhdmUgbWludGVkIE5GVCwgeW91IGNhbm5vdCBkZWxldGUgaXQAAAAGaW52b2tlAQAAAAtzZWxsQXJ0d29yawAAAAQAAAAFYXJ0SWQAAAAFcHJpY2UAAAAHbWF4TWludAAAAAdhc3NldElkBAAAAAJpZAkAAlgAAAABCAUAAAAGaW52b2tlAAAADXRyYW5zYWN0aW9uSWQEAAAADWNhbGxlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAZpbnZva2UAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAhzZWxsRGF0ZQgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAEAAAACWV4cG9ydENJRAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAD2tleUFydEV4cG9ydENpZAAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkAwkBAAAAAiE9AAAAAgkAATEAAAABCQABkQAAAAIJAAS1AAAAAgUAAAAJZXhwb3J0Q0lEAgAAAAEvAAAAAAAA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AARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAtrZXlBcnRQcmljZQAAAAIFAAAADWNhbGxlckFkZHJlc3MFAAAABWFydElkBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADWtleUFydE1heE1pbnQAAAACBQAAAA1jYWxsZXJBZGRyZXNzBQAAAAVhcnRJZAUAAAAHbWF4TWludAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAVa2V5QXJ0QXNzZXRJZEFjY2VwdGVkAAAAAgUAAAANY2FsbGVyQWRkcmVzcwUAAAAFYXJ0SWQFAAAAB2Fzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgIAAAAObGFzdF9pbnZva2VfaWQFAAAAAmlkBQAAAANuaWwAAAAGaW52b2tlAQAAAApidXlBcnR3b3JrAAAAAgAAAAVhcnRJZAAAAAZpc3N1ZXIEAAAAAmlkCQACWAAAAAEIBQAAAAZpbnZva2UAAAANdHJhbnNhY3Rpb25JZAQAAAANY2FsbGVyQWRkcmVzcwkAAlgAAAABCAgFAAAABmludm9rZQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAACHRvdGFsTkZUCQEAAAAPZ2V0SW50ZWdlckJ5S2V5AAAAAQIAAAAQdG90YWxfbmZ0X2lzc3VlZAQAAAAGc2lnbklECQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAMa2V5QXJ0U2lnbklEAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAALYXJ0d29ya05hbWUEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwkBAAAACmtleUFydE5hbWUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAFAAAAAXMJAAACAAAAAQIAAAAZVGhpcyBhcnR3b3JrIGRvZXNuJ3QgZXhpdAQAAAAKZGlzcGxheUNJRAkBAAAADmdldFN0cmluZ0J5S2V5AAAAAQkBAAAAEGtleUFydERpc3BsYXlDaWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAlleHBvcnRDSUQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAA9rZXlBcnRFeHBvcnRDaWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAApleHBvcnRIYXNoCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAQa2V5QXJ0RXhwb3J0SGFzaAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAACmxpY2VuY2VDSUQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABBrZXlBcnRMaWNlbmNlQ2lkAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAQAAAALbGljZW5jZUhhc2gJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABFrZXlBcnRMaWNlbmNlSGFzaAAAAAIFAAAABmlzc3VlcgUAAAAFYXJ0SWQEAAAAC2Rlc2NyaXB0aW9uCQABLwAAAAIJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAAAprZXlBcnREZXNjAAAAAgUAAAAGaXNzdWVyBQAAAAVhcnRJZAAAAAAAAAAAMgQAAAAKYW1vdW50U29sZAkBAAAAD2dldEludGVnZXJCeUtleQAAAAEJAQAAAAxrZXlBcnRJc3N1ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAxhcnR3b3JrUHJpY2UJAQAAAA9nZXRJbnRlZ2VyQnlLZXkAAAABCQEAAAALa2V5QXJ0UHJpY2UAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAhpc09uU2FsZQkBAAAAD2dldEJvb2xlYW5CeUtleQAAAAEJAQAAAAxrZXlBcnRPblNhbGUAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAAxwcmljZUFzc2V0SWQJAQAAAA5nZXRTdHJpbmdCeUtleQAAAAEJAQAAABVrZXlBcnRBc3NldElkQWNjZXB0ZWQAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkBAAAAApzb3VyY2VIYXNoCQEAAAAOZ2V0U3RyaW5nQnlLZXkAAAABCQEAAAAUa2V5QXJ0SGFzaEJ5VHhpZEFkZHIAAAACBQAAAAZpc3N1ZXIFAAAABWFydElkAwkAAAAAAAACBQAAAAxhcnR3b3JrUHJpY2UAAAAA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", "height": 1221466, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7Ku3823ekoTRVspaD7dVJb4FXujJcgwqi1eEZmQgPy6x Next: 5uZnCPwUarrGz2LEibga1H8sxL5tGvNHf989xrJj5V2K Diff:
OldNewDifferences
499499 case _ =>
500500 throw("No SIGN ID matching this request")
501501 }
502- let dataToDelete = [DeleteEntry(keyArtDate(addressToUse, artId)), DeleteEntry(keyArtName(addressToUse, artId)), DeleteEntry(keyArtDesc(addressToUse, artId)), DeleteEntry(keyArtDisplayCid(addressToUse, artId)), DeleteEntry(keyArtExportCid(addressToUse, artId)), DeleteEntry(keyArtExportHash(addressToUse, artId)), DeleteEntry(keyArtLicenceHash(addressToUse, artId)), DeleteEntry(keyArtLicenceCid(addressToUse, artId)), DeleteEntry(keyArtType(addressToUse, artId)), DeleteEntry(keyArtTags(addressToUse, artId)), DeleteEntry(keyArtMaxMint(addressToUse, artId)), DeleteEntry(keyArtSignID(addressToUse, artId)), DeleteEntry(keyArtIssued(addressToUse, artId)), DeleteEntry(keyArtOnSale(addressToUse, artId)), StringEntry("last_invoke_id", id), DeleteEntry(keyArtOwnerByHash(sha256Hash)), DeleteEntry(keyArtArtidBySignid(addressToUse, signID)), DeleteEntry(keyArtTxidByHashOwner(sha256Hash, addressToUse)), DeleteEntry(keyArtPrice(addressToUse, artId)), DeleteEntry(keyArtMaxMint(addressToUse, artId)), DeleteEntry(keyArtAssetIdAccepted(addressToUse, artId))]
502+ let dataToDelete = [DeleteEntry(keyArtDate(addressToUse, artId)), DeleteEntry(keyArtName(addressToUse, artId)), DeleteEntry(keyArtDesc(addressToUse, artId)), DeleteEntry(keyArtDisplayCid(addressToUse, artId)), DeleteEntry(keyArtExportCid(addressToUse, artId)), DeleteEntry(keyArtExportHash(addressToUse, artId)), DeleteEntry(keyArtLicenceHash(addressToUse, artId)), DeleteEntry(keyArtLicenceCid(addressToUse, artId)), DeleteEntry(keyArtType(addressToUse, artId)), DeleteEntry(keyArtTags(addressToUse, artId)), DeleteEntry(keyArtMaxMint(addressToUse, artId)), DeleteEntry(keyArtSignID(addressToUse, artId)), DeleteEntry(keyArtIssued(addressToUse, artId)), DeleteEntry(keyArtOnSale(addressToUse, artId)), StringEntry("last_invoke_id", id), DeleteEntry(keyArtOwnerByHash(sha256Hash)), DeleteEntry(keyArtArtidBySignid(addressToUse, signID)), DeleteEntry(keyArtTxidByHashOwner(sha256Hash, addressToUse))]
503503 if (if ((callerAddress == admin))
504504 then true
505505 else (callerAddress == admin2))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let storageVerifier = value(addressFromString("3N2s5RtaHPBenCsx2ECcoFRbYHx3noZhXW1"))
55
66 let signVerifier = value(addressFromString("3NC28hSivrmsTUXaYD1x6L362J4ZpUnoTdB"))
77
88 let feeReceiver = "3N1E6tXddRoVaRfQ9dQ3vg5LaW2fsd8HKub"
99
1010 let signAssetId = base58'Gf9t8FA4H3ssoZPCwrg3KwUFCci8zuUFP9ssRsUY3s6a'
1111
1212 let usdnAssetId = base58'25FEqEjRkqK6yCkiT7Lz6SAYz7gUFCtxfCChnrVFD5AT'
1313
1414 let wavesAssetId = base58''
1515
1616 let signCut = 8
1717
1818 let usdnCut = 10
1919
2020 let wavesCut = 10
2121
2222 let admin = "3MsG6jPNCrVJUtYB7XJBxS7utWsXAf4n9Vp"
2323
2424 let admin2 = "3Mzm4VLwsN9uZwbTMzPj3XuxV6kEfAR8UDN"
2525
2626 let WHITELISTEDONLY = true
2727
2828 let userAllowed = "ALLOWED"
2929
3030 let userRegistered = "REGISTERED"
3131
3232 let userVerified = "VERIFIED"
3333
3434 let userSuspended = "SUSPENDED"
3535
3636 let userRemoved = "REMOVED"
3737
3838 let userUnregistered = "UNREGISTERED"
3939
4040 let userReset = "RESET"
4141
4242 let onSale = "ON_SALE"
4343
4444 let sold = "SOLD"
4545
4646 let canceled = "CANCELED"
4747
4848 func getStringByKey (key) = match getString(this, key) {
4949 case a: String =>
5050 a
5151 case _ =>
5252 ""
5353 }
5454
5555
5656 func getIntegerByKey (key) = match getInteger(this, key) {
5757 case i: Int =>
5858 i
5959 case _ =>
6060 0
6161 }
6262
6363
6464 func getBooleanByKey (key) = match getBoolean(this, key) {
6565 case i: Boolean =>
6666 i
6767 case _ =>
6868 false
6969 }
7070
7171
7272 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signVerifier, ((("data_fc_" + signID) + "_") + Owner)) {
7373 case a: String =>
7474 if (contains(a, sha256Hash))
7575 then true
7676 else false
7777 case _ =>
7878 false
7979 }
8080
8181
8282 func validateNFTs (accumulator,id) = {
8383 let assetDetails = value(assetInfo(fromBase58String(id)))
8484 if (if (if ((assetDetails.quantity != 1))
8585 then true
8686 else (assetDetails.decimals != 0))
8787 then true
8888 else (assetDetails.reissuable != false))
8989 then (accumulator + 0)
9090 else (accumulator + 1)
9191 }
9292
9393
9494 func validateCID (cid) = if (if ((75 > size(cid)))
9595 then (60 > size(split(cid, "/")[0]))
9696 else false)
9797 then (16 > size(split(cid, "/")[1]))
9898 else false
9999
100100
101101 func validateHash (hash) = (65 > size(hash))
102102
103103
104104 func verifyStatus (addr) = match getString(this, ("user_status_" + addr)) {
105105 case b: String =>
106106 b
107107 case _ =>
108108 throw("Something went wrong.")
109109 }
110110
111111
112112 func keyUserAddr (callerAddr) = ("user_" + callerAddr)
113113
114114
115115 func keyUserName (callerAddr) = ("user_name_" + callerAddr)
116116
117117
118118 func keyUserDesc (callerAddr) = ("user_desc_" + callerAddr)
119119
120120
121121 func keyUserSocial (callerAddr) = ("user_social_" + callerAddr)
122122
123123
124124 func keyUserThumb (callerAddr) = ("user_thumb_" + callerAddr)
125125
126126
127127 func keyUserStatus (callerAddr) = ("user_status_" + callerAddr)
128128
129129
130130 func keyUserDate (callerAddr) = ("user_date_" + callerAddr)
131131
132132
133133 func keyArtDate (callerAddr,artId) = ((("art_date_" + artId) + "_") + callerAddr)
134134
135135
136136 func keyArtName (callerAddr,artId) = ((("art_name_" + artId) + "_") + callerAddr)
137137
138138
139139 func keyArtDesc (callerAddr,artId) = ((("art_desc_" + artId) + "_") + callerAddr)
140140
141141
142142 func keyArtDisplayCid (callerAddr,artId) = ((("art_display_cid_" + artId) + "_") + callerAddr)
143143
144144
145145 func keyArtExportHash (callerAddr,artId) = ((("art_export_hash_" + artId) + "_") + callerAddr)
146146
147147
148148 func keyArtExportCid (callerAddr,artId) = ((("art_export_cid_" + artId) + "_") + callerAddr)
149149
150150
151151 func keyArtMaxMint (callerAddr,artId) = ((("art_maxmint_" + artId) + "_") + callerAddr)
152152
153153
154154 func keyArtSignID (callerAddr,artId) = ((("art_signid_" + artId) + "_") + callerAddr)
155155
156156
157157 func keyArtIssued (callerAddr,artId) = ((("art_issued_" + artId) + "_") + callerAddr)
158158
159159
160160 func keyArtOnSale (callerAddr,artId) = ((("art_onsale_" + artId) + "_") + callerAddr)
161161
162162
163163 func keyArtLicenceHash (callerAddr,artId) = ((("art_licence_hash_" + artId) + "_") + callerAddr)
164164
165165
166166 func keyArtLicenceCid (callerAddr,artId) = ((("art_licence_cid_" + artId) + "_") + callerAddr)
167167
168168
169169 func keyArtTags (callerAddr,artId) = ((("art_tags_" + artId) + "_") + callerAddr)
170170
171171
172172 func keyArtType (callerAddr,artId) = ((("art_type_" + artId) + "_") + callerAddr)
173173
174174
175175 func keyArtPrice (callerAddr,artId) = ((("art_price_" + artId) + "_") + callerAddr)
176176
177177
178178 func keyArtAssetIdAccepted (callerAddr,artId) = ((("art_assetAccepted_" + artId) + "_") + callerAddr)
179179
180180
181181 func keyArtHashByTxidAddr (callerAddr,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + callerAddr)
182182
183183
184184 func keyArtOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
185185
186186
187187 func keyArtArtidBySignid (callerAddr,signId) = ((("get_artidbysignid_" + signId) + "_") + callerAddr)
188188
189189
190190 func keyArtTxidByHashOwner (sha256Hash,callerAddr) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + callerAddr)))))
191191
192192
193193 @Callable(i)
194194 func registerUser (name,description,thumb,social) = {
195195 let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
196196 let userCanRegister = getStringByKey(keyUserStatus(callerAddr))
197197 let id = toBase58String(i.transactionId)
198198 let timestamp = lastBlock.timestamp
199199 if (if ((userCanRegister == userSuspended))
200200 then true
201201 else (userCanRegister == userRemoved))
202202 then throw("You are now allowed to register, your account have been suspended/ removed.")
203203 else if ((userCanRegister == userRegistered))
204204 then throw("You are already registered, please use update method instead.")
205205 else if (if ((userCanRegister == ""))
206206 then WHITELISTEDONLY
207207 else false)
208208 then throw("You are now allowed to register yet, please contact us first to get approved.")
209209 else if (if ((name == ""))
210210 then true
211211 else (description == ""))
212212 then throw("Name and description cannot be empty")
213213 else if ((size(description) > 600))
214214 then throw("600 Characters maximum for the description")
215215 else [IntegerEntry(keyUserDate(callerAddr), timestamp), StringEntry(keyUserAddr(callerAddr), ((id + "_") + toString(lastBlock.timestamp))), StringEntry(keyUserName(callerAddr), name), StringEntry(keyUserDesc(callerAddr), description), StringEntry(keyUserSocial(callerAddr), social), StringEntry(keyUserThumb(callerAddr), thumb), StringEntry(keyUserStatus(callerAddr), userRegistered), StringEntry("last_invoke_id", id)]
216216 }
217217
218218
219219
220220 @Callable(i)
221221 func deleteEntry (entry) = {
222222 let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
223223 if ((callerAddr == admin))
224224 then [DeleteEntry(entry)]
225225 else throw("no")
226226 }
227227
228228
229229
230230 @Callable(i)
231231 func updateUser (name,description,thumb,social) = {
232232 let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
233233 let userCanRegister = getStringByKey(keyUserStatus(callerAddr))
234234 if (if ((userCanRegister == userSuspended))
235235 then true
236236 else (userCanRegister == userRemoved))
237237 then throw("You are now allowed to register, your account have been suspended/ removed.")
238238 else if (if ((userCanRegister == ""))
239239 then true
240240 else (userCanRegister == userAllowed))
241241 then throw("Please register first with registerUser")
242242 else {
243243 let id = toBase58String(i.transactionId)
244244 let timestamp = lastBlock.timestamp
245245 if (if ((name == ""))
246246 then true
247247 else (description == ""))
248248 then throw("Name and description cannot be empty")
249249 else if ((size(description) > 600))
250250 then throw("600 Characters maximum for the description")
251251 else [StringEntry(keyUserName(callerAddr), name), StringEntry(keyUserDesc(callerAddr), description), StringEntry(keyUserSocial(callerAddr), social), StringEntry(keyUserThumb(callerAddr), thumb), StringEntry("last_invoke_id", id)]
252252 }
253253 }
254254
255255
256256
257257 @Callable(i)
258258 func changeUserStatus (address,status) = {
259259 let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
260260 let id = toBase58String(i.transactionId)
261261 let currentStatus = getStringByKey(keyUserStatus(address))
262262 let statusToSet = if ((status == userVerified))
263263 then userVerified
264264 else if ((status == userRegistered))
265265 then userRegistered
266266 else if ((status == userSuspended))
267267 then userSuspended
268268 else if ((status == userRemoved))
269269 then userRemoved
270270 else if ((status == userAllowed))
271271 then userAllowed
272272 else if (if ((status == userReset))
273273 then (currentStatus == userAllowed)
274274 else false)
275275 then ""
276276 else throw("Unknown status")
277277 if (if ((currentStatus == userAllowed))
278278 then (status == userAllowed)
279279 else false)
280280 then throw("This user is already allowed")
281281 else if (if ((currentStatus == userRegistered))
282282 then (status == userAllowed)
283283 else false)
284284 then throw("This user is already allowed and registered")
285285 else if (if ((currentStatus == userVerified))
286286 then (status == userAllowed)
287287 else false)
288288 then throw("This user is already allowed and verified")
289289 else if (if ((callerAddr == admin))
290290 then true
291291 else (callerAddr == admin2))
292292 then [StringEntry(keyUserStatus(address), statusToSet), StringEntry("last_invoke_id", id)]
293293 else throw(((("You are not allowed to change user status " + callerAddr) + " / ") + admin))
294294 }
295295
296296
297297
298298 @Callable(i)
299299 func creditUser (address) = {
300300 let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
301301 let id = toBase58String(i.transactionId)
302302 if (if ((callerAddr == admin))
303303 then true
304304 else (callerAddr == admin2))
305305 then [ScriptTransfer(Address(fromBase58String(address)), 150000000000, signAssetId)]
306306 else throw("You are not allowed to do that")
307307 }
308308
309309
310310
311311 @Callable(invoke)
312312 func addArtwork (sha256Hash,signID,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
313313 let artId = toBase58String(invoke.transactionId)
314314 let callerAddress = toBase58String(invoke.caller.bytes)
315315 if (!(validateCID(cidDisplay)))
316316 then throw("Wrong Display CID length")
317317 else if (!(validateCID(cidExport)))
318318 then throw("Wrong Export CID length")
319319 else if (!(validateCID(cidLicence)))
320320 then throw("Wrong Licence CID length")
321321 else if (!(validateHash(sha256Hash)))
322322 then throw("Source Hash should be 64 characters maximum")
323323 else if (!(validateHash(sha256Export)))
324324 then throw("Export Hash should be 64 characters maximum")
325325 else if (!(validateHash(sha256Licence)))
326326 then throw("Licence Hash should be 64 characters maximum")
327327 else if ((size(invoke.payments) == 0))
328328 then throw("No payment attached")
329329 else {
330330 let payment = value(invoke.payments[0])
331331 let amount = value(payment.amount)
332332 let assetId = if (if (isDefined(payment.assetId))
333333 then (payment.assetId == signAssetId)
334334 else false)
335335 then payment.assetId
336336 else throw("Only SIGN token accepted at the moment")
337337 let currentCertificationPrice = match getInteger(storageVerifier, ("certification_fee_" + toBase58String(signAssetId))) {
338338 case price: Int =>
339339 price
340340 case _ =>
341341 throw("Price undefined in oracle")
342342 }
343343 if ((amount != currentCertificationPrice))
344344 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
345345 else {
346346 let entryExist = getStringByKey(keyArtTxidByHashOwner(sha256Hash, callerAddress))
347347 if ((entryExist != ""))
348348 then throw("You already added this artwork on Sign Art")
349349 else {
350350 let hashExist = getStringByKey(keyArtOwnerByHash(sha256Hash))
351351 if ((hashExist != ""))
352352 then throw("This artwork hash is already registered on Sign Art")
353353 else {
354354 let isSignCertified = checkSignCertificate(signID, callerAddress, sha256Hash)
355355 if (!(isSignCertified))
356356 then throw("Sign Certificate not found on Sign-web.app smart contract for this address.")
357357 else if ((size(cidDisplay) == 0))
358358 then throw("Display CID cannot be empty")
359359 else if ((size(name) == 0))
360360 then throw("Title cannot be empty")
361361 else if ((size(name) > 100))
362362 then throw("100 Characters maximum for the name")
363363 else if ((size(description) > 1000))
364364 then throw("1000 Characters maximum for the description")
365365 else if ((size(description) == 0))
366366 then throw("Description cannot be empty")
367367 else {
368368 let tagsList = split(tags, ",")
369369 if ((size(tagsList) > 5))
370370 then throw("Tags should be maximum 5 single word separated by space.")
371371 else {
372372 let userIsRegistered = match getString(this, ("user_status_" + callerAddress)) {
373373 case s: String =>
374374 s
375375 case _ =>
376376 userUnregistered
377377 }
378378 let timestamp = lastBlock.timestamp
379379 if (if (isDefined(userIsRegistered))
380380 then (userIsRegistered == userUnregistered)
381381 else false)
382382 then throw("Please register this account first with \"User infos\" tab")
383383 else if ((userIsRegistered == userSuspended))
384384 then throw("Your account is suspended")
385385 else if ((userIsRegistered == userRemoved))
386386 then throw("Your account have been removed")
387387 else if ((maxmint > 10))
388388 then throw("Maximum 10 editions per artwork")
389389 else if ((size(sha256Hash) != 64))
390390 then throw("Hash should be sha256 string composed of 64 char.")
391391 else [StringEntry(keyArtOwnerByHash(sha256Hash), callerAddress), StringEntry(keyArtTxidByHashOwner(sha256Hash, callerAddress), artId), IntegerEntry(keyArtDate(callerAddress, artId), timestamp), StringEntry(keyArtName(callerAddress, artId), name), StringEntry(keyArtDesc(callerAddress, artId), description), StringEntry(keyArtDisplayCid(callerAddress, artId), cidDisplay), StringEntry(keyArtExportCid(callerAddress, artId), cidExport), StringEntry(keyArtExportHash(callerAddress, artId), sha256Export), StringEntry(keyArtLicenceHash(callerAddress, artId), sha256Licence), StringEntry(keyArtLicenceCid(callerAddress, artId), cidLicence), StringEntry(keyArtType(callerAddress, artId), type), StringEntry(keyArtTags(callerAddress, artId), tags), IntegerEntry(keyArtMaxMint(callerAddress, artId), maxmint), StringEntry(keyArtSignID(callerAddress, artId), signID), IntegerEntry(keyArtIssued(callerAddress, artId), 0), BooleanEntry(keyArtOnSale(callerAddress, artId), false), StringEntry(keyArtArtidBySignid(callerAddress, signID), artId), StringEntry("last_invoke_id", artId), StringEntry(keyArtHashByTxidAddr(callerAddress, artId), sha256Hash), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
392392 }
393393 }
394394 }
395395 }
396396 }
397397 }
398398 }
399399
400400
401401
402402 @Callable(invoke)
403403 func updateArtwork (txid,name,description,tags,type,maxmint,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence) = {
404404 let updateId = toBase58String(invoke.transactionId)
405405 let callerAddress = toBase58String(invoke.caller.bytes)
406406 if (!(validateCID(cidDisplay)))
407407 then throw("Wrong Display CID length")
408408 else if (!(validateCID(cidExport)))
409409 then throw("Wrong Export CID length")
410410 else if (!(validateCID(cidLicence)))
411411 then throw("Wrong Licence CID length")
412412 else if (!(validateHash(sha256Export)))
413413 then throw("Export Hash should be 64 characters maximum")
414414 else if (!(validateHash(sha256Licence)))
415415 then throw("Licence Hash should be 64 characters maximum")
416416 else {
417417 let entryExist = getStringByKey(keyArtName(callerAddress, txid))
418418 if ((entryExist == ""))
419419 then throw("This entry doesn't exist or you are not the owner")
420420 else if ((size(name) == 0))
421421 then throw("Title cannot be empty")
422422 else if ((size(name) > 100))
423423 then throw("100 Characters maximum for the name")
424424 else if ((size(description) > 1000))
425425 then throw("1000 Characters maximum for the description")
426426 else if ((size(description) == 0))
427427 then throw("Description cannot be empty")
428428 else {
429429 let artworkMinted = match getInteger(this, keyArtIssued(callerAddress, txid)) {
430430 case b: Int =>
431431 if ((b == 0))
432432 then false
433433 else true
434434 case _ =>
435435 false
436436 }
437437 let tagsList = split(tags, ",")
438438 if ((size(tagsList) > 5))
439439 then throw("Tags should be maximum 5 single word separated by space.")
440440 else {
441441 let userIsRegistered = match getString(this, ("user_status_" + callerAddress)) {
442442 case s: String =>
443443 s
444444 case _ =>
445445 userUnregistered
446446 }
447447 if (if (isDefined(userIsRegistered))
448448 then (userIsRegistered == userUnregistered)
449449 else false)
450450 then throw("Please register this account first with \"User infos\" tab")
451451 else if ((userIsRegistered == userSuspended))
452452 then throw("Your account is suspended")
453453 else if ((userIsRegistered == userRemoved))
454454 then throw("Your account have been removed")
455455 else if ((maxmint > 10))
456456 then throw("Maximum 10 editions per artwork")
457457 else if (!(artworkMinted))
458458 then [StringEntry(keyArtName(callerAddress, txid), name), StringEntry(keyArtDesc(callerAddress, txid), description), StringEntry(keyArtDisplayCid(callerAddress, txid), cidDisplay), StringEntry(keyArtExportCid(callerAddress, txid), cidExport), StringEntry(keyArtExportHash(callerAddress, txid), sha256Export), StringEntry(keyArtLicenceCid(callerAddress, txid), cidLicence), StringEntry(keyArtLicenceHash(callerAddress, txid), sha256Licence), IntegerEntry(keyArtMaxMint(callerAddress, txid), maxmint), StringEntry(keyArtTags(callerAddress, txid), tags), StringEntry(keyArtType(callerAddress, txid), type), StringEntry("last_invoke_id", updateId)]
459459 else throw("You cannot edit artwork that have already minted NFT(s)")
460460 }
461461 }
462462 }
463463 }
464464
465465
466466
467467 @Callable(i)
468468 func deleteArtwork (artId,address) = {
469469 let callerAddress = toString(addressFromPublicKey(i.callerPublicKey))
470470 let id = toBase58String(i.transactionId)
471471 let addressToUse = if (if ((callerAddress == admin))
472472 then true
473473 else (callerAddress == admin2))
474474 then address
475475 else callerAddress
476476 let entryExist = match getString(this, keyArtName(addressToUse, artId)) {
477477 case s: String =>
478478 s
479479 case _ =>
480480 throw("No artwork matching this request or you are not allowed")
481481 }
482482 let artworkMinted = match getInteger(this, keyArtIssued(addressToUse, artId)) {
483483 case b: Int =>
484484 if ((b == 0))
485485 then false
486486 else true
487487 case _ =>
488488 false
489489 }
490490 let sha256Hash = match getString(this, keyArtHashByTxidAddr(addressToUse, artId)) {
491491 case s: String =>
492492 s
493493 case _ =>
494494 throw("No artwork hash matching this request")
495495 }
496496 let signID = match getString(this, keyArtSignID(addressToUse, artId)) {
497497 case s: String =>
498498 s
499499 case _ =>
500500 throw("No SIGN ID matching this request")
501501 }
502- let dataToDelete = [DeleteEntry(keyArtDate(addressToUse, artId)), DeleteEntry(keyArtName(addressToUse, artId)), DeleteEntry(keyArtDesc(addressToUse, artId)), DeleteEntry(keyArtDisplayCid(addressToUse, artId)), DeleteEntry(keyArtExportCid(addressToUse, artId)), DeleteEntry(keyArtExportHash(addressToUse, artId)), DeleteEntry(keyArtLicenceHash(addressToUse, artId)), DeleteEntry(keyArtLicenceCid(addressToUse, artId)), DeleteEntry(keyArtType(addressToUse, artId)), DeleteEntry(keyArtTags(addressToUse, artId)), DeleteEntry(keyArtMaxMint(addressToUse, artId)), DeleteEntry(keyArtSignID(addressToUse, artId)), DeleteEntry(keyArtIssued(addressToUse, artId)), DeleteEntry(keyArtOnSale(addressToUse, artId)), StringEntry("last_invoke_id", id), DeleteEntry(keyArtOwnerByHash(sha256Hash)), DeleteEntry(keyArtArtidBySignid(addressToUse, signID)), DeleteEntry(keyArtTxidByHashOwner(sha256Hash, addressToUse)), DeleteEntry(keyArtPrice(addressToUse, artId)), DeleteEntry(keyArtMaxMint(addressToUse, artId)), DeleteEntry(keyArtAssetIdAccepted(addressToUse, artId))]
502+ let dataToDelete = [DeleteEntry(keyArtDate(addressToUse, artId)), DeleteEntry(keyArtName(addressToUse, artId)), DeleteEntry(keyArtDesc(addressToUse, artId)), DeleteEntry(keyArtDisplayCid(addressToUse, artId)), DeleteEntry(keyArtExportCid(addressToUse, artId)), DeleteEntry(keyArtExportHash(addressToUse, artId)), DeleteEntry(keyArtLicenceHash(addressToUse, artId)), DeleteEntry(keyArtLicenceCid(addressToUse, artId)), DeleteEntry(keyArtType(addressToUse, artId)), DeleteEntry(keyArtTags(addressToUse, artId)), DeleteEntry(keyArtMaxMint(addressToUse, artId)), DeleteEntry(keyArtSignID(addressToUse, artId)), DeleteEntry(keyArtIssued(addressToUse, artId)), DeleteEntry(keyArtOnSale(addressToUse, artId)), StringEntry("last_invoke_id", id), DeleteEntry(keyArtOwnerByHash(sha256Hash)), DeleteEntry(keyArtArtidBySignid(addressToUse, signID)), DeleteEntry(keyArtTxidByHashOwner(sha256Hash, addressToUse))]
503503 if (if ((callerAddress == admin))
504504 then true
505505 else (callerAddress == admin2))
506506 then dataToDelete
507507 else if (!(artworkMinted))
508508 then dataToDelete
509509 else throw("This artwork already have minted NFT, you cannot delete it")
510510 }
511511
512512
513513
514514 @Callable(invoke)
515515 func sellArtwork (artId,price,maxMint,assetId) = {
516516 let id = toBase58String(invoke.transactionId)
517517 let callerAddress = toBase58String(invoke.caller.bytes)
518518 let sellDate = lastBlock.timestamp
519519 let exportCID = getStringByKey(keyArtExportCid(callerAddress, artId))
520520 if ((size(split(exportCID, "/")[0]) != 59))
521521 then throw("You cannot sell artwork with no export file")
522522 else {
523523 let exportHash = getStringByKey(keyArtExportHash(callerAddress, artId))
524524 if ((size(exportHash) != 64))
525525 then throw("You cannot sell artwork with no export hash")
526526 else if (if (if ((assetId != toBase58String(signAssetId)))
527527 then (assetId != toBase58String(wavesAssetId))
528528 else false)
529529 then (assetId != toBase58String(usdnAssetId))
530530 else false)
531531 then throw("Only SIGN, USDN or WAVES currency accepted at the moment")
532532 else {
533533 let artworkName = match getString(this, keyArtName(callerAddress, artId)) {
534534 case s: String =>
535535 s
536536 case _ =>
537537 throw("This artwork doesn't exit or you are not the owner")
538538 }
539539 let userIsRegistered = match getString(this, keyUserStatus(callerAddress)) {
540540 case s: String =>
541541 s
542542 case _ =>
543543 throw("Please register this account first")
544544 }
545545 let amountSold = match getInteger(this, keyArtIssued(callerAddress, artId)) {
546546 case n: Int =>
547547 n
548548 case _ =>
549549 0
550550 }
551551 let maxCanSell = match getInteger(this, keyArtMaxMint(callerAddress, artId)) {
552552 case n: Int =>
553553 n
554554 case _ =>
555555 0
556556 }
557557 if (if ((amountSold != 0))
558558 then (amountSold == maxCanSell)
559559 else false)
560560 then throw("You reached the max edition allowed to sell for this edition.")
561561 else if (if ((amountSold > 0))
562562 then (maxCanSell != maxMint)
563563 else false)
564564 then throw("You cannot change the maximum issuable anymore")
565565 else if ((userIsRegistered == userSuspended))
566566 then throw("Your account is suspended")
567567 else if ((userIsRegistered == userRemoved))
568568 then throw("Your account have been deleted")
569569 else {
570570 let sellStatus = if ((price > 0))
571571 then true
572572 else false
573573 [BooleanEntry(keyArtOnSale(callerAddress, artId), sellStatus), IntegerEntry(keyArtPrice(callerAddress, artId), price), IntegerEntry(keyArtMaxMint(callerAddress, artId), maxMint), StringEntry(keyArtAssetIdAccepted(callerAddress, artId), assetId), StringEntry("last_invoke_id", id)]
574574 }
575575 }
576576 }
577577 }
578578
579579
580580
581581 @Callable(invoke)
582582 func buyArtwork (artId,issuer) = {
583583 let id = toBase58String(invoke.transactionId)
584584 let callerAddress = toBase58String(invoke.caller.bytes)
585585 let totalNFT = getIntegerByKey("total_nft_issued")
586586 let signID = getStringByKey(keyArtSignID(issuer, artId))
587587 let artworkName = match getString(this, keyArtName(issuer, artId)) {
588588 case s: String =>
589589 s
590590 case _ =>
591591 throw("This artwork doesn't exit")
592592 }
593593 let displayCID = getStringByKey(keyArtDisplayCid(issuer, artId))
594594 let exportCID = getStringByKey(keyArtExportCid(issuer, artId))
595595 let exportHash = getStringByKey(keyArtExportHash(issuer, artId))
596596 let licenceCID = getStringByKey(keyArtLicenceCid(issuer, artId))
597597 let licenceHash = getStringByKey(keyArtLicenceHash(issuer, artId))
598598 let description = take(getStringByKey(keyArtDesc(issuer, artId)), 50)
599599 let amountSold = getIntegerByKey(keyArtIssued(issuer, artId))
600600 let artworkPrice = getIntegerByKey(keyArtPrice(issuer, artId))
601601 let isOnSale = getBooleanByKey(keyArtOnSale(issuer, artId))
602602 let priceAssetId = getStringByKey(keyArtAssetIdAccepted(issuer, artId))
603603 let sourceHash = getStringByKey(keyArtHashByTxidAddr(issuer, artId))
604604 if ((artworkPrice == 0))
605605 then throw("This artwork is not for sell")
606606 else if (!(isOnSale))
607607 then throw("This artwork is not for sale")
608608 else {
609609 let maxCanSell = getIntegerByKey(keyArtMaxMint(issuer, artId))
610610 let payment = value(invoke.payments[0])
611611 let amount = value(payment.amount)
612612 let assetId = if (if (isDefined(payment.assetId))
613613 then (payment.assetId == fromBase58String(priceAssetId))
614614 else false)
615615 then payment.assetId
616616 else throw((("Only " + priceAssetId) + " token id accepted at the moment"))
617617 let cut = if ((priceAssetId == toBase58String(signAssetId)))
618618 then 8
619619 else 10
620620 let amountForSign = ((amount / 100) * cut)
621621 let amountForCreator = (amount - amountForSign)
622622 if ((amountSold == maxCanSell))
623623 then throw("Cannot buy this artwork anymore, maximum editions reached")
624624 else if ((artworkPrice != amount))
625625 then throw(((("Payment don't match seller price: " + toString(artworkPrice)) + " vs ") + toString(amount)))
626626 else {
627627 let newAmountSold = (amountSold + 1)
628628 let entryDate = lastBlock.timestamp
629629 let issueMeta = (((((((((((((((((((((((((((("{\"version\": 1,
630630 \"creator\": \"" + issuer) + "\",
631631 \"artID\": \"") + artId) + "\",
632632 \"signID\": \"") + signID) + "\",
633633 \"artwork_name\": \"") + artworkName) + "\",
634634 \"artwork_desc\": \"") + description) + "\",
635635 \"issue\": \"") + toString(newAmountSold)) + "/") + toString(maxCanSell)) + "\",
636636 \"maxIssuable\": \"") + toString(maxCanSell)) + "\",
637637 \"source_hash\": \"") + sourceHash) + "\",
638638 \"display_cid\": \"") + displayCID) + "\",
639639 \"export_cid\": \"") + exportCID) + "\",
640640 \"export_hash\": \"") + exportHash) + "\",
641641 \"licence_cid\": \"") + licenceCID) + "\",
642642 \"licence_hash\": \"") + licenceHash) + "\"}")
643643 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
644644 let idNFT = calculateAssetId(issueNFT)
645645 let sellStatus = if ((newAmountSold == maxCanSell))
646646 then false
647647 else true
648648 [IntegerEntry(keyArtIssued(issuer, artId), newAmountSold), StringEntry(((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer), ((((((((callerAddress + "_") + toString(entryDate)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId)), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyArtOnSale(issuer, artId), sellStatus), StringEntry("last_invoke_id", id), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId), ScriptTransfer(invoke.caller, 1, idNFT)]
649649 }
650650 }
651651 }
652652
653653
654654
655655 @Callable(i)
656656 func deleteUser (address) = {
657657 let callerAddr = toString(addressFromPublicKey(i.callerPublicKey))
658658 let id = toBase58String(i.transactionId)
659659 if (if ((callerAddr == admin))
660660 then true
661661 else (callerAddr == admin2))
662662 then [DeleteEntry(keyUserDate(address)), DeleteEntry(keyUserAddr(address)), DeleteEntry(keyUserName(address)), DeleteEntry(keyUserDesc(address)), DeleteEntry(keyUserSocial(address)), DeleteEntry(keyUserThumb(address)), StringEntry(keyUserStatus(address), userRemoved), StringEntry("last_invoke_id", id)]
663663 else throw("You are not allowed to do that")
664664 }
665665
666666

github/deemru/w8io/026f985 
92.25 ms