tx · 61p1TQGeS3YyjJ3yAhWVrXigZcGn1roUPuKYTfD6T2AP

3Mwx228RAk1rkDAtxyd5Zp8XVGJsbcvpewR:  -0.02900000 Waves

2023.02.21 15:52 [2459436] smart account 3Mwx228RAk1rkDAtxyd5Zp8XVGJsbcvpewR > SELF 0.00000000 Waves

{ "type": 13, "id": "61p1TQGeS3YyjJ3yAhWVrXigZcGn1roUPuKYTfD6T2AP", "fee": 2900000, "feeAssetId": null, "timestamp": 1676983964340, "version": 1, "sender": "3Mwx228RAk1rkDAtxyd5Zp8XVGJsbcvpewR", "senderPublicKey": "7LtLPpYjVJQYuVoHoauJnaQAAE8Qs8cC681mnvgDK21m", "proofs": [ "4YGivgmNxRwU3dPcYJfqxjQS5MaeEJrecAx9nyhMr5xpHaYXovkfZv69KFCtwWmQnR7rfpCrEHv65R9zHM9FHiLR" ], "script": "base64:AAIFAAAAAAAAADQIAhIDCgEIEgkKBwgICAgBCAgSAwoBARIAEgASBQoDCAgIEgQKAggBEgMKAQgSAwoBCBIAAAAAOQAAAAADU0VQAgAAAAJfXwAAAAAFRU1QVFkCAAAAAAEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkBAAAAEGdldEJvb2xlYW5PckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAABBtYW5hZ2VyUHVibGljS2V5BQAAAANuaWwFAAAAA1NFUAEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAACQAEuQAAAAIJAARMAAAAAgIAAAACJXMJAARMAAAAAgIAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAUAAAADU0VQAQAAAA5mYWlsRXhlY3V0ZUdldAAAAAQAAAADbXNnAAAADGJhc2VBc3NldFN0cgAAAA51c2VyQWRkcmVzc1N0cgAAAApnZXRUeElkU3RyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAA21zZwIAAAAPOiBiYXNlQXNzZXRTdHI9BQAAAAxiYXNlQXNzZXRTdHICAAAAECB1c2VyQWRkcmVzc1N0cj0FAAAADnVzZXJBZGRyZXNzU3RyAgAAAAwgZ2V0VHhJZFN0cj0FAAAACmdldFR4SWRTdHIBAAAAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QAAAAACQAEuQAAAAIJAARMAAAAAgIAAAACJXMJAARMAAAAAgIAAAATYXNzZXRzU3RvcmVDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAAC2tleUFzc2V0Q2ZnAAAAAQAAAAxiYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAXJXMlcyVzX19jb25maWdfX2Fzc2V0X18FAAAADGJhc2VBc3NldFN0cgEAAAAPa2V5UHJveHlBZGRyZXNzAAAAAQAAAAdhc3NldElkCQAEuQAAAAIJAARMAAAAAgIAAAAEJXMlcwkABEwAAAACAgAAAAxwcm94eUFkZHJlc3MJAARMAAAAAgUAAAAHYXNzZXRJZAUAAAADbmlsBQAAAANTRVABAAAACmtleUJhbGFuY2UAAAABAAAAB2Fzc2V0SWQJAAS5AAAAAgkABEwAAAACAgAAAAQlcyVzCQAETAAAAAICAAAAB2JhbGFuY2UJAARMAAAAAgUAAAAHYXNzZXRJZAUAAAADbmlsBQAAAANTRVABAAAAFmtleU5leHRJbnRlcm5hbEFzc2V0SWQAAAAAAgAAABclc19fbmV4dEludGVybmFsQXNzZXRJZAEAAAAMa2V5UHJpY2VMYXN0AAAAAQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIJAAEsAAAAAgIAAAAVJXMlcyVkX19wcmljZV9fbGFzdF9fBQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIBAAAAEmtleVRvcFVwTGFzdEhlaWdodAAAAAIAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyAAAABnNlbmRlcgkABLkAAAACCQAETAAAAAICAAAAHyVzJXMlcyVkJXNfX3RvcHVwX19sYXN0X19oZWlnaHQJAARMAAAAAgUAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyCQAETAAAAAIFAAAABnNlbmRlcgUAAAADbmlsBQAAAANTRVABAAAAD2tleVByaWNlSGlzdG9yeQAAAAMAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyAAAAAWgAAAAJdGltZXN0YW1wCQAEuQAAAAIJAARMAAAAAgIAAAAaJXMlcyVkJWQlZF9fcHJpY2VfX2hpc3RvcnkJAARMAAAAAgUAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyCQAETAAAAAIJAAGkAAAAAQUAAAABaAkABEwAAAACCQABpAAAAAEFAAAACXRpbWVzdGFtcAUAAAADbmlsBQAAAANTRVABAAAADmtleVRvdGFsTG9ja2VkAAAAAQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIJAAEsAAAAAgIAAAAXJXMlcyVkX190b3RhbF9fbG9ja2VkX18FAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgEAAAAUa2V5VG90YWxMb2NrZWRCeVVzZXIAAAACAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAADnVzZXJBZGRyZXNzU3RyCQAEuQAAAAIJAARMAAAAAgIAAAAXJXMlcyVkJXNfX3RvdGFsX19sb2NrZWQJAARMAAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAARMAAAAAgUAAAAOdXNlckFkZHJlc3NTdHIFAAAAA25pbAUAAAADU0VQAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQAAABFpbnRlcm5hbEJhc2VBc3NldAkAASwAAAACAgAAACglcyVzJWRfX21hcHBpbmdzX19pbnRlcm5hbDJiYXNlQXNzZXRJZF9fCQABpAAAAAEFAAAAEWludGVybmFsQmFzZUFzc2V0AQAAAB9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkAAAAAQAAAAxiYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAoJXMlcyVzX19tYXBwaW5nc19fYmFzZUFzc2V0MmludGVybmFsSWRfXwUAAAAMYmFzZUFzc2V0U3RyAQAAABxrZXlNYXBwaW5nc1NoYXJlMmJhc2VBc3NldElkAAAAAQAAAA1zaGFyZUFzc2V0U3RyCQABLAAAAAICAAAAJSVzJXMlc19fbWFwcGluZ3NfX3NoYXJlMmJhc2VBc3NldElkX18FAAAADXNoYXJlQXNzZXRTdHIBAAAAHGtleU1hcHBpbmdzQmFzZUFzc2V0MnNoYXJlSWQAAAABAAAADGJhc2VBc3NldFN0cgkAASwAAAACAgAAACUlcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyc2hhcmVJZF9fBQAAAAxiYXNlQXNzZXRTdHIBAAAAF2tleVNodXRkb3duUHV0T3BlcmF0aW9uAAAAAQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAASwAAAACAgAAABclcyVzJWRfX3NodXRkb3duX19wdXRfXwUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIBAAAAEmtleVNodXRkb3duTWFuYWdlcgAAAAEAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAEsAAAAAgIAAAAbJXMlcyVkX19zaHV0ZG93bl9fbWFuYWdlcl9fBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgEAAAATYXNzZXRzU3RvcmVDb250cmFjdAAAAAAJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QAAAAAAAAAABJJZHhDZmdTaGFyZUFzc2V0SWQAAAAAAAAAAAEAAAAAF0lkeENmZ0ludGVybmFsQmFzZUFzc2V0AAAAAAAAAAACAAAAABxJZHhDZmdEZWNpbWFsc011bHRCb3RoQXNzZXRzAAAAAAAAAAADAAAAABdJZHhDZmdEZWNpbWFsc011bHRQcmljZQAAAAAAAAAABAAAAAAUSWR4Q2ZnR2V0RGVsYXlCbG9ja3MAAAAAAAAAAAUBAAAADGRhdGFBc3NldENmZwAAAAUAAAANc2hhcmVBc3NldFN0cgAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzAAAAEWRlY2ltYWxzTXVsdFByaWNlAAAAEGdldERlbGF5SW5CbG9ja3MJAAS5AAAAAgkABEwAAAACAgAAAAolcyVkJWQlZCVkCQAETAAAAAIFAAAADXNoYXJlQXNzZXRTdHIJAARMAAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzCQAETAAAAAIJAAGkAAAAAQUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAABBnZXREZWxheUluQmxvY2tzBQAAAANuaWwFAAAAA1NFUAAAAAATSWR4VG90YWxMb2NrZWRTaGFyZQAAAAAAAAAAAQAAAAASSWR4VG90YWxMb2NrZWRCYXNlAAAAAAAAAAACAQAAAA9kYXRhVG90YWxMb2NrZWQAAAACAAAAEHNoYXJlQXNzZXRBbW91bnQAAAAPYmFzZUFzc2V0QW1vdW50CQAEuQAAAAIJAARMAAAAAgIAAAAEJWQlZAkABEwAAAACCQABpAAAAAEFAAAAEHNoYXJlQXNzZXRBbW91bnQJAARMAAAAAgkAAaQAAAABBQAAAA9iYXNlQXNzZXRBbW91bnQFAAAAA25pbAUAAAADU0VQAQAAAA9yZWFkVG90YWxMb2NrZWQAAAABAAAAA2tleQQAAAAQdG90YWxMb2NrZWRBcnJheQkABLUAAAACCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQkBAAAAD2RhdGFUb3RhbExvY2tlZAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAFAAAAA1NFUAkABEwAAAACAP//////////CQAETAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABNJZHhUb3RhbExvY2tlZFNoYXJlCQAETAAAAAIJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABJJZHhUb3RhbExvY2tlZEJhc2UFAAAAA25pbAEAAAAMa2V5T3BlcmF0aW9uAAAABAAAAA1vcGVyYXRpb25UeXBlAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAAC3VzZXJBZGRyZXNzAAAABHR4SWQJAAS5AAAAAgkABEwAAAACAgAAAAglcyVkJXMlcwkABEwAAAACBQAAAA1vcGVyYXRpb25UeXBlCQAETAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAETAAAAAIFAAAAC3VzZXJBZGRyZXNzCQAETAAAAAIFAAAABHR4SWQFAAAAA25pbAUAAAADU0VQAAAAAA1JZHhPcGVyU3RhdHVzAAAAAAAAAAABAAAAAA9JZHhPcGVySW5BbW91bnQAAAAAAAAAAAIAAAAADElkeE9wZXJQcmljZQAAAAAAAAAAAwAAAAAQSWR4T3Blck91dEFtb3VudAAAAAAAAAAABAAAAAASSWR4T3BlclN0YXJ0SGVpZ2h0AAAAAAAAAAAFAAAAABVJZHhPcGVyU3RhcnRUaW1lc3RhbXAAAAAAAAAAAAYAAAAAEElkeE9wZXJFbmRIZWlnaHQAAAAAAAAAAAcAAAAAE0lkeE9wZXJFbmRUaW1lc3RhbXAAAAAAAAAAAAgBAAAAHnByaXZhdGVEYXRhT3BlcmF0aW9uQWxsU3RyaW5ncwAAAAgAAAAGc3RhdHVzAAAADWluQXNzZXRBbW91bnQAAAAFcHJpY2UAAAAOb3V0QXNzZXRBbW91bnQAAAALc3RhcnRIZWlnaHQAAAAOc3RhcnRUaW1lc3RhbXAAAAAJZW5kSGVpZ2h0AAAADGVuZFRpbWVzdGFtcAkABLkAAAACCQAETAAAAAICAAAAECVzJWQlZCVkJWQlZCVkJWQJAARMAAAAAgUAAAAGc3RhdHVzCQAETAAAAAIFAAAADWluQXNzZXRBbW91bnQJAARMAAAAAgUAAAAFcHJpY2UJAARMAAAAAgUAAAAOb3V0QXNzZXRBbW91bnQJAARMAAAAAgUAAAALc3RhcnRIZWlnaHQJAARMAAAAAgUAAAAOc3RhcnRUaW1lc3RhbXAJAARMAAAAAgUAAAAJZW5kSGVpZ2h0CQAETAAAAAIFAAAADGVuZFRpbWVzdGFtcAUAAAADbmlsBQAAAANTRVABAAAADWRhdGFPcGVyYXRpb24AAAAIAAAABnN0YXR1cwAAAA1pbkFzc2V0QW1vdW50AAAABXByaWNlAAAADm91dEFzc2V0QW1vdW50AAAAC3N0YXJ0SGVpZ2h0AAAADnN0YXJ0VGltZXN0YW1wAAAACWVuZEhlaWdodAAAAAxlbmRUaW1lc3RhbXAJAQAAAB5wcml2YXRlRGF0YU9wZXJhdGlvbkFsbFN0cmluZ3MAAAAIBQAAAAZzdGF0dXMJAAGkAAAAAQUAAAANaW5Bc3NldEFtb3VudAkAAaQAAAABBQAAAAVwcmljZQkAAaQAAAABBQAAAA5vdXRBc3NldEFtb3VudAkAAaQAAAABBQAAAAtzdGFydEhlaWdodAkAAaQAAAABBQAAAA5zdGFydFRpbWVzdGFtcAkAAaQAAAABBQAAAAllbmRIZWlnaHQJAAGkAAAAAQUAAAAMZW5kVGltZXN0YW1wAQAAABxkYXRhT3BlcmF0aW9uRXhlY3V0aW9uVXBkYXRlAAAAAwAAAA1jdXJyT3BlckFycmF5AAAACW5ld1N0YXR1cwAAAA9uZXdFbmRUaW1lc3RhbXAJAQAAAB5wcml2YXRlRGF0YU9wZXJhdGlvbkFsbFN0cmluZ3MAAAAIBQAAAAluZXdTdGF0dXMJAAGRAAAAAgUAAAANY3Vyck9wZXJBcnJheQUAAAAPSWR4T3BlckluQW1vdW50CQABkQAAAAIFAAAADWN1cnJPcGVyQXJyYXkFAAAADElkeE9wZXJQcmljZQkAAZEAAAACBQAAAA1jdXJyT3BlckFycmF5BQAAABBJZHhPcGVyT3V0QW1vdW50CQABkQAAAAIFAAAADWN1cnJPcGVyQXJyYXkFAAAAEklkeE9wZXJTdGFydEhlaWdodAkAAZEAAAACBQAAAA1jdXJyT3BlckFycmF5BQAAABVJZHhPcGVyU3RhcnRUaW1lc3RhbXAJAAGRAAAAAgUAAAANY3Vyck9wZXJBcnJheQUAAAAQSWR4T3BlckVuZEhlaWdodAkAAaQAAAABBQAAAA9uZXdFbmRUaW1lc3RhbXABAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEAAAAMYmFzZUFzc2V0U3RyBAAAAANrZXkJAQAAAAtrZXlBc3NldENmZwAAAAEFAAAADGJhc2VBc3NldFN0cgkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQUAAAADa2V5BQAAAANTRVABAAAAFGluY3JlbWVudFRvdGFsTG9ja2VkAAAAAwAAAANrZXkAAAAQc2hhcmVBc3NldEFtb3VudAAAAA9iYXNlQXNzZXRBbW91bnQEAAAACWRhdGFBcnJheQkBAAAAD3JlYWRUb3RhbExvY2tlZAAAAAEFAAAAA2tleQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5CQEAAAAPZGF0YVRvdGFsTG9ja2VkAAAAAgkAAGQAAAACCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAATSWR4VG90YWxMb2NrZWRTaGFyZQUAAAAQc2hhcmVBc3NldEFtb3VudAkAAGQAAAACCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAASSWR4VG90YWxMb2NrZWRCYXNlBQAAAA9iYXNlQXNzZXRBbW91bnQBAAAAFGRlY3JlbWVudFRvdGFsTG9ja2VkAAAAAwAAAANrZXkAAAAQc2hhcmVBc3NldEFtb3VudAAAAA9iYXNlQXNzZXRBbW91bnQEAAAACWRhdGFBcnJheQkBAAAAD3JlYWRUb3RhbExvY2tlZAAAAAEFAAAAA2tleQkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAADa2V5CQEAAAAPZGF0YVRvdGFsTG9ja2VkAAAAAgkAAGUAAAACCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAATSWR4VG90YWxMb2NrZWRTaGFyZQUAAAAQc2hhcmVBc3NldEFtb3VudAkAAGUAAAACCQABkQAAAAIFAAAACWRhdGFBcnJheQUAAAASSWR4VG90YWxMb2NrZWRCYXNlBQAAAA9iYXNlQXNzZXRBbW91bnQBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAANYmFsYW5jZU9yWmVybwAAAAEAAAAHYXNzZXRJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB8AAAABCQEAAAAKa2V5QmFsYW5jZQAAAAEFAAAAB2Fzc2V0SWQAAAAAAAAAAAABAAAACWNhbGNQcmljZQAAAAYAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAALYmFzZUFzc2V0SWQAAAAPdG9wVXBCYXNlQW1vdW50AAAADHNoYXJlQXNzZXRJZAAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzAAAAEWRlY2ltYWxzTXVsdFByaWNlBAAAABB0b3RhbExvY2tlZEFycmF5CQEAAAAPcmVhZFRvdGFsTG9ja2VkAAAAAQkBAAAADmtleVRvdGFsTG9ja2VkAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIEAAAAFXRvdGFsTG9ja2VkQmFzZUFtb3VudAkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABJJZHhUb3RhbExvY2tlZEJhc2UEAAAAEGJhc2VBc3NldEJhbGFuY2UJAQAAAA1iYWxhbmNlT3JaZXJvAAAAAQkAAlgAAAABBQAAAAtiYXNlQXNzZXRJZAQAAAAfYmFzZUFzc2V0QmFsYW5jZUNvbnNpZGVyaW5nTG9jawkAAGQAAAACBQAAABBiYXNlQXNzZXRCYWxhbmNlBQAAAA90b3BVcEJhc2VBbW91bnQDCQAAZgAAAAIAAAAAAAAAAAAFAAAAH2Jhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2sJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA2YmFzZUFzc2V0QmFsYW5jZUNvbnNpZGVyaW5nTG9jayA8IDA6IGJhc2VBc3NldEJhbGFuY2U9CQABpAAAAAEFAAAAEGJhc2VBc3NldEJhbGFuY2UCAAAAISBiYXNlQXNzZXRCYWxhbmNlQ29uc2lkZXJpbmdMb2NrPQkAAaQAAAABBQAAAB9iYXNlQXNzZXRCYWxhbmNlQ29uc2lkZXJpbmdMb2NrBAAAAA1zaGFyZUVtaXNzaW9uCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAxzaGFyZUFzc2V0SWQAAAAIcXVhbnRpdHkEAAAABXByaWNlAwkAAAAAAAACBQAAAA1zaGFyZUVtaXNzaW9uAAAAAAAAAAAACQAAaAAAAAIAAAAAAAAAAAEFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAAawAAAAMFAAAAH2Jhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2sFAAAAEWRlY2ltYWxzTXVsdFByaWNlBQAAAA1zaGFyZUVtaXNzaW9uCQAFFwAAAAUFAAAABXByaWNlBQAAABBiYXNlQXNzZXRCYWxhbmNlBQAAABV0b3RhbExvY2tlZEJhc2VBbW91bnQFAAAAH2Jhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2sFAAAADXNoYXJlRW1pc3Npb24BAAAACGdldFByaWNlAAAABQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAAtiYXNlQXNzZXRJZAAAAAxzaGFyZUFzc2V0SWQAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwAAABFkZWNpbWFsc011bHRQcmljZQQAAAAQdG90YWxMb2NrZWRBcnJheQkBAAAAD3JlYWRUb3RhbExvY2tlZAAAAAEJAQAAAA5rZXlUb3RhbExvY2tlZAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBAAAABV0b3RhbExvY2tlZEJhc2VBbW91bnQJAAGRAAAAAgUAAAAQdG90YWxMb2NrZWRBcnJheQUAAAASSWR4VG90YWxMb2NrZWRCYXNlBAAAABBiYXNlQXNzZXRCYWxhbmNlCQEAAAANYmFsYW5jZU9yWmVybwAAAAEJAAJYAAAAAQUAAAALYmFzZUFzc2V0SWQEAAAAH2Jhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2sFAAAAEGJhc2VBc3NldEJhbGFuY2UEAAAADXNoYXJlRW1pc3Npb24ICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAADHNoYXJlQXNzZXRJZAAAAAhxdWFudGl0eQQAAAAFcHJpY2UJAQAAAAV2YWx1ZQAAAAEJAAQfAAAAAQkBAAAADGtleVByaWNlTGFzdAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAFFwAAAAUFAAAABXByaWNlBQAAABBiYXNlQXNzZXRCYWxhbmNlBQAAABV0b3RhbExvY2tlZEJhc2VBbW91bnQFAAAAH2Jhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2sFAAAADXNoYXJlRW1pc3Npb24BAAAAG3ByaXZhdGVDdXJyZW50U3lzUGFyYW1zUkVTVAAAAAEAAAAMYmFzZUFzc2V0U3RyBAAAAAtiYXNlQXNzZXRJZAkAAlkAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAACGNmZ0FycmF5CQEAAAAScmVhZEFzc2V0Q2ZnT3JGYWlsAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAA1zaGFyZUFzc2V0U3RyCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdTaGFyZUFzc2V0SWQEAAAADHNoYXJlQXNzZXRJZAkAAlkAAAABBQAAAA1zaGFyZUFzc2V0U3RyBAAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAHElkeENmZ0RlY2ltYWxzTXVsdEJvdGhBc3NldHMEAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAF0lkeENmZ0RlY2ltYWxzTXVsdFByaWNlBAAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQEAAAACHN5c1N0YXRlCQEAAAAIZ2V0UHJpY2UAAAAFBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAALYmFzZUFzc2V0SWQFAAAADHNoYXJlQXNzZXRJZAUAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwUAAAARZGVjaW1hbHNNdWx0UHJpY2UEAAAAD3RvcFVwTGFzdEhlaWdodAQAAAAHJG1hdGNoMAkABB8AAAABCQEAAAASa2V5VG9wVXBMYXN0SGVpZ2h0AAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAQAAABFAZXh0ck5hdGl2ZSgxMDU4KQAAAAEJAQAAAA9rZXlQcm94eUFkZHJlc3MAAAABBQAAAAxiYXNlQXNzZXRTdHIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABaAUAAAAHJG1hdGNoMAkBAAAABXZhbHVlAAAAAQUAAAABaAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAkBAAAAEUBleHRyTmF0aXZlKDEwNTUpAAAAAQkBAAAAEmtleVRvcFVwTGFzdEhlaWdodAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAEJQAAAAEJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNTgpAAAAAQkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAACQAAAgAAAAECAAAAOHVuZGVmaW5lZCBiZWhhdmlvdXIgaW4gcHJpdmF0ZUN1cnJlbnRTeXNQYXJhbXNSRVNUIG1hdGNoCQAFGgAAAAgJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAAVwcmljZQgFAAAACHN5c1N0YXRlAAAAAl8xCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAARZGVjaW1hbHNNdWx0UHJpY2UFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAQYmFzZUFzc2V0QmFsYW5jZQgFAAAACHN5c1N0YXRlAAAAAl8yCQEAAAAMSW50ZWdlckVudHJ5AAAAAgIAAAAVdG90YWxMb2NrZWRCYXNlQW1vdW50CAUAAAAIc3lzU3RhdGUAAAACXzMJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAB9iYXNlQXNzZXRCYWxhbmNlQ29uc2lkZXJpbmdMb2NrCAUAAAAIc3lzU3RhdGUAAAACXzQJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAAA1zaGFyZUVtaXNzaW9uCAUAAAAIc3lzU3RhdGUAAAACXzUJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABFiYXNlQXNzZXREZWNpbWFscwgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAALYmFzZUFzc2V0SWQAAAAIZGVjaW1hbHMJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABJsYXN0VG9wVXBUaW1lc3RhbXAICQEAAAAFdmFsdWUAAAABCQAD7QAAAAEFAAAAD3RvcFVwTGFzdEhlaWdodAAAAAl0aW1lc3RhbXABAAAAC211c3RNYW5hZ2VyAAAAAQAAAAFpBAAAAAJwZAkAAAIAAAABAgAAABFwZXJtaXNzaW9uIGRlbmllZAQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAAJwawYFAAAAAnBkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0AwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMGBQAAAAJwZAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAQbXVzdFByb3h5QWRkcmVzcwAAAAIAAAABaQAAAAdhc3NldElkBAAAAAdpc1Byb3h5CQAAAAAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyCQEAAAALdmFsdWVPckVsc2UAAAACCQAEIgAAAAEJAQAAAA9rZXlQcm94eUFkZHJlc3MAAAABBQAAAAdhc3NldElkBQAAAAVFTVBUWQMFAAAAB2lzUHJveHkGBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAAKAAAAAWkBAAAAC2NvbnN0cnVjdG9yAAAAAQAAABNhc3NldHNTdG9yZUNvbnRyYWN0BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABZrZXlBc3NldHNTdG9yZUNvbnRyYWN0AAAAAAUAAAATYXNzZXRzU3RvcmVDb250cmFjdAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAABJhZG1pblJlZ2lzdGVyQXNzZXQAAAAHAAAADGJhc2VBc3NldFN0cgAAAA5zaGFyZUFzc2V0TmFtZQAAAA9zaGFyZUFzc2V0RGVzY3IAAAAOc2hhcmVBc3NldExvZ28AAAAQZ2V0RGVsYXlpbkJsb2NrcwAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzAAAADHByb3h5QWRkcmVzcwQAAAALYmFzZUFzc2V0SWQJAAJZAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAAhkZWNpbWFscwgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAALYmFzZUFzc2V0SWQAAAAIZGVjaW1hbHMEAAAABWNoZWNrCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAVjaGVjawUAAAAFY2hlY2sDCQEAAAACIT0AAAACCQAEJQAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAFnNodXRkb3duTWFuYWdlckFkZHJlc3MFAAAAFnNodXRkb3duTWFuYWdlckFkZHJlc3MJAAACAAAAAQIAAAAeaW52YWxpZCBzaHV0ZG93bk1hbmFnZXJBZGRyZXNzAwkAAGYAAAACAAAAAAAAAAAABQAAABBnZXREZWxheWluQmxvY2tzCQAAAgAAAAEJAAEsAAAAAgIAAAAZaW52YWxpZCBnZXREZWxheWluQmxvY2tzPQkAAaQAAAABBQAAABBnZXREZWxheWluQmxvY2tzBAAAABVzaGFyZUFzc2V0SXNzdWVBY3Rpb24JAARCAAAABQUAAAAOc2hhcmVBc3NldE5hbWUFAAAAD3NoYXJlQXNzZXREZXNjcgAAAAAAAAAAAQUAAAAIZGVjaW1hbHMGBAAAAAxzaGFyZUFzc2V0SWQJAAQ4AAAAAQUAAAAVc2hhcmVBc3NldElzc3VlQWN0aW9uBAAAAA1zaGFyZUFzc2V0U3RyCQACWAAAAAEFAAAADHNoYXJlQXNzZXRJZAQAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABoAAAAAgkAAGgAAAACAAAAAAAAAABkAAAAAAAAAAPoAAAAAAAAAAPoBAAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAFAAAACGRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOBAAAAApzdGFydFByaWNlCQAAaAAAAAIAAAAAAAAAAAEFAAAAEWRlY2ltYWxzTXVsdFByaWNlBAAAABRpbnRlcm5hbEJhc2VBc3NldHRJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAAAAAAAAAAAAAAEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABpAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0dElkBAAAAA5jcmVhdGVPclVwZGF0ZQkAA/wAAAAECQEAAAATYXNzZXRzU3RvcmVDb250cmFjdAAAAAACAAAADmNyZWF0ZU9yVXBkYXRlCQAETAAAAAIFAAAADXNoYXJlQXNzZXRTdHIJAARMAAAAAgUAAAAOc2hhcmVBc3NldExvZ28JAARMAAAAAgcFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAA5jcmVhdGVPclVwZGF0ZQUAAAAOY3JlYXRlT3JVcGRhdGUEAAAACGFkZExhYmVsCQAD/AAAAAQJAQAAABNhc3NldHNTdG9yZUNvbnRyYWN0AAAAAAIAAAAIYWRkTGFiZWwJAARMAAAAAgUAAAANc2hhcmVBc3NldFN0cgkABEwAAAACAgAAAApTVEFLSU5HX0xQBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAIYWRkTGFiZWwFAAAACGFkZExhYmVsCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAtrZXlBc3NldENmZwAAAAEFAAAADGJhc2VBc3NldFN0cgkBAAAADGRhdGFBc3NldENmZwAAAAUFAAAADXNoYXJlQXNzZXRTdHIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzBQAAABFkZWNpbWFsc011bHRQcmljZQUAAAAQZ2V0RGVsYXlpbkJsb2NrcwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0dElkBQAAAAxiYXNlQXNzZXRTdHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQAAAABBQAAAAxiYXNlQXNzZXRTdHIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABxrZXlNYXBwaW5nc1NoYXJlMmJhc2VBc3NldElkAAAAAQUAAAANc2hhcmVBc3NldFN0cgUAAAAMYmFzZUFzc2V0U3RyCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABxrZXlNYXBwaW5nc0Jhc2VBc3NldDJzaGFyZUlkAAAAAQUAAAAMYmFzZUFzc2V0U3RyBQAAAA1zaGFyZUFzc2V0U3RyCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAAXa2V5U2h1dGRvd25QdXRPcGVyYXRpb24AAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmtleVNodXRkb3duTWFuYWdlcgAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAAJAABkAAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXR0SWQAAAAAAAAAAAEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlQcmljZUxhc3QAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAKc3RhcnRQcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVByaWNlSGlzdG9yeQAAAAMFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAApzdGFydFByaWNlCQAETAAAAAIFAAAAFXNoYXJlQXNzZXRJc3N1ZUFjdGlvbgkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAADHNoYXJlQXNzZXRJZAAAAAAAAAAAAQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAPa2V5UHJveHlBZGRyZXNzAAAAAQUAAAAMYmFzZUFzc2V0U3RyBQAAAAxwcm94eUFkZHJlc3MFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAAtzaHV0ZG93blB1dAAAAAEAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAQAAAAWaW50ZXJuYWxCYXNlQXNzZXRJZFN0cgkAAaQAAAABBQAAABNpbnRlcm5hbEJhc2VBc3NldElkBAAAAA5iYXNlQXNzZXRJZFN0cgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQUAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAQAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABJrZXlTaHV0ZG93bk1hbmFnZXIAAAABBQAAABZpbnRlcm5hbEJhc2VBc3NldElkU3RyAwkAAGYAAAACAAAAAAAAAAABCQABMQAAAAEFAAAADmJhc2VBc3NldElkU3RyCQAAAgAAAAECAAAAG2ludmFsaWQgaW50ZXJuYWxCYXNlQXNzZXRJZAMJAQAAAAIhPQAAAAIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBQAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzCQAAAgAAAAECAAAADWFjY2VzcyBkZW5pZWQJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAABdrZXlTaHV0ZG93blB1dE9wZXJhdGlvbgAAAAEJAAGkAAAAAQUAAAATaW50ZXJuYWxCYXNlQXNzZXRJZAYFAAAAA25pbAAAAAFpAQAAAANwdXQAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAAC2Jhc2VBc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADGJhc2VBc3NldFN0cgkAAlgAAAABBQAAAAtiYXNlQXNzZXRJZAQAAAAOdXNlckFkZHJlc3NTdHIJAAQlAAAAAQgFAAAAAWkAAAAGY2FsbGVyBAAAAAhjZmdBcnJheQkBAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAANc2hhcmVBc3NldFN0cgkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAASSWR4Q2ZnU2hhcmVBc3NldElkBAAAAAxzaGFyZUFzc2V0SWQJAAJZAAAAAQUAAAANc2hhcmVBc3NldFN0cgQAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABxJZHhDZmdEZWNpbWFsc011bHRCb3RoQXNzZXRzBAAAABFkZWNpbWFsc011bHRQcmljZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABdJZHhDZmdEZWNpbWFsc011bHRQcmljZQQAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAF0lkeENmZ0ludGVybmFsQmFzZUFzc2V0BAAAAAxpc1B1dEJsb2NrZWQJAQAAABBnZXRCb29sZWFuT3JGYWlsAAAAAQkBAAAAF2tleVNodXRkb3duUHV0T3BlcmF0aW9uAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIDBQAAAAxpc1B1dEJsb2NrZWQJAAACAAAAAQIAAAAYcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkBAAAAApuZXdCYWxhbmNlCQAAZAAAAAIJAQAAAA1iYWxhbmNlT3JaZXJvAAAAAQUAAAAMYmFzZUFzc2V0U3RyCAUAAAADcG10AAAABmFtb3VudAQAAAAFcHJpY2UICQEAAAAIZ2V0UHJpY2UAAAAFBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAALYmFzZUFzc2V0SWQFAAAADHNoYXJlQXNzZXRJZAUAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwUAAAARZGVjaW1hbHNNdWx0UHJpY2UAAAACXzEEAAAAEHNoYXJlQXNzZXRBbW91bnQJAQAAAAhmcmFjdGlvbgAAAAQIBQAAAANwbXQAAAAGYW1vdW50BQAAABFkZWNpbWFsc011bHRQcmljZQUAAAAFcHJpY2UFAAAAB0NFSUxJTkcJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAEHNoYXJlQXNzZXRBbW91bnQGCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAQc2hhcmVBc3NldEFtb3VudAUAAAAMc2hhcmVBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxrZXlPcGVyYXRpb24AAAAEAgAAAAFQBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAkBAAAADWRhdGFPcGVyYXRpb24AAAAIAgAAAAhGSU5JU0hFRAgFAAAAA3BtdAAAAAZhbW91bnQFAAAABXByaWNlBQAAABBzaGFyZUFzc2V0QW1vdW50BQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAQAAAAV2YWx1ZQAAAAEJAAQiAAAAAQkBAAAAD2tleVByb3h5QWRkcmVzcwAAAAEFAAAADGJhc2VBc3NldFN0cggFAAAAA3BtdAAAAAZhbW91bnQFAAAAC2Jhc2VBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAKa2V5QmFsYW5jZQAAAAEFAAAADGJhc2VBc3NldFN0cgUAAAAKbmV3QmFsYW5jZQUAAAADbmlsAAAAAWkBAAAAEHN1Ym1pdEdldFJlcXVlc3QAAAAABAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAADHNoYXJlQXNzZXRJZAkBAAAABXZhbHVlAAAAAQgFAAAAA3BtdAAAAAdhc3NldElkBAAAAA1zaGFyZUFzc2V0U3RyCQACWAAAAAEFAAAADHNoYXJlQXNzZXRJZAQAAAAMY2FsbGVyUHViU3RyCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAALdXNlckFkZHJlc3MIBQAAAAFpAAAABmNhbGxlcgQAAAAOdXNlckFkZHJlc3NTdHIJAAQlAAAAAQUAAAALdXNlckFkZHJlc3MEAAAAEHNoYXJlQXNzZXRBbW91bnQIBQAAAANwbXQAAAAGYW1vdW50BAAAAAxiYXNlQXNzZXRTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAca2V5TWFwcGluZ3NTaGFyZTJiYXNlQXNzZXRJZAAAAAEFAAAADXNoYXJlQXNzZXRTdHIEAAAAC2Jhc2VBc3NldElkCQACWQAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAIY2ZnQXJyYXkJAQAAABJyZWFkQXNzZXRDZmdPckZhaWwAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAcSWR4Q2ZnRGVjaW1hbHNNdWx0Qm90aEFzc2V0cwQAAAARZGVjaW1hbHNNdWx0UHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAXSWR4Q2ZnRGVjaW1hbHNNdWx0UHJpY2UEAAAADmdldERlbGF5QmxvY2tzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAFElkeENmZ0dldERlbGF5QmxvY2tzBAAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQEAAAABXByaWNlCAkBAAAACGdldFByaWNlAAAABQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAAC2Jhc2VBc3NldElkBQAAAAxzaGFyZUFzc2V0SWQFAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMFAAAAEWRlY2ltYWxzTXVsdFByaWNlAAAAAl8xBAAAAA9iYXNlQXNzZXRBbW91bnQJAABrAAAAAwUAAAAQc2hhcmVBc3NldEFtb3VudAUAAAAFcHJpY2UFAAAAEWRlY2ltYWxzTXVsdFByaWNlBAAAAAxvcGVyYXRpb25LZXkJAQAAAAxrZXlPcGVyYXRpb24AAAAEAgAAAAFHBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIJAAJYAAAAAQgFAAAAAWkAAAANdHJhbnNhY3Rpb25JZAQAAAANb3BlcmF0aW9uRGF0YQkBAAAADWRhdGFPcGVyYXRpb24AAAAIAgAAAAdQRU5ESU5HBQAAABBzaGFyZUFzc2V0QW1vdW50BQAAAAVwcmljZQUAAAAPYmFzZUFzc2V0QW1vdW50BQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAAZAAAAAIFAAAABmhlaWdodAUAAAAOZ2V0RGVsYXlCbG9ja3MAAAAAAAAAAAAJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAxzaGFyZUFzc2V0SWQFAAAAEHNoYXJlQXNzZXRBbW91bnQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAMb3BlcmF0aW9uS2V5BQAAAA1vcGVyYXRpb25EYXRhCQAETAAAAAIJAQAAABRpbmNyZW1lbnRUb3RhbExvY2tlZAAAAAMJAQAAAA5rZXlUb3RhbExvY2tlZAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAABBzaGFyZUFzc2V0QW1vdW50BQAAAA9iYXNlQXNzZXRBbW91bnQJAARMAAAAAgkBAAAAFGluY3JlbWVudFRvdGFsTG9ja2VkAAAAAwkBAAAAFGtleVRvdGFsTG9ja2VkQnlVc2VyAAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBQAAABBzaGFyZUFzc2V0QW1vdW50BQAAAA9iYXNlQXNzZXRBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAprZXlCYWxhbmNlAAAAAQUAAAAMYmFzZUFzc2V0U3RyCQAAZQAAAAIJAQAAAA1iYWxhbmNlT3JaZXJvAAAAAQUAAAAMYmFzZUFzc2V0U3RyBQAAAA9iYXNlQXNzZXRBbW91bnQFAAAAA25pbAAAAAFpAQAAABFleGVjdXRlR2V0UmVxdWVzdAAAAAMAAAAMYmFzZUFzc2V0U3RyAAAADnVzZXJBZGRyZXNzU3RyAAAACmdldFR4SWRTdHIEAAAAC3VzZXJBZGRyZXNzCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAA51c2VyQWRkcmVzc1N0cgQAAAANYXNzZXRDZmdBcnJheQkBAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAMc2hhcmVBc3NldElkCQACWQAAAAEJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAASSWR4Q2ZnU2hhcmVBc3NldElkBAAAAAtiYXNlQXNzZXRJZAkAAlkAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAF0lkeENmZ0ludGVybmFsQmFzZUFzc2V0BAAAAAxvcGVyYXRpb25LZXkJAQAAAAxrZXlPcGVyYXRpb24AAAAEAgAAAAFHBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAACmdldFR4SWRTdHIEAAAADm9wZXJhdGlvbkFycmF5CQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAAAxvcGVyYXRpb25LZXkFAAAAA1NFUAQAAAAGc3RhdHVzCQABkQAAAAIFAAAADm9wZXJhdGlvbkFycmF5BQAAAA1JZHhPcGVyU3RhdHVzBAAAAAllbmRIZWlnaHQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA5vcGVyYXRpb25BcnJheQUAAAAQSWR4T3BlckVuZEhlaWdodAQAAAANaW5TaGFyZUFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADm9wZXJhdGlvbkFycmF5BQAAAA9JZHhPcGVySW5BbW91bnQEAAAADW91dEJhc2VBbW91bnQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA5vcGVyYXRpb25BcnJheQUAAAAQSWR4T3Blck91dEFtb3VudAMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwIAAAAHUEVORElORwkBAAAADmZhaWxFeGVjdXRlR2V0AAAABAIAAAAVU3RhdHVzIGlzIG5vdCBQRU5ESU5HBQAAAAxiYXNlQXNzZXRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAApnZXRUeElkU3RyAwkAAGYAAAACBQAAAAllbmRIZWlnaHQFAAAABmhlaWdodAkBAAAADmZhaWxFeGVjdXRlR2V0AAAABAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAKRW5kSGVpZ2h0WwkAAaQAAAABBQAAAAllbmRIZWlnaHQCAAAABF0gPiAJAAGkAAAAAQUAAAAGaGVpZ2h0BQAAAAxiYXNlQXNzZXRTdHIFAAAADnVzZXJBZGRyZXNzU3RyBQAAAApnZXRUeElkU3RyCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAC3VzZXJBZGRyZXNzBQAAAA1vdXRCYXNlQW1vdW50BQAAAAtiYXNlQXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAxvcGVyYXRpb25LZXkJAQAAABxkYXRhT3BlcmF0aW9uRXhlY3V0aW9uVXBkYXRlAAAAAwUAAAAOb3BlcmF0aW9uQXJyYXkCAAAACEZJTklTSEVECAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAkABEwAAAACCQEAAAAUZGVjcmVtZW50VG90YWxMb2NrZWQAAAADCQEAAAAOa2V5VG90YWxMb2NrZWQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAANaW5TaGFyZUFtb3VudAUAAAANb3V0QmFzZUFtb3VudAkABEwAAAACCQEAAAAUZGVjcmVtZW50VG90YWxMb2NrZWQAAAADCQEAAAAUa2V5VG90YWxMb2NrZWRCeVVzZXIAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAADWluU2hhcmVBbW91bnQFAAAADW91dEJhc2VBbW91bnQFAAAAA25pbAAAAAFpAQAAAAx0b3BVcEJhbGFuY2UAAAACAAAADGJhc2VBc3NldFN0cgAAAAVkZWx0YQQAAAANYXNzZXRDZmdBcnJheQkBAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAADcG10CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAApwbXRBc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAAC3BtdEFzc2V0U3RyCQACWAAAAAEFAAAACnBtdEFzc2V0SWQEAAAADHNoYXJlQXNzZXRJZAkAAlkAAAABCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAEklkeENmZ1NoYXJlQXNzZXRJZAQAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAHElkeENmZ0RlY2ltYWxzTXVsdEJvdGhBc3NldHMEAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAXSWR4Q2ZnRGVjaW1hbHNNdWx0UHJpY2UEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABkQAAAAIFAAAADWFzc2V0Q2ZnQXJyYXkFAAAAF0lkeENmZ0ludGVybmFsQmFzZUFzc2V0BAAAABJ0b3BVcExhc3RIZWlnaHRLRVkJAQAAABJrZXlUb3BVcExhc3RIZWlnaHQAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAAD3RvcFVwTGFzdEhlaWdodAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzBQAAABJ0b3BVcExhc3RIZWlnaHRLRVkAAAAAAAAAAAAEAAAABmNoZWNrcwkABEwAAAACCQEAAAAQbXVzdFByb3h5QWRkcmVzcwAAAAIFAAAAAWkFAAAADGJhc2VBc3NldFN0cgkABEwAAAACAwkBAAAAAiE9AAAAAgUAAAAPdG9wVXBMYXN0SGVpZ2h0BQAAAAZoZWlnaHQGCQAAAgAAAAECAAAAI29ubHkgb25lIHRvcFVwIHBlciBibG9jayBpcyBhbGxvd2VkCQAETAAAAAIDCQAAZgAAAAIFAAAABWRlbHRhAAAAAAAAAAAABgkAAAIAAAABAgAAAB5vbmx5IHBvc2l0aXZlIGRlbHRhIGlzIGFsbG93ZWQFAAAAA25pbAMJAAAAAAAAAgUAAAAGY2hlY2tzBQAAAAZjaGVja3MDCQEAAAACIT0AAAACBQAAAAxiYXNlQXNzZXRTdHIFAAAAC3BtdEFzc2V0U3RyCQAAAgAAAAECAAAAPmF0dGFjaGVkIHBheW1lbnQncyBhc3NldCBpZCBpcyBOT1QgbWF0Y2hlZCBwYXNzZWQgYmFzZUFzc2V0U3RyAwkAAGYAAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAIG9ubHkgb25lIHBheW1lbnQgY2FuIGJlIGF0dGFjaGVkBAAAAAVwcmljZQgJAQAAAAljYWxjUHJpY2UAAAAGBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAKcG10QXNzZXRJZAUAAAAFZGVsdGEFAAAADHNoYXJlQXNzZXRJZAUAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwUAAAARZGVjaW1hbHNNdWx0UHJpY2UAAAACXzEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAxrZXlQcmljZUxhc3QAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAFcHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAA9rZXlQcmljZUhpc3RvcnkAAAADBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAGaGVpZ2h0CAUAAAAJbGFzdEJsb2NrAAAACXRpbWVzdGFtcAUAAAAFcHJpY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAEnRvcFVwTGFzdEhlaWdodEtFWQUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAKa2V5QmFsYW5jZQAAAAEFAAAAC3BtdEFzc2V0U3RyCQAAZAAAAAIJAQAAAA1iYWxhbmNlT3JaZXJvAAAAAQUAAAALcG10QXNzZXRTdHIFAAAABWRlbHRhBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAFGN1cnJlbnRTeXNQYXJhbXNSRVNUAAAAAQAAAAxiYXNlQXNzZXRTdHIEAAAADXN5c1N0YXRlVHVwbGUJAQAAABtwcml2YXRlQ3VycmVudFN5c1BhcmFtc1JFU1QAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAABXByaWNlCAgFAAAADXN5c1N0YXRlVHVwbGUAAAACXzEAAAAFdmFsdWUEAAAAEWRlY2ltYWxzTXVsdFByaWNlCAgFAAAADXN5c1N0YXRlVHVwbGUAAAACXzIAAAAFdmFsdWUEAAAAEGJhc2VBc3NldEJhbGFuY2UICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfMwAAAAV2YWx1ZQQAAAAVdG90YWxMb2NrZWRCYXNlQW1vdW50CAgFAAAADXN5c1N0YXRlVHVwbGUAAAACXzQAAAAFdmFsdWUEAAAAH2Jhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2sICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfNQAAAAV2YWx1ZQQAAAANc2hhcmVFbWlzc2lvbggIBQAAAA1zeXNTdGF0ZVR1cGxlAAAAAl82AAAABXZhbHVlBAAAAAhyZXN0RGF0YQkABLkAAAACCQAETAAAAAICAAAAGXN0YXJ0Q3VycmVudFN5c1BhcmFtc1JFU1QJAARMAAAAAgkAAaQAAAABBQAAAAVwcmljZQkABEwAAAACCQABpAAAAAEFAAAAEWRlY2ltYWxzTXVsdFByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAAQYmFzZUFzc2V0QmFsYW5jZQkABEwAAAACCQABpAAAAAEFAAAAFXRvdGFsTG9ja2VkQmFzZUFtb3VudAkABEwAAAACCQABpAAAAAEFAAAAH2Jhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2sJAARMAAAAAgkAAaQAAAABBQAAAA1zaGFyZUVtaXNzaW9uCQAETAAAAAICAAAAF2VuZEN1cnJlbnRTeXNQYXJhbXNSRVNUBQAAAANuaWwFAAAAA1NFUAkAAAIAAAABBQAAAAhyZXN0RGF0YQAAAAFpAQAAAApzZXRNYW5hZ2VyAAAAAQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQACWQAAAAEFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AwkAAAAAAAACBQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAOY29uZmlybU1hbmFnZXIAAAAABAAAAAJwbQkBAAAAHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAFaGFzUE0DCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAEm5vIHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAFaGFzUE0FAAAABWhhc1BNBAAAAAdjaGVja1BNAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABt5b3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAAB2NoZWNrUE0FAAAAB2NoZWNrUE0JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAACQACWAAAAAEJAQAAAAV2YWx1ZQAAAAEFAAAAAnBtCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAQAAAAJ0eAEAAAAGdmVyaWZ5AAAAAAQAAAAPdGFyZ2V0UHVibGljS2V5BAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwBQAAAAJwawMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAgFAAAAAnR4AAAAD3NlbmRlclB1YmxpY0tleQkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgkAAfQAAAADCAUAAAACdHgAAAAJYm9keUJ5dGVzCQABkQAAAAIIBQAAAAJ0eAAAAAZwcm9vZnMAAAAAAAAAAAAFAAAAD3RhcmdldFB1YmxpY0tleUBN2RE=", "chainId": 84, "height": 2459436, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3pTBC5a1ENH3RXU4f8U1du5tbg3tuXpGYNoDsFiyV5z8 Next: AQU99UELKhKX8KGxDeJFk7go7hLs4siwbwuSMM9bDBaz Diff:
OldNewDifferences
1-{-# STDLIB_VERSION 6 #-}
1+{-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 8
4+let a = "__"
55
6-let b = 100000000
6+let b = ""
77
8-let c = 18
9-
10-let d = toBigInt(1000000000000000000)
11-
12-let e = "__"
13-
14-let f = b
15-
16-let g = toBigInt(0)
17-
18-let h = 1
19-
20-let i = 2
21-
22-let j = 3
23-
24-let k = 4
25-
26-let l = 5
27-
28-let m = 6
29-
30-let n = 7
31-
32-let o = 8
33-
34-let p = 9
35-
36-let q = 10
37-
38-func r (s) = valueOrErrorMessage(getString(s), (("mandatory this." + s) + " is not defined"))
8+func c (d) = valueOrErrorMessage(getString(this, d), ("No data for this.key=" + d))
399
4010
41-func t (u,s) = valueOrErrorMessage(getString(u, s), (((("mandatory " + toString(u)) + ".") + s) + " is not defined"))
11+func e (d) = valueOrErrorMessage(getBoolean(this, d), ("No data for this.key=" + d))
4212
4313
44-func v (u,s) = valueOrElse(getInteger(u, s), 0)
14+func f () = makeString(["%s", "managerPublicKey"], a)
4515
4616
47-func w (u,s) = valueOrErrorMessage(getInteger(u, s), (("mandatory this." + s) + " is not defined"))
17+func g () = makeString(["%s", "pendingManagerPublicKey"], a)
4818
4919
50-func x (y) = {
51- let z = y
52- if ($isInstanceOf(z, "List[Any]"))
53- then {
54- let A = z
55- A
56- }
57- else throw("fail to cast into List[Any]")
20+func h (i,j,k,l) = throw(((((((i + ": baseAssetStr=") + j) + " userAddressStr=") + k) + " getTxIdStr=") + l))
21+
22+
23+func m () = makeString(["%s", "assetsStoreContract"], a)
24+
25+
26+func n (j) = ("%s%s%s__config__asset__" + j)
27+
28+
29+func o (p) = makeString(["%s%s", "proxyAddress", p], a)
30+
31+
32+func q (p) = makeString(["%s%s", "balance", p], a)
33+
34+
35+func r () = "%s__nextInternalAssetId"
36+
37+
38+func s (t) = ("%s%s%d__price__last__" + t)
39+
40+
41+func u (t,v) = makeString(["%s%s%s%d%s__topup__last__height", t, v], a)
42+
43+
44+func w (t,x,y) = makeString(["%s%s%d%d%d__price__history", t, toString(x), toString(y)], a)
45+
46+
47+func z (t) = ("%s%s%d__total__locked__" + t)
48+
49+
50+func A (B,k) = makeString(["%s%s%d%s__total__locked", B, k], a)
51+
52+
53+func C (D) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(D))
54+
55+
56+func E (j) = ("%s%s%s__mappings__baseAsset2internalId__" + j)
57+
58+
59+func F (G) = ("%s%s%s__mappings__share2baseAssetId__" + G)
60+
61+
62+func H (j) = ("%s%s%s__mappings__baseAsset2shareId__" + j)
63+
64+
65+func I (B) = ("%s%s%d__shutdown__put__" + B)
66+
67+
68+func J (B) = ("%s%s%d__shutdown__manager__" + B)
69+
70+
71+func K () = addressFromStringValue(value(getString(m())))
72+
73+
74+let L = 1
75+
76+let M = 2
77+
78+let N = 3
79+
80+let O = 4
81+
82+let P = 5
83+
84+func Q (G,B,R,S,T) = makeString(["%s%d%d%d%d", G, B, toString(R), toString(S), toString(T)], a)
85+
86+
87+let U = 1
88+
89+let V = 2
90+
91+func W (X,Y) = makeString(["%d%d", toString(X), toString(Y)], a)
92+
93+
94+func Z (d) = {
95+ let aa = split(valueOrElse(getString(this, d), W(0, 0)), a)
96+[-1, parseIntValue(aa[U]), parseIntValue(aa[V])]
5897 }
5998
6099
61-func B (y) = {
62- let z = y
63- if ($isInstanceOf(z, "Int"))
64- then {
65- let C = z
66- C
67- }
68- else throw("fail to cast into Int")
100+func ab (ac,B,ad,ae) = makeString(["%s%d%s%s", ac, B, ad, ae], a)
101+
102+
103+let af = 1
104+
105+let ag = 2
106+
107+let ah = 3
108+
109+let ai = 4
110+
111+let aj = 5
112+
113+let ak = 6
114+
115+let al = 7
116+
117+let am = 8
118+
119+func an (ao,ap,aq,ar,as,at,au,av) = makeString(["%s%d%d%d%d%d%d%d", ao, ap, aq, ar, as, at, au, av], a)
120+
121+
122+func aw (ao,ap,aq,ar,as,at,au,av) = an(ao, toString(ap), toString(aq), toString(ar), toString(as), toString(at), toString(au), toString(av))
123+
124+
125+func ax (ay,az,aA) = an(az, ay[ag], ay[ah], ay[ai], ay[aj], ay[ak], ay[al], toString(aA))
126+
127+
128+func aB (j) = {
129+ let d = n(j)
130+ split(c(d), a)
69131 }
70132
71133
72-func D (y) = {
73- let z = y
74- if ($isInstanceOf(z, "String"))
75- then {
76- let E = z
77- E
78- }
79- else throw("fail to cast into String")
134+func aC (d,X,Y) = {
135+ let aD = Z(d)
136+ StringEntry(d, W((aD[U] + X), (aD[V] + Y)))
80137 }
81138
82139
83-func F () = "%s%s__config__factoryAddress"
84-
85-
86-func G () = "%s__managerPublicKey"
87-
88-
89-func H () = "%s__pendingManagerPublicKey"
90-
91-
92-let I = 1
93-
94-let J = 2
95-
96-let K = 3
97-
98-let L = 4
99-
100-let M = 5
101-
102-let N = 6
103-
104-let O = 7
105-
106-let P = 8
107-
108-func Q () = "%s__factoryConfig"
109-
110-
111-func R (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
112-
113-
114-func T () = "%s__lpTokensList"
115-
116-
117-func U (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
118-
119-
120-func V (W) = makeString(["%s%s", "poolWeight", W], e)
121-
122-
123-func X () = addressFromStringValue(r(F()))
124-
125-
126-func Y () = split(valueOrElse(getString(X(), T()), ""), e)
127-
128-
129-func Z (aa) = split(t(aa, Q()), e)
130-
131-
132-func ab (ac) = addressFromStringValue(ac[J])
133-
134-
135-func ad (ac) = addressFromStringValue(ac[M])
136-
137-
138-func ae (ac) = addressFromStringValue(ac[I])
139-
140-
141-func af (ac) = addressFromStringValue(ac[P])
142-
143-
144-func ag () = "%s__config"
145-
146-
147-func ah () = "%s%s__stats__activeTotalLocked"
148-
149-
150-func ai () = "%s%s__stats__locksDurationSumInBlocks"
151-
152-
153-func aj () = "%s%s__stats__locksCount"
154-
155-
156-func ak () = "%s%s__stats__activeUsersCount"
157-
158-
159-func al (am) = makeString(["%s%s%s__mapping__user2num", am], e)
160-
161-
162-func an (ao) = makeString(["%s%s%s__mapping__num2user", ao], e)
163-
164-
165-func ap (aq) = makeString(["%s%d%s__paramByUserNum", aq, "amount"], e)
166-
167-
168-func ar (aq) = makeString(["%s%d%s__paramByUserNum", aq, "start"], e)
169-
170-
171-func as (aq) = makeString(["%s%d%s__paramByUserNum", aq, "duration"], e)
172-
173-
174-func at (aq) = makeString(["%s%d%s__paramByUserNum", aq, "k"], e)
175-
176-
177-func au (aq) = makeString(["%s%d%s__paramByUserNum", aq, "b"], e)
178-
179-
180-func av (aq,aw) = makeString(["%s%d%s%d__paramByPeriod", aq, "k", aw], e)
181-
182-
183-func ax (aq,aw) = makeString(["%s%d%s%d__paramByPeriod", aq, "b", aw], e)
184-
185-
186-func ay (aq) = makeString(["%s%d__userBoostEmissionLastInt", aq], e)
187-
188-
189-func az (aq) = makeString(["%s%d__maxBoostInt", aq], e)
190-
191-
192-func aA () = "%s%s__maxBoostInt__total"
193-
194-
195-func aB (aq) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aq], e)
196-
197-
198-func aC (aq) = makeString(["%s%d__userBoostClaimed", aq], e)
199-
200-
201-func aD () = "%s%s__gwxCached__total"
202-
203-
204-func aE (aF,aG) = makeString(["%s%s%s__staked", aF, aG], e)
205-
206-
207-func aH (aG) = ("%s%s%s__staked__total__" + aG)
208-
209-
210-func aI (aG,aF) = makeString(["%s%s%s__claimed", aF, aG], e)
211-
212-
213-func aJ (aG,aF) = makeString(["%s%s%s__claimedMinReward", aF, aG], e)
214-
215-
216-func aK (aG,aF) = makeString(["%s%s%s__claimedBoostReward", aF, aG], e)
217-
218-
219-func aL (aM,s) = valueOrElse(getInteger(aM, s), 0)
220-
221-
222-func aN () = "%s%s__ratePerBlock__current"
223-
224-
225-func aO () = "%s%s__ratePerBlockMax__current"
226-
227-
228-func aP () = "%s%s__emission__startBlock"
229-
230-
231-func aQ () = "%s%s__emission__duration"
232-
233-
234-func aR () = "%s%s__emission__endBlock"
235-
236-
237-func aS () = "%s__addonAddr"
238-
239-
240-let aT = X()
241-
242-let aU = Z(aT)
243-
244-let aV = ad(aU)
245-
246-let aM = ae(aU)
247-
248-let aW = af(aU)
249-
250-let aX = ab(aU)
251-
252-func aY (aZ) = {
253- let ba = invoke(aT, "getInFeeREADONLY", [toString(aZ)], nil)
254- if ($isInstanceOf(ba, "Int"))
255- then ba
256- else throw(($getType(ba) + " couldn't be cast to Int"))
140+func aE (d,X,Y) = {
141+ let aD = Z(d)
142+ StringEntry(d, W((aD[U] - X), (aD[V] - Y)))
257143 }
258144
259145
260-func bb (aZ) = {
261- let ba = invoke(aT, "getOutFeeREADONLY", [toString(aZ)], nil)
262- if ($isInstanceOf(ba, "Int"))
263- then ba
264- else throw(($getType(ba) + " couldn't be cast to Int"))
265- }
266-
267-
268-func bc (bd) = {
269- let be = t(aT, U(bd))
270- let bf = b
271- let bg = getIntegerValue(aT, V(be))
272- let bh = w(aV, aN())
273- let bi = w(aV, aO())
274- let bj = 3
275- let bk = (fraction(bh, bg, bf) / bj)
276- let bl = fraction(bi, bg, bf)
277- let bm = (bj * b)
278- let bn = v(aM, aH(bd))
279-[bk, bm, bn]
280- }
281-
282-
283-func bo (bp,bq,br) = {
284- let bs = fraction(bq, b, br)
285- let bt = fraction(bp, bs, b)
286-[bt]
287- }
288-
289-
290-func bu (bv,s,bw) = if ((bw == "string"))
291- then getStringValue(bv, s)
292- else if ((bw == "integer"))
293- then toString(getIntegerValue(bv, s))
294- else if ((bw == "boolean"))
295- then toString(getBooleanValue(bv, s))
296- else throw("unknown type. expected string/integer/boolean")
297-
298-
299-func bx () = {
300- let z = getString(G())
301- if ($isInstanceOf(z, "String"))
146+func aF () = {
147+ let aG = getString(f())
148+ if ($isInstanceOf(aG, "String"))
302149 then {
303- let by = z
304- fromBase58String(by)
150+ let aH = aG
151+ fromBase58String(aH)
305152 }
306- else if ($isInstanceOf(z, "Unit"))
153+ else if ($isInstanceOf(aG, "Unit"))
307154 then unit
308155 else throw("Match error")
309156 }
310157
311158
312-func bz () = {
313- let z = getString(H())
314- if ($isInstanceOf(z, "String"))
159+func aI () = {
160+ let aG = getString(g())
161+ if ($isInstanceOf(aG, "String"))
315162 then {
316- let by = z
317- fromBase58String(by)
163+ let aH = aG
164+ fromBase58String(aH)
318165 }
319- else if ($isInstanceOf(z, "Unit"))
166+ else if ($isInstanceOf(aG, "Unit"))
320167 then unit
321168 else throw("Match error")
322169 }
323170
324171
325-func bA (bB) = {
326- let bC = throw("Permission denied")
327- let z = bx()
328- if ($isInstanceOf(z, "ByteVector"))
172+func aJ (p) = valueOrElse(getInteger(q(p)), 0)
173+
174+
175+func aK (B,aL,aM,aN,R,S) = {
176+ let aa = Z(z(B))
177+ let aO = aa[V]
178+ let aP = aJ(toBase58String(aL))
179+ let aQ = (aP + aM)
180+ if ((0 > aQ))
181+ then throw(((("baseAssetBalanceConsideringLock < 0: baseAssetBalance=" + toString(aP)) + " baseAssetBalanceConsideringLock=") + toString(aQ)))
182+ else {
183+ let aR = value(assetInfo(aN)).quantity
184+ let aq = if ((aR == 0))
185+ then (1 * S)
186+ else fraction(aQ, S, aR)
187+ $Tuple5(aq, aP, aO, aQ, aR)
188+ }
189+ }
190+
191+
192+func aS (B,aL,aN,R,S) = {
193+ let aa = Z(z(B))
194+ let aO = aa[V]
195+ let aP = aJ(toBase58String(aL))
196+ let aQ = aP
197+ let aR = value(assetInfo(aN)).quantity
198+ let aq = value(getInteger(s(B)))
199+ $Tuple5(aq, aP, aO, aQ, aR)
200+ }
201+
202+
203+func aT (j) = {
204+ let aL = fromBase58String(j)
205+ let aU = aB(j)
206+ let G = aU[L]
207+ let aN = fromBase58String(G)
208+ let R = parseIntValue(aU[N])
209+ let S = parseIntValue(aU[O])
210+ let B = aU[M]
211+ let aV = aS(B, aL, aN, R, S)
212+ let aW = {
213+ let aG = getInteger(u(B, getStringValue(o(j))))
214+ if ($isInstanceOf(aG, "Int"))
215+ then {
216+ let x = aG
217+ value(x)
218+ }
219+ else if ($isInstanceOf(aG, "Unit"))
220+ then getIntegerValue(u(B, toString(addressFromPublicKey(fromBase58String(getStringValue(f()))))))
221+ else throw("undefined behaviour in privateCurrentSysParamsREST match")
222+ }
223+ $Tuple8(IntegerEntry("price", aV._1), IntegerEntry("decimalsMultPrice", S), IntegerEntry("baseAssetBalance", aV._2), IntegerEntry("totalLockedBaseAmount", aV._3), IntegerEntry("baseAssetBalanceConsideringLock", aV._4), IntegerEntry("shareEmission", aV._5), IntegerEntry("baseAssetDecimals", value(assetInfo(aL)).decimals), IntegerEntry("lastTopUpTimestamp", value(blockInfoByHeight(aW)).timestamp))
224+ }
225+
226+
227+func aX (aY) = {
228+ let aZ = throw("permission denied")
229+ let aG = aF()
230+ if ($isInstanceOf(aG, "ByteVector"))
329231 then {
330- let bD = z
331- if ((bB.callerPublicKey == bD))
232+ let ba = aG
233+ if ((aY.callerPublicKey == ba))
332234 then true
333- else bC
235+ else aZ
334236 }
335- else if ($isInstanceOf(z, "Unit"))
336- then if ((bB.caller == this))
237+ else if ($isInstanceOf(aG, "Unit"))
238+ then if ((aY.caller == this))
337239 then true
338- else bC
240+ else aZ
339241 else throw("Match error")
340242 }
341243
342244
343-@Callable(bB)
344-func constructor (bE) = {
345- let bF = bA(bB)
346- if ((bF == bF))
347- then [StringEntry(F(), bE)]
245+func bb (aY,p) = {
246+ let bc = (toString(aY.caller) == valueOrElse(getString(o(p)), b))
247+ if (bc)
248+ then true
249+ else {
250+ let bd = aX(aY)
251+ if ((bd == bd))
252+ then true
253+ else throw("Strict value is not equal to itself.")
254+ }
255+ }
256+
257+
258+@Callable(aY)
259+func constructor (K) = {
260+ let bd = aX(aY)
261+ if ((bd == bd))
262+ then [StringEntry(m(), K)]
348263 else throw("Strict value is not equal to itself.")
349264 }
350265
351266
352267
353-@Callable(bB)
354-func currentRewardRateREADONLY (bd) = {
355- let bG = bc(bd)
356- let bh = bG[0]
357- let bm = bG[1]
358- let bn = bG[2]
359- $Tuple2(nil, makeString(["%d%d%d", toString(bh), toString(bm), toString(bn)], e))
268+@Callable(aY)
269+func adminRegisterAsset (j,be,bf,bg,bh,bi,bj) = {
270+ let aL = fromBase58String(j)
271+ let bk = value(assetInfo(aL)).decimals
272+ let bl = aX(aY)
273+ if ((bl == bl))
274+ then if ((toString(addressFromStringValue(bi)) != bi))
275+ then throw("invalid shutdownManagerAddress")
276+ else if ((0 > bh))
277+ then throw(("invalid getDelayinBlocks=" + toString(bh)))
278+ else {
279+ let bm = Issue(be, bf, 1, bk, true)
280+ let aN = calculateAssetId(bm)
281+ let G = toBase58String(aN)
282+ let S = ((100 * 1000) * 1000)
283+ let R = pow(10, 0, bk, 0, 0, DOWN)
284+ let bn = (1 * S)
285+ let bo = valueOrElse(getInteger(this, r()), 0)
286+ let B = toString(bo)
287+ let bp = invoke(K(), "createOrUpdate", [G, bg, false], nil)
288+ if ((bp == bp))
289+ then {
290+ let bq = invoke(K(), "addLabel", [G, "STAKING_LP"], nil)
291+ if ((bq == bq))
292+ then [StringEntry(n(j), Q(G, B, R, S, bh)), StringEntry(C(bo), j), StringEntry(E(j), B), StringEntry(F(G), j), StringEntry(H(j), G), BooleanEntry(I(B), false), StringEntry(J(B), bi), IntegerEntry(r(), (bo + 1)), IntegerEntry(s(B), bn), IntegerEntry(w(B, height, lastBlock.timestamp), bn), bm, Burn(aN, 1), StringEntry(o(j), bj)]
293+ else throw("Strict value is not equal to itself.")
294+ }
295+ else throw("Strict value is not equal to itself.")
296+ }
297+ else throw("Strict value is not equal to itself.")
360298 }
361299
362300
363301
364-@Callable(bB)
365-func currentUserRewardRateREADONLY (bd,am) = {
366- let bG = bc(bd)
367- let bh = bG[0]
368- let bm = bG[1]
369- let bn = bG[2]
370- let bH = v(aM, aE(am, bd))
371- let bI = split(D(invoke(aM, "claimWxREADONLY", [bd, am], nil)), e)
372- let bJ = valueOrErrorMessage(parseInt(bI[5]), "couldn't parse minRewardPart")
373- let bK = valueOrErrorMessage(parseInt(bI[6]), "couldn't parse boostRewardPart")
374- let bL = bI[7]
375- let bM = if ((bK == 0))
376- then (1 * b)
377- else fraction((bJ + bK), b, bJ)
378- $Tuple2(nil, makeString(["%d%d%d%d%d%s", toString(bh), toString(bm), toString(bn), toString(bH), toString(bM), bL], e))
302+@Callable(aY)
303+func shutdownPut (br) = {
304+ let bs = toString(br)
305+ let bt = c(C(br))
306+ let bi = c(J(bs))
307+ if ((1 > size(bt)))
308+ then throw("invalid internalBaseAssetId")
309+ else if ((toString(aY.caller) != bi))
310+ then throw("access denied")
311+ else [BooleanEntry(I(toString(br)), true)]
379312 }
380313
381314
382315
383-@Callable(bB)
384-func calcBoostBulkInternalREADONLY (bN,bO,bP,bQ,bR,bS,bT) = if ((bN == size(bO)))
385- then $Tuple2(nil, bT)
386- else {
387- let bU = bO[bN]
388- let bV = bP[bN]
389- let bW = bQ[bN]
390- let bX = bR[bN]
391- let bY = {
392- let ba = invoke(this, "calcBoostREADONLY", [bU, bV, bW, bX, bS], nil)
393- if ($isInstanceOf(ba, "String"))
394- then ba
395- else throw(($getType(ba) + " couldn't be cast to String"))
396- }
397- let bZ = (bT :+ bY)
398- let ca = {
399- let ba = invoke(this, "calcBoostBulkInternalREADONLY", [(bN + 1), bO, bP, bQ, bR, bS, bZ], nil)
400- if ($isInstanceOf(ba, "List[Any]"))
401- then ba
402- else throw(($getType(ba) + " couldn't be cast to List[Any]"))
403- }
404- if ((ca == ca))
405- then $Tuple2(nil, ca)
406- else throw("Strict value is not equal to itself.")
407- }
408-
409-
410-
411-@Callable(bB)
412-func calcBoostBulkREADONLY (bU,bV,bW,bX,bS) = {
413- let bZ = invoke(this, "calcBoostBulkInternalREADONLY", [0, bU, bV, bW, bX, bS, nil], nil)
414- $Tuple2(nil, bZ)
415- }
416-
417-
418-
419-@Callable(bB)
420-func calcBoostREADONLY (bU,bV,bW,bX,bS) = {
421- let cb = aW
422- let cc = "empty"
423- let cd = parseIntValue(split(t(aX, ag()), e)[4])
424- let aG = if ((bX == ""))
425- then cc
426- else bX
427- let aF = if ((bS == ""))
428- then cc
429- else bS
430- let ce = valueOrElse(getString(aX, al(bS)), cc)
431- let cf = valueOrElse(getInteger(aX, ap(ce)), 0)
432- let cg = valueOrElse(getInteger(aX, ar(ce)), height)
433- let bq = valueOrElse(getInteger(aX, as(ce)), 0)
434- let ch = (cg + bq)
435- let ci = max([(ch - height), 0])
436- let cj = (cf + bU)
437- let ck = min([(ci + bV), cd])
438- let cl = B(x(invoke(aX, "gwxUserInfoREADONLY", [aF], nil))[0])
439- let cm = bo(cj, ck, cd)[0]
440- let cn = x(invoke(cb, "calcGwxParamsREADONLY", [cm, height, ck], nil))
441- let co = (cm - cl)
442- let cp = B(cn[0])
443- let cq = B(cn[1])
444- let aw = toString(B(cn[2]))
445- let cr = aA()
446- let cs = ((cm * ck) / 2)
447- let ct = v(aX, cr)
448- let cu = {
449- let ba = invoke(aX, "getTotalCachedGwxREADONLY", nil, nil)
450- if ($isInstanceOf(ba, "Int"))
451- then ba
452- else throw(($getType(ba) + " couldn't be cast to Int"))
453- }
454- let cv = 1000
455- let cw = (w(aV, aN()) * cv)
456- let cx = aE(aF, aG)
457- let cy = aH(aG)
458- let cz = aL(aM, cx)
459- let cA = aL(aM, cy)
460- let cB = (cz + bW)
461- let cC = (cA + bW)
462- let bg = if ((aG != cc))
463- then {
464- let be = valueOrErrorMessage(getString(aT, R(aG)), ("unsupported lp asset " + aG))
465- getIntegerValue(aT, V(be))
466- }
467- else 0
468- let cD = fraction(cw, bg, (f * 3))
469- let cE = if ((cC != 0))
470- then fraction(cD, b, cC)
471- else 0
472- let cF = fraction(cE, cB, b)
473- let cG = (cD * 2)
474- let cH = fraction(cm, cG, (cu + co))
475- let cI = min([cH, (cF * 2)])
476- let cJ = if ((cF == 0))
477- then (1 * b)
478- else fraction((cI + cF), b, cF)
479- $Tuple2(nil, makeString(["%d%d%s", toString(cm), toString(cJ), "d"], e))
480- }
481-
482-
483-
484-@Callable(bB)
485-func wxEmissionStatsREADONLY () = {
486- let cK = toString(b)
487- let cL = "1"
488- let bh = w(aV, aN())
489- let cM = w(aV, aP())
490- let cN = if ((cM > height))
491- then 0
492- else (height - cM)
493- let cO = (1440 * 365)
494- let cP = (201000000 * b)
495- let cQ = if ((cN > cO))
496- then cP
497- else fraction(cP, cN, cO)
498- let cR = ((bh * cN) + cQ)
499- let cS = v(aX, ah())
500- let cT = v(aX, ai())
501- let cU = v(aX, aj())
502- $Tuple2(nil, makeString(["%d%d%d%d", toString(cR), toString(cS), toString(cT), toString(cU)], e))
503- }
504-
505-
506-
507-@Callable(bB)
508-func poolStatsREADONLY (cV) = {
509- let aZ = addressFromStringValue(t(aT, U(cV)))
510- let cW = {
511- let ba = invoke(aT, "getPoolStatusREADONLY", [toString(aZ)], nil)
512- if ($isInstanceOf(ba, "Int"))
513- then ba
514- else throw(($getType(ba) + " couldn't be cast to Int"))
515- }
516- let cX = "%d%d%d%d%d%d%d%d%d%s"
517- if ((cW == 4))
518- then $Tuple2(nil, makeString([cX, toString(0), toString(0), toString(0), toString(0), toString(0), toString(0), toString(0), toString(0), toString(0), toString(false)], e))
316+@Callable(aY)
317+func put () = {
318+ let bu = value(aY.payments[0])
319+ let aL = value(bu.assetId)
320+ let j = toBase58String(aL)
321+ let k = toString(aY.caller)
322+ let aU = aB(j)
323+ let G = aU[L]
324+ let aN = fromBase58String(G)
325+ let R = parseIntValue(aU[N])
326+ let S = parseIntValue(aU[O])
327+ let B = aU[M]
328+ let bv = e(I(B))
329+ if (bv)
330+ then throw("put operation is blocked")
519331 else {
520- let cY = x(invoke(aZ, "getPoolConfigWrapperREADONLY", nil, nil))
521- let bd = fromBase58String(D(cY[j]))
522- let cZ = D(cY[k])
523- let da = D(cY[l])
524- let db = D(cY[o])
525- let dc = D(cY[p])
526- let dd = parseIntValue(D(cY[m]))
527- let de = parseIntValue(D(cY[n]))
528- let df = valueOrErrorMessage(assetInfo(bd), (("Asset " + toBase58String(bd)) + " doesn't exist")).quantity
529- let dg = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [cZ], nil))
530- let dh = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [da], nil))
531- let di = if ((df == 0))
532- then [toString(g), toString(g), toString(g)]
533- else x(invoke(aZ, "calcPricesWrapperREADONLY", [dg, dh, df], nil))
534- let dj = 0
535- let dk = B(invoke(aZ, "fromX18WrapperREADONLY", [di[1], b], nil))
536- let dl = B(invoke(aZ, "fromX18WrapperREADONLY", [di[2], b], nil))
537- let bg = getIntegerValue(aT, V(toString(aZ)))
538- let dm = aY(aZ)
539- let dn = bb(aZ)
540- let do = {
541- let ba = invoke(aT, "isPoolOneTokenOperationsDisabledREADONLY", [toString(aZ)], nil)
542- if ($isInstanceOf(ba, "Boolean"))
543- then ba
544- else throw(($getType(ba) + " couldn't be cast to Boolean"))
545- }
546- let dp = !(do)
547- $Tuple2(nil, makeString([cX, toString(dg), toString(dh), toString(df), toString(dj), toString(dk), toString(dl), toString(bg), toString(dm), toString(dn), toString(dp)], e))
332+ let bw = (aJ(j) + bu.amount)
333+ let aq = aS(B, aL, aN, R, S)._1
334+ let X = fraction(bu.amount, S, aq, CEILING)
335+[Reissue(aN, X, true), ScriptTransfer(aY.caller, X, aN), StringEntry(ab("P", B, k, toBase58String(aY.transactionId)), aw("FINISHED", bu.amount, aq, X, height, lastBlock.timestamp, height, lastBlock.timestamp)), ScriptTransfer(addressFromStringValue(value(getString(o(j)))), bu.amount, aL), IntegerEntry(q(j), bw)]
548336 }
549337 }
550338
551339
552340
553-@Callable(bB)
554-func poolEvaluatePutByAmountAssetREADONLY (cV,dq) = {
555- let aZ = addressFromStringValue(t(aT, U(cV)))
556- let cY = x(invoke(aZ, "getPoolConfigWrapperREADONLY", nil, nil))
557- let bd = fromBase58String(D(cY[j]))
558- let dr = D(cY[k])
559- let ds = fromBase58String(dr)
560- let dt = D(cY[l])
561- let du = fromBase58String(dt)
562- let dd = parseIntValue(D(cY[m]))
563- let de = parseIntValue(D(cY[n]))
564- let dv = D(cY[i])
565- let df = valueOrErrorMessage(assetInfo(bd), (("Asset " + toBase58String(bd)) + " doesn't exist")).quantity
566- let dg = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [dr], nil))
567- let dh = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [dt], nil))
568- let dw = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dg, dd], nil)))
569- let dx = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dh, de], nil)))
570- let dy = if ((df == 0))
571- then g
572- else parseBigIntValue(D(invoke(aZ, "calcPriceBigIntWrapperREADONLY", [toString(dx), toString(dw)], nil)))
573- let dj = B(invoke(aZ, "fromX18WrapperREADONLY", [toString(dy), b], nil))
574- let dz = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dq, dd], nil)))
575- let dA = fraction(dz, dy, d)
576- let dB = B(invoke(aZ, "fromX18WrapperREADONLY", [toString(dA), de], nil))
577- let bZ = invoke(aZ, "estimatePutOperationWrapperREADONLY", ["", 500000, dq, ds, dB, du, "", true, false], nil)
578- let dC = {
579- let z = bZ
580- if (if (if ($isInstanceOf(z._1, "Int"))
581- then if ($isInstanceOf(z._3, "Int"))
582- then if ($isInstanceOf(z._4, "Int"))
583- then if ($isInstanceOf(z._5, "Int"))
584- then $isInstanceOf(z._6, "Int")
585- else false
586- else false
587- else false
588- else false)
589- then (size(z) == 13)
590- else false)
591- then {
592- let dD = z._1
593- let dE = z._3
594- let dF = z._4
595- let dG = z._5
596- let dH = z._6
597- $Tuple5(dD, dE, dF, dG, dH)
598- }
599- else throw("Couldn't cast types")
600- }
601- let dD = dC._1
602- let dE = dC._2
603- let dF = dC._3
604- let dG = dC._4
605- let dH = dC._5
606- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(dD), toString(dj), toString(dF), toString(dG), toString(dH), dv, toString(dq), toString(dB)], e))
341+@Callable(aY)
342+func submitGetRequest () = {
343+ let bu = value(aY.payments[0])
344+ let aN = value(bu.assetId)
345+ let G = toBase58String(aN)
346+ let bx = toBase58String(aY.callerPublicKey)
347+ let ad = aY.caller
348+ let k = toString(ad)
349+ let X = bu.amount
350+ let j = c(F(G))
351+ let aL = fromBase58String(j)
352+ let aU = aB(j)
353+ let R = parseIntValue(aU[N])
354+ let S = parseIntValue(aU[O])
355+ let by = parseIntValue(aU[P])
356+ let B = aU[M]
357+ let aq = aS(B, aL, aN, R, S)._1
358+ let Y = fraction(X, aq, S)
359+ let bz = ab("G", B, k, toBase58String(aY.transactionId))
360+ let bA = aw("PENDING", X, aq, Y, height, lastBlock.timestamp, (height + by), 0)
361+[Burn(aN, X), StringEntry(bz, bA), aC(z(B), X, Y), aC(A(B, k), X, Y), IntegerEntry(q(j), (aJ(j) - Y))]
607362 }
608363
609364
610365
611-@Callable(bB)
612-func poolEvaluatePutByPriceAssetREADONLY (cV,dB) = {
613- let aZ = addressFromStringValue(t(aT, U(cV)))
614- let cY = x(invoke(aZ, "getPoolConfigWrapperREADONLY", nil, nil))
615- let bd = fromBase58String(D(cY[j]))
616- let dr = D(cY[k])
617- let ds = fromBase58String(dr)
618- let dt = D(cY[l])
619- let du = fromBase58String(dt)
620- let dd = parseIntValue(D(cY[m]))
621- let de = parseIntValue(D(cY[n]))
622- let dv = D(cY[i])
623- let df = valueOrErrorMessage(assetInfo(bd), (("Asset " + toBase58String(bd)) + " doesn't exist")).quantity
624- let dI = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [dr], nil))
625- let dJ = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [dt], nil))
626- let dK = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dI, dd], nil)))
627- let dL = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dJ, de], nil)))
628- let dy = if ((df == 0))
629- then g
630- else parseBigIntValue(D(invoke(aZ, "calcPriceBigIntWrapperREADONLY", [toString(dL), toString(dK)], nil)))
631- let dj = B(invoke(aZ, "fromX18WrapperREADONLY", [toString(dy), b], nil))
632- let dA = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dB, de], nil)))
633- let dz = fraction(dA, d, dy)
634- let dq = B(invoke(aZ, "fromX18WrapperREADONLY", [toString(dz), dd], nil))
635- let bZ = invoke(aZ, "estimatePutOperationWrapperREADONLY", ["", 500000, dq, ds, dB, du, "", true, false], nil)
636- let dM = {
637- let z = bZ
638- if (if (if ($isInstanceOf(z._1, "Int"))
639- then if ($isInstanceOf(z._3, "Int"))
640- then if ($isInstanceOf(z._4, "Int"))
641- then if ($isInstanceOf(z._5, "Int"))
642- then $isInstanceOf(z._6, "Int")
643- else false
644- else false
645- else false
646- else false)
647- then (size(z) == 13)
648- else false)
649- then {
650- let dD = z._1
651- let dE = z._3
652- let dF = z._4
653- let dG = z._5
654- let dH = z._6
655- $Tuple5(dD, dE, dF, dG, dH)
656- }
657- else throw("Couldn't cast types")
658- }
659- let dD = dM._1
660- let dE = dM._2
661- let dF = dM._3
662- let dG = dM._4
663- let dH = dM._5
664- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(dD), toString(dj), toString(dF), toString(dG), toString(dH), dv, toString(dq), toString(dB)], e))
366+@Callable(aY)
367+func executeGetRequest (j,k,l) = {
368+ let ad = addressFromStringValue(k)
369+ let bB = aB(j)
370+ let aN = fromBase58String(bB[L])
371+ let aL = fromBase58String(j)
372+ let B = bB[M]
373+ let bz = ab("G", B, k, l)
374+ let bC = split(c(bz), a)
375+ let ao = bC[af]
376+ let au = parseIntValue(bC[al])
377+ let bD = parseIntValue(bC[ag])
378+ let bE = parseIntValue(bC[ai])
379+ if ((ao != "PENDING"))
380+ then h("Status is not PENDING", j, k, l)
381+ else if ((au > height))
382+ then h(((("EndHeight[" + toString(au)) + "] > ") + toString(height)), j, k, l)
383+ else [ScriptTransfer(ad, bE, aL), StringEntry(bz, ax(bC, "FINISHED", lastBlock.timestamp)), aE(z(B), bD, bE), aE(A(B, k), bD, bE)]
665384 }
666385
667386
668387
669-@Callable(bB)
670-func poolEvaluateGetREADONLY (dN,dO) = {
671- let aZ = addressFromStringValue(t(aT, U(dN)))
672- let bZ = invoke(aZ, "estimateGetOperationWrapperREADONLY", ["", dN, dO, toString(aZ)], nil)
673- let dP = {
674- let z = bZ
675- if (if (if ($isInstanceOf(z._1, "Int"))
676- then if ($isInstanceOf(z._2, "Int"))
677- then if ($isInstanceOf(z._5, "Int"))
678- then if ($isInstanceOf(z._6, "Int"))
679- then if ($isInstanceOf(z._7, "Int"))
680- then if ($isInstanceOf(z._8, "String"))
681- then $isInstanceOf(z._9, "String")
682- else false
683- else false
684- else false
685- else false
686- else false
687- else false)
688- then (size(z) == 10)
689- else false)
690- then {
691- let dQ = z._1
692- let dR = z._2
693- let dF = z._5
694- let dG = z._6
695- let dH = z._7
696- let dj = z._8
697- let dv = z._9
698- $Tuple7(dQ, dR, dF, dG, dH, dj, dv)
699- }
700- else throw("Couldn't cast types")
701- }
702- let dQ = dP._1
703- let dR = dP._2
704- let dF = dP._3
705- let dG = dP._4
706- let dH = dP._5
707- let dj = dP._6
708- let dv = dP._7
709- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dQ), toString(dR), toString(dF), toString(dG), toString(dH), dj, dv], e))
710- }
711-
712-
713-
714-@Callable(bB)
715-func gwxUserInfoREADONLY (am) = {
716- let dS = x(invoke(aX, "gwxUserInfoREADONLY", [am], nil))
717- let dT = B(dS[0])
718- $Tuple2(nil, makeString(["%d", toString(dT)], e))
719- }
720-
721-
722-
723-@Callable(bB)
724-func unstakeAndGetOneTknV2 (aZ,dU,dV,dW) = {
725- let ca = invoke(addressFromStringValue(aZ), "unstakeAndGetOneTknV2", [dU, dV, dW], nil)
726- if ((ca == ca))
727- then $Tuple2(nil, unit)
388+@Callable(aY)
389+func topUpBalance (j,bF) = {
390+ let bB = aB(j)
391+ let bu = value(aY.payments[0])
392+ let bG = value(bu.assetId)
393+ let bH = toBase58String(bG)
394+ let aN = fromBase58String(bB[L])
395+ let R = parseIntValue(bB[N])
396+ let S = parseIntValue(bB[O])
397+ let B = bB[M]
398+ let bI = u(B, toString(aY.caller))
399+ let aW = valueOrElse(getInteger(this, bI), 0)
400+ let bJ = [bb(aY, j), if ((aW != height))
401+ then true
402+ else throw("only one topUp per block is allowed"), if ((bF > 0))
403+ then true
404+ else throw("only positive delta is allowed")]
405+ if ((bJ == bJ))
406+ then if ((j != bH))
407+ then throw("attached payment's asset id is NOT matched passed baseAssetStr")
408+ else if ((size(aY.payments) > 1))
409+ then throw("only one payment can be attached")
410+ else {
411+ let aq = aK(B, bG, bF, aN, R, S)._1
412+[IntegerEntry(s(B), aq), IntegerEntry(w(B, height, lastBlock.timestamp), aq), IntegerEntry(bI, height), IntegerEntry(q(bH), (aJ(bH) + bF))]
413+ }
728414 else throw("Strict value is not equal to itself.")
729415 }
730416
731417
732418
733-@Callable(bB)
734-func getKeysBulkInternal (bN,dX,bT) = if ((bN == size(dX)))
735- then $Tuple2(nil, bT)
736- else {
737- let cp = split(dX[bN], "++")
738- let bv = addressFromStringValue(cp[0])
739- let s = cp[1]
740- let bw = cp[2]
741- let y = bu(bv, s, bw)
742- let bZ = (bT :+ y)
743- let ca = invoke(this, "getKeysBulkInternal", [(bN + 1), dX, bZ], nil)
744- if ((ca == ca))
745- then $Tuple2(nil, ca)
746- else throw("Strict value is not equal to itself.")
747- }
748-
749-
750-
751-@Callable(bB)
752-func getKeysBulk (dX) = {
753- let bZ = invoke(this, "getKeysBulkInternal", [0, dX, nil], nil)
754- $Tuple2(nil, bZ)
419+@Callable(aY)
420+func currentSysParamsREST (j) = {
421+ let bK = aT(j)
422+ let aq = bK._1.value
423+ let S = bK._2.value
424+ let aP = bK._3.value
425+ let aO = bK._4.value
426+ let aQ = bK._5.value
427+ let aR = bK._6.value
428+ let bL = makeString(["startCurrentSysParamsREST", toString(aq), toString(S), toString(aP), toString(aO), toString(aQ), toString(aR), "endCurrentSysParamsREST"], a)
429+ throw(bL)
755430 }
756431
757432
758433
759-@Callable(bB)
760-func setManager (dY) = {
761- let bF = bA(bB)
762- if ((bF == bF))
434+@Callable(aY)
435+func setManager (bM) = {
436+ let bd = aX(aY)
437+ if ((bd == bd))
763438 then {
764- let dZ = fromBase58String(dY)
765- if ((dZ == dZ))
766- then [StringEntry(H(), dY)]
439+ let bN = fromBase58String(bM)
440+ if ((bN == bN))
441+ then [StringEntry(g(), bM)]
767442 else throw("Strict value is not equal to itself.")
768443 }
769444 else throw("Strict value is not equal to itself.")
771446
772447
773448
774-@Callable(bB)
449+@Callable(aY)
775450 func confirmManager () = {
776- let ea = bz()
777- let eb = if (isDefined(ea))
451+ let bO = aI()
452+ let bP = if (isDefined(bO))
778453 then true
779- else throw("No pending manager")
780- if ((eb == eb))
454+ else throw("no pending manager")
455+ if ((bP == bP))
781456 then {
782- let ec = if ((bB.callerPublicKey == value(ea)))
457+ let bQ = if ((aY.callerPublicKey == value(bO)))
783458 then true
784- else throw("You are not pending manager")
785- if ((ec == ec))
786- then [StringEntry(G(), toBase58String(value(ea))), DeleteEntry(H())]
459+ else throw("you are not pending manager")
460+ if ((bQ == bQ))
461+ then [StringEntry(f(), toBase58String(value(bO))), DeleteEntry(g())]
787462 else throw("Strict value is not equal to itself.")
788463 }
789464 else throw("Strict value is not equal to itself.")
790465 }
791466
792467
793-@Verifier(ed)
794-func ee () = {
795- let ef = {
796- let z = bx()
797- if ($isInstanceOf(z, "ByteVector"))
468+@Verifier(bR)
469+func bS () = {
470+ let bT = {
471+ let aG = aF()
472+ if ($isInstanceOf(aG, "ByteVector"))
798473 then {
799- let bD = z
800- bD
474+ let ba = aG
475+ ba
801476 }
802- else if ($isInstanceOf(z, "Unit"))
803- then ed.senderPublicKey
477+ else if ($isInstanceOf(aG, "Unit"))
478+ then bR.senderPublicKey
804479 else throw("Match error")
805480 }
806- sigVerify(ed.bodyBytes, ed.proofs[0], ef)
481+ sigVerify(bR.bodyBytes, bR.proofs[0], bT)
807482 }
808483
Full:
OldNewDifferences
1-{-# STDLIB_VERSION 6 #-}
1+{-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 8
4+let a = "__"
55
6-let b = 100000000
6+let b = ""
77
8-let c = 18
9-
10-let d = toBigInt(1000000000000000000)
11-
12-let e = "__"
13-
14-let f = b
15-
16-let g = toBigInt(0)
17-
18-let h = 1
19-
20-let i = 2
21-
22-let j = 3
23-
24-let k = 4
25-
26-let l = 5
27-
28-let m = 6
29-
30-let n = 7
31-
32-let o = 8
33-
34-let p = 9
35-
36-let q = 10
37-
38-func r (s) = valueOrErrorMessage(getString(s), (("mandatory this." + s) + " is not defined"))
8+func c (d) = valueOrErrorMessage(getString(this, d), ("No data for this.key=" + d))
399
4010
41-func t (u,s) = valueOrErrorMessage(getString(u, s), (((("mandatory " + toString(u)) + ".") + s) + " is not defined"))
11+func e (d) = valueOrErrorMessage(getBoolean(this, d), ("No data for this.key=" + d))
4212
4313
44-func v (u,s) = valueOrElse(getInteger(u, s), 0)
14+func f () = makeString(["%s", "managerPublicKey"], a)
4515
4616
47-func w (u,s) = valueOrErrorMessage(getInteger(u, s), (("mandatory this." + s) + " is not defined"))
17+func g () = makeString(["%s", "pendingManagerPublicKey"], a)
4818
4919
50-func x (y) = {
51- let z = y
52- if ($isInstanceOf(z, "List[Any]"))
53- then {
54- let A = z
55- A
56- }
57- else throw("fail to cast into List[Any]")
20+func h (i,j,k,l) = throw(((((((i + ": baseAssetStr=") + j) + " userAddressStr=") + k) + " getTxIdStr=") + l))
21+
22+
23+func m () = makeString(["%s", "assetsStoreContract"], a)
24+
25+
26+func n (j) = ("%s%s%s__config__asset__" + j)
27+
28+
29+func o (p) = makeString(["%s%s", "proxyAddress", p], a)
30+
31+
32+func q (p) = makeString(["%s%s", "balance", p], a)
33+
34+
35+func r () = "%s__nextInternalAssetId"
36+
37+
38+func s (t) = ("%s%s%d__price__last__" + t)
39+
40+
41+func u (t,v) = makeString(["%s%s%s%d%s__topup__last__height", t, v], a)
42+
43+
44+func w (t,x,y) = makeString(["%s%s%d%d%d__price__history", t, toString(x), toString(y)], a)
45+
46+
47+func z (t) = ("%s%s%d__total__locked__" + t)
48+
49+
50+func A (B,k) = makeString(["%s%s%d%s__total__locked", B, k], a)
51+
52+
53+func C (D) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(D))
54+
55+
56+func E (j) = ("%s%s%s__mappings__baseAsset2internalId__" + j)
57+
58+
59+func F (G) = ("%s%s%s__mappings__share2baseAssetId__" + G)
60+
61+
62+func H (j) = ("%s%s%s__mappings__baseAsset2shareId__" + j)
63+
64+
65+func I (B) = ("%s%s%d__shutdown__put__" + B)
66+
67+
68+func J (B) = ("%s%s%d__shutdown__manager__" + B)
69+
70+
71+func K () = addressFromStringValue(value(getString(m())))
72+
73+
74+let L = 1
75+
76+let M = 2
77+
78+let N = 3
79+
80+let O = 4
81+
82+let P = 5
83+
84+func Q (G,B,R,S,T) = makeString(["%s%d%d%d%d", G, B, toString(R), toString(S), toString(T)], a)
85+
86+
87+let U = 1
88+
89+let V = 2
90+
91+func W (X,Y) = makeString(["%d%d", toString(X), toString(Y)], a)
92+
93+
94+func Z (d) = {
95+ let aa = split(valueOrElse(getString(this, d), W(0, 0)), a)
96+[-1, parseIntValue(aa[U]), parseIntValue(aa[V])]
5897 }
5998
6099
61-func B (y) = {
62- let z = y
63- if ($isInstanceOf(z, "Int"))
64- then {
65- let C = z
66- C
67- }
68- else throw("fail to cast into Int")
100+func ab (ac,B,ad,ae) = makeString(["%s%d%s%s", ac, B, ad, ae], a)
101+
102+
103+let af = 1
104+
105+let ag = 2
106+
107+let ah = 3
108+
109+let ai = 4
110+
111+let aj = 5
112+
113+let ak = 6
114+
115+let al = 7
116+
117+let am = 8
118+
119+func an (ao,ap,aq,ar,as,at,au,av) = makeString(["%s%d%d%d%d%d%d%d", ao, ap, aq, ar, as, at, au, av], a)
120+
121+
122+func aw (ao,ap,aq,ar,as,at,au,av) = an(ao, toString(ap), toString(aq), toString(ar), toString(as), toString(at), toString(au), toString(av))
123+
124+
125+func ax (ay,az,aA) = an(az, ay[ag], ay[ah], ay[ai], ay[aj], ay[ak], ay[al], toString(aA))
126+
127+
128+func aB (j) = {
129+ let d = n(j)
130+ split(c(d), a)
69131 }
70132
71133
72-func D (y) = {
73- let z = y
74- if ($isInstanceOf(z, "String"))
75- then {
76- let E = z
77- E
78- }
79- else throw("fail to cast into String")
134+func aC (d,X,Y) = {
135+ let aD = Z(d)
136+ StringEntry(d, W((aD[U] + X), (aD[V] + Y)))
80137 }
81138
82139
83-func F () = "%s%s__config__factoryAddress"
84-
85-
86-func G () = "%s__managerPublicKey"
87-
88-
89-func H () = "%s__pendingManagerPublicKey"
90-
91-
92-let I = 1
93-
94-let J = 2
95-
96-let K = 3
97-
98-let L = 4
99-
100-let M = 5
101-
102-let N = 6
103-
104-let O = 7
105-
106-let P = 8
107-
108-func Q () = "%s__factoryConfig"
109-
110-
111-func R (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
112-
113-
114-func T () = "%s__lpTokensList"
115-
116-
117-func U (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], e)
118-
119-
120-func V (W) = makeString(["%s%s", "poolWeight", W], e)
121-
122-
123-func X () = addressFromStringValue(r(F()))
124-
125-
126-func Y () = split(valueOrElse(getString(X(), T()), ""), e)
127-
128-
129-func Z (aa) = split(t(aa, Q()), e)
130-
131-
132-func ab (ac) = addressFromStringValue(ac[J])
133-
134-
135-func ad (ac) = addressFromStringValue(ac[M])
136-
137-
138-func ae (ac) = addressFromStringValue(ac[I])
139-
140-
141-func af (ac) = addressFromStringValue(ac[P])
142-
143-
144-func ag () = "%s__config"
145-
146-
147-func ah () = "%s%s__stats__activeTotalLocked"
148-
149-
150-func ai () = "%s%s__stats__locksDurationSumInBlocks"
151-
152-
153-func aj () = "%s%s__stats__locksCount"
154-
155-
156-func ak () = "%s%s__stats__activeUsersCount"
157-
158-
159-func al (am) = makeString(["%s%s%s__mapping__user2num", am], e)
160-
161-
162-func an (ao) = makeString(["%s%s%s__mapping__num2user", ao], e)
163-
164-
165-func ap (aq) = makeString(["%s%d%s__paramByUserNum", aq, "amount"], e)
166-
167-
168-func ar (aq) = makeString(["%s%d%s__paramByUserNum", aq, "start"], e)
169-
170-
171-func as (aq) = makeString(["%s%d%s__paramByUserNum", aq, "duration"], e)
172-
173-
174-func at (aq) = makeString(["%s%d%s__paramByUserNum", aq, "k"], e)
175-
176-
177-func au (aq) = makeString(["%s%d%s__paramByUserNum", aq, "b"], e)
178-
179-
180-func av (aq,aw) = makeString(["%s%d%s%d__paramByPeriod", aq, "k", aw], e)
181-
182-
183-func ax (aq,aw) = makeString(["%s%d%s%d__paramByPeriod", aq, "b", aw], e)
184-
185-
186-func ay (aq) = makeString(["%s%d__userBoostEmissionLastInt", aq], e)
187-
188-
189-func az (aq) = makeString(["%s%d__maxBoostInt", aq], e)
190-
191-
192-func aA () = "%s%s__maxBoostInt__total"
193-
194-
195-func aB (aq) = makeString(["%s%d__userBoostAvaliableToClaimTotal", aq], e)
196-
197-
198-func aC (aq) = makeString(["%s%d__userBoostClaimed", aq], e)
199-
200-
201-func aD () = "%s%s__gwxCached__total"
202-
203-
204-func aE (aF,aG) = makeString(["%s%s%s__staked", aF, aG], e)
205-
206-
207-func aH (aG) = ("%s%s%s__staked__total__" + aG)
208-
209-
210-func aI (aG,aF) = makeString(["%s%s%s__claimed", aF, aG], e)
211-
212-
213-func aJ (aG,aF) = makeString(["%s%s%s__claimedMinReward", aF, aG], e)
214-
215-
216-func aK (aG,aF) = makeString(["%s%s%s__claimedBoostReward", aF, aG], e)
217-
218-
219-func aL (aM,s) = valueOrElse(getInteger(aM, s), 0)
220-
221-
222-func aN () = "%s%s__ratePerBlock__current"
223-
224-
225-func aO () = "%s%s__ratePerBlockMax__current"
226-
227-
228-func aP () = "%s%s__emission__startBlock"
229-
230-
231-func aQ () = "%s%s__emission__duration"
232-
233-
234-func aR () = "%s%s__emission__endBlock"
235-
236-
237-func aS () = "%s__addonAddr"
238-
239-
240-let aT = X()
241-
242-let aU = Z(aT)
243-
244-let aV = ad(aU)
245-
246-let aM = ae(aU)
247-
248-let aW = af(aU)
249-
250-let aX = ab(aU)
251-
252-func aY (aZ) = {
253- let ba = invoke(aT, "getInFeeREADONLY", [toString(aZ)], nil)
254- if ($isInstanceOf(ba, "Int"))
255- then ba
256- else throw(($getType(ba) + " couldn't be cast to Int"))
140+func aE (d,X,Y) = {
141+ let aD = Z(d)
142+ StringEntry(d, W((aD[U] - X), (aD[V] - Y)))
257143 }
258144
259145
260-func bb (aZ) = {
261- let ba = invoke(aT, "getOutFeeREADONLY", [toString(aZ)], nil)
262- if ($isInstanceOf(ba, "Int"))
263- then ba
264- else throw(($getType(ba) + " couldn't be cast to Int"))
265- }
266-
267-
268-func bc (bd) = {
269- let be = t(aT, U(bd))
270- let bf = b
271- let bg = getIntegerValue(aT, V(be))
272- let bh = w(aV, aN())
273- let bi = w(aV, aO())
274- let bj = 3
275- let bk = (fraction(bh, bg, bf) / bj)
276- let bl = fraction(bi, bg, bf)
277- let bm = (bj * b)
278- let bn = v(aM, aH(bd))
279-[bk, bm, bn]
280- }
281-
282-
283-func bo (bp,bq,br) = {
284- let bs = fraction(bq, b, br)
285- let bt = fraction(bp, bs, b)
286-[bt]
287- }
288-
289-
290-func bu (bv,s,bw) = if ((bw == "string"))
291- then getStringValue(bv, s)
292- else if ((bw == "integer"))
293- then toString(getIntegerValue(bv, s))
294- else if ((bw == "boolean"))
295- then toString(getBooleanValue(bv, s))
296- else throw("unknown type. expected string/integer/boolean")
297-
298-
299-func bx () = {
300- let z = getString(G())
301- if ($isInstanceOf(z, "String"))
146+func aF () = {
147+ let aG = getString(f())
148+ if ($isInstanceOf(aG, "String"))
302149 then {
303- let by = z
304- fromBase58String(by)
150+ let aH = aG
151+ fromBase58String(aH)
305152 }
306- else if ($isInstanceOf(z, "Unit"))
153+ else if ($isInstanceOf(aG, "Unit"))
307154 then unit
308155 else throw("Match error")
309156 }
310157
311158
312-func bz () = {
313- let z = getString(H())
314- if ($isInstanceOf(z, "String"))
159+func aI () = {
160+ let aG = getString(g())
161+ if ($isInstanceOf(aG, "String"))
315162 then {
316- let by = z
317- fromBase58String(by)
163+ let aH = aG
164+ fromBase58String(aH)
318165 }
319- else if ($isInstanceOf(z, "Unit"))
166+ else if ($isInstanceOf(aG, "Unit"))
320167 then unit
321168 else throw("Match error")
322169 }
323170
324171
325-func bA (bB) = {
326- let bC = throw("Permission denied")
327- let z = bx()
328- if ($isInstanceOf(z, "ByteVector"))
172+func aJ (p) = valueOrElse(getInteger(q(p)), 0)
173+
174+
175+func aK (B,aL,aM,aN,R,S) = {
176+ let aa = Z(z(B))
177+ let aO = aa[V]
178+ let aP = aJ(toBase58String(aL))
179+ let aQ = (aP + aM)
180+ if ((0 > aQ))
181+ then throw(((("baseAssetBalanceConsideringLock < 0: baseAssetBalance=" + toString(aP)) + " baseAssetBalanceConsideringLock=") + toString(aQ)))
182+ else {
183+ let aR = value(assetInfo(aN)).quantity
184+ let aq = if ((aR == 0))
185+ then (1 * S)
186+ else fraction(aQ, S, aR)
187+ $Tuple5(aq, aP, aO, aQ, aR)
188+ }
189+ }
190+
191+
192+func aS (B,aL,aN,R,S) = {
193+ let aa = Z(z(B))
194+ let aO = aa[V]
195+ let aP = aJ(toBase58String(aL))
196+ let aQ = aP
197+ let aR = value(assetInfo(aN)).quantity
198+ let aq = value(getInteger(s(B)))
199+ $Tuple5(aq, aP, aO, aQ, aR)
200+ }
201+
202+
203+func aT (j) = {
204+ let aL = fromBase58String(j)
205+ let aU = aB(j)
206+ let G = aU[L]
207+ let aN = fromBase58String(G)
208+ let R = parseIntValue(aU[N])
209+ let S = parseIntValue(aU[O])
210+ let B = aU[M]
211+ let aV = aS(B, aL, aN, R, S)
212+ let aW = {
213+ let aG = getInteger(u(B, getStringValue(o(j))))
214+ if ($isInstanceOf(aG, "Int"))
215+ then {
216+ let x = aG
217+ value(x)
218+ }
219+ else if ($isInstanceOf(aG, "Unit"))
220+ then getIntegerValue(u(B, toString(addressFromPublicKey(fromBase58String(getStringValue(f()))))))
221+ else throw("undefined behaviour in privateCurrentSysParamsREST match")
222+ }
223+ $Tuple8(IntegerEntry("price", aV._1), IntegerEntry("decimalsMultPrice", S), IntegerEntry("baseAssetBalance", aV._2), IntegerEntry("totalLockedBaseAmount", aV._3), IntegerEntry("baseAssetBalanceConsideringLock", aV._4), IntegerEntry("shareEmission", aV._5), IntegerEntry("baseAssetDecimals", value(assetInfo(aL)).decimals), IntegerEntry("lastTopUpTimestamp", value(blockInfoByHeight(aW)).timestamp))
224+ }
225+
226+
227+func aX (aY) = {
228+ let aZ = throw("permission denied")
229+ let aG = aF()
230+ if ($isInstanceOf(aG, "ByteVector"))
329231 then {
330- let bD = z
331- if ((bB.callerPublicKey == bD))
232+ let ba = aG
233+ if ((aY.callerPublicKey == ba))
332234 then true
333- else bC
235+ else aZ
334236 }
335- else if ($isInstanceOf(z, "Unit"))
336- then if ((bB.caller == this))
237+ else if ($isInstanceOf(aG, "Unit"))
238+ then if ((aY.caller == this))
337239 then true
338- else bC
240+ else aZ
339241 else throw("Match error")
340242 }
341243
342244
343-@Callable(bB)
344-func constructor (bE) = {
345- let bF = bA(bB)
346- if ((bF == bF))
347- then [StringEntry(F(), bE)]
245+func bb (aY,p) = {
246+ let bc = (toString(aY.caller) == valueOrElse(getString(o(p)), b))
247+ if (bc)
248+ then true
249+ else {
250+ let bd = aX(aY)
251+ if ((bd == bd))
252+ then true
253+ else throw("Strict value is not equal to itself.")
254+ }
255+ }
256+
257+
258+@Callable(aY)
259+func constructor (K) = {
260+ let bd = aX(aY)
261+ if ((bd == bd))
262+ then [StringEntry(m(), K)]
348263 else throw("Strict value is not equal to itself.")
349264 }
350265
351266
352267
353-@Callable(bB)
354-func currentRewardRateREADONLY (bd) = {
355- let bG = bc(bd)
356- let bh = bG[0]
357- let bm = bG[1]
358- let bn = bG[2]
359- $Tuple2(nil, makeString(["%d%d%d", toString(bh), toString(bm), toString(bn)], e))
268+@Callable(aY)
269+func adminRegisterAsset (j,be,bf,bg,bh,bi,bj) = {
270+ let aL = fromBase58String(j)
271+ let bk = value(assetInfo(aL)).decimals
272+ let bl = aX(aY)
273+ if ((bl == bl))
274+ then if ((toString(addressFromStringValue(bi)) != bi))
275+ then throw("invalid shutdownManagerAddress")
276+ else if ((0 > bh))
277+ then throw(("invalid getDelayinBlocks=" + toString(bh)))
278+ else {
279+ let bm = Issue(be, bf, 1, bk, true)
280+ let aN = calculateAssetId(bm)
281+ let G = toBase58String(aN)
282+ let S = ((100 * 1000) * 1000)
283+ let R = pow(10, 0, bk, 0, 0, DOWN)
284+ let bn = (1 * S)
285+ let bo = valueOrElse(getInteger(this, r()), 0)
286+ let B = toString(bo)
287+ let bp = invoke(K(), "createOrUpdate", [G, bg, false], nil)
288+ if ((bp == bp))
289+ then {
290+ let bq = invoke(K(), "addLabel", [G, "STAKING_LP"], nil)
291+ if ((bq == bq))
292+ then [StringEntry(n(j), Q(G, B, R, S, bh)), StringEntry(C(bo), j), StringEntry(E(j), B), StringEntry(F(G), j), StringEntry(H(j), G), BooleanEntry(I(B), false), StringEntry(J(B), bi), IntegerEntry(r(), (bo + 1)), IntegerEntry(s(B), bn), IntegerEntry(w(B, height, lastBlock.timestamp), bn), bm, Burn(aN, 1), StringEntry(o(j), bj)]
293+ else throw("Strict value is not equal to itself.")
294+ }
295+ else throw("Strict value is not equal to itself.")
296+ }
297+ else throw("Strict value is not equal to itself.")
360298 }
361299
362300
363301
364-@Callable(bB)
365-func currentUserRewardRateREADONLY (bd,am) = {
366- let bG = bc(bd)
367- let bh = bG[0]
368- let bm = bG[1]
369- let bn = bG[2]
370- let bH = v(aM, aE(am, bd))
371- let bI = split(D(invoke(aM, "claimWxREADONLY", [bd, am], nil)), e)
372- let bJ = valueOrErrorMessage(parseInt(bI[5]), "couldn't parse minRewardPart")
373- let bK = valueOrErrorMessage(parseInt(bI[6]), "couldn't parse boostRewardPart")
374- let bL = bI[7]
375- let bM = if ((bK == 0))
376- then (1 * b)
377- else fraction((bJ + bK), b, bJ)
378- $Tuple2(nil, makeString(["%d%d%d%d%d%s", toString(bh), toString(bm), toString(bn), toString(bH), toString(bM), bL], e))
302+@Callable(aY)
303+func shutdownPut (br) = {
304+ let bs = toString(br)
305+ let bt = c(C(br))
306+ let bi = c(J(bs))
307+ if ((1 > size(bt)))
308+ then throw("invalid internalBaseAssetId")
309+ else if ((toString(aY.caller) != bi))
310+ then throw("access denied")
311+ else [BooleanEntry(I(toString(br)), true)]
379312 }
380313
381314
382315
383-@Callable(bB)
384-func calcBoostBulkInternalREADONLY (bN,bO,bP,bQ,bR,bS,bT) = if ((bN == size(bO)))
385- then $Tuple2(nil, bT)
386- else {
387- let bU = bO[bN]
388- let bV = bP[bN]
389- let bW = bQ[bN]
390- let bX = bR[bN]
391- let bY = {
392- let ba = invoke(this, "calcBoostREADONLY", [bU, bV, bW, bX, bS], nil)
393- if ($isInstanceOf(ba, "String"))
394- then ba
395- else throw(($getType(ba) + " couldn't be cast to String"))
396- }
397- let bZ = (bT :+ bY)
398- let ca = {
399- let ba = invoke(this, "calcBoostBulkInternalREADONLY", [(bN + 1), bO, bP, bQ, bR, bS, bZ], nil)
400- if ($isInstanceOf(ba, "List[Any]"))
401- then ba
402- else throw(($getType(ba) + " couldn't be cast to List[Any]"))
403- }
404- if ((ca == ca))
405- then $Tuple2(nil, ca)
406- else throw("Strict value is not equal to itself.")
407- }
408-
409-
410-
411-@Callable(bB)
412-func calcBoostBulkREADONLY (bU,bV,bW,bX,bS) = {
413- let bZ = invoke(this, "calcBoostBulkInternalREADONLY", [0, bU, bV, bW, bX, bS, nil], nil)
414- $Tuple2(nil, bZ)
415- }
416-
417-
418-
419-@Callable(bB)
420-func calcBoostREADONLY (bU,bV,bW,bX,bS) = {
421- let cb = aW
422- let cc = "empty"
423- let cd = parseIntValue(split(t(aX, ag()), e)[4])
424- let aG = if ((bX == ""))
425- then cc
426- else bX
427- let aF = if ((bS == ""))
428- then cc
429- else bS
430- let ce = valueOrElse(getString(aX, al(bS)), cc)
431- let cf = valueOrElse(getInteger(aX, ap(ce)), 0)
432- let cg = valueOrElse(getInteger(aX, ar(ce)), height)
433- let bq = valueOrElse(getInteger(aX, as(ce)), 0)
434- let ch = (cg + bq)
435- let ci = max([(ch - height), 0])
436- let cj = (cf + bU)
437- let ck = min([(ci + bV), cd])
438- let cl = B(x(invoke(aX, "gwxUserInfoREADONLY", [aF], nil))[0])
439- let cm = bo(cj, ck, cd)[0]
440- let cn = x(invoke(cb, "calcGwxParamsREADONLY", [cm, height, ck], nil))
441- let co = (cm - cl)
442- let cp = B(cn[0])
443- let cq = B(cn[1])
444- let aw = toString(B(cn[2]))
445- let cr = aA()
446- let cs = ((cm * ck) / 2)
447- let ct = v(aX, cr)
448- let cu = {
449- let ba = invoke(aX, "getTotalCachedGwxREADONLY", nil, nil)
450- if ($isInstanceOf(ba, "Int"))
451- then ba
452- else throw(($getType(ba) + " couldn't be cast to Int"))
453- }
454- let cv = 1000
455- let cw = (w(aV, aN()) * cv)
456- let cx = aE(aF, aG)
457- let cy = aH(aG)
458- let cz = aL(aM, cx)
459- let cA = aL(aM, cy)
460- let cB = (cz + bW)
461- let cC = (cA + bW)
462- let bg = if ((aG != cc))
463- then {
464- let be = valueOrErrorMessage(getString(aT, R(aG)), ("unsupported lp asset " + aG))
465- getIntegerValue(aT, V(be))
466- }
467- else 0
468- let cD = fraction(cw, bg, (f * 3))
469- let cE = if ((cC != 0))
470- then fraction(cD, b, cC)
471- else 0
472- let cF = fraction(cE, cB, b)
473- let cG = (cD * 2)
474- let cH = fraction(cm, cG, (cu + co))
475- let cI = min([cH, (cF * 2)])
476- let cJ = if ((cF == 0))
477- then (1 * b)
478- else fraction((cI + cF), b, cF)
479- $Tuple2(nil, makeString(["%d%d%s", toString(cm), toString(cJ), "d"], e))
480- }
481-
482-
483-
484-@Callable(bB)
485-func wxEmissionStatsREADONLY () = {
486- let cK = toString(b)
487- let cL = "1"
488- let bh = w(aV, aN())
489- let cM = w(aV, aP())
490- let cN = if ((cM > height))
491- then 0
492- else (height - cM)
493- let cO = (1440 * 365)
494- let cP = (201000000 * b)
495- let cQ = if ((cN > cO))
496- then cP
497- else fraction(cP, cN, cO)
498- let cR = ((bh * cN) + cQ)
499- let cS = v(aX, ah())
500- let cT = v(aX, ai())
501- let cU = v(aX, aj())
502- $Tuple2(nil, makeString(["%d%d%d%d", toString(cR), toString(cS), toString(cT), toString(cU)], e))
503- }
504-
505-
506-
507-@Callable(bB)
508-func poolStatsREADONLY (cV) = {
509- let aZ = addressFromStringValue(t(aT, U(cV)))
510- let cW = {
511- let ba = invoke(aT, "getPoolStatusREADONLY", [toString(aZ)], nil)
512- if ($isInstanceOf(ba, "Int"))
513- then ba
514- else throw(($getType(ba) + " couldn't be cast to Int"))
515- }
516- let cX = "%d%d%d%d%d%d%d%d%d%s"
517- if ((cW == 4))
518- then $Tuple2(nil, makeString([cX, toString(0), toString(0), toString(0), toString(0), toString(0), toString(0), toString(0), toString(0), toString(0), toString(false)], e))
316+@Callable(aY)
317+func put () = {
318+ let bu = value(aY.payments[0])
319+ let aL = value(bu.assetId)
320+ let j = toBase58String(aL)
321+ let k = toString(aY.caller)
322+ let aU = aB(j)
323+ let G = aU[L]
324+ let aN = fromBase58String(G)
325+ let R = parseIntValue(aU[N])
326+ let S = parseIntValue(aU[O])
327+ let B = aU[M]
328+ let bv = e(I(B))
329+ if (bv)
330+ then throw("put operation is blocked")
519331 else {
520- let cY = x(invoke(aZ, "getPoolConfigWrapperREADONLY", nil, nil))
521- let bd = fromBase58String(D(cY[j]))
522- let cZ = D(cY[k])
523- let da = D(cY[l])
524- let db = D(cY[o])
525- let dc = D(cY[p])
526- let dd = parseIntValue(D(cY[m]))
527- let de = parseIntValue(D(cY[n]))
528- let df = valueOrErrorMessage(assetInfo(bd), (("Asset " + toBase58String(bd)) + " doesn't exist")).quantity
529- let dg = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [cZ], nil))
530- let dh = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [da], nil))
531- let di = if ((df == 0))
532- then [toString(g), toString(g), toString(g)]
533- else x(invoke(aZ, "calcPricesWrapperREADONLY", [dg, dh, df], nil))
534- let dj = 0
535- let dk = B(invoke(aZ, "fromX18WrapperREADONLY", [di[1], b], nil))
536- let dl = B(invoke(aZ, "fromX18WrapperREADONLY", [di[2], b], nil))
537- let bg = getIntegerValue(aT, V(toString(aZ)))
538- let dm = aY(aZ)
539- let dn = bb(aZ)
540- let do = {
541- let ba = invoke(aT, "isPoolOneTokenOperationsDisabledREADONLY", [toString(aZ)], nil)
542- if ($isInstanceOf(ba, "Boolean"))
543- then ba
544- else throw(($getType(ba) + " couldn't be cast to Boolean"))
545- }
546- let dp = !(do)
547- $Tuple2(nil, makeString([cX, toString(dg), toString(dh), toString(df), toString(dj), toString(dk), toString(dl), toString(bg), toString(dm), toString(dn), toString(dp)], e))
332+ let bw = (aJ(j) + bu.amount)
333+ let aq = aS(B, aL, aN, R, S)._1
334+ let X = fraction(bu.amount, S, aq, CEILING)
335+[Reissue(aN, X, true), ScriptTransfer(aY.caller, X, aN), StringEntry(ab("P", B, k, toBase58String(aY.transactionId)), aw("FINISHED", bu.amount, aq, X, height, lastBlock.timestamp, height, lastBlock.timestamp)), ScriptTransfer(addressFromStringValue(value(getString(o(j)))), bu.amount, aL), IntegerEntry(q(j), bw)]
548336 }
549337 }
550338
551339
552340
553-@Callable(bB)
554-func poolEvaluatePutByAmountAssetREADONLY (cV,dq) = {
555- let aZ = addressFromStringValue(t(aT, U(cV)))
556- let cY = x(invoke(aZ, "getPoolConfigWrapperREADONLY", nil, nil))
557- let bd = fromBase58String(D(cY[j]))
558- let dr = D(cY[k])
559- let ds = fromBase58String(dr)
560- let dt = D(cY[l])
561- let du = fromBase58String(dt)
562- let dd = parseIntValue(D(cY[m]))
563- let de = parseIntValue(D(cY[n]))
564- let dv = D(cY[i])
565- let df = valueOrErrorMessage(assetInfo(bd), (("Asset " + toBase58String(bd)) + " doesn't exist")).quantity
566- let dg = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [dr], nil))
567- let dh = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [dt], nil))
568- let dw = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dg, dd], nil)))
569- let dx = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dh, de], nil)))
570- let dy = if ((df == 0))
571- then g
572- else parseBigIntValue(D(invoke(aZ, "calcPriceBigIntWrapperREADONLY", [toString(dx), toString(dw)], nil)))
573- let dj = B(invoke(aZ, "fromX18WrapperREADONLY", [toString(dy), b], nil))
574- let dz = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dq, dd], nil)))
575- let dA = fraction(dz, dy, d)
576- let dB = B(invoke(aZ, "fromX18WrapperREADONLY", [toString(dA), de], nil))
577- let bZ = invoke(aZ, "estimatePutOperationWrapperREADONLY", ["", 500000, dq, ds, dB, du, "", true, false], nil)
578- let dC = {
579- let z = bZ
580- if (if (if ($isInstanceOf(z._1, "Int"))
581- then if ($isInstanceOf(z._3, "Int"))
582- then if ($isInstanceOf(z._4, "Int"))
583- then if ($isInstanceOf(z._5, "Int"))
584- then $isInstanceOf(z._6, "Int")
585- else false
586- else false
587- else false
588- else false)
589- then (size(z) == 13)
590- else false)
591- then {
592- let dD = z._1
593- let dE = z._3
594- let dF = z._4
595- let dG = z._5
596- let dH = z._6
597- $Tuple5(dD, dE, dF, dG, dH)
598- }
599- else throw("Couldn't cast types")
600- }
601- let dD = dC._1
602- let dE = dC._2
603- let dF = dC._3
604- let dG = dC._4
605- let dH = dC._5
606- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(dD), toString(dj), toString(dF), toString(dG), toString(dH), dv, toString(dq), toString(dB)], e))
341+@Callable(aY)
342+func submitGetRequest () = {
343+ let bu = value(aY.payments[0])
344+ let aN = value(bu.assetId)
345+ let G = toBase58String(aN)
346+ let bx = toBase58String(aY.callerPublicKey)
347+ let ad = aY.caller
348+ let k = toString(ad)
349+ let X = bu.amount
350+ let j = c(F(G))
351+ let aL = fromBase58String(j)
352+ let aU = aB(j)
353+ let R = parseIntValue(aU[N])
354+ let S = parseIntValue(aU[O])
355+ let by = parseIntValue(aU[P])
356+ let B = aU[M]
357+ let aq = aS(B, aL, aN, R, S)._1
358+ let Y = fraction(X, aq, S)
359+ let bz = ab("G", B, k, toBase58String(aY.transactionId))
360+ let bA = aw("PENDING", X, aq, Y, height, lastBlock.timestamp, (height + by), 0)
361+[Burn(aN, X), StringEntry(bz, bA), aC(z(B), X, Y), aC(A(B, k), X, Y), IntegerEntry(q(j), (aJ(j) - Y))]
607362 }
608363
609364
610365
611-@Callable(bB)
612-func poolEvaluatePutByPriceAssetREADONLY (cV,dB) = {
613- let aZ = addressFromStringValue(t(aT, U(cV)))
614- let cY = x(invoke(aZ, "getPoolConfigWrapperREADONLY", nil, nil))
615- let bd = fromBase58String(D(cY[j]))
616- let dr = D(cY[k])
617- let ds = fromBase58String(dr)
618- let dt = D(cY[l])
619- let du = fromBase58String(dt)
620- let dd = parseIntValue(D(cY[m]))
621- let de = parseIntValue(D(cY[n]))
622- let dv = D(cY[i])
623- let df = valueOrErrorMessage(assetInfo(bd), (("Asset " + toBase58String(bd)) + " doesn't exist")).quantity
624- let dI = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [dr], nil))
625- let dJ = B(invoke(aZ, "getAccBalanceWrapperREADONLY", [dt], nil))
626- let dK = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dI, dd], nil)))
627- let dL = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dJ, de], nil)))
628- let dy = if ((df == 0))
629- then g
630- else parseBigIntValue(D(invoke(aZ, "calcPriceBigIntWrapperREADONLY", [toString(dL), toString(dK)], nil)))
631- let dj = B(invoke(aZ, "fromX18WrapperREADONLY", [toString(dy), b], nil))
632- let dA = parseBigIntValue(D(invoke(aZ, "toX18WrapperREADONLY", [dB, de], nil)))
633- let dz = fraction(dA, d, dy)
634- let dq = B(invoke(aZ, "fromX18WrapperREADONLY", [toString(dz), dd], nil))
635- let bZ = invoke(aZ, "estimatePutOperationWrapperREADONLY", ["", 500000, dq, ds, dB, du, "", true, false], nil)
636- let dM = {
637- let z = bZ
638- if (if (if ($isInstanceOf(z._1, "Int"))
639- then if ($isInstanceOf(z._3, "Int"))
640- then if ($isInstanceOf(z._4, "Int"))
641- then if ($isInstanceOf(z._5, "Int"))
642- then $isInstanceOf(z._6, "Int")
643- else false
644- else false
645- else false
646- else false)
647- then (size(z) == 13)
648- else false)
649- then {
650- let dD = z._1
651- let dE = z._3
652- let dF = z._4
653- let dG = z._5
654- let dH = z._6
655- $Tuple5(dD, dE, dF, dG, dH)
656- }
657- else throw("Couldn't cast types")
658- }
659- let dD = dM._1
660- let dE = dM._2
661- let dF = dM._3
662- let dG = dM._4
663- let dH = dM._5
664- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(dD), toString(dj), toString(dF), toString(dG), toString(dH), dv, toString(dq), toString(dB)], e))
366+@Callable(aY)
367+func executeGetRequest (j,k,l) = {
368+ let ad = addressFromStringValue(k)
369+ let bB = aB(j)
370+ let aN = fromBase58String(bB[L])
371+ let aL = fromBase58String(j)
372+ let B = bB[M]
373+ let bz = ab("G", B, k, l)
374+ let bC = split(c(bz), a)
375+ let ao = bC[af]
376+ let au = parseIntValue(bC[al])
377+ let bD = parseIntValue(bC[ag])
378+ let bE = parseIntValue(bC[ai])
379+ if ((ao != "PENDING"))
380+ then h("Status is not PENDING", j, k, l)
381+ else if ((au > height))
382+ then h(((("EndHeight[" + toString(au)) + "] > ") + toString(height)), j, k, l)
383+ else [ScriptTransfer(ad, bE, aL), StringEntry(bz, ax(bC, "FINISHED", lastBlock.timestamp)), aE(z(B), bD, bE), aE(A(B, k), bD, bE)]
665384 }
666385
667386
668387
669-@Callable(bB)
670-func poolEvaluateGetREADONLY (dN,dO) = {
671- let aZ = addressFromStringValue(t(aT, U(dN)))
672- let bZ = invoke(aZ, "estimateGetOperationWrapperREADONLY", ["", dN, dO, toString(aZ)], nil)
673- let dP = {
674- let z = bZ
675- if (if (if ($isInstanceOf(z._1, "Int"))
676- then if ($isInstanceOf(z._2, "Int"))
677- then if ($isInstanceOf(z._5, "Int"))
678- then if ($isInstanceOf(z._6, "Int"))
679- then if ($isInstanceOf(z._7, "Int"))
680- then if ($isInstanceOf(z._8, "String"))
681- then $isInstanceOf(z._9, "String")
682- else false
683- else false
684- else false
685- else false
686- else false
687- else false)
688- then (size(z) == 10)
689- else false)
690- then {
691- let dQ = z._1
692- let dR = z._2
693- let dF = z._5
694- let dG = z._6
695- let dH = z._7
696- let dj = z._8
697- let dv = z._9
698- $Tuple7(dQ, dR, dF, dG, dH, dj, dv)
699- }
700- else throw("Couldn't cast types")
701- }
702- let dQ = dP._1
703- let dR = dP._2
704- let dF = dP._3
705- let dG = dP._4
706- let dH = dP._5
707- let dj = dP._6
708- let dv = dP._7
709- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dQ), toString(dR), toString(dF), toString(dG), toString(dH), dj, dv], e))
710- }
711-
712-
713-
714-@Callable(bB)
715-func gwxUserInfoREADONLY (am) = {
716- let dS = x(invoke(aX, "gwxUserInfoREADONLY", [am], nil))
717- let dT = B(dS[0])
718- $Tuple2(nil, makeString(["%d", toString(dT)], e))
719- }
720-
721-
722-
723-@Callable(bB)
724-func unstakeAndGetOneTknV2 (aZ,dU,dV,dW) = {
725- let ca = invoke(addressFromStringValue(aZ), "unstakeAndGetOneTknV2", [dU, dV, dW], nil)
726- if ((ca == ca))
727- then $Tuple2(nil, unit)
388+@Callable(aY)
389+func topUpBalance (j,bF) = {
390+ let bB = aB(j)
391+ let bu = value(aY.payments[0])
392+ let bG = value(bu.assetId)
393+ let bH = toBase58String(bG)
394+ let aN = fromBase58String(bB[L])
395+ let R = parseIntValue(bB[N])
396+ let S = parseIntValue(bB[O])
397+ let B = bB[M]
398+ let bI = u(B, toString(aY.caller))
399+ let aW = valueOrElse(getInteger(this, bI), 0)
400+ let bJ = [bb(aY, j), if ((aW != height))
401+ then true
402+ else throw("only one topUp per block is allowed"), if ((bF > 0))
403+ then true
404+ else throw("only positive delta is allowed")]
405+ if ((bJ == bJ))
406+ then if ((j != bH))
407+ then throw("attached payment's asset id is NOT matched passed baseAssetStr")
408+ else if ((size(aY.payments) > 1))
409+ then throw("only one payment can be attached")
410+ else {
411+ let aq = aK(B, bG, bF, aN, R, S)._1
412+[IntegerEntry(s(B), aq), IntegerEntry(w(B, height, lastBlock.timestamp), aq), IntegerEntry(bI, height), IntegerEntry(q(bH), (aJ(bH) + bF))]
413+ }
728414 else throw("Strict value is not equal to itself.")
729415 }
730416
731417
732418
733-@Callable(bB)
734-func getKeysBulkInternal (bN,dX,bT) = if ((bN == size(dX)))
735- then $Tuple2(nil, bT)
736- else {
737- let cp = split(dX[bN], "++")
738- let bv = addressFromStringValue(cp[0])
739- let s = cp[1]
740- let bw = cp[2]
741- let y = bu(bv, s, bw)
742- let bZ = (bT :+ y)
743- let ca = invoke(this, "getKeysBulkInternal", [(bN + 1), dX, bZ], nil)
744- if ((ca == ca))
745- then $Tuple2(nil, ca)
746- else throw("Strict value is not equal to itself.")
747- }
748-
749-
750-
751-@Callable(bB)
752-func getKeysBulk (dX) = {
753- let bZ = invoke(this, "getKeysBulkInternal", [0, dX, nil], nil)
754- $Tuple2(nil, bZ)
419+@Callable(aY)
420+func currentSysParamsREST (j) = {
421+ let bK = aT(j)
422+ let aq = bK._1.value
423+ let S = bK._2.value
424+ let aP = bK._3.value
425+ let aO = bK._4.value
426+ let aQ = bK._5.value
427+ let aR = bK._6.value
428+ let bL = makeString(["startCurrentSysParamsREST", toString(aq), toString(S), toString(aP), toString(aO), toString(aQ), toString(aR), "endCurrentSysParamsREST"], a)
429+ throw(bL)
755430 }
756431
757432
758433
759-@Callable(bB)
760-func setManager (dY) = {
761- let bF = bA(bB)
762- if ((bF == bF))
434+@Callable(aY)
435+func setManager (bM) = {
436+ let bd = aX(aY)
437+ if ((bd == bd))
763438 then {
764- let dZ = fromBase58String(dY)
765- if ((dZ == dZ))
766- then [StringEntry(H(), dY)]
439+ let bN = fromBase58String(bM)
440+ if ((bN == bN))
441+ then [StringEntry(g(), bM)]
767442 else throw("Strict value is not equal to itself.")
768443 }
769444 else throw("Strict value is not equal to itself.")
770445 }
771446
772447
773448
774-@Callable(bB)
449+@Callable(aY)
775450 func confirmManager () = {
776- let ea = bz()
777- let eb = if (isDefined(ea))
451+ let bO = aI()
452+ let bP = if (isDefined(bO))
778453 then true
779- else throw("No pending manager")
780- if ((eb == eb))
454+ else throw("no pending manager")
455+ if ((bP == bP))
781456 then {
782- let ec = if ((bB.callerPublicKey == value(ea)))
457+ let bQ = if ((aY.callerPublicKey == value(bO)))
783458 then true
784- else throw("You are not pending manager")
785- if ((ec == ec))
786- then [StringEntry(G(), toBase58String(value(ea))), DeleteEntry(H())]
459+ else throw("you are not pending manager")
460+ if ((bQ == bQ))
461+ then [StringEntry(f(), toBase58String(value(bO))), DeleteEntry(g())]
787462 else throw("Strict value is not equal to itself.")
788463 }
789464 else throw("Strict value is not equal to itself.")
790465 }
791466
792467
793-@Verifier(ed)
794-func ee () = {
795- let ef = {
796- let z = bx()
797- if ($isInstanceOf(z, "ByteVector"))
468+@Verifier(bR)
469+func bS () = {
470+ let bT = {
471+ let aG = aF()
472+ if ($isInstanceOf(aG, "ByteVector"))
798473 then {
799- let bD = z
800- bD
474+ let ba = aG
475+ ba
801476 }
802- else if ($isInstanceOf(z, "Unit"))
803- then ed.senderPublicKey
477+ else if ($isInstanceOf(aG, "Unit"))
478+ then bR.senderPublicKey
804479 else throw("Match error")
805480 }
806- sigVerify(ed.bodyBytes, ed.proofs[0], ef)
481+ sigVerify(bR.bodyBytes, bR.proofs[0], bT)
807482 }
808483

github/deemru/w8io/873ac7e 
143.44 ms