tx · 3PKQvwCo8tzqXTq6h6xBv3hmiUc53HBkrFToQ96Ztm7w

3MsdLkCCcsf1niGwjyQCMi8aC4CkNbm2Wy9:  -0.04200000 Waves

2023.04.07 09:37 [2523806] smart account 3MsdLkCCcsf1niGwjyQCMi8aC4CkNbm2Wy9 > SELF 0.00000000 Waves

{ "type": 13, "id": "3PKQvwCo8tzqXTq6h6xBv3hmiUc53HBkrFToQ96Ztm7w", "fee": 4200000, "feeAssetId": null, "timestamp": 1680849503744, "version": 2, "chainId": 84, "sender": "3MsdLkCCcsf1niGwjyQCMi8aC4CkNbm2Wy9", "senderPublicKey": "B4L9D9LnFwCPW8fFVc65SHyFNYjb1KJv6MUQXPGMPSTy", "proofs": [ "5WfKUKRTFyRLuVYSqg94yeoctkcy3xqeEeHGJJEkd8UqBj8422Ew9MPCV3Rr4JrBR3w3Di9v6YRi5BEWNAYYzfWX" ], "script": "base64:BgK9NwgCEgASBQoDAQQBEgcKBQEEAQgBEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBQoDAQEBEgQKAggIEgASABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiC3RvWDE4QmlnSW50Igdmcm9tWDE4IgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCIHdG9TY2FsZSIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyIJYWJzQmlnSW50Igxzd2FwQ29udHJhY3QiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiBmtleUtMcCIVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0IhJrZXlLTHBSZWZyZXNoRGVsYXkiFmtMcFJlZnJlc2hEZWxheURlZmF1bHQiD2tMcFJlZnJlc2hEZWxheSIUa2V5QWRkaXRpb25hbEJhbGFuY2UiB2Fzc2V0SWQiFmtleVN0YWtpbmdBc3NldEJhbGFuY2UiGmdldEFkZGl0aW9uYWxCYWxhbmNlT3JaZXJvIhxnZXRTdGFraW5nQXNzZXRCYWxhbmNlT3JaZXJvIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiD3Rocm93T3JkZXJFcnJvciIKb3JkZXJWYWxpZCIOb3JkZXJWYWxpZEluZm8iC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IgxnZXRJbnRPckZhaWwiCHRocm93RXJyIgNtc2ciBmZtdEVyciIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIgVpbkZlZSIBQCIGb3V0RmVlIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDg5NjI5MTI4Ig5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyIQZ2V0RmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyIhVzbGlwcGFnZVRvbGVyYW5jZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCISc2xpcGFnZUFtdEFzc2V0QW10IhRzbGlwYWdlUHJpY2VBc3NldEFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIg1iYWxhbmNlT25Qb29sIgx0b3RhbEJhbGFuY2UiD2NhbGNQcmljZUJpZ0ludCIIcHJBbXRYMTgiCGFtQW10WDE4IhRjYWxjUHJpY2VCaWdJbnRSb3VuZCIHZ2V0UmF0ZSIFcHJveHkiA2ludiIHJG1hdGNoMCIBciIHZGVwb3NpdCIGYW1vdW50Ig5zdGFraW5nQXNzZXRJZCIYY3VycmVudEFkZGl0aW9uYWxCYWxhbmNlIhpjdXJyZW50U3Rha2luZ0Fzc2V0QmFsYW5jZSIFYXNzZXQiDWRlcG9zaXRJbnZva2UiFHJlY2VpdmVkU3Rha2luZ0Fzc2V0IhRuZXdBZGRpdGlvbmFsQmFsYW5jZSIWbmV3U3Rha2luZ0Fzc2V0QmFsYW5jZSIId2l0aGRyYXciDHByb3h5UmF0ZU11bCINcHJvZml0QWRkcmVzcyIQY3VycmVudFByb3h5UmF0ZSIHb2xkUmF0ZSIMc3Rha2luZ0Fzc2V0IhRvbGRTZW5kU3Rha2luZ0Ftb3VudCIWc2VuZFN0YWtpbmdBc3NldEFtb3VudCIMcHJvZml0QW1vdW50Ig53aXRoZHJhd0ludm9rZSIOcmVjZWl2ZWRBc3NldHMiE2dldExlYXNlUHJveHlDb25maWciAWEiEXJlYmFsYW5jZUludGVybmFsIgt0YXJnZXRSYXRpbyIKbWluQmFsYW5jZSIUbGVhc2FibGVUb3RhbEJhbGFuY2UiF3RhcmdldEFkZGl0aW9uYWxCYWxhbmNlIgRkaWZmIg9zZW5kQXNzZXRBbW91bnQiDmdldEFzc2V0QW1vdW50Ig5yZWJhbGFuY2VBc3NldCINJHQwMTUzNjQxNTUwMCIKaXNMZWFzYWJsZSILbGVhc2VkUmF0aW8iDHByb3h5QWRkcmVzcyIMcHJveHlBc3NldElkIhRzdGFraW5nUHJvZml0QWRkcmVzcyIZd2l0aGRyYXdBbmRSZWJhbGFuY2VBc3NldCIJZ2V0QW1vdW50Ig0kdDAxNTg5MTE2MDI3IhduZXdUb3RhbExlYXNhYmxlQmFsYW5jZSIOd2l0aGRyYXdBbW91bnQiF3dpdGhkcmF3QW5kUmViYWxhbmNlQWxsIhRhbW91bnRBc3NldE91dEFtb3VudCITcHJpY2VBc3NldE91dEFtb3VudCISQW1BbXRXaXRoZHJhd1N0YXRlIhJQckFtdFdpdGhkcmF3U3RhdGUiEHByaXZhdGVDYWxjUHJpY2UiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCIOYW10QXNzZXRBbXRYMTgiEHByaWNlQXNzZXRBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IgNjZmciC2FtdEFzc2V0RGNtIg1wcmljZUFzc2V0RGNtIghwcmljZVgxOCIIbHBBbXRYMTgiE2xwUHJpY2VJbkFtQXNzZXRYMTgiE2xwUHJpY2VJblByQXNzZXRYMTgiD2NhbGN1bGF0ZVByaWNlcyIGcHJpY2VzIhRlc3RpbWF0ZUdldE9wZXJhdGlvbiIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCIJbHBBc3NldElkIglhbUFzc2V0SWQiCXByQXNzZXRJZCIKcG9vbFN0YXR1cyIKbHBFbWlzc2lvbiIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4Ig1scEVtaXNzaW9uWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiFGVzdGltYXRlUHV0T3BlcmF0aW9uIhFzbGlwcGFnZVRvbGVyYW5jZSIMaW5BbUFzc2V0QW10IgtpbkFtQXNzZXRJZCIMaW5QckFzc2V0QW10IgtpblByQXNzZXRJZCIKaXNFdmFsdWF0ZSIGZW1pdExwIgxhbUFzc2V0SWRTdHIiDHByQXNzZXRJZFN0ciILaUFtdEFzc2V0SWQiDWlQcmljZUFzc2V0SWQiDmluQW1Bc3NldElkU3RyIg5pblByQXNzZXRJZFN0ciIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIDcmVzIgtzbGlwcGFnZVgxOCIUc2xpcHBhZ2VUb2xlcmFuY2VYMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiC2NvbW1vblN0YXRlIgdjYWxjS0xwIg1hbW91bnRCYWxhbmNlIgxwcmljZUJhbGFuY2UiEGFtb3VudEJhbGFuY2VYMTgiD3ByaWNlQmFsYW5jZVgxOCIKdXBkYXRlZEtMcCIOY2FsY0N1cnJlbnRLTHAiEGFtb3VudEFzc2V0RGVsdGEiD3ByaWNlQXNzZXREZWx0YSIUbHBBc3NldEVtaXNzaW9uRGVsdGEiEmFtb3VudEFzc2V0QmFsYW5jZSIRcHJpY2VBc3NldEJhbGFuY2UiD2xwQXNzZXRFbWlzc2lvbiIKY3VycmVudEtMcCIScmVmcmVzaEtMcEludGVybmFsIhdhbW91bnRBc3NldEJhbGFuY2VEZWx0YSIWcHJpY2VBc3NldEJhbGFuY2VEZWx0YSIHYWN0aW9ucyISdmFsaWRhdGVVcGRhdGVkS0xwIgZvbGRLTHAiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiEWFtb3VudEFzc2V0QW1vdW50IhBwcmljZUFzc2V0QW1vdW50Ig0kdDAyODE1NTI4MzY3IgNrTHAiDSR0MDI4ODA3Mjg5MDciDXVudXNlZEFjdGlvbnMiBmtMcE5ldyIMaXNPcmRlclZhbGlkIgRpbmZvIgljb21tb25HZXQiAWkiA3BtdCIGcG10QW10Igljb21tb25QdXQiCmFtQXNzZXRQbXQiCnByQXNzZXRQbXQiBmVzdFB1dCIEZW1pdCIHZW1pdEludiINZW1pdEludkxlZ2FjeSIVbGVnYWN5RmFjdG9yeUNvbnRyYWN0Igd0YWtlRmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMzIwMjAzMjMxMyIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAzMjMxNzMyNDY2IhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyINJHQwMzI1OTgzMjY2MiINcGF5bWVudEFtb3VudCIQYW1vdW50QmFsYW5jZU5ldyIPcHJpY2VCYWxhbmNlTmV3IgtwcmljZU5ld1gxOCIIcHJpY2VOZXciDnBheW1lbnRCYWxhbmNlIhRwYXltZW50QmFsYW5jZUJpZ0ludCIMc3VwcGx5QmlnSW50IgtjaGVjaFN1cHBseSINZGVwb3NpdEJpZ0ludCILaXNzdWVBbW91bnQiC3ByaWNlT2xkWDE4IghwcmljZU9sZCIEbG9zcyINJHQwMzQzNDMzNDUxMCIHYmFsYW5jZSIPaXNzdWVBbW91bnRCb3RoIg9jYWxjR2V0T25lVG9rZW4iCm91dEFzc2V0SWQiBmNoZWNrcyIQb3V0SW5BbW91bnRBc3NldCINYmFsYW5jZUJpZ0ludCIYb3V0SW5BbW91bnRBc3NldERlY2ltYWxzIgxhbUJhbGFuY2VPbGQiDHByQmFsYW5jZU9sZCIKb3V0QmFsYW5jZSIQb3V0QmFsYW5jZUJpZ0ludCIOcmVkZWVtZWRCaWdJbnQiCWFtb3VudFJhdyINJHQwMzY1ODgzNjY0NCILdG90YWxBbW91bnQiDSR0MDM2NjQ4MzY4NzQiC291dEFtQW1vdW50IgtvdXRQckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciGGFtb3VudEJvdGhJblBheW1lbnRBc3NldCIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCIBcyIdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQiCWlzTWFuYWdlciICcGsiC211c3RNYW5hZ2VyIgJwZCINY2xlYW5BbW91bnRJbiIJaXNSZXZlcnNlIg1mZWVQb29sQW1vdW50Ig0kdDAzODc2MDM5MDY1Ighhc3NldE91dCIHYXNzZXRJbiIScG9vbEFzc2V0SW5CYWxhbmNlIhNwb29sQXNzZXRPdXRCYWxhbmNlIglhbW91bnRPdXQiBG9sZEsiBG5ld0siBmNoZWNrSyIMYW1vdW50T3V0TWluIglhZGRyZXNzVG8iC3N3YXBDb250YWN0IghjaGVja01pbiIOcmViYWxhbmNlU3RhdGUiDXdpdGhkcmF3U3RhdGUiF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iD3Nob3VsZEF1dG9TdGFrZSIEYW1JZCIEcHJJZCIMc2xpcHBhZ2VBSW52IgxzbGlwcGFnZVBJbnYiCmxwVHJhbnNmZXIiC3NscFN0YWtlSW52Ig0kdDA0NDExMTQ0NTczIhFyZWZyZXNoS0xwQWN0aW9ucyIRaXNVcGRhdGVkS0xwVmFsaWQiA3JlYiILbWF4U2xpcHBhZ2UiDSR0MDQ1MTg1NDUyNTAiDG1pbk91dEFtb3VudCIJYXV0b1N0YWtlIiBpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZCINaXNQdXREaXNhYmxlZCIHcGF5bWVudCINJHQwNDY0Mzg0NjU5MCIFYm9udXMiE2VtaXRBbW91bnRFc3RpbWF0ZWQiCmVtaXRBbW91bnQiCHN0YWtlSW52IgdzZW5kRmVlIg0kdDA0NzE3NjQ3MzczIg0kdDA0NzM3NjQ3NDg0Ig0kdDA0NzgzOTQ3OTk2Ig1vdXRBc3NldElkU3RyIg1pc0dldERpc2FibGVkIg0kdDA0ODg4MTQ5MDM0Ig9hbW91bnRFc3RpbWF0ZWQiB2J1cm5JbnYiDWFzc2V0VHJhbnNmZXIiDSR0MDQ5Njk4NDk5NDUiEGZlZUFtb3VudEZvckNhbGMiDSR0MDQ5OTQ4NTAwNTYiDSR0MDUwMzM0NTA0OTAiDXVuc3Rha2VBbW91bnQiCnVuc3Rha2VJbnYiDSR0MDUxMzk1NTE1NDYiDSR0MDUyMjA1NTI0NTIiDSR0MDUyNDU1NTI1NjMiFGJ1cm5MUEFzc2V0T25GYWN0b3J5Ig0kdDA1MzY1ODUzNzM5IhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0Ig0kdDA1NDgzNDU0OTE1Ig1jaGVja1BheW1lbnRzIg9jaGVja1Bvb2xTdGF0dXMiDSR0MDU2MTg3NTYyNjgiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIMY2hlY2tBbW91bnRzIg0kdDA1NzcwOTU3NzkwIgthbXRBc3NldFN0ciINcHJpY2VBc3NldFN0ciIYbGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ih1jaGVja0xhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCINJHQwNTg5OTQ1OTA1OCIQa0xwVXBkYXRlQWN0aW9ucyIKYW10QXNzZXRJZCIMcHJpY2VBc3NldElkIg1wb29sTFBCYWxhbmNlIhJhY2NBbXRBc3NldEJhbGFuY2UiFGFjY1ByaWNlQXNzZXRCYWxhbmNlIgpwcmljZXNMaXN0Ig9scEFtdEFzc2V0U2hhcmUiEWxwUHJpY2VBc3NldFNoYXJlIgpwb29sV2VpZ2h0IgxjdXJQcmljZUNhbGMiDGFtQmFsYW5jZVJhdyIMcHJCYWxhbmNlUmF3Ig9hbUJhbGFuY2VSYXdYMTgiD3ByQmFsYW5jZVJhd1gxOCIQcGF5bWVudExwQXNzZXRJZCIMcGF5bWVudExwQW10IgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkiCm1hdGNoZXJQdWIiDSR0MDY3NzIwNjc3ODkiB25ld0hhc2giC2FsbG93ZWRIYXNoIgtjdXJyZW50SGFzaH8AAWEACAABYgCAwtcvAAFjCQC2AgEAgMLXLwABZAkAtgIBAICAkLu61q3wDQABZQkAtgIBAAAAAWYJALYCAQAAAAFnCQC2AgEAAQABaAkAtgIBAAIAAWkCBVdBVkVTAAFqAgJfXwABawABAAFsAAIAAW0AAwABbgAEAAFvAAEAAXAAAgABcQADAAFyAAQAAXMABQABdAAGAAF1AAcAAXYACAABdwAJAAF4AAoAAXkAAQABegACAAFBAAMAAUIAAQABQwAHAQFEAgFFAUYJALwCAwkAtgIBBQFFBQFkCQC2AgEFAUYBAUcCAUUBRgkAvAIDBQFFBQFkBQFGAQFIAgFJAUoJAKADAQkAvAIDBQFJCQC2AgEFAUoFAWQBAUsDAUkBSgFMCQCgAwEJAL0CBAUBSQkAtgIBBQFKBQFkBQFMAQFNAwFOAU8BUAkAawMFAU4FAU8FAVABAVEBAUkDCQBmAgAABQFJCQEBLQEFAUkFAUkBAVIBAUkDCQC/AgIFAWUFAUkJAL4CAQUBSQUBSQEBUwACECVzX19zd2FwQ29udHJhY3QBAVQAAhMlc19fZmFjdG9yeUNvbnRyYWN0AQFVAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBAVYAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAVcAAhElcyVzX19wcmljZV9fbGFzdAEBWAIBWQFaCQC5CQIJAMwIAgIYJXMlcyVkJWRfX3ByaWNlX19oaXN0b3J5CQDMCAIJAKQDAQUBWQkAzAgCCQCkAwEFAVoFA25pbAUBagECYWECAmFiAmFjCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX1BfXwUCYWICAl9fBQJhYwECYWQCAmFiAmFjCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwUCYWICAl9fBQJhYwECYWUAAg8lc19fYW1vdW50QXNzZXQBAmFmAAIOJXNfX3ByaWNlQXNzZXQAAmFnAgclc19fZmVlAAJhaAkAawMACgUBYgCQTgACYWkJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWcFAmFoAAJhagkAuQkCCQDMCAICAiVzCQDMCAICA2tMcAUDbmlsBQFqAAJhawkAuQkCCQDMCAICAiVzCQDMCAICEmtMcFJlZnJlc2hlZEhlaWdodAUDbmlsBQFqAAJhbAkAuQkCCQDMCAICAiVzCQDMCAICD3JlZnJlc2hLTHBEZWxheQUDbmlsBQFqAAJhbQAeAAJhbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJhbAUCYW0BAmFvAQJhcAkAuQkCCQDMCAICBCVzJXMJAMwIAgINc3Rha2VkQmFsYW5jZQkAzAgCBQJhcAUDbmlsBQFqAQJhcQECYXAJALkJAgkAzAgCAgQlcyVzCQDMCAICEXNoYXJlQXNzZXRCYWxhbmNlCQDMCAIFAmFwBQNuaWwFAWoBAmFyAQJhcAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYW8BBQJhcAAAAQJhcwECYXAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmFxAQUCYXAAAAECYXQAAhElc19fZmFjdG9yeUNvbmZpZwECYXUAAhglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAmF2AQJhdwkArAICCQCsAgICCCVzJXMlc19fBQJhdwIgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAmF4AgJheQJhegkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUCYXkCAl9fBQJhegIIX19jb25maWcBAmFBAQJhQgkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQJhQgECYUMAAgwlc19fc2h1dGRvd24BAmFEAQJhRQkArAICAhIlcyVzX19wb29sV2VpZ2h0X18FAmFFAQJhRgACFyVzX19hbGxvd2VkTHBTY3JpcHRIYXNoAAJhRwIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MBAmFIBAJhSQJhSgJhSwJhTAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiRvcmRlciB2YWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAKUDAQUCYUkCAiAoBQJhSgIBKQINIHNlbmRlclZhbGlkPQkApQMBBQJhSwIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYUwBAmFNAgJhTgJhTwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFOBQJhTwkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhTgkAzAgCAgEuCQDMCAIFAmFPCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFQAgJhTgJhTwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmFOBQJhTwkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhTgkAzAgCAgEuCQDMCAIFAmFPCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFRAQJhUgkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhUgUDbmlsAgEgAQJhUwECYVIJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhUgUDbmlsAgEgAAJhVAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFNAgUEdGhpcwkBAVQAAAJhVQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFNAgUCYVQFAmFHAAJhVgoAAmFXCQD8BwQFAmFUAhBnZXRJbkZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVcCA0ludAUCYVcJAAIBCQCsAgIJAAMBBQJhVwIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAJhWAoAAmFXCQD8BwQFAmFUAhFnZXRPdXRGZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFXAgNJbnQFAmFXCQACAQkArAICCQADAQUCYVcCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAECYVkACQELdmFsdWVPckVsc2UCCQCbCAIFAmFUCQECYUMABwECYVoACQDZBAEJAQJhTQIFAmFUCQECYXUAAQJiYQAEAmJiCQECYU0CBQR0aGlzCQECYWUABAJiYwkBAmFNAgUEdGhpcwkBAmFmAAQCYXoJAQJhUAIFAmFUCQECYUEBBQJiYwQCYXkJAQJhUAIFAmFUCQECYUEBBQJiYgkAtQkCCQECYU0CBQJhVAkBAmF4AgkApAMBBQJheQkApAMBBQJhegUBagECYmQBAmJlAwkAAAIFAmJlBQFpBQR1bml0CQDZBAEFAmJlAQJiZgECYmUDCQAAAgUCYmUFBHVuaXQFAWkJANgEAQkBBXZhbHVlAQUCYmUBAmJnAQJiaAkAmQoHCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmJoBQFvCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmgFAXAJANkEAQkAkQMCBQJiaAUBcQkBAmJkAQkAkQMCBQJiaAUBcgkBAmJkAQkAkQMCBQJiaAUBcwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJoBQF0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmgFAXUAAmJpCQECYmcBCQECYmEAAAJiagUCYmkAAmJrCAUCYmoCXzEAAmJsCAUCYmoCXzIAAmJtCAUCYmoCXzMAAmJuCAUCYmoCXzQAAmJvCAUCYmoCXzUAAmJwCAUCYmoCXzYAAmJxCAUCYmoCXzcBAmJyAAkAtQkCCQECYU0CBQJhVAkBAmF0AAUBagACYnMJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJicgAFAUICGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MAAmJ0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYnIABQFDAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAQJidQoCYnYCYncCYngCYnkCYnoCYkECYkICYkMCYkQCYkUJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJ2CQDMCAIJAKQDAQUCYncJAMwIAgkApAMBBQJieAkAzAgCCQCkAwEFAmJ5CQDMCAIJAKQDAQUCYnoJAMwIAgkApAMBBQJiQQkAzAgCCQCkAwEFAmJCCQDMCAIJAKQDAQUCYkMJAMwIAgkApAMBBQJiRAkAzAgCCQCkAwEFAmJFBQNuaWwFAWoBAmJGBgJiRwJiSAJiSQJieQJiQgJiQwkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJHCQDMCAIJAKQDAQUCYkgJAMwIAgkApAMBBQJiSQkAzAgCCQCkAwEFAmJ5CQDMCAIJAKQDAQUCYkIJAMwIAgkApAMBBQJiQwUDbmlsBQFqAQJiSgECYXAEAmJLAwkAAAIFAmFwAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJhcAQCYkwJAGUCCQBkAgUCYksJAQJhcgEFAmFwCQECYXMBBQJhcAkAlgMBCQDMCAIAAAkAzAgCBQJiTAUDbmlsAQJiTQICYk4CYk8JALwCAwUCYk4FAWQFAmJPAQJiUAMCYk4CYk8BTAkAvQIEBQJiTgUBZAUCYk8FAUwBAmJRAQJiUgQCYlMJAPwHBAUCYlICB2dldFJhdGUFA25pbAUDbmlsAwkAAAIFAmJTBQJiUwQCYlQFAmJTAwkAAQIFAmJUAgNJbnQEAmJVBQJiVAUCYlUJAQJhUQECIHByb3h5LmdldFJhdGUoKSB1bmV4cGVjdGVkIHZhbHVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJiVgQCYXACYlcCYlgCYlIEAmJZCQECYXIBBQJhcAMJAAACBQJiWQUCYlkEAmJaCQECYXMBBQJiWAMJAAACBQJiWgUCYloEAmNhCQECYmQBBQJhcAMJAGYCBQJiVwAABAJjYgkA/AcEBQJiUgIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjYQUCYlcFA25pbAMJAAACBQJjYgUCY2IEAmJUBQJjYgMJAAECBQJiVAIDSW50BAJjYwUCYlQEAmNkCQBkAgUCYlkFAmJXBAJjZQkAZAIFAmJaBQJjYwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFvAQUCYXAFAmNkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXEBBQJiWAUCY2UFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNmBgJhcAJiVwJiWAJiUgJjZwJjaAQCYlkJAQJhcgEFAmFwAwkAAAIFAmJZBQJiWQQCYloJAQJhcwEFAmJYAwkAAAIFAmJaBQJiWgQCY2kJAQJiUQEFAmJSAwkAAAIFAmNpBQJjaQQCY2oJAGsDBQJjZwUCYlkFAmJaBAJjawkBAmJkAQUCYlgEAmNsCQBrAwUCY2cFAmJXBQJjagQCY20JAGsDBQJjZwUCYlcFAmNpBAJjbgkAlgMBCQDMCAIAAAkAzAgCCQBlAgUCY2wFAmNtBQNuaWwDCQBmAgUCY20AAAQCY28JAPwHBAUCYlICCHdpdGhkcmF3BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNrBQJjbQUDbmlsAwkAAAIFAmNvBQJjbwQCYlQFAmNvAwkAAQIFAmJUAgNJbnQEAmNwBQJiVAQCY2QJAGUCBQJiWQUCY3AEAmNlCQBlAgkAZQIFAmJaBQJjbQUCY24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbwEFAmFwBQJjZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFxAQUCYlgFAmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmNoBQJjbgkBAmJkAQUCYlgFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNxAQJhcAQCYlQJAPwHBAUCYVQCGmdldFBvb2xMZWFzZUNvbmZpZ1JFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQJhcAUDbmlsBQNuaWwDCQABAgUCYlQCMChCb29sZWFuLCBJbnQsIEludCwgU3RyaW5nLCBTdHJpbmcsIEludCwgU3RyaW5nKQQCY3IFAmJUBQJjcgkBAmFRAQkArAICCQCsAgICAVsFAmFwAh1dIGdldExlYXNlUHJveHlDb25maWcoKSBlcnJvcgECY3MHAmN0AmFwAmJYAmN1AmJSAmNnAmNoBAJiWQkBAmFyAQUCYXADCQAAAgUCYlkFAmJZBAJiWgkBAmFzAQUCYlgDCQAAAgUCYloFAmJaBAJjdgkAlgMBCQDMCAIAAAkAzAgCCQBlAgkBAmJKAQUCYXAFAmN1BQNuaWwEAmN3CQBrAwUCY3QFAmN2AGQEAmN4CQBlAgUCYlkFAmN3AwkAAAIFAmN4AAAFA25pbAMJAGYCAAAFAmN4BAJjeQkBAS0BBQJjeAkBAmJWBAUCYXAFAmN5BQJiWAUCYlIEAmN6BQJjeAkBAmNmBgUCYXAFAmN6BQJiWAUCYlIFAmNnBQJjaAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECY0EBAmFwBAJjQgkBAmNxAQUCYXAEAmNDCAUCY0ICXzEEAmNECAUCY0ICXzIEAmN1CAUCY0ICXzMEAmNFCAUCY0ICXzQEAmNGCAUCY0ICXzUEAmNnCAUCY0ICXzYEAmNHCAUCY0ICXzcDBQJjQwkBAmNzBwUCY0QFAmFwBQJjRgUCY3UJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmNFBQJjZwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY0cFA25pbAECY0gCAmFwAmNJBAJjSgkBAmNxAQUCYXAEAmNDCAUCY0oCXzEEAmNECAUCY0oCXzIEAmN1CAUCY0oCXzMEAmNFCAUCY0oCXzQEAmNGCAUCY0oCXzUEAmNnCAUCY0oCXzYEAmNHCAUCY0oCXzcDBQJjQwQCY0sJAJYDAQkAzAgCAAAJAMwIAgkAZQIJAGUCCQECYkoBBQJhcAUCY0kFAmN1BQNuaWwDCQAAAgUCY0sFAmNLBAJjZAkAawMFAmNEBQJjSwBkAwkAAAIFAmNkBQJjZAQCY0wJAJYDAQkAzAgCAAAJAMwIAgkAZQIJAQJhcgEFAmFwBQJjZAUDbmlsAwkAAAIFAmNMBQJjTAkBAmNmBgUCYXAFAmNMBQJjRgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY0UFAmNnCQERQGV4dHJOYXRpdmUoMTA2MikBBQJjRwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAQJjTQICY04CY08EAmNQCQECY0gCCQECYU0CBQR0aGlzCQECYWUABQJjTgQCY1EJAQJjSAIJAQJhTQIFBHRoaXMJAQJhZgAFAmNPCQDOCAIFAmNQBQJjUQECY1IEAmNTAmNUAmNVAmNWBAJjVwkBAUQCBQJjVQUCY1MEAmNYCQEBRAIFAmNWBQJjVAkBAmJNAgUCY1gFAmNXAQJjWQMCY1UCY1YCY1oEAmRhCQECYmEABAJkYgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF0BAJkYwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF1BAJkZAkBAmNSBAUCZGIFAmRjBQJjVQUCY1YEAmJPCQEBRAIFAmNVBQJkYgQCYk4JAQFEAgUCY1YFAmRjBAJkZQkBAUQCBQJjWgUBYgQCZGYJAQJiTQIFAmJPBQJkZQQCZGcJAQJiTQIFAmJOBQJkZQkAzAgCBQJkZAkAzAgCBQJkZgkAzAgCBQJkZwUDbmlsAQJkaAMCY1UCY1YCY1oEAmRpCQECY1kDBQJjVQUCY1YFAmNaCQDMCAIJAQFIAgkAkQMCBQJkaQAABQFiCQDMCAIJAQFIAgkAkQMCBQJkaQABBQFiCQDMCAIJAQFIAgkAkQMCBQJkaQACBQFiBQNuaWwBAmRqBAJkawJkbAJkbQJhYgQCZGEJAQJiYQAEAmRuCQCRAwIFAmRhBQFxBAJkbwkAkQMCBQJkYQUBcgQCZHAJAJEDAgUCZGEFAXMEAmNTCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGEFAXQEAmNUCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGEFAXUEAmRxCQCRAwIFAmRhBQFwBAJkcggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmRuCQCsAgIJAKwCAgIGQXNzZXQgBQJkbgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJkbgUCZGwJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmRzCQECYkoBBQJkbwQCZHQJAQFEAgUCZHMFAmNTBAJkdQkBAmJKAQUCZHAEAmR2CQEBRAIFAmR1BQJjVAQCZHcJAQJiTQIFAmR2BQJkdAQCZHgJAQFIAgUCZHcFAWIEAmR5CQEBRAIFAmRtBQFiBAJkegkBAUQCBQJkcgUBYgQCZEEJALwCAwUCZHQFAmR5BQJkegQCZEIJALwCAwUCZHYFAmR5BQJkegQCZEMJAQFLAwUCZEEFAmNTBQVGTE9PUgQCZEQJAQFLAwUCZEIFAmNUBQVGTE9PUgQCZEUDCQAAAgUCZGsCAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJkQwMJAAACBQJkbwIFV0FWRVMFBHVuaXQJANkEAQUCZG8JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYWIFAmREAwkAAAIFAmRwAgVXQVZFUwUEdW5pdAkA2QQBBQJkcAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCCQClCAEFAmFiBQJkawkBAmJGBgUCZEMFAmREBQJkbQUCZHgFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZHgJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZHgFA25pbAkAnAoKBQJkQwUCZEQFAmRvBQJkcAUCZHMFAmR1BQJkcgUCZHcFAmRxBQJkRQECZEYJAmRrAmRHAmRIAmRJAmRKAmRLAmFiAmRMAmRNBAJkYQkBAmJhAAQCZG4JANkEAQkAkQMCBQJkYQUBcQQCZE4JAJEDAgUCZGEFAXIEAmRPCQCRAwIFAmRhBQFzBAJkUAkAkQMCBQJkYQUBdgQCZFEJAJEDAgUCZGEFAXcEAmRiCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGEFAXQEAmRjCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZGEFAXUEAmRxCQCRAwIFAmRhBQFwBAJkcggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJkbgkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJkbgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmRSCQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmRJCQDZBAECBVdBVkVTBAJkUwkA2AQBCQELdmFsdWVPckVsc2UCBQJkSwkA2QQBAgVXQVZFUwMDCQECIT0CBQJkTgUCZFIGCQECIT0CBQJkTwUCZFMJAAIBAiJJbnZhbGlkIGFtdCBvciBwcmljZSBhc3NldCBwYXNzZWQuBAJkcwMFAmRMCQECYkoBBQJkTgkAZQIJAQJiSgEFAmROBQJkSAQCZHUDBQJkTAkBAmJKAQUCZE8JAGUCCQECYkoBBQJkTwUCZEoEAmRUCQEBRAIFAmRIBQJkYgQCZFUJAQFEAgUCZEoFAmRjBAJkVgkBAmJNAgUCZFUFAmRUBAJkdAkBAUQCBQJkcwUCZGIEAmR2CQEBRAIFAmR1BQJkYwQCZFcDCQAAAgUCZHIAAAQCZHcFAWUEAmRYBQFlBAJkZQkAdgYJALkCAgUCZFQFAmRVAAAJALYCAQAFAAEAAAUERE9XTgkAlwoFCQEBSAIFAmRlBQFiCQEBSAIFAmRUBQJkYgkBAUgCBQJkVQUCZGMJAQJiTQIJALcCAgUCZHYFAmRVCQC3AgIFAmR0BQJkVAUCZFgEAmR3CQECYk0CBQJkdgUCZHQEAmRYCQC8AgMJAQFSAQkAuAICBQJkdwUCZFYFAWQFAmR3BAJkWQkBAUQCBQJkRwUBYgMDCQECIT0CBQJkdwUBZQkAvwICBQJkWAUCZFkHCQACAQkArAICCQCsAgIJAKwCAgIPUHJpY2Ugc2xpcHBhZ2UgCQCmAwEFAmRYAh4gZXhjZWVkZWQgdGhlIHBhc3NlZCBsaW1pdCBvZiAJAKYDAQUCZFkEAmR6CQEBRAIFAmRyBQFiBAJkWgkAvQIEBQJkVAkBAmJQAwUCZHYFAmR0BQdDRUlMSU5HBQFkBQdDRUlMSU5HBAJlYQkAvQIEBQJkVQUBZAkBAmJQAwUCZHYFAmR0BQVGTE9PUgUHQ0VJTElORwQCZWIDCQC/AgIFAmRaBQJkVQkAlAoCBQJlYQUCZFUJAJQKAgUCZFQFAmRaBAJlYwgFAmViAl8xBAJlZAgFAmViAl8yBAJkZQkAvQIEBQJkegUCZWQFAmR2BQVGTE9PUgkAlwoFCQEBSwMFAmRlBQFiBQVGTE9PUgkBAUsDBQJlYwUCZGIFB0NFSUxJTkcJAQFLAwUCZWQFAmRjBQdDRUlMSU5HBQJkdwUCZFgEAmVlCAUCZFcCXzEEAmVmCAUCZFcCXzIEAmVnCAUCZFcCXzMEAmR4CQEBSAIIBQJkVwJfNAUBYgQCZWgJAQFIAggFAmRXAl81BQFiAwkAZwIAAAUCZWUJAAIBAjZJbnZhbGlkIGNhbGN1bGF0aW9ucy4gTFAgY2FsY3VsYXRlZCBpcyBsZXNzIHRoYW4gemVyby4EAmVpAwkBASEBBQJkTQAABQJlZQQCZWoJAGUCBQJkSAUCZWYEAmVrCQBlAgUCZEoFAmVnBAJlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJkeAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkeAkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECBQJhYgUCZGsJAQJidQoFAmVmBQJlZwUCZWkFAmR4BQJkRwUCZWgFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmVqBQJlawUDbmlsCQCfCg0FAmVlBQJlaQUCZHgFAmRzBQJkdQUCZHIFAmRuBQJkcQUCZWwFAmVqBQJlawUCZEkFAmRLAQJlbQMCZW4CZW8CZHIEAmVwCQEBRwIFAmVuCQC2AgEFAmJwBAJlcQkBAUcCBQJlbwkAtgIBBQJicQQCZXIJALwCAwkAdgYJALkCAgUCZXAFAmVxAAAJALYCAQAFAAEAEgUERE9XTgUBZwUCZHIDCQAAAgUCZHIFAWYFAWYFAmVyAQJlcwMCZXQCZXUCZXYEAmV3CQC4AgIJALYCAQkBAmJKAQkBAmJmAQUCYm4FAmV0BAJleAkAuAICCQC2AgEJAQJiSgEJAQJiZgEFAmJvBQJldQQCZXkJALgCAgkAtgIBCAkBBXZhbHVlAQkA7AcBBQJibQhxdWFudGl0eQUCZXYEAmV6CQECZW0DBQJldwUCZXgFAmV5BQJlegECZUEDAmVCAmVDAmV2BAJldwkAZAIJAQJiSgEJAQJiZgEFAmJuBQJlQgQCZXgJAGQCCQECYkoBCQECYmYBBQJibwUCZUMEAmV5CQBkAggJAQV2YWx1ZQEJAOwHAQUCYm0IcXVhbnRpdHkFAmV2BAJlcgkBAmVtAwkAtgIBBQJldwkAtgIBBQJleAkAtgIBBQJleQQCZUQJAMwIAgkBDEludGVnZXJFbnRyeQIFAmFrBQZoZWlnaHQJAMwIAgkBC1N0cmluZ0VudHJ5AgUCYWoJAKYDAQUCZXIFA25pbAkAlAoCBQJlRAUCZXIBAmVFAgJlRgJlcgMJAMACAgUCZXIFAmVGBgkBAmFRAQkAuQkCCQDMCAICInVwZGF0ZWQgS0xwIGxvd2VyIHRoYW4gY3VycmVudCBLTHAJAMwIAgkApgMBBQJlRgkAzAgCCQCmAwEFAmVyBQNuaWwCASABAmVHAQJlSAQCZXcJAQJiSgEJAQJiZgEFAmJuBAJleAkBAmJKAQkBAmJmAQUCYm8EAmVJCAUCZUgGYW1vdW50BAJlSgkAbgQIBQJlSAZhbW91bnQIBQJlSAVwcmljZQUBYgUFRkxPT1IEAmVLAwkAAAIIBQJlSAlvcmRlclR5cGUFA0J1eQkAlAoCBQJlSQkBAS0BBQJlSgkAlAoCCQEBLQEFAmVJBQJlSgQCZUIIBQJlSwJfMQQCZUMIBQJlSwJfMgMDAwkBAmFZAAYJAAACBQJibAUBbQYJAAACBQJibAUBbgkAAgECHEV4Y2hhbmdlIG9wZXJhdGlvbnMgZGlzYWJsZWQDAwkBAiE9AggIBQJlSAlhc3NldFBhaXILYW1vdW50QXNzZXQFAmJuBgkBAiE9AggIBQJlSAlhc3NldFBhaXIKcHJpY2VBc3NldAUCYm8JAAIBAhNXcm9uZyBvcmRlciBhc3NldHMuBAJlTAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCoAwEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUCYWoCATAJAQJhUwECC2ludmFsaWQga0xwBAJlTQkBAmVBAwUCZUIFAmVDAAAEAmVOCAUCZU0CXzEEAmVPCAUCZU0CXzIEAmVQCQDAAgIFAmVPBQJlTAQCZVEJALkJAgkAzAgCAgRrTHA9CQDMCAIJAKYDAQUCZUwJAMwIAgIIIGtMcE5ldz0JAMwIAgkApgMBBQJlTwkAzAgCAhQgYW1vdW50QXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFAmV3CQDMCAICEyBwcmljZUFzc2V0QmFsYW5jZT0JAMwIAgkApAMBBQJleAkAzAgCAhkgYW1vdW50QXNzZXRCYWxhbmNlRGVsdGE9CQDMCAIJAKQDAQUCZUIJAMwIAgIYIHByaWNlQXNzZXRCYWxhbmNlRGVsdGE9CQDMCAIJAKQDAQUCZUMJAMwIAgIIIGhlaWdodD0JAMwIAgkApAMBBQZoZWlnaHQFA25pbAIACQCUCgIFAmVQBQJlUQECZVIBAmVTAwkBAiE9AgkAkAMBCAUCZVMIcGF5bWVudHMAAQkAAgECHWV4YWN0bHkgMSBwYXltZW50IGlzIGV4cGVjdGVkBAJlVAkBBXZhbHVlAQkAkQMCCAUCZVMIcGF5bWVudHMAAAQCZGwJAQV2YWx1ZQEIBQJlVAdhc3NldElkBAJlVQgFAmVUBmFtb3VudAQCZFcJAQJkagQJANgEAQgFAmVTDXRyYW5zYWN0aW9uSWQJANgEAQUCZGwFAmVVCAUCZVMGY2FsbGVyBAJkQwgFAmRXAl8xBAJkRAgFAmRXAl8yBAJkcQkBDXBhcnNlSW50VmFsdWUBCAUCZFcCXzkEAmRFCAUCZFcDXzEwAwMJAQJhWQAGCQAAAgUCZHEFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmRxCQCXCgUFAmRDBQJkRAUCZVUFAmRsBQJkRQECZVYDAmVTAmRHAmRNAwkBAiE9AgkAkAMBCAUCZVMIcGF5bWVudHMAAgkAAgECH2V4YWN0bHkgMiBwYXltZW50cyBhcmUgZXhwZWN0ZWQEAmVXCQEFdmFsdWUBCQCRAwIIBQJlUwhwYXltZW50cwAABAJlWAkBBXZhbHVlAQkAkQMCCAUCZVMIcGF5bWVudHMAAQQCZVkJAQJkRgkJANgEAQgFAmVTDXRyYW5zYWN0aW9uSWQFAmRHCAUCZVcGYW1vdW50CAUCZVcHYXNzZXRJZAgFAmVYBmFtb3VudAgFAmVYB2Fzc2V0SWQJAKUIAQgFAmVTBmNhbGxlcgcFAmRNBAJkcQkBDXBhcnNlSW50VmFsdWUBCAUCZVkCXzgDAwMJAQJhWQAGCQAAAgUCZHEFAWwGCQAAAgUCZHEFAW4JAAIBCQCsAgICLFB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmRxBQJlWQECZVoBAmJXBAJmYQkA/AcEBQJhVAIEZW1pdAkAzAgCBQJiVwUDbmlsBQNuaWwDCQAAAgUCZmEFAmZhBAJmYgQCYlQFAmZhAwkAAQIFAmJUAgdBZGRyZXNzBAJmYwUCYlQJAPwHBAUCZmMCBGVtaXQJAMwIAgUCYlcFA25pbAUDbmlsBQR1bml0AwkAAAIFAmZiBQJmYgUCYlcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZkAgJiVwJhaQQCZmUDCQAAAgUCYWkAAAAACQBrAwUCYlcFAmFpBQFiCQCUCgIJAGUCBQJiVwUCZmUFAmZlAQJmZgQCZmcCZmgCYWICYWMEAmZpCQAAAgUCYWMFBHVuaXQEAmZqCQECYkoBCQECYmYBBQJibgQCZmsJAQJiSgEJAQJiZgEFAmJvBAJmbAMJAAACBQJmaAUCYm4GAwkAAAIFAmZoBQJibwcJAQJhUQECDWludmFsaWQgYXNzZXQEAmZtAwUCZmkJAJQKAgUCZmoFAmZrAwUCZmwJAJQKAgkAZQIFAmZqBQJmZwUCZmsJAJQKAgUCZmoJAGUCBQJmawUCZmcEAmZuCAUCZm0CXzEEAmZvCAUCZm0CXzIEAmZwAwUCZmwJAJQKAgUCZmcAAAkAlAoCAAAFAmZnBAJmcQgFAmZwAl8xBAJmcggFAmZwAl8yBAJlSQgJAQJmZAIFAmZxBQJhVgJfMQQCZUoICQECZmQCBQJmcgUCYVYCXzEEAmZzCQECZmQCBQJmZwUCYVYEAmZ0CAUCZnMCXzEEAmZlCAUCZnMCXzIEAmZ1CQBkAgUCZm4FAmVJBAJmdgkAZAIFAmZvBQJlSgQCZncJAQJiTQIJAQFEAgUCZnYFAmJxCQEBRAIFAmZ1BQJicAQCZngJAQFIAgUCZncFAWIEAmZ5AwUCZmwFAmZuBQJmbwQCZnoJALYCAQUCZnkEAmZBCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYm0JAKwCAgkArAICAgZhc3NldCAJANgEAQUCYm0CDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJmQgMJAL8CAgUCZkEFAWYGCQECYVEBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmZCBQJmQgQCZkMJALYCAQUCZnQEAmZECQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmZBCQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQFkCQC6AgIJALkCAgUCZkMFAWQFAmZ6ABIAEgUERE9XTgUBZAUBZAUDbmlsBAJlbAMFAmZpBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZngJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZngJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJ1CgUCZnEFAmZyBQJmRAUCZngAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJmRQkBAmJNAgkBAUQCBQJmbwUCYnEJAQFEAgUCZm4FAmJwBAJmRgkBAUgCBQJmRQUBYgQCZkcEAmZIAwUCZmwJAJQKAgUCZnEFAmZuCQCUCgIFAmZyBQJmbwQCYlcIBQJmSAJfMQQCZkkIBQJmSAJfMgQCZkoJAKADAQkAvAIDBQJmQQkAtgIBCQBpAgUCYlcAAgkAtgIBBQJmSQkAawMJAGUCBQJmRAUCZkoFAWIFAmZKCQCXCgUFAmZEBQJlbAUCZmUFAmZHBQJmbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZksFAmZMAmZ0AmZoAmFiAmFjBAJmaQkAAAIFAmFjBQR1bml0BAJkYQkBAmJhAAQCZGIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdAQCZGMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdQQCZk0JAMwIAgMJAAACBQJmaAUCYm0GCQECYVEBAhBpbnZhbGlkIGxwIGFzc2V0BQNuaWwDCQAAAgUCZk0FAmZNBAJmTgMJAAACBQJmTAUCYm4GAwkAAAIFAmZMBQJibwcJAQJhUQECDWludmFsaWQgYXNzZXQEAmZPAwUCZk4JALYCAQkBAmJKAQkBAmJmAQUCYm4JALYCAQkBAmJKAQkBAmJmAQUCYm8EAmZQAwUCZk4FAmRiBQJkYwQCZlEJAQJiSgEJAQJiZgEFAmJuBAJmUgkBAmJKAQkBAmJmAQUCYm8EAmZTAwUCZk4FAmZRBQJmUgQCZlQJALYCAQUCZlMEAmZBCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYm0JAKwCAgkArAICAgZhc3NldCAJANgEAQUCYm0CDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJmVQkAtgIBBQJmdAQCZlYJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZk8JALgCAgUBZAkAdgYJALgCAgUBZAkAugICCQC5AgIFAmZVBQFkBQJmQQASBQFoAAAAEgUERE9XTgUBZAUDbmlsBAJmVwkBAmZkAgUCZlYFAmFYBAJmWAgFAmZXAl8xBAJmZQgFAmZXAl8yBAJmWQMFAmZOCQCWCgQFAmZYAAAJAGUCBQJmUQUCZlYFAmZSCQCWCgQAAAUCZlgFAmZRCQBlAgUCZlIFAmZWBAJmWggFAmZZAl8xBAJnYQgFAmZZAl8yBAJnYggFAmZZAl8zBAJnYwgFAmZZAl80BAJmdwkBAmJNAgkBAUQCBQJnYwUCYnEJAQFEAgUCZ2IFAmJwBAJmeAkBAUgCBQJmdwUBYgQCZWwDBQJmaQUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZAIJAKUIAQkBBXZhbHVlAQUCYWIJANgEAQkBBXZhbHVlAQUCYWMJAQJiRgYFAmZaBQJnYQUCZnQFAmZ4BQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmZ4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZ4BQNuaWwEAmZFCQECYk0CCQEBRAIFAmZSBQJicQkBAUQCBQJmUQUCYnAEAmZGCQEBSAIFAmZFBQFiBAJmRwQCZ2QJAGgCCQCgAwEJALwCAwUCZk8FAmZVBQJmQQACCQBrAwkAZQIFAmZYBQJnZAUBYgUCZ2QJAJcKBQUCZlgFAmVsBQJmZQUCZkcFAmZOCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJnZQAEAmJUCQCiCAEJAQFVAAMJAAECBQJiVAIGU3RyaW5nBAJnZgUCYlQJANkEAQUCZ2YDCQABAgUCYlQCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZ2cABAJiVAkAoggBCQEBVgADCQABAgUCYlQCBlN0cmluZwQCZ2YFAmJUCQDZBAEFAmdmAwkAAQIFAmJUAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmdoAQJlUwQCYlQJAQJnZQADCQABAgUCYlQCCkJ5dGVWZWN0b3IEAmdpBQJiVAkAAAIIBQJlUw9jYWxsZXJQdWJsaWNLZXkFAmdpAwkAAQIFAmJUAgRVbml0CQAAAggFAmVTBmNhbGxlcgUEdGhpcwkAAgECC01hdGNoIGVycm9yAQJnagECZVMEAmdrCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEAmJUCQECZ2UAAwkAAQIFAmJUAgpCeXRlVmVjdG9yBAJnaQUCYlQDCQAAAggFAmVTD2NhbGxlclB1YmxpY0tleQUCZ2kGBQJnawMJAAECBQJiVAIEVW5pdAMJAAACCAUCZVMGY2FsbGVyBQR0aGlzBgUCZ2sJAAIBAgtNYXRjaCBlcnJvch4CZVMBCXJlYmFsYW5jZQAJAM4IAgkBAmNBAQkBAmFNAgUEdGhpcwkBAmFlAAkBAmNBAQkBAmFNAgUEdGhpcwkBAmFmAAJlUwEhY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcFJFQURPTkxZAwJnbAJnbQJnbgQCZ28DCQAAAgUCZ20HBAJncAkBAmFNAgUEdGhpcwkBAmFmAAQCZ3EJAQJhTQIFBHRoaXMJAQJhZQAJAJQKAgUCZ3AFAmdxBAJncAkBAmFNAgUEdGhpcwkBAmFlAAQCZ3EJAQJhTQIFBHRoaXMJAQJhZgAJAJQKAgUCZ3AFAmdxBAJncAgFAmdvAl8xBAJncQgFAmdvAl8yBAJncgkBAmJKAQUCZ3EEAmdzCQECYkoBBQJncAQCZ3QJAGsDBQJncwUCZ2wJAGQCBQJncgUCZ2wEAmd1CQC5AgIJALYCAQUCZ3IJALYCAQUCZ3MEAmd2CQC5AgIJALcCAgkAtwICCQC2AgEJAQJiSgEFAmdxCQC2AgEFAmdsCQC2AgEFAmduCQC4AgIJALYCAQkBAmJKAQUCZ3AJALYCAQUCZ3QEAmd3AwkAwAICBQJndgUCZ3UGCQACAQIUbmV3IEsgaXMgZmV3ZXIgZXJyb3IDCQAAAgUCZ3cFAmd3CQCUCgIFA25pbAUCZ3QJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBJmNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBBbmRTZW5kVG9rZW5zBQJnbAJnbQJneAJneQJnbgQCZ3oKAAJhVwkA/AcEBQJhVAIXZ2V0U3dhcENvbnRyYWN0UkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAmFXAgZTdHJpbmcFAmFXCQACAQkArAICCQADAQUCYVcCGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwQCZk0JAMwIAgMJAGcCCAkBBXZhbHVlAQkAkQMCCAUCZVMIcGF5bWVudHMAAAZhbW91bnQFAmdsBgkBAmFRAQIMV3JvbmcgYW1vdW50CQDMCAIDCQAAAggFAmVTBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZ3oGCQECYVEBAhFQZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFAmZNBQJmTQQCZVQJAQV2YWx1ZQEJAJEDAggFAmVTCHBheW1lbnRzAAAEAmdxCQECYmYBCAUCZVQHYXNzZXRJZAQCZ3ADCQAAAgUCZ20HCQECYU0CBQR0aGlzCQECYWYACQECYU0CBQR0aGlzCQECYWUABAJncgkAZQIJAQJiSgEFAmdxCAkBBXZhbHVlAQkAkQMCCAUCZVMIcGF5bWVudHMAAAZhbW91bnQEAmdzCQECYkoBBQJncAQCZ3QJAGsDBQJncwUCZ2wJAGQCBQJncgUCZ2wEAmd1CQC5AgIJALYCAQUCZ3IJALYCAQUCZ3MEAmd2CQC5AgIJALcCAgkAtgIBCQECYkoBBQJncQkAtgIBBQJnbgkAuAICCQC2AgEJAQJiSgEFAmdwCQC2AgEFAmd0BAJndwMJAMACAgUCZ3YFAmd1BgkAAgECFG5ldyBLIGlzIGZld2VyIGVycm9yAwkAAAIFAmd3BQJndwQCZ0EDCQBnAgUCZ3QFAmd4BgkAAgECLEV4Y2hhbmdlIHJlc3VsdCBpcyBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkAwkAAAIFAmdBBQJnQQQCZ0IJAQJjQQEFAmdxAwkAAAIFAmdCBQJnQgQCZ0MJAQJjSAIFAmdwBQJndAMJAAACBQJnQwUCZ0MJAJQKAgkAzggCCQDOCAIFAmdDBQJnQgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQJneQUCZ3QJAQJiZAEFAmdwBQNuaWwFAmd0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVTAQpzZXRNYW5hZ2VyAQJnRAQCZ0UJAQJnagEFAmVTAwkAAAIFAmdFBQJnRQQCZ0YJANkEAQUCZ0QDCQAAAgUCZ0YFAmdGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFWAAUCZ0QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlUwEOY29uZmlybU1hbmFnZXIABAJnRwkBAmdnAAQCZ0gDCQEJaXNEZWZpbmVkAQUCZ0cGCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdIBQJnSAQCZ0kDCQAAAggFAmVTD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCZ0cGCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdJBQJnSQkAzAgCCQELU3RyaW5nRW50cnkCCQEBVQAJANgEAQkBBXZhbHVlAQUCZ0cJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVYABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBA3B1dAICZEcCZ0oDCQBmAgAABQJkRwkAAgECIEludmFsaWQgc2xpcHBhZ2VUb2xlcmFuY2UgcGFzc2VkBAJlWQkBAmVWAwUCZVMFAmRHBgQCZWkIBQJlWQJfMgQCZG4IBQJlWQJfNwQCZEUIBQJlWQJfOQQCZWoIBQJlWQNfMTAEAmVrCAUCZVkDXzExBAJnSwgFAmVZA18xMgQCZ0wIBQJlWQNfMTMEAmVXCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJlUwhwYXltZW50cwAABmFtb3VudAQCZVgJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmVTCHBheW1lbnRzAAEGYW1vdW50BAJlegkBAmVzAwUCZVcFAmVYCQC2AgEAAAMJAAACBQJlegUCZXoEAmZhCQD8BwQFAmFUAgRlbWl0CQDMCAIFAmVpBQNuaWwFA25pbAMJAAACBQJmYQUCZmEEAmZiBAJiVAUCZmEDCQABAgUCYlQCB0FkZHJlc3MEAmZjBQJiVAkA/AcEBQJmYwIEZW1pdAkAzAgCBQJlaQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZmIFAmZiBAJnTQMJAGYCBQJlagAACQD8BwQFAmJ0AgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0sFAmVqBQNuaWwFA25pbAMJAAACBQJnTQUCZ00EAmdOAwkAZgIFAmVrAAAJAPwHBAUCYnQCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnTAUCZWsFA25pbAUDbmlsAwkAAAIFAmdOBQJnTgQCZ08DBQJnSgQCZ1AJAPwHBAUCYnMCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRuBQJlaQUDbmlsAwkAAAIFAmdQBQJnUAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJlUwZjYWxsZXIFAmVpBQJkbgUDbmlsBAJnUQkBAmVBAwAAAAAAAAMJAAACBQJnUQUCZ1EEAmVyCAUCZ1ECXzIEAmdSCAUCZ1ECXzEEAmdTCQECZUUCBQJlegUCZXIDCQAAAgUCZ1MFAmdTBAJnVAkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFAmdUBQJnVAkAzggCCQDOCAIFAmRFBQJnTwUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBCnB1dEZvckZyZWUBAmdVAwkAZgIAAAUCZ1UJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQCZVkJAQJlVgMFAmVTBQJnVQcEAmRFCAUCZVkCXzkEAmVXCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJlUwhwYXltZW50cwAABmFtb3VudAQCZVgJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmVTCHBheW1lbnRzAAEGYW1vdW50BAJlegkBAmVzAwUCZVcFAmVYCQC2AgEAAAMJAAACBQJlegUCZXoEAmdWCQECZUEDAAAAAAAABAJnUggFAmdWAl8xBAJlcggFAmdWAl8yBAJnUwkBAmVFAgUCZXoFAmVyAwkAAAIFAmdTBQJnUwkAzggCBQJkRQUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBCXB1dE9uZVRrbgICZ1cCZ1gEAmdZCgACYVcJAPwHBAUCYVQCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhVwIHQm9vbGVhbgUCYVcJAAIBCQCsAgIJAAMBBQJhVwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZ1oDAwMJAQJhWQAGCQAAAgUCYmwFAWwGCQAAAgUCYmwFAW4GBQJnWQQCZk0JAMwIAgMDCQEBIQEFAmdaBgkBAmdoAQUCZVMGCQECYVEBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlUwhwYXltZW50cwABBgkBAmFRAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZk0FAmZNBAJoYQkAkQMCCAUCZVMIcGF5bWVudHMAAAQCZmgIBQJoYQdhc3NldElkBAJmZwgFAmhhBmFtb3VudAQCZXoDCQAAAgUCZmgFAmJuCQECZXMDCQC2AgEFAmZnCQC2AgEAAAkAtgIBAAADCQAAAgUCZmgFAmJvCQECZXMDCQC2AgEAAAkAtgIBBQJmZwkAtgIBAAAJAQJhUQECHnBheW1lbnQgYXNzZXQgaXMgbm90IHN1cHBvcnRlZAMJAAACBQJlegUCZXoEAmFiCAUCZVMGY2FsbGVyBAJhYwgFAmVTDXRyYW5zYWN0aW9uSWQEAmhiCQECZmYEBQJmZwUCZmgFAmFiBQJhYwMJAAACBQJoYgUCaGIEAmZsCAUCaGICXzUEAmhjCAUCaGICXzQEAmZlCAUCaGICXzMEAmVsCAUCaGICXzIEAmhkCAUCaGICXzEEAmhlAwMJAGYCBQJnVwAACQBmAgUCZ1cFAmhkBwkBAmFRAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJnVwUDbmlsAgAFAmhkBAJmYQkBAmVaAQUCaGUDCQAAAgUCZmEFAmZhBAJnTwMFAmdYBAJoZgkA/AcEBQJicwIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYm0FAmhlBQNuaWwDCQAAAgUCaGYFAmhmBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmVTBmNhbGxlcgUCaGUFAmJtBQNuaWwEAmhnAwkAZgIFAmZlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVUFAmZlBQJmaAUDbmlsBQNuaWwEAmhoAwkAAAIFBHRoaXMFAmFVCQCUCgIAAAAAAwUCZmwJAJQKAgkBAS0BBQJmZQAACQCUCgIAAAkBAS0BBQJmZQQCZUIIBQJoaAJfMQQCZUMIBQJoaAJfMgQCaGkJAQJlQQMFAmVCBQJlQwAABAJnUggFAmhpAl8xBAJlcggFAmhpAl8yBAJlTAkBBXZhbHVlAQkAoggBBQJhagQCZ1MJAQJlRQIFAmV6BQJlcgMJAAACBQJnUwUCZ1MEAmdUCQD8BwQFBHRoaXMCCXJlYmFsYW5jZQUDbmlsBQNuaWwDCQAAAgUCZ1QFAmdUCQCUCgIJAM4IAgkAzggCCQDOCAIFAmVsBQJnTwUCaGcFAmdSBQJoZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlUwERcHV0T25lVGtuUkVBRE9OTFkCAmZoAmZnBAJoagkBAmZmBAUCZmcJAQJiZAEFAmZoBQR1bml0BQR1bml0BAJoZAgFAmhqAl8xBAJlbAgFAmhqAl8yBAJmZQgFAmhqAl8zBAJoYwgFAmhqAl80BAJmbAgFAmhqAl81CQCUCgIFA25pbAkAlQoDBQJoZAUCZmUFAmhjAmVTAQlnZXRPbmVUa24CAmhrAmdXBAJnWQoAAmFXCQD8BwQFAmFUAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVcCB0Jvb2xlYW4FAmFXCQACAQkArAICCQADAQUCYVcCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmhsAwMJAQJhWQAGCQAAAgUCYmwFAW4GBQJnWQQCZk0JAMwIAgMDCQEBIQEFAmhsBgkBAmdoAQUCZVMGCQECYVEBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlUwhwYXltZW50cwABBgkBAmFRAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZk0FAmZNBAJmTAkBAmJkAQUCaGsEAmhhCQCRAwIIBQJlUwhwYXltZW50cwAABAJmaAgFAmhhB2Fzc2V0SWQEAmZ0CAUCaGEGYW1vdW50BAJlegkBAmVzAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlegUCZXoEAmFiCAUCZVMGY2FsbGVyBAJhYwgFAmVTDXRyYW5zYWN0aW9uSWQEAmhtCQECZksFBQJmTAUCZnQFAmZoBQJhYgUCYWMDCQAAAgUCaG0FAmhtBAJmTggFAmhtAl81BAJoYwgFAmhtAl80BAJmZQgFAmhtAl8zBAJlbAgFAmhtAl8yBAJobggFAmhtAl8xBAJiVwMDCQBmAgUCZ1cAAAkAZgIFAmdXBQJobgcJAQJhUQEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZ1cFA25pbAIABQJobgQCaG8JAPwHBAUCYVQCBGJ1cm4JAMwIAgUCZnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZmgFAmZ0BQNuaWwDCQAAAgUCaG8FAmhvBAJnQwkBAmNIAgUCaGsJAGQCBQJiVwkAlgMBCQDMCAIAAAkAzAgCBQJmZQUDbmlsBAJocAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCYlcFAmZMBQNuaWwEAmhnAwkAZgIFAmZlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVUFAmZlBQJmTAUDbmlsBQNuaWwEAmhxBAJocgMJAAACBQR0aGlzBQJhVQAABQJmZQMFAmZOCQCUCgIJAQEtAQkAZAIFAmJXBQJocgAACQCUCgIAAAkBAS0BCQBkAgUCYlcFAmhyBAJlQggFAmhxAl8xBAJlQwgFAmhxAl8yBAJocwkBAmVBAwUCZUIFAmVDAAAEAmdSCAUCaHMCXzEEAmVyCAUCaHMCXzIEAmdTCQECZUUCBQJlegUCZXIDCQAAAgUCZ1MFAmdTCQCUCgIJAM4IAgkAzggCCQDOCAIJAM4IAgUCZWwFAmdDBQJocAUCaGcFAmdSBQJiVwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlUwERZ2V0T25lVGtuUkVBRE9OTFkCAmZMAmZ0BAJodAkBAmZLBQkBAmJkAQUCZkwFAmZ0BQJibQUEdW5pdAUEdW5pdAQCaG4IBQJodAJfMQQCZWwIBQJodAJfMgQCZmUIBQJodAJfMwQCaGMIBQJodAJfNAQCZk4IBQJodAJfNQkAlAoCBQNuaWwJAJUKAwUCaG4FAmZlBQJoYwJlUwETdW5zdGFrZUFuZEdldE9uZVRrbgMCaHUCaGsCZ1cEAmdZCgACYVcJAPwHBAUCYVQCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhVwIHQm9vbGVhbgUCYVcJAAIBCQCsAgIJAAMBBQJhVwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCaGwDAwkBAmFZAAYJAAACBQJibAUBbgYFAmdZBAJmTQkAzAgCAwMJAQEhAQUCaGwGCQECZ2gBBQJlUwYJAQJhUQECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmVTCHBheW1lbnRzAAAGCQECYVEBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmTQUCZk0EAmZMCQECYmQBBQJoawQCYWIIBQJlUwZjYWxsZXIEAmFjCAUCZVMNdHJhbnNhY3Rpb25JZAQCZXoJAQJlcwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZXoFAmV6BAJodgkA/AcEBQJicwIHdW5zdGFrZQkAzAgCCQDYBAEFAmJtCQDMCAIFAmh1BQNuaWwFA25pbAMJAAACBQJodgUCaHYEAmh3CQECZksFBQJmTAUCaHUFAmJtBQJhYgUCYWMDCQAAAgUCaHcFAmh3BAJmTggFAmh3Al81BAJoYwgFAmh3Al80BAJmZQgFAmh3Al8zBAJlbAgFAmh3Al8yBAJobggFAmh3Al8xBAJiVwMDCQBmAgUCZ1cAAAkAZgIFAmdXBQJobgcJAQJhUQEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZ1cFA25pbAIABQJobgQCaG8JAPwHBAUCYVQCBGJ1cm4JAMwIAgUCaHUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYm0FAmh1BQNuaWwDCQAAAgUCaG8FAmhvBAJnQwkBAmNIAgUCaGsJAGQCBQJiVwkAlgMBCQDMCAIAAAkAzAgCBQJmZQUDbmlsBAJocAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZVMGY2FsbGVyBQJiVwUCZkwFA25pbAQCaGcDCQBmAgUCZmUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhVQUCZmUFAmZMBQNuaWwFA25pbAQCaHgEAmhyAwkAAAIFBHRoaXMFAmFVAAAFAmZlAwUCZk4JAJQKAgkBAS0BCQBkAgUCYlcFAmhyAAAJAJQKAgAACQEBLQEJAGQCBQJiVwUCaHIEAmVCCAUCaHgCXzEEAmVDCAUCaHgCXzIEAmh5CQECZUEDBQJlQgUCZUMAAAQCZ1IIBQJoeQJfMQQCZXIIBQJoeQJfMgQCZ1MJAQJlRQIFAmV6BQJlcgMJAAACBQJnUwUCZ1MJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCBQJlbAUCZ0MFAmhwBQJoZwUCZ1IFAmJXCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVTAQNnZXQABAJkVwkBAmVSAQUCZVMEAmRDCAUCZFcCXzEEAmRECAUCZFcCXzIEAmVVCAUCZFcCXzMEAmRsCAUCZFcCXzQEAmRFCAUCZFcCXzUEAmdDCQECY00CBQJkQwUCZEQEAmV6CQECZXMDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmV6BQJlegQCaHoJAPwHBAUCYVQCBGJ1cm4JAMwIAgUCZVUFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZGwFAmVVBQNuaWwDCQAAAgUCaHoFAmh6BAJoQQkBAmVBAwkBAS0BBQJkQwkBAS0BBQJkRAAABAJnUggFAmhBAl8xBAJlcggFAmhBAl8yBAJnUwkBAmVFAgUCZXoFAmVyAwkAAAIFAmdTBQJnUwkAzggCCQDOCAIFAmdDBQJkRQUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBCWdldE5vTGVzcwICaEICaEMEAmRXCQECZVIBBQJlUwQCZEMIBQJkVwJfMQQCZEQIBQJkVwJfMgQCZVUIBQJkVwJfMwQCZGwIBQJkVwJfNAQCZEUIBQJkVwJfNQMJAGYCBQJoQgUCZEMJAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmRDAgMgPCAJAKQDAQUCaEIDCQBmAgUCaEMFAmRECQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCZEQCAyA8IAkApAMBBQJoQwQCZ0MJAQJjTQIFAmRDBQJkRAQCZXoJAQJlcwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZXoFAmV6BAJoegkA/AcEBQJhVAIEYnVybgkAzAgCBQJlVQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkbAUCZVUFA25pbAMJAAACBQJoegUCaHoEAmhECQECZUEDCQEBLQEFAmRDCQEBLQEFAmREAAAEAmdSCAUCaEQCXzEEAmVyCAUCaEQCXzIEAmdTCQECZUUCBQJlegUCZXIDCQAAAgUCZ1MFAmdTCQDOCAIJAM4IAgUCZ0MFAmRFBQJnUgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlUwENdW5zdGFrZUFuZEdldAECYlcEAmhFAwkBAiE9AgkAkAMBCAUCZVMIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCaEUFAmhFBAJkYQkBAmJhAAQCZG4JANkEAQkAkQMCBQJkYQUBcQQCZXoJAQJlcwMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZXoFAmV6BAJodgkA/AcEBQJicwIHdW5zdGFrZQkAzAgCCQDYBAEFAmRuCQDMCAIFAmJXBQNuaWwFA25pbAMJAAACBQJodgUCaHYEAmRXCQECZGoECQDYBAEIBQJlUw10cmFuc2FjdGlvbklkCQDYBAEFAmRuBQJiVwgFAmVTBmNhbGxlcgQCZEMIBQJkVwJfMQQCZEQIBQJkVwJfMgQCZHEJAQ1wYXJzZUludFZhbHVlAQgFAmRXAl85BAJkRQgFAmRXA18xMAQCZ0MJAQJjTQIFAmRDBQJkRAQCaEYDAwkBAmFZAAYJAAACBQJkcQUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCZHEGAwkAAAIFAmhGBQJoRgQCaHoJAPwHBAUCYVQCBGJ1cm4JAMwIAgUCYlcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZG4FAmJXBQNuaWwDCQAAAgUCaHoFAmh6BAJoRwkBAmVBAwkBAS0BBQJkQwkBAS0BBQJkRAAABAJnUggFAmhHAl8xBAJlcggFAmhHAl8yBAJnUwkBAmVFAgUCZXoFAmVyAwkAAAIFAmdTBQJnUwkAzggCCQDOCAIFAmdDBQJkRQUCZ1IJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVMBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmh1AmhIAmhDBAJobAMJAQJhWQAGCQAAAgUCYmwFAW4EAmZNCQDMCAIDCQEBIQEFAmhsBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmVTCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZk0FAmZNBAJlegkBAmVzAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlegUCZXoEAmh2CQD8BwQFAmJzAgd1bnN0YWtlCQDMCAIJANgEAQUCYm0JAMwIAgUCaHUFA25pbAUDbmlsAwkAAAIFAmh2BQJodgQCZFcJAQJkagQJANgEAQgFAmVTDXRyYW5zYWN0aW9uSWQJANgEAQUCYm0FAmh1CAUCZVMGY2FsbGVyBAJkQwgFAmRXAl8xBAJkRAgFAmRXAl8yBAJkRQgFAmRXA18xMAQCZ0MJAQJjTQIFAmRDBQJkRAQCaEkJAMwIAgMJAGcCBQJkQwUCaEgGCQACAQkAuQkCCQDMCAICLGFtb3VudCBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaEgFA25pbAIACQDMCAIDCQBnAgUCZEQFAmhDBgkAAgEJALkJAgkAzAgCAitwcmljZSBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaEMFA25pbAIABQNuaWwDCQAAAgUCaEkFAmhJBAJoegkA/AcEBQJhVAIEYnVybgkAzAgCBQJodQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJibQUCaHUFA25pbAMJAAACBQJoegUCaHoEAmhKCQECZUEDCQEBLQEFAmRDCQEBLQEFAmREAAAEAmdSCAUCaEoCXzEEAmVyCAUCaEoCXzIEAmdTCQECZUUCBQJlegUCZXIDCQAAAgUCZ1MFAmdTCQDOCAIJAM4IAgUCZ0MFAmRFBQJnUgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlUwEIYWN0aXZhdGUCAmhLAmhMAwkBAiE9AgkApQgBCAUCZVMGY2FsbGVyCQClCAEFAmFUCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFlAAUCaEsJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFmAAUCaEwFA25pbAIHc3VjY2VzcwJlUwEKcmVmcmVzaEtMcAAEAmhNCQELdmFsdWVPckVsc2UCCQCfCAEFAmFrAAAEAmhOAwkAZwIJAGUCBQZoZWlnaHQFAmhNBQJhbgUEdW5pdAkBAmFRAQkAuQkCCQDMCAIJAKQDAQUCYW4JAMwIAgIvIGJsb2NrcyBoYXZlIG5vdCBwYXNzZWQgc2luY2UgdGhlIHByZXZpb3VzIGNhbGwFA25pbAIAAwkAAAIFAmhOBQJoTgQCZUwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAmFqAgEwCQECYVMBAgtpbnZhbGlkIGtMcAQCaE8JAQJlQQMAAAAAAAAEAmhQCAUCaE8CXzEEAmVyCAUCaE8CXzIEAmVEAwkBAiE9AgUCZUwFAmVyBQJoUAkBAmFRAQISbm90aGluZyB0byByZWZyZXNoCQCUCgIFAmVECQCmAwEFAmVyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVTARxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZAAkAlAoCBQNuaWwJAQJiYQACZVMBHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkBAmFwCQCUCgIFA25pbAkBAmJKAQUCYXACZVMBGWNhbGNQcmljZXNXcmFwcGVyUkVBRE9OTFkDAmNVAmNWAmNaBAJkaQkBAmNZAwUCY1UFAmNWBQJjWgkAlAoCBQNuaWwJAMwIAgkApgMBCQCRAwIFAmRpAAAJAMwIAgkApgMBCQCRAwIFAmRpAAEJAMwIAgkApgMBCQCRAwIFAmRpAAIFA25pbAJlUwEUdG9YMThXcmFwcGVyUkVBRE9OTFkCAUUBRgkAlAoCBQNuaWwJAKYDAQkBAUQCBQFFBQFGAmVTARZmcm9tWDE4V3JhcHBlclJFQURPTkxZAgFJAUoJAJQKAgUDbmlsCQEBSAIJAKcDAQUBSQUBSgJlUwEeY2FsY1ByaWNlQmlnSW50V3JhcHBlclJFQURPTkxZAgJiTgJiTwkAlAoCBQNuaWwJAKYDAQkBAmJNAgkApwMBBQJiTgkApwMBBQJiTwJlUwEjZXN0aW1hdGVQdXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkJAmRrAmRHAmRIAmRJAmRKAmRLAmFiAmRMAmRNCQCUCgIFA25pbAkBAmRGCQUCZGsFAmRHBQJkSAUCZEkFAmRKBQJkSwUCYWIFAmRMBQJkTQJlUwEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEAmRrAmRsAmRtAmFiBAJkVwkBAmRqBAUCZGsFAmRsBQJkbQkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYWIJAJQKAgUDbmlsCQCcCgoIBQJkVwJfMQgFAmRXAl8yCAUCZFcCXzMIBQJkVwJfNAgFAmRXAl81CAUCZFcCXzYIBQJkVwJfNwkApgMBCAUCZFcCXzgIBQJkVwJfOQgFAmRXA18xMAJlUwENc3RhdHNSRUFET05MWQAEAmRhCQECYmEABAJkbgkA2QQBCQCRAwIFAmRhBQFxBAJoUQkAkQMCBQJkYQUBcgQCaFIJAJEDAgUCZGEFAXMEAmRQCQCRAwIFAmRhBQF2BAJkUQkAkQMCBQJkYQUBdwQCZGIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdAQCZGMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYQUBdQQCaFMICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZG4JAKwCAgkArAICAgZBc3NldCAJANgEAQUCZG4CDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJoVAkBAmJKAQUCaFEEAmhVCQECYkoBBQJoUgQCaFYDCQAAAgUCaFMAAAkAzAgCBQFlCQDMCAIFAWUJAMwIAgUBZQUDbmlsCQECY1kDBQJoVAUCaFUFAmhTBAJkeAAABAJoVwkBAUgCCQCRAwIFAmhWAAEFAWIEAmhYCQEBSAIJAJEDAgUCaFYAAgUBYgQCaFkJAQV2YWx1ZQEJAJoIAgUCYVQJAQJhRAEJAKUIAQUEdGhpcwkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmhUCQDMCAIJAKQDAQUCaFUJAMwIAgkApAMBBQJoUwkAzAgCCQCkAwEFAmR4CQDMCAIJAKQDAQUCaFcJAMwIAgkApAMBBQJoWAkAzAgCCQCkAwEFAmhZBQNuaWwFAWoCZVMBIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZAQJkSAQCZGEJAQJiYQAEAmRuCQDZBAEJAJEDAgUCZGEFAXEEAmROCQCRAwIFAmRhBQFyBAJkbwkA2QQBBQJkTgQCZE8JAJEDAgUCZGEFAXMEAmRwCQDZBAEFAmRPBAJkYgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF0BAJkYwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF1BAJkcQkAkQMCBQJkYQUBcAQCaFMICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZG4JAKwCAgkArAICAgZBc3NldCAJANgEAQUCZG4CDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJoVAkBAmJKAQUCZE4EAmhVCQECYkoBBQJkTwQCY1cJAQFEAgUCaFQFAmRiBAJjWAkBAUQCBQJoVQUCZGMEAmR3AwkAAAIFAmhTAAAFAWUJAQJiTQIFAmNYBQJjVwQCZFQJAQFEAgUCZEgFAmRiBAJkVQkAvAIDBQJkVAUCZHcFAWQEAmRKCQEBSAIFAmRVBQJkYwQCZVkJAQJkRgkCAACgwh4FAmRIBQJkbwUCZEoFAmRwAgAGBwQCZWUIBQJlWQJfMQQCaFoIBQJlWQJfMwQCZHMIBQJlWQJfNAQCZHUIBQJlWQJfNQQCZHIIBQJlWQJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCZWUJAMwIAgkApAMBCQEBSAIFAmR3BQFiCQDMCAIJAKQDAQUCZHMJAMwIAgkApAMBBQJkdQkAzAgCCQCkAwEFAmRyCQDMCAIFAmRxCQDMCAIJAKQDAQUCZEgJAMwIAgkApAMBBQJkSgUDbmlsBQFqAmVTAR9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZAQJkSgQCZGEJAQJiYQAEAmRuCQDZBAEJAJEDAgUCZGEFAXEEAmROCQCRAwIFAmRhBQFyBAJkbwkA2QQBBQJkTgQCZE8JAJEDAgUCZGEFAXMEAmRwCQDZBAEFAmRPBAJkYgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF0BAJkYwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRhBQF1BAJkcQkAkQMCBQJkYQUBcAQCaFMICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZG4JAKwCAgkArAICAgZBc3NldCAJANgEAQUCZG4CDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJpYQkBAmJKAQUCZE4EAmliCQECYkoBBQJkTwQCaWMJAQFEAgUCaWEFAmRiBAJpZAkBAUQCBQJpYgUCZGMEAmR3AwkAAAIFAmhTAAAFAWUJAQJiTQIFAmlkBQJpYwQCZFUJAQFEAgUCZEoFAmRjBAJkVAkAvAIDBQJkVQUBZAUCZHcEAmRICQEBSAIFAmRUBQJkYgQCZVkJAQJkRgkCAACgwh4FAmRIBQJkbwUCZEoFAmRwAgAGBwQCZWUIBQJlWQJfMQQCaFoIBQJlWQJfMwQCZHMIBQJlWQJfNAQCZHUIBQJlWQJfNQQCZHIIBQJlWQJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCZWUJAMwIAgkApAMBCQEBSAIFAmR3BQFiCQDMCAIJAKQDAQUCZHMJAMwIAgkApAMBBQJkdQkAzAgCCQCkAwEFAmRyCQDMCAIFAmRxCQDMCAIJAKQDAQUCZEgJAMwIAgkApAMBBQJkSgUDbmlsBQFqAmVTARNldmFsdWF0ZUdldFJFQURPTkxZAgJpZQJpZgQCZFcJAQJkagQCAAUCaWUFAmlmBQR0aGlzBAJkQwgFAmRXAl8xBAJkRAgFAmRXAl8yBAJkcwgFAmRXAl81BAJkdQgFAmRXAl82BAJkcggFAmRXAl83BAJkeAgFAmRXAl84BAJkcQkBDXBhcnNlSW50VmFsdWUBCAUCZFcCXzkJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJkQwkAzAgCCQCkAwEFAmRECQDMCAIJAKQDAQUCZHMJAMwIAgkApAMBBQJkdQkAzAgCCQCkAwEFAmRyCQDMCAIJAKYDAQUCZHgJAMwIAgkApAMBBQJkcQUDbmlsBQFqAQJpZwECaWgABAJpaQQCYlQJAQJnZQADCQABAgUCYlQCCkJ5dGVWZWN0b3IEAmdpBQJiVAUCZ2kDCQABAgUCYlQCBFVuaXQIBQJpZw9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCYlQFAmlnAwkAAQIFAmJUAgVPcmRlcgQCZUgFAmJUBAJpagkBAmFaAAQCaWsJAQJlRwEFAmVIBAJhSQgFAmlrAl8xBAJhSggFAmlrAl8yBAJhSwkA9AMDCAUCZUgJYm9keUJ5dGVzCQCRAwIIBQJlSAZwcm9vZnMAAAgFAmVID3NlbmRlclB1YmxpY0tleQQCYUwJAPQDAwgFAmVICWJvZHlCeXRlcwkAkQMCCAUCZUgGcHJvb2ZzAAEFAmlqAwMDBQJhSQUCYUsHBQJhTAcGCQECYUgEBQJhSQUCYUoFAmFLBQJhTAMJAAECBQJiVAIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmdmBQJiVAMJAPQDAwgFAmlnCWJvZHlCeXRlcwkAkQMCCAUCaWcGcHJvb2ZzAAAFAmlpBgQCaWwJAPYDAQkBBXZhbHVlAQgFAmdmBnNjcmlwdAQCaW0JANsEAQkBBXZhbHVlAQkAnQgCBQJhVAkBAmFGAAQCaW4JAPEHAQUEdGhpcwMJAAACBQJpbQUCaWwJAQIhPQIFAmluBQJpbAcJAPQDAwgFAmlnCWJvZHlCeXRlcwkAkQMCCAUCaWcGcHJvb2ZzAAAFAmlpjGbQ+w==", "height": 2523806, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7XxcywpeHnjoMXasmvgX5PaLLbqxCVzeJq7dTDMCXVeP Next: FehTwtCQUz9QvQQ6RQqVkd8zBwBNV1f11bSGKvXDmo5U Diff:
OldNewDifferences
12861286 let ho = invoke(aT, "burn", [ft], [AttachedPayment(fh, ft)])
12871287 if ((ho == ho))
12881288 then {
1289- let gC = cH(hk, bW)
1289+ let gC = cH(hk, (bW + max([0, fe])))
12901290 let hp = [ScriptTransfer(ab, bW, fL)]
12911291 let hg = if ((fe > 0))
12921292 then [ScriptTransfer(aU, fe, fL)]
13801380 let ho = invoke(aT, "burn", [hu], [AttachedPayment(bm, hu)])
13811381 if ((ho == ho))
13821382 then {
1383- let gC = cH(hk, bW)
1383+ let gC = cH(hk, (bW + max([0, fe])))
13841384 let hp = [ScriptTransfer(eS.caller, bW, fL)]
13851385 let hg = if ((fe > 0))
13861386 then [ScriptTransfer(aU, fe, fL)]
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(0)
1515
1616 let g = toBigInt(1)
1717
1818 let h = toBigInt(2)
1919
2020 let i = "WAVES"
2121
2222 let j = "__"
2323
2424 let k = 1
2525
2626 let l = 2
2727
2828 let m = 3
2929
3030 let n = 4
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 1
5959
6060 let C = 7
6161
6262 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
6363
6464
6565 func G (E,F) = fraction(E, d, F)
6666
6767
6868 func H (I,J) = toInt(fraction(I, toBigInt(J), d))
6969
7070
7171 func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
7272
7373
7474 func M (N,O,P) = fraction(N, O, P)
7575
7676
7777 func Q (I) = if ((0 > I))
7878 then -(I)
7979 else I
8080
8181
8282 func R (I) = if ((e > I))
8383 then -(I)
8484 else I
8585
8686
8787 func S () = "%s__swapContract"
8888
8989
9090 func T () = "%s__factoryContract"
9191
9292
9393 func U () = "%s__managerPublicKey"
9494
9595
9696 func V () = "%s__pendingManagerPublicKey"
9797
9898
9999 func W () = "%s%s__price__last"
100100
101101
102102 func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
103103
104104
105105 func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
106106
107107
108108 func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
109109
110110
111111 func ae () = "%s__amountAsset"
112112
113113
114114 func af () = "%s__priceAsset"
115115
116116
117117 let ag = "%s__fee"
118118
119119 let ah = fraction(10, b, 10000)
120120
121121 let ai = valueOrElse(getInteger(this, ag), ah)
122122
123123 let aj = makeString(["%s", "kLp"], j)
124124
125125 let ak = makeString(["%s", "kLpRefreshedHeight"], j)
126126
127127 let al = makeString(["%s", "refreshKLpDelay"], j)
128128
129129 let am = 30
130130
131131 let an = valueOrElse(getInteger(this, al), am)
132132
133133 func ao (ap) = makeString(["%s%s", "stakedBalance", ap], j)
134134
135135
136136 func aq (ap) = makeString(["%s%s", "shareAssetBalance", ap], j)
137137
138138
139139 func ar (ap) = valueOrElse(getInteger(this, ao(ap)), 0)
140140
141141
142142 func as (ap) = valueOrElse(getInteger(this, aq(ap)), 0)
143143
144144
145145 func at () = "%s__factoryConfig"
146146
147147
148148 func au () = "%s%s__matcher__publicKey"
149149
150150
151151 func av (aw) = (("%s%s%s__" + aw) + "__mappings__poolContract2LpAsset")
152152
153153
154154 func ax (ay,az) = (((("%d%d%s__" + ay) + "__") + az) + "__config")
155155
156156
157157 func aA (aB) = ("%s%s%s__mappings__baseAsset2internalId__" + aB)
158158
159159
160160 func aC () = "%s__shutdown"
161161
162162
163163 func aD (aE) = ("%s%s__poolWeight__" + aE)
164164
165165
166166 func aF () = "%s__allowedLpScriptHash"
167167
168168
169169 let aG = "%s__feeCollectorAddress"
170170
171171 func aH (aI,aJ,aK,aL) = throw((((((((("order validation failed: orderValid=" + toString(aI)) + " (") + aJ) + ")") + " senderValid=") + toString(aK)) + " matcherValid=") + toString(aL)))
172172
173173
174174 func aM (aN,aO) = valueOrErrorMessage(getString(aN, aO), makeString(["mandatory ", toString(aN), ".", aO, " is not defined"], ""))
175175
176176
177177 func aP (aN,aO) = valueOrErrorMessage(getInteger(aN, aO), makeString(["mandatory ", toString(aN), ".", aO, " is not defined"], ""))
178178
179179
180180 func aQ (aR) = throw(makeString(["lp.ride:", aR], " "))
181181
182182
183183 func aS (aR) = makeString(["lp.ride:", aR], " ")
184184
185185
186186 let aT = addressFromStringValue(aM(this, T()))
187187
188188 let aU = addressFromStringValue(aM(aT, aG))
189189
190190 let aV = {
191191 let aW = invoke(aT, "getInFeeREADONLY", [toString(this)], nil)
192192 if ($isInstanceOf(aW, "Int"))
193193 then aW
194194 else throw(($getType(aW) + " couldn't be cast to Int"))
195195 }
196196
197197 let aX = {
198198 let aW = invoke(aT, "getOutFeeREADONLY", [toString(this)], nil)
199199 if ($isInstanceOf(aW, "Int"))
200200 then aW
201201 else throw(($getType(aW) + " couldn't be cast to Int"))
202202 }
203203
204204 func aY () = valueOrElse(getBoolean(aT, aC()), false)
205205
206206
207207 func aZ () = fromBase58String(aM(aT, au()))
208208
209209
210210 func ba () = {
211211 let bb = aM(this, ae())
212212 let bc = aM(this, af())
213213 let az = aP(aT, aA(bc))
214214 let ay = aP(aT, aA(bb))
215215 split(aM(aT, ax(toString(ay), toString(az))), j)
216216 }
217217
218218
219219 func bd (be) = if ((be == i))
220220 then unit
221221 else fromBase58String(be)
222222
223223
224224 func bf (be) = if ((be == unit))
225225 then i
226226 else toBase58String(value(be))
227227
228228
229229 func bg (bh) = $Tuple7(addressFromStringValue(bh[o]), parseIntValue(bh[p]), fromBase58String(bh[q]), bd(bh[r]), bd(bh[s]), parseIntValue(bh[t]), parseIntValue(bh[u]))
230230
231231
232232 let bi = bg(ba())
233233
234234 let bj = bi
235235
236236 let bk = bj._1
237237
238238 let bl = bj._2
239239
240240 let bm = bj._3
241241
242242 let bn = bj._4
243243
244244 let bo = bj._5
245245
246246 let bp = bj._6
247247
248248 let bq = bj._7
249249
250250 func br () = split(aM(aT, at()), j)
251251
252252
253253 let bs = valueOrErrorMessage(addressFromString(br()[B]), "incorrect staking address")
254254
255255 let bt = valueOrErrorMessage(addressFromString(br()[C]), "incorrect staking address")
256256
257257 func bu (bv,bw,bx,by,bz,bA,bB,bC,bD,bE) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bv), toString(bw), toString(bx), toString(by), toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE)], j)
258258
259259
260260 func bF (bG,bH,bI,by,bB,bC) = makeString(["%d%d%d%d%d%d", toString(bG), toString(bH), toString(bI), toString(by), toString(bB), toString(bC)], j)
261261
262262
263263 func bJ (ap) = {
264264 let bK = if ((ap == "WAVES"))
265265 then wavesBalance(this).available
266266 else assetBalance(this, fromBase58String(ap))
267267 let bL = ((bK + ar(ap)) - as(ap))
268268 max([0, bL])
269269 }
270270
271271
272272 func bM (bN,bO) = fraction(bN, d, bO)
273273
274274
275275 func bP (bN,bO,L) = fraction(bN, d, bO, L)
276276
277277
278278 func bQ (bR) = {
279279 let bS = invoke(bR, "getRate", nil, nil)
280280 if ((bS == bS))
281281 then {
282282 let bT = bS
283283 if ($isInstanceOf(bT, "Int"))
284284 then {
285285 let bU = bT
286286 bU
287287 }
288288 else aQ("proxy.getRate() unexpected value")
289289 }
290290 else throw("Strict value is not equal to itself.")
291291 }
292292
293293
294294 func bV (ap,bW,bX,bR) = {
295295 let bY = ar(ap)
296296 if ((bY == bY))
297297 then {
298298 let bZ = as(bX)
299299 if ((bZ == bZ))
300300 then {
301301 let ca = bd(ap)
302302 if ((bW > 0))
303303 then {
304304 let cb = invoke(bR, "deposit", nil, [AttachedPayment(ca, bW)])
305305 if ((cb == cb))
306306 then {
307307 let bT = cb
308308 if ($isInstanceOf(bT, "Int"))
309309 then {
310310 let cc = bT
311311 let cd = (bY + bW)
312312 let ce = (bZ + cc)
313313 [IntegerEntry(ao(ap), cd), IntegerEntry(aq(bX), ce)]
314314 }
315315 else nil
316316 }
317317 else throw("Strict value is not equal to itself.")
318318 }
319319 else nil
320320 }
321321 else throw("Strict value is not equal to itself.")
322322 }
323323 else throw("Strict value is not equal to itself.")
324324 }
325325
326326
327327 func cf (ap,bW,bX,bR,cg,ch) = {
328328 let bY = ar(ap)
329329 if ((bY == bY))
330330 then {
331331 let bZ = as(bX)
332332 if ((bZ == bZ))
333333 then {
334334 let ci = bQ(bR)
335335 if ((ci == ci))
336336 then {
337337 let cj = fraction(cg, bY, bZ)
338338 let ck = bd(bX)
339339 let cl = fraction(cg, bW, cj)
340340 let cm = fraction(cg, bW, ci)
341341 let cn = max([0, (cl - cm)])
342342 if ((cm > 0))
343343 then {
344344 let co = invoke(bR, "withdraw", nil, [AttachedPayment(ck, cm)])
345345 if ((co == co))
346346 then {
347347 let bT = co
348348 if ($isInstanceOf(bT, "Int"))
349349 then {
350350 let cp = bT
351351 let cd = (bY - cp)
352352 let ce = ((bZ - cm) - cn)
353353 [IntegerEntry(ao(ap), cd), IntegerEntry(aq(bX), ce), ScriptTransfer(ch, cn, bd(bX))]
354354 }
355355 else nil
356356 }
357357 else throw("Strict value is not equal to itself.")
358358 }
359359 else nil
360360 }
361361 else throw("Strict value is not equal to itself.")
362362 }
363363 else throw("Strict value is not equal to itself.")
364364 }
365365 else throw("Strict value is not equal to itself.")
366366 }
367367
368368
369369 func cq (ap) = {
370370 let bT = invoke(aT, "getPoolLeaseConfigREADONLY", [toString(this), ap], nil)
371371 if ($isInstanceOf(bT, "(Boolean, Int, Int, String, String, Int, String)"))
372372 then {
373373 let cr = bT
374374 cr
375375 }
376376 else aQ((("[" + ap) + "] getLeaseProxyConfig() error"))
377377 }
378378
379379
380380 func cs (ct,ap,bX,cu,bR,cg,ch) = {
381381 let bY = ar(ap)
382382 if ((bY == bY))
383383 then {
384384 let bZ = as(bX)
385385 if ((bZ == bZ))
386386 then {
387387 let cv = max([0, (bJ(ap) - cu)])
388388 let cw = fraction(ct, cv, 100)
389389 let cx = (bY - cw)
390390 if ((cx == 0))
391391 then nil
392392 else if ((0 > cx))
393393 then {
394394 let cy = -(cx)
395395 bV(ap, cy, bX, bR)
396396 }
397397 else {
398398 let cz = cx
399399 cf(ap, cz, bX, bR, cg, ch)
400400 }
401401 }
402402 else throw("Strict value is not equal to itself.")
403403 }
404404 else throw("Strict value is not equal to itself.")
405405 }
406406
407407
408408 func cA (ap) = {
409409 let cB = cq(ap)
410410 let cC = cB._1
411411 let cD = cB._2
412412 let cu = cB._3
413413 let cE = cB._4
414414 let cF = cB._5
415415 let cg = cB._6
416416 let cG = cB._7
417417 if (cC)
418418 then cs(cD, ap, cF, cu, addressFromStringValue(cE), cg, addressFromStringValue(cG))
419419 else nil
420420 }
421421
422422
423423 func cH (ap,cI) = {
424424 let cJ = cq(ap)
425425 let cC = cJ._1
426426 let cD = cJ._2
427427 let cu = cJ._3
428428 let cE = cJ._4
429429 let cF = cJ._5
430430 let cg = cJ._6
431431 let cG = cJ._7
432432 if (cC)
433433 then {
434434 let cK = max([0, ((bJ(ap) - cI) - cu)])
435435 if ((cK == cK))
436436 then {
437437 let cd = fraction(cD, cK, 100)
438438 if ((cd == cd))
439439 then {
440440 let cL = max([0, (ar(ap) - cd)])
441441 if ((cL == cL))
442442 then cf(ap, cL, cF, addressFromStringValue(cE), cg, addressFromStringValue(cG))
443443 else throw("Strict value is not equal to itself.")
444444 }
445445 else throw("Strict value is not equal to itself.")
446446 }
447447 else throw("Strict value is not equal to itself.")
448448 }
449449 else nil
450450 }
451451
452452
453453 func cM (cN,cO) = {
454454 let cP = cH(aM(this, ae()), cN)
455455 let cQ = cH(aM(this, af()), cO)
456456 (cP ++ cQ)
457457 }
458458
459459
460460 func cR (cS,cT,cU,cV) = {
461461 let cW = D(cU, cS)
462462 let cX = D(cV, cT)
463463 bM(cX, cW)
464464 }
465465
466466
467467 func cY (cU,cV,cZ) = {
468468 let da = ba()
469469 let db = parseIntValue(da[t])
470470 let dc = parseIntValue(da[u])
471471 let dd = cR(db, dc, cU, cV)
472472 let bO = D(cU, db)
473473 let bN = D(cV, dc)
474474 let de = D(cZ, b)
475475 let df = bM(bO, de)
476476 let dg = bM(bN, de)
477477 [dd, df, dg]
478478 }
479479
480480
481481 func dh (cU,cV,cZ) = {
482482 let di = cY(cU, cV, cZ)
483483 [H(di[0], b), H(di[1], b), H(di[2], b)]
484484 }
485485
486486
487487 func dj (dk,dl,dm,ab) = {
488488 let da = ba()
489489 let dn = da[q]
490490 let do = da[r]
491491 let dp = da[s]
492492 let cS = parseIntValue(da[t])
493493 let cT = parseIntValue(da[u])
494494 let dq = da[p]
495495 let dr = valueOrErrorMessage(assetInfo(fromBase58String(dn)), (("Asset " + dn) + " doesn't exist")).quantity
496496 if ((dn != dl))
497497 then throw("Invalid asset passed.")
498498 else {
499499 let ds = bJ(do)
500500 let dt = D(ds, cS)
501501 let du = bJ(dp)
502502 let dv = D(du, cT)
503503 let dw = bM(dv, dt)
504504 let dx = H(dw, b)
505505 let dy = D(dm, b)
506506 let dz = D(dr, b)
507507 let dA = fraction(dt, dy, dz)
508508 let dB = fraction(dv, dy, dz)
509509 let dC = K(dA, cS, FLOOR)
510510 let dD = K(dB, cT, FLOOR)
511511 let dE = if ((dk == ""))
512512 then nil
513513 else [ScriptTransfer(ab, dC, if ((do == "WAVES"))
514514 then unit
515515 else fromBase58String(do)), ScriptTransfer(ab, dD, if ((dp == "WAVES"))
516516 then unit
517517 else fromBase58String(dp)), StringEntry(ad(toString(ab), dk), bF(dC, dD, dm, dx, height, lastBlock.timestamp)), IntegerEntry(W(), dx), IntegerEntry(X(height, lastBlock.timestamp), dx)]
518518 $Tuple10(dC, dD, do, dp, ds, du, dr, dw, dq, dE)
519519 }
520520 }
521521
522522
523523 func dF (dk,dG,dH,dI,dJ,dK,ab,dL,dM) = {
524524 let da = ba()
525525 let dn = fromBase58String(da[q])
526526 let dN = da[r]
527527 let dO = da[s]
528528 let dP = da[v]
529529 let dQ = da[w]
530530 let db = parseIntValue(da[t])
531531 let dc = parseIntValue(da[u])
532532 let dq = da[p]
533533 let dr = valueOrErrorMessage(assetInfo(dn), (("Asset " + toBase58String(dn)) + " doesn't exist")).quantity
534534 let dR = toBase58String(valueOrElse(dI, fromBase58String("WAVES")))
535535 let dS = toBase58String(valueOrElse(dK, fromBase58String("WAVES")))
536536 if (if ((dN != dR))
537537 then true
538538 else (dO != dS))
539539 then throw("Invalid amt or price asset passed.")
540540 else {
541541 let ds = if (dL)
542542 then bJ(dN)
543543 else (bJ(dN) - dH)
544544 let du = if (dL)
545545 then bJ(dO)
546546 else (bJ(dO) - dJ)
547547 let dT = D(dH, db)
548548 let dU = D(dJ, dc)
549549 let dV = bM(dU, dT)
550550 let dt = D(ds, db)
551551 let dv = D(du, dc)
552552 let dW = if ((dr == 0))
553553 then {
554554 let dw = e
555555 let dX = e
556556 let de = pow((dT * dU), 0, toBigInt(5), 1, 0, DOWN)
557557 $Tuple5(H(de, b), H(dT, db), H(dU, dc), bM((dv + dU), (dt + dT)), dX)
558558 }
559559 else {
560560 let dw = bM(dv, dt)
561561 let dX = fraction(R((dw - dV)), d, dw)
562562 let dY = D(dG, b)
563563 if (if ((dw != e))
564564 then (dX > dY)
565565 else false)
566566 then throw(((("Price slippage " + toString(dX)) + " exceeded the passed limit of ") + toString(dY)))
567567 else {
568568 let dz = D(dr, b)
569569 let dZ = fraction(dT, bP(dv, dt, CEILING), d, CEILING)
570570 let ea = fraction(dU, d, bP(dv, dt, FLOOR), CEILING)
571571 let eb = if ((dZ > dU))
572572 then $Tuple2(ea, dU)
573573 else $Tuple2(dT, dZ)
574574 let ec = eb._1
575575 let ed = eb._2
576576 let de = fraction(dz, ed, dv, FLOOR)
577577 $Tuple5(K(de, b, FLOOR), K(ec, db, CEILING), K(ed, dc, CEILING), dw, dX)
578578 }
579579 }
580580 let ee = dW._1
581581 let ef = dW._2
582582 let eg = dW._3
583583 let dx = H(dW._4, b)
584584 let eh = H(dW._5, b)
585585 if ((0 >= ee))
586586 then throw("Invalid calculations. LP calculated is less than zero.")
587587 else {
588588 let ei = if (!(dM))
589589 then 0
590590 else ee
591591 let ej = (dH - ef)
592592 let ek = (dJ - eg)
593593 let el = [IntegerEntry(W(), dx), IntegerEntry(X(height, lastBlock.timestamp), dx), StringEntry(aa(ab, dk), bu(ef, eg, ei, dx, dG, eh, height, lastBlock.timestamp, ej, ek))]
594594 $Tuple13(ee, ei, dx, ds, du, dr, dn, dq, el, ej, ek, dI, dK)
595595 }
596596 }
597597 }
598598
599599
600600 func em (en,eo,dr) = {
601601 let ep = G(en, toBigInt(bp))
602602 let eq = G(eo, toBigInt(bq))
603603 let er = fraction(pow((ep * eq), 0, toBigInt(5), 1, 18, DOWN), g, dr)
604604 if ((dr == f))
605605 then f
606606 else er
607607 }
608608
609609
610610 func es (et,eu,ev) = {
611611 let ew = (toBigInt(bJ(bf(bn))) - et)
612612 let ex = (toBigInt(bJ(bf(bo))) - eu)
613613 let ey = (toBigInt(value(assetInfo(bm)).quantity) - ev)
614614 let ez = em(ew, ex, ey)
615615 ez
616616 }
617617
618618
619619 func eA (eB,eC,ev) = {
620620 let ew = (bJ(bf(bn)) + eB)
621621 let ex = (bJ(bf(bo)) + eC)
622622 let ey = (value(assetInfo(bm)).quantity + ev)
623623 let er = em(toBigInt(ew), toBigInt(ex), toBigInt(ey))
624624 let eD = [IntegerEntry(ak, height), StringEntry(aj, toString(er))]
625625 $Tuple2(eD, er)
626626 }
627627
628628
629629 func eE (eF,er) = if ((er >= eF))
630630 then true
631631 else aQ(makeString(["updated KLp lower than current KLp", toString(eF), toString(er)], " "))
632632
633633
634634 func eG (eH) = {
635635 let ew = bJ(bf(bn))
636636 let ex = bJ(bf(bo))
637637 let eI = eH.amount
638638 let eJ = fraction(eH.amount, eH.price, b, FLOOR)
639639 let eK = if ((eH.orderType == Buy))
640640 then $Tuple2(eI, -(eJ))
641641 else $Tuple2(-(eI), eJ)
642642 let eB = eK._1
643643 let eC = eK._2
644644 if (if (if (aY())
645645 then true
646646 else (bl == m))
647647 then true
648648 else (bl == n))
649649 then throw("Exchange operations disabled")
650650 else if (if ((eH.assetPair.amountAsset != bn))
651651 then true
652652 else (eH.assetPair.priceAsset != bo))
653653 then throw("Wrong order assets.")
654654 else {
655655 let eL = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aS("invalid kLp"))
656656 let eM = eA(eB, eC, 0)
657657 let eN = eM._1
658658 let eO = eM._2
659659 let eP = (eO >= eL)
660660 let eQ = makeString(["kLp=", toString(eL), " kLpNew=", toString(eO), " amountAssetBalance=", toString(ew), " priceAssetBalance=", toString(ex), " amountAssetBalanceDelta=", toString(eB), " priceAssetBalanceDelta=", toString(eC), " height=", toString(height)], "")
661661 $Tuple2(eP, eQ)
662662 }
663663 }
664664
665665
666666 func eR (eS) = if ((size(eS.payments) != 1))
667667 then throw("exactly 1 payment is expected")
668668 else {
669669 let eT = value(eS.payments[0])
670670 let dl = value(eT.assetId)
671671 let eU = eT.amount
672672 let dW = dj(toBase58String(eS.transactionId), toBase58String(dl), eU, eS.caller)
673673 let dC = dW._1
674674 let dD = dW._2
675675 let dq = parseIntValue(dW._9)
676676 let dE = dW._10
677677 if (if (aY())
678678 then true
679679 else (dq == n))
680680 then throw(("Get operation is blocked by admin. Status = " + toString(dq)))
681681 else $Tuple5(dC, dD, eU, dl, dE)
682682 }
683683
684684
685685 func eV (eS,dG,dM) = if ((size(eS.payments) != 2))
686686 then throw("exactly 2 payments are expected")
687687 else {
688688 let eW = value(eS.payments[0])
689689 let eX = value(eS.payments[1])
690690 let eY = dF(toBase58String(eS.transactionId), dG, eW.amount, eW.assetId, eX.amount, eX.assetId, toString(eS.caller), false, dM)
691691 let dq = parseIntValue(eY._8)
692692 if (if (if (aY())
693693 then true
694694 else (dq == l))
695695 then true
696696 else (dq == n))
697697 then throw(("Put operation is blocked by admin. Status = " + toString(dq)))
698698 else eY
699699 }
700700
701701
702702 func eZ (bW) = {
703703 let fa = invoke(aT, "emit", [bW], nil)
704704 if ((fa == fa))
705705 then {
706706 let fb = {
707707 let bT = fa
708708 if ($isInstanceOf(bT, "Address"))
709709 then {
710710 let fc = bT
711711 invoke(fc, "emit", [bW], nil)
712712 }
713713 else unit
714714 }
715715 if ((fb == fb))
716716 then bW
717717 else throw("Strict value is not equal to itself.")
718718 }
719719 else throw("Strict value is not equal to itself.")
720720 }
721721
722722
723723 func fd (bW,ai) = {
724724 let fe = if ((ai == 0))
725725 then 0
726726 else fraction(bW, ai, b)
727727 $Tuple2((bW - fe), fe)
728728 }
729729
730730
731731 func ff (fg,fh,ab,ac) = {
732732 let fi = (ac == unit)
733733 let fj = bJ(bf(bn))
734734 let fk = bJ(bf(bo))
735735 let fl = if ((fh == bn))
736736 then true
737737 else if ((fh == bo))
738738 then false
739739 else aQ("invalid asset")
740740 let fm = if (fi)
741741 then $Tuple2(fj, fk)
742742 else if (fl)
743743 then $Tuple2((fj - fg), fk)
744744 else $Tuple2(fj, (fk - fg))
745745 let fn = fm._1
746746 let fo = fm._2
747747 let fp = if (fl)
748748 then $Tuple2(fg, 0)
749749 else $Tuple2(0, fg)
750750 let fq = fp._1
751751 let fr = fp._2
752752 let eI = fd(fq, aV)._1
753753 let eJ = fd(fr, aV)._1
754754 let fs = fd(fg, aV)
755755 let ft = fs._1
756756 let fe = fs._2
757757 let fu = (fn + eI)
758758 let fv = (fo + eJ)
759759 let fw = bM(D(fv, bq), D(fu, bp))
760760 let fx = H(fw, b)
761761 let fy = if (fl)
762762 then fn
763763 else fo
764764 let fz = toBigInt(fy)
765765 let fA = toBigInt(valueOrErrorMessage(assetInfo(bm), (("asset " + toBase58String(bm)) + " doesn't exist")).quantity)
766766 let fB = if ((fA > f))
767767 then true
768768 else aQ("initial deposit requires all coins")
769769 if ((fB == fB))
770770 then {
771771 let fC = toBigInt(ft)
772772 let fD = max([0, toInt(((fA * (sqrtBigInt((d + ((fC * d) / fz)), 18, 18, DOWN) - d)) / d))])
773773 let el = if (fi)
774774 then nil
775775 else [IntegerEntry(W(), fx), IntegerEntry(X(height, lastBlock.timestamp), fx), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bu(fq, fr, fD, fx, 0, 0, height, lastBlock.timestamp, 0, 0))]
776776 let fE = bM(D(fo, bq), D(fn, bp))
777777 let fF = H(fE, b)
778778 let fG = {
779779 let fH = if (fl)
780780 then $Tuple2(fq, fn)
781781 else $Tuple2(fr, fo)
782782 let bW = fH._1
783783 let fI = fH._2
784784 let fJ = toInt(fraction(fA, toBigInt((bW / 2)), toBigInt(fI)))
785785 fraction((fD - fJ), b, fJ)
786786 }
787787 $Tuple5(fD, el, fe, fG, fl)
788788 }
789789 else throw("Strict value is not equal to itself.")
790790 }
791791
792792
793793 func fK (fL,ft,fh,ab,ac) = {
794794 let fi = (ac == unit)
795795 let da = ba()
796796 let db = parseIntValue(da[t])
797797 let dc = parseIntValue(da[u])
798798 let fM = [if ((fh == bm))
799799 then true
800800 else aQ("invalid lp asset")]
801801 if ((fM == fM))
802802 then {
803803 let fN = if ((fL == bn))
804804 then true
805805 else if ((fL == bo))
806806 then false
807807 else aQ("invalid asset")
808808 let fO = if (fN)
809809 then toBigInt(bJ(bf(bn)))
810810 else toBigInt(bJ(bf(bo)))
811811 let fP = if (fN)
812812 then db
813813 else dc
814814 let fQ = bJ(bf(bn))
815815 let fR = bJ(bf(bo))
816816 let fS = if (fN)
817817 then fQ
818818 else fR
819819 let fT = toBigInt(fS)
820820 let fA = toBigInt(valueOrErrorMessage(assetInfo(bm), (("asset " + toBase58String(bm)) + " doesn't exist")).quantity)
821821 let fU = toBigInt(ft)
822822 let fV = max([0, toInt(((fO * (d - pow((d - ((fU * d) / fA)), 18, h, 0, 18, DOWN))) / d))])
823823 let fW = fd(fV, aX)
824824 let fX = fW._1
825825 let fe = fW._2
826826 let fY = if (fN)
827827 then $Tuple4(fX, 0, (fQ - fV), fR)
828828 else $Tuple4(0, fX, fQ, (fR - fV))
829829 let fZ = fY._1
830830 let ga = fY._2
831831 let gb = fY._3
832832 let gc = fY._4
833833 let fw = bM(D(gc, bq), D(gb, bp))
834834 let fx = H(fw, b)
835835 let el = if (fi)
836836 then nil
837837 else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bF(fZ, ga, ft, fx, height, lastBlock.timestamp)), IntegerEntry(W(), fx), IntegerEntry(X(height, lastBlock.timestamp), fx)]
838838 let fE = bM(D(fR, bq), D(fQ, bp))
839839 let fF = H(fE, b)
840840 let fG = {
841841 let gd = (toInt(fraction(fO, fU, fA)) * 2)
842842 fraction((fX - gd), b, gd)
843843 }
844844 $Tuple5(fX, el, fe, fG, fN)
845845 }
846846 else throw("Strict value is not equal to itself.")
847847 }
848848
849849
850850 func ge () = {
851851 let bT = getString(U())
852852 if ($isInstanceOf(bT, "String"))
853853 then {
854854 let gf = bT
855855 fromBase58String(gf)
856856 }
857857 else if ($isInstanceOf(bT, "Unit"))
858858 then unit
859859 else throw("Match error")
860860 }
861861
862862
863863 func gg () = {
864864 let bT = getString(V())
865865 if ($isInstanceOf(bT, "String"))
866866 then {
867867 let gf = bT
868868 fromBase58String(gf)
869869 }
870870 else if ($isInstanceOf(bT, "Unit"))
871871 then unit
872872 else throw("Match error")
873873 }
874874
875875
876876 func gh (eS) = {
877877 let bT = ge()
878878 if ($isInstanceOf(bT, "ByteVector"))
879879 then {
880880 let gi = bT
881881 (eS.callerPublicKey == gi)
882882 }
883883 else if ($isInstanceOf(bT, "Unit"))
884884 then (eS.caller == this)
885885 else throw("Match error")
886886 }
887887
888888
889889 func gj (eS) = {
890890 let gk = throw("Permission denied")
891891 let bT = ge()
892892 if ($isInstanceOf(bT, "ByteVector"))
893893 then {
894894 let gi = bT
895895 if ((eS.callerPublicKey == gi))
896896 then true
897897 else gk
898898 }
899899 else if ($isInstanceOf(bT, "Unit"))
900900 then if ((eS.caller == this))
901901 then true
902902 else gk
903903 else throw("Match error")
904904 }
905905
906906
907907 @Callable(eS)
908908 func rebalance () = (cA(aM(this, ae())) ++ cA(aM(this, af())))
909909
910910
911911
912912 @Callable(eS)
913913 func calculateAmountOutForSwapREADONLY (gl,gm,gn) = {
914914 let go = if ((gm == false))
915915 then {
916916 let gp = aM(this, af())
917917 let gq = aM(this, ae())
918918 $Tuple2(gp, gq)
919919 }
920920 else {
921921 let gp = aM(this, ae())
922922 let gq = aM(this, af())
923923 $Tuple2(gp, gq)
924924 }
925925 let gp = go._1
926926 let gq = go._2
927927 let gr = bJ(gq)
928928 let gs = bJ(gp)
929929 let gt = fraction(gs, gl, (gr + gl))
930930 let gu = (toBigInt(gr) * toBigInt(gs))
931931 let gv = (((toBigInt(bJ(gq)) + toBigInt(gl)) + toBigInt(gn)) * (toBigInt(bJ(gp)) - toBigInt(gt)))
932932 let gw = if ((gv >= gu))
933933 then true
934934 else throw("new K is fewer error")
935935 if ((gw == gw))
936936 then $Tuple2(nil, gt)
937937 else throw("Strict value is not equal to itself.")
938938 }
939939
940940
941941
942942 @Callable(eS)
943943 func calculateAmountOutForSwapAndSendTokens (gl,gm,gx,gy,gn) = {
944944 let gz = {
945945 let aW = invoke(aT, "getSwapContractREADONLY", nil, nil)
946946 if ($isInstanceOf(aW, "String"))
947947 then aW
948948 else throw(($getType(aW) + " couldn't be cast to String"))
949949 }
950950 let fM = [if ((value(eS.payments[0]).amount >= gl))
951951 then true
952952 else aQ("Wrong amount"), if ((eS.caller == addressFromStringValue(gz)))
953953 then true
954954 else aQ("Permission denied")]
955955 if ((fM == fM))
956956 then {
957957 let eT = value(eS.payments[0])
958958 let gq = bf(eT.assetId)
959959 let gp = if ((gm == false))
960960 then aM(this, af())
961961 else aM(this, ae())
962962 let gr = (bJ(gq) - value(eS.payments[0]).amount)
963963 let gs = bJ(gp)
964964 let gt = fraction(gs, gl, (gr + gl))
965965 let gu = (toBigInt(gr) * toBigInt(gs))
966966 let gv = ((toBigInt(bJ(gq)) + toBigInt(gn)) * (toBigInt(bJ(gp)) - toBigInt(gt)))
967967 let gw = if ((gv >= gu))
968968 then true
969969 else throw("new K is fewer error")
970970 if ((gw == gw))
971971 then {
972972 let gA = if ((gt >= gx))
973973 then true
974974 else throw("Exchange result is fewer coins than expected")
975975 if ((gA == gA))
976976 then {
977977 let gB = cA(gq)
978978 if ((gB == gB))
979979 then {
980980 let gC = cH(gp, gt)
981981 if ((gC == gC))
982982 then $Tuple2(((gC ++ gB) ++ [ScriptTransfer(addressFromStringValue(gy), gt, bd(gp))]), gt)
983983 else throw("Strict value is not equal to itself.")
984984 }
985985 else throw("Strict value is not equal to itself.")
986986 }
987987 else throw("Strict value is not equal to itself.")
988988 }
989989 else throw("Strict value is not equal to itself.")
990990 }
991991 else throw("Strict value is not equal to itself.")
992992 }
993993
994994
995995
996996 @Callable(eS)
997997 func setManager (gD) = {
998998 let gE = gj(eS)
999999 if ((gE == gE))
10001000 then {
10011001 let gF = fromBase58String(gD)
10021002 if ((gF == gF))
10031003 then [StringEntry(V(), gD)]
10041004 else throw("Strict value is not equal to itself.")
10051005 }
10061006 else throw("Strict value is not equal to itself.")
10071007 }
10081008
10091009
10101010
10111011 @Callable(eS)
10121012 func confirmManager () = {
10131013 let gG = gg()
10141014 let gH = if (isDefined(gG))
10151015 then true
10161016 else throw("No pending manager")
10171017 if ((gH == gH))
10181018 then {
10191019 let gI = if ((eS.callerPublicKey == value(gG)))
10201020 then true
10211021 else throw("You are not pending manager")
10221022 if ((gI == gI))
10231023 then [StringEntry(U(), toBase58String(value(gG))), DeleteEntry(V())]
10241024 else throw("Strict value is not equal to itself.")
10251025 }
10261026 else throw("Strict value is not equal to itself.")
10271027 }
10281028
10291029
10301030
10311031 @Callable(eS)
10321032 func put (dG,gJ) = if ((0 > dG))
10331033 then throw("Invalid slippageTolerance passed")
10341034 else {
10351035 let eY = eV(eS, dG, true)
10361036 let ei = eY._2
10371037 let dn = eY._7
10381038 let dE = eY._9
10391039 let ej = eY._10
10401040 let ek = eY._11
10411041 let gK = eY._12
10421042 let gL = eY._13
10431043 let eW = toBigInt(value(eS.payments[0]).amount)
10441044 let eX = toBigInt(value(eS.payments[1]).amount)
10451045 let ez = es(eW, eX, toBigInt(0))
10461046 if ((ez == ez))
10471047 then {
10481048 let fa = invoke(aT, "emit", [ei], nil)
10491049 if ((fa == fa))
10501050 then {
10511051 let fb = {
10521052 let bT = fa
10531053 if ($isInstanceOf(bT, "Address"))
10541054 then {
10551055 let fc = bT
10561056 invoke(fc, "emit", [ei], nil)
10571057 }
10581058 else unit
10591059 }
10601060 if ((fb == fb))
10611061 then {
10621062 let gM = if ((ej > 0))
10631063 then invoke(bt, "put", nil, [AttachedPayment(gK, ej)])
10641064 else nil
10651065 if ((gM == gM))
10661066 then {
10671067 let gN = if ((ek > 0))
10681068 then invoke(bt, "put", nil, [AttachedPayment(gL, ek)])
10691069 else nil
10701070 if ((gN == gN))
10711071 then {
10721072 let gO = if (gJ)
10731073 then {
10741074 let gP = invoke(bs, "stake", nil, [AttachedPayment(dn, ei)])
10751075 if ((gP == gP))
10761076 then nil
10771077 else throw("Strict value is not equal to itself.")
10781078 }
10791079 else [ScriptTransfer(eS.caller, ei, dn)]
10801080 let gQ = eA(0, 0, 0)
10811081 if ((gQ == gQ))
10821082 then {
10831083 let er = gQ._2
10841084 let gR = gQ._1
10851085 let gS = eE(ez, er)
10861086 if ((gS == gS))
10871087 then {
10881088 let gT = invoke(this, "rebalance", nil, nil)
10891089 if ((gT == gT))
10901090 then ((dE ++ gO) ++ gR)
10911091 else throw("Strict value is not equal to itself.")
10921092 }
10931093 else throw("Strict value is not equal to itself.")
10941094 }
10951095 else throw("Strict value is not equal to itself.")
10961096 }
10971097 else throw("Strict value is not equal to itself.")
10981098 }
10991099 else throw("Strict value is not equal to itself.")
11001100 }
11011101 else throw("Strict value is not equal to itself.")
11021102 }
11031103 else throw("Strict value is not equal to itself.")
11041104 }
11051105 else throw("Strict value is not equal to itself.")
11061106 }
11071107
11081108
11091109
11101110 @Callable(eS)
11111111 func putForFree (gU) = if ((0 > gU))
11121112 then throw("Invalid value passed")
11131113 else {
11141114 let eY = eV(eS, gU, false)
11151115 let dE = eY._9
11161116 let eW = toBigInt(value(eS.payments[0]).amount)
11171117 let eX = toBigInt(value(eS.payments[1]).amount)
11181118 let ez = es(eW, eX, toBigInt(0))
11191119 if ((ez == ez))
11201120 then {
11211121 let gV = eA(0, 0, 0)
11221122 let gR = gV._1
11231123 let er = gV._2
11241124 let gS = eE(ez, er)
11251125 if ((gS == gS))
11261126 then (dE ++ gR)
11271127 else throw("Strict value is not equal to itself.")
11281128 }
11291129 else throw("Strict value is not equal to itself.")
11301130 }
11311131
11321132
11331133
11341134 @Callable(eS)
11351135 func putOneTkn (gW,gX) = {
11361136 let gY = {
11371137 let aW = invoke(aT, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
11381138 if ($isInstanceOf(aW, "Boolean"))
11391139 then aW
11401140 else throw(($getType(aW) + " couldn't be cast to Boolean"))
11411141 }
11421142 let gZ = if (if (if (aY())
11431143 then true
11441144 else (bl == l))
11451145 then true
11461146 else (bl == n))
11471147 then true
11481148 else gY
11491149 let fM = [if (if (!(gZ))
11501150 then true
11511151 else gh(eS))
11521152 then true
11531153 else aQ("put operation is blocked by admin"), if ((size(eS.payments) == 1))
11541154 then true
11551155 else aQ("exactly 1 payment are expected")]
11561156 if ((fM == fM))
11571157 then {
11581158 let ha = eS.payments[0]
11591159 let fh = ha.assetId
11601160 let fg = ha.amount
11611161 let ez = if ((fh == bn))
11621162 then es(toBigInt(fg), toBigInt(0), toBigInt(0))
11631163 else if ((fh == bo))
11641164 then es(toBigInt(0), toBigInt(fg), toBigInt(0))
11651165 else aQ("payment asset is not supported")
11661166 if ((ez == ez))
11671167 then {
11681168 let ab = eS.caller
11691169 let ac = eS.transactionId
11701170 let hb = ff(fg, fh, ab, ac)
11711171 if ((hb == hb))
11721172 then {
11731173 let fl = hb._5
11741174 let hc = hb._4
11751175 let fe = hb._3
11761176 let el = hb._2
11771177 let hd = hb._1
11781178 let he = if (if ((gW > 0))
11791179 then (gW > hd)
11801180 else false)
11811181 then aQ(makeString(["amount to receive is less than ", toString(gW)], ""))
11821182 else hd
11831183 let fa = eZ(he)
11841184 if ((fa == fa))
11851185 then {
11861186 let gO = if (gX)
11871187 then {
11881188 let hf = invoke(bs, "stake", nil, [AttachedPayment(bm, he)])
11891189 if ((hf == hf))
11901190 then nil
11911191 else throw("Strict value is not equal to itself.")
11921192 }
11931193 else [ScriptTransfer(eS.caller, he, bm)]
11941194 let hg = if ((fe > 0))
11951195 then [ScriptTransfer(aU, fe, fh)]
11961196 else nil
11971197 let hh = if ((this == aU))
11981198 then $Tuple2(0, 0)
11991199 else if (fl)
12001200 then $Tuple2(-(fe), 0)
12011201 else $Tuple2(0, -(fe))
12021202 let eB = hh._1
12031203 let eC = hh._2
12041204 let hi = eA(eB, eC, 0)
12051205 let gR = hi._1
12061206 let er = hi._2
12071207 let eL = value(getString(aj))
12081208 let gS = eE(ez, er)
12091209 if ((gS == gS))
12101210 then {
12111211 let gT = invoke(this, "rebalance", nil, nil)
12121212 if ((gT == gT))
12131213 then $Tuple2((((el ++ gO) ++ hg) ++ gR), he)
12141214 else throw("Strict value is not equal to itself.")
12151215 }
12161216 else throw("Strict value is not equal to itself.")
12171217 }
12181218 else throw("Strict value is not equal to itself.")
12191219 }
12201220 else throw("Strict value is not equal to itself.")
12211221 }
12221222 else throw("Strict value is not equal to itself.")
12231223 }
12241224 else throw("Strict value is not equal to itself.")
12251225 }
12261226
12271227
12281228
12291229 @Callable(eS)
12301230 func putOneTknREADONLY (fh,fg) = {
12311231 let hj = ff(fg, bd(fh), unit, unit)
12321232 let hd = hj._1
12331233 let el = hj._2
12341234 let fe = hj._3
12351235 let hc = hj._4
12361236 let fl = hj._5
12371237 $Tuple2(nil, $Tuple3(hd, fe, hc))
12381238 }
12391239
12401240
12411241
12421242 @Callable(eS)
12431243 func getOneTkn (hk,gW) = {
12441244 let gY = {
12451245 let aW = invoke(aT, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12461246 if ($isInstanceOf(aW, "Boolean"))
12471247 then aW
12481248 else throw(($getType(aW) + " couldn't be cast to Boolean"))
12491249 }
12501250 let hl = if (if (aY())
12511251 then true
12521252 else (bl == n))
12531253 then true
12541254 else gY
12551255 let fM = [if (if (!(hl))
12561256 then true
12571257 else gh(eS))
12581258 then true
12591259 else aQ("get operation is blocked by admin"), if ((size(eS.payments) == 1))
12601260 then true
12611261 else aQ("exactly 1 payment are expected")]
12621262 if ((fM == fM))
12631263 then {
12641264 let fL = bd(hk)
12651265 let ha = eS.payments[0]
12661266 let fh = ha.assetId
12671267 let ft = ha.amount
12681268 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
12691269 if ((ez == ez))
12701270 then {
12711271 let ab = eS.caller
12721272 let ac = eS.transactionId
12731273 let hm = fK(fL, ft, fh, ab, ac)
12741274 if ((hm == hm))
12751275 then {
12761276 let fN = hm._5
12771277 let hc = hm._4
12781278 let fe = hm._3
12791279 let el = hm._2
12801280 let hn = hm._1
12811281 let bW = if (if ((gW > 0))
12821282 then (gW > hn)
12831283 else false)
12841284 then aQ(makeString(["amount to receive is less than ", toString(gW)], ""))
12851285 else hn
12861286 let ho = invoke(aT, "burn", [ft], [AttachedPayment(fh, ft)])
12871287 if ((ho == ho))
12881288 then {
1289- let gC = cH(hk, bW)
1289+ let gC = cH(hk, (bW + max([0, fe])))
12901290 let hp = [ScriptTransfer(ab, bW, fL)]
12911291 let hg = if ((fe > 0))
12921292 then [ScriptTransfer(aU, fe, fL)]
12931293 else nil
12941294 let hq = {
12951295 let hr = if ((this == aU))
12961296 then 0
12971297 else fe
12981298 if (fN)
12991299 then $Tuple2(-((bW + hr)), 0)
13001300 else $Tuple2(0, -((bW + hr)))
13011301 }
13021302 let eB = hq._1
13031303 let eC = hq._2
13041304 let hs = eA(eB, eC, 0)
13051305 let gR = hs._1
13061306 let er = hs._2
13071307 let gS = eE(ez, er)
13081308 if ((gS == gS))
13091309 then $Tuple2(((((el ++ gC) ++ hp) ++ hg) ++ gR), bW)
13101310 else throw("Strict value is not equal to itself.")
13111311 }
13121312 else throw("Strict value is not equal to itself.")
13131313 }
13141314 else throw("Strict value is not equal to itself.")
13151315 }
13161316 else throw("Strict value is not equal to itself.")
13171317 }
13181318 else throw("Strict value is not equal to itself.")
13191319 }
13201320
13211321
13221322
13231323 @Callable(eS)
13241324 func getOneTknREADONLY (fL,ft) = {
13251325 let ht = fK(bd(fL), ft, bm, unit, unit)
13261326 let hn = ht._1
13271327 let el = ht._2
13281328 let fe = ht._3
13291329 let hc = ht._4
13301330 let fN = ht._5
13311331 $Tuple2(nil, $Tuple3(hn, fe, hc))
13321332 }
13331333
13341334
13351335
13361336 @Callable(eS)
13371337 func unstakeAndGetOneTkn (hu,hk,gW) = {
13381338 let gY = {
13391339 let aW = invoke(aT, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
13401340 if ($isInstanceOf(aW, "Boolean"))
13411341 then aW
13421342 else throw(($getType(aW) + " couldn't be cast to Boolean"))
13431343 }
13441344 let hl = if (if (aY())
13451345 then true
13461346 else (bl == n))
13471347 then true
13481348 else gY
13491349 let fM = [if (if (!(hl))
13501350 then true
13511351 else gh(eS))
13521352 then true
13531353 else aQ("get operation is blocked by admin"), if ((size(eS.payments) == 0))
13541354 then true
13551355 else aQ("no payments are expected")]
13561356 if ((fM == fM))
13571357 then {
13581358 let fL = bd(hk)
13591359 let ab = eS.caller
13601360 let ac = eS.transactionId
13611361 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
13621362 if ((ez == ez))
13631363 then {
13641364 let hv = invoke(bs, "unstake", [toBase58String(bm), hu], nil)
13651365 if ((hv == hv))
13661366 then {
13671367 let hw = fK(fL, hu, bm, ab, ac)
13681368 if ((hw == hw))
13691369 then {
13701370 let fN = hw._5
13711371 let hc = hw._4
13721372 let fe = hw._3
13731373 let el = hw._2
13741374 let hn = hw._1
13751375 let bW = if (if ((gW > 0))
13761376 then (gW > hn)
13771377 else false)
13781378 then aQ(makeString(["amount to receive is less than ", toString(gW)], ""))
13791379 else hn
13801380 let ho = invoke(aT, "burn", [hu], [AttachedPayment(bm, hu)])
13811381 if ((ho == ho))
13821382 then {
1383- let gC = cH(hk, bW)
1383+ let gC = cH(hk, (bW + max([0, fe])))
13841384 let hp = [ScriptTransfer(eS.caller, bW, fL)]
13851385 let hg = if ((fe > 0))
13861386 then [ScriptTransfer(aU, fe, fL)]
13871387 else nil
13881388 let hx = {
13891389 let hr = if ((this == aU))
13901390 then 0
13911391 else fe
13921392 if (fN)
13931393 then $Tuple2(-((bW + hr)), 0)
13941394 else $Tuple2(0, -((bW + hr)))
13951395 }
13961396 let eB = hx._1
13971397 let eC = hx._2
13981398 let hy = eA(eB, eC, 0)
13991399 let gR = hy._1
14001400 let er = hy._2
14011401 let gS = eE(ez, er)
14021402 if ((gS == gS))
14031403 then $Tuple2(((((el ++ gC) ++ hp) ++ hg) ++ gR), bW)
14041404 else throw("Strict value is not equal to itself.")
14051405 }
14061406 else throw("Strict value is not equal to itself.")
14071407 }
14081408 else throw("Strict value is not equal to itself.")
14091409 }
14101410 else throw("Strict value is not equal to itself.")
14111411 }
14121412 else throw("Strict value is not equal to itself.")
14131413 }
14141414 else throw("Strict value is not equal to itself.")
14151415 }
14161416
14171417
14181418
14191419 @Callable(eS)
14201420 func get () = {
14211421 let dW = eR(eS)
14221422 let dC = dW._1
14231423 let dD = dW._2
14241424 let eU = dW._3
14251425 let dl = dW._4
14261426 let dE = dW._5
14271427 let gC = cM(dC, dD)
14281428 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
14291429 if ((ez == ez))
14301430 then {
14311431 let hz = invoke(aT, "burn", [eU], [AttachedPayment(dl, eU)])
14321432 if ((hz == hz))
14331433 then {
14341434 let hA = eA(-(dC), -(dD), 0)
14351435 let gR = hA._1
14361436 let er = hA._2
14371437 let gS = eE(ez, er)
14381438 if ((gS == gS))
14391439 then ((gC ++ dE) ++ gR)
14401440 else throw("Strict value is not equal to itself.")
14411441 }
14421442 else throw("Strict value is not equal to itself.")
14431443 }
14441444 else throw("Strict value is not equal to itself.")
14451445 }
14461446
14471447
14481448
14491449 @Callable(eS)
14501450 func getNoLess (hB,hC) = {
14511451 let dW = eR(eS)
14521452 let dC = dW._1
14531453 let dD = dW._2
14541454 let eU = dW._3
14551455 let dl = dW._4
14561456 let dE = dW._5
14571457 if ((hB > dC))
14581458 then throw(((("noLessThenAmtAsset failed: " + toString(dC)) + " < ") + toString(hB)))
14591459 else if ((hC > dD))
14601460 then throw(((("noLessThenPriceAsset failed: " + toString(dD)) + " < ") + toString(hC)))
14611461 else {
14621462 let gC = cM(dC, dD)
14631463 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
14641464 if ((ez == ez))
14651465 then {
14661466 let hz = invoke(aT, "burn", [eU], [AttachedPayment(dl, eU)])
14671467 if ((hz == hz))
14681468 then {
14691469 let hD = eA(-(dC), -(dD), 0)
14701470 let gR = hD._1
14711471 let er = hD._2
14721472 let gS = eE(ez, er)
14731473 if ((gS == gS))
14741474 then ((gC ++ dE) ++ gR)
14751475 else throw("Strict value is not equal to itself.")
14761476 }
14771477 else throw("Strict value is not equal to itself.")
14781478 }
14791479 else throw("Strict value is not equal to itself.")
14801480 }
14811481 }
14821482
14831483
14841484
14851485 @Callable(eS)
14861486 func unstakeAndGet (bW) = {
14871487 let hE = if ((size(eS.payments) != 0))
14881488 then throw("No payments are expected")
14891489 else true
14901490 if ((hE == hE))
14911491 then {
14921492 let da = ba()
14931493 let dn = fromBase58String(da[q])
14941494 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
14951495 if ((ez == ez))
14961496 then {
14971497 let hv = invoke(bs, "unstake", [toBase58String(dn), bW], nil)
14981498 if ((hv == hv))
14991499 then {
15001500 let dW = dj(toBase58String(eS.transactionId), toBase58String(dn), bW, eS.caller)
15011501 let dC = dW._1
15021502 let dD = dW._2
15031503 let dq = parseIntValue(dW._9)
15041504 let dE = dW._10
15051505 let gC = cM(dC, dD)
15061506 let hF = if (if (aY())
15071507 then true
15081508 else (dq == n))
15091509 then throw(("Get operation is blocked by admin. Status = " + toString(dq)))
15101510 else true
15111511 if ((hF == hF))
15121512 then {
15131513 let hz = invoke(aT, "burn", [bW], [AttachedPayment(dn, bW)])
15141514 if ((hz == hz))
15151515 then {
15161516 let hG = eA(-(dC), -(dD), 0)
15171517 let gR = hG._1
15181518 let er = hG._2
15191519 let gS = eE(ez, er)
15201520 if ((gS == gS))
15211521 then ((gC ++ dE) ++ gR)
15221522 else throw("Strict value is not equal to itself.")
15231523 }
15241524 else throw("Strict value is not equal to itself.")
15251525 }
15261526 else throw("Strict value is not equal to itself.")
15271527 }
15281528 else throw("Strict value is not equal to itself.")
15291529 }
15301530 else throw("Strict value is not equal to itself.")
15311531 }
15321532 else throw("Strict value is not equal to itself.")
15331533 }
15341534
15351535
15361536
15371537 @Callable(eS)
15381538 func unstakeAndGetNoLess (hu,hH,hC) = {
15391539 let hl = if (aY())
15401540 then true
15411541 else (bl == n)
15421542 let fM = [if (!(hl))
15431543 then true
15441544 else throw("get operation is blocked by admin"), if ((size(eS.payments) == 0))
15451545 then true
15461546 else throw("no payments are expected")]
15471547 if ((fM == fM))
15481548 then {
15491549 let ez = es(toBigInt(0), toBigInt(0), toBigInt(0))
15501550 if ((ez == ez))
15511551 then {
15521552 let hv = invoke(bs, "unstake", [toBase58String(bm), hu], nil)
15531553 if ((hv == hv))
15541554 then {
15551555 let dW = dj(toBase58String(eS.transactionId), toBase58String(bm), hu, eS.caller)
15561556 let dC = dW._1
15571557 let dD = dW._2
15581558 let dE = dW._10
15591559 let gC = cM(dC, dD)
15601560 let hI = [if ((dC >= hH))
15611561 then true
15621562 else throw(makeString(["amount asset amount to receive is less than ", toString(hH)], "")), if ((dD >= hC))
15631563 then true
15641564 else throw(makeString(["price asset amount to receive is less than ", toString(hC)], ""))]
15651565 if ((hI == hI))
15661566 then {
15671567 let hz = invoke(aT, "burn", [hu], [AttachedPayment(bm, hu)])
15681568 if ((hz == hz))
15691569 then {
15701570 let hJ = eA(-(dC), -(dD), 0)
15711571 let gR = hJ._1
15721572 let er = hJ._2
15731573 let gS = eE(ez, er)
15741574 if ((gS == gS))
15751575 then ((gC ++ dE) ++ gR)
15761576 else throw("Strict value is not equal to itself.")
15771577 }
15781578 else throw("Strict value is not equal to itself.")
15791579 }
15801580 else throw("Strict value is not equal to itself.")
15811581 }
15821582 else throw("Strict value is not equal to itself.")
15831583 }
15841584 else throw("Strict value is not equal to itself.")
15851585 }
15861586 else throw("Strict value is not equal to itself.")
15871587 }
15881588
15891589
15901590
15911591 @Callable(eS)
15921592 func activate (hK,hL) = if ((toString(eS.caller) != toString(aT)))
15931593 then throw("permissions denied")
15941594 else $Tuple2([StringEntry(ae(), hK), StringEntry(af(), hL)], "success")
15951595
15961596
15971597
15981598 @Callable(eS)
15991599 func refreshKLp () = {
16001600 let hM = valueOrElse(getInteger(ak), 0)
16011601 let hN = if (((height - hM) >= an))
16021602 then unit
16031603 else aQ(makeString([toString(an), " blocks have not passed since the previous call"], ""))
16041604 if ((hN == hN))
16051605 then {
16061606 let eL = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aS("invalid kLp"))
16071607 let hO = eA(0, 0, 0)
16081608 let hP = hO._1
16091609 let er = hO._2
16101610 let eD = if ((eL != er))
16111611 then hP
16121612 else aQ("nothing to refresh")
16131613 $Tuple2(eD, toString(er))
16141614 }
16151615 else throw("Strict value is not equal to itself.")
16161616 }
16171617
16181618
16191619
16201620 @Callable(eS)
16211621 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, ba())
16221622
16231623
16241624
16251625 @Callable(eS)
16261626 func getAccBalanceWrapperREADONLY (ap) = $Tuple2(nil, bJ(ap))
16271627
16281628
16291629
16301630 @Callable(eS)
16311631 func calcPricesWrapperREADONLY (cU,cV,cZ) = {
16321632 let di = cY(cU, cV, cZ)
16331633 $Tuple2(nil, [toString(di[0]), toString(di[1]), toString(di[2])])
16341634 }
16351635
16361636
16371637
16381638 @Callable(eS)
16391639 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
16401640
16411641
16421642
16431643 @Callable(eS)
16441644 func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
16451645
16461646
16471647
16481648 @Callable(eS)
16491649 func calcPriceBigIntWrapperREADONLY (bN,bO) = $Tuple2(nil, toString(bM(parseBigIntValue(bN), parseBigIntValue(bO))))
16501650
16511651
16521652
16531653 @Callable(eS)
16541654 func estimatePutOperationWrapperREADONLY (dk,dG,dH,dI,dJ,dK,ab,dL,dM) = $Tuple2(nil, dF(dk, dG, dH, dI, dJ, dK, ab, dL, dM))
16551655
16561656
16571657
16581658 @Callable(eS)
16591659 func estimateGetOperationWrapperREADONLY (dk,dl,dm,ab) = {
16601660 let dW = dj(dk, dl, dm, addressFromStringValue(ab))
16611661 $Tuple2(nil, $Tuple10(dW._1, dW._2, dW._3, dW._4, dW._5, dW._6, dW._7, toString(dW._8), dW._9, dW._10))
16621662 }
16631663
16641664
16651665
16661666 @Callable(eS)
16671667 func statsREADONLY () = {
16681668 let da = ba()
16691669 let dn = fromBase58String(da[q])
16701670 let hQ = da[r]
16711671 let hR = da[s]
16721672 let dP = da[v]
16731673 let dQ = da[w]
16741674 let db = parseIntValue(da[t])
16751675 let dc = parseIntValue(da[u])
16761676 let hS = valueOrErrorMessage(assetInfo(dn), (("Asset " + toBase58String(dn)) + " doesn't exist")).quantity
16771677 let hT = bJ(hQ)
16781678 let hU = bJ(hR)
16791679 let hV = if ((hS == 0))
16801680 then [e, e, e]
16811681 else cY(hT, hU, hS)
16821682 let dx = 0
16831683 let hW = H(hV[1], b)
16841684 let hX = H(hV[2], b)
16851685 let hY = value(getInteger(aT, aD(toString(this))))
16861686 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hT), toString(hU), toString(hS), toString(dx), toString(hW), toString(hX), toString(hY)], j))
16871687 }
16881688
16891689
16901690
16911691 @Callable(eS)
16921692 func evaluatePutByAmountAssetREADONLY (dH) = {
16931693 let da = ba()
16941694 let dn = fromBase58String(da[q])
16951695 let dN = da[r]
16961696 let do = fromBase58String(dN)
16971697 let dO = da[s]
16981698 let dp = fromBase58String(dO)
16991699 let db = parseIntValue(da[t])
17001700 let dc = parseIntValue(da[u])
17011701 let dq = da[p]
17021702 let hS = valueOrErrorMessage(assetInfo(dn), (("Asset " + toBase58String(dn)) + " doesn't exist")).quantity
17031703 let hT = bJ(dN)
17041704 let hU = bJ(dO)
17051705 let cW = D(hT, db)
17061706 let cX = D(hU, dc)
17071707 let dw = if ((hS == 0))
17081708 then e
17091709 else bM(cX, cW)
17101710 let dT = D(dH, db)
17111711 let dU = fraction(dT, dw, d)
17121712 let dJ = H(dU, dc)
17131713 let eY = dF("", 500000, dH, do, dJ, dp, "", true, false)
17141714 let ee = eY._1
17151715 let hZ = eY._3
17161716 let ds = eY._4
17171717 let du = eY._5
17181718 let dr = eY._6
17191719 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(ee), toString(H(dw, b)), toString(ds), toString(du), toString(dr), dq, toString(dH), toString(dJ)], j))
17201720 }
17211721
17221722
17231723
17241724 @Callable(eS)
17251725 func evaluatePutByPriceAssetREADONLY (dJ) = {
17261726 let da = ba()
17271727 let dn = fromBase58String(da[q])
17281728 let dN = da[r]
17291729 let do = fromBase58String(dN)
17301730 let dO = da[s]
17311731 let dp = fromBase58String(dO)
17321732 let db = parseIntValue(da[t])
17331733 let dc = parseIntValue(da[u])
17341734 let dq = da[p]
17351735 let hS = valueOrErrorMessage(assetInfo(dn), (("Asset " + toBase58String(dn)) + " doesn't exist")).quantity
17361736 let ia = bJ(dN)
17371737 let ib = bJ(dO)
17381738 let ic = D(ia, db)
17391739 let id = D(ib, dc)
17401740 let dw = if ((hS == 0))
17411741 then e
17421742 else bM(id, ic)
17431743 let dU = D(dJ, dc)
17441744 let dT = fraction(dU, d, dw)
17451745 let dH = H(dT, db)
17461746 let eY = dF("", 500000, dH, do, dJ, dp, "", true, false)
17471747 let ee = eY._1
17481748 let hZ = eY._3
17491749 let ds = eY._4
17501750 let du = eY._5
17511751 let dr = eY._6
17521752 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(ee), toString(H(dw, b)), toString(ds), toString(du), toString(dr), dq, toString(dH), toString(dJ)], j))
17531753 }
17541754
17551755
17561756
17571757 @Callable(eS)
17581758 func evaluateGetREADONLY (ie,if) = {
17591759 let dW = dj("", ie, if, this)
17601760 let dC = dW._1
17611761 let dD = dW._2
17621762 let ds = dW._5
17631763 let du = dW._6
17641764 let dr = dW._7
17651765 let dx = dW._8
17661766 let dq = parseIntValue(dW._9)
17671767 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dC), toString(dD), toString(ds), toString(du), toString(dr), toString(dx), toString(dq)], j))
17681768 }
17691769
17701770
17711771 @Verifier(ig)
17721772 func ih () = {
17731773 let ii = {
17741774 let bT = ge()
17751775 if ($isInstanceOf(bT, "ByteVector"))
17761776 then {
17771777 let gi = bT
17781778 gi
17791779 }
17801780 else if ($isInstanceOf(bT, "Unit"))
17811781 then ig.senderPublicKey
17821782 else throw("Match error")
17831783 }
17841784 let bT = ig
17851785 if ($isInstanceOf(bT, "Order"))
17861786 then {
17871787 let eH = bT
17881788 let ij = aZ()
17891789 let ik = eG(eH)
17901790 let aI = ik._1
17911791 let aJ = ik._2
17921792 let aK = sigVerify(eH.bodyBytes, eH.proofs[0], eH.senderPublicKey)
17931793 let aL = sigVerify(eH.bodyBytes, eH.proofs[1], ij)
17941794 if (if (if (aI)
17951795 then aK
17961796 else false)
17971797 then aL
17981798 else false)
17991799 then true
18001800 else aH(aI, aJ, aK, aL)
18011801 }
18021802 else if ($isInstanceOf(bT, "SetScriptTransaction"))
18031803 then {
18041804 let gf = bT
18051805 if (sigVerify(ig.bodyBytes, ig.proofs[0], ii))
18061806 then true
18071807 else {
18081808 let il = blake2b256(value(gf.script))
18091809 let im = fromBase64String(value(getString(aT, aF())))
18101810 let in = scriptHash(this)
18111811 if ((im == il))
18121812 then (in != il)
18131813 else false
18141814 }
18151815 }
18161816 else sigVerify(ig.bodyBytes, ig.proofs[0], ii)
18171817 }
18181818

github/deemru/w8io/169f3d6 
148.97 ms