tx · 9CGbAfVy4B2cCeQMiGv162p29ngsBbBFKe4Yb4MULuaU

3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2:  -0.01500000 Waves

2019.09.24 13:06 [690282] smart account 3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2 > SELF 0.00000000 Waves

{ "type": 13, "id": "9CGbAfVy4B2cCeQMiGv162p29ngsBbBFKe4Yb4MULuaU", "fee": 1500000, "feeAssetId": null, "timestamp": 1569319568332, "version": 1, "sender": "3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2", "senderPublicKey": "8y2Uc9uYf5gRD6Dzm1aC73zYe3LZvtVDUVAnAhNdN2mg", "proofs": [ "5b2Au9iPNn9nbohPb1nuZiDefg91AwmypnwXQSGrFUa9cH4CsmrF19q5iuoo4NwXkaJkLuHHUwnX1yh3C9Y23AmG" ], "script": "base64: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aGVjawAAAAMAAAALY3VycmVudFRpbWUAAAAJc3RhcnRUaW1lAAAADmV4cGlyYXRpb25UaW1lCQAAZgAAAAIJAABlAAAAAgUAAAALY3VycmVudFRpbWUFAAAACXN0YXJ0VGltZQUAAAAOZXhwaXJhdGlvblRpbWUBAAAAFmluY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACAAAADHBtdEFzc2V0TmFtZQAAAAxhdWN0aW9uUHJpY2UEAAAAD2tleUZyZWV6ZWRGdW5kcwkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAADHBtdEFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQEAAAAFWN1cnJlbnRGcmVlemVkQmFsYW5jZQQAAAAHJG1hdGNoMAUAAAAPa2V5RnJlZXplZEZ1bmRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAJAABkAAAAAgUAAAAVY3VycmVudEZyZWV6ZWRCYWxhbmNlBQAAAAxhdWN0aW9uUHJpY2UBAAAAFmRlY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACAAAADHBtdEFzc2V0TmFtZQAAAAxhdWN0aW9uUHJpY2UEAAAAD2tleUZyZWV6ZWRGdW5kcwkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAADHBtdEFzc2V0TmFtZQIAAAAIX0ZyZWV6ZWQEAAAAFWN1cnJlbnRGcmVlemVkQmFsYW5jZQQAAAAHJG1hdGNoMAUAAAAPa2V5RnJlZXplZEZ1bmRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAAWEJAABlAAAAAgUAAAAVY3VycmVudEZyZWV6ZWRCYWxhbmNlBQAAAAxhdWN0aW9uUHJpY2UDCQAAZgAAAAIFAAAAAWEAAAAAAAAAAAAFAAAAAWEJAAACAAAAAQIAAAAmRnJlZXplZCBhbW91bnQgY291bGRuJ3QgYmUgbGVzcyB0aGFuIDABAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQAAAABAAAACWNhbGxlclB1YgQAAAAWZnJlZWxhbmNlcklzUmVnaXN0ZXJlZAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWNhbGxlclB1YgIAAAALX0ZyZWVsYW5jZXIEAAAAByRtYXRjaDAFAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAAJY2FsbGVyUHViCQAAAgAAAAECAAAAI09ubHkgcmVnaXN0ZXJlZCB1c2VycyBjYW4gbWFrZSBiZXRzAAAACwAAAAFpAQAAABBmcmVlbGFuY2VyU2lnblVwAAAAAQAAAARpbmZvBAAAAA11c2VyUHVibGljS2V5CQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAARYWxyZWFkeVJlZ2lzdGVyZWQJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAAtfRnJlZWxhbmNlcgMJAQAAAAlpc0RlZmluZWQAAAABBQAAABFhbHJlYWR5UmVnaXN0ZXJlZAkAAAIAAAABAgAAABdVc2VyIGFscmVhZHkgcmVnaXN0ZXJlZAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAAtfRnJlZWxhbmNlcgUAAAAEaW5mbwUAAAADbmlsAAAAAWkBAAAADGNsaWVudFNpZ25VcAAAAAEAAAAEaW5mbwQAAAANdXNlclB1YmxpY0tleQkAAlgAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAAEWFscmVhZHlSZWdpc3RlcmVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAANdXNlclB1YmxpY0tleQIAAAAHX0NsaWVudAMJAQAAAAlpc0RlZmluZWQAAAABBQAAABFhbHJlYWR5UmVnaXN0ZXJlZAkAAAIAAAABAgAAABdVc2VyIGFscmVhZHkgcmVnaXN0ZXJlZAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA11c2VyUHVibGljS2V5AgAAAAdfQ2xpZW50BQAAAARpbmZvBQAAAANuaWwA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cnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAwQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAEBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAFBAAAABBhdWN0aW9uQXNzZXROYW1lCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABgQAAAAMYXVjdGlvblByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAHBAAAABBhdWN0aW9uQXNzZXRJZDU4CQEAAAARQXNzZXROYW1lVG9CYXNlNTgAAAABBQAAABBhdWN0aW9uQXNzZXROYW1lBAAAAAZuZXdCaWQJAQAAAA1iZXRQcmljZUNoZWNrAAAAAgUAAAAIYmV0UHJpY2UFAAAADGF1Y3Rpb25QcmljZQQAAAANbmV3RnJlZWxhbmNlcgkBAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQAAAABBQAAAAljYWxsZXJQdWIEAAAADmRBcHBDb21taXNzaW9uCQAAaQAAAAIJAABoAAAAAgUAAAAMYXVjdGlvblByaWNlAAAAAAAAAAADAAAAAAAAAABkBAAAABFuZXdGcmVlemVkQmFsYW5jZQkBAAAAFmRlY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lBQAAAAxhdWN0aW9uUHJpY2UEAAAAEWF1Y3Rpb25UaW1laXNPdmVyCQEAAAAJdGltZUNoZWNrAAAAAwUAAAAHYmV0VGltZQUAAAAMYXVjdGlvblN0YXJ0BQAAAA9hdWN0aW9uRHVyYXRpb24DBQAAABFhdWN0aW9uVGltZWlzT3ZlcgMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAlzdGF0ZU9wZW4JAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3Jp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U3VnZ2VzdGVkAgAAAAFfBQAAAAthdWN0aW9uSW5mbwIAAAABXwkAAlgAAAABBQAAAA9hdWN0aW9uQ3VzdG9tZXICAAAAAV8JAAGkAAAAAQUAAAAMYXVjdGlvblN0YXJ0AgAAAAFfCQABpAAAAAEFAAAAD2F1Y3Rpb25EdXJhdGlvbgIAAAABXwkAAaQAAAABBQAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uAgAAAAFfBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAFfCQABpAAAAAEFAAAADGF1Y3Rpb25QcmljZQIAAAABXwUAAAANbmV3RnJlZWxhbmNlcgUAAAADbmlsAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAADnN0YXRlU3VnZ2VzdGVkBAAAABNhdWN0aW9uTG93ZXN0QmlkZGVyCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAACQQAAAAWbmV3QXVjdGlvbkxvd2VzdEJpZGRlcgQAAAATa2V5Q3VycmVudExvd2VzdEJpZAkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAABXwUAAAATYXVjdGlvbkxvd2VzdEJpZGRlcgQAAAAVdmFsdWVDdXJyZW50TG93ZXN0QmlkCQAEGgAAAAIFAAAABHRoaXMFAAAAE2tleUN1cnJlbnRMb3dlc3RCaWQEAAAAEGN1cnJlbnRMb3dlc3RCaWQEAAAAByRtYXRjaDAFAAAAFXZhbHVlQ3VycmVudExvd2VzdEJpZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAI0Nhbid0IGZpbmQgbG93ZXN0IGJpZCBieSBwdWJsaWMga2V5AwkAAGYAAAACBQAAABBjdXJyZW50TG93ZXN0QmlkBQAAAAZuZXdCaWQFAAAADW5ld0ZyZWVsYW5jZXIFAAAAE2F1Y3Rpb25Mb3dlc3RCaWRkZXIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAAV8FAAAACWNhbGxlclB1YgUAAAAIYmV0UHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADEF1Y3Rpb25JZEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA5zdGF0ZVN1Z2dlc3RlZAIAAAABXwUAAAALYXVjdGlvbkluZm8CAAAAAV8JAAJYAAAAAQUAAAAPYXVjdGlvbkN1c3RvbWVyAgAAAAFfCQABpAAAAAEFAAAADGF1Y3Rpb25TdGFydAIAAAABXwkAAaQAAAABBQAAAA9hdWN0aW9uRHVyYXRpb24CAAAAAV8JAAGkAAAAAQUAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgIAAAABXwUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAABXwkAAaQAAAABBQAAAAxhdWN0aW9uUHJpY2UCAAAAAV8FAAAAFm5ld0F1Y3Rpb25Mb3dlc3RCaWRkZXIFAAAAA25pbAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAcSW5jb3JyZWN0IGpvYklkIHN0YXRlLiBOb3c6IAUAAAAMYXVjdGlvblN0YXRlAgAAAAssIG11c3QgYmU6IAUAAAAJc3RhdGVPcGVuAgAAAAQgb3IgBQAAAA5zdGF0ZVN1Z2dlc3RlZAAAAAFpAQAAABBjaG9vc2VGcmVlbGFuY2VyAAAAAgAAAAlhdWN0aW9uSWQAAAANZnJlZWxhbmNlclB1YgQAAAAJY2FsbGVyUHViCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAHYmV0VGltZQUAAAAGaGVpZ2h0BAAAAAxBdWN0aW9uSWRLZXkJAQAAABBBdWN0aW9uSWREYXRhS2V5AAAAAQUAAAAJYXVjdGlvbklkBAAAAA9hdWN0aW9uRGF0YUxpc3QJAQAAAAtnZXREYXRhTGlzdAAAAAEFAAAADEF1Y3Rpb25JZEtleQQAAAAMYXVjdGlvblN0YXRlCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAAQAAAALYXVjdGlvbkluZm8JAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAABBAAAAA9hdWN0aW9uQ3VzdG9tZXIJAAJZAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAIEAAAADGF1Y3Rpb25TdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAwQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAEBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAFBAAAABBhdWN0aW9uQXNzZXROYW1lCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABgQAAAAMYXVjdGlvblByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAHBAAAABBhdWN0aW9uQXNzZXRJZDU4CQEAAAARQXNzZXROYW1lVG9CYXNlNTgAAAABBQAAABBhdWN0aW9uQXNzZXROYW1lBAAAABNGcmVlbGFuY2VyQmlkQW1vdW50BAAAABBrZXlGcmVlbGFuY2VyQmlkCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAFfBQAAAA1mcmVlbGFuY2VyUHViBAAAABF2YWx1ZUZyZWVsYWNlckJpZAkABBoAAAACBQAAAAR0aGlzBQAAABBrZXlGcmVlbGFuY2VyQmlkBAAAAAckbWF0Y2gwBQAAABF2YWx1ZUZyZWVsYWNlckJpZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAHkZyZWVsYW5jZXIncyBiZXQgd2FzIG5vdCBmb3VuZAQAAAAOZEFwcENvbW1pc3Npb24JAABp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AAAAAQUAAAAPYXVjdGlvbkN1c3RvbWVyAgAAAAFfCQABpAAAAAEFAAAADGF1Y3Rpb25TdGFydAIAAAABXwkAAaQAAAABBQAAAA9hdWN0aW9uRHVyYXRpb24CAAAAAV8JAAGkAAAAAQUAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgIAAAABXwUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAABXwkAAaQAAAABBQAAABNGcmVlbGFuY2VyQmlkQW1vdW50AgAAAAFfBQAAAA1mcmVlbGFuY2VyUHViBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAPYXVjdGlvbkN1c3RvbWVyBQAAABBhbW91bnREaWZmZXJlbmNlBQAAABBhdWN0aW9uQXNzZXRJZDU4BQAAAANuaWwJAAACAAAAAQIAAAAtT25seSBhdWN0aW9uIGN1c3RvbWVyIGNhbiBjaG9vc2UgYSBmcmVlbGFuY2VyAAAAAWkBAAAAFWluY3JlYXNlRXhlY3V0aW9uVGltZQAAAAIAAAAJYXVjdGlvbklkAAAADWV4ZWN1dGlvbkRheXMEAAAABmNhbGxlcgkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADEF1Y3Rpb25JZEtleQkBAAAAEEF1Y3Rpb25JZERhdGFLZXkAAAABBQAAAAlhdWN0aW9uSWQEAAAAD2F1Y3Rpb25EYXRhTGlzdAkBAAAAC2dldERhdGFMaXN0AAAAAQUAAAAMQXVjdGlvbklkS2V5BAAAAAxhdWN0aW9uU3RhdGUJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAABAAAAAthdWN0aW9uSW5mbwkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAEEAAAAD2F1Y3Rpb25DdXN0b21lcgkAAlkAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAgQAAAAMYXVjdGlvblN0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAADBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAQEAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAUEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAGBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAcEAAAAF25ld0F1Y3Rpb25FeGVjdXRpb25UaW1lBAAAABxuZXdBdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQAAaAAAAAIFAAAADWV4ZWN1dGlvbkRheXMFAAAAA2RheQMJAABmAAAAAgUAAAAcbmV3QXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgUAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgUAAAAcbmV3QXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgkAAAIAAAABAgAAADhOZXcgZXhlY3V0aW9uIHRpbWUgbXVzdCBtb3JlIHRoYW4gY3VycmVudCBleGVjdXRpb24gdGltZQMJAAAAAAAAAgUAAAAGY2FsbGVyBQAAAA9hdWN0aW9uQ3VzdG9tZXIDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAJc3RhdGVPcGVuCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACBQAAAAxBdWN0aW9uSWRLZXkJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAxhdWN0aW9uU3RhdGUCAAAAAV8FAAAAC2F1Y3Rpb25JbmZvAgAAAAFfCQACWAAAAAEFAAAAD2F1Y3Rpb25DdXN0b21lcgIAAAABXwkAAaQAAAABBQAAAAxhdWN0aW9uU3RhcnQCAAAAAV8JAAGkAAAAAQUAAAAPYXVjdGlvbkR1cmF0aW9uAgAAAAFfCQABpAAAAAEFAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24CAAAAAV8FAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAAAV8JAAGkAAAAAQUAAAAMYXVjdGlvblByaWNlBQAAAANuaWwDAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAADnN0YXRlU3VnZ2VzdGVkBgkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAAD3N0YXRlSW5Qcm9ncmVzcwQAAAANZnJlZWxhbmNlclB1YgkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAcJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADEF1Y3Rpb25JZEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAxhdWN0aW9uU3RhdGUCAAAAAV8FAAAAC2F1Y3Rpb25JbmZvAgAAAAFfCQACWAAAAAEFAAAAD2F1Y3Rpb25DdXN0b21lcgIAAAABXwkAAaQAAAABBQAAAAxhdWN0aW9uU3RhcnQCAAAAAV8JAAGkAAAAAQUAAAAPYXVjdGlvbkR1cmF0aW9uAgAAAAFfCQABpAAAAAEFAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24CAAAAAV8FAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAAAV8JAAGkAAAAAQUAAAAMYXVjdGlvblByaWNlAgAAAAFfBQAAAA1mcmVlbGFuY2VyUHViBQAAAANuaWwJAAACAAAAAQIAAAAPSW5jb3JyZWN0IHN0YXRlCQAAAgAAAAECAAAAKU9ubHkgY3VzdG9tZXIgY2FuIGluY3JlYXNlIGV4ZWN1dGlvbiB0aW1lAAAAAWkBAAAADWNhbmNlbEF1Y3Rpb24AAAABAAAACWF1Y3Rpb25JZAQAAAAMQXVjdGlvbklkS2V5CQEAAAAQQXVjdGlvbklkRGF0YUtleQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAPYXVjdGlvbkRhdGFMaXN0CQEAAAALZ2V0RGF0YUxpc3QAAAABBQAAAAxBdWN0aW9uSWRLZXkEAAAADGF1Y3Rpb25TdGF0ZQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAAEAAAAC2F1Y3Rpb25JbmZvCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAQQAAAAPYXVjdGlvbkN1c3RvbWVyCQACWQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAACBAAAAAxhdWN0aW9uU3RhcnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAMEAAAAD2F1Y3Rpb25EdXJhdGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABAQAAAAZYXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABQQAAAAQYXVjdGlvbkFzc2V0TmFtZQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAYEAAAADGF1Y3Rpb25QcmljZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABwQAAAATYXVjdGlvbklkT3duZXJDaGVjawMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAA9hdWN0aW9uQ3VzdG9tZXIGCQAAAgAAAAECAAAAJkF1Y3Rpb24gY2FuIGJlIGNhbmNlbGVkIG9ubHkgYnkgb3duZXIuAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAACXN0YXRlT3BlbgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMQXVjdGlvbklkS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAALc3RhdGVDYW5jZWwCAAAAAV8FAAAAC2F1Y3Rpb25JbmZvAgAAAAFfCQACWAAAAAEFAAAAD2F1Y3Rpb25DdXN0b21lcgIAAAABXwkAAaQAAAABBQAAAAxhdWN0aW9uU3RhcnQCAAAAAV8JAAGkAAAAAQUAAAAPYXVjdGlvbkR1cmF0aW9uAgAAAAFfCQABpAAAAAEFAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24CAAAAAV8FAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAAAV8JAAGkAAAAAQUAAAAMYXVjdGlvblByaWNlBQAAAANuaWwJAAACAAAAAQIAAAAYSW5jb3JyZWN0IGF1Y3Rpb24gc3RhdGUuAAAAAWkBAAAAC29wZW5EaXNwdXRlAAAAAQAAAAlhdWN0aW9uSWQEAAAABmNhbGxlcgkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADEF1Y3Rpb25JZEtleQkBAAAAEEF1Y3Rpb25JZERhdGFLZXkAAAABBQAAAAlhdWN0aW9uSWQEAAAAD2F1Y3Rpb25EYXRhTGlzdAkBAAAAC2dldERhdGFMaXN0AAAAAQUAAAAMQXVjdGlvbklkS2V5BAAAAAxhdWN0aW9uU3RhdGUJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAABAAAAAthdWN0aW9uSW5mbwkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAEEAAAAD2F1Y3Rpb25DdXN0b21lcgkAAlkAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAgQAAAAMYXVjdGlvblN0YXJ0CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAADBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAQEAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAUEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAGBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAcEAAAAEWF1Y3Rpb25GcmVlbGFuY2VyCQACWQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAIAwMJAAAAAAAAAgUAAAAGY2FsbGVyBQAAAA9hdWN0aW9uQ3VzdG9tZXIGCQAAAAAAAAIFAAAABmNhbGxlcgUAAAARYXVjdGlvbkZyZWVsYW5jZXIEAAAACmRhdGFTdHJpbmcCAAAAATEJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIFAAAADEF1Y3Rpb25JZEtleQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAxzdGF0ZURpc3B1dGUCAAAAAV8FAAAAC2F1Y3Rpb25JbmZvAgAAAAFfBQAAAApkYXRhU3RyaW5nCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAIX0Rpc3B1dGUCAAAAATAFAAAAA25pbAkAAAIAAAABAgAAAC1Pbmx5IGN1c3RvbWVyIGFuZCBmcmVlbGFuY2VyIGNhbiBvcGVuIGRpc3B1dGUAAAABaQEAAAALdm90ZURpc3B1dGUAAAACAAAACWF1Y3Rpb25JZAAAAAR2b3RlBAAAAAxBdWN0aW9uSWRLZXkJAQAAABBBdWN0aW9uSWREYXRhS2V5AAAAAQUAAAAJYXVjdGlvbklkBAAAAA9hdWN0aW9uRGF0YUxpc3QJAQAAAAtnZXREYXRhTGlzdAAAAAEFAAAADEF1Y3Rpb25JZEtleQQAAAAMYXVjdGlvblN0YXRlCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAAQAAAALYXVjdGlvbkluZm8JAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAABBAAAAA9hdWN0aW9uQ3VzdG9tZXIJAAJZAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAIEAAAADGF1Y3Rpb25TdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAwQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAEBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAFBAAAABBhdWN0aW9uQXNzZXROYW1lCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABgQAAAAMYXVjdGlvblByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAHBAAAABFhdWN0aW9uRnJlZWxhbmNlcgkAAlkAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAACAQAAAAJY29taXNzaW9uCQAAaQAAAAIJAABoAAAAAgUAAAAMYXVjdGlvblByaWNlAAAAAAAAAAADAAAAAAAAAABkBAAAABFhdWN0aW9uU3RhdGVDaGVjawMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAxzdGF0ZURpc3B1dGUGCQAAAgAAAAEJAAEsAAAAAgIAAAAaSW5jb3JyZWN0IHN0YXRlLiBNdXN0IGJlOiAFAAAADHN0YXRlRGlzcHV0ZQQAAAAHbmV3Vm90ZQMDCQAAAAAAAAIFAAAABHZvdGUFAAAACGN1c3RvbWVyBgkAAAAAAAACBQAAAAR2b3RlBQAAAApmcmVlbGFu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AAAACWNvbWlzc2lvbgUAAAAJY29taXNzaW9uCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkBAAAAEEF1Y3Rpb25JZERhdGFLZXkAAAABBQAAAAlhdWN0aW9uSWQJAAEsAAAAAgkAASwAAAACBQAAABRzdGF0ZURpc3B1dGVSZXNvbHZlZAIAAAABXwUAAAANbmV3RGF0YVN0cmluZwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAABXwUAAAAMc3RhdGVEaXNwdXRlBQAAABRuZXdEaXNwdXRlRGF0YVN0cmluZwUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAAE2Rpc3B1dGVXaW5uZXJQdWJsaWMFAAAAEWFtb3VudFdpdGhvdXRDb21tCQEAAAARQXNzZXROYW1lVG9CYXNlNTgAAAABBQAAABBhdWN0aW9uQXNzZXROYW1lBQAAAANuaWwEAAAAFG5ld0Rpc3B1dGVEYXRhU3RyaW5nAwkAAAAAAAACBQAAAAx2b3Rlc0NvdW50ZXICAAAAATAEAAAAD25ld1ZvdGVzQ291bnRlcgIAAAABMQQAAAAJbmV3Vm90ZXJzBQAAAAhuZXdWb3RlcgQAAAAIbmV3Vm90ZXMFAAAAB25ld1ZvdGUEAAAADW5ld0RhdGFTdHJpbmcJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAPbmV3Vm90ZXNDb3VudGVyAgAAAAEvBQAAAAluZXdWb3RlcnMCAAAAAS8FAAAACG5ld1ZvdGVzBQAAAA1uZXdEYXRhU3RyaW5nAwkAAAAAAAACBQAAAAx2b3Rlc0NvdW50ZXICAAAAATEEAAAABnZvdGVyMQkAAZEAAAACBQAAAA9kaXNwdXRlRGF0YUxpc3QAAAAAAAAAAAEEAAAABXZvdGUxCQABkQAAAAIFAAAAD2Rpc3B1dGVEYXRhTGlzdAAAAAAAAAAAAgQAAAAMYWxyZWFkeVZv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LAAAAAIFAAAACWF1Y3Rpb25JZAIAAAABXwUAAAAMc3RhdGVEaXNwdXRlBQAAABRuZXdEaXNwdXRlRGF0YVN0cmluZwUAAAADbmlsAAAAAWkBAAAADHdvcmtIYW5kT3ZlcgAAAAEAAAAJYXVjdGlvbklkBAAAAAljYWxsZXJQdWIJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxBdWN0aW9uSWRLZXkJAQAAABBBdWN0aW9uSWREYXRhS2V5AAAAAQUAAAAJYXVjdGlvbklkBAAAAA9hdWN0aW9uRGF0YUxpc3QJAQAAAAtnZXREYXRhTGlzdAAAAAEFAAAADEF1Y3Rpb25JZEtleQQAAAAMYXVjdGlvblN0YXRlCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAAQAAAALYXVjdGlvbkluZm8JAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAABBAAAAA9hdWN0aW9uQ3VzdG9tZXIJAAJZAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAIEAAAADGF1Y3Rpb25TdGFydAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAwQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAEBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAFBAAAABBhdWN0aW9uQXNzZXROYW1lCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABgQAAAAMYXVjdGlvblByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAHBAAAABFhdWN0aW9uRnJlZWxhbmNlcgkAAlkAAAABCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAA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aXN0AAAAAAAAAAADBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAQEAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAUEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAGBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAcEAAAAEWF1Y3Rpb25GcmVlbGFuY2VyCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAgQAAAAGY2FsbGVyCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAOZEFwcENvbW1pc3Npb24JAABpAAAAAgkAAGgAAAACBQAAAAxhdWN0aW9uUHJpY2UAAAAAAAAAAAMAAAAAAAAAAGQEAAAAEWFtb3VudFdpdGhvdXRDb21tCQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUAAAAOZEFwcENvbW1pc3Npb24EAAAACW5ld1JhdGluZwQAAAALdmFsdWVSYXRpbmcJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAABFhdWN0aW9uRnJlZWxhbmNlcgIAAAAHX1JhdGluZwQAAAANY3VycmVudFJhdGluZwQAAAAHJG1hdGNoMAUAAAALdmFsdWVSYXRpbmcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAkAAGQAAAACBQAAAA1jdXJyZW50UmF0aW5nAAAAAAAAAAABAwkAAAAAAAACBQAAAAZjYWxsZXIFAAAAD2F1Y3Rpb25DdXN0b21lcgMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAABFzdGF0ZVdhaXQ0Q29uZmlybQQAAAANbmV3RGF0YVN0cmluZwkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAAAQIAAAABXwkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAICAAAAAV8JAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAADAgAAAAFfCQABkQAAAAIFAAAAD2F1Y3Rpb25EYXRhTGlzdAAAAAAAAAAABAIAAAABXwkAAZEAAAACBQAAAA9hdWN0aW9uRGF0YUxpc3QAAAAAAAAAAAUCAAAAAV8JAAGRAAAAAgUAAAAPYXVjdGlvbkRhdGFMaXN0AAAAAAAAAAAGCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgUAAAAMQXVjdGlvbklkS2V5CQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAADXN0YXRlQ29tcGxldGUCAAAAAV8FAAAAC2F1Y3Rpb25JbmZvAgAAAAFfBQAAAA1uZXdEYXRhU3RyaW5nCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyAgAAAAdfUmF0aW5nBQAAAAluZXdSYXRpbmcFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABCQACWQAAAAEFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyBQAAABFhbW91bnRXaXRob3V0Q29tbQkBAAAAEUFzc2V0TmFtZVRvQmFzZTU4AAAAAQUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgIAAAAaSW5jb3JyZWN0IHN0YXRlLiBNdXN0IGJlOiAFAAAAEXN0YXRlV2FpdDRDb25maXJtCQAAAgAAAAECAAAAK09ubHkgYXVjdGlvbiBjdXN0b21lciBjYW4gdXNlIHRoaXMgZnVuY3Rpb24AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAAAwkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkEAAAAByRtYXRjaDAFAAAAAnR4AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABNUcmFuc2ZlclRyYW5zYWN0aW9uBAAAAAN0dHgFAAAAByRtYXRjaDAGAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABRTZXRTY3JpcHRUcmFuc2FjdGlvbgQAAAADc3R4BQAAAAckbWF0Y2gwBgcHuUClyQ==", "chainId": 84, "height": 690282, "spentComplexity": 0 } View: original | compacted Prev: 4yp4WC4YAYtuhodUohRuPXSQxLbYwf29jCbfY2Wztf94 Next: B7LnJBzoDvajfnDqSFAPgQrKdDwUpRco2CnqWCvvSRxH Diff:
OldNewDifferences
200200 then ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateCancel + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + "NoFreelancer") + "_") + "NoBid")), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionCustomer), (auctionPrice - dAppCommission), auctionAssetId58)]))
201201 else if ((auctionState == stateSuggested))
202202 then {
203- let auctionFreelancer = auctionDataList[7]
204- let auctionJobCost = auctionDataList[8]
205- WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + auctionFreelancer) + "_") + auctionJobCost))])
203+ let auctionLowestBidder = auctionDataList[9]
204+ let auctionFreelancer = auctionDataList[8]
205+ WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + auctionFreelancer) + "_") + auctionLowestBidder))])
206206 }
207207 else throw("Incorrect auction state")
208208 else if ((auctionState == stateOpen))
209209 then WriteSet([DataEntry(((auctionId + "_") + newFreelancer), betPrice), DataEntry(AuctionIdKey, ((((((((((((((((stateSuggested + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + newFreelancer))])
210210 else if ((auctionState == stateSuggested))
211211 then {
212- let auctionLowestBidder = auctionDataList[7]
212+ let auctionLowestBidder = auctionDataList[9]
213213 let newAuctionLowestBidder = {
214214 let keyCurrentLowestBid = ((auctionId + "_") + auctionLowestBidder)
215215 let valueCurrentLowestBid = getInteger(this, keyCurrentLowestBid)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let day = 1440
55
66 let WAVES = unit
77
88 let wBTC = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
99
1010 let wEUR = base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'
1111
1212 let wUSD = base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'
1313
1414 let stateOpen = "Opened"
1515
1616 let stateSuggested = "Suggested"
1717
1818 let stateCancel = "Canceled"
1919
2020 let stateInProgress = "InProgress"
2121
2222 let stateWait4Confirm = "WaitForConfirmation"
2323
2424 let stateComplete = "Completed"
2525
2626 let stateDispute = "Dispute"
2727
2828 let stateDisputeResolved = "DisputeResolved"
2929
3030 let customer = "CMR"
3131
3232 let freelancer = "FL"
3333
3434 let ambassador1 = base58'1'
3535
3636 let ambassador2 = base58'1'
3737
3838 let ambassador3 = base58'1'
3939
4040 let ambassador4 = base58'1'
4141
4242 let ambassador5 = base58'1'
4343
4444 func AuctionIdDataKey (auctionId) = (auctionId + "_AuctionData")
4545
4646
4747 func getDataList (auctionId) = {
4848 let getDataString = getString(this, auctionId)
4949 let a = match getDataString {
5050 case a: String =>
5151 a
5252 case _ =>
5353 throw("AuctionId was not found")
5454 }
5555 split(a, "_")
5656 }
5757
5858
5959 func getDisputeDataList (auctionId) = {
6060 let keyDisputeData = ((auctionId + "_") + stateDispute)
6161 let getDisputeDataString = getString(this, keyDisputeData)
6262 let a = match getDisputeDataString {
6363 case a: String =>
6464 a
6565 case _ =>
6666 throw("Dispute data was not found")
6767 }
6868 split(a, "/")
6969 }
7070
7171
7272 func AssetNameToBase58 (auctionAssetName) = if ((auctionAssetName == "WAVES"))
7373 then WAVES
7474 else if ((auctionAssetName == "BTC"))
7575 then wBTC
7676 else if ((auctionAssetName == "EUR"))
7777 then wEUR
7878 else if ((auctionAssetName == "USD"))
7979 then wUSD
8080 else throw("Incorrect Asset Id")
8181
8282
8383 func betPriceCheck (betPrice,auctionPrice) = if ((auctionPrice > betPrice))
8484 then betPrice
8585 else throw(("Bet price must be lower than actual price. Actual price: " + toString(auctionPrice)))
8686
8787
8888 func timeCheck (currentTime,startTime,expirationTime) = ((currentTime - startTime) > expirationTime)
8989
9090
9191 func increaseFreezedBalance (pmtAssetName,auctionPrice) = {
9292 let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
9393 let currentFreezedBalance = match keyFreezedFunds {
9494 case a: Int =>
9595 a
9696 case _ =>
9797 0
9898 }
9999 (currentFreezedBalance + auctionPrice)
100100 }
101101
102102
103103 func decreaseFreezedBalance (pmtAssetName,auctionPrice) = {
104104 let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
105105 let currentFreezedBalance = match keyFreezedFunds {
106106 case a: Int =>
107107 a
108108 case _ =>
109109 0
110110 }
111111 let a = (currentFreezedBalance - auctionPrice)
112112 if ((a > 0))
113113 then a
114114 else throw("Freezed amount couldn't be less than 0")
115115 }
116116
117117
118118 func freelancerIsRegistered (callerPub) = {
119119 let freelancerIsRegistered = getString(this, (callerPub + "_Freelancer"))
120120 match freelancerIsRegistered {
121121 case a: String =>
122122 callerPub
123123 case _ =>
124124 throw("Only registered users can make bets")
125125 }
126126 }
127127
128128
129129 @Callable(i)
130130 func freelancerSignUp (info) = {
131131 let userPublicKey = toBase58String(i.callerPublicKey)
132132 let alreadyRegistered = getString(this, (userPublicKey + "_Freelancer"))
133133 if (isDefined(alreadyRegistered))
134134 then throw("User already registered")
135135 else WriteSet([DataEntry((userPublicKey + "_Freelancer"), info)])
136136 }
137137
138138
139139
140140 @Callable(i)
141141 func clientSignUp (info) = {
142142 let userPublicKey = toBase58String(i.callerPublicKey)
143143 let alreadyRegistered = getString(this, (userPublicKey + "_Client"))
144144 if (isDefined(alreadyRegistered))
145145 then throw("User already registered")
146146 else WriteSet([DataEntry((userPublicKey + "_Client"), info)])
147147 }
148148
149149
150150
151151 @Callable(i)
152152 func createAuction (jobExecutionDays,auctionDurationDays,auctionInfo) = {
153153 let auctionId = toBase58String(i.transactionId)
154154 let auctionCustomer = toBase58String(i.callerPublicKey)
155155 let pmt = extract(i.payment)
156156 let pmtAmount = pmt.amount
157157 let auctionPrice = if ((pmtAmount > 0))
158158 then pmtAmount
159159 else throw("Amount must be higher then 0")
160160 let auctionStart = height
161161 let auctionDurationBlocks = (auctionDurationDays * day)
162162 let blocksForExecution = (jobExecutionDays * day)
163163 let pmtAssetName = if (!(isDefined(pmt.assetId)))
164164 then "WAVES"
165165 else if ((pmt.assetId == wBTC))
166166 then "BTC"
167167 else if ((pmt.assetId == wEUR))
168168 then "EUR"
169169 else if ((pmt.assetId == wUSD))
170170 then "USD"
171171 else throw("AssetId is incorrect")
172172 let newFreezedBalance = increaseFreezedBalance(pmtAssetName, auctionPrice)
173173 WriteSet([DataEntry(AuctionIdDataKey(auctionId), ((((((((((((((stateOpen + "_") + auctionInfo) + "_") + auctionCustomer) + "_") + toString(auctionStart)) + "_") + toString(auctionDurationBlocks)) + "_") + toString(blocksForExecution)) + "_") + pmtAssetName) + "_") + toString(auctionPrice))), DataEntry((pmtAssetName + "_Freezed"), newFreezedBalance)])
174174 }
175175
176176
177177
178178 @Callable(i)
179179 func makeBid (auctionId,betPrice) = {
180180 let callerPub = toBase58String(i.callerPublicKey)
181181 let betTime = height
182182 let AuctionIdKey = AuctionIdDataKey(auctionId)
183183 let auctionDataList = getDataList(AuctionIdKey)
184184 let auctionState = auctionDataList[0]
185185 let auctionInfo = auctionDataList[1]
186186 let auctionCustomer = fromBase58String(auctionDataList[2])
187187 let auctionStart = parseIntValue(auctionDataList[3])
188188 let auctionDuration = parseIntValue(auctionDataList[4])
189189 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
190190 let auctionAssetName = auctionDataList[6]
191191 let auctionPrice = parseIntValue(auctionDataList[7])
192192 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
193193 let newBid = betPriceCheck(betPrice, auctionPrice)
194194 let newFreelancer = freelancerIsRegistered(callerPub)
195195 let dAppCommission = ((auctionPrice * 3) / 100)
196196 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
197197 let auctionTimeisOver = timeCheck(betTime, auctionStart, auctionDuration)
198198 if (auctionTimeisOver)
199199 then if ((auctionState == stateOpen))
200200 then ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateCancel + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + "NoFreelancer") + "_") + "NoBid")), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionCustomer), (auctionPrice - dAppCommission), auctionAssetId58)]))
201201 else if ((auctionState == stateSuggested))
202202 then {
203- let auctionFreelancer = auctionDataList[7]
204- let auctionJobCost = auctionDataList[8]
205- WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + auctionFreelancer) + "_") + auctionJobCost))])
203+ let auctionLowestBidder = auctionDataList[9]
204+ let auctionFreelancer = auctionDataList[8]
205+ WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + auctionFreelancer) + "_") + auctionLowestBidder))])
206206 }
207207 else throw("Incorrect auction state")
208208 else if ((auctionState == stateOpen))
209209 then WriteSet([DataEntry(((auctionId + "_") + newFreelancer), betPrice), DataEntry(AuctionIdKey, ((((((((((((((((stateSuggested + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + newFreelancer))])
210210 else if ((auctionState == stateSuggested))
211211 then {
212- let auctionLowestBidder = auctionDataList[7]
212+ let auctionLowestBidder = auctionDataList[9]
213213 let newAuctionLowestBidder = {
214214 let keyCurrentLowestBid = ((auctionId + "_") + auctionLowestBidder)
215215 let valueCurrentLowestBid = getInteger(this, keyCurrentLowestBid)
216216 let currentLowestBid = match valueCurrentLowestBid {
217217 case a: Int =>
218218 a
219219 case _ =>
220220 throw("Can't find lowest bid by public key")
221221 }
222222 if ((currentLowestBid > newBid))
223223 then newFreelancer
224224 else auctionLowestBidder
225225 }
226226 WriteSet([DataEntry(((auctionId + "_") + callerPub), betPrice), DataEntry(AuctionIdKey, ((((((((((((((((stateSuggested + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + newAuctionLowestBidder))])
227227 }
228228 else throw(((((("Incorrect jobId state. Now: " + auctionState) + ", must be: ") + stateOpen) + " or ") + stateSuggested))
229229 }
230230
231231
232232
233233 @Callable(i)
234234 func chooseFreelancer (auctionId,freelancerPub) = {
235235 let callerPub = extract(i.callerPublicKey)
236236 let betTime = height
237237 let AuctionIdKey = AuctionIdDataKey(auctionId)
238238 let auctionDataList = getDataList(AuctionIdKey)
239239 let auctionState = auctionDataList[0]
240240 let auctionInfo = auctionDataList[1]
241241 let auctionCustomer = fromBase58String(auctionDataList[2])
242242 let auctionStart = parseIntValue(auctionDataList[3])
243243 let auctionDuration = parseIntValue(auctionDataList[4])
244244 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
245245 let auctionAssetName = auctionDataList[6]
246246 let auctionPrice = parseIntValue(auctionDataList[7])
247247 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
248248 let FreelancerBidAmount = {
249249 let keyFreelancerBid = ((auctionId + "_") + freelancerPub)
250250 let valueFreelacerBid = getInteger(this, keyFreelancerBid)
251251 match valueFreelacerBid {
252252 case a: Int =>
253253 a
254254 case _ =>
255255 throw("Freelancer's bet was not found")
256256 }
257257 }
258258 let dAppCommission = ((auctionPrice * 3) / 100)
259259 let amountDifference = ((auctionPrice - FreelancerBidAmount) - dAppCommission)
260260 let auctionTimeisOver = timeCheck(betTime, auctionStart, auctionDuration)
261261 if ((callerPub == auctionCustomer))
262262 then if (auctionTimeisOver)
263263 then if ((auctionState == stateOpen))
264264 then ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((((stateCancel + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + "NoFreelancer") + "_") + "NoBid"))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionCustomer), (auctionPrice - dAppCommission), auctionAssetId58)]))
265265 else if ((auctionState == stateSuggested))
266266 then WriteSet([DataEntry(AuctionIdKey, ((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)))])
267267 else throw("Incorrect auction state")
268268 else ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((stateInProgress + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(FreelancerBidAmount)) + "_") + freelancerPub))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionCustomer), amountDifference, auctionAssetId58)]))
269269 else throw("Only auction customer can choose a freelancer")
270270 }
271271
272272
273273
274274 @Callable(i)
275275 func increaseExecutionTime (auctionId,executionDays) = {
276276 let caller = extract(i.callerPublicKey)
277277 let AuctionIdKey = AuctionIdDataKey(auctionId)
278278 let auctionDataList = getDataList(AuctionIdKey)
279279 let auctionState = auctionDataList[0]
280280 let auctionInfo = auctionDataList[1]
281281 let auctionCustomer = fromBase58String(auctionDataList[2])
282282 let auctionStart = parseIntValue(auctionDataList[3])
283283 let auctionDuration = parseIntValue(auctionDataList[4])
284284 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
285285 let auctionAssetName = auctionDataList[6]
286286 let auctionPrice = parseIntValue(auctionDataList[7])
287287 let newAuctionExecutionTime = {
288288 let newAuctionBlocksForExecution = (executionDays * day)
289289 if ((newAuctionBlocksForExecution > auctionBlocksForExecution))
290290 then newAuctionBlocksForExecution
291291 else throw("New execution time must more than current execution time")
292292 }
293293 if ((caller == auctionCustomer))
294294 then if ((auctionState == stateOpen))
295295 then WriteSet([DataEntry(AuctionIdKey, ((((((((((((((auctionState + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)))])
296296 else if (if ((auctionState == stateSuggested))
297297 then true
298298 else (auctionState == stateInProgress))
299299 then {
300300 let freelancerPub = auctionDataList[7]
301301 WriteSet([DataEntry(AuctionIdKey, ((((((((((((((((auctionState + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + freelancerPub))])
302302 }
303303 else throw("Incorrect state")
304304 else throw("Only customer can increase execution time")
305305 }
306306
307307
308308
309309 @Callable(i)
310310 func cancelAuction (auctionId) = {
311311 let AuctionIdKey = AuctionIdDataKey(auctionId)
312312 let auctionDataList = getDataList(AuctionIdKey)
313313 let auctionState = auctionDataList[0]
314314 let auctionInfo = auctionDataList[1]
315315 let auctionCustomer = fromBase58String(auctionDataList[2])
316316 let auctionStart = parseIntValue(auctionDataList[3])
317317 let auctionDuration = parseIntValue(auctionDataList[4])
318318 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
319319 let auctionAssetName = auctionDataList[6]
320320 let auctionPrice = parseIntValue(auctionDataList[7])
321321 let auctionIdOwnerCheck = if ((i.callerPublicKey == auctionCustomer))
322322 then true
323323 else throw("Auction can be canceled only by owner.")
324324 if ((auctionState == stateOpen))
325325 then WriteSet([DataEntry(AuctionIdKey, ((((((((((((((stateCancel + "_") + auctionInfo) + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)))])
326326 else throw("Incorrect auction state.")
327327 }
328328
329329
330330
331331 @Callable(i)
332332 func openDispute (auctionId) = {
333333 let caller = extract(i.callerPublicKey)
334334 let AuctionIdKey = AuctionIdDataKey(auctionId)
335335 let auctionDataList = getDataList(AuctionIdKey)
336336 let auctionState = auctionDataList[0]
337337 let auctionInfo = auctionDataList[1]
338338 let auctionCustomer = fromBase58String(auctionDataList[2])
339339 let auctionStart = parseIntValue(auctionDataList[3])
340340 let auctionDuration = parseIntValue(auctionDataList[4])
341341 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
342342 let auctionAssetName = auctionDataList[6]
343343 let auctionPrice = parseIntValue(auctionDataList[7])
344344 let auctionFreelancer = fromBase58String(auctionDataList[8])
345345 if (if ((caller == auctionCustomer))
346346 then true
347347 else (caller == auctionFreelancer))
348348 then {
349349 let dataString = "1"
350350 WriteSet([DataEntry(AuctionIdKey, ((((stateDispute + "_") + auctionInfo) + "_") + dataString)), DataEntry((auctionId + "_Dispute"), "0")])
351351 }
352352 else throw("Only customer and freelancer can open dispute")
353353 }
354354
355355
356356
357357 @Callable(i)
358358 func voteDispute (auctionId,vote) = {
359359 let AuctionIdKey = AuctionIdDataKey(auctionId)
360360 let auctionDataList = getDataList(AuctionIdKey)
361361 let auctionState = auctionDataList[0]
362362 let auctionInfo = auctionDataList[1]
363363 let auctionCustomer = fromBase58String(auctionDataList[2])
364364 let auctionStart = parseIntValue(auctionDataList[3])
365365 let auctionDuration = parseIntValue(auctionDataList[4])
366366 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
367367 let auctionAssetName = auctionDataList[6]
368368 let auctionPrice = parseIntValue(auctionDataList[7])
369369 let auctionFreelancer = fromBase58String(auctionDataList[8])
370370 let comission = ((auctionPrice * 3) / 100)
371371 let auctionStateCheck = if ((auctionState == stateDispute))
372372 then true
373373 else throw(("Incorrect state. Must be: " + stateDispute))
374374 let newVote = if (if ((vote == customer))
375375 then true
376376 else (vote == freelancer))
377377 then vote
378378 else throw(((("Vote is incorrect. Must be: " + customer) + " or ") + freelancer))
379379 let newVoter = if (if (if (if (if ((i.callerPublicKey == ambassador1))
380380 then true
381381 else (i.callerPublicKey == ambassador2))
382382 then true
383383 else (i.callerPublicKey == ambassador3))
384384 then true
385385 else (i.callerPublicKey == ambassador4))
386386 then true
387387 else (i.callerPublicKey == ambassador5))
388388 then toBase58String(i.callerPublicKey)
389389 else throw("You have no rights for disputes resolving")
390390 let disputeData = {
391391 let keyDispute = ((auctionId + "_") + stateDispute)
392392 let valueDispute = getString(this, keyDispute)
393393 match valueDispute {
394394 case a: String =>
395395 a
396396 case _ =>
397397 throw("Cannot find data of dispute in storage")
398398 }
399399 }
400400 let disputeDataList = split(disputeData, "/")
401401 let votesCounter = disputeDataList[0]
402402 if ((votesCounter == "4"))
403403 then {
404404 let votersList = split(disputeDataList[1], "_")
405405 let votesList = split(disputeDataList[2], "_")
406406 let alreadyVoted = if ((newVoter == votersList[0]))
407407 then true
408408 else (newVoter == votersList[1])
409409 if (alreadyVoted)
410410 then throw("You already voted")
411411 else {
412412 let newVotesCounter = "5"
413413 let newVoters = ((disputeDataList[1] + "_") + newVoter)
414414 let newVotes = ((disputeDataList[2] + "_") + newVote)
415415 let newDisputeDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
416416 let disputeWinner = {
417417 let vote1 = if ((votesList[0] == customer))
418418 then 1
419419 else 0
420420 let vote2 = if ((votesList[1] == customer))
421421 then 1
422422 else 0
423423 let vote3 = if ((votesList[2] == customer))
424424 then 1
425425 else 0
426426 let vote4 = if ((votesList[3] == customer))
427427 then 1
428428 else 0
429429 let vote5 = if ((newVote == customer))
430430 then 1
431431 else 0
432432 let customerVotes = ((((vote1 + vote2) + vote3) + vote4) + vote5)
433433 if ((customerVotes > 2))
434434 then customer
435435 else freelancer
436436 }
437437 let newDataString = ((((((((((((((auctionInfo + "_") + toBase58String(auctionCustomer)) + "_") + toString(auctionStart)) + "_") + toString(auctionDuration)) + "_") + toString(auctionBlocksForExecution)) + "_") + auctionAssetName) + "_") + toString(auctionPrice)) + "_") + toBase58String(auctionFreelancer))
438438 let disputeWinnerPublic = if ((disputeWinner == customer))
439439 then auctionCustomer
440440 else auctionFreelancer
441441 let amountWithoutComm = if ((disputeWinnerPublic == auctionCustomer))
442442 then (auctionPrice - comission)
443443 else ((auctionPrice - comission) - comission)
444444 ScriptResult(WriteSet([DataEntry(AuctionIdDataKey(auctionId), ((stateDisputeResolved + "_") + newDataString)), DataEntry(((auctionId + "_") + stateDispute), newDisputeDataString)]), TransferSet([ScriptTransfer(addressFromPublicKey(disputeWinnerPublic), amountWithoutComm, AssetNameToBase58(auctionAssetName))]))
445445 }
446446 }
447447 else {
448448 let newDisputeDataString = if ((votesCounter == "0"))
449449 then {
450450 let newVotesCounter = "1"
451451 let newVoters = newVoter
452452 let newVotes = newVote
453453 let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
454454 newDataString
455455 }
456456 else if ((votesCounter == "1"))
457457 then {
458458 let voter1 = disputeDataList[1]
459459 let vote1 = disputeDataList[2]
460460 let alreadyVoted = (newVoter == voter1)
461461 if (alreadyVoted)
462462 then throw("You already voted")
463463 else {
464464 let newVotesCounter = "1"
465465 let newVoters = (voter1 + newVoter)
466466 let newVotes = (vote1 + newVote)
467467 let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
468468 newDataString
469469 }
470470 }
471471 else if ((votesCounter == "2"))
472472 then {
473473 let votersList = split(disputeDataList[1], "_")
474474 let votesList = split(disputeDataList[2], "_")
475475 let alreadyVoted = if ((newVoter == votersList[0]))
476476 then true
477477 else (newVoter == votersList[1])
478478 if (alreadyVoted)
479479 then throw("You already voted")
480480 else {
481481 let newVotesCounter = "3"
482482 let newVoters = ((disputeDataList[1] + "_") + newVoter)
483483 let newVotes = ((disputeDataList[2] + "_") + newVote)
484484 let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
485485 newDataString
486486 }
487487 }
488488 else if ((votesCounter == "3"))
489489 then {
490490 let votersList = split(disputeDataList[1], "_")
491491 let votesList = split(disputeDataList[2], "_")
492492 let alreadyVoted = if (if ((newVoter == votersList[0]))
493493 then true
494494 else (newVoter == votersList[1]))
495495 then true
496496 else (newVoter == votersList[2])
497497 if (alreadyVoted)
498498 then throw("You already voted")
499499 else {
500500 let newVotesCounter = "4"
501501 let newVoters = ((disputeDataList[1] + "_") + newVoter)
502502 let newVotes = ((disputeDataList[2] + "_") + newVote)
503503 let newDataString = ((((newVotesCounter + "/") + newVoters) + "/") + newVotes)
504504 newDataString
505505 }
506506 }
507507 else throw("Dispute has been already resolved")
508508 WriteSet([DataEntry(((auctionId + "_") + stateDispute), newDisputeDataString)])
509509 }
510510 }
511511
512512
513513
514514 @Callable(i)
515515 func workHandOver (auctionId) = {
516516 let callerPub = extract(i.callerPublicKey)
517517 let AuctionIdKey = AuctionIdDataKey(auctionId)
518518 let auctionDataList = getDataList(AuctionIdKey)
519519 let auctionState = auctionDataList[0]
520520 let auctionInfo = auctionDataList[1]
521521 let auctionCustomer = fromBase58String(auctionDataList[2])
522522 let auctionStart = parseIntValue(auctionDataList[3])
523523 let auctionDuration = parseIntValue(auctionDataList[4])
524524 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
525525 let auctionAssetName = auctionDataList[6]
526526 let auctionPrice = parseIntValue(auctionDataList[7])
527527 let auctionFreelancer = fromBase58String(auctionDataList[8])
528528 let currentTime = height
529529 let freelancerPubCheck = if ((callerPub == auctionFreelancer))
530530 then callerPub
531531 else throw("Only a freelancer can indicate that the work is done")
532532 let timeIsOver = ((currentTime - auctionStart) > auctionBlocksForExecution)
533533 if ((auctionState == stateInProgress))
534534 then if (timeIsOver)
535535 then {
536536 let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
537537 WriteSet([DataEntry(AuctionIdKey, ((((stateDispute + "_") + auctionInfo) + "_") + newDataString))])
538538 }
539539 else {
540540 let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
541541 WriteSet([DataEntry(AuctionIdKey, ((((stateWait4Confirm + "_") + auctionInfo) + "_") + newDataString))])
542542 }
543543 else throw("Auction state is incorrect")
544544 }
545545
546546
547547
548548 @Callable(i)
549549 func acceptWork (auctionId) = {
550550 let AuctionIdKey = AuctionIdDataKey(auctionId)
551551 let auctionDataList = getDataList(AuctionIdKey)
552552 let auctionState = auctionDataList[0]
553553 let auctionInfo = auctionDataList[1]
554554 let auctionCustomer = fromBase58String(auctionDataList[2])
555555 let auctionStart = parseIntValue(auctionDataList[3])
556556 let auctionDuration = parseIntValue(auctionDataList[4])
557557 let auctionBlocksForExecution = parseIntValue(auctionDataList[5])
558558 let auctionAssetName = auctionDataList[6]
559559 let auctionPrice = parseIntValue(auctionDataList[7])
560560 let auctionFreelancer = auctionDataList[2]
561561 let caller = extract(i.callerPublicKey)
562562 let dAppCommission = ((auctionPrice * 3) / 100)
563563 let amountWithoutComm = (auctionPrice - dAppCommission)
564564 let newRating = {
565565 let valueRating = getInteger(this, (auctionFreelancer + "_Rating"))
566566 let currentRating = match valueRating {
567567 case a: Int =>
568568 a
569569 case _ =>
570570 0
571571 }
572572 (currentRating + 1)
573573 }
574574 if ((caller == auctionCustomer))
575575 then if ((auctionState == stateWait4Confirm))
576576 then {
577577 let newDataString = ((((((((((auctionDataList[1] + "_") + auctionDataList[2]) + "_") + auctionDataList[3]) + "_") + auctionDataList[4]) + "_") + auctionDataList[5]) + "_") + auctionDataList[6])
578578 ScriptResult(WriteSet([DataEntry(AuctionIdKey, ((((stateComplete + "_") + auctionInfo) + "_") + newDataString)), DataEntry((auctionFreelancer + "_Rating"), newRating)]), TransferSet([ScriptTransfer(addressFromPublicKey(fromBase58String(auctionFreelancer)), amountWithoutComm, AssetNameToBase58(auctionAssetName))]))
579579 }
580580 else throw(("Incorrect state. Must be: " + stateWait4Confirm))
581581 else throw("Only auction customer can use this function")
582582 }
583583
584584
585585 @Verifier(tx)
586586 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
587587 then match tx {
588588 case ttx: TransferTransaction =>
589589 true
590590 case stx: SetScriptTransaction =>
591591 true
592592 case _ =>
593593 false
594594 }
595595 else false
596596

github/deemru/w8io/169f3d6 
77.49 ms