tx · 7ryVcYC2oz9qfQvZJVBJ1ZnzB4J8X7TFXKhHSYahtJ3L

3N4K6JFDDdcd1qrk2HszwHQrMqznvhYBgjn:  -0.02000000 Waves

2023.06.14 14:56 [2622297] smart account 3N4K6JFDDdcd1qrk2HszwHQrMqznvhYBgjn > SELF 0.00000000 Waves

{ "type": 13, "id": "7ryVcYC2oz9qfQvZJVBJ1ZnzB4J8X7TFXKhHSYahtJ3L", "fee": 2000000, "feeAssetId": null, "timestamp": 1686743890896, "version": 2, "chainId": 84, "sender": "3N4K6JFDDdcd1qrk2HszwHQrMqznvhYBgjn", "senderPublicKey": "9vxW4kEGgMt47hfP42SnhhMRhEVqbedX6N57xB8XKYcV", "proofs": [ "MdB5aCbj8S2EVXA1yzYdLB5MWXdF9Ny6RAw3eaTketQYELDX57FrF4L4cKBhfgyW7Pq2y79uMTNr7R8efubhYNC" ], "script": "base64:AAIFAAAAAAAAADUIAhINCgsBAQgIAQEBAQgBARINCgsBAQgIAQEBAQgBARIAEgMKAQgSAwoBCBIHCgUICAgICAAAAAkAAAAAFERhcHBfQWRkcmVzc19wdWJfa2V5AQAAACCf+iKAv1/lpgB95ThZzfZJj66NSuvHvCZzkF0ZxyzdHAAAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wAAAAAYYKRewAAAAAAAtDdXJyZW5jeV9JRAIAAAAFV0FWRVMAAAAAFHByb2R1Y3RfbGF1bmNoX2Vycm9yAgAAACNQcm9kdWN0IExhdW5jaCBUaW1lc3RhbXAgaXMgc2V0IGF0IAAAAAAQbm9fcGF5bWVudF9lcnJvcgIAAAA3Tm8gcGF5bWVudCBhdHRhY2hlZCwgUGxlYXNlIEF0dGFjaCBUb2tlbiBpbiBwYXltZW50WzFdLgAAAAASY2xvc2VkX29yYWNsZV9lcm9yAgAAADFPcmFjbGUgaXMgY2xvc2VkLiBXYWl0IFVudGlsIE9yYWNsZSBpcyBUdXJuZWQgT24uAAAAABF3aGl0ZWxpc3RfYWRkcmVzcwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAAURGFwcF9BZGRyZXNzX3B1Yl9rZXkAAAAAEm1pbmltdW1fb3JkZXJfc2l6ZQAAAAAAAJiWgAAAAAASbWF4aW11bV9vcmRlcl9zaXplAAAAAAJUC+QAAAAABgAAAAFpAQAAAA9wbGFjZW9wdGlvbkNhbGwAAAALAAAAFFRvdGFsX1Bvb2xfTGlxdWlkaXR5AAAAD09wdGlvbkNvdW50ZXJJRAAAAAdVc2VyX0lEAAAADFVzZXJfQWRkcmVzcwAAAApIb3VzZV9yaXNrAAAABVByaWNlAAAAC0NhbGxfTGltaXRzAAAAClB1dF9MaW1pdHMAAAANT3JhY2xlX1N0YXR1cwAAABVTdGFydF9PcmRlcl9UaW1lc3RhbXAAAAATRW5kX09yZGVyX1RpbWVzdGFtcAQAAAANY2FsbGVyYWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAANwbXQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAJAAACAAAAAQUAAAAQbm9fcGF5bWVudF9lcnJvcgQAAAANaWZCbGFja2xpc3RlZAkABB0AAAACBQAAAAR0aGlzCQABLAAAAAICAAAAEWFkZHJfQkxBQ0tMSVNURURfBQAAAA1jYWxsZXJhZGRyZXNzBAAAAA9yZWFkX3VzZXJfZnVuZHMJAQAAABFAZXh0ck5hdGl2ZSgxMDU1KQAAAAEJAAEsAAAAAgkAASwAAAACBQAAAAtDdXJyZW5jeV9JRAIAAAABXwUAAAAMVXNlcl9BZGRyZXNzBAAAABF1cGRhdGVfdXNlcl9mdW5kcwkAAGUAAAACBQAAAA9yZWFkX3VzZXJfZnVuZHMIBQAAAANwbXQAAAAGYW1vdW50BAAAACFyZWFkX3N0YXJ0X29yZGVyX3Blcm1pdF90aW1lc3RhbXAFAAAAFVN0YXJ0X09yZGVyX1RpbWVzdGFtcAQAAAAfcmVhZF9lbmRfb3JkZXJfcGVybWl0X3RpbWVzdGFtcAUAAAATRW5kX09yZGVyX1RpbWVzdGFtcAQAAAAZcmVhZF90b3RhbF9wb29sX2xpcXVpZGl0eQUAAAAUVG90YWxfUG9vbF9MaXF1aWRpdHkEAAAAGG5ld190b3RhbF9wb29sX2xpcXVpZGl0eQkAAGQAAAACBQAAABlyZWFkX3RvdGFsX3Bvb2xfbGlxdWlkaXR5CAUAAAADcG10AAAABmFtb3VudAQAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAD09wdGlvbkNvdW50ZXJJRAQAAAAST3Bpb25FeHBpcmVDb3VudGVyAAAAAAAAAAABBAAAABVPcHRpb25FeHBpcmVDb3VudGVySUQJAABkAAAAAgUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAEk9waW9uRXhwaXJlQ291bnRlcgQAAAAUUHJldmlvdXNPcHRpb25PcmRlcnMEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwIAAAATVG90YWxfT3B0aW9uX09yZGVycwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAABFUb3RhbE9wdGlvbk9yZGVycwkAAGQAAAACBQAAABRQcmV2aW91c09wdGlvbk9yZGVycwAAAAAAAAAAAQQAAAAnUHJldmlvdXNGdW5kc0FkZGVkSW5TcGVjaWZpY09wdGlvbk9yZGVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAiVG90YWxfRnVuZHNfQWRkZWRfSW5fT3B0aW9uX09yZGVyXwkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAACRUb3RhbEZ1bmRzQWRkZWRJblNwZWNpZmljT3B0aW9uT3JkZXIJAABkAAAAAgUAAAAnUHJldmlvdXNGdW5kc0FkZGVkSW5TcGVjaWZpY09wdGlvbk9yZGVyCAUAAAADcG10AAAABmFtb3VudAQAAAAlUHJldmlvdXNPcHRpb25PcmRlcnNpblNwZWNpZmljQ291bnRlcgQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAICAAAAFFRvdGFsX09wdGlvbl9PcmRlcnNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAIlRvdGFsT3B0aW9uT3JkZXJzaW5TcGVjaWZpY0NvdW50ZXIJAABkAAAAAgUAAAAlUHJldmlvdXNPcHRpb25PcmRlcnNpblNwZWNpZmljQ291bnRlcgAAAAAAAAAAAQQAAAAMUHJldmlvdXNDYWxsBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMCAAAAC1RvdGFsX0NhbGxzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAACVRvdGFsQ2FsbAkAAGQAAAACBQAAAAxQcmV2aW91c0NhbGwAAAAAAAAAAAEEAAAAHVByZXZpb3VzQ2FsbGluU3BlY2lmaWNDb3VudGVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAMVG90YWxfQ2FsbHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAGlRvdGFsQ2FsbGluU3BlY2lmaWNDb3VudGVyCQAAZAAAAAIFAAAAHVByZXZpb3VzQ2FsbGluU3BlY2lmaWNDb3VudGVyAAAAAAAAAAABBAAAABBQcmV2aW91c1VzZXJDYWxsBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAANY2FsbGVyYWRkcmVzcwIAAAAMX1RvdGFsX0NhbGxzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAADVRvdGFsVXNlckNhbGwJAABkAAAAAgUAAAAQUHJldmlvdXNVc2VyQ2FsbAAAAAAAAAAAAQQAAAAhUHJldmlvdXNVc2VyQ2FsbGluU3BlY2lmaWNDb3VudGVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACBQAAAA1jYWxsZXJhZGRyZXNzAgAAAA1fVG90YWxfQ2FsbHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAHlRvdGFsVXNlckNhbGxpblNwZWNpZmljQ291bnRlcgkAAGQAAAACBQAAACFQcmV2aW91c1VzZXJDYWxsaW5TcGVjaWZpY0NvdW50ZXIAAAAAAAAAAAEEAAAADUZ1bmRzX2F0X3Jpc2sFAAAACkhvdXNlX3Jpc2sDCQEAAAACIT0AAAACCAUAAAABaQAAAAZjYWxsZXIFAAAAEXdoaXRlbGlzdF9hZGRyZXNzCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACVUaGlzIEFkZHJlc3MgaXMgbm90IEF1dGhvcml6ZWQuIE9ubHkgCQAEJQAAAAEFAAAAEXdoaXRlbGlzdF9hZGRyZXNzAgAAACIgaXMgQXV0aG9yaXplZCBBZGRyZXNzIHRvIFNpZ24gaXQuAwkAAGYAAAACBQAAABhwcm9kdWN0X2xhdW5jaF90aW1lc3RhbXAIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAAAgAAAAEJAAEsAAAAAgUAAAAUcHJvZHVjdF9sYXVuY2hfZXJyb3IJAAGkAAAAAQUAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wAwkAAAAAAAACBQAAAA1PcmFjbGVfU3RhdHVzAgAAAAVDTE9TRQkAAAIAAAABBQAAABJjbG9zZWRfb3JhY2xlX2Vyb3IDCQAAAAAAAAIFAAAADWlmQmxhY2tsaXN0ZWQCAAAAA1llcwkAAAIAAAABCQABLAAAAAIFAAAADWNhbGxlcmFkZHJlc3MCAAAAPiBBZGRyZXNzIGlzIEJsYWNrbGlzdGVkLiBQbGVhc2UgY29udGFjdCBBZG1pbiB0byBXaGl0ZWxpc3QgaXQuAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAkAAAIAAAABAgAAAC5Pbmx5IFdBVkVTIGlzIGFsbG93ZWQgdG8gZGVwb3NpdCBhdCB0aGUgbW9tZW50AwkAAGcAAAACCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAAfcmVhZF9lbmRfb3JkZXJfcGVybWl0X3RpbWVzdGFtcAkAAAIAAAABAgAAAEdPcHRpb24gT3JkZXIgcGxhY2luZyBUaW1pbmcgTGltaXRzIGFyZSBPdmVyLiBQbGVhc2UgSm9pbiBpbiBOZXh0IEN5Y2xlLgMJAABmAAAAAgUAAAASbWluaW11bV9vcmRlcl9zaXplCAUAAAADcG10AAAABmFtb3VudAkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAgUGxhY2VkIE9yZGVyIFNpemUgaXMgbGVzcyB0aGFuIFsJAAGkAAAAAQUAAAASbWluaW11bV9vcmRlcl9zaXplAgAAAA0vMTBeOF0gV0FWRVMuAwkAAGYAAAACCAUAAAADcG10AAAABmFtb3VudAUAAAASbWF4aW11bV9vcmRlcl9zaXplCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACAgAAACBQbGFjZWQgT3JkZXIgU2l6ZSBpcyBtb3JlIHRoYW4gWwkAAaQAAAABBQAAABJtYXhpbXVtX29yZGVyX3NpemUCAAAADS8xMF44XSBXQVZFUy4DCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXVwZGF0ZV91c2VyX2Z1bmRzCQAAAgAAAAECAAAARFBsYWNlZCBPcmRlciBBbW91bnQgaXMgZ29pbmcgbmVnYXRpdmUuIFBsZWFzZSByZWR1Y2UgdGhlIE9yZGVyIFNpemUuCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgIAAAAIVXNlcl9JRF8FAAAADWNhbGxlcmFkZHJlc3MFAAAAB1VzZXJfSUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAtDdXJyZW5jeV9JRAIAAAABXwUAAAAMVXNlcl9BZGRyZXNzBQAAABF1cGRhdGVfdXNlcl9mdW5kcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAVDYWxsXwUAAAANY2FsbGVyYWRkcmVzcwIAAAABXwkAAaQAAAABBQAAAA1Ub3RhbFVzZXJDYWxsCQABpAAAAAEFAAAABVByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxDYWxsX0Ftb3VudF8FAAAADWNhbGxlcmFkZHJlc3MCAAAAAV8JAAGkAAAAAQUAAAANVG90YWxVc2VyQ2FsbAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAPQ2FsbF9TdGFydF9FbmRfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfCQABpAAAAAEFAAAADVRvdGFsVXNlckNhbGwJAAEsAAAAAgkAASwAAAACCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEAgAAAAFfCQABpAAAAAEFAAAAFU9wdGlvbkV4cGlyZUNvdW50ZXJJRAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAATVG90YWxfT3B0aW9uX09yZGVycwUAAAARVG90YWxPcHRpb25PcmRlcnMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAiVG90YWxfRnVuZHNfQWRkZWRfSW5fT3B0aW9uX09yZGVyXwkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAUAAAAkVG90YWxGdW5kc0FkZGVkSW5TcGVjaWZpY09wdGlvbk9yZGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABRUb3RhbF9Qb29sX0xpcXVpZGl0eQUAAAAYbmV3X3RvdGFsX3Bvb2xfbGlxdWlkaXR5CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAADkZ1bmRzX0F0X1Jpc2tfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAAA1GdW5kc19hdF9yaXNrCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAtDYWxsX0xpbWl0cwUAAAALQ2FsbF9MaW1pdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAClB1dF9MaW1pdHMFAAAAClB1dF9MaW1pdHMJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAUVG90YWxfT3B0aW9uX09yZGVyc18JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAIlRvdGFsT3B0aW9uT3JkZXJzaW5TcGVjaWZpY0NvdW50ZXIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAC1RvdGFsX0NhbGxzBQAAAAlUb3RhbENhbGwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAAMVG90YWxfQ2FsbHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAABpUb3RhbENhbGxpblNwZWNpZmljQ291bnRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAxfVG90YWxfQ2FsbHMFAAAADVRvdGFsVXNlckNhbGwJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAA1jYWxsZXJhZGRyZXNzAgAAAA1fVG90YWxfQ2FsbHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAAB5Ub3RhbFVzZXJDYWxsaW5TcGVjaWZpY0NvdW50ZXIFAAAAA25pbAAAAAFpAQAAAA5wbGFjZW9wdGlvblB1dAAAAAsAAAAUVG90YWxfUG9vbF9MaXF1aWRpdHkAAAAPT3B0aW9uQ291bnRlcklEAAAAB1VzZXJfSUQAAAAMVXNlcl9BZGRyZXNzAAAACkhvdXNlX3Jpc2sAAAAFUHJpY2UAAAALQ2FsbF9MaW1pdHMAAAAKUHV0X0xpbWl0cwAAAA1PcmFjbGVfU3RhdHVzAAAAFVN0YXJ0X09yZGVyX1RpbWVzdGFtcAAAABNFbmRfT3JkZXJfVGltZXN0YW1wBAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAA3BtdAMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABBQAAABBub19wYXltZW50X2Vycm9yBAAAAA1pZkJsYWNrbGlzdGVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAARYWRkcl9CTEFDS0xJU1RFRF8FAAAADWNhbGxlcmFkZHJlc3MEAAAAD3JlYWRfdXNlcl9mdW5kcwkBAAAAEUBleHRyTmF0aXZlKDEwNTUpAAAAAQkAASwAAAACCQABLAAAAAIFAAAAC0N1cnJlbmN5X0lEAgAAAAFfBQAAAAxVc2VyX0FkZHJlc3MEAAAAEXVwZGF0ZV91c2VyX2Z1bmRzCQAAZQAAAAIFAAAAD3JlYWRfdXNlcl9mdW5kcwgFAAAAA3BtdAAAAAZhbW91bnQEAAAAIXJlYWRfc3RhcnRfb3JkZXJfcGVybWl0X3RpbWVzdGFtcAUAAAAVU3RhcnRfT3JkZXJfVGltZXN0YW1wBAAAAB9yZWFkX2VuZF9vcmRlcl9wZXJtaXRfdGltZXN0YW1wBQAAABNFbmRfT3JkZXJfVGltZXN0YW1wBAAAABlyZWFkX3RvdGFsX3Bvb2xfbGlxdWlkaXR5BQAAABRUb3RhbF9Qb29sX0xpcXVpZGl0eQQAAAAYbmV3X3RvdGFsX3Bvb2xfbGlxdWlkaXR5CQAAZAAAAAIFAAAAGXJlYWRfdG90YWxfcG9vbF9saXF1aWRpdHkIBQAAAANwbXQAAAAGYW1vdW50BAAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAUAAAAPT3B0aW9uQ291bnRlcklEBAAAABJPcGlvbkV4cGlyZUNvdW50ZXIAAAAAAAAAAAEEAAAAFU9wdGlvbkV4cGlyZUNvdW50ZXJJRAkAAGQAAAACBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAUAAAAST3Bpb25FeHBpcmVDb3VudGVyBAAAABRQcmV2aW91c09wdGlvbk9yZGVycwQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAABNUb3RhbF9PcHRpb25fT3JkZXJzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAEVRvdGFsT3B0aW9uT3JkZXJzCQAAZAAAAAIFAAAAFFByZXZpb3VzT3B0aW9uT3JkZXJzAAAAAAAAAAABBAAAACdQcmV2aW91c0Z1bmRzQWRkZWRJblNwZWNpZmljT3B0aW9uT3JkZXIEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACAgAAACJUb3RhbF9GdW5kc19BZGRlZF9Jbl9PcHRpb25fT3JkZXJfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAJFRvdGFsRnVuZHNBZGRlZEluU3BlY2lmaWNPcHRpb25PcmRlcgkAAGQAAAACBQAAACdQcmV2aW91c0Z1bmRzQWRkZWRJblNwZWNpZmljT3B0aW9uT3JkZXIIBQAAAANwbXQAAAAGYW1vdW50BAAAACVQcmV2aW91c09wdGlvbk9yZGVyc2luU3BlY2lmaWNDb3VudGVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAAUVG90YWxfT3B0aW9uX09yZGVyc18JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAiVG90YWxPcHRpb25PcmRlcnNpblNwZWNpZmljQ291bnRlcgkAAGQAAAACBQAAACVQcmV2aW91c09wdGlvbk9yZGVyc2luU3BlY2lmaWNDb3VudGVyAAAAAAAAAAABBAAAAAtQcmV2aW91c1B1dAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAAApUb3RhbF9QdXRzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAACFRvdGFsUHV0CQAAZAAAAAIFAAAAC1ByZXZpb3VzUHV0AAAAAAAAAAABBAAAABxQcmV2aW91c1B1dGluU3BlY2lmaWNDb3VudGVyBAAAAAckbWF0Y2gwCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAALVG90YWxfUHV0c18JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAZVG90YWxQdXRpblNwZWNpZmljQ291bnRlcgkAAGQAAAACBQAAABxQcmV2aW91c1B1dGluU3BlY2lmaWNDb3VudGVyAAAAAAAAAAABBAAAAA9QcmV2aW91c1VzZXJQdXQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAtfVG90YWxfUHV0cwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhAAAAAAAAAAAABAAAAAxUb3RhbFVzZXJQdXQJAABkAAAAAgUAAAAPUHJldmlvdXNVc2VyUHV0AAAAAAAAAAABBAAAACBQcmV2aW91c1VzZXJQdXRpblNwZWNpZmljQ291bnRlcgQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgUAAAANY2FsbGVyYWRkcmVzcwIAAAAMX1RvdGFsX1B1dHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAHVRvdGFsVXNlclB1dGluU3BlY2lmaWNDb3VudGVyCQAAZAAAAAIFAAAAIFByZXZpb3VzVXNlclB1dGluU3BlY2lmaWNDb3VudGVyAAAAAAAAAAABBAAAAA1GdW5kc19hdF9yaXNrBQAAAApIb3VzZV9yaXNrAwkBAAAAAiE9AAAAAggFAAAAAWkAAAAGY2FsbGVyBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAlVGhpcyBBZGRyZXNzIGlzIG5vdCBBdXRob3JpemVkLiBPbmx5IAkABCUAAAABBQAAABF3aGl0ZWxpc3RfYWRkcmVzcwIAAAAiIGlzIEF1dGhvcml6ZWQgQWRkcmVzcyB0byBTaWduIGl0LgMJAABmAAAAAgUAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAAAIAAAABCQABLAAAAAIFAAAAFHByb2R1Y3RfbGF1bmNoX2Vycm9yCQABpAAAAAEFAAAAGHByb2R1Y3RfbGF1bmNoX3RpbWVzdGFtcAMJAAAAAAAAAgUAAAANT3JhY2xlX1N0YXR1cwIAAAAFQ0xPU0UJAAACAAAAAQUAAAASY2xvc2VkX29yYWNsZV9lcm9yAwkAAAAAAAACBQAAAA1pZkJsYWNrbGlzdGVkAgAAAANZZXMJAAACAAAAAQkAASwAAAACBQAAAA1jYWxsZXJhZGRyZXNzAgAAAD4gQWRkcmVzcyBpcyBCbGFja2xpc3RlZC4gUGxlYXNlIGNvbnRhY3QgQWRtaW4gdG8gV2hpdGVsaXN0IGl0LgMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAuT25seSBXQVZFUyBpcyBhbGxvd2VkIHRvIGRlcG9zaXQgYXQgdGhlIG1vbWVudAMJAABnAAAAAggFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAAH3JlYWRfZW5kX29yZGVyX3Blcm1pdF90aW1lc3RhbXAJAAACAAAAAQIAAABHT3B0aW9uIE9yZGVyIHBsYWNpbmcgVGltaW5nIExpbWl0cyBhcmUgT3Zlci4gUGxlYXNlIEpvaW4gaW4gTmV4dCBDeWNsZS4DCQAAZgAAAAIFAAAAEm1pbmltdW1fb3JkZXJfc2l6ZQgFAAAAA3BtdAAAAAZhbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAIFBsYWNlZCBPcmRlciBTaXplIGlzIGxlc3MgdGhhbiBbCQABpAAAAAEFAAAAEm1pbmltdW1fb3JkZXJfc2l6ZQIAAAANLzEwXjhdIFdBVkVTLgMJAABmAAAAAggFAAAAA3BtdAAAAAZhbW91bnQFAAAAEm1heGltdW1fb3JkZXJfc2l6ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAAgUGxhY2VkIE9yZGVyIFNpemUgaXMgbW9yZSB0aGFuIFsJAAGkAAAAAQUAAAASbWF4aW11bV9vcmRlcl9zaXplAgAAAA0vMTBeOF0gV0FWRVMuAwkAAGYAAAACAAAAAAAAAAAABQAAABF1cGRhdGVfdXNlcl9mdW5kcwkAAAIAAAABAgAAAERQbGFjZWQgT3JkZXIgQW1vdW50IGlzIGdvaW5nIG5lZ2F0aXZlLiBQbGVhc2UgcmVkdWNlIHRoZSBPcmRlciBTaXplLgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAICAAAACFVzZXJfSURfBQAAAA1jYWxsZXJhZGRyZXNzBQAAAAdVc2VyX0lECQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAALQ3VycmVuY3lfSUQCAAAAAV8FAAAADFVzZXJfQWRkcmVzcwUAAAARdXBkYXRlX3VzZXJfZnVuZHMJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEUHV0XwUAAAANY2FsbGVyYWRkcmVzcwIAAAABXwkAAaQAAAABBQAAAAxUb3RhbFVzZXJQdXQJAAGkAAAAAQUAAAAFUHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC1B1dF9BbW91bnRfBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAFfCQABpAAAAAEFAAAADFRvdGFsVXNlclB1dAgFAAAAA3BtdAAAAAZhbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAOUHV0X1N0YXJ0X0VuZF8FAAAADWNhbGxlcmFkZHJlc3MCAAAAAV8JAAGkAAAAAQUAAAAMVG90YWxVc2VyUHV0CQABLAAAAAIJAAEsAAAAAgkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAIAAAABXwkAAaQAAAABBQAAABVPcHRpb25FeHBpcmVDb3VudGVySUQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAE1RvdGFsX09wdGlvbl9PcmRlcnMFAAAAEVRvdGFsT3B0aW9uT3JkZXJzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAIlRvdGFsX0Z1bmRzX0FkZGVkX0luX09wdGlvbl9PcmRlcl8JAAGkAAAAAQUAAAAUcmVhZF9PcHRpb25Db3VudGVySUQFAAAAJFRvdGFsRnVuZHNBZGRlZEluU3BlY2lmaWNPcHRpb25PcmRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAUVG90YWxfUG9vbF9MaXF1aWRpdHkFAAAAGG5ld190b3RhbF9wb29sX2xpcXVpZGl0eQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAA5GdW5kc19BdF9SaXNrXwkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAUAAAANRnVuZHNfYXRfcmlzawkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAALQ2FsbF9MaW1pdHMFAAAAC0NhbGxfTGltaXRzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAApQdXRfTGltaXRzBQAAAApQdXRfTGltaXRzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAFFRvdGFsX09wdGlvbl9PcmRlcnNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAACJUb3RhbE9wdGlvbk9yZGVyc2luU3BlY2lmaWNDb3VudGVyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAApUb3RhbF9QdXRzBQAAAAhUb3RhbFB1dAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACAgAAAAtUb3RhbF9QdXRzXwkAAaQAAAABBQAAABRyZWFkX09wdGlvbkNvdW50ZXJJRAUAAAAZVG90YWxQdXRpblNwZWNpZmljQ291bnRlcgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACBQAAAA1jYWxsZXJhZGRyZXNzAgAAAAtfVG90YWxfUHV0cwUAAAAMVG90YWxVc2VyUHV0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAANY2FsbGVyYWRkcmVzcwIAAAAMX1RvdGFsX1B1dHNfCQABpAAAAAEFAAAAFHJlYWRfT3B0aW9uQ291bnRlcklEBQAAAB1Ub3RhbFVzZXJQdXRpblNwZWNpZmljQ291bnRlcgUAAAADbmlsAAAAAWkBAAAAEERlcG9zaXRVc2VyRnVuZHMAAAAABAAAAA1jYWxsZXJhZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAAA3BtdAMJAAAAAAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAkAAAIAAAABAgAAAElObyBwYXltZW50IGF0dGFjaGVkLCBQbGVhc2UgQXR0YWNoIG9ubHkgV2hpdGVsaXN0ZWQgVG9rZW5zIGluIHBheW1lbnRbMV0uBAAAAA1pZkJsYWNrbGlzdGVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAARYWRkcl9CTEFDS0xJU1RFRF8FAAAADWNhbGxlcmFkZHJlc3MEAAAAE1ByZXZpb3VzVXNlckRlcG9zaXQEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIFAAAAC0N1cnJlbmN5X0lEAgAAAAFfBQAAAA1jYWxsZXJhZGRyZXNzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEAAAAAAAAAAAAEAAAAEFRvdGFsVXNlckRlcG9zaXQJAABkAAAAAgUAAAATUHJldmlvdXNVc2VyRGVwb3NpdAgFAAAAA3BtdAAAAAZhbW91bnQEAAAAGFByZXZpb3VzRGVwb3NpdENvdW50ZXJJRAQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzAgAAABJEZXBvc2l0X0NvdW50ZXJfSUQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAVVG90YWxEZXBvc2l0Q291bnRlcklECQAAZAAAAAIFAAAAGFByZXZpb3VzRGVwb3NpdENvdW50ZXJJRAAAAAAAAAAAAQMJAABmAAAAAgUAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAAAIAAAABCQABLAAAAAIFAAAAFHByb2R1Y3RfbGF1bmNoX2Vycm9yCQABpAAAAAEFAAAAGHByb2R1Y3RfbGF1bmNoX3RpbWVzdGFtcAMJAAAAAAAAAgUAAAANaWZCbGFja2xpc3RlZAIAAAADWWVzCQAAAgAAAAEJAAEsAAAAAgUAAAANY2FsbGVyYWRkcmVzcwIAAAA+IEFkZHJlc3MgaXMgQmxhY2tsaXN0ZWQuIFBsZWFzZSBjb250YWN0IEFkbWluIHRvIFdoaXRlbGlzdCBpdC4DCQEAAAAJaXNEZWZpbmVkAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkCQAAAgAAAAECAAAALk9ubHkgV0FWRVMgaXMgYWxsb3dlZCB0byBkZXBvc2l0IGF0IHRoZSBtb21lbnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAtDdXJyZW5jeV9JRAIAAAABXwUAAAANY2FsbGVyYWRkcmVzcwUAAAAQVG90YWxVc2VyRGVwb3NpdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABpAAAAAEFAAAAFVRvdGFsRGVwb3NpdENvdW50ZXJJRAIAAAABXwUAAAALQ3VycmVuY3lfSUQCAAAAAV8FAAAADWNhbGxlcmFkZHJlc3MIBQAAAANwbXQAAAAGYW1vdW50CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABJEZXBvc2l0X0NvdW50ZXJfSUQFAAAAFVRvdGFsRGVwb3NpdENvdW50ZXJJRAUAAAADbmlsAAAAAWkBAAAAEEJsYWNrTGlzdEFkZHJlc3MAAAABAAAAC1VzZXJBZGRyZXNzBAAAAA1pZkJsYWNrbGlzdGVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAARYWRkcl9CTEFDS0xJU1RFRF8FAAAAC1VzZXJBZGRyZXNzBAAAABhQcmV2aW91c0JsYWNrTGlzdEFkZHJlc3MEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwIAAAAaVG90YWxfQmxhY2tfTGlzdGVkX0FkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAVVG90YWxCbGFja0xpc3RBZGRyZXNzCQAAZAAAAAIFAAAAGFByZXZpb3VzQmxhY2tMaXN0QWRkcmVzcwAAAAAAAAAAAQMJAABmAAAAAgUAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAAAIAAAABCQABLAAAAAIFAAAAFHByb2R1Y3RfbGF1bmNoX2Vycm9yCQABpAAAAAEFAAAAGHByb2R1Y3RfbGF1bmNoX3RpbWVzdGFtcAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAARd2hpdGVsaXN0X2FkZHJlc3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAJVRoaXMgQWRkcmVzcyBpcyBub3QgQXV0aG9yaXplZC4gT25seSAJAAQlAAAAAQUAAAARd2hpdGVsaXN0X2FkZHJlc3MCAAAAIiBpcyBBdXRob3JpemVkIEFkZHJlc3MgdG8gU2lnbiBpdC4DCQAAAAAAAAIFAAAADWlmQmxhY2tsaXN0ZWQCAAAAA1llcwkAAAIAAAABAgAAACpBZGRyZXNzIGlzIGFscmVhZHkgYXZhaWxhYmxlIGluIEJsYWNrbGlzdC4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACAgAAABFhZGRyX0JMQUNLTElTVEVEXwUAAAALVXNlckFkZHJlc3MCAAAAA1llcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAaVG90YWxfQmxhY2tfTGlzdGVkX0FkZHJlc3MFAAAAFVRvdGFsQmxhY2tMaXN0QWRkcmVzcwUAAAADbmlsAAAAAWkBAAAAFkRlbGV0ZUJsYWNrTGlzdEFkZHJlc3MAAAABAAAAC1VzZXJBZGRyZXNzBAAAAA1pZkJsYWNrbGlzdGVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgIAAAARYWRkcl9CTEFDS0xJU1RFRF8FAAAAC1VzZXJBZGRyZXNzBAAAABhQcmV2aW91c0JsYWNrTGlzdEFkZHJlc3MEAAAAByRtYXRjaDAJAAQaAAAAAgUAAAAEdGhpcwIAAAAaVG90YWxfQmxhY2tfTGlzdGVkX0FkZHJlc3MDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAAVVG90YWxCbGFja0xpc3RBZGRyZXNzCQAAZQAAAAIFAAAAGFByZXZpb3VzQmxhY2tMaXN0QWRkcmVzcwAAAAAAAAAAAQMJAABmAAAAAgUAAAAYcHJvZHVjdF9sYXVuY2hfdGltZXN0YW1wCAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkAAAIAAAABCQABLAAAAAICAAAAI1Byb2R1Y3QgTGF1bmNoIFRpbWVzdGFtcCBpcyBzZXQgYXQgCQABpAAAAAEFAAAAGHByb2R1Y3RfbGF1bmNoX3RpbWVzdGFtcAMJAQAAAAIhPQAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAARd2hpdGVsaXN0X2FkZHJlc3MJAAACAAAAAQkAASwAAAACCQABLAAAAAICAAAAJVRoaXMgQWRkcmVzcyBpcyBub3QgQXV0aG9yaXplZC4gT25seSAJAAQlAAAAAQUAAAARd2hpdGVsaXN0X2FkZHJlc3MCAAAAIiBpcyBBdXRob3JpemVkIEFkZHJlc3MgdG8gU2lnbiBpdC4DCQAAAAAAAAIFAAAADWlmQmxhY2tsaXN0ZWQCAAAAA1llcwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAICAAAAEWFkZHJfQkxBQ0tMSVNURURfBQAAAAtVc2VyQWRkcmVzcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAaVG90YWxfQmxhY2tfTGlzdGVkX0FkZHJlc3MFAAAAFVRvdGFsQmxhY2tMaXN0QWRkcmVzcwUAAAADbmlsCQAAAgAAAAECAAAAJkFkZHJlc3MgaXMgbm90IGF2YWlsYWJsZSBpbiBCbGFja2xpc3QuAAAAAWkBAAAACERlbEVudHJ5AAAABQAAAAJFMQAAAAJFMgAAAAJFMwAAAAJFNAAAAAJFNQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAJFMQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAJFMgkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAJFMwkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAJFNAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABBQAAAAJFNQUAAAADbmlsAAAAAAyV4s8=", "height": 2622297, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 81KxkaW8SaWYB5tjG9SRLXYqYxsX9N9ETpj5hEebaqv2 Next: GaHv2467ftQRywbBcJ1QTQtBC9NGM7Sr2SBzQ2f4UJ8q Diff:
OldNewDifferences
44 let Dapp_Address_pub_key = base58'BmV3aPhqkjNgu3zD3rx1oaWTnPqgB8uRBQuvYjpYWtTu'
55
66 let product_launch_timestamp = 1675209600000
7+
8+let Currency_ID = "WAVES"
79
810 let product_launch_error = "Product Launch Timestamp is set at "
911
1820 let maximum_order_size = 10000000000
1921
2022 @Callable(i)
21-func placeoptionCall (Total_Pool_Liquidity,OptionCounterID,User_ID,House_risk,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
23+func placeoptionCall (Total_Pool_Liquidity,OptionCounterID,User_ID,User_Address,House_risk,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
2224 let calleraddress = toBase58String(i.caller.bytes)
2325 let pmt = if ((size(i.payments) == 1))
2426 then i.payments[0]
2527 else throw(no_payment_error)
2628 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + calleraddress))
29+ let read_user_funds = getIntegerValue(((Currency_ID + "_") + User_Address))
30+ let update_user_funds = (read_user_funds - pmt.amount)
2731 let read_start_order_permit_timestamp = Start_Order_Timestamp
2832 let read_end_order_permit_timestamp = End_Order_Timestamp
2933 let read_total_pool_liquidity = Total_Pool_Liquidity
97101 then throw((("Placed Order Size is less than [" + toString(minimum_order_size)) + "/10^8] WAVES."))
98102 else if ((pmt.amount > maximum_order_size))
99103 then throw((("Placed Order Size is more than [" + toString(maximum_order_size)) + "/10^8] WAVES."))
100- else [StringEntry(("User_ID_" + calleraddress), User_ID), StringEntry(((("Call_" + calleraddress) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + calleraddress) + "_") + toString(TotalUserCall)), pmt.amount), StringEntry(((("Call_Start_End_" + calleraddress) + "_") + 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", new_total_pool_liquidity), 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((calleraddress + "_Total_Calls"), TotalUserCall), IntegerEntry(((calleraddress + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter)]
104+ else if ((0 > update_user_funds))
105+ then throw("Placed Order Amount is going negative. Please reduce the Order Size.")
106+ else [StringEntry(("User_ID_" + calleraddress), User_ID), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), StringEntry(((("Call_" + calleraddress) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + calleraddress) + "_") + toString(TotalUserCall)), pmt.amount), StringEntry(((("Call_Start_End_" + calleraddress) + "_") + 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", new_total_pool_liquidity), 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((calleraddress + "_Total_Calls"), TotalUserCall), IntegerEntry(((calleraddress + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter)]
101107 }
102108
103109
104110
105111 @Callable(i)
106-func placeoptionPut (Total_Pool_Liquidity,OptionCounterID,User_ID,House_risk,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
112+func placeoptionPut (Total_Pool_Liquidity,OptionCounterID,User_ID,User_Address,House_risk,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
107113 let calleraddress = toBase58String(i.caller.bytes)
108114 let pmt = if ((size(i.payments) == 1))
109115 then i.payments[0]
110116 else throw(no_payment_error)
111117 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + calleraddress))
118+ let read_user_funds = getIntegerValue(((Currency_ID + "_") + User_Address))
119+ let update_user_funds = (read_user_funds - pmt.amount)
112120 let read_start_order_permit_timestamp = Start_Order_Timestamp
113121 let read_end_order_permit_timestamp = End_Order_Timestamp
114122 let read_total_pool_liquidity = Total_Pool_Liquidity
182190 then throw((("Placed Order Size is less than [" + toString(minimum_order_size)) + "/10^8] WAVES."))
183191 else if ((pmt.amount > maximum_order_size))
184192 then throw((("Placed Order Size is more than [" + toString(maximum_order_size)) + "/10^8] WAVES."))
185- else [StringEntry(("User_ID_" + calleraddress), User_ID), StringEntry(((("Put_" + calleraddress) + "_") + toString(TotalUserPut)), toString(Price)), IntegerEntry(((("Put_Amount_" + calleraddress) + "_") + toString(TotalUserPut)), pmt.amount), StringEntry(((("Put_Start_End_" + calleraddress) + "_") + 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", new_total_pool_liquidity), 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((calleraddress + "_Total_Puts"), TotalUserPut), IntegerEntry(((calleraddress + "_Total_Puts_") + toString(read_OptionCounterID)), TotalUserPutinSpecificCounter)]
193+ else if ((0 > update_user_funds))
194+ then throw("Placed Order Amount is going negative. Please reduce the Order Size.")
195+ else [StringEntry(("User_ID_" + calleraddress), User_ID), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), StringEntry(((("Put_" + calleraddress) + "_") + toString(TotalUserPut)), toString(Price)), IntegerEntry(((("Put_Amount_" + calleraddress) + "_") + toString(TotalUserPut)), pmt.amount), StringEntry(((("Put_Start_End_" + calleraddress) + "_") + 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", new_total_pool_liquidity), 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((calleraddress + "_Total_Puts"), TotalUserPut), IntegerEntry(((calleraddress + "_Total_Puts_") + toString(read_OptionCounterID)), TotalUserPutinSpecificCounter)]
186196 }
187197
188198
190200 @Callable(i)
191201 func DepositUserFunds () = {
192202 let calleraddress = toBase58String(i.caller.bytes)
193- let Currency_ID = "WAVES"
194203 let pmt = if ((size(i.payments) == 1))
195204 then i.payments[0]
196205 else throw("No payment attached, Please Attach only Whitelisted Tokens in payment[1].")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Dapp_Address_pub_key = base58'BmV3aPhqkjNgu3zD3rx1oaWTnPqgB8uRBQuvYjpYWtTu'
55
66 let product_launch_timestamp = 1675209600000
7+
8+let Currency_ID = "WAVES"
79
810 let product_launch_error = "Product Launch Timestamp is set at "
911
1012 let no_payment_error = "No payment attached, Please Attach Token in payment[1]."
1113
1214 let closed_oracle_eror = "Oracle is closed. Wait Until Oracle is Turned On."
1315
1416 let whitelist_address = addressFromPublicKey(Dapp_Address_pub_key)
1517
1618 let minimum_order_size = 10000000
1719
1820 let maximum_order_size = 10000000000
1921
2022 @Callable(i)
21-func placeoptionCall (Total_Pool_Liquidity,OptionCounterID,User_ID,House_risk,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
23+func placeoptionCall (Total_Pool_Liquidity,OptionCounterID,User_ID,User_Address,House_risk,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
2224 let calleraddress = toBase58String(i.caller.bytes)
2325 let pmt = if ((size(i.payments) == 1))
2426 then i.payments[0]
2527 else throw(no_payment_error)
2628 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + calleraddress))
29+ let read_user_funds = getIntegerValue(((Currency_ID + "_") + User_Address))
30+ let update_user_funds = (read_user_funds - pmt.amount)
2731 let read_start_order_permit_timestamp = Start_Order_Timestamp
2832 let read_end_order_permit_timestamp = End_Order_Timestamp
2933 let read_total_pool_liquidity = Total_Pool_Liquidity
3034 let new_total_pool_liquidity = (read_total_pool_liquidity + pmt.amount)
3135 let read_OptionCounterID = OptionCounterID
3236 let OpionExpireCounter = 1
3337 let OptionExpireCounterID = (read_OptionCounterID + OpionExpireCounter)
3438 let PreviousOptionOrders = match getInteger(this, "Total_Option_Orders") {
3539 case a: Int =>
3640 a
3741 case _ =>
3842 0
3943 }
4044 let TotalOptionOrders = (PreviousOptionOrders + 1)
4145 let PreviousFundsAddedInSpecificOptionOrder = match getInteger(this, ("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID))) {
4246 case a: Int =>
4347 a
4448 case _ =>
4549 0
4650 }
4751 let TotalFundsAddedInSpecificOptionOrder = (PreviousFundsAddedInSpecificOptionOrder + pmt.amount)
4852 let PreviousOptionOrdersinSpecificCounter = match getInteger(this, ("Total_Option_Orders_" + toString(read_OptionCounterID))) {
4953 case a: Int =>
5054 a
5155 case _ =>
5256 0
5357 }
5458 let TotalOptionOrdersinSpecificCounter = (PreviousOptionOrdersinSpecificCounter + 1)
5559 let PreviousCall = match getInteger(this, "Total_Calls") {
5660 case a: Int =>
5761 a
5862 case _ =>
5963 0
6064 }
6165 let TotalCall = (PreviousCall + 1)
6266 let PreviousCallinSpecificCounter = match getInteger(this, ("Total_Calls_" + toString(read_OptionCounterID))) {
6367 case a: Int =>
6468 a
6569 case _ =>
6670 0
6771 }
6872 let TotalCallinSpecificCounter = (PreviousCallinSpecificCounter + 1)
6973 let PreviousUserCall = match getInteger(this, (calleraddress + "_Total_Calls")) {
7074 case a: Int =>
7175 a
7276 case _ =>
7377 0
7478 }
7579 let TotalUserCall = (PreviousUserCall + 1)
7680 let PreviousUserCallinSpecificCounter = match getInteger(this, ((calleraddress + "_Total_Calls_") + toString(read_OptionCounterID))) {
7781 case a: Int =>
7882 a
7983 case _ =>
8084 0
8185 }
8286 let TotalUserCallinSpecificCounter = (PreviousUserCallinSpecificCounter + 1)
8387 let Funds_at_risk = House_risk
8488 if ((i.caller != whitelist_address))
8589 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
8690 else if ((product_launch_timestamp > lastBlock.timestamp))
8791 then throw((product_launch_error + toString(product_launch_timestamp)))
8892 else if ((Oracle_Status == "CLOSE"))
8993 then throw(closed_oracle_eror)
9094 else if ((ifBlacklisted == "Yes"))
9195 then throw((calleraddress + " Address is Blacklisted. Please contact Admin to Whitelist it."))
9296 else if (isDefined(pmt.assetId))
9397 then throw("Only WAVES is allowed to deposit at the moment")
9498 else if ((lastBlock.timestamp >= read_end_order_permit_timestamp))
9599 then throw("Option Order placing Timing Limits are Over. Please Join in Next Cycle.")
96100 else if ((minimum_order_size > pmt.amount))
97101 then throw((("Placed Order Size is less than [" + toString(minimum_order_size)) + "/10^8] WAVES."))
98102 else if ((pmt.amount > maximum_order_size))
99103 then throw((("Placed Order Size is more than [" + toString(maximum_order_size)) + "/10^8] WAVES."))
100- else [StringEntry(("User_ID_" + calleraddress), User_ID), StringEntry(((("Call_" + calleraddress) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + calleraddress) + "_") + toString(TotalUserCall)), pmt.amount), StringEntry(((("Call_Start_End_" + calleraddress) + "_") + 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", new_total_pool_liquidity), 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((calleraddress + "_Total_Calls"), TotalUserCall), IntegerEntry(((calleraddress + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter)]
104+ else if ((0 > update_user_funds))
105+ then throw("Placed Order Amount is going negative. Please reduce the Order Size.")
106+ else [StringEntry(("User_ID_" + calleraddress), User_ID), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), StringEntry(((("Call_" + calleraddress) + "_") + toString(TotalUserCall)), toString(Price)), IntegerEntry(((("Call_Amount_" + calleraddress) + "_") + toString(TotalUserCall)), pmt.amount), StringEntry(((("Call_Start_End_" + calleraddress) + "_") + 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", new_total_pool_liquidity), 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((calleraddress + "_Total_Calls"), TotalUserCall), IntegerEntry(((calleraddress + "_Total_Calls_") + toString(read_OptionCounterID)), TotalUserCallinSpecificCounter)]
101107 }
102108
103109
104110
105111 @Callable(i)
106-func placeoptionPut (Total_Pool_Liquidity,OptionCounterID,User_ID,House_risk,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
112+func placeoptionPut (Total_Pool_Liquidity,OptionCounterID,User_ID,User_Address,House_risk,Price,Call_Limits,Put_Limits,Oracle_Status,Start_Order_Timestamp,End_Order_Timestamp) = {
107113 let calleraddress = toBase58String(i.caller.bytes)
108114 let pmt = if ((size(i.payments) == 1))
109115 then i.payments[0]
110116 else throw(no_payment_error)
111117 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + calleraddress))
118+ let read_user_funds = getIntegerValue(((Currency_ID + "_") + User_Address))
119+ let update_user_funds = (read_user_funds - pmt.amount)
112120 let read_start_order_permit_timestamp = Start_Order_Timestamp
113121 let read_end_order_permit_timestamp = End_Order_Timestamp
114122 let read_total_pool_liquidity = Total_Pool_Liquidity
115123 let new_total_pool_liquidity = (read_total_pool_liquidity + pmt.amount)
116124 let read_OptionCounterID = OptionCounterID
117125 let OpionExpireCounter = 1
118126 let OptionExpireCounterID = (read_OptionCounterID + OpionExpireCounter)
119127 let PreviousOptionOrders = match getInteger(this, "Total_Option_Orders") {
120128 case a: Int =>
121129 a
122130 case _ =>
123131 0
124132 }
125133 let TotalOptionOrders = (PreviousOptionOrders + 1)
126134 let PreviousFundsAddedInSpecificOptionOrder = match getInteger(this, ("Total_Funds_Added_In_Option_Order_" + toString(read_OptionCounterID))) {
127135 case a: Int =>
128136 a
129137 case _ =>
130138 0
131139 }
132140 let TotalFundsAddedInSpecificOptionOrder = (PreviousFundsAddedInSpecificOptionOrder + pmt.amount)
133141 let PreviousOptionOrdersinSpecificCounter = match getInteger(this, ("Total_Option_Orders_" + toString(read_OptionCounterID))) {
134142 case a: Int =>
135143 a
136144 case _ =>
137145 0
138146 }
139147 let TotalOptionOrdersinSpecificCounter = (PreviousOptionOrdersinSpecificCounter + 1)
140148 let PreviousPut = match getInteger(this, "Total_Puts") {
141149 case a: Int =>
142150 a
143151 case _ =>
144152 0
145153 }
146154 let TotalPut = (PreviousPut + 1)
147155 let PreviousPutinSpecificCounter = match getInteger(this, ("Total_Puts_" + toString(read_OptionCounterID))) {
148156 case a: Int =>
149157 a
150158 case _ =>
151159 0
152160 }
153161 let TotalPutinSpecificCounter = (PreviousPutinSpecificCounter + 1)
154162 let PreviousUserPut = match getInteger(this, (calleraddress + "_Total_Puts")) {
155163 case a: Int =>
156164 a
157165 case _ =>
158166 0
159167 }
160168 let TotalUserPut = (PreviousUserPut + 1)
161169 let PreviousUserPutinSpecificCounter = match getInteger(this, ((calleraddress + "_Total_Puts_") + toString(read_OptionCounterID))) {
162170 case a: Int =>
163171 a
164172 case _ =>
165173 0
166174 }
167175 let TotalUserPutinSpecificCounter = (PreviousUserPutinSpecificCounter + 1)
168176 let Funds_at_risk = House_risk
169177 if ((i.caller != whitelist_address))
170178 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
171179 else if ((product_launch_timestamp > lastBlock.timestamp))
172180 then throw((product_launch_error + toString(product_launch_timestamp)))
173181 else if ((Oracle_Status == "CLOSE"))
174182 then throw(closed_oracle_eror)
175183 else if ((ifBlacklisted == "Yes"))
176184 then throw((calleraddress + " Address is Blacklisted. Please contact Admin to Whitelist it."))
177185 else if (isDefined(pmt.assetId))
178186 then throw("Only WAVES is allowed to deposit at the moment")
179187 else if ((lastBlock.timestamp >= read_end_order_permit_timestamp))
180188 then throw("Option Order placing Timing Limits are Over. Please Join in Next Cycle.")
181189 else if ((minimum_order_size > pmt.amount))
182190 then throw((("Placed Order Size is less than [" + toString(minimum_order_size)) + "/10^8] WAVES."))
183191 else if ((pmt.amount > maximum_order_size))
184192 then throw((("Placed Order Size is more than [" + toString(maximum_order_size)) + "/10^8] WAVES."))
185- else [StringEntry(("User_ID_" + calleraddress), User_ID), StringEntry(((("Put_" + calleraddress) + "_") + toString(TotalUserPut)), toString(Price)), IntegerEntry(((("Put_Amount_" + calleraddress) + "_") + toString(TotalUserPut)), pmt.amount), StringEntry(((("Put_Start_End_" + calleraddress) + "_") + 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", new_total_pool_liquidity), 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((calleraddress + "_Total_Puts"), TotalUserPut), IntegerEntry(((calleraddress + "_Total_Puts_") + toString(read_OptionCounterID)), TotalUserPutinSpecificCounter)]
193+ else if ((0 > update_user_funds))
194+ then throw("Placed Order Amount is going negative. Please reduce the Order Size.")
195+ else [StringEntry(("User_ID_" + calleraddress), User_ID), IntegerEntry(((Currency_ID + "_") + User_Address), update_user_funds), StringEntry(((("Put_" + calleraddress) + "_") + toString(TotalUserPut)), toString(Price)), IntegerEntry(((("Put_Amount_" + calleraddress) + "_") + toString(TotalUserPut)), pmt.amount), StringEntry(((("Put_Start_End_" + calleraddress) + "_") + 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", new_total_pool_liquidity), 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((calleraddress + "_Total_Puts"), TotalUserPut), IntegerEntry(((calleraddress + "_Total_Puts_") + toString(read_OptionCounterID)), TotalUserPutinSpecificCounter)]
186196 }
187197
188198
189199
190200 @Callable(i)
191201 func DepositUserFunds () = {
192202 let calleraddress = toBase58String(i.caller.bytes)
193- let Currency_ID = "WAVES"
194203 let pmt = if ((size(i.payments) == 1))
195204 then i.payments[0]
196205 else throw("No payment attached, Please Attach only Whitelisted Tokens in payment[1].")
197206 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + calleraddress))
198207 let PreviousUserDeposit = match getInteger(this, ((Currency_ID + "_") + calleraddress)) {
199208 case a: Int =>
200209 a
201210 case _ =>
202211 0
203212 }
204213 let TotalUserDeposit = (PreviousUserDeposit + pmt.amount)
205214 let PreviousDepositCounterID = match getInteger(this, "Deposit_Counter_ID") {
206215 case a: Int =>
207216 a
208217 case _ =>
209218 0
210219 }
211220 let TotalDepositCounterID = (PreviousDepositCounterID + 1)
212221 if ((product_launch_timestamp > lastBlock.timestamp))
213222 then throw((product_launch_error + toString(product_launch_timestamp)))
214223 else if ((ifBlacklisted == "Yes"))
215224 then throw((calleraddress + " Address is Blacklisted. Please contact Admin to Whitelist it."))
216225 else if (isDefined(pmt.assetId))
217226 then throw("Only WAVES is allowed to deposit at the moment")
218227 else [IntegerEntry(((Currency_ID + "_") + calleraddress), TotalUserDeposit), IntegerEntry(((((toString(TotalDepositCounterID) + "_") + Currency_ID) + "_") + calleraddress), pmt.amount), IntegerEntry("Deposit_Counter_ID", TotalDepositCounterID)]
219228 }
220229
221230
222231
223232 @Callable(i)
224233 func BlackListAddress (UserAddress) = {
225234 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + UserAddress))
226235 let PreviousBlackListAddress = match getInteger(this, "Total_Black_Listed_Address") {
227236 case a: Int =>
228237 a
229238 case _ =>
230239 0
231240 }
232241 let TotalBlackListAddress = (PreviousBlackListAddress + 1)
233242 if ((product_launch_timestamp > lastBlock.timestamp))
234243 then throw((product_launch_error + toString(product_launch_timestamp)))
235244 else if ((i.caller != whitelist_address))
236245 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
237246 else if ((ifBlacklisted == "Yes"))
238247 then throw("Address is already available in Blacklist.")
239248 else [StringEntry(("addr_BLACKLISTED_" + UserAddress), "Yes"), IntegerEntry("Total_Black_Listed_Address", TotalBlackListAddress)]
240249 }
241250
242251
243252
244253 @Callable(i)
245254 func DeleteBlackListAddress (UserAddress) = {
246255 let ifBlacklisted = getString(this, ("addr_BLACKLISTED_" + UserAddress))
247256 let PreviousBlackListAddress = match getInteger(this, "Total_Black_Listed_Address") {
248257 case a: Int =>
249258 a
250259 case _ =>
251260 0
252261 }
253262 let TotalBlackListAddress = (PreviousBlackListAddress - 1)
254263 if ((product_launch_timestamp > lastBlock.timestamp))
255264 then throw(("Product Launch Timestamp is set at " + toString(product_launch_timestamp)))
256265 else if ((i.caller != whitelist_address))
257266 then throw((("This Address is not Authorized. Only " + toString(whitelist_address)) + " is Authorized Address to Sign it."))
258267 else if ((ifBlacklisted == "Yes"))
259268 then [DeleteEntry(("addr_BLACKLISTED_" + UserAddress)), IntegerEntry("Total_Black_Listed_Address", TotalBlackListAddress)]
260269 else throw("Address is not available in Blacklist.")
261270 }
262271
263272
264273
265274 @Callable(i)
266275 func DelEntry (E1,E2,E3,E4,E5) = [DeleteEntry(E1), DeleteEntry(E2), DeleteEntry(E3), DeleteEntry(E4), DeleteEntry(E5)]
267276
268277

github/deemru/w8io/026f985 
58.59 ms