tx · 2dE2wwZBoP9hYuMQ7oYAYjuWETq6B1EVT499w3Cm4mV6

3N1s2w4NHgbrXxNZXH9RtaVT9ptHRJcgSp2:  -0.03200000 Waves

2023.11.30 12:40 [2865973] smart account 3N1s2w4NHgbrXxNZXH9RtaVT9ptHRJcgSp2 > SELF 0.00000000 Waves

{ "type": 13, "id": "2dE2wwZBoP9hYuMQ7oYAYjuWETq6B1EVT499w3Cm4mV6", "fee": 3200000, "feeAssetId": null, "timestamp": 1701337334884, "version": 2, "chainId": 84, "sender": "3N1s2w4NHgbrXxNZXH9RtaVT9ptHRJcgSp2", "senderPublicKey": "DNKNL32sAVUYg4iGA3tW8Z6VXrENmGCmKfG6DLar82aP", "proofs": [ "3NiLzr2Ui5bnWxeYT9raYGZb6pv6XcvSyTax2bNbWHk1UC23oT2PKCsUkj9GikBMFrjZoztL3uEtVk9YV1GrcnQH" ], "script": "base64:AAIFAAAAAAAAAEAIAhIMCgoBAQgIAQEBCAEBEgwKCgEBCAgBAQEIAQESABIFCgMBCAgSABIECgIIARIDCgEIEgMKAQgSABIDCgEIAAAADgAAAAAWcG9vbF9saXF1aWRpdHlfYWRkcmVzcwIAAAAjM040d0JnWXRXZ0pXMkxUUmVmMmVrV1FUckVYQ1JmWG1HTGgAAAAAFERhcHBfQWRkcmVzc19wdWJfa2V5AQAAACDI7Zjahu5VNVhgxzyW6CpbYvUiMMUf5OyBUQlo584acwAAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wAAAAAYq/YBYgAAAAAAtDdXJyZW5jeV9JRAIAAAAFV0FWRVMAAAAAFHByb2R1Y3RfbGF1bmNoX2Vycm9yAgAAACNQcm9kdWN0IExhdW5jaCBUaW1lc3RhbXAgaXMgc2V0IGF0IAAAAAAQbm9fcGF5bWVudF9lcnJvcgIAAAA3Tm8gcGF5bWVudCBhdHRhY2hlZCwgUGxlYXNlIEF0dGFjaCBUb2tlbiBpbiBwYXltZW50WzFdLgAAAAASY2xvc2VkX29yYWNsZV9lcm9yAgAAADFPcmFjbGUgaXMgY2xvc2VkLiBXYWl0IFVudGlsIE9yYWNsZSBpcyBUdXJuZWQgT24uAAAAABF3aGl0ZWxpc3RfYWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAURGFwcF9BZGRyZXNzX3B1Yl9rZXkAAAAACWQyZGNhbGxlcgkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQEAAAAgVjmO4YcVELU8Q7V+UVV19WsVRR/5xSyznPDzMoLMOkEAAAAAC25ldHdvcmtfZmVlAAAAAAAADbugAAAAABJtaW5pbXVtX29yZGVyX3NpemUAAAAAAACYloAAAAAAEm1heGltdW1fb3JkZXJfc2l6ZQAAAAACVAvkAAAAAAAUbWF4aW11bV92b3VjaGVyX3NpemUAAAAAAAX14QAAAAAAFHJlYWRfc2h1dGRvd25fc3RhdHVzCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwIAAAAPU2h1dGRvd25fU3RhdHVzAgAAAE1Jbml0aWF0ZV9Db250cmFjdF9TaHV0ZG93biBmdW5jdGlvbiB2YWx1ZSBpcyBub3QgU2V0LCBQbGVhc2UgU2lnbiB0aGF0IGZpcnN0LgAAAAoAAAABaQEAAAAPcGxhY2VvcHRpb25DYWxsAAAACgAAAAZBbW91bnQAAAAPT3B0aW9uQ291bnRlcklEAAAAB1VzZXJfSUQAAAAMVXNlcl9BZGRyZXNzAAAABVByaWNlAAAAC0NhbGxfTGltaXRzAAAAClB1dF9MaW1pdHMAAAANT3JhY2xlX1N0YXR1cwAAABVTdGFydF9PcmRlcl9UaW1lc3RhbXAAAAATRW5kX09yZGVyX1RpbWVzdGFtcAQAAAANY2FsbGVyYWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAA1pZkJsYWNrbGlzdGVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAARYWRkcl9CTEFDS0xJU1RFRF8FAAAADFVzZXJfQWRkcmVzcwQAAAAIcmVhZF9UUEwJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABZwb29sX2xpcXVpZGl0eV9hZGRyZXNzAgAAABRUb3RhbF9Qb29sX0xpcXVpZGl0eQIAAAAkTm8gSW5pdGlhbCBQb29sIExpcXVpZGl0eSB3YXMgRm91bmQuBAAAAA9yZWFkX3VzZXJfZnVuZHMJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQfAAAAAQkAASwAAAACCQABLAAAAAIFAAAAC0N1cnJlbmN5X0lEAgAAAAFfBQAAAAxVc2VyX0FkZHJlc3MAAAAAAAAAAAAEAAAAEXVwZGF0ZV91c2VyX2Z1bmRzCQAAZQAAAAIJAABlAAAAAgUAAAAPcmVhZF91c2VyX2Z1bmRzBQAAAAZBbW91bnQFAAAAC25ldHdvcmtfZmVlBAAAABdyZWFkX3VzZXJfdm91Y2hlcl9mdW5kcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQABLAAAAAIFAAAADFVzZXJfQWRkcmVzcwIAAAAQX1ZvdWNoZXJfQmFsYW5jZQAAAAAAAAAAAAQAAAAbdXBkYXRlX3VzZXJfdm91Y2hlcl9iYWxhbmNlCQAAZQAAAAIJAABlAAAAAgUAAAAXcmVhZF91c2VyX3ZvdWNoZXJfZnVuZHMFAAAABkFtb3VudAUAAAALbmV0d29ya19mZWUEAAAAIXJlYWRfc3RhcnRfb3JkZXJfcGVybWl0X3RpbWVzdGFtcAUAAAAVU3RhcnRfT3JkZXJfVGltZXN0YW1wBAAAAB9yZWFkX2VuZF9vcmRlcl9wZXJtaXRfdGltZXN0YW1wBQAAABNFbmRfT3JkZXJfVGltZXN0YW1wBAAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAUAAAAPT3B0aW9uQ291bnRlcklEBAAAABJPcGlvbkV4cGlyZUNvdW50ZXIAAAAAAAAAAAEEAAAAFU9wdGlvbkV4cGlyZUNvdW50ZXJJRAkAAGQAAAACBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAUAAAAST3Bpb25FeHBpcmVDb3VudGVyBAAAABRQcmV2aW91c09wdGlvbk9yZGVycwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAABNUb3RhbF9PcHRpb25fT3JkZXJzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAEVRvdGFsT3B0aW9uT3JkZXJzCQAAZAAAAAIFAAAAFFByZXZpb3VzT3B0aW9uT3JkZXJzAAAAAAAAAAABBAAAACdQcmV2aW91c0Z1bmRzQWRkZWRJblNwZWNpZmljT3B0aW9uT3JkZXIEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAACJUb3RhbF9GdW5kc19BZGRlZF9Jbl9PcHRpb25fT3JkZXJfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAJFRvdGFsRnVuZHNBZGRlZEluU3BlY2lmaWNPcHRpb25PcmRlcgkAAGQAAAACBQAAACdQcmV2aW91c0Z1bmRzQWRkZWRJblNwZWNpZmljT3B0aW9uT3JkZXIFAAAABkFtb3VudAQAAAAlUHJldmlvdXNPcHRpb25PcmRlcnNpblNwZWNpZmljQ291bnRlcgQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAFFRvdGFsX09wdGlvbl9PcmRlcnNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAIlRvdGFsT3B0aW9uT3JkZXJzaW5TcGVjaWZpY0NvdW50ZXIJAABkAAAAAgUAAAAlUHJldmlvdXNPcHRpb25PcmRlcnNpblNwZWNpZmljQ291bnRlcgAAAAAAAAAAAQQAAAAMUHJldmlvdXNDYWxsBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMCAAAAC1RvdGFsX0NhbGxzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAACVRvdGFsQ2FsbAkAAGQAAAACBQAAAAxQcmV2aW91c0NhbGwAAAAAAAAAAAEEAAAAHVByZXZpb3VzQ2FsbGluU3BlY2lmaWNDb3VudGVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAMVG90YWxfQ2FsbHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAGlRvdGFsQ2FsbGluU3BlY2lmaWNDb3VudGVyCQAAZAAAAAIFAAAAHVByZXZpb3VzQ2FsbGluU3BlY2lmaWNDb3VudGVyAAAAAAAAAAABBAAAABBQcmV2aW91c1VzZXJDYWxsBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAMVXNlcl9BZGRyZXNzAgAAAAxfVG90YWxfQ2FsbHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAANVG90YWxVc2VyQ2FsbAkAAGQAAAACBQAAABBQcmV2aW91c1VzZXJDYWxsAAAAAAAAAAABBAAAACFQcmV2aW91c1VzZXJDYWxsaW5TcGVjaWZpY0NvdW50ZXIEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIFAAAADFVzZXJfQWRkcmVzcwIAAAANX1RvdGFsX0NhbGxzXwkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAB5Ub3RhbFVzZXJDYWxsaW5TcGVjaWZpY0NvdW50ZXIJAABkAAAAAgUAAAAhUHJldmlvdXNVc2VyQ2FsbGluU3BlY2lmaWNDb3VudGVyAAAAAAAAAAABBAAAAA1GdW5kc19hdF9yaXNrCQAAawAAAAMFAAAACHJlYWRfVFBMAAAAAAAAAAAFAAAAAAAAAABkAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAlVGhpcyBBZGRyZXNzIGlzIG5vdCBBdXRob3JpemVkLiBPbmx5IAkABCUAAAABBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwIAAAAiIGlzIEF1dGhvcml6ZWQgQWRkcmVzcyB0byBTaWduIGl0LgMJAAAAAAAAAgUAAAAUcmVhZF9zaHV0ZG93bl9zdGF0dXMAAAAAAAAAAAEJAAACAAAAAQIAAABbQ29udHJhY3QgU3RhdHVzIGlzIEN1cnJlbnRseSBTaHV0ZG93bi4gUGxlYXNlIFNpZ24gdGhlIEZ1bmN0aW9uIEluaXRpYXRlX0NvbnRyYWN0X1NodXRkb3duLgMJAABmAAAAAgUAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAAAIAAAABCQABLAAAAAIFAAAAFHByb2R1Y3RfbGF1bmNoX2Vycm9yCQABpAAAAAEFAAAAGHByb2R1Y3RfbGF1bmNoX3RpbWVzdGFtcAMJAAAAAAAAAgUAAAANT3JhY2xlX1N0YXR1cwIAAAAFQ0xPU0UJAAACAAAAAQUAAAASY2xvc2VkX29yYWNsZV9lcm9yAwkAAAAAAAACBQAAAA1pZkJsYWNrbGlzdGVkAgAAAANZZXMJAAACAAAAAQkAASwAAAACBQAAAAxVc2VyX0FkZHJlc3MCAAAAPiBBZGRyZXNzIGlzIEJsYWNrbGlzdGVkLiBQbGVhc2UgY29udGFjdCBBZG1pbiB0byBXaGl0ZWxpc3QgaXQuAwkAAGcAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAAfcmVhZF9lbmRfb3JkZXJfcGVybWl0X3RpbWVzdGFtcAkAAAIAAAABAgAAAEdPcHRpb24gT3JkZXIgcGxhY2luZyBUaW1pbmcgTGltaXRzIGFyZSBPdmVyLiBQbGVhc2UgSm9pbiBpbiBOZXh0IEN5Y2xlLgMJAABmAAAAAgUAAAAkVG90YWxGdW5kc0FkZGVkSW5TcGVjaWZpY09wdGlvbk9yZGVyBQAAAA1GdW5kc19hdF9yaXNrCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAABDTm8gbW9yZSBvcmRlcnMgYWNjZXB0ZWQsIE9wdGlvbiBIb3VzZSBSaXNrIFNpemUgaXMgb25seSBsaW1pdGVkIHRvIAkAAaQAAAABBQAAAA1GdW5kc19hdF9yaXNrAgAAABgsIFBlbmRpbmcgSG91c2UgUmlzayBpcyAJAAGkAAAAAQkAAGUAAAACBQAAAA1GdW5kc19hdF9yaXNrBQAAACdQcmV2aW91c0Z1bmRzQWRkZWRJblNwZWNpZmljT3B0aW9uT3JkZXICAAAAFS4gSm9pbiBpbiBuZXh0IEN5Y2xlLgMJAABmAAAAAgUAAAASbWluaW11bV9vcmRlcl9zaXplBQAAAAZBbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAIFBsYWNlZCBPcmRlciBTaXplIGlzIGxlc3MgdGhhbiBbCQABpAAAAAEFAAAAEm1pbmltdW1fb3JkZXJfc2l6ZQIAAAANLzEwXjhdIFdBVkVTLgMJAABmAAAAAgUAAAAGQW1vdW50BQAAABJtYXhpbXVtX29yZGVyX3NpemUJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAIFBsYWNlZCBPcmRlciBTaXplIGlzIG1vcmUgdGhhbiBbCQABpAAAAAEFAAAAEm1heGltdW1fb3JkZXJfc2l6ZQIAAAANLzEwXjhdIFdBVkVTLgMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAD3JlYWRfdXNlcl9mdW5kcwkAAAAAAAACAAAAAAAAAAAABQAAABdyZWFkX3VzZXJfdm91Y2hlcl9mdW5kcwcJAAACAAAAAQIAAABOTm8gRnVuZHMgQXZhaWxhYmxlIGluIFZvdWNoZXIgYXMgd2VsbCBpbiBVc2VyIEJhbGFuY2UuIFBsZWFzZSBEZXBvc2l0IHRvIFBsYXkuAwkAAGYAAAACAAAAAAAAAAAABQAAABF1cGRhdGVfdXNlcl9mdW5kcwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAABYUGxhY2VkIE9yZGVyIEFtb3VudCBpcyBnb2luZyBuZWdhdGl2ZS4gUGxlYXNlIHJlZHVjZSB0aGUgT3JkZXIgU2l6ZS5Vc2VyIEZ1bmQgQW1vdW50ID0gWwkAAaQAAAABBQAAABF1cGRhdGVfdXNlcl9mdW5kcwIAAAABXQMJAQAAAAIhPQAAAAIJAAExAAAAAQkAAaQAAAABBQAAABVTdGFydF9PcmRlcl9UaW1lc3RhbXAAAAAAAAAAAA0JAAACAAAAAQIAAABvU3RhcnQgVGltZXN0YW1wIGlzIFdyb25nLiBQbGVhc2UgRW50ZXIgYSBWYWxpZCBUaW1lc3RhbXAuIFByb2JhYmx5IHlvdSBlbnRlcmVkIGFuIFRpbWVzdGFtcCBsZXNzIHRoYW4gMTMgQ2hhcnMuAwkBAAAAAiE9AAAAAgkAATEAAAABCQABpAAAAAEFAAAAE0VuZF9PcmRlcl9UaW1lc3RhbXAAAAAAAAAAAA0JAAACAAAAAQIAAABtRW5kIFRpbWVzdGFtcCBpcyBXcm9uZy4gUGxlYXNlIEVudGVyIGEgVmFsaWQgVGltZXN0YW1wLiBQcm9iYWJseSB5b3UgZW50ZXJlZCBhbiBUaW1lc3RhbXAgbGVzcyB0aGFuIDEzIENoYXJzLgMDCQAAAAAAAAIFAAAAF3JlYWRfdXNlcl92b3VjaGVyX2Z1bmRzAAAAAAAAAAAABgkAAGYAAAACAAAAAAAAAAAABQAAABt1cGRhdGVfdXNlcl92b3VjaGVyX2JhbGFuY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAAAhVc2VyX0lEXwUAAAAMVXNlcl9BZGRyZXNzBQAAAAdVc2VyX0lECQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAALQ3VycmVuY3lfSUQCAAAAAV8FAAAADFVzZXJfQWRkcmVzcwUAAAARdXBkYXRlX3VzZXJfZnVuZHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGk5ldHdvcmtfRmVlX1RvX1BsYWNlX09yZGVyBQAAAAtuZXR3b3JrX2ZlZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAVDYWxsXwUAAAAMVXNlcl9BZGRyZXNzAgAAAAFfCQABpAAAAAEFAAAADVRvdGFsVXNlckNhbGwJAAGkAAAAAQUAAAAFUHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbGxfQW1vdW50XwUAAAAMVXNlcl9BZGRyZXNzAgAAAAFfCQABpAAAAAEFAAAADVRvdGFsVXNlckNhbGwFAAAABkFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA9DYWxsX1N0YXJ0X0VuZF8FAAAADFVzZXJfQWRkcmVzcwIAAAABXwkAAaQAAAABBQAAAA1Ub3RhbFVzZXJDYWxsCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAIAAAABXwkAAaQAAAABBQAAABVPcHRpb25FeHBpcmVDb3VudGVySUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAE1RvdGFsX09wdGlvbl9PcmRlcnMFAAAAEVRvdGFsT3B0aW9uT3JkZXJzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAIlRvdGFsX0Z1bmRzX0FkZGVkX0luX09wdGlvbl9PcmRlcl8JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAJFRvdGFsRnVuZHNBZGRlZEluU3BlY2lmaWNPcHRpb25PcmRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAUVG90YWxfUG9vbF9MaXF1aWRpdHkFAAAACHJlYWRfVFBMCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAADkZ1bmRzX0F0X1Jpc2tfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAAA1GdW5kc19hdF9yaXNrCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAtDYWxsX0xpbWl0cwUAAAALQ2FsbF9MaW1pdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAClB1dF9MaW1pdHMFAAAAClB1dF9MaW1pdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAUVG90YWxfT3B0aW9uX09yZGVyc18JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAIlRvdGFsT3B0aW9uT3JkZXJzaW5TcGVjaWZpY0NvdW50ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAC1RvdGFsX0NhbGxzBQAAAAlUb3RhbENhbGwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAMVG90YWxfQ2FsbHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAABpUb3RhbENhbGxpblNwZWNpZmljQ291bnRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAxVc2VyX0FkZHJlc3MCAAAADF9Ub3RhbF9DYWxscwUAAAANVG90YWxVc2VyQ2FsbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAADFVzZXJfQWRkcmVzcwIAAAANX1RvdGFsX0NhbGxzXwkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAUAAAAeVG90YWxVc2VyQ2FsbGluU3BlY2lmaWNDb3VudGVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEXdoaXRlbGlzdF9hZGRyZXNzBQAAAAtuZXR3b3JrX2ZlZQUAAAAEdW5pdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABZwb29sX2xpcXVpZGl0eV9hZGRyZXNzBQAAAAZBbW91bnQFAAAABHVuaXQFAAAAA25pbAMJAABmAAAAAgUAAAAbdXBkYXRlX3VzZXJfdm91Y2hlcl9iYWxhbmNlBQAAABdyZWFkX3VzZXJfdm91Y2hlcl9mdW5kcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAICAAAACFVzZXJfSURfBQAAAAxVc2VyX0FkZHJlc3MFAAAAB1VzZXJfSUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAMVXNlcl9BZGRyZXNzAgAAABBfVm91Y2hlcl9CYWxhbmNlBQAAABt1cGRhdGVfdXNlcl92b3VjaGVyX2JhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGk5ldHdvcmtfRmVlX1RvX1BsYWNlX09yZGVyBQAAAAtuZXR3b3JrX2ZlZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAVDYWxsXwUAAAAMVXNlcl9BZGRyZXNzAgAAAAFfCQABpAAAAAEFAAAADVRvdGFsVXNlckNhbGwJAAGkAAAAAQUAAAAFUHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADENhbGxfQW1vdW50XwUAAAAMVXNlcl9BZGRyZXNzAgAAAAFfCQABpAAAAAEFAAAADVRvdGFsVXNlckNhbGwFAAAABkFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA9DYWxsX1N0YXJ0X0VuZF8FAAAADFVzZXJfQWRkcmVzcwIAAAABXwkAAaQAAAABBQAAAA1Ub3RhbFVzZXJDYWxsCQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAIAAAABXwkAAaQAAAABBQAAABVPcHRpb25FeHBpcmVDb3VudGVySUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAE1RvdGFsX09wdGlvbl9PcmRlcnMFAAAAEVRvdGFsT3B0aW9uT3JkZXJzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAIlRvdGFsX0Z1bmRzX0FkZGVkX0luX09wdGlvbl9PcmRlcl8JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAJFRvdGFsRnVuZHNBZGRlZEluU3BlY2lmaWNPcHRpb25PcmRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAUVG90YWxfUG9vbF9MaXF1aWRpdHkFAAAACHJlYWRfVFBMCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAADkZ1bmRzX0F0X1Jpc2tfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAAA1GdW5kc19hdF9yaXNrCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAtDYWxsX0xpbWl0cwUAAAALQ2FsbF9MaW1pdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAClB1dF9MaW1pdHMFAAAAClB1dF9MaW1pdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAUVG90YWxfT3B0aW9uX09yZGVyc18JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAIlRvdGFsT3B0aW9uT3JkZXJzaW5TcGVjaWZpY0NvdW50ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAC1RvdGFsX0NhbGxzBQAAAAlUb3RhbENhbGwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAMVG90YWxfQ2FsbHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAABpUb3RhbENhbGxpblNwZWNpZmljQ291bnRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAxVc2VyX0FkZHJlc3MCAAAADF9Ub3RhbF9DYWxscwUAAAANVG90YWxVc2VyQ2FsbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAADFVzZXJfQWRkcmVzcwIAAAANX1RvdGFsX0NhbGxzXwkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAUAAAAeVG90YWxVc2VyQ2FsbGluU3BlY2lmaWNDb3VudGVyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEXdoaXRlbGlzdF9hZGRyZXNzBQAAAAtuZXR3b3JrX2ZlZQUAAAAEdW5pdAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAABZwb29sX2xpcXVpZGl0eV9hZGRyZXNzBQAAAAZBbW91bnQFAAAABHVuaXQFAAAAA25pbAkAAAIAAAABAgAAAAxXcm9uZyBFbnRyeS4AAAABaQEAAAAOcGxhY2VvcHRpb25QdXQAAAAKAAAABkFtb3VudAAAAA9PcHRpb25Db3VudGVySUQAAAAHVXNlcl9JRAAAAAxVc2VyX0FkZHJlc3MAAAAFUHJpY2UAAAALQ2FsbF9MaW1pdHMAAAAKUHV0X0xpbWl0cwAAAA1PcmFjbGVfU3RhdHVzAAAAFVN0YXJ0X09yZGVyX1RpbWVzdGFtcAAAABNFbmRfT3JkZXJfVGltZXN0YW1wBAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAADWlmQmxhY2tsaXN0ZWQJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABFhZGRyX0JMQUNLTElTVEVEXwUAAAAMVXNlcl9BZGRyZXNzBAAAAAhyZWFkX1RQTAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAFnBvb2xfbGlxdWlkaXR5X2FkZHJlc3MCAAAAFFRvdGFsX1Bvb2xfTGlxdWlkaXR5AgAAACRObyBJbml0aWFsIFBvb2wgTGlxdWlkaXR5IHdhcyBGb3VuZC4EAAAAD3JlYWRfdXNlcl9mdW5kcwkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQABLAAAAAIJAAEsAAAAAgUAAAALQ3VycmVuY3lfSUQCAAAAAV8FAAAADFVzZXJfQWRkcmVzcwAAAAAAAAAAAAQAAAARdXBkYXRlX3VzZXJfZnVuZHMJAABlAAAAAgkAAGUAAAACBQAAAA9yZWFkX3VzZXJfZnVuZHMFAAAABkFtb3VudAUAAAALbmV0d29ya19mZWUEAAAAF3JlYWRfdXNlcl92b3VjaGVyX2Z1bmRzCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAAEsAAAAAgUAAAAMVXNlcl9BZGRyZXNzAgAAABBfVm91Y2hlcl9CYWxhbmNlAAAAAAAAAAAABAAAABt1cGRhdGVfdXNlcl92b3VjaGVyX2JhbGFuY2UJAABlAAAAAgUAAAAXcmVhZF91c2VyX3ZvdWNoZXJfZnVuZHMFAAAABkFtb3VudAQAAAAhcmVhZF9zdGFydF9vcmRlcl9wZXJtaXRfdGltZXN0YW1wBQAAABVTdGFydF9PcmRlcl9UaW1lc3RhbXAEAAAAH3JlYWRfZW5kX29yZGVyX3Blcm1pdF90aW1lc3RhbXAFAAAAE0VuZF9PcmRlcl9UaW1lc3RhbXAEAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAAA9PcHRpb25Db3VudGVySUQEAAAAEk9waW9uRXhwaXJlQ291bnRlcgAAAAAAAAAAAQQAAAAVT3B0aW9uRXhwaXJlQ291bnRlcklECQAAZAAAAAIFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAABJPcGlvbkV4cGlyZUNvdW50ZXIEAAAAFFByZXZpb3VzT3B0aW9uT3JkZXJzBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMCAAAAE1RvdGFsX09wdGlvbl9PcmRlcnMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAARVG90YWxPcHRpb25PcmRlcnMJAABkAAAAAgUAAAAUUHJldmlvdXNPcHRpb25PcmRlcnMAAAAAAAAAAAEEAAAAJ1ByZXZpb3VzRnVuZHNBZGRlZEluU3BlY2lmaWNPcHRpb25PcmRlcgQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAIlRvdGFsX0Z1bmRzX0FkZGVkX0luX09wdGlvbl9PcmRlcl8JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAkVG90YWxGdW5kc0FkZGVkSW5TcGVjaWZpY09wdGlvbk9yZGVyCQAAZAAAAAIFAAAAJ1ByZXZpb3VzRnVuZHNBZGRlZEluU3BlY2lmaWNPcHRpb25PcmRlcgUAAAAGQW1vdW50BAAAACVQcmV2aW91c09wdGlvbk9yZGVyc2luU3BlY2lmaWNDb3VudGVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAUVG90YWxfT3B0aW9uX09yZGVyc18JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAiVG90YWxPcHRpb25PcmRlcnNpblNwZWNpZmljQ291bnRlcgkAAGQAAAACBQAAACVQcmV2aW91c09wdGlvbk9yZGVyc2luU3BlY2lmaWNDb3VudGVyAAAAAAAAAAABBAAAAAtQcmV2aW91c1B1dAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAAApUb3RhbF9QdXRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAACFRvdGFsUHV0CQAAZAAAAAIFAAAAC1ByZXZpb3VzUHV0AAAAAAAAAAABBAAAABxQcmV2aW91c1B1dGluU3BlY2lmaWNDb3VudGVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAALVG90YWxfUHV0c18JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAZVG90YWxQdXRpblNwZWNpZmljQ291bnRlcgkAAGQAAAACBQAAABxQcmV2aW91c1B1dGluU3BlY2lmaWNDb3VudGVyAAAAAAAAAAABBAAAAA9QcmV2aW91c1VzZXJQdXQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAxVc2VyX0FkZHJlc3MCAAAAC19Ub3RhbF9QdXRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAADFRvdGFsVXNlclB1dAkAAGQAAAACBQAAAA9QcmV2aW91c1VzZXJQdXQAAAAAAAAAAAEEAAAAIFByZXZpb3VzVXNlclB1dGluU3BlY2lmaWNDb3VudGVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACBQAAAAxVc2VyX0FkZHJlc3MCAAAADF9Ub3RhbF9QdXRzXwkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAB1Ub3RhbFVzZXJQdXRpblNwZWNpZmljQ291bnRlcgkAAGQAAAACBQAAACBQcmV2aW91c1VzZXJQdXRpblNwZWNpZmljQ291bnRlcgAAAAAAAAAAAQQAAAANRnVuZHNfYXRfcmlzawkAAGsAAAADBQAAAAhyZWFkX1RQTAAAAAAAAAAABQAAAAAAAAAAZAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAARd2hpdGVsaXN0X2FkZHJlc3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAJVRoaXMgQWRkcmVzcyBpcyBub3QgQXV0aG9yaXplZC4gT25seSAJAAQlAAAAAQUAAAARd2hpdGVsaXN0X2FkZHJlc3MCAAAAIiBpcyBBdXRob3JpemVkIEFkZHJlc3MgdG8gU2lnbiBpdC4DCQAAAAAAAAIFAAAAFHJlYWRfc2h1dGRvd25fc3RhdHVzAAAAAAAAAAABCQAAAgAAAAECAAAAW0NvbnRyYWN0IFN0YXR1cyBpcyBDdXJyZW50bHkgU2h1dGRvd24uIFBsZWFzZSBTaWduIHRoZSBGdW5jdGlvbiBJbml0aWF0ZV9Db250cmFjdF9TaHV0ZG93bi4DCQAAZgAAAAIFAAAAGHByb2R1Y3RfbGF1bmNoX3RpbWVzdGFtcAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAAACAAAAAQkAASwAAAACBQAAABRwcm9kdWN0X2xhdW5jaF9lcnJvcgkAAaQAAAABBQAAABhwcm9kdWN0X2xhdW5jaF90aW1lc3RhbXADCQAAAAAAAAIFAAAADU9yYWNsZV9TdGF0dXMCAAAABUNMT1NFCQAAAgAAAAEFAAAAEmNsb3NlZF9vcmFjbGVfZXJvcgMJAAAAAAAAAgUAAAANaWZCbGFja2xpc3RlZAIAAAADWWVzCQAAAgAAAAEJAAEsAAAAAgUAAAAMVXNlcl9BZGRyZXNzAgAAAD4gQWRkcmVzcyBpcyBCbGFja2xpc3RlZC4gUGxlYXNlIGNvbnRhY3QgQWRtaW4gdG8gV2hpdGVsaXN0IGl0LgMJAABnAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAAH3JlYWRfZW5kX29yZGVyX3Blcm1pdF90aW1lc3RhbXAJAAACAAAAAQIAAABHT3B0aW9uIE9yZGVyIHBsYWNpbmcgVGltaW5nIExpbWl0cyBhcmUgT3Zlci4gUGxlYXNlIEpvaW4gaW4gTmV4dCBDeWNsZS4DCQAAZgAAAAIFAAAAJFRvdGFsRnVuZHNBZGRlZEluU3BlY2lmaWNPcHRpb25PcmRlcgUAAAANRnVuZHNfYXRfcmlzawkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAQ05vIG1vcmUgb3JkZXJzIGFjY2VwdGVkLCBPcHRpb24gSG91c2UgUmlzayBTaXplIGlzIG9ubHkgbGltaXRlZCB0byAJAAGkAAAAAQUAAAANRnVuZHNfYXRfcmlzawIAAAAYLCBQZW5kaW5nIEhvdXNlIFJpc2sgaXMgCQABpAAAAAEJAABlAAAAAgUAAAANRnVuZHNfYXRfcmlzawUAAAAnUHJldmlvdXNGdW5kc0FkZGVkSW5TcGVjaWZpY09wdGlvbk9yZGVyAgAAABUuIEpvaW4gaW4gbmV4dCBDeWNsZS4DCQAAZgAAAAIFAAAAEm1pbmltdW1fb3JkZXJfc2l6ZQUAAAAGQW1vdW50CQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACBQbGFjZWQgT3JkZXIgU2l6ZSBpcyBsZXNzIHRoYW4gWwkAAaQAAAABBQAAABJtaW5pbXVtX29yZGVyX3NpemUCAAAADS8xMF44XSBXQVZFUy4DCQAAZgAAAAIFAAAABkFtb3VudAUAAAASbWF4aW11bV9vcmRlcl9zaXplCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACBQbGFjZWQgT3JkZXIgU2l6ZSBpcyBtb3JlIHRoYW4gWwkAAaQAAAABBQAAABJtYXhpbXVtX29yZGVyX3NpemUCAAAADS8xMF44XSBXQVZFUy4DCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXVwZGF0ZV91c2VyX2Z1bmRzCQAAAgAAAAEJAAEsAAAAAgIAAABcUGxhY2VkIE9yZGVyIEFtb3VudCBpcyBnb2luZyBuZWdhdGl2ZS4gUGxlYXNlIHJlZHVjZSB0aGUgT3JkZXIgU2l6ZS4gTmVnYXRpdmUgRnVuZCBBbW91bnQgPSAJAAGkAAAAAQUAAAARdXBkYXRlX3VzZXJfZnVuZHMDCQEAAAACIT0AAAACCQABMQAAAAEJAAGkAAAAAQUAAAAVU3RhcnRfT3JkZXJfVGltZXN0YW1wAAAAAAAAAAANCQAAAgAAAAECAAAAb1N0YXJ0IFRpbWVzdGFtcCBpcyBXcm9uZy4gUGxlYXNlIEVudGVyIGEgVmFsaWQgVGltZXN0YW1wLiBQcm9iYWJseSB5b3UgZW50ZXJlZCBhbiBUaW1lc3RhbXAgbGVzcyB0aGFuIDEzIENoYXJzLgMJAQAAAAIhPQAAAAIJAAExAAAAAQkAAaQAAAABBQAAABNFbmRfT3JkZXJfVGltZXN0YW1wAAAAAAAAAAANCQAAAgAAAAECAAAAbUVuZCBUaW1lc3RhbXAgaXMgV3JvbmcuIFBsZWFzZSBFbnRlciBhIFZhbGlkIFRpbWVzdGFtcC4gUHJvYmFibHkgeW91IGVudGVyZWQgYW4gVGltZXN0YW1wIGxlc3MgdGhhbiAxMyBDaGFycy4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAAAhVc2VyX0lEXwUAAAAMVXNlcl9BZGRyZXNzBQAAAAdVc2VyX0lECQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAALQ3VycmVuY3lfSUQCAAAAAV8FAAAADFVzZXJfQWRkcmVzcwUAAAARdXBkYXRlX3VzZXJfZnVuZHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgUAAAAMVXNlcl9BZGRyZXNzAgAAABBfVm91Y2hlcl9CYWxhbmNlBQAAABt1cGRhdGVfdXNlcl92b3VjaGVyX2JhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGk5ldHdvcmtfRmVlX1RvX1BsYWNlX09yZGVyBQAAAAtuZXR3b3JrX2ZlZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARQdXRfBQAAAAxVc2VyX0FkZHJlc3MCAAAAAV8JAAGkAAAAAQUAAAAMVG90YWxVc2VyUHV0CQABpAAAAAEFAAAABVByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAtQdXRfQW1vdW50XwUAAAAMVXNlcl9BZGRyZXNzAgAAAAFfCQABpAAAAAEFAAAADFRvdGFsVXNlclB1dAUAAAAGQW1vdW50CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAADlB1dF9TdGFydF9FbmRfBQAAAAxVc2VyX0FkZHJlc3MCAAAAAV8JAAGkAAAAAQUAAAAMVG90YWxVc2VyUHV0CQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAIAAAABXwkAAaQAAAABBQAAABVPcHRpb25FeHBpcmVDb3VudGVySUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAE1RvdGFsX09wdGlvbl9PcmRlcnMFAAAAEVRvdGFsT3B0aW9uT3JkZXJzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAIlRvdGFsX0Z1bmRzX0FkZGVkX0luX09wdGlvbl9PcmRlcl8JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAJFRvdGFsRnVuZHNBZGRlZEluU3BlY2lmaWNPcHRpb25PcmRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAUVG90YWxfUG9vbF9MaXF1aWRpdHkFAAAACHJlYWRfVFBMCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAADkZ1bmRzX0F0X1Jpc2tfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAAA1GdW5kc19hdF9yaXNrCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAtDYWxsX0xpbWl0cwUAAAALQ2FsbF9MaW1pdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAClB1dF9MaW1pdHMFAAAAClB1dF9MaW1pdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAUVG90YWxfT3B0aW9uX09yZGVyc18JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAIlRvdGFsT3B0aW9uT3JkZXJzaW5TcGVjaWZpY0NvdW50ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAClRvdGFsX1B1dHMFAAAACFRvdGFsUHV0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAC1RvdGFsX1B1dHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAABlUb3RhbFB1dGluU3BlY2lmaWNDb3VudGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIFAAAADFVzZXJfQWRkcmVzcwIAAAALX1RvdGFsX1B1dHMFAAAADFRvdGFsVXNlclB1dAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAADFVzZXJfQWRkcmVzcwIAAAAMX1RvdGFsX1B1dHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAAB1Ub3RhbFVzZXJQdXRpblNwZWNpZmljQ291bnRlcgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwUAAAALbmV0d29ya19mZWUFAAAABHVuaXQJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAWcG9vbF9saXF1aWRpdHlfYWRkcmVzcwUAAAAGQW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAXRmlsbF9Wb3VjaGVyc19MaXF1aWRpdHkAAAAABAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAA3BtdAMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAAElObyBwYXltZW50IGF0dGFjaGVkLCBQbGVhc2UgQXR0YWNoIG9ubHkgV2hpdGVsaXN0ZWQgVG9rZW5zIGluIHBheW1lbnRbMV0uBAAAABdQcmV2aW91c1ZvdWNoZXJzQmFsYW5jZQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAABpBdmFpbGFibGVfVm91Y2hlcnNfQmFsYW5jZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABRUb3RhbFZvdWNoZXJzQmFsYW5jZQkAAGQAAAACBQAAABdQcmV2aW91c1ZvdWNoZXJzQmFsYW5jZQgFAAAAA3BtdAAAAAZhbW91bnQEAAAAGVByZXZpb3VzVm91Y2hlcnNDb3VudGVySUQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwIAAAATVm91Y2hlcnNfQ291bnRlcl9JRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABZUb3RhbFZvdWNoZXJzQ291bnRlcklECQAAZAAAAAIFAAAAGVByZXZpb3VzVm91Y2hlcnNDb3VudGVySUQAAAAAAAAAAAEDCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAALk9ubHkgV0FWRVMgaXMgYWxsb3dlZCB0byBkZXBvc2l0IGF0IHRoZSBtb21lbnQDCQAAAAAAAAIFAAAAFHJlYWRfc2h1dGRvd25fc3RhdHVzAAAAAAAAAAABCQAAAgAAAAECAAAAW0NvbnRyYWN0IFN0YXR1cyBpcyBDdXJyZW50bHkgU2h1dGRvd24uIFBsZWFzZSBTaWduIHRoZSBGdW5jdGlvbiBJbml0aWF0ZV9Db250cmFjdF9TaHV0ZG93bi4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAGkF2YWlsYWJsZV9Wb3VjaGVyc19CYWxhbmNlBQAAABRUb3RhbFZvdWNoZXJzQmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABpAAAAAEFAAAAFlRvdGFsVm91Y2hlcnNDb3VudGVySUQCAAAAFV9Wb3VjaGVyX0FkZGVkX0Ftb3VudAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAE1ZvdWNoZXJzX0NvdW50ZXJfSUQFAAAAFlRvdGFsVm91Y2hlcnNDb3VudGVySUQFAAAAA25pbAAAAAFpAQAAAA5Jc3N1ZV9Wb3VjaGVycwAAAAMAAAAOVm91Y2hlcl9BbW91bnQAAAAHVXNlcl9JRAAAAAxVc2VyX0FkZHJlc3MEAAAAGXJlYWRfVG90YWxWb3VjaGVyc0JhbGFuY2UJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABBoAAAACBQAAAAR0aGlzAgAAABpBdmFpbGFibGVfVm91Y2hlcnNfQmFsYW5jZQIAAABfQXZhaWxhYmxlX1ZvdWNoZXJzX0JhbGFuY2UgRW50cnkgaXMgbm90IEZvdW5kLiBJbml0aWF0ZSBGaWxsX1ZvdWNoZXJzX0xpcXVpZGl0eSBGdW5jdGlvbiBmaXJzdC4EAAAAG3VwZGF0ZV9Ub3RhbFZvdWNoZXJzQmFsYW5jZQkAAGUAAAACBQAAABlyZWFkX1RvdGFsVm91Y2hlcnNCYWxhbmNlBQAAAA5Wb3VjaGVyX0Ftb3VudAQAAAAUVm91Y2hlcnNJc3N1ZWRUb1VzZXIEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABlUb3RhbF9Wb3VjaGVyc19Jc3N1ZWRfVG9fBQAAAAxVc2VyX0FkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAZVG90YWxWb3VjaGVyc0lzc3VlZFRvVXNlcgkAAGQAAAACBQAAABRWb3VjaGVyc0lzc3VlZFRvVXNlcgAAAAAAAAAAAQQAAAAaVm91Y2hlcnNBbW91bnRJc3N1ZWRUb1VzZXIEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAACBUb3RhbF9Wb3VjaGVyc19BbW91bnRfSXNzdWVkX1RvXwUAAAAMVXNlcl9BZGRyZXNzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAH1RvdGFsVm91Y2hlcnNBbW91bnRJc3N1ZWRUb1VzZXIJAABkAAAAAgUAAAAaVm91Y2hlcnNBbW91bnRJc3N1ZWRUb1VzZXIFAAAADlZvdWNoZXJfQW1vdW50BAAAAB1QcmV2aW91c1ZvdWNoZXJzQmFsYW5jZW9mVXNlcgQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIFAAAADFVzZXJfQWRkcmVzcwIAAAAQX1ZvdWNoZXJfQmFsYW5jZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABpUb3RhbFZvdWNoZXJzQmFsYW5jZW9mVXNlcgkAAGQAAAACBQAAAB1QcmV2aW91c1ZvdWNoZXJzQmFsYW5jZW9mVXNlcgUAAAAOVm91Y2hlcl9BbW91bnQDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAAEXdoaXRlbGlzdF9hZGRyZXNzCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACVUaGlzIEFkZHJlc3MgaXMgbm90IEF1dGhvcml6ZWQuIE9ubHkgCQAEJQAAAAEFAAAAEXdoaXRlbGlzdF9hZGRyZXNzAgAAACIgaXMgQXV0aG9yaXplZCBBZGRyZXNzIHRvIFNpZ24gaXQuAwkAAAAAAAACBQAAABRyZWFkX3NodXRkb3duX3N0YXR1cwAAAAAAAAAAAQkAAAIAAAABAgAAAFtDb250cmFjdCBTdGF0dXMgaXMgQ3VycmVudGx5IFNodXRkb3duLiBQbGVhc2UgU2lnbiB0aGUgRnVuY3Rpb24gSW5pdGlhdGVfQ29udHJhY3RfU2h1dGRvd24uAwkAAGcAAAACAAAAAAAAAAAABQAAAA5Wb3VjaGVyX0Ftb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAABnVm91Y2hlciBCYWxhbmNlIGNhbid0IGJlIDAgb3IgZ28gaW4gbmVnYXRpdmUgU3RhdGUuIEluY3JlYXNlIHRoZSBWb3VjaGVyIEFtb3VudCB3aGVyZSBtYXhpbXVtIGxpbWl0IGlzIAkAAaQAAAABBQAAABRtYXhpbXVtX3ZvdWNoZXJfc2l6ZQIAAAAMLzEwXjggV2F2ZXMuAwkAAGcAAAACAAAAAAAAAAAABQAAABt1cGRhdGVfVG90YWxWb3VjaGVyc0JhbGFuY2UJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAANlVwZGF0ZWQgVm91Y2hlciBCYWxhbmNlIGNhbid0IGdvIGluIG5lZ2F0aXZlIFN0YXRlIG9mIAkAAaQAAAABBQAAABt1cGRhdGVfVG90YWxWb3VjaGVyc0JhbGFuY2UCAAAAKCAvMTBeOCBXQVZFUy4gUmVkdWNlIHRoZSBWb3VjaGVyIEFtb3VudC4DCQAAZgAAAAIFAAAADlZvdWNoZXJfQW1vdW50BQAAABRtYXhpbXVtX3ZvdWNoZXJfc2l6ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAA8SW5wdXQgVm91Y2hlciBCYWxhbmNlIGNhbid0IGV4Y2VlZCB0aGUgc2V0IG1heGltdW0gbGltaXQgb2YgCQABpAAAAAEFAAAAFG1heGltdW1fdm91Y2hlcl9zaXplAgAAAAwvMTBeOCBXYXZlcy4DCQAAZgAAAAIFAAAAGlRvdGFsVm91Y2hlcnNCYWxhbmNlb2ZVc2VyBQAAABRtYXhpbXVtX3ZvdWNoZXJfc2l6ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAxVc2VyX0FkZHJlc3MCAAAAKyBWb3VjaGVyIEJhbGFuY2UgaXMgZXhjZWVkaW5nIHRoZSBsaW1pdCBvZiAJAAGkAAAAAQUAAAAUbWF4aW11bV92b3VjaGVyX3NpemUCAAAADC8xMF44IFdhdmVzLgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAABlUb3RhbF9Wb3VjaGVyc19Jc3N1ZWRfVG9fBQAAAAxVc2VyX0FkZHJlc3MFAAAAGVRvdGFsVm91Y2hlcnNJc3N1ZWRUb1VzZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAgVG90YWxfVm91Y2hlcnNfQW1vdW50X0lzc3VlZF9Ub18FAAAADFVzZXJfQWRkcmVzcwUAAAAfVG90YWxWb3VjaGVyc0Ftb3VudElzc3VlZFRvVXNlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAAxVc2VyX0FkZHJlc3MCAAAAEF9Wb3VjaGVyX0JhbGFuY2UFAAAAGlRvdGFsVm91Y2hlcnNCYWxhbmNlb2ZVc2VyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABpBdmFpbGFibGVfVm91Y2hlcnNfQmFsYW5jZQUAAAAbdXBkYXRlX1RvdGFsVm91Y2hlcnNCYWxhbmNlBQAAAANuaWwAAAABaQEAAAAQRGVwb3NpdFVzZXJGdW5kcwAAAAAEAAAADWNhbGxlcmFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAADcG10AwkAAAAAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAECAAAASU5vIHBheW1lbnQgYXR0YWNoZWQsIFBsZWFzZSBBdHRhY2ggb25seSBXaGl0ZWxpc3RlZCBUb2tlbnMgaW4gcGF5bWVudFsxXS4EAAAADWlmQmxhY2tsaXN0ZWQJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABFhZGRyX0JMQUNLTElTVEVEXwUAAAANY2FsbGVyYWRkcmVzcwQAAAATUHJldmlvdXNVc2VyRGVwb3NpdAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgUAAAALQ3VycmVuY3lfSUQCAAAAAV8FAAAADWNhbGxlcmFkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAQVG90YWxVc2VyRGVwb3NpdAkAAGQAAAACBQAAABNQcmV2aW91c1VzZXJEZXBvc2l0CAUAAAADcG10AAAABmFtb3VudAQAAAAYUHJldmlvdXNEZXBvc2l0Q291bnRlcklEBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMCAAAAEkRlcG9zaXRfQ291bnRlcl9JRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVUb3RhbERlcG9zaXRDb3VudGVySUQJAABkAAAAAgUAAAAYUHJldmlvdXNEZXBvc2l0Q291bnRlcklEAAAAAAAAAAABAwkAAGYAAAACBQAAABhwcm9kdWN0X2xhdW5jaF90aW1lc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAAAgAAAAEJAAEsAAAAAgUAAAAUcHJvZHVjdF9sYXVuY2hfZXJyb3IJAAGkAAAAAQUAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wAwkAAAAAAAACBQAAABRyZWFkX3NodXRkb3duX3N0YXR1cwAAAAAAAAAAAQkAAAIAAAABAgAAAFtDb250cmFjdCBTdGF0dXMgaXMgQ3VycmVudGx5IFNodXRkb3duLiBQbGVhc2UgU2lnbiB0aGUgRnVuY3Rpb24gSW5pdGlhdGVfQ29udHJhY3RfU2h1dGRvd24uAwkAAAAAAAACBQAAAA1pZkJsYWNrbGlzdGVkAgAAAANZZXMJAAACAAAAAQkAASwAAAACBQAAAA1jYWxsZXJhZGRyZXNzAgAAAD4gQWRkcmVzcyBpcyBCbGFja2xpc3RlZC4gUGxlYXNlIGNvbnRhY3QgQWRtaW4gdG8gV2hpdGVsaXN0IGl0LgMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAuT25seSBXQVZFUyBpcyBhbGxvd2VkIHRvIGRlcG9zaXQgYXQgdGhlIG1vbWVudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAAC0N1cnJlbmN5X0lEAgAAAAFfBQAAAA1jYWxsZXJhZGRyZXNzBQAAABBUb3RhbFVzZXJEZXBvc2l0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAGkAAAAAQUAAAAVVG90YWxEZXBvc2l0Q291bnRlcklEAgAAAAFfBQAAAAtDdXJyZW5jeV9JRAIAAAABXwUAAAANY2FsbGVyYWRkcmVzcwgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEkRlcG9zaXRfQ291bnRlcl9JRAUAAAAVVG90YWxEZXBvc2l0Q291bnRlcklEBQAAAANuaWwAAAABaQEAAAARV2l0aGRyYXdVc2VyRnVuZHMAAAACAAAADFVzZXJfQWRkcmVzcwAAAAZBbW91bnQEAAAADWNhbGxlcmFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAPcmVhZHVzZXJiYWxhbmNlCQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABCQABLAAAAAIJAAEsAAAAAgUAAAALQ3VycmVuY3lfSUQCAAAAAV8FAAAADFVzZXJfQWRkcmVzcwQAAAARdXBkYXRlX3VzZXJfZnVuZHMJAABlAAAAAgkAAGUAAAACBQAAAA9yZWFkdXNlcmJhbGFuY2UFAAAABkFtb3VudAUAAAALbmV0d29ya19mZWUEAAAAF21pbmltaW1fd2l0aGRyYXdfYW1vdW50AAAAAAAAmJaAAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAlVGhpcyBBZGRyZXNzIGlzIG5vdCBBdXRob3JpemVkLiBPbmx5IAkABCUAAAABBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwIAAAAiIGlzIEF1dGhvcml6ZWQgQWRkcmVzcyB0byBTaWduIGl0LgMJAAAAAAAAAgUAAAAUcmVhZF9zaHV0ZG93bl9zdGF0dXMAAAAAAAAAAAEJAAACAAAAAQIAAABbQ29udHJhY3QgU3RhdHVzIGlzIEN1cnJlbnRseSBTaHV0ZG93bi4gUGxlYXNlIFNpZ24gdGhlIEZ1bmN0aW9uIEluaXRpYXRlX0NvbnRyYWN0X1NodXRkb3duLgMJAABmAAAAAgUAAAAXbWluaW1pbV93aXRoZHJhd19hbW91bnQFAAAABkFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAbTWluaW11bSBXaXRoZHJhdyBBbW91bnQgaXMgCQABpAAAAAEFAAAAF21pbmltaW1fd2l0aGRyYXdfYW1vdW50AgAAAA0vMTBeOF0gV0FWRVMuAwkAAGYAAAACAAAAAAAAAAAABQAAABF1cGRhdGVfdXNlcl9mdW5kcwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAA1UGxhY2VkIFdpdGhkcmF3IEFtb3VudCBpcyBnb2luZyBpbiBuZWdhdGl2ZSBTdGF0ZSBvZiAJAAGkAAAAAQUAAAARdXBkYXRlX3VzZXJfZnVuZHMCAAAADS8xMF44XSBXQVZFUy4JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEFByZXZpb3VzX0JhbGFuY2UFAAAAD3JlYWR1c2VyYmFsYW5jZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAXTmV0d29ya19GZWVfVG9fV2l0aGRyYXcFAAAAC25ldHdvcmtfZmVlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAALQ3VycmVuY3lfSUQCAAAAAV8FAAAADFVzZXJfQWRkcmVzcwUAAAARdXBkYXRlX3VzZXJfZnVuZHMJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAARd2hpdGVsaXN0X2FkZHJlc3MFAAAAC25ldHdvcmtfZmVlBQAAAAR1bml0CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADFVzZXJfQWRkcmVzcwUAAAAGQW1vdW50BQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAAQQmxhY2tMaXN0QWRkcmVzcwAAAAEAAAALVXNlckFkZHJlc3MEAAAADWlmQmxhY2tsaXN0ZWQJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABFhZGRyX0JMQUNLTElTVEVEXwUAAAALVXNlckFkZHJlc3MEAAAAGFByZXZpb3VzQmxhY2tMaXN0QWRkcmVzcwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAABpUb3RhbF9CbGFja19MaXN0ZWRfQWRkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVUb3RhbEJsYWNrTGlzdEFkZHJlc3MJAABkAAAAAgUAAAAYUHJldmlvdXNCbGFja0xpc3RBZGRyZXNzAAAAAAAAAAABAwkAAGYAAAACBQAAABhwcm9kdWN0X2xhdW5jaF90aW1lc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAAAgAAAAEJAAEsAAAAAgUAAAAUcHJvZHVjdF9sYXVuY2hfZXJyb3IJAAGkAAAAAQUAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAlVGhpcyBBZGRyZXNzIGlzIG5vdCBBdXRob3JpemVkLiBPbmx5IAkABCUAAAABBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwIAAAAiIGlzIEF1dGhvcml6ZWQgQWRkcmVzcyB0byBTaWduIGl0LgMJAAAAAAAAAgUAAAAUcmVhZF9zaHV0ZG93bl9zdGF0dXMAAAAAAAAAAAEJAAACAAAAAQIAAABbQ29udHJhY3QgU3RhdHVzIGlzIEN1cnJlbnRseSBTaHV0ZG93bi4gUGxlYXNlIFNpZ24gdGhlIEZ1bmN0aW9uIEluaXRpYXRlX0NvbnRyYWN0X1NodXRkb3duLgMJAAAAAAAAAgUAAAANaWZCbGFja2xpc3RlZAIAAAADWWVzCQAAAgAAAAECAAAAKkFkZHJlc3MgaXMgYWxyZWFkeSBhdmFpbGFibGUgaW4gQmxhY2tsaXN0LgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAICAAAAEWFkZHJfQkxBQ0tMSVNURURfBQAAAAtVc2VyQWRkcmVzcwIAAAADWWVzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABpUb3RhbF9CbGFja19MaXN0ZWRfQWRkcmVzcwUAAAAVVG90YWxCbGFja0xpc3RBZGRyZXNzBQAAAANuaWwAAAABaQEAAAAWRGVsZXRlQmxhY2tMaXN0QWRkcmVzcwAAAAEAAAALVXNlckFkZHJlc3MEAAAADWlmQmxhY2tsaXN0ZWQJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAABFhZGRyX0JMQUNLTElTVEVEXwUAAAALVXNlckFkZHJlc3MEAAAAGFByZXZpb3VzQmxhY2tMaXN0QWRkcmVzcwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAABpUb3RhbF9CbGFja19MaXN0ZWRfQWRkcmVzcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABVUb3RhbEJsYWNrTGlzdEFkZHJlc3MJAABlAAAAAgUAAAAYUHJldmlvdXNCbGFja0xpc3RBZGRyZXNzAAAAAAAAAAABAwkAAGYAAAACBQAAABhwcm9kdWN0X2xhdW5jaF90aW1lc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAAAgAAAAEJAAEsAAAAAgIAAAAjUHJvZHVjdCBMYXVuY2ggVGltZXN0YW1wIGlzIHNldCBhdCAJAAGkAAAAAQUAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAlVGhpcyBBZGRyZXNzIGlzIG5vdCBBdXRob3JpemVkLiBPbmx5IAkABCUAAAABBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwIAAAAiIGlzIEF1dGhvcml6ZWQgQWRkcmVzcyB0byBTaWduIGl0LgMJAAAAAAAAAgUAAAAUcmVhZF9zaHV0ZG93bl9zdGF0dXMAAAAAAAAAAAEJAAACAAAAAQIAAABbQ29udHJhY3QgU3RhdHVzIGlzIEN1cnJlbnRseSBTaHV0ZG93bi4gUGxlYXNlIFNpZ24gdGhlIEZ1bmN0aW9uIEluaXRpYXRlX0NvbnRyYWN0X1NodXRkb3duLgMJAAAAAAAAAgUAAAANaWZCbGFja2xpc3RlZAIAAAADWWVzCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAAEsAAAAAgIAAAARYWRkcl9CTEFDS0xJU1RFRF8FAAAAC1VzZXJBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABpUb3RhbF9CbGFja19MaXN0ZWRfQWRkcmVzcwUAAAAVVG90YWxCbGFja0xpc3RBZGRyZXNzBQAAAANuaWwJAAACAAAAAQIAAAAmQWRkcmVzcyBpcyBub3QgYXZhaWxhYmxlIGluIEJsYWNrbGlzdC4AAAABaQEAAAAaSW5pdGlhdGVfQ29udHJhY3RfU2h1dGRvd24AAAAABAAAABFhZGRTaHV0ZG93blN0YXR1cwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAAA9TaHV0ZG93bl9TdGF0dXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAARd2hpdGVsaXN0X2FkZHJlc3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAJVRoaXMgQWRkcmVzcyBpcyBub3QgQXV0aG9yaXplZC4gT25seSAJAAQlAAAAAQUAAAARd2hpdGVsaXN0X2FkZHJlc3MCAAAAIiBpcyBBdXRob3JpemVkIEFkZHJlc3MgdG8gU2lnbiBpdC4DCQAAAAAAAAIFAAAAEWFkZFNodXRkb3duU3RhdHVzAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA9TaHV0ZG93bl9TdGF0dXMAAAAAAAAAAAEFAAAAA25pbAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAPU2h1dGRvd25fU3RhdHVzAAAAAAAAAAAABQAAAANuaWwAAAABaQEAAAADRGVsAAAAAQAAAAVFbnRyeQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAVFbnRyeQUAAAADbmlsAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAHJG1hdGNoMAUAAAACdHgDAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAVPcmRlcgYDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAE0V4Y2hhbmdlVHJhbnNhY3Rpb24GAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAABdNYXNzVHJhbnNmZXJUcmFuc2FjdGlvbgYJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAATVHJhbnNmZXJUcmFuc2FjdGlvbgQAAAABdAUAAAAHJG1hdGNoMAcJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAACAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5EAdHaA==", "height": 2865973, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 5xCHaZ55mRoYRz7vEgioWwwVBbHdcXjEaTJ6Cgp3wJaz Next: ELbp9NKtKteryu7oZDsdNRfCtS5tEvE4uoSCt7X4qK6c Diff:
OldNewDifferences
111111 then throw((("Placed Order Size is less than [" + toString(minimum_order_size)) + "/10^8] WAVES."))
112112 else if ((Amount > maximum_order_size))
113113 then throw((("Placed Order Size is more than [" + toString(maximum_order_size)) + "/10^8] WAVES."))
114- else if ((0 > update_user_funds))
115- then throw((("Placed Order Amount is going negative. Please reduce the Order Size.User Fund Amount = [" + toString(update_user_funds)) + "]"))
116- else if ((size(toString(Start_Order_Timestamp)) != 13))
117- then throw("Start Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
118- else if ((size(toString(End_Order_Timestamp)) != 13))
119- then throw("End Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
120- else if (if ((read_user_voucher_funds == 0))
121- then true
122- else (0 > update_user_voucher_balance))
123- then [StringEntry(("User_ID_" + User_Address), User_ID), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), IntegerEntry("Network_Fee_To_Place_Order", network_fee), StringEntry(((("Call_" + User_Address) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + User_Address) + "_") + toString(TotalUserCall)), Amount), StringEntry(((("Call_Start_End_" + User_Address) + "_") + toString(TotalUserCall)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Option_Orders", TotalOptionOrders), IntegerEntry(("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID)), TotalFundsAddedInSpecificOptionOrder), IntegerEntry("Total_Pool_Liquidity", read_TPL), IntegerEntry(("Funds_At_Risk_" + toString(read_OptionCounterID)), Funds_at_risk), IntegerEntry("Call_Limits", Call_Limits), IntegerEntry("Put_Limits", Put_Limits), IntegerEntry(("Total_Option_Orders_" + toString(read_OptionCounterID)), TotalOptionOrdersinSpecificCounter), IntegerEntry("Total_Calls", TotalCall), IntegerEntry(("Total_Calls_" + toString(read_OptionCounterID)), TotalCallinSpecificCounter), IntegerEntry((User_Address + "_Total_Calls"), TotalUserCall), IntegerEntry(((User_Address + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(pool_liquidity_address), Amount, unit)]
124- else if ((update_user_voucher_balance > read_user_voucher_funds))
125- then [StringEntry(("User_ID_" + User_Address), User_ID), IntegerEntry((User_Address + "_Voucher_Balance"), update_user_voucher_balance), IntegerEntry("Network_Fee_To_Place_Order", network_fee), StringEntry(((("Call_" + User_Address) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + User_Address) + "_") + toString(TotalUserCall)), Amount), StringEntry(((("Call_Start_End_" + User_Address) + "_") + toString(TotalUserCall)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Option_Orders", TotalOptionOrders), IntegerEntry(("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID)), TotalFundsAddedInSpecificOptionOrder), IntegerEntry("Total_Pool_Liquidity", read_TPL), IntegerEntry(("Funds_At_Risk_" + toString(read_OptionCounterID)), Funds_at_risk), IntegerEntry("Call_Limits", Call_Limits), IntegerEntry("Put_Limits", Put_Limits), IntegerEntry(("Total_Option_Orders_" + toString(read_OptionCounterID)), TotalOptionOrdersinSpecificCounter), IntegerEntry("Total_Calls", TotalCall), IntegerEntry(("Total_Calls_" + toString(read_OptionCounterID)), TotalCallinSpecificCounter), IntegerEntry((User_Address + "_Total_Calls"), TotalUserCall), IntegerEntry(((User_Address + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(pool_liquidity_address), Amount, unit)]
126- else throw("Wrong Entry.")
114+ else if (if ((0 > read_user_funds))
115+ then (0 == read_user_voucher_funds)
116+ else false)
117+ then throw("No Funds Available in Voucher as well in User Balance. Please Deposit to Play.")
118+ else if ((0 > update_user_funds))
119+ then throw((("Placed Order Amount is going negative. Please reduce the Order Size.User Fund Amount = [" + toString(update_user_funds)) + "]"))
120+ else if ((size(toString(Start_Order_Timestamp)) != 13))
121+ then throw("Start Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
122+ else if ((size(toString(End_Order_Timestamp)) != 13))
123+ then throw("End Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
124+ else if (if ((read_user_voucher_funds == 0))
125+ then true
126+ else (0 > update_user_voucher_balance))
127+ then [StringEntry(("User_ID_" + User_Address), User_ID), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), IntegerEntry("Network_Fee_To_Place_Order", network_fee), StringEntry(((("Call_" + User_Address) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + User_Address) + "_") + toString(TotalUserCall)), Amount), StringEntry(((("Call_Start_End_" + User_Address) + "_") + toString(TotalUserCall)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Option_Orders", TotalOptionOrders), IntegerEntry(("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID)), TotalFundsAddedInSpecificOptionOrder), IntegerEntry("Total_Pool_Liquidity", read_TPL), IntegerEntry(("Funds_At_Risk_" + toString(read_OptionCounterID)), Funds_at_risk), IntegerEntry("Call_Limits", Call_Limits), IntegerEntry("Put_Limits", Put_Limits), IntegerEntry(("Total_Option_Orders_" + toString(read_OptionCounterID)), TotalOptionOrdersinSpecificCounter), IntegerEntry("Total_Calls", TotalCall), IntegerEntry(("Total_Calls_" + toString(read_OptionCounterID)), TotalCallinSpecificCounter), IntegerEntry((User_Address + "_Total_Calls"), TotalUserCall), IntegerEntry(((User_Address + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(pool_liquidity_address), Amount, unit)]
128+ else if ((update_user_voucher_balance > read_user_voucher_funds))
129+ then [StringEntry(("User_ID_" + User_Address), User_ID), IntegerEntry((User_Address + "_Voucher_Balance"), update_user_voucher_balance), IntegerEntry("Network_Fee_To_Place_Order", network_fee), StringEntry(((("Call_" + User_Address) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + User_Address) + "_") + toString(TotalUserCall)), Amount), StringEntry(((("Call_Start_End_" + User_Address) + "_") + toString(TotalUserCall)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Option_Orders", TotalOptionOrders), IntegerEntry(("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID)), TotalFundsAddedInSpecificOptionOrder), IntegerEntry("Total_Pool_Liquidity", read_TPL), IntegerEntry(("Funds_At_Risk_" + toString(read_OptionCounterID)), Funds_at_risk), IntegerEntry("Call_Limits", Call_Limits), IntegerEntry("Put_Limits", Put_Limits), IntegerEntry(("Total_Option_Orders_" + toString(read_OptionCounterID)), TotalOptionOrdersinSpecificCounter), IntegerEntry("Total_Calls", TotalCall), IntegerEntry(("Total_Calls_" + toString(read_OptionCounterID)), TotalCallinSpecificCounter), IntegerEntry((User_Address + "_Total_Calls"), TotalUserCall), IntegerEntry(((User_Address + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(pool_liquidity_address), Amount, unit)]
130+ else throw("Wrong Entry.")
127131 }
128132
129133
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let pool_liquidity_address = "3N4wBgYtWgJW2LTRef2ekWQTrEXCRfXmGLh"
55
66 let Dapp_Address_pub_key = base58'EXLfxKmqhQPiProBaoPatTentUSZX5Dd8A8bYDcmfNwt'
77
88 let product_launch_timestamp = 1695427860000
99
1010 let Currency_ID = "WAVES"
1111
1212 let product_launch_error = "Product Launch Timestamp is set at "
1313
1414 let no_payment_error = "No payment attached, Please Attach Token in payment[1]."
1515
1616 let closed_oracle_eror = "Oracle is closed. Wait Until Oracle is Turned On."
1717
1818 let whitelist_address = addressFromPublicKey(Dapp_Address_pub_key)
1919
2020 let d2dcaller = addressFromPublicKey(base58'6oay51Q6zPcFP9bSwUC4Potx2KGyD4AUjpL5uLR4QeRN')
2121
2222 let network_fee = 900000
2323
2424 let minimum_order_size = 10000000
2525
2626 let maximum_order_size = 10000000000
2727
2828 let maximum_voucher_size = 100000000
2929
3030 let read_shutdown_status = valueOrErrorMessage(getInteger(this, "Shutdown_Status"), "Initiate_Contract_Shutdown function value is not Set, Please Sign that first.")
3131
3232 @Callable(i)
3333 func placeoptionCall (Amount,OptionCounterID,User_ID,User_Address,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
3434 let calleraddress = toBase58String(i.caller.bytes)
3535 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + User_Address))
3636 let read_TPL = valueOrErrorMessage(getInteger(addressFromStringValue(pool_liquidity_address), "Total_Pool_Liquidity"), "No Initial Pool Liquidity was Found.")
3737 let read_user_funds = valueOrElse(getInteger(((Currency_ID + "_") + User_Address)), 0)
3838 let update_user_funds = ((read_user_funds - Amount) - network_fee)
3939 let read_user_voucher_funds = valueOrElse(getInteger((User_Address + "_Voucher_Balance")), 0)
4040 let update_user_voucher_balance = ((read_user_voucher_funds - Amount) - network_fee)
4141 let read_start_order_permit_timestamp = Start_Order_Timestamp
4242 let read_end_order_permit_timestamp = End_Order_Timestamp
4343 let read_OptionCounterID = OptionCounterID
4444 let OpionExpireCounter = 1
4545 let OptionExpireCounterID = (read_OptionCounterID + OpionExpireCounter)
4646 let PreviousOptionOrders = match getInteger(this, "Total_Option_Orders") {
4747 case a: Int =>
4848 a
4949 case _ =>
5050 0
5151 }
5252 let TotalOptionOrders = (PreviousOptionOrders + 1)
5353 let PreviousFundsAddedInSpecificOptionOrder = match getInteger(this, ("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID))) {
5454 case a: Int =>
5555 a
5656 case _ =>
5757 0
5858 }
5959 let TotalFundsAddedInSpecificOptionOrder = (PreviousFundsAddedInSpecificOptionOrder + Amount)
6060 let PreviousOptionOrdersinSpecificCounter = match getInteger(this, ("Total_Option_Orders_" + toString(read_OptionCounterID))) {
6161 case a: Int =>
6262 a
6363 case _ =>
6464 0
6565 }
6666 let TotalOptionOrdersinSpecificCounter = (PreviousOptionOrdersinSpecificCounter + 1)
6767 let PreviousCall = match getInteger(this, "Total_Calls") {
6868 case a: Int =>
6969 a
7070 case _ =>
7171 0
7272 }
7373 let TotalCall = (PreviousCall + 1)
7474 let PreviousCallinSpecificCounter = match getInteger(this, ("Total_Calls_" + toString(read_OptionCounterID))) {
7575 case a: Int =>
7676 a
7777 case _ =>
7878 0
7979 }
8080 let TotalCallinSpecificCounter = (PreviousCallinSpecificCounter + 1)
8181 let PreviousUserCall = match getInteger(this, (User_Address + "_Total_Calls")) {
8282 case a: Int =>
8383 a
8484 case _ =>
8585 0
8686 }
8787 let TotalUserCall = (PreviousUserCall + 1)
8888 let PreviousUserCallinSpecificCounter = match getInteger(this, ((User_Address + "_Total_Calls_") + toString(read_OptionCounterID))) {
8989 case a: Int =>
9090 a
9191 case _ =>
9292 0
9393 }
9494 let TotalUserCallinSpecificCounter = (PreviousUserCallinSpecificCounter + 1)
9595 let Funds_at_risk = fraction(read_TPL, 5, 100)
9696 if ((i.caller != whitelist_address))
9797 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
9898 else if ((read_shutdown_status == 1))
9999 then throw("Contract Status is Currently Shutdown. Please Sign the Function Initiate_Contract_Shutdown.")
100100 else if ((product_launch_timestamp > lastBlock.timestamp))
101101 then throw((product_launch_error + toString(product_launch_timestamp)))
102102 else if ((Oracle_Status == "CLOSE"))
103103 then throw(closed_oracle_eror)
104104 else if ((ifBlacklisted == "Yes"))
105105 then throw((User_Address + " Address is Blacklisted. Please contact Admin to Whitelist it."))
106106 else if ((lastBlock.timestamp >= read_end_order_permit_timestamp))
107107 then throw("Option Order placing Timing Limits are Over. Please Join in Next Cycle.")
108108 else if ((TotalFundsAddedInSpecificOptionOrder > Funds_at_risk))
109109 then throw((((("No more orders accepted, Option House Risk Size is only limited to " + toString(Funds_at_risk)) + ", Pending House Risk is ") + toString((Funds_at_risk - PreviousFundsAddedInSpecificOptionOrder))) + ". Join in next Cycle."))
110110 else if ((minimum_order_size > Amount))
111111 then throw((("Placed Order Size is less than [" + toString(minimum_order_size)) + "/10^8] WAVES."))
112112 else if ((Amount > maximum_order_size))
113113 then throw((("Placed Order Size is more than [" + toString(maximum_order_size)) + "/10^8] WAVES."))
114- else if ((0 > update_user_funds))
115- then throw((("Placed Order Amount is going negative. Please reduce the Order Size.User Fund Amount = [" + toString(update_user_funds)) + "]"))
116- else if ((size(toString(Start_Order_Timestamp)) != 13))
117- then throw("Start Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
118- else if ((size(toString(End_Order_Timestamp)) != 13))
119- then throw("End Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
120- else if (if ((read_user_voucher_funds == 0))
121- then true
122- else (0 > update_user_voucher_balance))
123- then [StringEntry(("User_ID_" + User_Address), User_ID), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), IntegerEntry("Network_Fee_To_Place_Order", network_fee), StringEntry(((("Call_" + User_Address) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + User_Address) + "_") + toString(TotalUserCall)), Amount), StringEntry(((("Call_Start_End_" + User_Address) + "_") + toString(TotalUserCall)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Option_Orders", TotalOptionOrders), IntegerEntry(("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID)), TotalFundsAddedInSpecificOptionOrder), IntegerEntry("Total_Pool_Liquidity", read_TPL), IntegerEntry(("Funds_At_Risk_" + toString(read_OptionCounterID)), Funds_at_risk), IntegerEntry("Call_Limits", Call_Limits), IntegerEntry("Put_Limits", Put_Limits), IntegerEntry(("Total_Option_Orders_" + toString(read_OptionCounterID)), TotalOptionOrdersinSpecificCounter), IntegerEntry("Total_Calls", TotalCall), IntegerEntry(("Total_Calls_" + toString(read_OptionCounterID)), TotalCallinSpecificCounter), IntegerEntry((User_Address + "_Total_Calls"), TotalUserCall), IntegerEntry(((User_Address + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(pool_liquidity_address), Amount, unit)]
124- else if ((update_user_voucher_balance > read_user_voucher_funds))
125- then [StringEntry(("User_ID_" + User_Address), User_ID), IntegerEntry((User_Address + "_Voucher_Balance"), update_user_voucher_balance), IntegerEntry("Network_Fee_To_Place_Order", network_fee), StringEntry(((("Call_" + User_Address) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + User_Address) + "_") + toString(TotalUserCall)), Amount), StringEntry(((("Call_Start_End_" + User_Address) + "_") + toString(TotalUserCall)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Option_Orders", TotalOptionOrders), IntegerEntry(("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID)), TotalFundsAddedInSpecificOptionOrder), IntegerEntry("Total_Pool_Liquidity", read_TPL), IntegerEntry(("Funds_At_Risk_" + toString(read_OptionCounterID)), Funds_at_risk), IntegerEntry("Call_Limits", Call_Limits), IntegerEntry("Put_Limits", Put_Limits), IntegerEntry(("Total_Option_Orders_" + toString(read_OptionCounterID)), TotalOptionOrdersinSpecificCounter), IntegerEntry("Total_Calls", TotalCall), IntegerEntry(("Total_Calls_" + toString(read_OptionCounterID)), TotalCallinSpecificCounter), IntegerEntry((User_Address + "_Total_Calls"), TotalUserCall), IntegerEntry(((User_Address + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(pool_liquidity_address), Amount, unit)]
126- else throw("Wrong Entry.")
114+ else if (if ((0 > read_user_funds))
115+ then (0 == read_user_voucher_funds)
116+ else false)
117+ then throw("No Funds Available in Voucher as well in User Balance. Please Deposit to Play.")
118+ else if ((0 > update_user_funds))
119+ then throw((("Placed Order Amount is going negative. Please reduce the Order Size.User Fund Amount = [" + toString(update_user_funds)) + "]"))
120+ else if ((size(toString(Start_Order_Timestamp)) != 13))
121+ then throw("Start Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
122+ else if ((size(toString(End_Order_Timestamp)) != 13))
123+ then throw("End Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
124+ else if (if ((read_user_voucher_funds == 0))
125+ then true
126+ else (0 > update_user_voucher_balance))
127+ then [StringEntry(("User_ID_" + User_Address), User_ID), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), IntegerEntry("Network_Fee_To_Place_Order", network_fee), StringEntry(((("Call_" + User_Address) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + User_Address) + "_") + toString(TotalUserCall)), Amount), StringEntry(((("Call_Start_End_" + User_Address) + "_") + toString(TotalUserCall)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Option_Orders", TotalOptionOrders), IntegerEntry(("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID)), TotalFundsAddedInSpecificOptionOrder), IntegerEntry("Total_Pool_Liquidity", read_TPL), IntegerEntry(("Funds_At_Risk_" + toString(read_OptionCounterID)), Funds_at_risk), IntegerEntry("Call_Limits", Call_Limits), IntegerEntry("Put_Limits", Put_Limits), IntegerEntry(("Total_Option_Orders_" + toString(read_OptionCounterID)), TotalOptionOrdersinSpecificCounter), IntegerEntry("Total_Calls", TotalCall), IntegerEntry(("Total_Calls_" + toString(read_OptionCounterID)), TotalCallinSpecificCounter), IntegerEntry((User_Address + "_Total_Calls"), TotalUserCall), IntegerEntry(((User_Address + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(pool_liquidity_address), Amount, unit)]
128+ else if ((update_user_voucher_balance > read_user_voucher_funds))
129+ then [StringEntry(("User_ID_" + User_Address), User_ID), IntegerEntry((User_Address + "_Voucher_Balance"), update_user_voucher_balance), IntegerEntry("Network_Fee_To_Place_Order", network_fee), StringEntry(((("Call_" + User_Address) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + User_Address) + "_") + toString(TotalUserCall)), Amount), StringEntry(((("Call_Start_End_" + User_Address) + "_") + toString(TotalUserCall)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Option_Orders", TotalOptionOrders), IntegerEntry(("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID)), TotalFundsAddedInSpecificOptionOrder), IntegerEntry("Total_Pool_Liquidity", read_TPL), IntegerEntry(("Funds_At_Risk_" + toString(read_OptionCounterID)), Funds_at_risk), IntegerEntry("Call_Limits", Call_Limits), IntegerEntry("Put_Limits", Put_Limits), IntegerEntry(("Total_Option_Orders_" + toString(read_OptionCounterID)), TotalOptionOrdersinSpecificCounter), IntegerEntry("Total_Calls", TotalCall), IntegerEntry(("Total_Calls_" + toString(read_OptionCounterID)), TotalCallinSpecificCounter), IntegerEntry((User_Address + "_Total_Calls"), TotalUserCall), IntegerEntry(((User_Address + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(pool_liquidity_address), Amount, unit)]
130+ else throw("Wrong Entry.")
127131 }
128132
129133
130134
131135 @Callable(i)
132136 func placeoptionPut (Amount,OptionCounterID,User_ID,User_Address,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
133137 let calleraddress = toBase58String(i.caller.bytes)
134138 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + User_Address))
135139 let read_TPL = valueOrErrorMessage(getInteger(addressFromStringValue(pool_liquidity_address), "Total_Pool_Liquidity"), "No Initial Pool Liquidity was Found.")
136140 let read_user_funds = valueOrElse(getInteger(((Currency_ID + "_") + User_Address)), 0)
137141 let update_user_funds = ((read_user_funds - Amount) - network_fee)
138142 let read_user_voucher_funds = valueOrElse(getInteger((User_Address + "_Voucher_Balance")), 0)
139143 let update_user_voucher_balance = (read_user_voucher_funds - Amount)
140144 let read_start_order_permit_timestamp = Start_Order_Timestamp
141145 let read_end_order_permit_timestamp = End_Order_Timestamp
142146 let read_OptionCounterID = OptionCounterID
143147 let OpionExpireCounter = 1
144148 let OptionExpireCounterID = (read_OptionCounterID + OpionExpireCounter)
145149 let PreviousOptionOrders = match getInteger(this, "Total_Option_Orders") {
146150 case a: Int =>
147151 a
148152 case _ =>
149153 0
150154 }
151155 let TotalOptionOrders = (PreviousOptionOrders + 1)
152156 let PreviousFundsAddedInSpecificOptionOrder = match getInteger(this, ("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID))) {
153157 case a: Int =>
154158 a
155159 case _ =>
156160 0
157161 }
158162 let TotalFundsAddedInSpecificOptionOrder = (PreviousFundsAddedInSpecificOptionOrder + Amount)
159163 let PreviousOptionOrdersinSpecificCounter = match getInteger(this, ("Total_Option_Orders_" + toString(read_OptionCounterID))) {
160164 case a: Int =>
161165 a
162166 case _ =>
163167 0
164168 }
165169 let TotalOptionOrdersinSpecificCounter = (PreviousOptionOrdersinSpecificCounter + 1)
166170 let PreviousPut = match getInteger(this, "Total_Puts") {
167171 case a: Int =>
168172 a
169173 case _ =>
170174 0
171175 }
172176 let TotalPut = (PreviousPut + 1)
173177 let PreviousPutinSpecificCounter = match getInteger(this, ("Total_Puts_" + toString(read_OptionCounterID))) {
174178 case a: Int =>
175179 a
176180 case _ =>
177181 0
178182 }
179183 let TotalPutinSpecificCounter = (PreviousPutinSpecificCounter + 1)
180184 let PreviousUserPut = match getInteger(this, (User_Address + "_Total_Puts")) {
181185 case a: Int =>
182186 a
183187 case _ =>
184188 0
185189 }
186190 let TotalUserPut = (PreviousUserPut + 1)
187191 let PreviousUserPutinSpecificCounter = match getInteger(this, ((User_Address + "_Total_Puts_") + toString(read_OptionCounterID))) {
188192 case a: Int =>
189193 a
190194 case _ =>
191195 0
192196 }
193197 let TotalUserPutinSpecificCounter = (PreviousUserPutinSpecificCounter + 1)
194198 let Funds_at_risk = fraction(read_TPL, 5, 100)
195199 if ((i.caller != whitelist_address))
196200 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
197201 else if ((read_shutdown_status == 1))
198202 then throw("Contract Status is Currently Shutdown. Please Sign the Function Initiate_Contract_Shutdown.")
199203 else if ((product_launch_timestamp > lastBlock.timestamp))
200204 then throw((product_launch_error + toString(product_launch_timestamp)))
201205 else if ((Oracle_Status == "CLOSE"))
202206 then throw(closed_oracle_eror)
203207 else if ((ifBlacklisted == "Yes"))
204208 then throw((User_Address + " Address is Blacklisted. Please contact Admin to Whitelist it."))
205209 else if ((lastBlock.timestamp >= read_end_order_permit_timestamp))
206210 then throw("Option Order placing Timing Limits are Over. Please Join in Next Cycle.")
207211 else if ((TotalFundsAddedInSpecificOptionOrder > Funds_at_risk))
208212 then throw((((("No more orders accepted, Option House Risk Size is only limited to " + toString(Funds_at_risk)) + ", Pending House Risk is ") + toString((Funds_at_risk - PreviousFundsAddedInSpecificOptionOrder))) + ". Join in next Cycle."))
209213 else if ((minimum_order_size > Amount))
210214 then throw((("Placed Order Size is less than [" + toString(minimum_order_size)) + "/10^8] WAVES."))
211215 else if ((Amount > maximum_order_size))
212216 then throw((("Placed Order Size is more than [" + toString(maximum_order_size)) + "/10^8] WAVES."))
213217 else if ((0 > update_user_funds))
214218 then throw(("Placed Order Amount is going negative. Please reduce the Order Size. Negative Fund Amount = " + toString(update_user_funds)))
215219 else if ((size(toString(Start_Order_Timestamp)) != 13))
216220 then throw("Start Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
217221 else if ((size(toString(End_Order_Timestamp)) != 13))
218222 then throw("End Timestamp is Wrong. Please Enter a Valid Timestamp. Probably you entered an Timestamp less than 13 Chars.")
219223 else [StringEntry(("User_ID_" + User_Address), User_ID), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), IntegerEntry((User_Address + "_Voucher_Balance"), update_user_voucher_balance), IntegerEntry("Network_Fee_To_Place_Order", network_fee), StringEntry(((("Put_" + User_Address) + "_") + toString(TotalUserPut)), toString(Price)), IntegerEntry(((("Put_Amount_" + User_Address) + "_") + toString(TotalUserPut)), Amount), StringEntry(((("Put_Start_End_" + User_Address) + "_") + toString(TotalUserPut)), ((toString(read_OptionCounterID) + "_") + toString(OptionExpireCounterID))), IntegerEntry("Total_Option_Orders", TotalOptionOrders), IntegerEntry(("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID)), TotalFundsAddedInSpecificOptionOrder), IntegerEntry("Total_Pool_Liquidity", read_TPL), IntegerEntry(("Funds_At_Risk_" + toString(read_OptionCounterID)), Funds_at_risk), IntegerEntry("Call_Limits", Call_Limits), IntegerEntry("Put_Limits", Put_Limits), IntegerEntry(("Total_Option_Orders_" + toString(read_OptionCounterID)), TotalOptionOrdersinSpecificCounter), IntegerEntry("Total_Puts", TotalPut), IntegerEntry(("Total_Puts_" + toString(read_OptionCounterID)), TotalPutinSpecificCounter), IntegerEntry((User_Address + "_Total_Puts"), TotalUserPut), IntegerEntry(((User_Address + "_Total_Puts_") + toString(read_OptionCounterID)), TotalUserPutinSpecificCounter), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(pool_liquidity_address), Amount, unit)]
220224 }
221225
222226
223227
224228 @Callable(i)
225229 func Fill_Vouchers_Liquidity () = {
226230 let calleraddress = toBase58String(i.caller.bytes)
227231 let pmt = if ((size(i.payments) == 1))
228232 then i.payments[0]
229233 else throw("No payment attached, Please Attach only Whitelisted Tokens in payment[1].")
230234 let PreviousVouchersBalance = match getInteger(this, "Available_Vouchers_Balance") {
231235 case a: Int =>
232236 a
233237 case _ =>
234238 0
235239 }
236240 let TotalVouchersBalance = (PreviousVouchersBalance + pmt.amount)
237241 let PreviousVouchersCounterID = match getInteger(this, "Vouchers_Counter_ID") {
238242 case a: Int =>
239243 a
240244 case _ =>
241245 0
242246 }
243247 let TotalVouchersCounterID = (PreviousVouchersCounterID + 1)
244248 if (isDefined(pmt.assetId))
245249 then throw("Only WAVES is allowed to deposit at the moment")
246250 else if ((read_shutdown_status == 1))
247251 then throw("Contract Status is Currently Shutdown. Please Sign the Function Initiate_Contract_Shutdown.")
248252 else [IntegerEntry("Available_Vouchers_Balance", TotalVouchersBalance), IntegerEntry((toString(TotalVouchersCounterID) + "_Voucher_Added_Amount"), pmt.amount), IntegerEntry("Vouchers_Counter_ID", TotalVouchersCounterID)]
249253 }
250254
251255
252256
253257 @Callable(i)
254258 func Issue_Vouchers (Voucher_Amount,User_ID,User_Address) = {
255259 let read_TotalVouchersBalance = valueOrErrorMessage(getInteger(this, "Available_Vouchers_Balance"), "Available_Vouchers_Balance Entry is not Found. Initiate Fill_Vouchers_Liquidity Function first.")
256260 let update_TotalVouchersBalance = (read_TotalVouchersBalance - Voucher_Amount)
257261 let VouchersIssuedToUser = match getInteger(this, ("Total_Vouchers_Issued_To_" + User_Address)) {
258262 case a: Int =>
259263 a
260264 case _ =>
261265 0
262266 }
263267 let TotalVouchersIssuedToUser = (VouchersIssuedToUser + 1)
264268 let VouchersAmountIssuedToUser = match getInteger(this, ("Total_Vouchers_Amount_Issued_To_" + User_Address)) {
265269 case a: Int =>
266270 a
267271 case _ =>
268272 0
269273 }
270274 let TotalVouchersAmountIssuedToUser = (VouchersAmountIssuedToUser + Voucher_Amount)
271275 let PreviousVouchersBalanceofUser = match getInteger(this, (User_Address + "_Voucher_Balance")) {
272276 case a: Int =>
273277 a
274278 case _ =>
275279 0
276280 }
277281 let TotalVouchersBalanceofUser = (PreviousVouchersBalanceofUser + Voucher_Amount)
278282 if ((i.caller != whitelist_address))
279283 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
280284 else if ((read_shutdown_status == 1))
281285 then throw("Contract Status is Currently Shutdown. Please Sign the Function Initiate_Contract_Shutdown.")
282286 else if ((0 >= Voucher_Amount))
283287 then throw((("Voucher Balance can't be 0 or go in negative State. Increase the Voucher Amount where maximum limit is " + toString(maximum_voucher_size)) + "/10^8 Waves."))
284288 else if ((0 >= update_TotalVouchersBalance))
285289 then throw((("Updated Voucher Balance can't go in negative State of " + toString(update_TotalVouchersBalance)) + " /10^8 WAVES. Reduce the Voucher Amount."))
286290 else if ((Voucher_Amount > maximum_voucher_size))
287291 then throw((("Input Voucher Balance can't exceed the set maximum limit of " + toString(maximum_voucher_size)) + "/10^8 Waves."))
288292 else if ((TotalVouchersBalanceofUser > maximum_voucher_size))
289293 then throw((((User_Address + " Voucher Balance is exceeding the limit of ") + toString(maximum_voucher_size)) + "/10^8 Waves."))
290294 else [IntegerEntry(("Total_Vouchers_Issued_To_" + User_Address), TotalVouchersIssuedToUser), IntegerEntry(("Total_Vouchers_Amount_Issued_To_" + User_Address), TotalVouchersAmountIssuedToUser), IntegerEntry((User_Address + "_Voucher_Balance"), TotalVouchersBalanceofUser), IntegerEntry("Available_Vouchers_Balance", update_TotalVouchersBalance)]
291295 }
292296
293297
294298
295299 @Callable(i)
296300 func DepositUserFunds () = {
297301 let calleraddress = toBase58String(i.caller.bytes)
298302 let pmt = if ((size(i.payments) == 1))
299303 then i.payments[0]
300304 else throw("No payment attached, Please Attach only Whitelisted Tokens in payment[1].")
301305 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + calleraddress))
302306 let PreviousUserDeposit = match getInteger(this, ((Currency_ID + "_") + calleraddress)) {
303307 case a: Int =>
304308 a
305309 case _ =>
306310 0
307311 }
308312 let TotalUserDeposit = (PreviousUserDeposit + pmt.amount)
309313 let PreviousDepositCounterID = match getInteger(this, "Deposit_Counter_ID") {
310314 case a: Int =>
311315 a
312316 case _ =>
313317 0
314318 }
315319 let TotalDepositCounterID = (PreviousDepositCounterID + 1)
316320 if ((product_launch_timestamp > lastBlock.timestamp))
317321 then throw((product_launch_error + toString(product_launch_timestamp)))
318322 else if ((read_shutdown_status == 1))
319323 then throw("Contract Status is Currently Shutdown. Please Sign the Function Initiate_Contract_Shutdown.")
320324 else if ((ifBlacklisted == "Yes"))
321325 then throw((calleraddress + " Address is Blacklisted. Please contact Admin to Whitelist it."))
322326 else if (isDefined(pmt.assetId))
323327 then throw("Only WAVES is allowed to deposit at the moment")
324328 else [IntegerEntry(((Currency_ID + "_") + calleraddress), TotalUserDeposit), IntegerEntry(((((toString(TotalDepositCounterID) + "_") + Currency_ID) + "_") + calleraddress), pmt.amount), IntegerEntry("Deposit_Counter_ID", TotalDepositCounterID)]
325329 }
326330
327331
328332
329333 @Callable(i)
330334 func WithdrawUserFunds (User_Address,Amount) = {
331335 let calleraddress = toBase58String(i.caller.bytes)
332336 let readuserbalance = getIntegerValue(((Currency_ID + "_") + User_Address))
333337 let update_user_funds = ((readuserbalance - Amount) - network_fee)
334338 let minimim_withdraw_amount = 10000000
335339 if ((i.caller != whitelist_address))
336340 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
337341 else if ((read_shutdown_status == 1))
338342 then throw("Contract Status is Currently Shutdown. Please Sign the Function Initiate_Contract_Shutdown.")
339343 else if ((minimim_withdraw_amount > Amount))
340344 then throw((("Minimum Withdraw Amount is " + toString(minimim_withdraw_amount)) + "/10^8] WAVES."))
341345 else if ((0 > update_user_funds))
342346 then throw((("Placed Withdraw Amount is going in negative State of " + toString(update_user_funds)) + "/10^8] WAVES."))
343347 else [IntegerEntry("Previous_Balance", readuserbalance), IntegerEntry("Network_Fee_To_Withdraw", network_fee), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), ScriptTransfer(whitelist_address, network_fee, unit), ScriptTransfer(addressFromStringValue(User_Address), Amount, unit)]
344348 }
345349
346350
347351
348352 @Callable(i)
349353 func BlackListAddress (UserAddress) = {
350354 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + UserAddress))
351355 let PreviousBlackListAddress = match getInteger(this, "Total_Black_Listed_Address") {
352356 case a: Int =>
353357 a
354358 case _ =>
355359 0
356360 }
357361 let TotalBlackListAddress = (PreviousBlackListAddress + 1)
358362 if ((product_launch_timestamp > lastBlock.timestamp))
359363 then throw((product_launch_error + toString(product_launch_timestamp)))
360364 else if ((i.caller != whitelist_address))
361365 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
362366 else if ((read_shutdown_status == 1))
363367 then throw("Contract Status is Currently Shutdown. Please Sign the Function Initiate_Contract_Shutdown.")
364368 else if ((ifBlacklisted == "Yes"))
365369 then throw("Address is already available in Blacklist.")
366370 else [StringEntry(("addr_BLACKLISTED_" + UserAddress), "Yes"), IntegerEntry("Total_Black_Listed_Address", TotalBlackListAddress)]
367371 }
368372
369373
370374
371375 @Callable(i)
372376 func DeleteBlackListAddress (UserAddress) = {
373377 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + UserAddress))
374378 let PreviousBlackListAddress = match getInteger(this, "Total_Black_Listed_Address") {
375379 case a: Int =>
376380 a
377381 case _ =>
378382 0
379383 }
380384 let TotalBlackListAddress = (PreviousBlackListAddress - 1)
381385 if ((product_launch_timestamp > lastBlock.timestamp))
382386 then throw(("Product Launch Timestamp is set at " + toString(product_launch_timestamp)))
383387 else if ((i.caller != whitelist_address))
384388 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
385389 else if ((read_shutdown_status == 1))
386390 then throw("Contract Status is Currently Shutdown. Please Sign the Function Initiate_Contract_Shutdown.")
387391 else if ((ifBlacklisted == "Yes"))
388392 then [DeleteEntry(("addr_BLACKLISTED_" + UserAddress)), IntegerEntry("Total_Black_Listed_Address", TotalBlackListAddress)]
389393 else throw("Address is not available in Blacklist.")
390394 }
391395
392396
393397
394398 @Callable(i)
395399 func Initiate_Contract_Shutdown () = {
396400 let addShutdownStatus = match getInteger(this, "Shutdown_Status") {
397401 case a: Int =>
398402 a
399403 case _ =>
400404 0
401405 }
402406 if ((i.caller != whitelist_address))
403407 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
404408 else if ((addShutdownStatus == 0))
405409 then [IntegerEntry("Shutdown_Status", 1)]
406410 else [IntegerEntry("Shutdown_Status", 0)]
407411 }
408412
409413
410414
411415 @Callable(i)
412416 func Del (Entry) = [DeleteEntry(Entry)]
413417
414418
415419 @Verifier(tx)
416420 func verify () = match tx {
417421 case t: Order|ExchangeTransaction|MassTransferTransaction|TransferTransaction =>
418422 false
419423 case _ =>
420424 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
421425 }
422426

github/deemru/w8io/169f3d6 
63.14 ms