tx · 8y9JJ95njDLc2aTHC9yCRvSWVVY6tgM9DsckQxJsp3RB 3N18bq33YEjzWkoTDhZvc7zd7eRAyv6x4aZ: -0.01400000 Waves 2021.03.07 17:20 [1427381] smart account 3N18bq33YEjzWkoTDhZvc7zd7eRAyv6x4aZ > SELF 0.00000000 Waves
{ "type": 13, "id": "8y9JJ95njDLc2aTHC9yCRvSWVVY6tgM9DsckQxJsp3RB", "fee": 1400000, "feeAssetId": null, "timestamp": 1615126885026, "version": 1, "sender": "3N18bq33YEjzWkoTDhZvc7zd7eRAyv6x4aZ", "senderPublicKey": "71DfVUys2KXcuEivd6kRxABvVQKB5k5c48qobMB1DzKN", "proofs": [ "5RJFCbDqqKy6cBFsNaV9pfYVvASEeqtLsVviCcQnAz2cPJ9qTjckgPtERANdtSZFgYj4rBeJ4NzTxyscQ197ZCzt" ], "script": "base64:AAIEAAAAAAAAABoIAhIAEgMKAQESBAoCAQESBAoCAQESAwoBAQAAAEoAAAAAB3ZlcnNpb24CAAAABTIuMC4wAAAAAAprZXlWZXJzaW9uAgAAAAd2ZXJzaW9uAAAAAAlrZXlBY3RpdmUCAAAABmFjdGl2ZQAAAAALa2V5QXNzZXRJZEECAAAACkFfYXNzZXRfaWQAAAAAC2tleUFzc2V0SWRCAgAAAApCX2Fzc2V0X2lkAAAAAAtrZXlCYWxhbmNlQQIAAAAPQV9hc3NldF9iYWxhbmNlAAAAAAtrZXlCYWxhbmNlQgIAAAAPQl9hc3NldF9iYWxhbmNlAAAAAA9rZXlTaGFyZUFzc2V0SWQCAAAADnNoYXJlX2Fzc2V0X2lkAAAAABNrZXlTaGFyZUFzc2V0U3VwcGx5AgAAABJzaGFyZV9hc3NldF9zdXBwbHkAAAAADWtleUNvbW1pc3Npb24CAAAACmNvbW1pc3Npb24AAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgIAAAAaY29tbWlzc2lvbl9zY2FsZV9kZWxpbWl0ZXIAAAAAF2tleUNvbW1pc3Npb25Hb3Zlcm5hbmNlAgAAABVjb21taXNzaW9uX2dvdmVybmFuY2UAAAAADGtleUludmFyaWFudAIAAAAJaW52YXJpYW50AAAAAAhrZXlDYXVzZQIAAAAOc2h1dGRvd25fY2F1c2UAAAAADGFkbWluUHViS2V5MQEAAAAgXOnCuTuo2NF4oXkrXhkrIhT9M9mF7f8Lrvd+y0vKKTUAAAAADGFkbWluUHViS2V5MgEAAAAgXOnCuTuo2NF4oXkrXhkrIhT9M9mF7f8Lrvd+y0vKKTUAAAAADGFkbWluUHViS2V5MwEAAAAgXOnCuTuo2NF4oXkrXhkrIhT9M9mF7f8Lrvd+y0vKKTUAAAAAFGFkbWluUHViS2V5U3RhcnRTdG9wAQAAACBc6cK5O6jY0XiheSteGSsiFP0z2YXt/wuu937LS8opNQAAAAASYWRtaW5QdWJLZXlTdGFraW5nAQAAACBc6cK5O6jY0XiheSteGSsiFP0z2YXt/wuu937LS8opNQAAAAARZ292ZXJuYW5jZUFkZHJlc3MJAQAAAAdBZGRyZXNzAAAAAQEAAAAaAVQTpUX1edzu1C+kk914p42uKvNrLVgR210AAAAADnN0YWtpbmdBZGRyZXNzCQEAAAAHQWRkcmVzcwAAAAEBAAAAGgFUE6VF9Xnc7tQvpJPdeKeNrirzay1YEdtdAAAAAARVU0ROAQAAACAhbHLlfzrA7QSYpnxV/q9DV3gktgF1Z2+X9FVE2PAgRgAAAAAQc3Rha2luZ0ZlZUluVVNETgkAAGgAAAACAAAAAAAAAAAJCQEAAAAFdmFsdWUAAAABCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAARVU0ROAAAAD21pblNwb25zb3JlZEZlZQAAAAAIaXNBY3RpdmUJAQAAABFAZXh0ck5hdGl2ZSgxMDUxKQAAAAIFAAAABHRoaXMFAAAACWtleUFjdGl2ZQAAAAALc3RyQXNzZXRJZEEJAQAAABFAZXh0ck5hdGl2ZSgxMDUzKQAAAAIFAAAABHRoaXMFAAAAC2tleUFzc2V0SWRBAAAAAAtzdHJBc3NldElkQgkBAAAAEUBleHRyTmF0aXZlKDEwNTMpAAAAAgUAAAAEdGhpcwUAAAALa2V5QXNzZXRJZEIAAAAACGFzc2V0SWRBAwkAAAAAAAACBQAAAAtzdHJBc3NldElkQQIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAALc3RyQXNzZXRJZEEAAAAACGFzc2V0SWRCAwkAAAAAAAACBQAAAAtzdHJBc3NldElkQgIAAAAFV0FWRVMFAAAABHVuaXQJAAJZAAAAAQUAAAALc3RyQXNzZXRJZEIAAAAACmFzc2V0TmFtZUEEAAAAByRtYXRjaDAFAAAACGFzc2V0SWRBAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJpZAUAAAAHJG1hdGNoMAgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAACaWQAAAAEbmFtZQMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAQAAAAFd2F2ZXMFAAAAByRtYXRjaDACAAAABVdBVkVTCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAAAAAAphc3NldE5hbWVCBAAAAAckbWF0Y2gwBQAAAAhhc3NldElkQgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACaWQFAAAAByRtYXRjaDAICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAAAmlkAAAABG5hbWUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQEAAAABXdhdmVzBQAAAAckbWF0Y2gwAgAAAAVXQVZFUwkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgAAAAAIYmFsYW5jZUEJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAC2tleUJhbGFuY2VBAAAAAAhiYWxhbmNlQgkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAALa2V5QmFsYW5jZUIAAAAADHNoYXJlQXNzZXRJZAkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1MykAAAACBQAAAAR0aGlzBQAAAA9rZXlTaGFyZUFzc2V0SWQAAAAAEHNoYXJlQXNzZXRTdXBwbHkJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkAAAAACWludmFyaWFudAkBAAAAEUBleHRyTmF0aXZlKDEwNTApAAAAAgUAAAAEdGhpcwUAAAAMa2V5SW52YXJpYW50AAAAAApjb21taXNzaW9uAAAAAAAAAAH0AAAAABRjb21taXNzaW9uR292ZXJuYW5jZQAAAAAAAAAAyAAAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAAAAAAAAD0JAAAAAAAtzY2FsZVZhbHVlMwAAAAAAAAAD6AAAAAALc2NhbGVWYWx1ZTgAAAAAAAX14QAAAAAADHNjYWxlVmFsdWUxMgAAAADo1KUQAAAAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIAAAAAAAAAA+gAAAAAEXNjYWxlVmFsdWU4RGlnaXRzAAAAAAAAAAAIAAAAABJzY2FsZVZhbHVlMTJEaWdpdHMAAAAAAAAAAAwAAAAADWRBcHBUaHJlc2hvbGQAAAAAAAAAADIAAAAAFmRBcHBUaHJlc2hvbGREZWxpbWl0ZXIAAAAAAAAAAGQAAAAAEXJhdGlvVGhyZXNob2xkTWF4AAAAAAAF9eEAAAAAABFyYXRpb1RocmVzaG9sZE1pbgAAAAAABfXdGAAAAAAFYWxwaGEAAAAAAAAAADIA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ZThEaWdpdHMFAAAABERPV04FAAAAC3NjYWxlVmFsdWU4AQAAABpjYWxjdWxhdGVIb3dNYW55U2VuZFRva2VuQQAAAAUAAAAVYW1vdW50VG9TZW5kRXN0aW1hdGVkAAAAFW1pblRva2VuUmVjZWl2ZUFtb3VudAAAAAxhbW91bnRUb2tlbkEAAAAMYW1vdW50VG9rZW5CAAAAEnRva2VuUmVjZWl2ZUFtb3VudAQAAAANc2xpcHBhZ2VWYWx1ZQkAAGUAAAACBQAAAAtzY2FsZVZhbHVlOAkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWU4AAAAAAAAAAABAAAAAAAAmJaABAAAAB5kZWx0YUJldHdlZW5NYXhBbmRNaW5TZW5kVmFsdWUJAABlAAAAAgUAAAAVYW1vdW50VG9TZW5kRXN0aW1hdGVkBQAAABVtaW5Ub2tlblJlY2VpdmVBbW91bnQEAAAAEWFtb3VudFRvU2VuZFN0ZXAxCQAAZQAAAAIFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAEFAAAAHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQAAAAAAAAAABQQAAAARYW1vdW50VG9TZW5kU3RlcDIJAABlAAAAAgUAAAAVYW1vdW50VG9TZW5kRXN0aW1hdGVkCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAAAgUAAAAeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlAAAAAAAAAAAFBAAAABFhbW91bnRUb1NlbmRTdGVwMwkAAGUAAAACBQAAABVhbW91bnRUb1NlbmRFc3RpbWF0ZWQJAABpAAAAAgkAAGgAAAACAAAAAAAAAAADBQAAAB5kZWx0YUJldHdlZW5NYXhBbmRNaW5TZW5kVmFsdWUAAAAAAAAAAAUEAAAAEWFtb3VudFRvU2VuZFN0ZXA0CQAAZQAAAAIFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAQFAAAAHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQAAAAAAAAAABQQAAAARYW1vdW50VG9TZW5kU3RlcDUJAABlAAAAAgUAAAAVYW1vdW50VG9TZW5kRXN0aW1hdGVkCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlAAAAAAAAAAAFBAAAAAF5CQAAZAAAAAIFAAAADGFtb3VudFRva2VuQgUAAAASdG9rZW5SZWNlaXZlQW1vdW50BAAAAAxpbnZhcmlhbnROZXcJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgkAAGUAAAACBQAAAAxhbW91bnRUb2tlbkEFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAUAAAABeQQAAAAXaW52YXJpYW50RXN0aW1hdGVkUmF0aW8JAABrAAAAAwUAAAAJaW52YXJpYW50BQAAAAtzY2FsZVZhbHVlOAUAAAAMaW52YXJpYW50TmV3AwkAAGcAAAACAAAAAAAAAAAACQAAZQAAAAIJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgkAAGUAAAACBQAAAAxhbW91bnRUb2tlbkEFAAAAEWFtb3VudFRvU2VuZFN0ZXA1BQAAAAF5BQAAAAlpbnZhcmlhbnQJAAACAAAAAQIAAAAkbWluVG9rZW5SZWNlaXZlQW1vdW50IHRvbyBsYXJnZS5lcnIxAwMJAABmAAAAAgUAAAAXaW52YXJpYW50RXN0aW1hdGVkUmF0aW8FAAAADXNsaXBwYWdlVmFsdWUJAABmAAAAAgkAAGUAAAACBQAAAAxpbnZhcmlhbnROZXcFAAAACWludmFyaWFudAAAAAAAAAAAAAcFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAMJAABmAAAAAgkAAGUAAAACCQEAAAANaW52YXJpYW50Q2FsYwAAAAIJAABlAAAAAgUAAAAMYW1vdW50VG9rZW5BBQAAABFhbW91bnRUb1NlbmRTdGVwMQUAAAABeQUAAAAJaW52YXJpYW50AAAAAAAAAAAACQAAaQAAAAIJAABoAAAAAgUAAAARYW1vdW50VG9TZW5kU3RlcDEJAABlAAAAAgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAAApjb21taXNzaW9uBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIDCQAAZgAAAAIJAABlAAAAAgkBAAAADWludmFyaWFudENhbGMAAAACCQAAZQAAAAIFAAAADGFtb3VudFRva2VuQQUAAAARYW1vdW50VG9TZW5kU3RlcDIFAAAAAXkFAAAACWludmFyaWFudAAAAAAAAAAAAAkAAGkAAAACCQAAaAAAAAIFAAAAEWFtb3VudFRvU2VuZFN0ZXAyCQAAZQAAAAIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAKY29tbWlzc2lvbgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAwkAAGYAAAACCQAAZQAAAAIJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgkAAGUAAAACBQAAAAxhbW91bnRUb2tlbkEFAAAAEWFtb3VudFRvU2VuZFN0ZXAzBQAAAAF5BQAAAAlpbnZhcmlhbnQAAAAAAAAAAAAJAABpAAAAAgkAAGgAAAACBQAAABFhbW91bnRUb1NlbmRTdGVwMwkAAGUAAAACBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAACmNvbW1pc3Npb24FAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgMJAABmAAAAAgkAAGUAAAACCQEAAAANaW52YXJpYW50Q2FsYwAAAAIJAABlAAAAAgUAAAAMYW1vdW50VG9rZW5BBQAAABFhbW91bnRUb1NlbmRTdGVwNAUAAAABeQUAAAAJaW52YXJpYW50AAAAAAAAAAAACQAAaQAAAAIJAABoAAAAAgUAAAARYW1vdW50VG9TZW5kU3RlcDQJAABlAAAAAgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAAApjb21taXNzaW9uBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIDCQAAZgAAAAIJAABlAAAAAgkBAAAADWludmFyaWFudENhbGMAAAACCQAAZQAAAAIFAAAADGFtb3VudFRva2VuQQUAAAARYW1vdW50VG9TZW5kU3RlcDUFAAAAAXkFAAAACWludmFyaWFudAAAAAAAAAAAAAkAAGkAAAACCQAAaAAAAAIFAAAAEWFtb3VudFRvU2VuZFN0ZXA1CQAAZQAAAAIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAKY29tbWlzc2lvbgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyCQAAAgAAAAECAAAAPnNvbWV0aGluZyB3ZW50IHdyb25nIHdoaWxlIHdvcmtpbmcgd2l0aCBhbW91bnRUb1NlbmRTdGVwLiBlcnIyAQAAABpjYWxjdWxhdGVIb3dNYW55U2VuZFRva2VuQgAAAAUAAAAVYW1vdW50VG9TZW5kRXN0aW1hdGVkAAAAFW1pblRva2VuUmVjZWl2ZUFtb3VudAAAAAxhbW91bnRUb2tlbkEAAAAMYW1vdW50VG9rZW5CAAAAEnRva2VuUmVjZWl2ZUFtb3VudAQAAAANc2xpcHBhZ2VWYWx1ZQkAAGUAAAACBQAAAAtzY2FsZVZhbHVlOAkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWU4AAAAAAAAAAABAAAAAAAAmJaABAAAAB5kZWx0YUJldHdlZW5NYXhBbmRNaW5TZW5kVmFsdWUJAABlAAAAAgUAAAAVYW1vdW50VG9TZW5kRXN0aW1hdGVkBQAAABVtaW5Ub2tlblJlY2VpdmVBbW91bnQEAAAAEWFtb3VudFRvU2VuZFN0ZXAxCQAAZQAAAAIFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAEFAAAAHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQAAAAAAAAAABQQAAAARYW1vdW50VG9TZW5kU3RlcDIJAABlAAAAAgUAAAAVYW1vdW50VG9TZW5kRXN0aW1hdGVkCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAAAgUAAAAeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlAAAAAAAAAAAFBAAAABFhbW91bnRUb1NlbmRTdGVwMwkAAGUAAAACBQAAABVhbW91bnRUb1NlbmRFc3RpbWF0ZWQJAABpAAAAAgkAAGgAAAACAAAAAAAAAAADBQAAAB5kZWx0YUJldHdlZW5NYXhBbmRNaW5TZW5kVmFsdWUAAAAAAAAAAAUEAAAAEWFtb3VudFRvU2VuZFN0ZXA0CQAAZQAAAAIFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAkAAGkAAAACCQAAaAAAAAIAAAAAAAAAAAQFAAAAHmRlbHRhQmV0d2Vlbk1heEFuZE1pblNlbmRWYWx1ZQAAAAAAAAAABQQAAAARYW1vdW50VG9TZW5kU3RlcDUJAABlAAAAAgUAAAAVYW1vdW50VG9TZW5kRXN0aW1hdGVkCQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAeZGVsdGFCZXR3ZWVuTWF4QW5kTWluU2VuZFZhbHVlAAAAAAAAAAAFBAAAAAF4CQAAZAAAAAIFAAAADGFtb3VudFRva2VuQQUAAAASdG9rZW5SZWNlaXZlQW1vdW50BAAAAAxpbnZhcmlhbnROZXcJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgUAAAABeAkAAGUAAAACBQAAAAxhbW91bnRUb2tlbkIFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAQAAAAXaW52YXJpYW50RXN0aW1hdGVkUmF0aW8JAABrAAAAAwUAAAAJaW52YXJpYW50BQAAAAtzY2FsZVZhbHVlOAUAAAAMaW52YXJpYW50TmV3AwkAAGcAAAACAAAAAAAAAAAACQAAZQAAAAIJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgUAAAABeAkAAGUAAAACBQAAAAxhbW91bnRUb2tlbkIFAAAAEWFtb3VudFRvU2VuZFN0ZXA1BQAAAAlpbnZhcmlhbnQJAAACAAAAAQIAAAAkbWluVG9rZW5SZWNlaXZlQW1vdW50IHRvbyBsYXJnZS5lcnIxAwMJAABmAAAAAgUAAAAXaW52YXJpYW50RXN0aW1hdGVkUmF0aW8FAAAADXNsaXBwYWdlVmFsdWUJAABmAAAAAgkAAGUAAAACBQAAAAxpbnZhcmlhbnROZXcFAAAACWludmFyaWFudAAAAAAAAAAAAAcFAAAAFWFtb3VudFRvU2VuZEVzdGltYXRlZAMJAABmAAAAAgkAAGUAAAACCQEAAAANaW52YXJpYW50Q2FsYwAAAAIFAAAAAXgJAABlAAAAAgUAAAAMYW1vdW50VG9rZW5CBQAAABFhbW91bnRUb1NlbmRTdGVwMQUAAAAJaW52YXJpYW50AAAAAAAAAAAACQAAaQAAAAIJAABoAAAAAgUAAAARYW1vdW50VG9TZW5kU3RlcDEJAABlAAAAAgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAAApjb21taXNzaW9uBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIDCQAAZgAAAAIJAABlAAAAAgkBAAAADWludmFyaWFudENhbGMAAAACBQAAAAF4CQAAZQAAAAIFAAAADGFtb3VudFRva2VuQgUAAAARYW1vdW50VG9TZW5kU3RlcDIFAAAACWludmFyaWFudAAAAAAAAAAAAAkAAGkAAAACCQAAaAAAAAIFAAAAEWFtb3VudFRvU2VuZFN0ZXAyCQAAZQAAAAIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAKY29tbWlzc2lvbgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAwkAAGYAAAACCQAAZQAAAAIJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgUAAAABeAkAAGUAAAACBQAAAAxhbW91bnRUb2tlbkIFAAAAEWFtb3VudFRvU2VuZFN0ZXAzBQAAAAlpbnZhcmlhbnQAAAAAAAAAAAAJAABpAAAAAgkAAGgAAAACBQAAABFhbW91bnRUb1NlbmRTdGVwMwkAAGUAAAACBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAACmNvbW1pc3Npb24FAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgMJAABmAAAAAgkAAGUAAAACCQEAAAANaW52YXJpYW50Q2FsYwAAAAIFAAAAAXgJAABlAAAAAgUAAAAMYW1vdW50VG9rZW5CBQAAABFhbW91bnRUb1NlbmRTdGVwNAUAAAAJaW52YXJpYW50AAAAAAAAAAAACQAAaQAAAAIJAABoAAAAAgUAAAARYW1vdW50VG9TZW5kU3RlcDQJAABlAAAAAgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAAApjb21taXNzaW9uBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIDCQAAZgAAAAIJAABlAAAAAgkBAAAADWludmFyaWFudENhbGMAAAACBQAAAAF4CQAAZQAAAAIFAAAADGFtb3VudFRva2VuQgUAAAARYW1vdW50VG9TZW5kU3RlcDUFAAAACWludmFyaWFudAAAAAAAAAAAAAkAAGkAAAACCQAAaAAAAAIFAAAAEWFtb3VudFRvU2VuZFN0ZXA1CQAAZQAAAAIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAKY29t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AAAAAAAAAAABBQAAAAxwbXREZWNpbWFsc0IFAAAACEhBTEZET1dOCQAAbAAAAAYAAAAAAAAAAAoAAAAAAAAAAAAFAAAADXNoYXJlRGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAACEhBTEZET1dOBAAAAApzaGFyZUlzc3VlCQAEQgAAAAUFAAAACXNoYXJlTmFtZQUAAAAQc2hhcmVEZXNjcmlwdGlvbgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAA1zaGFyZURlY2ltYWxzBgQAAAAMc2hhcmVJc3N1ZUlkCQAEOAAAAAEFAAAACnNoYXJlSXNzdWUEAAAAE2ludmFyaWFudENhbGN1bGF0ZWQJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgUAAAAKcG10QW1vdW50QQUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAprZXlWZXJzaW9uBQAAAAd2ZXJzaW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAC2tleUFzc2V0SWRBBQAAAA5wbXRTdHJBc3NldElkQQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQgUAAAAOcG10U3RyQXNzZXRJZEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMa2V5SW52YXJpYW50BQAAABNpbnZhcmlhbnRDYWxjdWxhdGVkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA1rZXlDb21taXNzaW9uBQAAAApjb21taXNzaW9uCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABtrZXlDb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgkABEwAAAACBQAAAApzaGFyZUlzc3VlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAAD2tleVNoYXJlQXNzZXRJZAkAAlgAAAABBQAAAAxzaGFyZUlzc3VlSWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAAMc2hhcmVJc3N1ZUlkBQAAAANuaWwAAAABaQEAAAAWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwAAAAEAAAARc2xpcHBhZ2VUb2xlcmFuY2UEAAAAC3BtdEFzc2V0SWRBCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAtwbXRBc3NldElkQggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAHYXNzZXRJZAQAAAAKcG10QW1vdW50QQkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQFAAAAC3BtdEFzc2V0SWRBBAAAAApwbXRBbW91bnRCCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABAAAABmFtb3VudAUAAAALcG10QXNzZXRJZEIEAAAACnRva2VuUmF0aW8JAABrAAAAAwkAAGsAAAADBQAAAAhiYWxhbmNlQQUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEEFAAAAC3NjYWxlVmFsdWUzCQAAawAAAAMFAAAACGJhbGFuY2VCBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QgQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADBQAAAApwbXRBbW91bnRBBQAAAAtzY2FsZVZhbHVlOAUAAAAIYmFsYW5jZUEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwUAAAAKcG10QW1vdW50QgUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VCBAAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAABrAAAAAwkAAZcAAAABCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAADbmlsBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAtzY2FsZVZhbHVlOAQAAAATaW52YXJpYW50Q2FsY3VsYXRlZAkBAAAADWludmFyaWFudENhbGMAAAACCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAApwbXRBbW91bnRCAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkBAAAAD3Rocm93SXNJbmFjdGl2ZQAAAAADAwkAAGYAAAACAAAAAAAAAAAABQAAABFzbGlwcGFnZVRvbGVyYW5jZQYJAABmAAAAAgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAKVNsaXBwYWdlIHRvbGVyYW5jZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgCQABpAAAAAEFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyAgAAABYgaW5jbHVzaXZlbHkuIEFjdHVhbDogCQABpAAAAAEFAAAAEXNsaXBwYWdlVG9sZXJhbmNlAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAgkAAAIAAAABAgAAABxUd28gYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkAwMJAQAAAAIhPQAAAAIFAAAAC3BtdEFzc2V0SWRBBQAAAAhhc3NldElkQQYJAQAAAAIhPQAAAAIFAAAAC3BtdEFzc2V0SWRCBQAAAAhhc3NldElkQgkBAAAAC3Rocm93QXNzZXRzAAAAAAMDCQAAZgAAAAIJAABpAAAAAgkAAGgAAAACBQAAAAtzY2FsZVZhbHVlMwkAAGUAAAACBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAAAp0b2tlblJhdGlvBgkAAGYAAAACBQAAAAp0b2tlblJhdGlvCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABkAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgkAAAIAAAABAgAAAD1JbmNvcnJlY3QgYXNzZXRzIGFtb3VudDogYW1vdW50cyBtdXN0IGhhdmUgdGhlIGNvbnRyYWN0IHJhdGlvAwkAAAAAAAACBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQAAAAAAAAAAAAJAAACAAAAAQIAAAAdVG9vIHNtYWxsIGFtb3VudCB0byByZXBsZW5pc2gDCQEAAAABIQAAAAEFAAAAEGhhc0Vub3VnaEJhbGFuY2UJAQAAABFzdXNwZW5kU3VzcGljaW91cwAAAAAJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQkAAGQAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtleUludmFyaWFudAUAAAATaW52YXJpYW50Q2FsY3VsYXRlZAkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUAAAAMc2hhcmVBc3NldElkBQAAAANuaWwAAAABaQEAAAAVcmVwbGVuaXNoV2l0aE9uZVRva2VuAAAAAgAAABN2aXJ0dWFsU3dhcFRva2VuUGF5AAAAE3ZpcnR1YWxTd2FwVG9rZW5HZXQEAAAADSR0MDQyMjk0NDIzNjkJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDA0MjI5NDQyMzY5AAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwNDIyOTQ0MjM2OQAAAAJfMgQAAAAPcG10TWluVGhyZXNob2xkAAAAAAAATEtABAAAAB10aHJlc2hvbGRWYWx1ZUZvck1pblRvbGVyYW5jZQAAAAAAAvrwgAQAAAAJdG9sZXJhbmNlAwkAAGYAAAACBQAAAB10aHJlc2hvbGRWYWx1ZUZvck1pblRvbGVyYW5jZQUAAAAJcG10QW1vdW50AAAAAAAAAYagAAAAAAAAAAABBAAAABxzbGlwcGFnZVZhbHVlTWluRm9yUmVwbGVuaXNoCQAAZQAAAAIFAAAAC3NjYWxlVmFsdWU4CQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTgFAAAACXRvbGVyYW5jZQAAAAAAAJiWgAQAAAAcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAAGQAAAACBQAAAAtzY2FsZVZhbHVlOAkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWU4BQAAAAl0b2xlcmFuY2UAAAAAAACYloAEAAAAF3NsaXBwYWdlVmFsdWVNaW5Gb3JTd2FwCQAAZQAAAAIFAAAAC3NjYWxlVmFsdWU4CQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTgAAAAAAAAAAAEAAAAAAACYloAEAAAAF3NsaXBwYWdlVmFsdWVNYXhGb3JTd2FwCQAAZAAAAAIFAAAAC3NjYWxlVmFsdWU4CQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTgAAAAAAAAAAAEAAAAAAACYloADCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQEAAAAPdGhyb3dJc0luYWN0aXZlAAAAAAMJAABmAAAAAgUAAAAPcG10TWluVGhyZXNob2xkBQAAAAlwbXRBbW91bnQJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA9QYXltZW50IGFtb3VudCAJAAGkAAAAAQUAAAAJcG10QW1vdW50AgAAACcgZG9lcyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtIGFtb3VudCBvZiAJAAGkAAAAAQUAAAAPcG10TWluVGhyZXNob2xkAgAAAAcgdG9rZW5zAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkBAAAAEXN1c3BlbmRTdXNwaWNpb3VzAAAAAAMJAAAAAAAAAgUAAAAKcG10QXNzZXRJZAUAAAAIYXNzZXRJZEEEAAAAHGFtb3VudFZpcnR1YWxSZXBsZW5pc2hUb2tlbkEJAABlAAAAAgUAAAAJcG10QW1vdW50BQAAABN2aXJ0dWFsU3dhcFRva2VuUGF5BAAAABxhbW91bnRWaXJ0dWFsUmVwbGVuaXNoVG9rZW5CBQAAABN2aXJ0dWFsU3dhcFRva2VuR2V0BAAAABhiYWxhbmNlQWZ0ZXJWaXJ0dWFsU3dhcEEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkEAAAAGGJhbGFuY2VBZnRlclZpcnR1YWxTd2FwQgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAATdmlydHVhbFN3YXBUb2tlbkdldAQAAAAMaW52YXJpYW50TmV3CQEAAAANaW52YXJpYW50Q2FsYwAAAAIFAAAAGGJhbGFuY2VBZnRlclZpcnR1YWxTd2FwQQUAAAAYYmFsYW5jZUFmdGVyVmlydHVhbFN3YXBCBAAAABdpbnZhcmlhbnRFc3RpbWF0ZWRSYXRpbwkAAGsAAAADBQAAAAlpbnZhcmlhbnQFAAAAC3NjYWxlVmFsdWU4BQAAAAxpbnZhcmlhbnROZXcDAwkAAGcAAAACBQAAABdpbnZhcmlhbnRFc3RpbWF0ZWRSYXRpbwUAAAAXc2xpcHBhZ2VWYWx1ZU1pbkZvclN3YXAJAABnAAAAAgkAAGUAAAACBQAAAAxpbnZhcmlhbnROZXcFAAAACWludmFyaWFudAAAAAAAAAAAAAcEAAAAJXJhdGlvVmlydHVhbEJhbGFuY2VUb1ZpcnR1YWxSZXBsZW5pc2gJAABpAAAAAgkAAGsAAAADBQAAABhiYWxhbmNlQWZ0ZXJWaXJ0dWFsU3dhcEEJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTgFAAAAC3NjYWxlVmFsdWU4BQAAABhiYWxhbmNlQWZ0ZXJWaXJ0dWFsU3dhcEIJAABrAAAAAwUAAAAcYW1vdW50VmlydHVhbFJlcGxlbmlzaFRva2VuQQUAAAALc2NhbGVWYWx1ZTgFAAAAHGFtb3VudFZpcnR1YWxSZXBsZW5pc2hUb2tlbkIDAwkAAGYAAAACBQAAABxzbGlwcGFnZVZhbHVlTWluRm9yUmVwbGVuaXNoBQAAACVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoBgkAAGYAAAACBQAAACVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoBQAAABxzbGlwcGFnZVZhbHVlTWF4Rm9yUmVwbGVuaXNoCQAAAgAAAAECAAAAZnN3b3Agd2l0aCB2aXJ0dWFsU3dhcFRva2VuUGF5IGFuZCB2aXJ0dWFsU3dhcFRva2VuR2V0IHBvc3NpYmxlLCBidXQgcmF0aW8gYWZ0ZXIgdmlydHVhbCBzd2FwIGluY29ycmVjdAQAAAATcmF0aW9TaGFyZVRva2Vuc0luQQkAAGsAAAADCQAAZQAAAAIFAAAAHGFtb3VudFZpcnR1YWxSZXBsZW5pc2hUb2tlbkEAAAAAAAAEHrAFAAAAC3NjYWxlVmFsdWU4CQAAZQAAAAIFAAAAGGJhbGFuY2VBZnRlclZpcnR1YWxTd2FwQQAAAAAAAAQesAQAAAAkcmF0aW9TaGFyZVRva2Vuc0luQVdpdGhvdXRDb21taXNzaW9uCQAAawAAAAMFAAAAHGFtb3VudFZpcnR1YWxSZXBsZW5pc2hUb2tlbkEFAAAAC3NjYWxlVmFsdWU4BQAAABhiYWxhbmNlQWZ0ZXJWaXJ0dWFsU3dhcEEEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIJAABrAAAAAwkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACBQAAABxhbW91bnRWaXJ0dWFsUmVwbGVuaXNoVG9rZW5CBQAAAAhhc3NldElkQgUAAAALc2NhbGVWYWx1ZTgFAAAAGGJhbGFuY2VBZnRlclZpcnR1YWxTd2FwQgQAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAAawAAAAMJAAGXAAAAAQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAA25pbAUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAALc2NhbGVWYWx1ZTgEAAAAHXNoYXJlVG9rZW5Ub1BheUFtb3VudFRvRGVsZXRlCQAAawAAAAMJAAGWAAAAAQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAA25pbAUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAALc2NhbGVWYWx1ZTgEAAAAE2ludmFyaWFudENhbGN1bGF0ZWQJAQAAAA1pbnZhcmlhbnRDYWxjAAAAAgkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQgQAAAAPbmV3QW1vdW50VG9rZW5BCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAAlwbXRBbW91bnQEAAAAD25ld0Ftb3VudFRva2VuQgUAAAAIYmFsYW5jZUIEAAAABHhHZXQJAABrAAAAAwUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BQAAAA9uZXdBbW91bnRUb2tlbkEJAABkAAAAAgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50BAAAAAR5R2V0CQAAawAAAAMFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUAAAAPbmV3QW1vdW50VG9rZW5CCQAAZAAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAQAAAATZEFwcFRocmVzaG9sZEFtb3VudAkAAGsAAAADCQAAZAAAAAIFAAAAD25ld0Ftb3VudFRva2VuQQUAAAAPbmV3QW1vdW50VG9rZW5CBQAAAA1kQXBwVGhyZXNob2xkCQAAaAAAAAIAAAAAAAAAAAIFAAAAFmRBcHBUaHJlc2hvbGREZWxpbWl0ZXIDAwkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAA9uZXdBbW91bnRUb2tlbkEGCQAAZgAAAAIFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAD25ld0Ftb3VudFRva2VuQgkBAAAADnRocm93VGhyZXNob2xkAAAAAwUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAAPbmV3QW1vdW50VG9rZW5BBQAAAA9uZXdBbW91bnRUb2tlbkIJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQFAAAADHNoYXJlQXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQkAAGQAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAA9uZXdBbW91bnRUb2tlbkEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtleUludmFyaWFudAUAAAATaW52YXJpYW50Q2FsY3VsYXRlZAUAAAADbmlsCQAAAgAAAAECAAAAOmluY29ycmVjdCB2aXJ0dWFsU3dhcFRva2VuUGF5IG9yIHZpcnR1YWxTd2FwVG9rZW5HZXQgdmFsdWUDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBAAAABxhbW91bnRWaXJ0dWFsUmVwbGVuaXNoVG9rZW5CCQAAZQAAAAIFAAAACXBtdEFtb3VudAUAAAATdmlydHVhbFN3YXBUb2tlblBheQQAAAAcYW1vdW50VmlydHVhbFJlcGxlbmlzaFRva2VuQQUAAAATdmlydHVhbFN3YXBUb2tlbkdldAQAAAAYYmFsYW5jZUFmdGVyVmlydHVhbFN3YXBBCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAABN2aXJ0dWFsU3dhcFRva2VuR2V0BAAAABhiYWxhbmNlQWZ0ZXJWaXJ0dWFsU3dhcEIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAAE3ZpcnR1YWxTd2FwVG9rZW5QYXkEAAAADGludmFyaWFudE5ldwkBAAAADWludmFyaWFudENhbGMAAAACBQAAABhiYWxhbmNlQWZ0ZXJWaXJ0dWFsU3dhcEEFAAAAGGJhbGFuY2VBZnRlclZpcnR1YWxTd2FwQgQAAAAXaW52YXJpYW50RXN0aW1hdGVkUmF0aW8JAABrAAAAAwUAAAAJaW52YXJpYW50BQAAAAtzY2FsZVZhbHVlOAUAAAAMaW52YXJpYW50TmV3AwMJAABmAAAAAgUAAAAXaW52YXJpYW50RXN0aW1hdGVkUmF0aW8FAAAAF3NsaXBwYWdlVmFsdWVNaW5Gb3JTd2FwCQAAZwAAAAIJAABlAAAAAgUAAAAMaW52YXJpYW50TmV3BQAAAAlpbnZhcmlhbnQAAAAAAAAAAAAHBAAAACVyYXRpb1ZpcnR1YWxCYWxhbmNlVG9WaXJ0dWFsUmVwbGVuaXNoCQAAaQAAAAIJAABrAAAAAwUAAAAYYmFsYW5jZUFmdGVyVmlydHVhbFN3YXBBCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWU4BQAAAAtzY2FsZVZhbHVlOAUAAAAYYmFsYW5jZUFmdGVyVmlydHVhbFN3YXBCCQAAawAAAAMFAAAAHGFtb3VudFZpcnR1YWxSZXBsZW5pc2hUb2tlbkEFAAAAC3NjYWxlVmFsdWU4BQAAABxhbW91bnRWaXJ0dWFsUmVwbGVuaXNoVG9rZW5CAwMJAABmAAAAAgUAAAAcc2xpcHBhZ2VWYWx1ZU1pbkZvclJlcGxlbmlzaAUAAAAlcmF0aW9WaXJ0dWFsQmFsYW5jZVRvVmlydHVhbFJlcGxlbmlzaAYJAABmAAAAAgUAAAAlcmF0aW9WaXJ0dWFsQmFsYW5jZVRvVmlydHVhbFJlcGxlbmlzaAUAAAAcc2xpcHBhZ2VWYWx1ZU1heEZvclJlcGxlbmlzaAkAAAIAAAABAgAAAGZzd29wIHdpdGggdmlydHVhbFN3YXBUb2tlblBheSBhbmQgdmlydHVhbFN3YXBUb2tlbkdldCBwb3NzaWJsZSwgYnV0IHJhdGlvIGFmdGVyIHZpcnR1YWwgc3dhcCBpbmNvcnJlY3QEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAABrAAAAAwkBAAAAEGRlZHVjdFN0YWtpbmdGZWUAAAACBQAAABxhbW91bnRWaXJ0dWFsUmVwbGVuaXNoVG9rZW5BBQAAAAhhc3NldElkQQUAAAALc2NhbGVWYWx1ZTgFAAAAGGJhbGFuY2VBZnRlclZpcnR1YWxTd2FwQQQAAAATcmF0aW9TaGFyZVRva2Vuc0luQgkAAGsAAAADCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIFAAAAHGFtb3VudFZpcnR1YWxSZXBsZW5pc2hUb2tlbkIFAAAACGFzc2V0SWRCBQAAAAtzY2FsZVZhbHVlOAUAAAAYYmFsYW5jZUFmdGVyVmlydHVhbFN3YXBCBAAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAABrAAAAAwkAAZcAAAABCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAARMAAAAAgUAAAATcmF0aW9TaGFyZVRva2Vuc0luQgUAAAADbmlsBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAtzY2FsZVZhbHVlOAQAAAATaW52YXJpYW50Q2FsY3VsYXRlZAkBAAAADWludmFyaWFudENhbGMAAAACBQAAAAhiYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50BAAAAA9uZXdBbW91bnRUb2tlbkEFAAAACGJhbGFuY2VBBAAAAA9uZXdBbW91bnRUb2tlbkIJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAQAAAATZEFwcFRocmVzaG9sZEFtb3VudAkAAGsAAAADCQAAZAAAAAIFAAAAD25ld0Ftb3VudFRva2VuQQUAAAAPbmV3QW1vdW50VG9rZW5CBQAAAA1kQXBwVGhyZXNob2xkCQAAaAAAAAIAAAAAAAAAAAIFAAAAFmRBcHBUaHJlc2hvbGREZWxpbWl0ZXIDAwkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAA9uZXdBbW91bnRUb2tlbkEGCQAAZgAAAAIFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAD25ld0Ftb3VudFRva2VuQgkBAAAADnRocm93VGhyZXNob2xkAAAAAwUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAAPbmV3QW1vdW50VG9rZW5BBQAAAA9uZXdBbW91bnRUb2tlbkIJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQFAAAADHNoYXJlQXNzZXRJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQkAAGQAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAA9uZXdBbW91bnRUb2tlbkIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtleUludmFyaWFudAUAAAATaW52YXJpYW50Q2FsY3VsYXRlZAUAAAADbmlsCQAAAgAAAAECAAAAOmluY29ycmVjdCB2aXJ0dWFsU3dhcFRva2VuUGF5IG9yIHZpcnR1YWxTd2FwVG9rZW5HZXQgdmFsdWUJAQAAAAt0aHJvd0Fzc2V0cwAAAAAAAAABaQEAAAAIZXhjaGFuZ2UAAAACAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQAAABJtaW5BbW91bnRUb1JlY2VpdmUEAAAADSR0MDQ5OTIyNDk5OTcJAAUUAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAGYW1vdW50CAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAdhc3NldElkBAAAAAlwbXRBbW91bnQIBQAAAA0kdDA0OTkyMjQ5OTk3AAAAAl8xBAAAAApwbXRBc3NldElkCAUAAAANJHQwNDk5MjI0OTk5NwAAAAJfMgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAQAAAA90aHJvd0lzSW5hY3RpdmUAAAAAAwkAAGcAAAACAAAAAAAAAAAABQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUJAAACAAAAAQkAASwAAAACAgAAACtFc3RpbWF0ZWQgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUuIEFjdHVhbDogCQABpAAAAAEFAAAAGGVzdGltYXRlZEFtb3VudFRvUmVjZWl2ZQMJAABmAAAAAgUAAAASbWluQW1vdW50VG9SZWNlaXZlBQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAA7TWluaW1hbCBhbW91bnQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIGVzdGltYXRlZC4gRXN0aW1hdGVkOiAJAAGkAAAAAQUAAAAYZXN0aW1hdGVkQW1vdW50VG9SZWNlaXZlAgAAAAsuIE1pbmltYWw6IAkAAaQAAAABBQAAABJtaW5BbW91bnRUb1JlY2VpdmUDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQEAAAARc3VzcGVuZFN1c3BpY2lvdXMAAAAAAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQQQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRCBAAAABBhbW91bnRXaXRob3V0RmVlCQEAAAAaY2FsY3VsYXRlSG93TWFueVNlbmRUb2tlbkIAAAAFBQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAAIYmFsYW5jZUEFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQEAAAADWFtb3VudFdpdGhGZWUJAABrAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQkAAGUAAAACBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAACmNvbW1pc3Npb24FAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlBQAAABRjb21taXNzaW9uR292ZXJuYW5jZQUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBAAAAA9uZXdBbW91bnRUb2tlbkEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAACXBtdEFtb3VudAQAAAAPbmV3QW1vdW50VG9rZW5CCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUIFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQEAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQJAABrAAAAAwkAAGQAAAACBQAAAA9uZXdBbW91bnRUb2tlbkEFAAAAD25ld0Ftb3VudFRva2VuQgUAAAANZEFwcFRocmVzaG9sZAkAAGgAAAACAAAAAAAAAAACBQAAABZkQXBwVGhyZXNob2xkRGVsaW1pdGVyAwMJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAAPbmV3QW1vdW50VG9rZW5BBgkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAA9uZXdBbW91bnRUb2tlbkIJAQAAAA50aHJvd1RocmVzaG9sZAAAAAMFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAD25ld0Ftb3VudFRva2VuQQUAAAAPbmV3QW1vdW50VG9rZW5CAwMDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROCQAAZwAAAAIFAAAAEHN0YWtlZEFtb3VudFVTRE4FAAAAD25ld0Ftb3VudFRva2VuQQcGAwkAAAAAAAACBQAAAAhhc3NldElkQgUAAAAEVVNETgkAAGcAAAACBQAAABBzdGFrZWRBbW91bnRVU0ROBQAAAA9uZXdBbW91bnRUb2tlbkIHCQEAAAAhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAARYXZhaWxhYmxlQmFsYW5jZUIFAAAACmFzc2V0TmFtZUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAA9uZXdBbW91bnRUb2tlbkEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAA9uZXdBbW91bnRUb2tlbkIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtleUludmFyaWFudAkBAAAADWludmFyaWFudENhbGMAAAACCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAAlwbXRBbW91bnQJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsAwkAAAAAAAACBQAAAApwbXRBc3NldElkBQAAAAhhc3NldElkQgQAAAALYXNzZXRJZFNlbmQFAAAACGFzc2V0SWRBBAAAABBhbW91bnRXaXRob3V0RmVlCQEAAAAaY2FsY3VsYXRlSG93TWFueVNlbmRUb2tlbkEAAAAFBQAAABhlc3RpbWF0ZWRBbW91bnRUb1JlY2VpdmUFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQUAAAAIYmFsYW5jZUEFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQEAAAADWFtb3VudFdpdGhGZWUJAABrAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQkAAGUAAAACBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAACmNvbW1pc3Npb24FAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlBQAAABRjb21taXNzaW9uR292ZXJuYW5jZQUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBAAAAA9uZXdBbW91bnRUb2tlbkEJAABlAAAAAgkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAANYW1vdW50V2l0aEZlZQUAAAAQZ292ZXJuYW5jZVJld2FyZAQAAAAPbmV3QW1vdW50VG9rZW5CCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAAlwbXRBbW91bnQEAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQJAABrAAAAAwkAAGQAAAACBQAAAA9uZXdBbW91bnRUb2tlbkEFAAAAD25ld0Ftb3VudFRva2VuQgUAAAANZEFwcFRocmVzaG9sZAkAAGgAAAACAAAAAAAAAAACBQAAABZkQXBwVGhyZXNob2xkRGVsaW1pdGVyAwMJAABmAAAAAgUAAAATZEFwcFRocmVzaG9sZEFtb3VudAUAAAAPbmV3QW1vdW50VG9rZW5BBgkAAGYAAAACBQAAABNkQXBwVGhyZXNob2xkQW1vdW50BQAAAA9uZXdBbW91bnRUb2tlbkIJAQAAAA50aHJvd1RocmVzaG9sZAAAAAMFAAAAE2RBcHBUaHJlc2hvbGRBbW91bnQFAAAAD25ld0Ftb3VudFRva2VuQQUAAAAPbmV3QW1vdW50VG9rZW5CAwMDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROCQAAZwAAAAIFAAAAEHN0YWtlZEFtb3VudFVTRE4FAAAAD25ld0Ftb3VudFRva2VuQQcGAwkAAAAAAAACBQAAAAhhc3NldElkQgUAAAAEVVNETgkAAGcAAAACBQAAABBzdGFrZWRBbW91bnRVU0ROBQAAAA9uZXdBbW91bnRUb2tlbkIHCQEAAAAhdGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlAAAAAwUAAAANYW1vdW50V2l0aEZlZQUAAAARYXZhaWxhYmxlQmFsYW5jZUEFAAAACmFzc2V0TmFtZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBBQAAAA9uZXdBbW91bnRUb2tlbkEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAA9uZXdBbW91bnRUb2tlbkIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGtleUludmFyaWFudAkBAAAADWludmFyaWFudENhbGMAAAACCQAAZQAAAAIJAABlAAAAAgUAAAAIYmFsYW5jZUEFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQJAABkAAAAAgUAAAAIYmFsYW5jZUIFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAAEWdvdmVybmFuY2VBZGRyZXNzBQAAABBnb3Zlcm5hbmNlUmV3YXJkBQAAAAthc3NldElkU2VuZAUAAAADbmlsCQEAAAALdGhyb3dBc3NldHMAAAAAAAAAAWkBAAAAGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMAAAABAAAAC2Ftb3VudExlYXZlBAAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QQkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRBBQAAAAhiYWxhbmNlQQQAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEIJAABlAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQgUAAAAIYmFsYW5jZUIEAAAADWFtb3VudEVucm9sbEEJAABlAAAAAgUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEEDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROBQAAAAthbW91bnRMZWF2ZQAAAAAAAAAAAAQAAAANYW1vdW50RW5yb2xsQgkAAGUAAAACBQAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABFVTRE4FAAAAC2Ftb3VudExlYXZlAAAAAAAAAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkBAAAAD3Rocm93SXNJbmFjdGl2ZQAAAAADCQEAAAABIQAAAAEJAQAAAA9jb250YWluc0VsZW1lbnQAAAACCQAETAAAAAIFAAAADGFkbWluUHViS2V5MQkABEwAAAACBQAAAAxhZG1pblB1YktleTIJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkzCQAETAAAAAIFAAAAEmFkbWluUHViS2V5U3Rha2luZwUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAQAAAA50aHJvd09ubHlBZG1pbgAAAAADCQAAZgAAAAIAAAAAAAAAAAAFAAAAC2Ftb3VudExlYXZlCQAAAgAAAAEJAAEsAAAAAgIAAAAzQXJndW1lbnQgJ2Ftb3VudExlYXZlJyBjYW5ub3QgYmUgbmVnYXRpdmUuIEFjdHVhbDogCQABpAAAAAEFAAAAC2Ftb3VudExlYXZlAwMJAABmAAAAAgAAAAAAAAAAAAUAAAAddW5jb3VudGFibGVBbW91bnRFbnJvbGxBc3NldEEGCQAAZgAAAAIAAAAAAAAAAAAFAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRCCQEAAAAHc3VzcGVuZAAAAAECAAAAFkVucm9sbCBhbW91bnQgbmVnYXRpdmUDAwkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxBBgkAAGYAAAACAAAAAAAAAAAABQAAAA1hbW91bnRFbnJvbGxCCQAAAgAAAAECAAAAFVRvbyBsYXJnZSBhbW91bnRMZWF2ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEJAABkAAAAAgUAAAAIYmFsYW5jZUEFAAAADWFtb3VudEVucm9sbEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCCQAAZAAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRFbnJvbGxCBQAAAANuaWwAAAAA8WwIYg==", "chainId": 84, "height": 1427381, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 28EmePggwTkGWLhme7YgGg3qMXNec9JzwSoWJR2ogemC Next: BNtv4PQa8EXSrzAnfNNzzXJDLDks5AM4xixcmKwHwKwe Diff:
Old | New | Differences | |
---|---|---|---|
23 | 23 | ||
24 | 24 | let k = "commission_scale_delimiter" | |
25 | 25 | ||
26 | - | let l = " | |
26 | + | let l = "commission_governance" | |
27 | 27 | ||
28 | - | let m = " | |
28 | + | let m = "invariant" | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = "shutdown_cause" | |
31 | 31 | ||
32 | 32 | let o = base58'7FhFLst7Htn4uYxGH7xYMTAmbydLVoiZef3eFghi7CG4' | |
33 | 33 | ||
37 | 37 | ||
38 | 38 | let r = base58'7FhFLst7Htn4uYxGH7xYMTAmbydLVoiZef3eFghi7CG4' | |
39 | 39 | ||
40 | - | let s = | |
40 | + | let s = base58'7FhFLst7Htn4uYxGH7xYMTAmbydLVoiZef3eFghi7CG4' | |
41 | 41 | ||
42 | 42 | let t = Address(base58'3MqhxbxHEMtp2Rwy1gUb6cPSJHQepdap1Yp') | |
43 | 43 | ||
44 | - | let u = base58' | |
44 | + | let u = Address(base58'3MqhxbxHEMtp2Rwy1gUb6cPSJHQepdap1Yp') | |
45 | 45 | ||
46 | - | let v = | |
46 | + | let v = base58'3FUNGbzfNsQ1AZfvumCUqARXvpjjLQrvCzorYuDryQAq' | |
47 | 47 | ||
48 | - | let w = | |
48 | + | let w = (9 * value(value(assetInfo(v)).minSponsoredFee)) | |
49 | 49 | ||
50 | - | let x = | |
50 | + | let x = getBooleanValue(this, c) | |
51 | 51 | ||
52 | - | let y = getStringValue(this, | |
52 | + | let y = getStringValue(this, d) | |
53 | 53 | ||
54 | - | let z = if ((x == "WAVES")) | |
55 | - | then unit | |
56 | - | else fromBase58String(x) | |
54 | + | let z = getStringValue(this, e) | |
57 | 55 | ||
58 | 56 | let A = if ((y == "WAVES")) | |
59 | 57 | then unit | |
60 | 58 | else fromBase58String(y) | |
61 | 59 | ||
62 | - | let B = { | |
63 | - | let C = z | |
64 | - | if ($isInstanceOf(C, "ByteVector")) | |
60 | + | let B = if ((z == "WAVES")) | |
61 | + | then unit | |
62 | + | else fromBase58String(z) | |
63 | + | ||
64 | + | let C = { | |
65 | + | let D = A | |
66 | + | if ($isInstanceOf(D, "ByteVector")) | |
65 | 67 | then { | |
66 | - | let | |
67 | - | value(assetInfo( | |
68 | + | let E = D | |
69 | + | value(assetInfo(E)).name | |
68 | 70 | } | |
69 | - | else if ($isInstanceOf( | |
71 | + | else if ($isInstanceOf(D, "Unit")) | |
70 | 72 | then { | |
71 | - | let | |
73 | + | let F = D | |
72 | 74 | "WAVES" | |
73 | 75 | } | |
74 | 76 | else throw("Match error") | |
75 | 77 | } | |
76 | 78 | ||
77 | - | let | |
78 | - | let | |
79 | - | if ($isInstanceOf( | |
79 | + | let G = { | |
80 | + | let D = B | |
81 | + | if ($isInstanceOf(D, "ByteVector")) | |
80 | 82 | then { | |
81 | - | let | |
82 | - | value(assetInfo( | |
83 | + | let E = D | |
84 | + | value(assetInfo(E)).name | |
83 | 85 | } | |
84 | - | else if ($isInstanceOf( | |
86 | + | else if ($isInstanceOf(D, "Unit")) | |
85 | 87 | then { | |
86 | - | let | |
88 | + | let F = D | |
87 | 89 | "WAVES" | |
88 | 90 | } | |
89 | 91 | else throw("Match error") | |
90 | 92 | } | |
91 | 93 | ||
92 | - | let | |
94 | + | let H = getIntegerValue(this, f) | |
93 | 95 | ||
94 | - | let | |
96 | + | let I = getIntegerValue(this, g) | |
95 | 97 | ||
96 | - | let | |
98 | + | let J = fromBase58String(getStringValue(this, h)) | |
97 | 99 | ||
98 | - | let | |
100 | + | let K = getIntegerValue(this, i) | |
99 | 101 | ||
100 | - | let | |
102 | + | let L = getIntegerValue(this, m) | |
101 | 103 | ||
102 | - | let | |
104 | + | let M = 500 | |
103 | 105 | ||
104 | - | let | |
106 | + | let N = 200 | |
105 | 107 | ||
106 | - | let | |
108 | + | let O = 1000000 | |
107 | 109 | ||
108 | - | let | |
110 | + | let P = 1000 | |
109 | 111 | ||
110 | - | let | |
112 | + | let Q = 100000000 | |
111 | 113 | ||
112 | - | let | |
114 | + | let R = 1000000000000 | |
113 | 115 | ||
114 | - | let | |
116 | + | let S = 1000 | |
115 | 117 | ||
116 | - | let | |
118 | + | let T = 8 | |
117 | 119 | ||
118 | - | let | |
120 | + | let U = 12 | |
119 | 121 | ||
120 | - | let | |
122 | + | let V = 50 | |
121 | 123 | ||
122 | - | let | |
124 | + | let W = 100 | |
123 | 125 | ||
124 | - | let | |
126 | + | let X = 100000000 | |
125 | 127 | ||
126 | - | let | |
128 | + | let Y = 99999000 | |
127 | 129 | ||
128 | - | let | |
130 | + | let Z = 50 | |
129 | 131 | ||
130 | - | let | |
132 | + | let aa = 2 | |
131 | 133 | ||
132 | - | func aa (ab) = { | |
133 | - | let C = ab | |
134 | - | if ($isInstanceOf(C, "ByteVector")) | |
134 | + | let ab = 46000000 | |
135 | + | ||
136 | + | let ac = 8 | |
137 | + | ||
138 | + | func ad (ae) = { | |
139 | + | let D = ae | |
140 | + | if ($isInstanceOf(D, "ByteVector")) | |
135 | 141 | then { | |
136 | - | let | |
137 | - | assetBalance(this, | |
142 | + | let E = D | |
143 | + | assetBalance(this, E) | |
138 | 144 | } | |
139 | - | else if ($isInstanceOf( | |
145 | + | else if ($isInstanceOf(D, "Unit")) | |
140 | 146 | then { | |
141 | - | let | |
147 | + | let F = D | |
142 | 148 | wavesBalance(this).available | |
143 | 149 | } | |
144 | 150 | else throw("Match error") | |
145 | 151 | } | |
146 | 152 | ||
147 | 153 | ||
148 | - | let | |
149 | - | let | |
150 | - | if ($isInstanceOf( | |
154 | + | let af = { | |
155 | + | let D = getInteger(u, ((("rpd_balance_" + toBase58String(v)) + "_") + toString(this))) | |
156 | + | if ($isInstanceOf(D, "Int")) | |
151 | 157 | then { | |
152 | - | let | |
153 | - | | |
158 | + | let ag = D | |
159 | + | ag | |
154 | 160 | } | |
155 | - | else if ($isInstanceOf( | |
161 | + | else if ($isInstanceOf(D, "Unit")) | |
156 | 162 | then { | |
157 | - | let | |
163 | + | let ah = D | |
158 | 164 | 0 | |
159 | 165 | } | |
160 | 166 | else throw("Match error") | |
161 | 167 | } | |
162 | 168 | ||
163 | - | let | |
164 | - | then | |
169 | + | let ai = (H - (if ((A == v)) | |
170 | + | then af | |
165 | 171 | else 0)) | |
166 | 172 | ||
167 | - | let | |
168 | - | then | |
173 | + | let aj = (I - (if ((B == v)) | |
174 | + | then af | |
169 | 175 | else 0)) | |
170 | 176 | ||
171 | - | let | |
172 | - | then | |
177 | + | let ak = (ad(A) + (if ((A == v)) | |
178 | + | then af | |
173 | 179 | else 0)) | |
174 | 180 | ||
175 | - | let | |
176 | - | then | |
181 | + | let al = (ad(B) + (if ((B == v)) | |
182 | + | then af | |
177 | 183 | else 0)) | |
178 | 184 | ||
179 | - | let | |
180 | - | then ( | |
185 | + | let am = if ((ak >= H)) | |
186 | + | then (al >= I) | |
181 | 187 | else false | |
182 | 188 | ||
183 | - | func | |
189 | + | func an (ao,ap) = (((fraction(R, ao, ap) + fraction(R, ap, ao)) / 2) / 10000) | |
184 | 190 | ||
185 | 191 | ||
186 | - | func | |
187 | - | let | |
188 | - | (fraction(( | |
192 | + | func aq (ao,ap) = { | |
193 | + | let ar = an(ao, ap) | |
194 | + | (fraction((ao + ap), Q, pow(ar, T, Z, aa, T, UP)) + (2 * fraction(pow(fraction(ao, ap, Q), 0, 5, 1, (T / 2), DOWN), pow((ar - ab), T, Z, aa, T, DOWN), Q))) | |
189 | 195 | } | |
190 | 196 | ||
191 | 197 | ||
192 | - | func ap (aq,ar,as,at) = { | |
193 | - | let au = (P - ((P * 1) / 10000000)) | |
194 | - | let av = (aq - ar) | |
195 | - | let al = (G + as) | |
196 | - | let am = (H + as) | |
197 | - | let aw = if ((at == z)) | |
198 | - | then an(al, (H - aq)) | |
199 | - | else if ((at == A)) | |
200 | - | then an((G - aq), am) | |
201 | - | else throw("Wrong asset in payment") | |
202 | - | let ax = fraction(P, K, aw) | |
203 | - | func ay (az,aA) = if (true) | |
204 | - | then throw(((toString(az) + " ") + toString(aA))) | |
205 | - | else { | |
206 | - | let aB = (aq - ((aA * av) / 5)) | |
207 | - | let aC = if ((at == z)) | |
208 | - | then an(al, (H - aB)) | |
209 | - | else an((G - aB), am) | |
210 | - | if (true) | |
211 | - | then aB | |
212 | - | else az | |
213 | - | } | |
214 | - | ||
215 | - | let aD = { | |
216 | - | let aE = [1, 2, 3, 4, 5] | |
217 | - | let aF = size(aE) | |
218 | - | let aG = -1 | |
219 | - | if ((aF == 0)) | |
220 | - | then aG | |
221 | - | else { | |
222 | - | let aH = ay(aG, aE[0]) | |
223 | - | if ((aF == 1)) | |
224 | - | then aH | |
225 | - | else { | |
226 | - | let aI = ay(aH, aE[1]) | |
227 | - | if ((aF == 2)) | |
228 | - | then aI | |
229 | - | else { | |
230 | - | let aJ = ay(aI, aE[2]) | |
231 | - | if ((aF == 3)) | |
232 | - | then aJ | |
233 | - | else { | |
234 | - | let aK = ay(aJ, aE[3]) | |
235 | - | if ((aF == 4)) | |
236 | - | then aK | |
237 | - | else { | |
238 | - | let aL = ay(aK, aE[4]) | |
239 | - | if ((aF == 5)) | |
240 | - | then aL | |
241 | - | else { | |
242 | - | let aM = ay(aL, aE[5]) | |
243 | - | throw("List size exceed 5") | |
244 | - | } | |
245 | - | } | |
246 | - | } | |
247 | - | } | |
248 | - | } | |
249 | - | } | |
250 | - | } | |
251 | - | if ((0 > aD)) | |
252 | - | then throw("something went wrong while working with amountToSend") | |
253 | - | else if (if ((ax > au)) | |
254 | - | then (aw > K) | |
198 | + | func as (at,au,av,aw,ax) = { | |
199 | + | let ay = (Q - ((Q * 1) / 10000000)) | |
200 | + | let az = (at - au) | |
201 | + | let aA = (at - ((1 * az) / 5)) | |
202 | + | let aB = (at - ((2 * az) / 5)) | |
203 | + | let aC = (at - ((3 * az) / 5)) | |
204 | + | let aD = (at - ((4 * az) / 5)) | |
205 | + | let aE = (at - ((5 * az) / 5)) | |
206 | + | let ap = (aw + ax) | |
207 | + | let aF = aq((av - at), ap) | |
208 | + | let aG = fraction(L, Q, aF) | |
209 | + | if ((0 >= (aq((av - aE), ap) - L))) | |
210 | + | then throw("minTokenReceiveAmount too large.err1") | |
211 | + | else if (if ((aG > ay)) | |
212 | + | then ((aF - L) > 0) | |
255 | 213 | else false) | |
256 | - | then aq | |
257 | - | else ((aD * (N - L)) / N) | |
214 | + | then at | |
215 | + | else if (((aq((av - aA), ap) - L) > 0)) | |
216 | + | then ((aA * (O - M)) / O) | |
217 | + | else if (((aq((av - aB), ap) - L) > 0)) | |
218 | + | then ((aB * (O - M)) / O) | |
219 | + | else if (((aq((av - aC), ap) - L) > 0)) | |
220 | + | then ((aC * (O - M)) / O) | |
221 | + | else if (((aq((av - aD), ap) - L) > 0)) | |
222 | + | then ((aD * (O - M)) / O) | |
223 | + | else if (((aq((av - aE), ap) - L) > 0)) | |
224 | + | then ((aE * (O - M)) / O) | |
225 | + | else throw("something went wrong while working with amountToSendStep. err2") | |
258 | 226 | } | |
259 | 227 | ||
260 | 228 | ||
261 | - | func aN (ab) = { | |
262 | - | let C = ab | |
263 | - | if ($isInstanceOf(C, "ByteVector")) | |
229 | + | func aH (at,au,av,aw,ax) = { | |
230 | + | let ay = (Q - ((Q * 1) / 10000000)) | |
231 | + | let az = (at - au) | |
232 | + | let aA = (at - ((1 * az) / 5)) | |
233 | + | let aB = (at - ((2 * az) / 5)) | |
234 | + | let aC = (at - ((3 * az) / 5)) | |
235 | + | let aD = (at - ((4 * az) / 5)) | |
236 | + | let aE = (at - ((5 * az) / 5)) | |
237 | + | let ao = (av + ax) | |
238 | + | let aF = aq(ao, (aw - at)) | |
239 | + | let aG = fraction(L, Q, aF) | |
240 | + | if ((0 >= (aq(ao, (aw - aE)) - L))) | |
241 | + | then throw("minTokenReceiveAmount too large.err1") | |
242 | + | else if (if ((aG > ay)) | |
243 | + | then ((aF - L) > 0) | |
244 | + | else false) | |
245 | + | then at | |
246 | + | else if (((aq(ao, (aw - aA)) - L) > 0)) | |
247 | + | then ((aA * (O - M)) / O) | |
248 | + | else if (((aq(ao, (aw - aB)) - L) > 0)) | |
249 | + | then ((aB * (O - M)) / O) | |
250 | + | else if (((aq(ao, (aw - aC)) - L) > 0)) | |
251 | + | then ((aC * (O - M)) / O) | |
252 | + | else if (((aq(ao, (aw - aD)) - L) > 0)) | |
253 | + | then ((aD * (O - M)) / O) | |
254 | + | else if (((aq(ao, (aw - aE)) - L) > 0)) | |
255 | + | then ((aE * (O - M)) / O) | |
256 | + | else throw("something went wrong while working with amountToSendStep. err2") | |
257 | + | } | |
258 | + | ||
259 | + | ||
260 | + | func aI (ae) = { | |
261 | + | let D = ae | |
262 | + | if ($isInstanceOf(D, "ByteVector")) | |
264 | 263 | then { | |
265 | - | let | |
266 | - | let | |
267 | - | let | |
268 | - | $Tuple3( | |
264 | + | let E = D | |
265 | + | let aJ = toBase58String(E) | |
266 | + | let aK = valueOrErrorMessage(assetInfo(E), (("Asset " + aJ) + " doesn't exist")) | |
267 | + | $Tuple3(aJ, aK.name, aK.decimals) | |
269 | 268 | } | |
270 | - | else if ($isInstanceOf( | |
269 | + | else if ($isInstanceOf(D, "Unit")) | |
271 | 270 | then { | |
272 | - | let | |
271 | + | let F = D | |
273 | 272 | $Tuple3("WAVES", "WAVES", 8) | |
274 | 273 | } | |
275 | 274 | else throw("Match error") | |
276 | 275 | } | |
277 | 276 | ||
278 | 277 | ||
279 | - | func | |
278 | + | func aL (aM) = [BooleanEntry(c, false), StringEntry(n, aM)] | |
280 | 279 | ||
281 | 280 | ||
282 | - | func | |
281 | + | func aN (aO,ae) = if ((ae == v)) | |
283 | 282 | then { | |
284 | - | let | |
285 | - | if ((0 >= | |
286 | - | then throw((((("Insufficient amount " + toString( | |
287 | - | else | |
283 | + | let aP = (aO - w) | |
284 | + | if ((0 >= aP)) | |
285 | + | then throw((((("Insufficient amount " + toString(aO)) + " to deduct staking fee ") + toString(w)) + " USD-N")) | |
286 | + | else aP | |
288 | 287 | } | |
289 | - | else | |
288 | + | else aO | |
290 | 289 | ||
291 | 290 | ||
292 | - | func | |
291 | + | func aQ () = throw("DApp is already active") | |
293 | 292 | ||
294 | 293 | ||
295 | - | func | |
294 | + | func aR () = throw("DApp is inactive at this moment") | |
296 | 295 | ||
297 | 296 | ||
298 | - | func | |
297 | + | func aS () = throw("Only admin can call this function") | |
299 | 298 | ||
300 | 299 | ||
301 | - | func | |
300 | + | func aT () = throw(((("Incorrect assets attached. Expected: " + y) + " and ") + z)) | |
302 | 301 | ||
303 | 302 | ||
304 | - | func | |
303 | + | func aU (aV,aW,aX) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(aV)) + ": ") + toString(aW)) + " ") + C) + ", ") + toString(aX)) + " ") + G)) | |
305 | 304 | ||
306 | 305 | ||
307 | - | func | |
306 | + | func aY (aO,aZ,ba) = throw((((((((("Insufficient DApp balance to pay " + toString(aO)) + " ") + ba) + " due to staking. Available: ") + toString(aZ)) + " ") + ba) + ". Please contact support in Telegram: https://t.me/swopfisupport")) | |
308 | 307 | ||
309 | 308 | ||
310 | - | func | |
309 | + | func bb (aW,aX) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aW)) + " ") + C) + " and ") + toString(aX)) + " ") + G) + " due to staking. Available: ") + toString(ai)) + " ") + C) + " and ") + toString(aj)) + " ") + G) + ". Please contact support in Telegram: https://t.me/swopfisupport")) | |
311 | 310 | ||
312 | 311 | ||
313 | - | func | |
312 | + | func bc () = aL(((((((((((((((("Suspicious state. Actual balances: " + toString(H)) + " ") + C) + ", ") + toString(I)) + " ") + G) + ". State: ") + toString(ad(A))) + " ") + C) + ", ") + toString(ad(B))) + " ") + G)) | |
314 | 313 | ||
315 | 314 | ||
316 | - | @Callable( | |
315 | + | @Callable(bd) | |
317 | 316 | func init () = { | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | let | |
329 | - | let | |
330 | - | let | |
331 | - | let | |
317 | + | let be = $Tuple2(bd.payments[0].amount, bd.payments[0].assetId) | |
318 | + | let bf = be._1 | |
319 | + | let bg = be._2 | |
320 | + | let bh = $Tuple2(bd.payments[1].amount, bd.payments[1].assetId) | |
321 | + | let bi = bh._1 | |
322 | + | let bj = bh._2 | |
323 | + | let bk = aI(bg) | |
324 | + | let bl = bk._1 | |
325 | + | let bm = bk._2 | |
326 | + | let bn = bk._3 | |
327 | + | let bo = aI(bj) | |
328 | + | let bp = bo._1 | |
329 | + | let bq = bo._2 | |
330 | + | let br = bo._3 | |
332 | 331 | if (isDefined(getBoolean(this, c))) | |
333 | - | then | |
334 | - | else if (( | |
332 | + | then aQ() | |
333 | + | else if ((bg == bj)) | |
335 | 334 | then throw("Assets must be different") | |
336 | 335 | else { | |
337 | - | let | |
338 | - | let | |
339 | - | let | |
340 | - | let | |
341 | - | let | |
342 | - | let | |
343 | - | let | |
344 | - | [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, | |
336 | + | let bs = ((("s" + take(bm, 7)) + "_") + take(bq, 7)) | |
337 | + | let bt = ((((("ShareToken of SwopFi protocol for " + bm) + " and ") + bq) + " at address ") + toString(this)) | |
338 | + | let bu = ((bn + br) / 2) | |
339 | + | let bv = fraction(pow(bf, bn, 5, 1, bn, HALFDOWN), pow(bi, br, 5, 1, br, HALFDOWN), pow(10, 0, bu, 0, 0, HALFDOWN)) | |
340 | + | let bw = Issue(bs, bt, bv, bu, true) | |
341 | + | let bx = calculateAssetId(bw) | |
342 | + | let by = aq(bf, bi) | |
343 | + | [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bl), StringEntry(e, bp), IntegerEntry(f, bf), IntegerEntry(g, bi), IntegerEntry(m, by), IntegerEntry(j, M), IntegerEntry(k, O), bw, StringEntry(h, toBase58String(bx)), IntegerEntry(i, bv), ScriptTransfer(bd.caller, bv, bx)] | |
345 | 344 | } | |
346 | 345 | } | |
347 | 346 | ||
348 | 347 | ||
349 | 348 | ||
350 | - | @Callable( | |
351 | - | func replenishWithTwoTokens ( | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | if (!( | |
362 | - | then | |
363 | - | else if (if ((0 > | |
349 | + | @Callable(bd) | |
350 | + | func replenishWithTwoTokens (bz) = { | |
351 | + | let bg = bd.payments[0].assetId | |
352 | + | let bj = bd.payments[1].assetId | |
353 | + | let bf = aN(bd.payments[0].amount, bg) | |
354 | + | let bi = aN(bd.payments[1].amount, bj) | |
355 | + | let bA = fraction(fraction(H, Q, bf), P, fraction(I, Q, bi)) | |
356 | + | let bB = fraction(bf, Q, H) | |
357 | + | let bC = fraction(bi, Q, I) | |
358 | + | let bD = fraction(min([bB, bC]), K, Q) | |
359 | + | let by = aq((H + bf), (I + bi)) | |
360 | + | if (!(x)) | |
361 | + | then aR() | |
362 | + | else if (if ((0 > bz)) | |
364 | 363 | then true | |
365 | - | else ( | |
366 | - | then throw("Slippage tolerance must be | |
367 | - | else if ((size( | |
364 | + | else (bz > S)) | |
365 | + | then throw(((("Slippage tolerance must be between 0 and " + toString(S)) + " inclusively. Actual: ") + toString(bz))) | |
366 | + | else if ((size(bd.payments) != 2)) | |
368 | 367 | then throw("Two attached assets expected") | |
369 | - | else if (if (( | |
368 | + | else if (if ((bg != A)) | |
370 | 369 | then true | |
371 | - | else ( | |
372 | - | then | |
373 | - | else if (if (((( | |
370 | + | else (bj != B)) | |
371 | + | then aT() | |
372 | + | else if (if ((((P * (S - bz)) / S) > bA)) | |
374 | 373 | then true | |
375 | - | else ( | |
374 | + | else (bA > ((P * (S + bz)) / S))) | |
376 | 375 | then throw("Incorrect assets amount: amounts must have the contract ratio") | |
377 | - | else if (( | |
376 | + | else if ((bD == 0)) | |
378 | 377 | then throw("Too small amount to replenish") | |
379 | - | else if (!( | |
380 | - | then | |
381 | - | else [IntegerEntry(f, ( | |
378 | + | else if (!(am)) | |
379 | + | then bc() | |
380 | + | else [IntegerEntry(f, (H + bf)), IntegerEntry(g, (I + bi)), IntegerEntry(i, (K + bD)), IntegerEntry(m, by), Reissue(J, bD, true), ScriptTransfer(bd.caller, bD, J)] | |
382 | 381 | } | |
383 | 382 | ||
384 | 383 | ||
385 | 384 | ||
386 | - | @Callable( | |
387 | - | func replenishWithOneToken ( | |
388 | - | let | |
389 | - | let | |
390 | - | let | |
391 | - | let | |
392 | - | let | |
393 | - | let | |
385 | + | @Callable(bd) | |
386 | + | func replenishWithOneToken (bE,bF) = { | |
387 | + | let bG = $Tuple2(bd.payments[0].amount, bd.payments[0].assetId) | |
388 | + | let bH = bG._1 | |
389 | + | let bI = bG._2 | |
390 | + | let bJ = 5000000 | |
391 | + | let bK = 50000000 | |
392 | + | let bL = if ((bK > bH)) | |
394 | 393 | then 100000 | |
395 | 394 | else 1 | |
396 | - | let | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | if (!( | |
401 | - | then | |
402 | - | else if (( | |
403 | - | then throw((((("Payment amount " + toString( | |
404 | - | else if ((size( | |
395 | + | let bM = (Q - ((Q * bL) / 10000000)) | |
396 | + | let bN = (Q + ((Q * bL) / 10000000)) | |
397 | + | let bO = (Q - ((Q * 1) / 10000000)) | |
398 | + | let bP = (Q + ((Q * 1) / 10000000)) | |
399 | + | if (!(x)) | |
400 | + | then aR() | |
401 | + | else if ((bJ > bH)) | |
402 | + | then throw((((("Payment amount " + toString(bH)) + " does not exceed the minimum amount of ") + toString(bJ)) + " tokens")) | |
403 | + | else if ((size(bd.payments) != 1)) | |
405 | 404 | then throw("One attached payment expected") | |
406 | - | else if (!(aj)) | |
407 | - | then bh() | |
408 | - | else if (if ((bN != z)) | |
409 | - | then (bN != A) | |
410 | - | else false) | |
411 | - | then aY() | |
412 | - | else { | |
413 | - | let bV = if ((bN == z)) | |
414 | - | then $Tuple7((bM - bJ), bK, (G + bJ), (H - bK), an((G + bM), H), (G + bM), H) | |
415 | - | else $Tuple7(bK, (bM - bJ), (G - bK), (H + bJ), an(G, (H + bM)), G, (H + bM)) | |
416 | - | let bW = bV._1 | |
417 | - | let bX = bV._2 | |
418 | - | let bY = bV._3 | |
419 | - | let bZ = bV._4 | |
420 | - | let bD = bV._5 | |
421 | - | let ca = bV._6 | |
422 | - | let cb = bV._7 | |
423 | - | let cc = if ((bN == z)) | |
424 | - | then IntegerEntry(f, ca) | |
425 | - | else IntegerEntry(g, cb) | |
426 | - | let aw = an(bY, bZ) | |
427 | - | let ax = fraction(P, K, aw) | |
428 | - | let cd = (fraction((P * P), bY, bZ) / fraction(P, bW, bX)) | |
429 | - | let ce = fraction((ca + cb), T, (2 * U)) | |
430 | - | if (if ((bT >= ax)) | |
431 | - | then true | |
432 | - | else (K > aw)) | |
433 | - | then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value") | |
434 | - | else if (if ((bR > cd)) | |
435 | - | then true | |
436 | - | else (cd > bS)) | |
437 | - | then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect") | |
438 | - | else if (if ((ce > ca)) | |
405 | + | else if (!(am)) | |
406 | + | then bc() | |
407 | + | else if ((bI == A)) | |
408 | + | then { | |
409 | + | let bQ = (bH - bE) | |
410 | + | let bR = bF | |
411 | + | let bS = (H + bE) | |
412 | + | let bT = (I - bF) | |
413 | + | let aF = aq(bS, bT) | |
414 | + | let aG = fraction(L, Q, aF) | |
415 | + | if (if ((aG >= bO)) | |
416 | + | then ((aF - L) >= 0) | |
417 | + | else false) | |
418 | + | then { | |
419 | + | let bU = (fraction(bS, (Q * Q), bT) / fraction(bQ, Q, bR)) | |
420 | + | if (if ((bM > bU)) | |
439 | 421 | then true | |
440 | - | else ( | |
441 | - | then | |
422 | + | else (bU > bN)) | |
423 | + | then throw("swop with virtualSwapTokenPay and virtualSwapTokenGet possible, but ratio after virtual swap incorrect") | |
442 | 424 | else { | |
443 | - | let bG = fraction(aS(bW, z), P, bY) | |
444 | - | let bH = fraction(aS(bX, A), P, bZ) | |
445 | - | if (true) | |
446 | - | then throw(toString(value(value(assetInfo(u)).minSponsoredFee))) | |
447 | - | else { | |
448 | - | let bI = fraction(min([bG, bH]), J, P) | |
449 | - | if (true) | |
450 | - | then throw(toString(bI)) | |
451 | - | else [Reissue(I, bI, true), ScriptTransfer(bi.caller, bI, I), IntegerEntry(i, (J + bI)), cc, IntegerEntry(l, bD)] | |
452 | - | } | |
425 | + | let bB = fraction((bQ - 270000), Q, (bS - 270000)) | |
426 | + | let bV = fraction(bQ, Q, bS) | |
427 | + | let bC = fraction(aN(bR, B), Q, bT) | |
428 | + | let bD = fraction(min([bB, bC]), K, Q) | |
429 | + | let bW = fraction(max([bB, bC]), K, Q) | |
430 | + | let by = aq((H + bH), I) | |
431 | + | let bX = (H + bH) | |
432 | + | let bY = I | |
433 | + | let bZ = fraction(bD, bX, (K + bD)) | |
434 | + | let ca = fraction(bD, bY, (K + bD)) | |
435 | + | let cb = fraction((bX + bY), V, (2 * W)) | |
436 | + | if (if ((cb > bX)) | |
437 | + | then true | |
438 | + | else (cb > bY)) | |
439 | + | then aU(cb, bX, bY) | |
440 | + | else [Reissue(J, bD, true), ScriptTransfer(bd.caller, bD, J), IntegerEntry(i, (K + bD)), IntegerEntry(f, bX), IntegerEntry(m, by)] | |
453 | 441 | } | |
442 | + | } | |
443 | + | else throw("incorrect virtualSwapTokenPay or virtualSwapTokenGet value") | |
454 | 444 | } | |
445 | + | else if ((bI == B)) | |
446 | + | then { | |
447 | + | let bR = (bH - bE) | |
448 | + | let bQ = bF | |
449 | + | let bS = (H - bF) | |
450 | + | let bT = (I + bE) | |
451 | + | let aF = aq(bS, bT) | |
452 | + | let aG = fraction(L, Q, aF) | |
453 | + | if (if ((aG > bO)) | |
454 | + | then ((aF - L) >= 0) | |
455 | + | else false) | |
456 | + | then { | |
457 | + | let bU = (fraction(bS, (Q * Q), bT) / fraction(bQ, Q, bR)) | |
458 | + | if (if ((bM > bU)) | |
459 | + | then true | |
460 | + | else (bU > bN)) | |
461 | + | then throw("swop with virtualSwapTokenPay and virtualSwapTokenGet possible, but ratio after virtual swap incorrect") | |
462 | + | else { | |
463 | + | let bB = fraction(aN(bQ, A), Q, bS) | |
464 | + | let bC = fraction(aN(bR, B), Q, bT) | |
465 | + | let bD = fraction(min([bB, bC]), K, Q) | |
466 | + | let by = aq(H, (I + bH)) | |
467 | + | let bX = H | |
468 | + | let bY = (I + bH) | |
469 | + | let cb = fraction((bX + bY), V, (2 * W)) | |
470 | + | if (if ((cb > bX)) | |
471 | + | then true | |
472 | + | else (cb > bY)) | |
473 | + | then aU(cb, bX, bY) | |
474 | + | else [Reissue(J, bD, true), ScriptTransfer(bd.caller, bD, J), IntegerEntry(i, (K + bD)), IntegerEntry(g, bY), IntegerEntry(m, by)] | |
475 | + | } | |
476 | + | } | |
477 | + | else throw("incorrect virtualSwapTokenPay or virtualSwapTokenGet value") | |
478 | + | } | |
479 | + | else aT() | |
455 | 480 | } | |
456 | 481 | ||
457 | 482 | ||
458 | 483 | ||
459 | - | @Callable(bi) | |
460 | - | func withdraw () = { | |
461 | - | let cf = $Tuple2(bi.payments[0].amount, bi.payments[0].assetId) | |
462 | - | let bM = cf._1 | |
463 | - | let bN = cf._2 | |
464 | - | let cg = aS(fraction(bM, G, J), z) | |
465 | - | let ch = aS(fraction(bM, H, J), A) | |
466 | - | let bD = an((G - cg), (H - ch)) | |
467 | - | if (!(w)) | |
468 | - | then aW() | |
469 | - | else if ((size(bi.payments) != 1)) | |
470 | - | then throw("One attached payment expected") | |
471 | - | else if ((bN != I)) | |
472 | - | then throw(("Incorrect asset attached. Expected: " + toBase58String(I))) | |
473 | - | else if (!(aj)) | |
474 | - | then bh() | |
475 | - | else if (if ((cg > af)) | |
476 | - | then true | |
477 | - | else (ch > ag)) | |
478 | - | then bg(cg, ch) | |
479 | - | else [IntegerEntry(f, (G - cg)), IntegerEntry(g, (H - ch)), IntegerEntry(i, (J - bM)), IntegerEntry(l, bD), Burn(I, bM), ScriptTransfer(bi.caller, cg, z), ScriptTransfer(bi.caller, ch, A)] | |
484 | + | @Callable(bd) | |
485 | + | func exchange (cc,cd) = { | |
486 | + | let ce = $Tuple2(bd.payments[0].amount, bd.payments[0].assetId) | |
487 | + | let bH = ce._1 | |
488 | + | let bI = ce._2 | |
489 | + | if (!(x)) | |
490 | + | then aR() | |
491 | + | else if ((0 >= cc)) | |
492 | + | then throw(("Estimated amount must be positive. Actual: " + toString(cc))) | |
493 | + | else if ((cd > cc)) | |
494 | + | then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cc)) + ". Minimal: ") + toString(cd))) | |
495 | + | else if ((size(bd.payments) != 1)) | |
496 | + | then throw("One attached payment expected") | |
497 | + | else if (!(am)) | |
498 | + | then bc() | |
499 | + | else if ((bI == A)) | |
500 | + | then { | |
501 | + | let cf = B | |
502 | + | let cg = aH(cc, cd, H, I, bH) | |
503 | + | let ch = fraction(cg, (O - M), O) | |
504 | + | let ci = fraction(cg, N, O) | |
505 | + | let bX = (H + bH) | |
506 | + | let bY = ((I - ch) - ci) | |
507 | + | let cb = fraction((bX + bY), V, (2 * W)) | |
508 | + | if (if ((cb > bX)) | |
509 | + | then true | |
510 | + | else (cb > bY)) | |
511 | + | then aU(cb, bX, bY) | |
512 | + | else if (if (if ((A == v)) | |
513 | + | then (af >= bX) | |
514 | + | else false) | |
515 | + | then true | |
516 | + | else if ((B == v)) | |
517 | + | then (af >= bY) | |
518 | + | else false) | |
519 | + | then aY(ch, aj, G) | |
520 | + | else [IntegerEntry(f, bX), IntegerEntry(g, bY), IntegerEntry(m, aq((H + bH), ((I - ch) - ci))), ScriptTransfer(bd.caller, ch, cf), ScriptTransfer(t, ci, cf)] | |
521 | + | } | |
522 | + | else if ((bI == B)) | |
523 | + | then { | |
524 | + | let cf = A | |
525 | + | let cg = as(cc, cd, H, I, bH) | |
526 | + | let ch = fraction(cg, (O - M), O) | |
527 | + | let ci = fraction(cg, N, O) | |
528 | + | let bX = ((H - ch) - ci) | |
529 | + | let bY = (I + bH) | |
530 | + | let cb = fraction((bX + bY), V, (2 * W)) | |
531 | + | if (if ((cb > bX)) | |
532 | + | then true | |
533 | + | else (cb > bY)) | |
534 | + | then aU(cb, bX, bY) | |
535 | + | else if (if (if ((A == v)) | |
536 | + | then (af >= bX) | |
537 | + | else false) | |
538 | + | then true | |
539 | + | else if ((B == v)) | |
540 | + | then (af >= bY) | |
541 | + | else false) | |
542 | + | then aY(ch, ai, C) | |
543 | + | else [IntegerEntry(f, bX), IntegerEntry(g, bY), IntegerEntry(m, aq(((H - ch) - ci), (I + bH))), ScriptTransfer(bd.caller, ch, cf), ScriptTransfer(t, ci, cf)] | |
544 | + | } | |
545 | + | else aT() | |
480 | 546 | } | |
481 | 547 | ||
482 | 548 | ||
483 | 549 | ||
484 | - | @Callable(bi) | |
485 | - | func exchange (ci,cj) = { | |
486 | - | let ck = $Tuple2(bi.payments[0].amount, bi.payments[0].assetId) | |
487 | - | let bM = ck._1 | |
488 | - | let bN = ck._2 | |
489 | - | if (!(w)) | |
490 | - | then aW() | |
491 | - | else if ((0 >= ci)) | |
492 | - | then throw(("Estimated amount must be positive. Actual: " + toString(ci))) | |
493 | - | else if ((cj > ci)) | |
494 | - | then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(ci)) + ". Minimal: ") + toString(cj))) | |
495 | - | else if ((size(bi.payments) != 1)) | |
496 | - | then throw("One attached payment expected") | |
497 | - | else if (!(aj)) | |
498 | - | then bh() | |
499 | - | else if (if ((bN != z)) | |
500 | - | then (bN != A) | |
501 | - | else false) | |
502 | - | then aY() | |
503 | - | else if ((10000000 > bM)) | |
504 | - | then throw("Only swap of 10.000000 or more tokens is allowed") | |
505 | - | else if (if ((V > fraction(P, cj, bM))) | |
506 | - | then true | |
507 | - | else (fraction(P, ci, bM) > W)) | |
508 | - | then throw("Incorrect args and pmt ratio") | |
509 | - | else { | |
510 | - | let cl = if ((bN == z)) | |
511 | - | then A | |
512 | - | else z | |
513 | - | let cm = ap(ci, cj, bM, bN) | |
514 | - | let cn = fraction(cm, (N - L), N) | |
515 | - | let co = fraction(cm, M, N) | |
516 | - | let cp = if ((bN == z)) | |
517 | - | then $Tuple2((G + bM), ((H - cn) - co)) | |
518 | - | else $Tuple2(((G - cn) - co), (H + bM)) | |
519 | - | let ca = cp._1 | |
520 | - | let cb = cp._2 | |
521 | - | let ce = fraction((ca + cb), T, (2 * U)) | |
522 | - | if (if ((ce > ca)) | |
523 | - | then true | |
524 | - | else (ce > cb)) | |
525 | - | then aZ(ce, ca, cb) | |
526 | - | else if (if (if ((z == u)) | |
527 | - | then (cl == z) | |
528 | - | else false) | |
529 | - | then (ac >= ca) | |
530 | - | else false) | |
531 | - | then bd(cn, af, B) | |
532 | - | else if (if (if ((A == u)) | |
533 | - | then (cl == A) | |
534 | - | else false) | |
535 | - | then (ac >= cb) | |
536 | - | else false) | |
537 | - | then bd(cn, ag, F) | |
538 | - | else [IntegerEntry(f, ca), IntegerEntry(g, cb), IntegerEntry(l, an(ca, cb)), ScriptTransfer(bi.caller, cn, cl), ScriptTransfer(s, co, cl)] | |
539 | - | } | |
540 | - | } | |
541 | - | ||
542 | - | ||
543 | - | ||
544 | - | @Callable(bi) | |
545 | - | func shutdown () = if (!(w)) | |
546 | - | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified"))) | |
547 | - | else if (!(containsElement([n, o, p, q], bi.callerPublicKey))) | |
548 | - | then aX() | |
549 | - | else aQ("Paused by admin") | |
550 | - | ||
551 | - | ||
552 | - | ||
553 | - | @Callable(bi) | |
554 | - | func activate () = if (w) | |
555 | - | then aV() | |
556 | - | else if (!(containsElement([n, o, p, q], bi.callerPublicKey))) | |
557 | - | then aX() | |
558 | - | else [BooleanEntry(c, true), DeleteEntry(m)] | |
559 | - | ||
560 | - | ||
561 | - | ||
562 | - | @Callable(bi) | |
563 | - | func takeIntoAccountExtraFunds (cq) = { | |
564 | - | let cr = (ah - G) | |
565 | - | let cs = (ai - H) | |
566 | - | let ct = (cr - (if ((z == u)) | |
567 | - | then cq | |
550 | + | @Callable(bd) | |
551 | + | func takeIntoAccountExtraFunds (cj) = { | |
552 | + | let ck = (ak - H) | |
553 | + | let cl = (al - I) | |
554 | + | let cm = (ck - (if ((A == v)) | |
555 | + | then cj | |
568 | 556 | else 0)) | |
569 | - | let | |
570 | - | then | |
557 | + | let cn = (cl - (if ((B == v)) | |
558 | + | then cj | |
571 | 559 | else 0)) | |
572 | - | if (!( | |
573 | - | then | |
574 | - | else if (( | |
575 | - | then | |
576 | - | else if ((0 > | |
577 | - | then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString( | |
578 | - | else if (if ((0 > | |
560 | + | if (!(x)) | |
561 | + | then aR() | |
562 | + | else if (!(containsElement([o, p, q, s], bd.callerPublicKey))) | |
563 | + | then aS() | |
564 | + | else if ((0 > cj)) | |
565 | + | then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cj))) | |
566 | + | else if (if ((0 > ck)) | |
579 | 567 | then true | |
580 | - | else (0 > | |
581 | - | then | |
582 | - | else if (if ((0 > | |
568 | + | else (0 > cl)) | |
569 | + | then aL("Enroll amount negative") | |
570 | + | else if (if ((0 > cm)) | |
583 | 571 | then true | |
584 | - | else (0 > | |
572 | + | else (0 > cn)) | |
585 | 573 | then throw("Too large amountLeave") | |
586 | - | else [IntegerEntry(f, ( | |
574 | + | else [IntegerEntry(f, (H + cm)), IntegerEntry(g, (I + cn))] | |
587 | 575 | } | |
588 | 576 | ||
589 | 577 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 4 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "2.0.0" | |
5 | 5 | ||
6 | 6 | let b = "version" | |
7 | 7 | ||
8 | 8 | let c = "active" | |
9 | 9 | ||
10 | 10 | let d = "A_asset_id" | |
11 | 11 | ||
12 | 12 | let e = "B_asset_id" | |
13 | 13 | ||
14 | 14 | let f = "A_asset_balance" | |
15 | 15 | ||
16 | 16 | let g = "B_asset_balance" | |
17 | 17 | ||
18 | 18 | let h = "share_asset_id" | |
19 | 19 | ||
20 | 20 | let i = "share_asset_supply" | |
21 | 21 | ||
22 | 22 | let j = "commission" | |
23 | 23 | ||
24 | 24 | let k = "commission_scale_delimiter" | |
25 | 25 | ||
26 | - | let l = " | |
26 | + | let l = "commission_governance" | |
27 | 27 | ||
28 | - | let m = " | |
28 | + | let m = "invariant" | |
29 | 29 | ||
30 | - | let n = | |
30 | + | let n = "shutdown_cause" | |
31 | 31 | ||
32 | 32 | let o = base58'7FhFLst7Htn4uYxGH7xYMTAmbydLVoiZef3eFghi7CG4' | |
33 | 33 | ||
34 | 34 | let p = base58'7FhFLst7Htn4uYxGH7xYMTAmbydLVoiZef3eFghi7CG4' | |
35 | 35 | ||
36 | 36 | let q = base58'7FhFLst7Htn4uYxGH7xYMTAmbydLVoiZef3eFghi7CG4' | |
37 | 37 | ||
38 | 38 | let r = base58'7FhFLst7Htn4uYxGH7xYMTAmbydLVoiZef3eFghi7CG4' | |
39 | 39 | ||
40 | - | let s = | |
40 | + | let s = base58'7FhFLst7Htn4uYxGH7xYMTAmbydLVoiZef3eFghi7CG4' | |
41 | 41 | ||
42 | 42 | let t = Address(base58'3MqhxbxHEMtp2Rwy1gUb6cPSJHQepdap1Yp') | |
43 | 43 | ||
44 | - | let u = base58' | |
44 | + | let u = Address(base58'3MqhxbxHEMtp2Rwy1gUb6cPSJHQepdap1Yp') | |
45 | 45 | ||
46 | - | let v = | |
46 | + | let v = base58'3FUNGbzfNsQ1AZfvumCUqARXvpjjLQrvCzorYuDryQAq' | |
47 | 47 | ||
48 | - | let w = | |
48 | + | let w = (9 * value(value(assetInfo(v)).minSponsoredFee)) | |
49 | 49 | ||
50 | - | let x = | |
50 | + | let x = getBooleanValue(this, c) | |
51 | 51 | ||
52 | - | let y = getStringValue(this, | |
52 | + | let y = getStringValue(this, d) | |
53 | 53 | ||
54 | - | let z = if ((x == "WAVES")) | |
55 | - | then unit | |
56 | - | else fromBase58String(x) | |
54 | + | let z = getStringValue(this, e) | |
57 | 55 | ||
58 | 56 | let A = if ((y == "WAVES")) | |
59 | 57 | then unit | |
60 | 58 | else fromBase58String(y) | |
61 | 59 | ||
62 | - | let B = { | |
63 | - | let C = z | |
64 | - | if ($isInstanceOf(C, "ByteVector")) | |
60 | + | let B = if ((z == "WAVES")) | |
61 | + | then unit | |
62 | + | else fromBase58String(z) | |
63 | + | ||
64 | + | let C = { | |
65 | + | let D = A | |
66 | + | if ($isInstanceOf(D, "ByteVector")) | |
65 | 67 | then { | |
66 | - | let | |
67 | - | value(assetInfo( | |
68 | + | let E = D | |
69 | + | value(assetInfo(E)).name | |
68 | 70 | } | |
69 | - | else if ($isInstanceOf( | |
71 | + | else if ($isInstanceOf(D, "Unit")) | |
70 | 72 | then { | |
71 | - | let | |
73 | + | let F = D | |
72 | 74 | "WAVES" | |
73 | 75 | } | |
74 | 76 | else throw("Match error") | |
75 | 77 | } | |
76 | 78 | ||
77 | - | let | |
78 | - | let | |
79 | - | if ($isInstanceOf( | |
79 | + | let G = { | |
80 | + | let D = B | |
81 | + | if ($isInstanceOf(D, "ByteVector")) | |
80 | 82 | then { | |
81 | - | let | |
82 | - | value(assetInfo( | |
83 | + | let E = D | |
84 | + | value(assetInfo(E)).name | |
83 | 85 | } | |
84 | - | else if ($isInstanceOf( | |
86 | + | else if ($isInstanceOf(D, "Unit")) | |
85 | 87 | then { | |
86 | - | let | |
88 | + | let F = D | |
87 | 89 | "WAVES" | |
88 | 90 | } | |
89 | 91 | else throw("Match error") | |
90 | 92 | } | |
91 | 93 | ||
92 | - | let | |
94 | + | let H = getIntegerValue(this, f) | |
93 | 95 | ||
94 | - | let | |
96 | + | let I = getIntegerValue(this, g) | |
95 | 97 | ||
96 | - | let | |
98 | + | let J = fromBase58String(getStringValue(this, h)) | |
97 | 99 | ||
98 | - | let | |
100 | + | let K = getIntegerValue(this, i) | |
99 | 101 | ||
100 | - | let | |
102 | + | let L = getIntegerValue(this, m) | |
101 | 103 | ||
102 | - | let | |
104 | + | let M = 500 | |
103 | 105 | ||
104 | - | let | |
106 | + | let N = 200 | |
105 | 107 | ||
106 | - | let | |
108 | + | let O = 1000000 | |
107 | 109 | ||
108 | - | let | |
110 | + | let P = 1000 | |
109 | 111 | ||
110 | - | let | |
112 | + | let Q = 100000000 | |
111 | 113 | ||
112 | - | let | |
114 | + | let R = 1000000000000 | |
113 | 115 | ||
114 | - | let | |
116 | + | let S = 1000 | |
115 | 117 | ||
116 | - | let | |
118 | + | let T = 8 | |
117 | 119 | ||
118 | - | let | |
120 | + | let U = 12 | |
119 | 121 | ||
120 | - | let | |
122 | + | let V = 50 | |
121 | 123 | ||
122 | - | let | |
124 | + | let W = 100 | |
123 | 125 | ||
124 | - | let | |
126 | + | let X = 100000000 | |
125 | 127 | ||
126 | - | let | |
128 | + | let Y = 99999000 | |
127 | 129 | ||
128 | - | let | |
130 | + | let Z = 50 | |
129 | 131 | ||
130 | - | let | |
132 | + | let aa = 2 | |
131 | 133 | ||
132 | - | func aa (ab) = { | |
133 | - | let C = ab | |
134 | - | if ($isInstanceOf(C, "ByteVector")) | |
134 | + | let ab = 46000000 | |
135 | + | ||
136 | + | let ac = 8 | |
137 | + | ||
138 | + | func ad (ae) = { | |
139 | + | let D = ae | |
140 | + | if ($isInstanceOf(D, "ByteVector")) | |
135 | 141 | then { | |
136 | - | let | |
137 | - | assetBalance(this, | |
142 | + | let E = D | |
143 | + | assetBalance(this, E) | |
138 | 144 | } | |
139 | - | else if ($isInstanceOf( | |
145 | + | else if ($isInstanceOf(D, "Unit")) | |
140 | 146 | then { | |
141 | - | let | |
147 | + | let F = D | |
142 | 148 | wavesBalance(this).available | |
143 | 149 | } | |
144 | 150 | else throw("Match error") | |
145 | 151 | } | |
146 | 152 | ||
147 | 153 | ||
148 | - | let | |
149 | - | let | |
150 | - | if ($isInstanceOf( | |
154 | + | let af = { | |
155 | + | let D = getInteger(u, ((("rpd_balance_" + toBase58String(v)) + "_") + toString(this))) | |
156 | + | if ($isInstanceOf(D, "Int")) | |
151 | 157 | then { | |
152 | - | let | |
153 | - | | |
158 | + | let ag = D | |
159 | + | ag | |
154 | 160 | } | |
155 | - | else if ($isInstanceOf( | |
161 | + | else if ($isInstanceOf(D, "Unit")) | |
156 | 162 | then { | |
157 | - | let | |
163 | + | let ah = D | |
158 | 164 | 0 | |
159 | 165 | } | |
160 | 166 | else throw("Match error") | |
161 | 167 | } | |
162 | 168 | ||
163 | - | let | |
164 | - | then | |
169 | + | let ai = (H - (if ((A == v)) | |
170 | + | then af | |
165 | 171 | else 0)) | |
166 | 172 | ||
167 | - | let | |
168 | - | then | |
173 | + | let aj = (I - (if ((B == v)) | |
174 | + | then af | |
169 | 175 | else 0)) | |
170 | 176 | ||
171 | - | let | |
172 | - | then | |
177 | + | let ak = (ad(A) + (if ((A == v)) | |
178 | + | then af | |
173 | 179 | else 0)) | |
174 | 180 | ||
175 | - | let | |
176 | - | then | |
181 | + | let al = (ad(B) + (if ((B == v)) | |
182 | + | then af | |
177 | 183 | else 0)) | |
178 | 184 | ||
179 | - | let | |
180 | - | then ( | |
185 | + | let am = if ((ak >= H)) | |
186 | + | then (al >= I) | |
181 | 187 | else false | |
182 | 188 | ||
183 | - | func | |
189 | + | func an (ao,ap) = (((fraction(R, ao, ap) + fraction(R, ap, ao)) / 2) / 10000) | |
184 | 190 | ||
185 | 191 | ||
186 | - | func | |
187 | - | let | |
188 | - | (fraction(( | |
192 | + | func aq (ao,ap) = { | |
193 | + | let ar = an(ao, ap) | |
194 | + | (fraction((ao + ap), Q, pow(ar, T, Z, aa, T, UP)) + (2 * fraction(pow(fraction(ao, ap, Q), 0, 5, 1, (T / 2), DOWN), pow((ar - ab), T, Z, aa, T, DOWN), Q))) | |
189 | 195 | } | |
190 | 196 | ||
191 | 197 | ||
192 | - | func ap (aq,ar,as,at) = { | |
193 | - | let au = (P - ((P * 1) / 10000000)) | |
194 | - | let av = (aq - ar) | |
195 | - | let al = (G + as) | |
196 | - | let am = (H + as) | |
197 | - | let aw = if ((at == z)) | |
198 | - | then an(al, (H - aq)) | |
199 | - | else if ((at == A)) | |
200 | - | then an((G - aq), am) | |
201 | - | else throw("Wrong asset in payment") | |
202 | - | let ax = fraction(P, K, aw) | |
203 | - | func ay (az,aA) = if (true) | |
204 | - | then throw(((toString(az) + " ") + toString(aA))) | |
205 | - | else { | |
206 | - | let aB = (aq - ((aA * av) / 5)) | |
207 | - | let aC = if ((at == z)) | |
208 | - | then an(al, (H - aB)) | |
209 | - | else an((G - aB), am) | |
210 | - | if (true) | |
211 | - | then aB | |
212 | - | else az | |
213 | - | } | |
214 | - | ||
215 | - | let aD = { | |
216 | - | let aE = [1, 2, 3, 4, 5] | |
217 | - | let aF = size(aE) | |
218 | - | let aG = -1 | |
219 | - | if ((aF == 0)) | |
220 | - | then aG | |
221 | - | else { | |
222 | - | let aH = ay(aG, aE[0]) | |
223 | - | if ((aF == 1)) | |
224 | - | then aH | |
225 | - | else { | |
226 | - | let aI = ay(aH, aE[1]) | |
227 | - | if ((aF == 2)) | |
228 | - | then aI | |
229 | - | else { | |
230 | - | let aJ = ay(aI, aE[2]) | |
231 | - | if ((aF == 3)) | |
232 | - | then aJ | |
233 | - | else { | |
234 | - | let aK = ay(aJ, aE[3]) | |
235 | - | if ((aF == 4)) | |
236 | - | then aK | |
237 | - | else { | |
238 | - | let aL = ay(aK, aE[4]) | |
239 | - | if ((aF == 5)) | |
240 | - | then aL | |
241 | - | else { | |
242 | - | let aM = ay(aL, aE[5]) | |
243 | - | throw("List size exceed 5") | |
244 | - | } | |
245 | - | } | |
246 | - | } | |
247 | - | } | |
248 | - | } | |
249 | - | } | |
250 | - | } | |
251 | - | if ((0 > aD)) | |
252 | - | then throw("something went wrong while working with amountToSend") | |
253 | - | else if (if ((ax > au)) | |
254 | - | then (aw > K) | |
198 | + | func as (at,au,av,aw,ax) = { | |
199 | + | let ay = (Q - ((Q * 1) / 10000000)) | |
200 | + | let az = (at - au) | |
201 | + | let aA = (at - ((1 * az) / 5)) | |
202 | + | let aB = (at - ((2 * az) / 5)) | |
203 | + | let aC = (at - ((3 * az) / 5)) | |
204 | + | let aD = (at - ((4 * az) / 5)) | |
205 | + | let aE = (at - ((5 * az) / 5)) | |
206 | + | let ap = (aw + ax) | |
207 | + | let aF = aq((av - at), ap) | |
208 | + | let aG = fraction(L, Q, aF) | |
209 | + | if ((0 >= (aq((av - aE), ap) - L))) | |
210 | + | then throw("minTokenReceiveAmount too large.err1") | |
211 | + | else if (if ((aG > ay)) | |
212 | + | then ((aF - L) > 0) | |
255 | 213 | else false) | |
256 | - | then aq | |
257 | - | else ((aD * (N - L)) / N) | |
214 | + | then at | |
215 | + | else if (((aq((av - aA), ap) - L) > 0)) | |
216 | + | then ((aA * (O - M)) / O) | |
217 | + | else if (((aq((av - aB), ap) - L) > 0)) | |
218 | + | then ((aB * (O - M)) / O) | |
219 | + | else if (((aq((av - aC), ap) - L) > 0)) | |
220 | + | then ((aC * (O - M)) / O) | |
221 | + | else if (((aq((av - aD), ap) - L) > 0)) | |
222 | + | then ((aD * (O - M)) / O) | |
223 | + | else if (((aq((av - aE), ap) - L) > 0)) | |
224 | + | then ((aE * (O - M)) / O) | |
225 | + | else throw("something went wrong while working with amountToSendStep. err2") | |
258 | 226 | } | |
259 | 227 | ||
260 | 228 | ||
261 | - | func aN (ab) = { | |
262 | - | let C = ab | |
263 | - | if ($isInstanceOf(C, "ByteVector")) | |
229 | + | func aH (at,au,av,aw,ax) = { | |
230 | + | let ay = (Q - ((Q * 1) / 10000000)) | |
231 | + | let az = (at - au) | |
232 | + | let aA = (at - ((1 * az) / 5)) | |
233 | + | let aB = (at - ((2 * az) / 5)) | |
234 | + | let aC = (at - ((3 * az) / 5)) | |
235 | + | let aD = (at - ((4 * az) / 5)) | |
236 | + | let aE = (at - ((5 * az) / 5)) | |
237 | + | let ao = (av + ax) | |
238 | + | let aF = aq(ao, (aw - at)) | |
239 | + | let aG = fraction(L, Q, aF) | |
240 | + | if ((0 >= (aq(ao, (aw - aE)) - L))) | |
241 | + | then throw("minTokenReceiveAmount too large.err1") | |
242 | + | else if (if ((aG > ay)) | |
243 | + | then ((aF - L) > 0) | |
244 | + | else false) | |
245 | + | then at | |
246 | + | else if (((aq(ao, (aw - aA)) - L) > 0)) | |
247 | + | then ((aA * (O - M)) / O) | |
248 | + | else if (((aq(ao, (aw - aB)) - L) > 0)) | |
249 | + | then ((aB * (O - M)) / O) | |
250 | + | else if (((aq(ao, (aw - aC)) - L) > 0)) | |
251 | + | then ((aC * (O - M)) / O) | |
252 | + | else if (((aq(ao, (aw - aD)) - L) > 0)) | |
253 | + | then ((aD * (O - M)) / O) | |
254 | + | else if (((aq(ao, (aw - aE)) - L) > 0)) | |
255 | + | then ((aE * (O - M)) / O) | |
256 | + | else throw("something went wrong while working with amountToSendStep. err2") | |
257 | + | } | |
258 | + | ||
259 | + | ||
260 | + | func aI (ae) = { | |
261 | + | let D = ae | |
262 | + | if ($isInstanceOf(D, "ByteVector")) | |
264 | 263 | then { | |
265 | - | let | |
266 | - | let | |
267 | - | let | |
268 | - | $Tuple3( | |
264 | + | let E = D | |
265 | + | let aJ = toBase58String(E) | |
266 | + | let aK = valueOrErrorMessage(assetInfo(E), (("Asset " + aJ) + " doesn't exist")) | |
267 | + | $Tuple3(aJ, aK.name, aK.decimals) | |
269 | 268 | } | |
270 | - | else if ($isInstanceOf( | |
269 | + | else if ($isInstanceOf(D, "Unit")) | |
271 | 270 | then { | |
272 | - | let | |
271 | + | let F = D | |
273 | 272 | $Tuple3("WAVES", "WAVES", 8) | |
274 | 273 | } | |
275 | 274 | else throw("Match error") | |
276 | 275 | } | |
277 | 276 | ||
278 | 277 | ||
279 | - | func | |
278 | + | func aL (aM) = [BooleanEntry(c, false), StringEntry(n, aM)] | |
280 | 279 | ||
281 | 280 | ||
282 | - | func | |
281 | + | func aN (aO,ae) = if ((ae == v)) | |
283 | 282 | then { | |
284 | - | let | |
285 | - | if ((0 >= | |
286 | - | then throw((((("Insufficient amount " + toString( | |
287 | - | else | |
283 | + | let aP = (aO - w) | |
284 | + | if ((0 >= aP)) | |
285 | + | then throw((((("Insufficient amount " + toString(aO)) + " to deduct staking fee ") + toString(w)) + " USD-N")) | |
286 | + | else aP | |
288 | 287 | } | |
289 | - | else | |
288 | + | else aO | |
290 | 289 | ||
291 | 290 | ||
292 | - | func | |
291 | + | func aQ () = throw("DApp is already active") | |
293 | 292 | ||
294 | 293 | ||
295 | - | func | |
294 | + | func aR () = throw("DApp is inactive at this moment") | |
296 | 295 | ||
297 | 296 | ||
298 | - | func | |
297 | + | func aS () = throw("Only admin can call this function") | |
299 | 298 | ||
300 | 299 | ||
301 | - | func | |
300 | + | func aT () = throw(((("Incorrect assets attached. Expected: " + y) + " and ") + z)) | |
302 | 301 | ||
303 | 302 | ||
304 | - | func | |
303 | + | func aU (aV,aW,aX) = throw(((((((((("New balance in assets of the DApp is less than threshold " + toString(aV)) + ": ") + toString(aW)) + " ") + C) + ", ") + toString(aX)) + " ") + G)) | |
305 | 304 | ||
306 | 305 | ||
307 | - | func | |
306 | + | func aY (aO,aZ,ba) = throw((((((((("Insufficient DApp balance to pay " + toString(aO)) + " ") + ba) + " due to staking. Available: ") + toString(aZ)) + " ") + ba) + ". Please contact support in Telegram: https://t.me/swopfisupport")) | |
308 | 307 | ||
309 | 308 | ||
310 | - | func | |
309 | + | func bb (aW,aX) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aW)) + " ") + C) + " and ") + toString(aX)) + " ") + G) + " due to staking. Available: ") + toString(ai)) + " ") + C) + " and ") + toString(aj)) + " ") + G) + ". Please contact support in Telegram: https://t.me/swopfisupport")) | |
311 | 310 | ||
312 | 311 | ||
313 | - | func | |
312 | + | func bc () = aL(((((((((((((((("Suspicious state. Actual balances: " + toString(H)) + " ") + C) + ", ") + toString(I)) + " ") + G) + ". State: ") + toString(ad(A))) + " ") + C) + ", ") + toString(ad(B))) + " ") + G)) | |
314 | 313 | ||
315 | 314 | ||
316 | - | @Callable( | |
315 | + | @Callable(bd) | |
317 | 316 | func init () = { | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | let | |
329 | - | let | |
330 | - | let | |
331 | - | let | |
317 | + | let be = $Tuple2(bd.payments[0].amount, bd.payments[0].assetId) | |
318 | + | let bf = be._1 | |
319 | + | let bg = be._2 | |
320 | + | let bh = $Tuple2(bd.payments[1].amount, bd.payments[1].assetId) | |
321 | + | let bi = bh._1 | |
322 | + | let bj = bh._2 | |
323 | + | let bk = aI(bg) | |
324 | + | let bl = bk._1 | |
325 | + | let bm = bk._2 | |
326 | + | let bn = bk._3 | |
327 | + | let bo = aI(bj) | |
328 | + | let bp = bo._1 | |
329 | + | let bq = bo._2 | |
330 | + | let br = bo._3 | |
332 | 331 | if (isDefined(getBoolean(this, c))) | |
333 | - | then | |
334 | - | else if (( | |
332 | + | then aQ() | |
333 | + | else if ((bg == bj)) | |
335 | 334 | then throw("Assets must be different") | |
336 | 335 | else { | |
337 | - | let | |
338 | - | let | |
339 | - | let | |
340 | - | let | |
341 | - | let | |
342 | - | let | |
343 | - | let | |
344 | - | [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, | |
336 | + | let bs = ((("s" + take(bm, 7)) + "_") + take(bq, 7)) | |
337 | + | let bt = ((((("ShareToken of SwopFi protocol for " + bm) + " and ") + bq) + " at address ") + toString(this)) | |
338 | + | let bu = ((bn + br) / 2) | |
339 | + | let bv = fraction(pow(bf, bn, 5, 1, bn, HALFDOWN), pow(bi, br, 5, 1, br, HALFDOWN), pow(10, 0, bu, 0, 0, HALFDOWN)) | |
340 | + | let bw = Issue(bs, bt, bv, bu, true) | |
341 | + | let bx = calculateAssetId(bw) | |
342 | + | let by = aq(bf, bi) | |
343 | + | [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, bl), StringEntry(e, bp), IntegerEntry(f, bf), IntegerEntry(g, bi), IntegerEntry(m, by), IntegerEntry(j, M), IntegerEntry(k, O), bw, StringEntry(h, toBase58String(bx)), IntegerEntry(i, bv), ScriptTransfer(bd.caller, bv, bx)] | |
345 | 344 | } | |
346 | 345 | } | |
347 | 346 | ||
348 | 347 | ||
349 | 348 | ||
350 | - | @Callable( | |
351 | - | func replenishWithTwoTokens ( | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | if (!( | |
362 | - | then | |
363 | - | else if (if ((0 > | |
349 | + | @Callable(bd) | |
350 | + | func replenishWithTwoTokens (bz) = { | |
351 | + | let bg = bd.payments[0].assetId | |
352 | + | let bj = bd.payments[1].assetId | |
353 | + | let bf = aN(bd.payments[0].amount, bg) | |
354 | + | let bi = aN(bd.payments[1].amount, bj) | |
355 | + | let bA = fraction(fraction(H, Q, bf), P, fraction(I, Q, bi)) | |
356 | + | let bB = fraction(bf, Q, H) | |
357 | + | let bC = fraction(bi, Q, I) | |
358 | + | let bD = fraction(min([bB, bC]), K, Q) | |
359 | + | let by = aq((H + bf), (I + bi)) | |
360 | + | if (!(x)) | |
361 | + | then aR() | |
362 | + | else if (if ((0 > bz)) | |
364 | 363 | then true | |
365 | - | else ( | |
366 | - | then throw("Slippage tolerance must be | |
367 | - | else if ((size( | |
364 | + | else (bz > S)) | |
365 | + | then throw(((("Slippage tolerance must be between 0 and " + toString(S)) + " inclusively. Actual: ") + toString(bz))) | |
366 | + | else if ((size(bd.payments) != 2)) | |
368 | 367 | then throw("Two attached assets expected") | |
369 | - | else if (if (( | |
368 | + | else if (if ((bg != A)) | |
370 | 369 | then true | |
371 | - | else ( | |
372 | - | then | |
373 | - | else if (if (((( | |
370 | + | else (bj != B)) | |
371 | + | then aT() | |
372 | + | else if (if ((((P * (S - bz)) / S) > bA)) | |
374 | 373 | then true | |
375 | - | else ( | |
374 | + | else (bA > ((P * (S + bz)) / S))) | |
376 | 375 | then throw("Incorrect assets amount: amounts must have the contract ratio") | |
377 | - | else if (( | |
376 | + | else if ((bD == 0)) | |
378 | 377 | then throw("Too small amount to replenish") | |
379 | - | else if (!( | |
380 | - | then | |
381 | - | else [IntegerEntry(f, ( | |
378 | + | else if (!(am)) | |
379 | + | then bc() | |
380 | + | else [IntegerEntry(f, (H + bf)), IntegerEntry(g, (I + bi)), IntegerEntry(i, (K + bD)), IntegerEntry(m, by), Reissue(J, bD, true), ScriptTransfer(bd.caller, bD, J)] | |
382 | 381 | } | |
383 | 382 | ||
384 | 383 | ||
385 | 384 | ||
386 | - | @Callable( | |
387 | - | func replenishWithOneToken ( | |
388 | - | let | |
389 | - | let | |
390 | - | let | |
391 | - | let | |
392 | - | let | |
393 | - | let | |
385 | + | @Callable(bd) | |
386 | + | func replenishWithOneToken (bE,bF) = { | |
387 | + | let bG = $Tuple2(bd.payments[0].amount, bd.payments[0].assetId) | |
388 | + | let bH = bG._1 | |
389 | + | let bI = bG._2 | |
390 | + | let bJ = 5000000 | |
391 | + | let bK = 50000000 | |
392 | + | let bL = if ((bK > bH)) | |
394 | 393 | then 100000 | |
395 | 394 | else 1 | |
396 | - | let | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | if (!( | |
401 | - | then | |
402 | - | else if (( | |
403 | - | then throw((((("Payment amount " + toString( | |
404 | - | else if ((size( | |
395 | + | let bM = (Q - ((Q * bL) / 10000000)) | |
396 | + | let bN = (Q + ((Q * bL) / 10000000)) | |
397 | + | let bO = (Q - ((Q * 1) / 10000000)) | |
398 | + | let bP = (Q + ((Q * 1) / 10000000)) | |
399 | + | if (!(x)) | |
400 | + | then aR() | |
401 | + | else if ((bJ > bH)) | |
402 | + | then throw((((("Payment amount " + toString(bH)) + " does not exceed the minimum amount of ") + toString(bJ)) + " tokens")) | |
403 | + | else if ((size(bd.payments) != 1)) | |
405 | 404 | then throw("One attached payment expected") | |
406 | - | else if (!(aj)) | |
407 | - | then bh() | |
408 | - | else if (if ((bN != z)) | |
409 | - | then (bN != A) | |
410 | - | else false) | |
411 | - | then aY() | |
412 | - | else { | |
413 | - | let bV = if ((bN == z)) | |
414 | - | then $Tuple7((bM - bJ), bK, (G + bJ), (H - bK), an((G + bM), H), (G + bM), H) | |
415 | - | else $Tuple7(bK, (bM - bJ), (G - bK), (H + bJ), an(G, (H + bM)), G, (H + bM)) | |
416 | - | let bW = bV._1 | |
417 | - | let bX = bV._2 | |
418 | - | let bY = bV._3 | |
419 | - | let bZ = bV._4 | |
420 | - | let bD = bV._5 | |
421 | - | let ca = bV._6 | |
422 | - | let cb = bV._7 | |
423 | - | let cc = if ((bN == z)) | |
424 | - | then IntegerEntry(f, ca) | |
425 | - | else IntegerEntry(g, cb) | |
426 | - | let aw = an(bY, bZ) | |
427 | - | let ax = fraction(P, K, aw) | |
428 | - | let cd = (fraction((P * P), bY, bZ) / fraction(P, bW, bX)) | |
429 | - | let ce = fraction((ca + cb), T, (2 * U)) | |
430 | - | if (if ((bT >= ax)) | |
431 | - | then true | |
432 | - | else (K > aw)) | |
433 | - | then throw("Incorrect virtualSwapTokenPay or virtualSwapTokenGet value") | |
434 | - | else if (if ((bR > cd)) | |
435 | - | then true | |
436 | - | else (cd > bS)) | |
437 | - | then throw("Swap with virtualSwapTokenPay and virtualSwapTokenGet is possible, but ratio after virtual swap is incorrect") | |
438 | - | else if (if ((ce > ca)) | |
405 | + | else if (!(am)) | |
406 | + | then bc() | |
407 | + | else if ((bI == A)) | |
408 | + | then { | |
409 | + | let bQ = (bH - bE) | |
410 | + | let bR = bF | |
411 | + | let bS = (H + bE) | |
412 | + | let bT = (I - bF) | |
413 | + | let aF = aq(bS, bT) | |
414 | + | let aG = fraction(L, Q, aF) | |
415 | + | if (if ((aG >= bO)) | |
416 | + | then ((aF - L) >= 0) | |
417 | + | else false) | |
418 | + | then { | |
419 | + | let bU = (fraction(bS, (Q * Q), bT) / fraction(bQ, Q, bR)) | |
420 | + | if (if ((bM > bU)) | |
439 | 421 | then true | |
440 | - | else ( | |
441 | - | then | |
422 | + | else (bU > bN)) | |
423 | + | then throw("swop with virtualSwapTokenPay and virtualSwapTokenGet possible, but ratio after virtual swap incorrect") | |
442 | 424 | else { | |
443 | - | let bG = fraction(aS(bW, z), P, bY) | |
444 | - | let bH = fraction(aS(bX, A), P, bZ) | |
445 | - | if (true) | |
446 | - | then throw(toString(value(value(assetInfo(u)).minSponsoredFee))) | |
447 | - | else { | |
448 | - | let bI = fraction(min([bG, bH]), J, P) | |
449 | - | if (true) | |
450 | - | then throw(toString(bI)) | |
451 | - | else [Reissue(I, bI, true), ScriptTransfer(bi.caller, bI, I), IntegerEntry(i, (J + bI)), cc, IntegerEntry(l, bD)] | |
452 | - | } | |
425 | + | let bB = fraction((bQ - 270000), Q, (bS - 270000)) | |
426 | + | let bV = fraction(bQ, Q, bS) | |
427 | + | let bC = fraction(aN(bR, B), Q, bT) | |
428 | + | let bD = fraction(min([bB, bC]), K, Q) | |
429 | + | let bW = fraction(max([bB, bC]), K, Q) | |
430 | + | let by = aq((H + bH), I) | |
431 | + | let bX = (H + bH) | |
432 | + | let bY = I | |
433 | + | let bZ = fraction(bD, bX, (K + bD)) | |
434 | + | let ca = fraction(bD, bY, (K + bD)) | |
435 | + | let cb = fraction((bX + bY), V, (2 * W)) | |
436 | + | if (if ((cb > bX)) | |
437 | + | then true | |
438 | + | else (cb > bY)) | |
439 | + | then aU(cb, bX, bY) | |
440 | + | else [Reissue(J, bD, true), ScriptTransfer(bd.caller, bD, J), IntegerEntry(i, (K + bD)), IntegerEntry(f, bX), IntegerEntry(m, by)] | |
453 | 441 | } | |
442 | + | } | |
443 | + | else throw("incorrect virtualSwapTokenPay or virtualSwapTokenGet value") | |
454 | 444 | } | |
445 | + | else if ((bI == B)) | |
446 | + | then { | |
447 | + | let bR = (bH - bE) | |
448 | + | let bQ = bF | |
449 | + | let bS = (H - bF) | |
450 | + | let bT = (I + bE) | |
451 | + | let aF = aq(bS, bT) | |
452 | + | let aG = fraction(L, Q, aF) | |
453 | + | if (if ((aG > bO)) | |
454 | + | then ((aF - L) >= 0) | |
455 | + | else false) | |
456 | + | then { | |
457 | + | let bU = (fraction(bS, (Q * Q), bT) / fraction(bQ, Q, bR)) | |
458 | + | if (if ((bM > bU)) | |
459 | + | then true | |
460 | + | else (bU > bN)) | |
461 | + | then throw("swop with virtualSwapTokenPay and virtualSwapTokenGet possible, but ratio after virtual swap incorrect") | |
462 | + | else { | |
463 | + | let bB = fraction(aN(bQ, A), Q, bS) | |
464 | + | let bC = fraction(aN(bR, B), Q, bT) | |
465 | + | let bD = fraction(min([bB, bC]), K, Q) | |
466 | + | let by = aq(H, (I + bH)) | |
467 | + | let bX = H | |
468 | + | let bY = (I + bH) | |
469 | + | let cb = fraction((bX + bY), V, (2 * W)) | |
470 | + | if (if ((cb > bX)) | |
471 | + | then true | |
472 | + | else (cb > bY)) | |
473 | + | then aU(cb, bX, bY) | |
474 | + | else [Reissue(J, bD, true), ScriptTransfer(bd.caller, bD, J), IntegerEntry(i, (K + bD)), IntegerEntry(g, bY), IntegerEntry(m, by)] | |
475 | + | } | |
476 | + | } | |
477 | + | else throw("incorrect virtualSwapTokenPay or virtualSwapTokenGet value") | |
478 | + | } | |
479 | + | else aT() | |
455 | 480 | } | |
456 | 481 | ||
457 | 482 | ||
458 | 483 | ||
459 | - | @Callable(bi) | |
460 | - | func withdraw () = { | |
461 | - | let cf = $Tuple2(bi.payments[0].amount, bi.payments[0].assetId) | |
462 | - | let bM = cf._1 | |
463 | - | let bN = cf._2 | |
464 | - | let cg = aS(fraction(bM, G, J), z) | |
465 | - | let ch = aS(fraction(bM, H, J), A) | |
466 | - | let bD = an((G - cg), (H - ch)) | |
467 | - | if (!(w)) | |
468 | - | then aW() | |
469 | - | else if ((size(bi.payments) != 1)) | |
470 | - | then throw("One attached payment expected") | |
471 | - | else if ((bN != I)) | |
472 | - | then throw(("Incorrect asset attached. Expected: " + toBase58String(I))) | |
473 | - | else if (!(aj)) | |
474 | - | then bh() | |
475 | - | else if (if ((cg > af)) | |
476 | - | then true | |
477 | - | else (ch > ag)) | |
478 | - | then bg(cg, ch) | |
479 | - | else [IntegerEntry(f, (G - cg)), IntegerEntry(g, (H - ch)), IntegerEntry(i, (J - bM)), IntegerEntry(l, bD), Burn(I, bM), ScriptTransfer(bi.caller, cg, z), ScriptTransfer(bi.caller, ch, A)] | |
484 | + | @Callable(bd) | |
485 | + | func exchange (cc,cd) = { | |
486 | + | let ce = $Tuple2(bd.payments[0].amount, bd.payments[0].assetId) | |
487 | + | let bH = ce._1 | |
488 | + | let bI = ce._2 | |
489 | + | if (!(x)) | |
490 | + | then aR() | |
491 | + | else if ((0 >= cc)) | |
492 | + | then throw(("Estimated amount must be positive. Actual: " + toString(cc))) | |
493 | + | else if ((cd > cc)) | |
494 | + | then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(cc)) + ". Minimal: ") + toString(cd))) | |
495 | + | else if ((size(bd.payments) != 1)) | |
496 | + | then throw("One attached payment expected") | |
497 | + | else if (!(am)) | |
498 | + | then bc() | |
499 | + | else if ((bI == A)) | |
500 | + | then { | |
501 | + | let cf = B | |
502 | + | let cg = aH(cc, cd, H, I, bH) | |
503 | + | let ch = fraction(cg, (O - M), O) | |
504 | + | let ci = fraction(cg, N, O) | |
505 | + | let bX = (H + bH) | |
506 | + | let bY = ((I - ch) - ci) | |
507 | + | let cb = fraction((bX + bY), V, (2 * W)) | |
508 | + | if (if ((cb > bX)) | |
509 | + | then true | |
510 | + | else (cb > bY)) | |
511 | + | then aU(cb, bX, bY) | |
512 | + | else if (if (if ((A == v)) | |
513 | + | then (af >= bX) | |
514 | + | else false) | |
515 | + | then true | |
516 | + | else if ((B == v)) | |
517 | + | then (af >= bY) | |
518 | + | else false) | |
519 | + | then aY(ch, aj, G) | |
520 | + | else [IntegerEntry(f, bX), IntegerEntry(g, bY), IntegerEntry(m, aq((H + bH), ((I - ch) - ci))), ScriptTransfer(bd.caller, ch, cf), ScriptTransfer(t, ci, cf)] | |
521 | + | } | |
522 | + | else if ((bI == B)) | |
523 | + | then { | |
524 | + | let cf = A | |
525 | + | let cg = as(cc, cd, H, I, bH) | |
526 | + | let ch = fraction(cg, (O - M), O) | |
527 | + | let ci = fraction(cg, N, O) | |
528 | + | let bX = ((H - ch) - ci) | |
529 | + | let bY = (I + bH) | |
530 | + | let cb = fraction((bX + bY), V, (2 * W)) | |
531 | + | if (if ((cb > bX)) | |
532 | + | then true | |
533 | + | else (cb > bY)) | |
534 | + | then aU(cb, bX, bY) | |
535 | + | else if (if (if ((A == v)) | |
536 | + | then (af >= bX) | |
537 | + | else false) | |
538 | + | then true | |
539 | + | else if ((B == v)) | |
540 | + | then (af >= bY) | |
541 | + | else false) | |
542 | + | then aY(ch, ai, C) | |
543 | + | else [IntegerEntry(f, bX), IntegerEntry(g, bY), IntegerEntry(m, aq(((H - ch) - ci), (I + bH))), ScriptTransfer(bd.caller, ch, cf), ScriptTransfer(t, ci, cf)] | |
544 | + | } | |
545 | + | else aT() | |
480 | 546 | } | |
481 | 547 | ||
482 | 548 | ||
483 | 549 | ||
484 | - | @Callable(bi) | |
485 | - | func exchange (ci,cj) = { | |
486 | - | let ck = $Tuple2(bi.payments[0].amount, bi.payments[0].assetId) | |
487 | - | let bM = ck._1 | |
488 | - | let bN = ck._2 | |
489 | - | if (!(w)) | |
490 | - | then aW() | |
491 | - | else if ((0 >= ci)) | |
492 | - | then throw(("Estimated amount must be positive. Actual: " + toString(ci))) | |
493 | - | else if ((cj > ci)) | |
494 | - | then throw(((("Minimal amount can't be greater than estimated. Estimated: " + toString(ci)) + ". Minimal: ") + toString(cj))) | |
495 | - | else if ((size(bi.payments) != 1)) | |
496 | - | then throw("One attached payment expected") | |
497 | - | else if (!(aj)) | |
498 | - | then bh() | |
499 | - | else if (if ((bN != z)) | |
500 | - | then (bN != A) | |
501 | - | else false) | |
502 | - | then aY() | |
503 | - | else if ((10000000 > bM)) | |
504 | - | then throw("Only swap of 10.000000 or more tokens is allowed") | |
505 | - | else if (if ((V > fraction(P, cj, bM))) | |
506 | - | then true | |
507 | - | else (fraction(P, ci, bM) > W)) | |
508 | - | then throw("Incorrect args and pmt ratio") | |
509 | - | else { | |
510 | - | let cl = if ((bN == z)) | |
511 | - | then A | |
512 | - | else z | |
513 | - | let cm = ap(ci, cj, bM, bN) | |
514 | - | let cn = fraction(cm, (N - L), N) | |
515 | - | let co = fraction(cm, M, N) | |
516 | - | let cp = if ((bN == z)) | |
517 | - | then $Tuple2((G + bM), ((H - cn) - co)) | |
518 | - | else $Tuple2(((G - cn) - co), (H + bM)) | |
519 | - | let ca = cp._1 | |
520 | - | let cb = cp._2 | |
521 | - | let ce = fraction((ca + cb), T, (2 * U)) | |
522 | - | if (if ((ce > ca)) | |
523 | - | then true | |
524 | - | else (ce > cb)) | |
525 | - | then aZ(ce, ca, cb) | |
526 | - | else if (if (if ((z == u)) | |
527 | - | then (cl == z) | |
528 | - | else false) | |
529 | - | then (ac >= ca) | |
530 | - | else false) | |
531 | - | then bd(cn, af, B) | |
532 | - | else if (if (if ((A == u)) | |
533 | - | then (cl == A) | |
534 | - | else false) | |
535 | - | then (ac >= cb) | |
536 | - | else false) | |
537 | - | then bd(cn, ag, F) | |
538 | - | else [IntegerEntry(f, ca), IntegerEntry(g, cb), IntegerEntry(l, an(ca, cb)), ScriptTransfer(bi.caller, cn, cl), ScriptTransfer(s, co, cl)] | |
539 | - | } | |
540 | - | } | |
541 | - | ||
542 | - | ||
543 | - | ||
544 | - | @Callable(bi) | |
545 | - | func shutdown () = if (!(w)) | |
546 | - | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, m), "the cause wasn't specified"))) | |
547 | - | else if (!(containsElement([n, o, p, q], bi.callerPublicKey))) | |
548 | - | then aX() | |
549 | - | else aQ("Paused by admin") | |
550 | - | ||
551 | - | ||
552 | - | ||
553 | - | @Callable(bi) | |
554 | - | func activate () = if (w) | |
555 | - | then aV() | |
556 | - | else if (!(containsElement([n, o, p, q], bi.callerPublicKey))) | |
557 | - | then aX() | |
558 | - | else [BooleanEntry(c, true), DeleteEntry(m)] | |
559 | - | ||
560 | - | ||
561 | - | ||
562 | - | @Callable(bi) | |
563 | - | func takeIntoAccountExtraFunds (cq) = { | |
564 | - | let cr = (ah - G) | |
565 | - | let cs = (ai - H) | |
566 | - | let ct = (cr - (if ((z == u)) | |
567 | - | then cq | |
550 | + | @Callable(bd) | |
551 | + | func takeIntoAccountExtraFunds (cj) = { | |
552 | + | let ck = (ak - H) | |
553 | + | let cl = (al - I) | |
554 | + | let cm = (ck - (if ((A == v)) | |
555 | + | then cj | |
568 | 556 | else 0)) | |
569 | - | let | |
570 | - | then | |
557 | + | let cn = (cl - (if ((B == v)) | |
558 | + | then cj | |
571 | 559 | else 0)) | |
572 | - | if (!( | |
573 | - | then | |
574 | - | else if (( | |
575 | - | then | |
576 | - | else if ((0 > | |
577 | - | then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString( | |
578 | - | else if (if ((0 > | |
560 | + | if (!(x)) | |
561 | + | then aR() | |
562 | + | else if (!(containsElement([o, p, q, s], bd.callerPublicKey))) | |
563 | + | then aS() | |
564 | + | else if ((0 > cj)) | |
565 | + | then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(cj))) | |
566 | + | else if (if ((0 > ck)) | |
579 | 567 | then true | |
580 | - | else (0 > | |
581 | - | then | |
582 | - | else if (if ((0 > | |
568 | + | else (0 > cl)) | |
569 | + | then aL("Enroll amount negative") | |
570 | + | else if (if ((0 > cm)) | |
583 | 571 | then true | |
584 | - | else (0 > | |
572 | + | else (0 > cn)) | |
585 | 573 | then throw("Too large amountLeave") | |
586 | - | else [IntegerEntry(f, ( | |
574 | + | else [IntegerEntry(f, (H + cm)), IntegerEntry(g, (I + cn))] | |
587 | 575 | } | |
588 | 576 | ||
589 | 577 |
github/deemru/w8io/169f3d6 187.05 ms ◑