tx · 54i5vd4HHQaj1Ed7bGK7MLyNrrSjbYAXvby3Lp8JRmYQ

3N8iNNRC4UfDK4aJctSvHajiZ81fzSumCeP:  -0.03800000 Waves

2023.02.13 12:08 [2447636] smart account 3N8iNNRC4UfDK4aJctSvHajiZ81fzSumCeP > SELF 0.00000000 Waves

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

github/deemru/w8io/873ac7e 
137.10 ms