tx · 4fz8GvTxnZittzMQAz7U8jGf8orrD21jtRHVhzd6CbxP

3MsdLkCCcsf1niGwjyQCMi8aC4CkNbm2Wy9:  -0.02900000 Waves

2022.11.10 14:44 [2311006] smart account 3MsdLkCCcsf1niGwjyQCMi8aC4CkNbm2Wy9 > SELF 0.00000000 Waves

{ "type": 13, "id": "4fz8GvTxnZittzMQAz7U8jGf8orrD21jtRHVhzd6CbxP", "fee": 2900000, "feeAssetId": null, "timestamp": 1668080676864, "version": 1, "sender": "3MsdLkCCcsf1niGwjyQCMi8aC4CkNbm2Wy9", "senderPublicKey": "B4L9D9LnFwCPW8fFVc65SHyFNYjb1KJv6MUQXPGMPSTy", "proofs": [ "3CokYgYNL4ynBnxM64mTqBLe5WXhNBQpYjMoRYteYzKi8rb6awrA1hEoFKPcLoyf86LjUKBngm8A51rCuBK3GuxJ" ], "script": "base64:BgKxJwgCEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBQoDAQEBEgQKAggIEgASAwoBCBIFCgMBAQESBAoCAQESBAoCCAESBAoCCAgSCwoJCAEBAgECCAQEEgYKBAgIAQgSABIDCgEBEgMKAQESBAoCCAEiCmxQZGVjaW1hbHMiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgt3YXZlc1N0cmluZyIDU0VQIgpQb29sQWN0aXZlIg9Qb29sUHV0RGlzYWJsZWQiE1Bvb2xNYXRjaGVyRGlzYWJsZWQiDFBvb2xTaHV0ZG93biIOaWR4UG9vbEFkZHJlc3MiDWlkeFBvb2xTdGF0dXMiEGlkeFBvb2xMUEFzc2V0SWQiDWlkeEFtdEFzc2V0SWQiD2lkeFByaWNlQXNzZXRJZCIOaWR4QW10QXNzZXREY20iEGlkeFByaWNlQXNzZXREY20iDmlkeElBbXRBc3NldElkIhBpZHhJUHJpY2VBc3NldElkIg1pZHhMUEFzc2V0RGNtIhJpZHhQb29sQW10QXNzZXRBbXQiFGlkeFBvb2xQcmljZUFzc2V0QW10IhFpZHhQb29sTFBBc3NldEFtdCIZaWR4RmFjdG9yeVN0YWtpbmdDb250cmFjdCIaaWR4RmFjdG9yeVNsaXBwYWdlQ29udHJhY3QiBXRvWDE4IgdvcmlnVmFsIg1vcmlnU2NhbGVNdWx0Igdmcm9tWDE4IgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIHdG9TY2FsZSIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyIJYWJzQmlnSW50IgJmYyIDbXBrIgRwbXBrIgJwbCICcGgiAWgiCXRpbWVzdGFtcCIDcGF1Igt1c2VyQWRkcmVzcyIEdHhJZCIDZ2F1IgJhYSICcGEiBmtleUZlZSIKZmVlRGVmYXVsdCIDZmVlIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiD3Rocm93T3JkZXJFcnJvciIKb3JkZXJWYWxpZCILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIPZmFjdG9yeUNvbnRyYWN0IhNmZWVDb2xsZWN0b3JBZGRyZXNzIhBpc0dsb2JhbFNodXRkb3duIhNnZXRNYXRjaGVyUHViT3JGYWlsIg1nZXRQb29sQ29uZmlnIghhbXRBc3NldCIKcHJpY2VBc3NldCIMcGFyc2VBc3NldElkIgVpbnB1dCIPYXNzZXRJZFRvU3RyaW5nIg9wYXJzZVBvb2xDb25maWciCnBvb2xDb25maWciEHBvb2xDb25maWdQYXJzZWQiCyR0MDc1NDQ3NzEwIg5jZmdQb29sQWRkcmVzcyINY2ZnUG9vbFN0YXR1cyIMY2ZnTHBBc3NldElkIhBjZmdBbW91bnRBc3NldElkIg9jZmdQcmljZUFzc2V0SWQiFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMiFWNmZ1ByaWNlQXNzZXREZWNpbWFscyIQZ2V0RmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0IhBzbGlwcGFnZUNvbnRyYWN0IhFkYXRhUHV0QWN0aW9uSW5mbyINaW5BbXRBc3NldEFtdCIPaW5QcmljZUFzc2V0QW10IghvdXRMcEFtdCIFcHJpY2UiHXNsaXBwYWdlVG9sZXJhbmNlUGFzc2VkQnlVc2VyIhVzbGlwcGFnZVRvbGVyYW5jZVJlYWwiCHR4SGVpZ2h0Igt0eFRpbWVzdGFtcCISc2xpcGFnZUFtdEFzc2V0QW10IhRzbGlwYWdlUHJpY2VBc3NldEFtdCIRZGF0YUdldEFjdGlvbkluZm8iDm91dEFtdEFzc2V0QW10IhBvdXRQcmljZUFzc2V0QW10IgdpbkxwQW10Ig1nZXRBY2NCYWxhbmNlIgdhc3NldElkIg9jYWxjUHJpY2VCaWdJbnQiCHByQW10WDE4IghhbUFtdFgxOCIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSINb3JkZXJBbXRBc3NldCIQb3JkZXJBbXRBc3NldFN0ciIPb3JkZXJQcmljZUFzc2V0IhJvcmRlclByaWNlQXNzZXRTdHIiCm9yZGVyUHJpY2UiCHByaWNlRGNtIhBjYXN0ZWRPcmRlclByaWNlIhFpc09yZGVyUHJpY2VWYWxpZCIJY29tbW9uR2V0IgFpIgNwbXQiBnBtdEFtdCIJY29tbW9uUHV0IgphbUFzc2V0UG10IgpwckFzc2V0UG10IgZlc3RQdXQiBGVtaXQiBmFtb3VudCIHZW1pdEludiINZW1pdEludkxlZ2FjeSIHJG1hdGNoMCIVbGVnYWN5RmFjdG9yeUNvbnRyYWN0Igd0YWtlRmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMjI1NzEyMjg2NCIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAyMjg2ODIzMDE3IhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIzMTM5MjMxOTgiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyILcHJpY2VOZXdYMTgiCHByaWNlTmV3Ig5wYXltZW50QmFsYW5jZSIUcGF5bWVudEJhbGFuY2VCaWdJbnQiDHN1cHBseUJpZ0ludCILY2hlY2hTdXBwbHkiDWRlcG9zaXRCaWdJbnQiC2lzc3VlQW1vdW50IgtwcmljZU9sZFgxOCIIcHJpY2VPbGQiBGxvc3MiDSR0MDI0Njc1MjQ4NDIiB2JhbGFuY2UiD2lzc3VlQW1vdW50Qm90aCIPY2FsY0dldE9uZVRva2VuIgpvdXRBc3NldElkIgZjaGVja3MiEG91dEluQW1vdW50QXNzZXQiDWJhbGFuY2VCaWdJbnQiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAyNjQyMjI2NDcyIgt0b3RhbEFtb3VudCINJHQwMjY0NzYyNjcwMiILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCILbXVzdE1hbmFnZXIiAnBkIgJwayIXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkiC2NoZWNrQ2FsbGVyIhVjaGVja01hbmFnZXJQdWJsaWNLZXkiAnBtIgVoYXNQTSIHY2hlY2tQTSIPc2hvdWxkQXV0b1N0YWtlIgRhbUlkIgRwcklkIgxzbGlwcGFnZUFJbnYiDHNsaXBwYWdlUEludiIKbHBUcmFuc2ZlciILc2xwU3Rha2VJbnYiC21heFNsaXBwYWdlIgxtaW5PdXRBbW91bnQiCWF1dG9TdGFrZSIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiAUAiDWlzUHV0RGlzYWJsZWQiB3BheW1lbnQiDSR0MDMxNDEyMzE1MzkiE2VtaXRBbW91bnRFc3RpbWF0ZWQiBWJvbnVzIgplbWl0QW1vdW50IghzdGFrZUludiIHc2VuZEZlZSINJHQwMzIyNjgzMjQwMyINb3V0QXNzZXRJZFN0ciINaXNHZXREaXNhYmxlZCINJHQwMzMxNzUzMzMwNyIPYW1vdW50RXN0aW1hdGVkIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIg0kdDAzMzk0MjM0MDgwIg11bnN0YWtlQW1vdW50Igp1bnN0YWtlSW52Ig0kdDAzNDg3MjM1MDAyIglvdXRBbXRBbXQiFGJ1cm5MUEFzc2V0T25GYWN0b3J5IhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0Ig1jaGVja1BheW1lbnRzIg9jaGVja1Bvb2xTdGF0dXMiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIMY2hlY2tBbW91bnRzIgthbXRBc3NldFN0ciINcHJpY2VBc3NldFN0ciINcG9vbExQQmFsYW5jZSIKcHJpY2VzTGlzdCIPbHBBbXRBc3NldFNoYXJlIhFscFByaWNlQXNzZXRTaGFyZSIKcG9vbFdlaWdodCIMY3VyUHJpY2VDYWxjIgxhbUJhbGFuY2VSYXciDHByQmFsYW5jZVJhdyIPYW1CYWxhbmNlUmF3WDE4Ig9wckJhbGFuY2VSYXdYMTgiEHBheW1lbnRMcEFzc2V0SWQiDHBheW1lbnRMcEFtdCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2hiAAFhAAgAAWIAgMLXLwABYwkAtgIBAIDC1y8AAWQJALYCAQCAgJC7utat8A0AAWUJALYCAQAAAAFmCQC2AgEAAAABZwkAtgIBAAEAAWgJALYCAQACAAFpAgVXQVZFUwABagICX18AAWsAAQABbAACAAFtAAMAAW4ABAABbwABAAFwAAIAAXEAAwABcgAEAAFzAAUAAXQABgABdQAHAAF2AAgAAXcACQABeAAKAAF5AAEAAXoAAgABQQADAAFCAAEAAUMABwEBRAIBRQFGCQC8AgMJALYCAQUBRQUBZAkAtgIBBQFGAQFHAgFIAUkJAKADAQkAvAIDBQFICQC2AgEFAUkFAWQBAUoDAUsBTAFNCQBrAwUBSwUBTAUBTQEBTgEBSAMJAGYCAAAFAUgJAQEtAQUBSAUBSAEBTwEBSAMJAL8CAgUBZQUBSAkAvgIBBQFIBQFIAQFQAAITJXNfX2ZhY3RvcnlDb250cmFjdAEBUQACFCVzX19tYW5hZ2VyUHVibGljS2V5AQFSAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQFTAAIRJXMlc19fcHJpY2VfX2xhc3QBAVQCAVUBVgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAVUJAMwIAgkApAMBBQFWBQNuaWwFAWoBAVcCAVgBWQkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAVgCAl9fBQFZAQFaAgFYAVkJAKwCAgkArAICCQCsAgICCyVzJXMlc19fR19fBQFYAgJfXwUBWQECYWEAAg8lc19fYW1vdW50QXNzZXQBAmFiAAIOJXNfX3ByaWNlQXNzZXQAAmFjAgclc19fZmVlAAJhZAkAawMACgUBYgCQTgACYWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWMFAmFkAQJhZgACESVzX19mYWN0b3J5Q29uZmlnAQJhZwACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYWgBAmFpCQCsAgIJAKwCAgIIJXMlcyVzX18FAmFpAiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAECYWoCAmFrAmFsCQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJhawICX18FAmFsAghfX2NvbmZpZwECYW0BAmFuCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFuAQJhbwACDCVzX19zaHV0ZG93bgECYXABAmFxCQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwUCYXEBAmFyAAIXJXNfX2FsbG93ZWRMcFNjcmlwdEhhc2gAAmFzAhclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYXQDAmF1AmF2AmF3CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhdQINIHNlbmRlclZhbGlkPQkApQMBBQJhdgIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYXcBAmF4AgJheQJhegkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmF5BQJhegkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheQkAzAgCAgEuCQDMCAIFAmF6CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFBAgJheQJhegkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmF5BQJhegkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheQkAzAgCAgEuCQDMCAIFAmF6CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFCAQJhQwkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhQwUDbmlsAgEgAAJhRAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF4AgUEdGhpcwkBAVAAAAJhRQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF4AgUCYUQFAmFzAQJhRgAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYUQJAQJhbwAHAQJhRwAJANkEAQkBAmF4AgUCYUQJAQJhZwABAmFIAAQCYUkJAQJheAIFBHRoaXMJAQJhYQAEAmFKCQECYXgCBQR0aGlzCQECYWIABAJhbAkBAmFBAgUCYUQJAQJhbQEFAmFKBAJhawkBAmFBAgUCYUQJAQJhbQEFAmFJCQC1CQIJAQJheAIFAmFECQECYWoCCQCkAwEFAmFrCQCkAwEFAmFsBQFqAQJhSwECYUwDCQAAAgUCYUwFAWkFBHVuaXQJANkEAQUCYUwBAmFNAQJhTAMJAAACBQJhTAUEdW5pdAUBaQkA2AQBCQEFdmFsdWUBBQJhTAECYU4BAmFPCQCZCgcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYU8FAW8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTwUBcAkA2QQBCQCRAwIFAmFPBQFxCQECYUsBCQCRAwIFAmFPBQFyCQECYUsBCQCRAwIFAmFPBQFzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYU8FAXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTwUBdQACYVAJAQJhTgEJAQJhSAAAAmFRBQJhUAACYVIIBQJhUQJfMQACYVMIBQJhUQJfMgACYVQIBQJhUQJfMwACYVUIBQJhUQJfNAACYVYIBQJhUQJfNQACYVcIBQJhUQJfNgACYVgIBQJhUQJfNwECYVkACQC1CQIJAQJheAIFAmFECQECYWYABQFqAAJhWgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmFZAAUBQgIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwACYmEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJhWQAFAUMCGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MBAmJiCgJiYwJiZAJiZQJiZgJiZwJiaAJiaQJiagJiawJibAkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYmMJAMwIAgkApAMBBQJiZAkAzAgCCQCkAwEFAmJlCQDMCAIJAKQDAQUCYmYJAMwIAgkApAMBBQJiZwkAzAgCCQCkAwEFAmJoCQDMCAIJAKQDAQUCYmkJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJrCQDMCAIJAKQDAQUCYmwFA25pbAUBagECYm0GAmJuAmJvAmJwAmJmAmJpAmJqCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYm4JAMwIAgkApAMBBQJibwkAzAgCCQCkAwEFAmJwCQDMCAIJAKQDAQUCYmYJAMwIAgkApAMBBQJiaQkAzAgCCQCkAwEFAmJqBQNuaWwFAWoBAmJxAQJicgMJAAACBQJicgIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUCYnIBAmJzAgJidAJidQkAvAIDBQJidAUBZAUCYnUBAmJ2BAJidwJieAJieQJiegQCYkEJAQFEAgUCYnkFAmJ3BAJiQgkBAUQCBQJiegUCYngJAQJicwIFAmJCBQJiQQECYkMDAmJ5AmJ6AmJEBAJiRQkBAmFIAAQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCYkgJAQJidgQFAmJGBQJiRwUCYnkFAmJ6BAJidQkBAUQCBQJieQUCYkYEAmJ0CQEBRAIFAmJ6BQJiRwQCYkkJAQFEAgUCYkQFAWIEAmJKCQECYnMCBQJidQUCYkkEAmJLCQECYnMCBQJidAUCYkkJAMwIAgUCYkgJAMwIAgUCYkoJAMwIAgUCYksFA25pbAECYkwDAmJ5AmJ6AmJEBAJiTQkBAmJDAwUCYnkFAmJ6BQJiRAkAzAgCCQEBRwIJAJEDAgUCYk0AAAUBYgkAzAgCCQEBRwIJAJEDAgUCYk0AAQUBYgkAzAgCCQEBRwIJAJEDAgUCYk0AAgUBYgUDbmlsAQJiTgQCYk8CYlACYlEBWAQCYkUJAQJhSAAEAmJSCQCRAwIFAmJFBQFxBAJiUwkAkQMCBQJiRQUBcgQCYlQJAJEDAgUCYkUFAXMEAmJ3CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkUFAXQEAmJ4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkUFAXUEAmJVCQCRAwIFAmJFBQFwBAJiVggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmJSCQCsAgIJAKwCAgIGQXNzZXQgBQJiUgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJiUgUCYlAJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmJXCQECYnEBBQJiUwQCYlgJAQFEAgUCYlcFAmJ3BAJiWQkBAmJxAQUCYlQEAmJaCQEBRAIFAmJZBQJieAQCY2EJAQJicwIFAmJaBQJiWAQCY2IJAQFHAgUCY2EFAWIEAmNjCQEBRAIFAmJRBQFiBAJjZAkBAUQCBQJiVgUBYgQCY2UJALwCAwUCYlgFAmNjBQJjZAQCY2YJALwCAwUCYloFAmNjBQJjZAQCY2cJAQFHAgUCY2UFAmJ3BAJjaAkBAUcCBQJjZgUCYngEAmNpAwkAAAIFAmJPAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFYBQJjZwMJAAACBQJiUwIFV0FWRVMFBHVuaXQJANkEAQUCYlMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBWAUCY2gDCQAAAgUCYlQCBVdBVkVTBQR1bml0CQDZBAEFAmJUCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAgkApQgBBQFYBQJiTwkBAmJtBgUCY2cFAmNoBQJiUQUCY2IFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAAUCY2IJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFUAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY2IFA25pbAkAnAoKBQJjZwUCY2gFAmJTBQJiVAUCYlcFAmJZBQJiVgUCY2EFAmJVBQJjaQECY2oJAmJPAmNrAmNsAmNtAmNuAmNvAVgCY3ACY3EEAmJFCQECYUgABAJiUgkA2QQBCQCRAwIFAmJFBQFxBAJjcgkAkQMCBQJiRQUBcgQCY3MJAJEDAgUCYkUFAXMEAmN0CQCRAwIFAmJFBQF2BAJjdQkAkQMCBQJiRQUBdwQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCYlUJAJEDAgUCYkUFAXAEAmJWCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJSCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJSAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY3YJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY20JANkEAQIFV0FWRVMEAmN3CQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmNvCQDZBAECBVdBVkVTAwMJAQIhPQIFAmNyBQJjdgYJAQIhPQIFAmNzBQJjdwkAAgECIkludmFsaWQgYW10IG9yIHByaWNlIGFzc2V0IHBhc3NlZC4EAmJXAwUCY3AJAQJicQEFAmNyCQBlAgkBAmJxAQUCY3IFAmNsBAJiWQMFAmNwCQECYnEBBQJjcwkAZQIJAQJicQEFAmNzBQJjbgQCY3gJAQFEAgUCY2wFAmJGBAJjeQkBAUQCBQJjbgUCYkcEAmN6CQECYnMCBQJjeQUCY3gEAmJYCQEBRAIFAmJXBQJiRgQCYloJAQFEAgUCYlkFAmJHBAJjQQMJAAACBQJiVgAABAJjYQUBZQQCY0IFAWUEAmJJCQB2BgkAuQICBQJjeAUCY3kAAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFHAgUCYkkFAWIJAQFHAgUCY3gFAmJGCQEBRwIFAmN5BQJiRwkBAmJzAgkAtwICBQJiWgUCY3kJALcCAgUCYlgFAmN4BQJjQgQCY2EJAQJicwIFAmJaBQJiWAQCY0IJALwCAwkBAU8BCQC4AgIFAmNhBQJjegUBZAUCY2EEAmNDCQEBRAIFAmNrBQFiAwMJAQIhPQIFAmNhBQFlCQC/AgIFAmNCBQJjQwcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCY0ICHiBleGNlZWRlZCB0aGUgcGFzc2VkIGxpbWl0IG9mIAkApgMBBQJjQwQCY2QJAQFEAgUCYlYFAWIEAmNECQC8AgMFAmN4BQJjYQUBZAQCY0UJALwCAwUCY3kFAWQFAmNhBAJjRgMJAL8CAgUCY0QFAmN5CQCUCgIFAmNFBQJjeQkAlAoCBQJjeAUCY0QEAmNHCAUCY0YCXzEEAmNICAUCY0YCXzIEAmJJCQC8AgMFAmNkBQJjSAUCYloJAJcKBQkBAUcCBQJiSQUBYgkBAUcCBQJjRwUCYkYJAQFHAgUCY0gFAmJHBQJjYQUCY0IEAmNJCAUCY0ECXzEEAmNKCAUCY0ECXzIEAmNLCAUCY0ECXzMEAmNiCQEBRwIIBQJjQQJfNAUBYgQCY0wJAQFHAggFAmNBAl81BQFiAwkAZwIAAAUCY0kJAAIBAjZJbnZhbGlkIGNhbGN1bGF0aW9ucy4gTFAgY2FsY3VsYXRlZCBpcyBsZXNzIHRoYW4gemVyby4EAmNNAwkBASEBBQJjcQAABQJjSQQCY04JAGUCBQJjbAUCY0oEAmNPCQBlAgUCY24FAmNLBAJjUAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMABQJjYgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVQCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjYgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVwIFAVgFAmJPCQECYmIKBQJjSgUCY0sFAmNNBQJjYgUCY2sFAmNMBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjTgUCY08FA25pbAkAnwoNBQJjSQUCY00FAmNiBQJiVwUCYlkFAmJWBQJiUgUCYlUFAmNQBQJjTgUCY08FAmNtBQJjbwECY1EBAmNSBAJiRQkBAmFIAAQCY1MJAJEDAgUCYkUFAXIEAmNUCQCRAwIFAmJFBQFzBAJiVQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQFwBAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF0BAJiRwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF1BAJjVQkBAmJxAQUCY1MEAmNWCQECYnEBBQJjVAQCY2EDCQAAAggFAmNSCW9yZGVyVHlwZQUDQnV5CQECYnYEBQJiRgUCYkcJAGQCBQJjVQgFAmNSBmFtb3VudAUCY1YJAQJidgQFAmJGBQJiRwkAZQIFAmNVCAUCY1IGYW1vdW50BQJjVgQCY2IJAQFHAgUCY2EFAWIDAwMJAQJhRgAGCQAAAgUCYlUFAW0GCQAAAgUCYlUFAW4JAAIBAhxFeGNoYW5nZSBvcGVyYXRpb25zIGRpc2FibGVkBAJjVwgIBQJjUglhc3NldFBhaXILYW1vdW50QXNzZXQEAmNYAwkAAAIFAmNXBQR1bml0AgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJjVwQCY1kICAUCY1IJYXNzZXRQYWlyCnByaWNlQXNzZXQEAmNaAwkAAAIFAmNZBQR1bml0AgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJjWQMDCQECIT0CBQJjWAUCY1MGCQECIT0CBQJjWgUCY1QJAAIBAhNXcm9uZyBvcmRlciBhc3NldHMuBAJkYQgFAmNSBXByaWNlBAJkYgkAawMFAWIFAmJHBQJiRgQCZGMJAQFKAwUCZGEFAWIFAmRiBAJkZAMJAAACCAUCY1IJb3JkZXJUeXBlBQNCdXkJAGcCBQJjYgUCZGMJAGcCBQJkYwUCY2IGAQJkZQECZGYDCQECIT0CCQCQAwEIBQJkZghwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAmRnCQEFdmFsdWUBCQCRAwIIBQJkZghwYXltZW50cwAABAJiUAkBBXZhbHVlAQgFAmRnB2Fzc2V0SWQEAmRoCAUCZGcGYW1vdW50BAJjQQkBAmJOBAkA2AQBCAUCZGYNdHJhbnNhY3Rpb25JZAkA2AQBBQJiUAUCZGgIBQJkZgZjYWxsZXIEAmNnCAUCY0ECXzEEAmNoCAUCY0ECXzIEAmJVCQENcGFyc2VJbnRWYWx1ZQEIBQJjQQJfOQQCY2kIBQJjQQNfMTADAwkBAmFGAAYJAAACBQJiVQUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCYlUJAJcKBQUCY2cFAmNoBQJkaAUCYlAFAmNpAQJkaQMCZGYCY2sCY3EDCQECIT0CCQCQAwEIBQJkZghwYXltZW50cwACCQACAQIfZXhhY3RseSAyIHBheW1lbnRzIGFyZSBleHBlY3RlZAQCZGoJAQV2YWx1ZQEJAJEDAggFAmRmCHBheW1lbnRzAAAEAmRrCQEFdmFsdWUBCQCRAwIIBQJkZghwYXltZW50cwABBAJkbAkBAmNqCQkA2AQBCAUCZGYNdHJhbnNhY3Rpb25JZAUCY2sIBQJkagZhbW91bnQIBQJkagdhc3NldElkCAUCZGsGYW1vdW50CAUCZGsHYXNzZXRJZAkApQgBCAUCZGYGY2FsbGVyBwUCY3EEAmJVCQENcGFyc2VJbnRWYWx1ZQEIBQJkbAJfOAMDAwkBAmFGAAYJAAACBQJiVQUBbAYJAAACBQJiVQUBbgkAAgEJAKwCAgIsUHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCYlUFAmRsAQJkbQECZG4EAmRvCQD8BwQFAmFEAgRlbWl0CQDMCAIFAmRuBQNuaWwFA25pbAMJAAACBQJkbwUCZG8EAmRwBAJkcQUCZG8DCQABAgUCZHECB0FkZHJlc3MEAmRyBQJkcQkA/AcEBQJkcgIEZW1pdAkAzAgCBQJkbgUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZHAFAmRwBQJkbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZHMBAmRuBAJkdAkAawMFAmRuBQJhZQUBYgkAlAoCCQBlAgUCZG4FAmR0BQJkdAECZHUEAmR2AmR3AVgBWQQCZHgJAAACBQFZBQR1bml0BAJkeQkBAmJxAQkBAmFNAQUCYVUEAmR6CQECYnEBCQECYU0BBQJhVgQCZEEDCQAAAgUCZHcFAmFVBgMJAAACBQJkdwUCYVYHCQECYUIBAg1pbnZhbGlkIGFzc2V0BAJkQgMFAmR4CQCUCgIFAmR5BQJkegMFAmRBCQCUCgIJAGUCBQJkeQUCZHYFAmR6CQCUCgIFAmR5CQBlAgUCZHoFAmR2BAJkQwgFAmRCAl8xBAJkRAgFAmRCAl8yBAJkRQMFAmRBCQCUCgIFAmR2AAAJAJQKAgAABQJkdgQCZEYIBQJkRQJfMQQCZEcIBQJkRQJfMgQCZEgICQECZHMBBQJkRgJfMQQCZEkICQECZHMBBQJkRwJfMQQCZEoJAQJkcwEFAmR2BAJkSwgFAmRKAl8xBAJkdAgFAmRKAl8yBAJkTAkAZAIFAmRDBQJkSAQCZE0JAGQCBQJkRAUCZEkEAmROCQECYnMCCQEBRAIFAmRNBQJhWAkBAUQCBQJkTAUCYVcEAmRPCQEBRwIFAmROBQFiBAJkUAMFAmRBBQJkQwUCZEQEAmRRCQC2AgEFAmRQBAJkUgkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmFUCQCsAgIJAKwCAgIGYXNzZXQgCQDYBAEFAmFUAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZFMDCQC/AgIFAmRSBQFmBgkBAmFCAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQJkUwUCZFMEAmRUCQC2AgEFAmRLBAJkVQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJkUgkAuAICCQEKc3FydEJpZ0ludAQJALcCAgUBZAkAugICCQC5AgIFAmRUBQFkBQJkUQASABIFBERPV04FAWQFAWQFA25pbAQCY1ADBQJkeAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBUwAFAmRPCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmRPCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFXAgkApQgBCQEFdmFsdWUBBQFYCQDYBAEJAQV2YWx1ZQEFAVkJAQJiYgoFAmRGBQJkRwUCZFUFAmRPAAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZFYJAQJicwIJAQFEAgUCZEQFAmFYCQEBRAIFAmRDBQJhVwQCZFcJAQFHAgUCZFYFAWIEAmRYBAJkWQMFAmRBCQCUCgIFAmRGBQJkQwkAlAoCBQJkRwUCZEQEAmRuCAUCZFkCXzEEAmRaCAUCZFkCXzIEAmVhCQCgAwEJALwCAwUCZFIJALYCAQkAaQIFAmRuAAIJALYCAQUCZFoJAGsDCQBlAgUCZFUFAmVhBQFiBQJlYQkAlgoEBQJkVQUCY1AFAmR0BQJkWAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZWIFAmVjAmRLAmR3AVgBWQQCZHgJAAACBQFZBQR1bml0BAJlZAkAzAgCAwkAAAIFAmR3BQJhVAYJAQJhQgECEGludmFsaWQgbHAgYXNzZXQFA25pbAMJAAACBQJlZAUCZWQEAmVlAwkAAAIFAmVjBQJhVQYDCQAAAgUCZWMFAmFWBwkBAmFCAQINaW52YWxpZCBhc3NldAQCZWYDBQJlZQkAtgIBCQECYnEBCQECYU0BBQJhVQkAtgIBCQECYnEBCQECYU0BBQJhVgQCZWcJAQJicQEJAQJhTQEFAmFVBAJlaAkBAmJxAQkBAmFNAQUCYVYEAmVpAwUCZWUFAmVnBQJlaAQCZWoJALYCAQUCZWkEAmRSCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYVQJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYVQCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJlawkAtgIBBQJkSwQCZWwJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZWYJALgCAgUBZAkAdgYJALgCAgUBZAkAugICCQC5AgIFAmVrBQFkBQJkUgASBQFoAAAAEgUERE9XTgUBZAUDbmlsBAJlbQkBAmRzAQUCZWwEAmVuCAUCZW0CXzEEAmR0CAUCZW0CXzIEAmVvAwUCZWUJAJYKBAUCZW4AAAkAZQIFAmVnBQJlbAUCZWgJAJYKBAAABQJlbgUCZWcJAGUCBQJlaAUCZWwEAmVwCAUCZW8CXzEEAmVxCAUCZW8CXzIEAmVyCAUCZW8CXzMEAmVzCAUCZW8CXzQEAmROCQECYnMCCQEBRAIFAmVzBQJhWAkBAUQCBQJlcgUCYVcEAmRPCQEBRwIFAmROBQFiBAJjUAMFAmR4BQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoCCQClCAEJAQV2YWx1ZQEFAVgJANgEAQkBBXZhbHVlAQUBWQkBAmJtBgUCZXAFAmVxBQJkSwUCZE8FBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAAUCZE8JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFUAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZE8FA25pbAQCZFYJAQJicwIJAQFEAgUCZWgFAmFYCQEBRAIFAmVnBQJhVwQCZFcJAQFHAgUCZFYFAWIEAmRYBAJldAkAaAIJAKADAQkAvAIDBQJlZgUCZWsFAmRSAAIJAGsDCQBlAgUCZW4FAmV0BQFiBQJldAkAlgoEBQJlbgUCY1AFAmR0BQJkWAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZXUABAJkcQkAoggBCQEBUQADCQABAgUCZHECBlN0cmluZwQCZXYFAmRxCQDZBAEFAmV2AwkAAQIFAmRxAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmV3AAQCZHEJAKIIAQkBAVIAAwkAAQIFAmRxAgZTdHJpbmcEAmV2BQJkcQkA2QQBBQJldgMJAAECBQJkcQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJleAECZGYEAmV5CQACAQIRUGVybWlzc2lvbiBkZW5pZWQEAmRxCQECZXUAAwkAAQIFAmRxAgpCeXRlVmVjdG9yBAJlegUCZHEDCQAAAggFAmRmD2NhbGxlclB1YmxpY0tleQUCZXoGBQJleQMJAAECBQJkcQIEVW5pdAMJAAACCAUCZGYGY2FsbGVyBQR0aGlzBgUCZXkJAAIBAgtNYXRjaCBlcnJvchoCZGYBCnNldE1hbmFnZXIBAmVBBAJlQgkBAmV4AQUCZGYDCQAAAgUCZUIFAmVCBAJlQwkA2QQBBQJlQQMJAAACBQJlQwUCZUMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVIABQJlQQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmAQ5jb25maXJtTWFuYWdlcgAEAmVECQECZXcABAJlRQMJAQlpc0RlZmluZWQBBQJlRAYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZUUFAmVFBAJlRgMJAAACCAUCZGYPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJlRAYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZUYFAmVGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFRAAkA2AQBCQEFdmFsdWUBBQJlRAkAzAgCCQELRGVsZXRlRW50cnkBCQEBUgAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZgEDcHV0AgJjawJlRwMJAGYCAAAFAmNrCQACAQIgSW52YWxpZCBzbGlwcGFnZVRvbGVyYW5jZSBwYXNzZWQEAmRsCQECZGkDBQJkZgUCY2sGBAJjTQgFAmRsAl8yBAJiUggFAmRsAl83BAJjaQgFAmRsAl85BAJjTggFAmRsA18xMAQCY08IBQJkbANfMTEEAmVICAUCZGwDXzEyBAJlSQgFAmRsA18xMwQCZG8JAPwHBAUCYUQCBGVtaXQJAMwIAgUCY00FA25pbAUDbmlsAwkAAAIFAmRvBQJkbwQCZHAEAmRxBQJkbwMJAAECBQJkcQIHQWRkcmVzcwQCZHIFAmRxCQD8BwQFAmRyAgRlbWl0CQDMCAIFAmNNBQNuaWwFA25pbAUEdW5pdAMJAAACBQJkcAUCZHAEAmVKAwkAZgIFAmNOAAAJAPwHBAUCYmECA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJlSAUCY04FA25pbAUDbmlsAwkAAAIFAmVKBQJlSgQCZUsDCQBmAgUCY08AAAkA/AcEBQJiYQIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmVJBQJjTwUDbmlsBQNuaWwDCQAAAgUCZUsFAmVLBAJlTAMFAmVHBAJlTQkA/AcEBQJhWgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlIFAmNNBQNuaWwDCQAAAgUCZU0FAmVNBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRmBmNhbGxlcgUCY00FAmJSBQNuaWwJAM4IAgUCY2kFAmVMCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmAQpwdXRGb3JGcmVlAQJlTgMJAGYCAAAFAmVOCQACAQIUSW52YWxpZCB2YWx1ZSBwYXNzZWQEAmRsCQECZGkDBQJkZgUCZU4HCAUCZGwCXzkCZGYBCXB1dE9uZVRrbgICZU8CZVAEAmVRCgACZVIJAPwHBAUCYUQCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJlUgIHQm9vbGVhbgUCZVIJAAIBCQCsAgIJAAMBBQJlUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZVMDAwMJAQJhRgAGCQAAAgUCYVMFAWwGCQAAAgUCYVMFAW4GBQJlUQQCZWQJAMwIAgMJAQEhAQUCZVMGCQECYUIBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkZghwYXltZW50cwABBgkBAmFCAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWQFAmVkBAJlVAkAkQMCCAUCZGYIcGF5bWVudHMAAAQCZHcIBQJlVAdhc3NldElkBAJkdggFAmVUBmFtb3VudAQBWAgFAmRmBmNhbGxlcgQBWQgFAmRmDXRyYW5zYWN0aW9uSWQEAmVVCQECZHUEBQJkdgUCZHcFAVgFAVkEAmVWCAUCZVUCXzEEAmNQCAUCZVUCXzIEAmR0CAUCZVUCXzMEAmVXCAUCZVUCXzQEAmVYAwMJAGYCBQJlTwAACQBmAgUCZU8FAmVWBwkBAmFCAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJlTwUDbmlsAgAFAmVWBAJkbwkBAmRtAQUCZVgDCQAAAgUCZG8FAmRvBAJlTAMFAmVQBAJlWQkA/AcEBQJhWgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVQFAmVYBQNuaWwDCQAAAgUCZVkFAmVZBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRmBmNhbGxlcgUCZVgFAmFUBQNuaWwEAmVaAwkAZgIFAmR0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUUFAmR0BQJkdwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNQBQJlTAUCZVoFAmVYCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmARFwdXRPbmVUa25SRUFET05MWQICZHcCZHYEAmZhCQECZHUEBQJkdgkBAmFLAQUCZHcFBHVuaXQFBHVuaXQEAmVWCAUCZmECXzEEAmNQCAUCZmECXzIEAmR0CAUCZmECXzMEAmVXCAUCZmECXzQJAJQKAgUDbmlsCQCVCgMFAmVWBQJkdAUCZVcCZGYBCWdldE9uZVRrbgICZmICZU8EAmVRCgACZVIJAPwHBAUCYUQCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJlUgIHQm9vbGVhbgUCZVIJAAIBCQCsAgIJAAMBBQJlUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZmMDAwkBAmFGAAYJAAACBQJhUwUBbgYFAmVRBAJlZAkAzAgCAwkBASEBBQJmYwYJAQJhQgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRmCHBheW1lbnRzAAEGCQECYUIBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlZAUCZWQEAmVjCQECYUsBBQJmYgQCZVQJAJEDAggFAmRmCHBheW1lbnRzAAAEAmR3CAUCZVQHYXNzZXRJZAQCZEsIBQJlVAZhbW91bnQEAVgIBQJkZgZjYWxsZXIEAVkIBQJkZg10cmFuc2FjdGlvbklkBAJmZAkBAmViBQUCZWMFAmRLBQJkdwUBWAUBWQQCZmUIBQJmZAJfMQQCY1AIBQJmZAJfMgQCZHQIBQJmZAJfMwQCZVcIBQJmZAJfNAQCZG4DAwkAZgIFAmVPAAAJAGYCBQJlTwUCZmUHCQECYUIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVPBQNuaWwCAAUCZmUEAmZmCQD8BwQFAmFEAgRidXJuCQDMCAIFAmRLBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmR3BQJkSwUDbmlsAwkAAAIFAmZmBQJmZgQCZmcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBWAUCZG4FAmVjBQNuaWwEAmVaAwkAZgIFAmR0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUUFAmR0BQJlYwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNQBQJmZwUCZVoFAmRuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmARFnZXRPbmVUa25SRUFET05MWQICZWMCZEsEAmZoCQECZWIFCQECYUsBBQJlYwUCZEsFAmFUBQR1bml0BQR1bml0BAJmZQgFAmZoAl8xBAJjUAgFAmZoAl8yBAJkdAgFAmZoAl8zBAJlVwgFAmZoAl80CQCUCgIFA25pbAkAlQoDBQJmZQUCZHQFAmVXAmRmARN1bnN0YWtlQW5kR2V0T25lVGtuAwJmaQJmYgJlTwQCZVEKAAJlUgkA/AcEBQJhRAIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmVSAgdCb29sZWFuBQJlUgkAAgEJAKwCAgkAAwEFAmVSAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmYwMDCQECYUYABgkAAAIFAmFTBQFuBgUCZVEEAmVkCQDMCAIDCQEBIQEFAmZjBgkBAmFCAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZGYIcGF5bWVudHMAAAYJAQJhQgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmVkBQJlZAQCZWMJAQJhSwEFAmZiBAFYCAUCZGYGY2FsbGVyBAFZCAUCZGYNdHJhbnNhY3Rpb25JZAQCZmoJAPwHBAUCYVoCB3Vuc3Rha2UJAMwIAgkA2AQBBQJhVAkAzAgCBQJmaQUDbmlsBQNuaWwDCQAAAgUCZmoFAmZqBAJmawkBAmViBQUCZWMFAmZpBQJhVAUBWAUBWQQCZmUIBQJmawJfMQQCY1AIBQJmawJfMgQCZHQIBQJmawJfMwQCZVcIBQJmawJfNAQCZG4DAwkAZgIFAmVPAAAJAGYCBQJlTwUCZmUHCQECYUIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVPBQNuaWwCAAUCZmUEAmZmCQD8BwQFAmFEAgRidXJuCQDMCAIFAmZpBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFUBQJmaQUDbmlsAwkAAAIFAmZmBQJmZgQCZmcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRmBmNhbGxlcgUCZG4FAmVjBQNuaWwEAmVaAwkAZgIFAmR0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUUFAmR0BQJlYwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNQBQJmZwUCZVoFAmRuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmAQNnZXQABAJjQQkBAmRlAQUCZGYEAmZsCAUCY0ECXzEEAmNoCAUCY0ECXzIEAmRoCAUCY0ECXzMEAmJQCAUCY0ECXzQEAmNpCAUCY0ECXzUEAmZtCQD8BwQFAmFEAgRidXJuCQDMCAIFAmRoBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJQBQJkaAUDbmlsAwkAAAIFAmZtBQJmbQUCY2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGYBCWdldE5vTGVzcwICZm4CZm8EAmNBCQECZGUBBQJkZgQCY2cIBQJjQQJfMQQCY2gIBQJjQQJfMgQCZGgIBQJjQQJfMwQCYlAIBQJjQQJfNAQCY2kIBQJjQQJfNQMJAGYCBQJmbgUCY2cJAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmNnAgMgPCAJAKQDAQUCZm4DCQBmAgUCZm8FAmNoCQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCY2gCAyA8IAkApAMBBQJmbwQCZm0JAPwHBAUCYUQCBGJ1cm4JAMwIAgUCZGgFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlAFAmRoBQNuaWwDCQAAAgUCZm0FAmZtBQJjaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZgENdW5zdGFrZUFuZEdldAECZG4EAmZwAwkBAiE9AgkAkAMBCAUCZGYIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCZnAFAmZwBAJiRQkBAmFIAAQCYlIJANkEAQkAkQMCBQJiRQUBcQQCZmoJAPwHBAUCYVoCB3Vuc3Rha2UJAMwIAgkA2AQBBQJiUgkAzAgCBQJkbgUDbmlsBQNuaWwDCQAAAgUCZmoFAmZqBAJjQQkBAmJOBAkA2AQBCAUCZGYNdHJhbnNhY3Rpb25JZAkA2AQBBQJiUgUCZG4IBQJkZgZjYWxsZXIEAmJVCQENcGFyc2VJbnRWYWx1ZQEIBQJjQQJfOQQCY2kIBQJjQQNfMTAEAmZxAwMJAQJhRgAGCQAAAgUCYlUFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJVBgMJAAACBQJmcQUCZnEEAmZtCQD8BwQFAmFEAgRidXJuCQDMCAIFAmRuBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJSBQJkbgUDbmlsAwkAAAIFAmZtBQJmbQUCY2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGYBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmZpAmZyAmZvBAJmYwMJAQJhRgAGCQAAAgUCYVMFAW4EAmVkCQDMCAIDCQEBIQEFAmZjBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRmCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWQFAmVkBAJmagkA/AcEBQJhWgIHdW5zdGFrZQkAzAgCCQDYBAEFAmFUCQDMCAIFAmZpBQNuaWwFA25pbAMJAAACBQJmagUCZmoEAmNBCQECYk4ECQDYBAEIBQJkZg10cmFuc2FjdGlvbklkCQDYBAEFAmFUBQJmaQgFAmRmBmNhbGxlcgQCY2cIBQJjQQJfMQQCY2gIBQJjQQJfMgQCY2kIBQJjQQNfMTAEAmZzCQDMCAIDCQBnAgUCY2cFAmZyBgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZyBQNuaWwCAAkAzAgCAwkAZwIFAmNoBQJmbwYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZvBQNuaWwCAAUDbmlsAwkAAAIFAmZzBQJmcwQCZm0JAPwHBAUCYUQCBGJ1cm4JAMwIAgUCZmkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVQFAmZpBQNuaWwDCQAAAgUCZm0FAmZtBQJjaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZgEIYWN0aXZhdGUCAmZ0AmZ1AwkBAiE9AgkApQgBCAUCZGYGY2FsbGVyCQClCAEFAmFECQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAAUCZnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFiAAUCZnUFA25pbAIHc3VjY2VzcwJkZgEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYUgAAmRmARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJicgkAlAoCBQNuaWwJAQJicQEFAmJyAmRmARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJieQJiegJiRAQCYk0JAQJiQwMFAmJ5BQJiegUCYkQJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJiTQAACQDMCAIJAKYDAQkAkQMCBQJiTQABCQDMCAIJAKYDAQkAkQMCBQJiTQACBQNuaWwCZGYBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFFAUYJAJQKAgUDbmlsCQCmAwEJAQFEAgUBRQUBRgJkZgEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBSAFJCQCUCgIFA25pbAkBAUcCCQCnAwEFAUgFAUkCZGYBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYnQCYnUJAJQKAgUDbmlsCQCmAwEJAQJicwIJAKcDAQUCYnQJAKcDAQUCYnUCZGYBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJiTwJjawJjbAJjbQJjbgJjbwFYAmNwAmNxCQCUCgIFA25pbAkBAmNqCQUCYk8FAmNrBQJjbAUCY20FAmNuBQJjbwUBWAUCY3AFAmNxAmRmASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQCYk8CYlACYlEBWAQCY0EJAQJiTgQFAmJPBQJiUAUCYlEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAVgJAJQKAgUDbmlsCQCcCgoIBQJjQQJfMQgFAmNBAl8yCAUCY0ECXzMIBQJjQQJfNAgFAmNBAl81CAUCY0ECXzYIBQJjQQJfNwkApgMBCAUCY0ECXzgIBQJjQQJfOQgFAmNBA18xMAJkZgENc3RhdHNSRUFET05MWQAEAmJFCQECYUgABAJiUgkA2QQBCQCRAwIFAmJFBQFxBAJjUwkAkQMCBQJiRQUBcgQCY1QJAJEDAgUCYkUFAXMEAmN0CQCRAwIFAmJFBQF2BAJjdQkAkQMCBQJiRQUBdwQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCZnYICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlIJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlICDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjVQkBAmJxAQUCY1MEAmNWCQECYnEBBQJjVAQCZncDCQAAAgUCZnYAAAkAzAgCBQFlCQDMCAIFAWUJAMwIAgUBZQUDbmlsCQECYkMDBQJjVQUCY1YFAmZ2BAJjYgAABAJmeAkBAUcCCQCRAwIFAmZ3AAEFAWIEAmZ5CQEBRwIJAJEDAgUCZncAAgUBYgQCZnoJAQV2YWx1ZQEJAJoIAgUCYUQJAQJhcAEJAKUIAQUEdGhpcwkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNVCQDMCAIJAKQDAQUCY1YJAMwIAgkApAMBBQJmdgkAzAgCCQCkAwEFAmNiCQDMCAIJAKQDAQUCZngJAMwIAgkApAMBBQJmeQkAzAgCCQCkAwEFAmZ6BQNuaWwFAWoCZGYBIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZAQJjbAQCYkUJAQJhSAAEAmJSCQDZBAEJAJEDAgUCYkUFAXEEAmNyCQCRAwIFAmJFBQFyBAJiUwkA2QQBBQJjcgQCY3MJAJEDAgUCYkUFAXMEAmJUCQDZBAEFAmNzBAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF0BAJiRwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF1BAJiVQkAkQMCBQJiRQUBcAQCZnYICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlIJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlICDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjVQkBAmJxAQUCY3IEAmNWCQECYnEBBQJjcwQCYkEJAQFEAgUCY1UFAmJGBAJiQgkBAUQCBQJjVgUCYkcEAmNhAwkAAAIFAmZ2AAAFAWUJAQJicwIFAmJCBQJiQQQCY3gJAQFEAgUCY2wFAmJGBAJjeQkAvAIDBQJjeAUCY2EFAWQEAmNuCQEBRwIFAmN5BQJiRwQCZGwJAQJjagkCAACgwh4FAmNsBQJiUwUCY24FAmJUAgAGBwQCY0kIBQJkbAJfMQQCZkEIBQJkbAJfMwQCYlcIBQJkbAJfNAQCYlkIBQJkbAJfNQQCYlYIBQJkbAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY0kJAMwIAgkApAMBCQEBRwIFAmNhBQFiCQDMCAIJAKQDAQUCYlcJAMwIAgkApAMBBQJiWQkAzAgCCQCkAwEFAmJWCQDMCAIFAmJVCQDMCAIJAKQDAQUCY2wJAMwIAgkApAMBBQJjbgUDbmlsBQFqAmRmAR9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZAQJjbgQCYkUJAQJhSAAEAmJSCQDZBAEJAJEDAgUCYkUFAXEEAmNyCQCRAwIFAmJFBQFyBAJiUwkA2QQBBQJjcgQCY3MJAJEDAgUCYkUFAXMEAmJUCQDZBAEFAmNzBAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF0BAJiRwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF1BAJiVQkAkQMCBQJiRQUBcAQCZnYICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlIJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlICDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJmQgkBAmJxAQUCY3IEAmZDCQECYnEBBQJjcwQCZkQJAQFEAgUCZkIFAmJGBAJmRQkBAUQCBQJmQwUCYkcEAmNhAwkAAAIFAmZ2AAAFAWUJAQJicwIFAmZFBQJmRAQCY3kJAQFEAgUCY24FAmJHBAJjeAkAvAIDBQJjeQUBZAUCY2EEAmNsCQEBRwIFAmN4BQJiRgQCZGwJAQJjagkCAACgwh4FAmNsBQJiUwUCY24FAmJUAgAGBwQCY0kIBQJkbAJfMQQCZkEIBQJkbAJfMwQCYlcIBQJkbAJfNAQCYlkIBQJkbAJfNQQCYlYIBQJkbAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY0kJAMwIAgkApAMBCQEBRwIFAmNhBQFiCQDMCAIJAKQDAQUCYlcJAMwIAgkApAMBBQJiWQkAzAgCCQCkAwEFAmJWCQDMCAIFAmJVCQDMCAIJAKQDAQUCY2wJAMwIAgkApAMBBQJjbgUDbmlsBQFqAmRmARNldmFsdWF0ZUdldFJFQURPTkxZAgJmRgJmRwQCY0EJAQJiTgQCAAUCZkYFAmZHBQR0aGlzBAJjZwgFAmNBAl8xBAJjaAgFAmNBAl8yBAJiVwgFAmNBAl81BAJiWQgFAmNBAl82BAJiVggFAmNBAl83BAJjYggFAmNBAl84BAJiVQkBDXBhcnNlSW50VmFsdWUBCAUCY0ECXzkJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjZwkAzAgCCQCkAwEFAmNoCQDMCAIJAKQDAQUCYlcJAMwIAgkApAMBBQJiWQkAzAgCCQCkAwEFAmJWCQDMCAIJAKYDAQUCY2IJAMwIAgkApAMBBQJiVQUDbmlsBQFqAQJmSAECZkkABAJmSgQCZHEJAQJldQADCQABAgUCZHECCkJ5dGVWZWN0b3IEAmV6BQJkcQUCZXoDCQABAgUCZHECBFVuaXQIBQJmSA9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCZHEFAmZIAwkAAQIFAmRxAgVPcmRlcgQCY1IFAmRxBAJmSwkBAmFHAAQCYXUJAQJjUQEFAmNSBAJhdgkA9AMDCAUCY1IJYm9keUJ5dGVzCQCRAwIIBQJjUgZwcm9vZnMAAAgFAmNSD3NlbmRlclB1YmxpY0tleQQCYXcJAPQDAwgFAmNSCWJvZHlCeXRlcwkAkQMCCAUCY1IGcHJvb2ZzAAEFAmZLAwMDBQJhdQUCYXYHBQJhdwcGCQECYXQDBQJhdQUCYXYFAmF3AwkAAQIFAmRxAhRTZXRTY3JpcHRUcmFuc2FjdGlvbgQCZXYFAmRxBAJmTAkA9gMBCQEFdmFsdWUBCAUCZXYGc2NyaXB0BAJmTQkA2wQBCQEFdmFsdWUBCQCdCAIFAmFECQECYXIABAJmTgkA8QcBBQR0aGlzAwMJAAACBQJmTQUCZkwJAQIhPQIFAmZOBQJmTAcGCQD0AwMIBQJmSAlib2R5Qnl0ZXMJAJEDAggFAmZIBnByb29mcwAABQJmSgkA9AMDCAUCZkgJYm9keUJ5dGVzCQCRAwIIBQJmSAZwcm9vZnMAAAUCZkrGvHs8", "chainId": 84, "height": 2311006, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: 8PaKTVcEykXrneZFtBcmGbyhXvoSvPYeLMdh31mkL2Yq Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let a = 8
5+
6+let b = 100000000
7+
8+let c = toBigInt(100000000)
9+
10+let d = toBigInt(1000000000000000000)
11+
12+let e = toBigInt(0)
13+
14+let f = toBigInt(0)
15+
16+let g = toBigInt(1)
17+
18+let h = toBigInt(2)
19+
20+let i = "WAVES"
21+
22+let j = "__"
23+
24+let k = 1
25+
26+let l = 2
27+
28+let m = 3
29+
30+let n = 4
31+
32+let o = 1
33+
34+let p = 2
35+
36+let q = 3
37+
38+let r = 4
39+
40+let s = 5
41+
42+let t = 6
43+
44+let u = 7
45+
46+let v = 8
47+
48+let w = 9
49+
50+let x = 10
51+
52+let y = 1
53+
54+let z = 2
55+
56+let A = 3
57+
58+let B = 1
59+
60+let C = 7
61+
62+func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
63+
64+
65+func G (H,I) = toInt(fraction(H, toBigInt(I), d))
66+
67+
68+func J (K,L,M) = fraction(K, L, M)
69+
70+
71+func N (H) = if ((0 > H))
72+ then -(H)
73+ else H
74+
75+
76+func O (H) = if ((e > H))
77+ then -(H)
78+ else H
79+
80+
81+func P () = "%s__factoryContract"
82+
83+
84+func Q () = "%s__managerPublicKey"
85+
86+
87+func R () = "%s__pendingManagerPublicKey"
88+
89+
90+func S () = "%s%s__price__last"
91+
92+
93+func T (U,V) = makeString(["%s%s%d%d__price__history", toString(U), toString(V)], j)
94+
95+
96+func W (X,Y) = ((("%s%s%s__P__" + X) + "__") + Y)
97+
98+
99+func Z (X,Y) = ((("%s%s%s__G__" + X) + "__") + Y)
100+
101+
102+func aa () = "%s__amountAsset"
103+
104+
105+func ab () = "%s__priceAsset"
106+
107+
108+let ac = "%s__fee"
109+
110+let ad = fraction(10, b, 10000)
111+
112+let ae = valueOrElse(getInteger(this, ac), ad)
113+
114+func af () = "%s__factoryConfig"
115+
116+
117+func ag () = "%s%s__matcher__publicKey"
118+
119+
120+func ah (ai) = (("%s%s%s__" + ai) + "__mappings__poolContract2LpAsset")
121+
122+
123+func aj (ak,al) = (((("%d%d%s__" + ak) + "__") + al) + "__config")
124+
125+
126+func am (an) = ("%s%s%s__mappings__baseAsset2internalId__" + an)
127+
128+
129+func ao () = "%s__shutdown"
130+
131+
132+func ap (aq) = ("%s%s__poolWeight__" + aq)
133+
134+
135+func ar () = "%s__allowedLpScriptHash"
136+
137+
138+let as = "%s__feeCollectorAddress"
139+
140+func at (au,av,aw) = throw(((((("order validation failed: orderValid=" + toString(au)) + " senderValid=") + toString(av)) + " matcherValid=") + toString(aw)))
141+
142+
143+func ax (ay,az) = valueOrErrorMessage(getString(ay, az), makeString(["mandatory ", toString(ay), ".", az, " is not defined"], ""))
144+
145+
146+func aA (ay,az) = valueOrErrorMessage(getInteger(ay, az), makeString(["mandatory ", toString(ay), ".", az, " is not defined"], ""))
147+
148+
149+func aB (aC) = throw(makeString(["lp.ride:", aC], " "))
150+
151+
152+let aD = addressFromStringValue(ax(this, P()))
153+
154+let aE = addressFromStringValue(ax(aD, as))
155+
156+func aF () = valueOrElse(getBoolean(aD, ao()), false)
157+
158+
159+func aG () = fromBase58String(ax(aD, ag()))
160+
161+
162+func aH () = {
163+ let aI = ax(this, aa())
164+ let aJ = ax(this, ab())
165+ let al = aA(aD, am(aJ))
166+ let ak = aA(aD, am(aI))
167+ split(ax(aD, aj(toString(ak), toString(al))), j)
168+ }
169+
170+
171+func aK (aL) = if ((aL == i))
172+ then unit
173+ else fromBase58String(aL)
174+
175+
176+func aM (aL) = if ((aL == unit))
177+ then i
178+ else toBase58String(value(aL))
179+
180+
181+func aN (aO) = $Tuple7(addressFromStringValue(aO[o]), parseIntValue(aO[p]), fromBase58String(aO[q]), aK(aO[r]), aK(aO[s]), parseIntValue(aO[t]), parseIntValue(aO[u]))
182+
183+
184+let aP = aN(aH())
185+
186+let aQ = aP
187+
188+let aR = aQ._1
189+
190+let aS = aQ._2
191+
192+let aT = aQ._3
193+
194+let aU = aQ._4
195+
196+let aV = aQ._5
197+
198+let aW = aQ._6
199+
200+let aX = aQ._7
201+
202+func aY () = split(ax(aD, af()), j)
203+
204+
205+let aZ = valueOrErrorMessage(addressFromString(aY()[B]), "incorrect staking address")
206+
207+let ba = valueOrErrorMessage(addressFromString(aY()[C]), "incorrect staking address")
208+
209+func bb (bc,bd,be,bf,bg,bh,bi,bj,bk,bl) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh), toString(bi), toString(bj), toString(bk), toString(bl)], j)
210+
211+
212+func bm (bn,bo,bp,bf,bi,bj) = makeString(["%d%d%d%d%d%d", toString(bn), toString(bo), toString(bp), toString(bf), toString(bi), toString(bj)], j)
213+
214+
215+func bq (br) = if ((br == "WAVES"))
216+ then wavesBalance(this).available
217+ else assetBalance(this, fromBase58String(br))
218+
219+
220+func bs (bt,bu) = fraction(bt, d, bu)
221+
222+
223+func bv (bw,bx,by,bz) = {
224+ let bA = D(by, bw)
225+ let bB = D(bz, bx)
226+ bs(bB, bA)
227+ }
228+
229+
230+func bC (by,bz,bD) = {
231+ let bE = aH()
232+ let bF = parseIntValue(bE[t])
233+ let bG = parseIntValue(bE[u])
234+ let bH = bv(bF, bG, by, bz)
235+ let bu = D(by, bF)
236+ let bt = D(bz, bG)
237+ let bI = D(bD, b)
238+ let bJ = bs(bu, bI)
239+ let bK = bs(bt, bI)
240+[bH, bJ, bK]
241+ }
242+
243+
244+func bL (by,bz,bD) = {
245+ let bM = bC(by, bz, bD)
246+[G(bM[0], b), G(bM[1], b), G(bM[2], b)]
247+ }
248+
249+
250+func bN (bO,bP,bQ,X) = {
251+ let bE = aH()
252+ let bR = bE[q]
253+ let bS = bE[r]
254+ let bT = bE[s]
255+ let bw = parseIntValue(bE[t])
256+ let bx = parseIntValue(bE[u])
257+ let bU = bE[p]
258+ let bV = valueOrErrorMessage(assetInfo(fromBase58String(bR)), (("Asset " + bR) + " doesn't exist")).quantity
259+ if ((bR != bP))
260+ then throw("Invalid asset passed.")
261+ else {
262+ let bW = bq(bS)
263+ let bX = D(bW, bw)
264+ let bY = bq(bT)
265+ let bZ = D(bY, bx)
266+ let ca = bs(bZ, bX)
267+ let cb = G(ca, b)
268+ let cc = D(bQ, b)
269+ let cd = D(bV, b)
270+ let ce = fraction(bX, cc, cd)
271+ let cf = fraction(bZ, cc, cd)
272+ let cg = G(ce, bw)
273+ let ch = G(cf, bx)
274+ let ci = if ((bO == ""))
275+ then nil
276+ else [ScriptTransfer(X, cg, if ((bS == "WAVES"))
277+ then unit
278+ else fromBase58String(bS)), ScriptTransfer(X, ch, if ((bT == "WAVES"))
279+ then unit
280+ else fromBase58String(bT)), StringEntry(Z(toString(X), bO), bm(cg, ch, bQ, cb, height, lastBlock.timestamp)), IntegerEntry(S(), cb), IntegerEntry(T(height, lastBlock.timestamp), cb)]
281+ $Tuple10(cg, ch, bS, bT, bW, bY, bV, ca, bU, ci)
282+ }
283+ }
284+
285+
286+func cj (bO,ck,cl,cm,cn,co,X,cp,cq) = {
287+ let bE = aH()
288+ let bR = fromBase58String(bE[q])
289+ let cr = bE[r]
290+ let cs = bE[s]
291+ let ct = bE[v]
292+ let cu = bE[w]
293+ let bF = parseIntValue(bE[t])
294+ let bG = parseIntValue(bE[u])
295+ let bU = bE[p]
296+ let bV = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
297+ let cv = toBase58String(valueOrElse(cm, fromBase58String("WAVES")))
298+ let cw = toBase58String(valueOrElse(co, fromBase58String("WAVES")))
299+ if (if ((cr != cv))
300+ then true
301+ else (cs != cw))
302+ then throw("Invalid amt or price asset passed.")
303+ else {
304+ let bW = if (cp)
305+ then bq(cr)
306+ else (bq(cr) - cl)
307+ let bY = if (cp)
308+ then bq(cs)
309+ else (bq(cs) - cn)
310+ let cx = D(cl, bF)
311+ let cy = D(cn, bG)
312+ let cz = bs(cy, cx)
313+ let bX = D(bW, bF)
314+ let bZ = D(bY, bG)
315+ let cA = if ((bV == 0))
316+ then {
317+ let ca = e
318+ let cB = e
319+ let bI = pow((cx * cy), 0, toBigInt(5), 1, 0, DOWN)
320+ $Tuple5(G(bI, b), G(cx, bF), G(cy, bG), bs((bZ + cy), (bX + cx)), cB)
321+ }
322+ else {
323+ let ca = bs(bZ, bX)
324+ let cB = fraction(O((ca - cz)), d, ca)
325+ let cC = D(ck, b)
326+ if (if ((ca != e))
327+ then (cB > cC)
328+ else false)
329+ then throw(((("Price slippage " + toString(cB)) + " exceeded the passed limit of ") + toString(cC)))
330+ else {
331+ let cd = D(bV, b)
332+ let cD = fraction(cx, ca, d)
333+ let cE = fraction(cy, d, ca)
334+ let cF = if ((cD > cy))
335+ then $Tuple2(cE, cy)
336+ else $Tuple2(cx, cD)
337+ let cG = cF._1
338+ let cH = cF._2
339+ let bI = fraction(cd, cH, bZ)
340+ $Tuple5(G(bI, b), G(cG, bF), G(cH, bG), ca, cB)
341+ }
342+ }
343+ let cI = cA._1
344+ let cJ = cA._2
345+ let cK = cA._3
346+ let cb = G(cA._4, b)
347+ let cL = G(cA._5, b)
348+ if ((0 >= cI))
349+ then throw("Invalid calculations. LP calculated is less than zero.")
350+ else {
351+ let cM = if (!(cq))
352+ then 0
353+ else cI
354+ let cN = (cl - cJ)
355+ let cO = (cn - cK)
356+ let cP = [IntegerEntry(S(), cb), IntegerEntry(T(height, lastBlock.timestamp), cb), StringEntry(W(X, bO), bb(cJ, cK, cM, cb, ck, cL, height, lastBlock.timestamp, cN, cO))]
357+ $Tuple13(cI, cM, cb, bW, bY, bV, bR, bU, cP, cN, cO, cm, co)
358+ }
359+ }
360+ }
361+
362+
363+func cQ (cR) = {
364+ let bE = aH()
365+ let cS = bE[r]
366+ let cT = bE[s]
367+ let bU = parseIntValue(bE[p])
368+ let bF = parseIntValue(bE[t])
369+ let bG = parseIntValue(bE[u])
370+ let cU = bq(cS)
371+ let cV = bq(cT)
372+ let ca = if ((cR.orderType == Buy))
373+ then bv(bF, bG, (cU + cR.amount), cV)
374+ else bv(bF, bG, (cU - cR.amount), cV)
375+ let cb = G(ca, b)
376+ if (if (if (aF())
377+ then true
378+ else (bU == m))
379+ then true
380+ else (bU == n))
381+ then throw("Exchange operations disabled")
382+ else {
383+ let cW = cR.assetPair.amountAsset
384+ let cX = if ((cW == unit))
385+ then "WAVES"
386+ else toBase58String(value(cW))
387+ let cY = cR.assetPair.priceAsset
388+ let cZ = if ((cY == unit))
389+ then "WAVES"
390+ else toBase58String(value(cY))
391+ if (if ((cX != cS))
392+ then true
393+ else (cZ != cT))
394+ then throw("Wrong order assets.")
395+ else {
396+ let da = cR.price
397+ let db = fraction(b, bG, bF)
398+ let dc = J(da, b, db)
399+ let dd = if ((cR.orderType == Buy))
400+ then (cb >= dc)
401+ else (dc >= cb)
402+ true
403+ }
404+ }
405+ }
406+
407+
408+func de (df) = if ((size(df.payments) != 1))
409+ then throw("exactly 1 payment is expected")
410+ else {
411+ let dg = value(df.payments[0])
412+ let bP = value(dg.assetId)
413+ let dh = dg.amount
414+ let cA = bN(toBase58String(df.transactionId), toBase58String(bP), dh, df.caller)
415+ let cg = cA._1
416+ let ch = cA._2
417+ let bU = parseIntValue(cA._9)
418+ let ci = cA._10
419+ if (if (aF())
420+ then true
421+ else (bU == n))
422+ then throw(("Get operation is blocked by admin. Status = " + toString(bU)))
423+ else $Tuple5(cg, ch, dh, bP, ci)
424+ }
425+
426+
427+func di (df,ck,cq) = if ((size(df.payments) != 2))
428+ then throw("exactly 2 payments are expected")
429+ else {
430+ let dj = value(df.payments[0])
431+ let dk = value(df.payments[1])
432+ let dl = cj(toBase58String(df.transactionId), ck, dj.amount, dj.assetId, dk.amount, dk.assetId, toString(df.caller), false, cq)
433+ let bU = parseIntValue(dl._8)
434+ if (if (if (aF())
435+ then true
436+ else (bU == l))
437+ then true
438+ else (bU == n))
439+ then throw(("Put operation is blocked by admin. Status = " + toString(bU)))
440+ else dl
441+ }
442+
443+
444+func dm (dn) = {
445+ let do = invoke(aD, "emit", [dn], nil)
446+ if ((do == do))
447+ then {
448+ let dp = {
449+ let dq = do
450+ if ($isInstanceOf(dq, "Address"))
451+ then {
452+ let dr = dq
453+ invoke(dr, "emit", [dn], nil)
454+ }
455+ else unit
456+ }
457+ if ((dp == dp))
458+ then dn
459+ else throw("Strict value is not equal to itself.")
460+ }
461+ else throw("Strict value is not equal to itself.")
462+ }
463+
464+
465+func ds (dn) = {
466+ let dt = fraction(dn, ae, b)
467+ $Tuple2((dn - dt), dt)
468+ }
469+
470+
471+func du (dv,dw,X,Y) = {
472+ let dx = (Y == unit)
473+ let dy = bq(aM(aU))
474+ let dz = bq(aM(aV))
475+ let dA = if ((dw == aU))
476+ then true
477+ else if ((dw == aV))
478+ then false
479+ else aB("invalid asset")
480+ let dB = if (dx)
481+ then $Tuple2(dy, dz)
482+ else if (dA)
483+ then $Tuple2((dy - dv), dz)
484+ else $Tuple2(dy, (dz - dv))
485+ let dC = dB._1
486+ let dD = dB._2
487+ let dE = if (dA)
488+ then $Tuple2(dv, 0)
489+ else $Tuple2(0, dv)
490+ let dF = dE._1
491+ let dG = dE._2
492+ let dH = ds(dF)._1
493+ let dI = ds(dG)._1
494+ let dJ = ds(dv)
495+ let dK = dJ._1
496+ let dt = dJ._2
497+ let dL = (dC + dH)
498+ let dM = (dD + dI)
499+ let dN = bs(D(dM, aX), D(dL, aW))
500+ let dO = G(dN, b)
501+ let dP = if (dA)
502+ then dC
503+ else dD
504+ let dQ = toBigInt(dP)
505+ let dR = toBigInt(valueOrErrorMessage(assetInfo(aT), (("asset " + toBase58String(aT)) + " doesn't exist")).quantity)
506+ let dS = if ((dR > f))
507+ then true
508+ else aB("initial deposit requires all coins")
509+ if ((dS == dS))
510+ then {
511+ let dT = toBigInt(dK)
512+ let dU = max([0, toInt(((dR * (sqrtBigInt((d + ((dT * d) / dQ)), 18, 18, DOWN) - d)) / d))])
513+ let cP = if (dx)
514+ then nil
515+ else [IntegerEntry(S(), dO), IntegerEntry(T(height, lastBlock.timestamp), dO), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bb(dF, dG, dU, dO, 0, 0, height, lastBlock.timestamp, 0, 0))]
516+ let dV = bs(D(dD, aX), D(dC, aW))
517+ let dW = G(dV, b)
518+ let dX = {
519+ let dY = if (dA)
520+ then $Tuple2(dF, dC)
521+ else $Tuple2(dG, dD)
522+ let dn = dY._1
523+ let dZ = dY._2
524+ let ea = toInt(fraction(dR, toBigInt((dn / 2)), toBigInt(dZ)))
525+ fraction((dU - ea), b, ea)
526+ }
527+ $Tuple4(dU, cP, dt, dX)
528+ }
529+ else throw("Strict value is not equal to itself.")
530+ }
531+
532+
533+func eb (ec,dK,dw,X,Y) = {
534+ let dx = (Y == unit)
535+ let ed = [if ((dw == aT))
536+ then true
537+ else aB("invalid lp asset")]
538+ if ((ed == ed))
539+ then {
540+ let ee = if ((ec == aU))
541+ then true
542+ else if ((ec == aV))
543+ then false
544+ else aB("invalid asset")
545+ let ef = if (ee)
546+ then toBigInt(bq(aM(aU)))
547+ else toBigInt(bq(aM(aV)))
548+ let eg = bq(aM(aU))
549+ let eh = bq(aM(aV))
550+ let ei = if (ee)
551+ then eg
552+ else eh
553+ let ej = toBigInt(ei)
554+ let dR = toBigInt(valueOrErrorMessage(assetInfo(aT), (("asset " + toBase58String(aT)) + " doesn't exist")).quantity)
555+ let ek = toBigInt(dK)
556+ let el = max([0, toInt(((ef * (d - pow((d - ((ek * d) / dR)), 18, h, 0, 18, DOWN))) / d))])
557+ let em = ds(el)
558+ let en = em._1
559+ let dt = em._2
560+ let eo = if (ee)
561+ then $Tuple4(en, 0, (eg - el), eh)
562+ else $Tuple4(0, en, eg, (eh - el))
563+ let ep = eo._1
564+ let eq = eo._2
565+ let er = eo._3
566+ let es = eo._4
567+ let dN = bs(D(es, aX), D(er, aW))
568+ let dO = G(dN, b)
569+ let cP = if (dx)
570+ then nil
571+ else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bm(ep, eq, dK, dO, height, lastBlock.timestamp)), IntegerEntry(S(), dO), IntegerEntry(T(height, lastBlock.timestamp), dO)]
572+ let dV = bs(D(eh, aX), D(eg, aW))
573+ let dW = G(dV, b)
574+ let dX = {
575+ let et = (toInt(fraction(ef, ek, dR)) * 2)
576+ fraction((en - et), b, et)
577+ }
578+ $Tuple4(en, cP, dt, dX)
579+ }
580+ else throw("Strict value is not equal to itself.")
581+ }
582+
583+
584+func eu () = {
585+ let dq = getString(Q())
586+ if ($isInstanceOf(dq, "String"))
587+ then {
588+ let ev = dq
589+ fromBase58String(ev)
590+ }
591+ else if ($isInstanceOf(dq, "Unit"))
592+ then unit
593+ else throw("Match error")
594+ }
595+
596+
597+func ew () = {
598+ let dq = getString(R())
599+ if ($isInstanceOf(dq, "String"))
600+ then {
601+ let ev = dq
602+ fromBase58String(ev)
603+ }
604+ else if ($isInstanceOf(dq, "Unit"))
605+ then unit
606+ else throw("Match error")
607+ }
608+
609+
610+func ex (df) = {
611+ let ey = throw("Permission denied")
612+ let dq = eu()
613+ if ($isInstanceOf(dq, "ByteVector"))
614+ then {
615+ let ez = dq
616+ if ((df.callerPublicKey == ez))
617+ then true
618+ else ey
619+ }
620+ else if ($isInstanceOf(dq, "Unit"))
621+ then if ((df.caller == this))
622+ then true
623+ else ey
624+ else throw("Match error")
625+ }
626+
627+
628+@Callable(df)
629+func setManager (eA) = {
630+ let eB = ex(df)
631+ if ((eB == eB))
632+ then {
633+ let eC = fromBase58String(eA)
634+ if ((eC == eC))
635+ then [StringEntry(R(), eA)]
636+ else throw("Strict value is not equal to itself.")
637+ }
638+ else throw("Strict value is not equal to itself.")
639+ }
640+
641+
642+
643+@Callable(df)
644+func confirmManager () = {
645+ let eD = ew()
646+ let eE = if (isDefined(eD))
647+ then true
648+ else throw("No pending manager")
649+ if ((eE == eE))
650+ then {
651+ let eF = if ((df.callerPublicKey == value(eD)))
652+ then true
653+ else throw("You are not pending manager")
654+ if ((eF == eF))
655+ then [StringEntry(Q(), toBase58String(value(eD))), DeleteEntry(R())]
656+ else throw("Strict value is not equal to itself.")
657+ }
658+ else throw("Strict value is not equal to itself.")
659+ }
660+
661+
662+
663+@Callable(df)
664+func put (ck,eG) = if ((0 > ck))
665+ then throw("Invalid slippageTolerance passed")
666+ else {
667+ let dl = di(df, ck, true)
668+ let cM = dl._2
669+ let bR = dl._7
670+ let ci = dl._9
671+ let cN = dl._10
672+ let cO = dl._11
673+ let eH = dl._12
674+ let eI = dl._13
675+ let do = invoke(aD, "emit", [cM], nil)
676+ if ((do == do))
677+ then {
678+ let dp = {
679+ let dq = do
680+ if ($isInstanceOf(dq, "Address"))
681+ then {
682+ let dr = dq
683+ invoke(dr, "emit", [cM], nil)
684+ }
685+ else unit
686+ }
687+ if ((dp == dp))
688+ then {
689+ let eJ = if ((cN > 0))
690+ then invoke(ba, "put", nil, [AttachedPayment(eH, cN)])
691+ else nil
692+ if ((eJ == eJ))
693+ then {
694+ let eK = if ((cO > 0))
695+ then invoke(ba, "put", nil, [AttachedPayment(eI, cO)])
696+ else nil
697+ if ((eK == eK))
698+ then {
699+ let eL = if (eG)
700+ then {
701+ let eM = invoke(aZ, "stake", nil, [AttachedPayment(bR, cM)])
702+ if ((eM == eM))
703+ then nil
704+ else throw("Strict value is not equal to itself.")
705+ }
706+ else [ScriptTransfer(df.caller, cM, bR)]
707+ (ci ++ eL)
708+ }
709+ else throw("Strict value is not equal to itself.")
710+ }
711+ else throw("Strict value is not equal to itself.")
712+ }
713+ else throw("Strict value is not equal to itself.")
714+ }
715+ else throw("Strict value is not equal to itself.")
716+ }
717+
718+
719+
720+@Callable(df)
721+func putForFree (eN) = if ((0 > eN))
722+ then throw("Invalid value passed")
723+ else {
724+ let dl = di(df, eN, false)
725+ dl._9
726+ }
727+
728+
729+
730+@Callable(df)
731+func putOneTkn (eO,eP) = {
732+ let eQ = {
733+ let eR = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
734+ if ($isInstanceOf(eR, "Boolean"))
735+ then eR
736+ else throw(($getType(eR) + " couldn't be cast to Boolean"))
737+ }
738+ let eS = if (if (if (aF())
739+ then true
740+ else (aS == l))
741+ then true
742+ else (aS == n))
743+ then true
744+ else eQ
745+ let ed = [if (!(eS))
746+ then true
747+ else aB("put operation is blocked by admin"), if ((size(df.payments) == 1))
748+ then true
749+ else aB("exactly 1 payment are expected")]
750+ if ((ed == ed))
751+ then {
752+ let eT = df.payments[0]
753+ let dw = eT.assetId
754+ let dv = eT.amount
755+ let X = df.caller
756+ let Y = df.transactionId
757+ let eU = du(dv, dw, X, Y)
758+ let eV = eU._1
759+ let cP = eU._2
760+ let dt = eU._3
761+ let eW = eU._4
762+ let eX = if (if ((eO > 0))
763+ then (eO > eV)
764+ else false)
765+ then aB(makeString(["amount to receive is less than ", toString(eO)], ""))
766+ else eV
767+ let do = dm(eX)
768+ if ((do == do))
769+ then {
770+ let eL = if (eP)
771+ then {
772+ let eY = invoke(aZ, "stake", nil, [AttachedPayment(aT, eX)])
773+ if ((eY == eY))
774+ then nil
775+ else throw("Strict value is not equal to itself.")
776+ }
777+ else [ScriptTransfer(df.caller, eX, aT)]
778+ let eZ = if ((dt > 0))
779+ then [ScriptTransfer(aE, dt, dw)]
780+ else nil
781+ $Tuple2(((cP ++ eL) ++ eZ), eX)
782+ }
783+ else throw("Strict value is not equal to itself.")
784+ }
785+ else throw("Strict value is not equal to itself.")
786+ }
787+
788+
789+
790+@Callable(df)
791+func putOneTknREADONLY (dw,dv) = {
792+ let fa = du(dv, aK(dw), unit, unit)
793+ let eV = fa._1
794+ let cP = fa._2
795+ let dt = fa._3
796+ let eW = fa._4
797+ $Tuple2(nil, $Tuple3(eV, dt, eW))
798+ }
799+
800+
801+
802+@Callable(df)
803+func getOneTkn (fb,eO) = {
804+ let eQ = {
805+ let eR = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
806+ if ($isInstanceOf(eR, "Boolean"))
807+ then eR
808+ else throw(($getType(eR) + " couldn't be cast to Boolean"))
809+ }
810+ let fc = if (if (aF())
811+ then true
812+ else (aS == n))
813+ then true
814+ else eQ
815+ let ed = [if (!(fc))
816+ then true
817+ else aB("get operation is blocked by admin"), if ((size(df.payments) == 1))
818+ then true
819+ else aB("exactly 1 payment are expected")]
820+ if ((ed == ed))
821+ then {
822+ let ec = aK(fb)
823+ let eT = df.payments[0]
824+ let dw = eT.assetId
825+ let dK = eT.amount
826+ let X = df.caller
827+ let Y = df.transactionId
828+ let fd = eb(ec, dK, dw, X, Y)
829+ let fe = fd._1
830+ let cP = fd._2
831+ let dt = fd._3
832+ let eW = fd._4
833+ let dn = if (if ((eO > 0))
834+ then (eO > fe)
835+ else false)
836+ then aB(makeString(["amount to receive is less than ", toString(eO)], ""))
837+ else fe
838+ let ff = invoke(aD, "burn", [dK], [AttachedPayment(dw, dK)])
839+ if ((ff == ff))
840+ then {
841+ let fg = [ScriptTransfer(X, dn, ec)]
842+ let eZ = if ((dt > 0))
843+ then [ScriptTransfer(aE, dt, ec)]
844+ else nil
845+ $Tuple2(((cP ++ fg) ++ eZ), dn)
846+ }
847+ else throw("Strict value is not equal to itself.")
848+ }
849+ else throw("Strict value is not equal to itself.")
850+ }
851+
852+
853+
854+@Callable(df)
855+func getOneTknREADONLY (ec,dK) = {
856+ let fh = eb(aK(ec), dK, aT, unit, unit)
857+ let fe = fh._1
858+ let cP = fh._2
859+ let dt = fh._3
860+ let eW = fh._4
861+ $Tuple2(nil, $Tuple3(fe, dt, eW))
862+ }
863+
864+
865+
866+@Callable(df)
867+func unstakeAndGetOneTkn (fi,fb,eO) = {
868+ let eQ = {
869+ let eR = invoke(aD, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
870+ if ($isInstanceOf(eR, "Boolean"))
871+ then eR
872+ else throw(($getType(eR) + " couldn't be cast to Boolean"))
873+ }
874+ let fc = if (if (aF())
875+ then true
876+ else (aS == n))
877+ then true
878+ else eQ
879+ let ed = [if (!(fc))
880+ then true
881+ else aB("get operation is blocked by admin"), if ((size(df.payments) == 0))
882+ then true
883+ else aB("no payments are expected")]
884+ if ((ed == ed))
885+ then {
886+ let ec = aK(fb)
887+ let X = df.caller
888+ let Y = df.transactionId
889+ let fj = invoke(aZ, "unstake", [toBase58String(aT), fi], nil)
890+ if ((fj == fj))
891+ then {
892+ let fk = eb(ec, fi, aT, X, Y)
893+ let fe = fk._1
894+ let cP = fk._2
895+ let dt = fk._3
896+ let eW = fk._4
897+ let dn = if (if ((eO > 0))
898+ then (eO > fe)
899+ else false)
900+ then aB(makeString(["amount to receive is less than ", toString(eO)], ""))
901+ else fe
902+ let ff = invoke(aD, "burn", [fi], [AttachedPayment(aT, fi)])
903+ if ((ff == ff))
904+ then {
905+ let fg = [ScriptTransfer(df.caller, dn, ec)]
906+ let eZ = if ((dt > 0))
907+ then [ScriptTransfer(aE, dt, ec)]
908+ else nil
909+ $Tuple2(((cP ++ fg) ++ eZ), dn)
910+ }
911+ else throw("Strict value is not equal to itself.")
912+ }
913+ else throw("Strict value is not equal to itself.")
914+ }
915+ else throw("Strict value is not equal to itself.")
916+ }
917+
918+
919+
920+@Callable(df)
921+func get () = {
922+ let cA = de(df)
923+ let fl = cA._1
924+ let ch = cA._2
925+ let dh = cA._3
926+ let bP = cA._4
927+ let ci = cA._5
928+ let fm = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
929+ if ((fm == fm))
930+ then ci
931+ else throw("Strict value is not equal to itself.")
932+ }
933+
934+
935+
936+@Callable(df)
937+func getNoLess (fn,fo) = {
938+ let cA = de(df)
939+ let cg = cA._1
940+ let ch = cA._2
941+ let dh = cA._3
942+ let bP = cA._4
943+ let ci = cA._5
944+ if ((fn > cg))
945+ then throw(((("noLessThenAmtAsset failed: " + toString(cg)) + " < ") + toString(fn)))
946+ else if ((fo > ch))
947+ then throw(((("noLessThenPriceAsset failed: " + toString(ch)) + " < ") + toString(fo)))
948+ else {
949+ let fm = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
950+ if ((fm == fm))
951+ then ci
952+ else throw("Strict value is not equal to itself.")
953+ }
954+ }
955+
956+
957+
958+@Callable(df)
959+func unstakeAndGet (dn) = {
960+ let fp = if ((size(df.payments) != 0))
961+ then throw("No payments are expected")
962+ else true
963+ if ((fp == fp))
964+ then {
965+ let bE = aH()
966+ let bR = fromBase58String(bE[q])
967+ let fj = invoke(aZ, "unstake", [toBase58String(bR), dn], nil)
968+ if ((fj == fj))
969+ then {
970+ let cA = bN(toBase58String(df.transactionId), toBase58String(bR), dn, df.caller)
971+ let bU = parseIntValue(cA._9)
972+ let ci = cA._10
973+ let fq = if (if (aF())
974+ then true
975+ else (bU == n))
976+ then throw(("Get operation is blocked by admin. Status = " + toString(bU)))
977+ else true
978+ if ((fq == fq))
979+ then {
980+ let fm = invoke(aD, "burn", [dn], [AttachedPayment(bR, dn)])
981+ if ((fm == fm))
982+ then ci
983+ else throw("Strict value is not equal to itself.")
984+ }
985+ else throw("Strict value is not equal to itself.")
986+ }
987+ else throw("Strict value is not equal to itself.")
988+ }
989+ else throw("Strict value is not equal to itself.")
990+ }
991+
992+
993+
994+@Callable(df)
995+func unstakeAndGetNoLess (fi,fr,fo) = {
996+ let fc = if (aF())
997+ then true
998+ else (aS == n)
999+ let ed = [if (!(fc))
1000+ then true
1001+ else throw("get operation is blocked by admin"), if ((size(df.payments) == 0))
1002+ then true
1003+ else throw("no payments are expected")]
1004+ if ((ed == ed))
1005+ then {
1006+ let fj = invoke(aZ, "unstake", [toBase58String(aT), fi], nil)
1007+ if ((fj == fj))
1008+ then {
1009+ let cA = bN(toBase58String(df.transactionId), toBase58String(aT), fi, df.caller)
1010+ let cg = cA._1
1011+ let ch = cA._2
1012+ let ci = cA._10
1013+ let fs = [if ((cg >= fr))
1014+ then true
1015+ else throw(makeString(["amount asset amount to receive is less than ", toString(fr)], "")), if ((ch >= fo))
1016+ then true
1017+ else throw(makeString(["price asset amount to receive is less than ", toString(fo)], ""))]
1018+ if ((fs == fs))
1019+ then {
1020+ let fm = invoke(aD, "burn", [fi], [AttachedPayment(aT, fi)])
1021+ if ((fm == fm))
1022+ then ci
1023+ else throw("Strict value is not equal to itself.")
1024+ }
1025+ else throw("Strict value is not equal to itself.")
1026+ }
1027+ else throw("Strict value is not equal to itself.")
1028+ }
1029+ else throw("Strict value is not equal to itself.")
1030+ }
1031+
1032+
1033+
1034+@Callable(df)
1035+func activate (ft,fu) = if ((toString(df.caller) != toString(aD)))
1036+ then throw("permissions denied")
1037+ else $Tuple2([StringEntry(aa(), ft), StringEntry(ab(), fu)], "success")
1038+
1039+
1040+
1041+@Callable(df)
1042+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aH())
1043+
1044+
1045+
1046+@Callable(df)
1047+func getAccBalanceWrapperREADONLY (br) = $Tuple2(nil, bq(br))
1048+
1049+
1050+
1051+@Callable(df)
1052+func calcPricesWrapperREADONLY (by,bz,bD) = {
1053+ let bM = bC(by, bz, bD)
1054+ $Tuple2(nil, [toString(bM[0]), toString(bM[1]), toString(bM[2])])
1055+ }
1056+
1057+
1058+
1059+@Callable(df)
1060+func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
1061+
1062+
1063+
1064+@Callable(df)
1065+func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
1066+
1067+
1068+
1069+@Callable(df)
1070+func calcPriceBigIntWrapperREADONLY (bt,bu) = $Tuple2(nil, toString(bs(parseBigIntValue(bt), parseBigIntValue(bu))))
1071+
1072+
1073+
1074+@Callable(df)
1075+func estimatePutOperationWrapperREADONLY (bO,ck,cl,cm,cn,co,X,cp,cq) = $Tuple2(nil, cj(bO, ck, cl, cm, cn, co, X, cp, cq))
1076+
1077+
1078+
1079+@Callable(df)
1080+func estimateGetOperationWrapperREADONLY (bO,bP,bQ,X) = {
1081+ let cA = bN(bO, bP, bQ, addressFromStringValue(X))
1082+ $Tuple2(nil, $Tuple10(cA._1, cA._2, cA._3, cA._4, cA._5, cA._6, cA._7, toString(cA._8), cA._9, cA._10))
1083+ }
1084+
1085+
1086+
1087+@Callable(df)
1088+func statsREADONLY () = {
1089+ let bE = aH()
1090+ let bR = fromBase58String(bE[q])
1091+ let cS = bE[r]
1092+ let cT = bE[s]
1093+ let ct = bE[v]
1094+ let cu = bE[w]
1095+ let bF = parseIntValue(bE[t])
1096+ let bG = parseIntValue(bE[u])
1097+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1098+ let cU = bq(cS)
1099+ let cV = bq(cT)
1100+ let fw = if ((fv == 0))
1101+ then [e, e, e]
1102+ else bC(cU, cV, fv)
1103+ let cb = 0
1104+ let fx = G(fw[1], b)
1105+ let fy = G(fw[2], b)
1106+ let fz = value(getInteger(aD, ap(toString(this))))
1107+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cU), toString(cV), toString(fv), toString(cb), toString(fx), toString(fy), toString(fz)], j))
1108+ }
1109+
1110+
1111+
1112+@Callable(df)
1113+func evaluatePutByAmountAssetREADONLY (cl) = {
1114+ let bE = aH()
1115+ let bR = fromBase58String(bE[q])
1116+ let cr = bE[r]
1117+ let bS = fromBase58String(cr)
1118+ let cs = bE[s]
1119+ let bT = fromBase58String(cs)
1120+ let bF = parseIntValue(bE[t])
1121+ let bG = parseIntValue(bE[u])
1122+ let bU = bE[p]
1123+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1124+ let cU = bq(cr)
1125+ let cV = bq(cs)
1126+ let bA = D(cU, bF)
1127+ let bB = D(cV, bG)
1128+ let ca = if ((fv == 0))
1129+ then e
1130+ else bs(bB, bA)
1131+ let cx = D(cl, bF)
1132+ let cy = fraction(cx, ca, d)
1133+ let cn = G(cy, bG)
1134+ let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
1135+ let cI = dl._1
1136+ let fA = dl._3
1137+ let bW = dl._4
1138+ let bY = dl._5
1139+ let bV = dl._6
1140+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cI), toString(G(ca, b)), toString(bW), toString(bY), toString(bV), bU, toString(cl), toString(cn)], j))
1141+ }
1142+
1143+
1144+
1145+@Callable(df)
1146+func evaluatePutByPriceAssetREADONLY (cn) = {
1147+ let bE = aH()
1148+ let bR = fromBase58String(bE[q])
1149+ let cr = bE[r]
1150+ let bS = fromBase58String(cr)
1151+ let cs = bE[s]
1152+ let bT = fromBase58String(cs)
1153+ let bF = parseIntValue(bE[t])
1154+ let bG = parseIntValue(bE[u])
1155+ let bU = bE[p]
1156+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1157+ let fB = bq(cr)
1158+ let fC = bq(cs)
1159+ let fD = D(fB, bF)
1160+ let fE = D(fC, bG)
1161+ let ca = if ((fv == 0))
1162+ then e
1163+ else bs(fE, fD)
1164+ let cy = D(cn, bG)
1165+ let cx = fraction(cy, d, ca)
1166+ let cl = G(cx, bF)
1167+ let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
1168+ let cI = dl._1
1169+ let fA = dl._3
1170+ let bW = dl._4
1171+ let bY = dl._5
1172+ let bV = dl._6
1173+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cI), toString(G(ca, b)), toString(bW), toString(bY), toString(bV), bU, toString(cl), toString(cn)], j))
1174+ }
1175+
1176+
1177+
1178+@Callable(df)
1179+func evaluateGetREADONLY (fF,fG) = {
1180+ let cA = bN("", fF, fG, this)
1181+ let cg = cA._1
1182+ let ch = cA._2
1183+ let bW = cA._5
1184+ let bY = cA._6
1185+ let bV = cA._7
1186+ let cb = cA._8
1187+ let bU = parseIntValue(cA._9)
1188+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cg), toString(ch), toString(bW), toString(bY), toString(bV), toString(cb), toString(bU)], j))
1189+ }
1190+
1191+
1192+@Verifier(fH)
1193+func fI () = {
1194+ let fJ = {
1195+ let dq = eu()
1196+ if ($isInstanceOf(dq, "ByteVector"))
1197+ then {
1198+ let ez = dq
1199+ ez
1200+ }
1201+ else if ($isInstanceOf(dq, "Unit"))
1202+ then fH.senderPublicKey
1203+ else throw("Match error")
1204+ }
1205+ let dq = fH
1206+ if ($isInstanceOf(dq, "Order"))
1207+ then {
1208+ let cR = dq
1209+ let fK = aG()
1210+ let au = cQ(cR)
1211+ let av = sigVerify(cR.bodyBytes, cR.proofs[0], cR.senderPublicKey)
1212+ let aw = sigVerify(cR.bodyBytes, cR.proofs[1], fK)
1213+ if (if (if (au)
1214+ then av
1215+ else false)
1216+ then aw
1217+ else false)
1218+ then true
1219+ else at(au, av, aw)
1220+ }
1221+ else if ($isInstanceOf(dq, "SetScriptTransaction"))
1222+ then {
1223+ let ev = dq
1224+ let fL = blake2b256(value(ev.script))
1225+ let fM = fromBase64String(value(getString(aD, ar())))
1226+ let fN = scriptHash(this)
1227+ if (if ((fM == fL))
1228+ then (fN != fL)
1229+ else false)
1230+ then true
1231+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
1232+ }
1233+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
1234+ }
1235+

github/deemru/w8io/169f3d6 
55.70 ms