tx · 3NSjPRFkQBV7imW7QJVVUEgG5MZSoqzdnikEg9b7JKMB

3N32tQmmrYnh4Nf3uwwpC5mvBav21uS4Npm:  -0.01400000 Waves

2021.05.20 02:39 [1533220] smart account 3N32tQmmrYnh4Nf3uwwpC5mvBav21uS4Npm > SELF 0.00000000 Waves

{ "type": 13, "id": "3NSjPRFkQBV7imW7QJVVUEgG5MZSoqzdnikEg9b7JKMB", "fee": 1400000, "feeAssetId": null, "timestamp": 1621467558660, "version": 2, "chainId": 84, "sender": "3N32tQmmrYnh4Nf3uwwpC5mvBav21uS4Npm", "senderPublicKey": "3W4UxWT2M3gKvVSQsrwnuRWF6HoCoZ7gHx86DdQUEnWj", "proofs": [ "4fdcWo3i3mcyMiyiN34qCEDYSs36ie6rZWTiTGUJ6fmo3Cz1qzbwQUhCAFrgs8FCpfbfuyZBHoFCUNcusmZxUAEh" ], "script": "base64:AAIEAAAAAAAAACoIAhIDCgEEEgcKBQEBCAgEEgMKAQESAwoBARIAEgMKAQESABIAEgMKAQEAAABEAAAAAAd2ZXJzaW9uAgAAAAUxLjAuMAAAAAAKa2V5VmVyc2lvbgIAAAAHdmVyc2lvbgAAAAAJa2V5QWN0aXZlAgAAAAZhY3RpdmUAAAAAC2tleUFzc2V0SWRBAgAAAApBX2Fzc2V0X2lkAAAAAAtrZXlBc3NldElkQgIAAAAKQl9hc3NldF9pZAAAAAALa2V5QmFsYW5jZUECAAAAD0FfYXNzZXRfYmFsYW5jZQAAAAALa2V5QmFsYW5jZUICAAAAD0JfYXNzZXRfYmFsYW5jZQAAAAAPa2V5QmFsYW5jZUluaXRBAgAAAAxBX2Fzc2V0X2luaXQAAAAAD2tleUJhbGFuY2VJbml0QgIAAAAMQl9hc3NldF9pbml0AAAAAA9rZXlTaGFyZUFzc2V0SWQCAAAADnNoYXJlX2Fzc2V0X2lkAAAAABNrZXlTaGFyZUFzc2V0U3VwcGx5AgAAABJzaGFyZV9hc3NldF9zdXBwbHkAAAAADWtleUNvbW1pc3Npb24CAAAACmNvbW1pc3Npb24AAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgIAAAAaY29tbWlzc2lvbl9zY2FsZV9kZWxpbWl0ZXIAAAAACGtleUNhdXNlAgAAAA5zaHV0ZG93bl9jYXVzZQAAAAAPa2V5Rmlyc3RIYXJ2ZXN0AgAAAA1maXJzdF9oYXJ2ZXN0AAAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQCAAAAFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AAAAAAtrU2hhcmVMaW1pdAIAAAAcc2hhcmVfbGltaXRfb25fZmlyc3RfaGFydmVzdAAAAAALa0Jhc2VQZXJpb2QCAAAAC2Jhc2VfcGVyaW9kAAAAAA1rUGVyaW9kTGVuZ3RoAgAAAA1wZXJpb2RfbGVuZ3RoAAAAAAxrU3RhcnRIZWlnaHQCAAAADHN0YXJ0X2hlaWdodAAAAAATa0ZpcnN0SGFydmVzdEhlaWdodAIAAAAUZmlyc3RfaGFydmVzdF9oZWlnaHQAAAAADGFkbWluUHViS2V5MQEAAAAgBM915WTQwQ9OZ7kfE2TEGg3qhCRCMX0zkF1AWAqdk0oAAAAA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AAAEVVNETgIAAAABXwkABCUAAAABBQAAAAR0aGlzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAABnN0YWtlZAUAAAAHJG1hdGNoMAUAAAAGc3Rha2VkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BAAAAAdub3RoaW5nBQAAAAckbWF0Y2gwAAAAAAAAAAAACQAAAgAAAAECAAAAC01hdGNoIGVycm9yAAAAAAphc3NldEluaXRBCQEAAAARQGV4dHJOYXRpdmUoMTA1MCkAAAACBQAAAAR0aGlzBQAAAA9rZXlCYWxhbmNlSW5pdEEAAAAACmFzc2V0SW5pdEIJAQAAABFAZXh0ck5hdGl2ZSgxMDUwKQAAAAIFAAAABHRoaXMFAAAAD2tleUJhbGFuY2VJbml0QgAAAAARYXZhaWxhYmxlQmFsYW5jZUEJAABlAAAAAgUAAAAIYmFsYW5jZUEDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROBQAAABBzdGFrZWRBbW91bnRVU0ROAAAAAAAAAAAAAAAAABFhdmFpbGFibGVCYWxhbmNlQgkAAGUAAAACBQAAAAhiYWxhbmNlQgMJAAAAAAAAAgUAAAAIYXNzZXRJZEIFAAAABFVTRE4FAAAAEHN0YWtlZEFtb3VudFVTRE4AAAAAAAAAAAAAAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEJAABkAAAAAgkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEEDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROBQAAABBzdGFrZWRBbW91bnRVU0ROAAAAAAAAAAAAAAAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCCQAAZAAAAAIJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRCAwkAAAAAAAACBQAAAAhhc3NldElkQgUAAAAEVVNETgUAAAAQc3Rha2VkQW1vdW50VVNETgAAAAAAAAAAAAAAAAAQaGFzRW5vdWdoQmFsYW5jZQMJAABnAAAAAgUAAAAZYWNjb3VudEJhbGFuY2VXaXRoU3Rha2VkQQUAAAAIYmFsYW5jZUEJAABnAAAAAgUAAAAZYWNjb3VudEJhbGFu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YW1lQgIAAAAMIGF0IGFkZHJlc3MgCQAEJQAAAAEFAAAABHRoaXMEAAAADXNoYXJlRGVjaW1hbHMJAABpAAAAAgkAAGQAAAACBQAAAAxwbXREZWNpbWFsc0EFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAAAgQAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAAawAAAAMJAABsAAAABgUAAAAKcG10QW1vdW50QQUAAAAMcG10RGVjaW1hbHNBAAAAAAAAAAAFAAAAAAAAAAABBQAAAAxwbXREZWNpbWFsc0EFAAAACEhBTEZET1dOCQAAbAAAAAYFAAAACnBtdEFtb3VudEIFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAABQAAAAAAAAAAAQUAAAAMcG10RGVjaW1hbHNCBQAAAAhIQUxGRE9XTgkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAA1zaGFyZURlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAAhIQUxGRE9XTgQAAAAKc2hhcmVJc3N1ZQkABEIAAAAFBQAAAAlzaGFyZU5hbWUFAAAAEHNoYXJlRGVzY3JpcHRpb24FAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAANc2hhcmVEZWNpbWFscwYEAAAADHNoYXJlSXNzdWVJZAkABDgAAAABBQAAAApzaGFyZUlzc3VlBAAAAAliYXNlRW50cnkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAKa2V5VmVyc2lvbgUAAAAHdmVyc2lvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAJa2V5QWN0aXZlBgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQQUAAAAOcG10U3RyQXNzZXRJZEEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALa2V5QXNzZXRJZEIFAAAADnBtdFN0ckFzc2V0SWRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAAKcG10QW1vdW50QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUIFAAAACnBtdEFtb3VudEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADWtleUNvbW1pc3Npb24FAAAACmNvbW1pc3Npb24JAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAG2tleUNvbW1pc3Npb25TY2FsZURlbGltaXRlcgUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyCQAETAAAAAIFAAAACnNoYXJlSXNzdWUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAPa2V5U2hhcmVBc3NldElkCQACWAAAAAEFAAAADHNoYXJlSXNzdWVJZAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQUAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAASc2hhcmVJbml0aWFsU3VwcGx5BQAAAAxzaGFyZUlzc3VlSWQFAAAAA25pbAMFAAAADGZpcnN0SGFydmVzdAkABE4AAAACBQAAAAliYXNlRW50cnkJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIFAAAAD2tleUZpcnN0SGFydmVzdAUAAAAMZmlyc3RIYXJ2ZXN0CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQJAABkAAAAAgUAAAALc3RhcnRIZWlnaHQJAABoAAAAAgUAAAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kBQAAAAxwZXJpb2RMZW5ndGgFAAAAA25pbAUAAAAJYmFzZUVudHJ5AAAAAWkBAAAAEWluaXRXaXRoSW5pdFJhdGlvAAAABQAAAAlhbXRBc3NldEEAAAAJYW10QXNzZXRCAAAAC3N0ckFzc2V0SWRBAAAAC3N0ckFzc2V0SWRCAAAADGZpcnN0SGFydmVzdAQAAAALJHQwODU5NDg2ODEJAQAAABZnZXRBc3NldEluZm9Gcm9tU3RyaW5nAAAAAQUAAAALc3RyQXNzZXRJZEEEAAAADnBtdFN0ckFzc2V0SWRBCAUAAAALJHQwODU5NDg2ODEAAAACXzEEAAAADXBtdEFzc2V0TmFtZUEIBQAAAAskdDA4NTk0ODY4MQAAAAJfMgQAAAAMcG10RGVjaW1hbHNBCAUAAAALJHQwODU5NDg2ODEAAAACXzMEAAAACyR0MDg2ODY4NzczCQEAAAAWZ2V0QXNzZXRJbmZvRnJvbVN0cmluZwAAAAEFAAAAC3N0ckFzc2V0SWRCBAAAAA5wbXRTdHJBc3NldElkQggFAAAACyR0MDg2ODY4NzczAAAAAl8xBAAAAA1wbXRBc3NldE5hbWVCCAUAAAALJHQwODY4Njg3NzMAAAACXzIEAAAADHBtdERlY2ltYWxzQggFAAAACyR0MDg2ODY4NzczAAAAAl8zAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABJhZG1pblB1YktleVN0YWtpbmcFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQAAAAlpc0RlZmluZWQAAAABCQAEGwAAAAIFAAAABHRoaXMFAAAACWtleUFjdGl2ZQkAAAIAAAABAgAAABZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkAAAAAAAACBQAAAAtzdHJBc3NldElkQQUAAAALc3RyQXNzZXRJZEIJAAACAAAAAQIAAAAYQXNzZXRzIG11c3QgYmUgZGlmZmVyZW50BAAAAAlzaGFyZU5hbWUJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAAXMJAAEvAAAAAgUAAAANcG10QXNzZXROYW1lQQAAAAAAAAAABwIAAAABXwkAAS8AAAACBQAAAA1wbXRBc3NldE5hbWVCAAAAAAAAAAAHBAAAABBzaGFyZURlc2NyaXB0aW9uCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAiU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIAUAAAANcG10QXNzZXROYW1lQQIAAAAFIGFuZCAFAAAADXBtdEFzc2V0TmFtZUICAAAADCBhdCBhZGRyZXNzIAkABCUAAAABBQAAAAR0aGlzBAAAAA1zaGFyZURlY2ltYWxzCQAAaQAAAAIJAABkAAAAAgUAAAAMcG10RGVjaW1hbHNBBQAAAAxwbXREZWNpbWFsc0IAAAAAAAAAAAIEAAAAEnNoYXJlSW5pdGlhbFN1cHBseQAAAAAAAAAAAAQAAAAKc2hhcmVJc3N1ZQkABEIAAAAFBQAAAAlzaGFyZU5hbWUFAAAAEHNoYXJlRGVzY3JpcHRpb24FAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAANc2hhcmVEZWNpbWFscwYEAAAADHNoYXJlSXNzdWVJZAkABDgAAAABBQAAAApzaGFyZUlzc3VlBAAAAAliYXNlRW50cnkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAAKa2V5VmVyc2lvbgUAAAAHdmVyc2lvbgkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAJa2V5QWN0aXZlBgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAtrZXlBc3NldElkQQUAAAAOcG10U3RyQXNzZXRJZEEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgUAAAALa2V5QXNzZXRJZEIFAAAADnBtdFN0ckFzc2V0SWRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9rZXlCYWxhbmNlSW5pdEEFAAAACWFtdEFzc2V0QQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAPa2V5QmFsYW5jZUluaXRCBQAAAAlhbXRBc3NldEIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBAAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgAAAAAAAAAAAAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAANa2V5Q29tbWlzc2lvbgUAAAAKY29tbWlzc2lvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAba2V5Q29tbWlzc2lvblNjYWxlRGVsaW1pdGVyBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIJAARMAAAAAgUAAAAKc2hhcmVJc3N1ZQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAA9rZXlTaGFyZUFzc2V0SWQJAAJYAAAAAQUAAAAMc2hhcmVJc3N1ZUlkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABVrZXlGaXJzdEhhcnZlc3RIZWlnaHQJAABkAAAAAgUAAAALc3RhcnRIZWlnaHQJAABoAAAAAgUAAAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kBQAAAAxwZXJpb2RMZW5ndGgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAE2tleVNoYXJlQXNzZXRTdXBwbHkFAAAAEnNoYXJlSW5pdGlhbFN1cHBseQUAAAADbmlsAwUAAAAMZmlyc3RIYXJ2ZXN0CQAETgAAAAIFAAAACWJhc2VFbnRyeQkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgUAAAAPa2V5Rmlyc3RIYXJ2ZXN0BQAAAAxmaXJzdEhhcnZlc3QJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAFWtleUZpcnN0SGFydmVzdEhlaWdodAkAAGQAAAACBQAAAAtzdGFydEhlaWdodAkAAGgAAAACBQAAABVmaXJzdEhhcnZlc3RFbmRQZXJpb2QFAAAADHBlcmlvZExlbmd0aAUAAAADbmlsBQAAAAliYXNlRW50cnkAAAABaQEAAAAYa2VlcExpbWl0Rm9yRmlyc3RIYXJ2ZXN0AAAAAQAAAApzaGFyZUxpbWl0AwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAAB9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABJhZG1pblB1YktleVN0YWtpbmcFAAAAA25pbAgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQAAAgAAAAECAAAAIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa1NoYXJlTGltaXQFAAAACnNoYXJlTGltaXQFAAAAA25pbAAAAAFpAQAAABZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zAAAAAQAAABFzbGlwcGFnZVRvbGVyYW5jZQQAAAALcG10QXNzZXRJZEEICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAAC3BtdEFzc2V0SWRCCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQAAAAdhc3NldElkBAAAAApwbXRBbW91bnRBCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAUAAAALcG10QXNzZXRJZEEEAAAACnBtdEFtb3VudEIJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAggJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEAAAAGYW1vdW50BQAAAAtwbXRBc3NldElkQgMDCQAAAAAAAAIFAAAACGJhbGFuY2VBAAAAAAAAAAAACQAAAAAAAAIFAAAACGJhbGFuY2VCAAAAAAAAAAAABwQAAAANJHQwMTE1NTkxMTYzNgkBAAAADGdldEFzc2V0SW5mbwAAAAEFAAAAC3BtdEFzc2V0SWRBBAAAAA5wbXRTdHJBc3NldElkQQgFAAAADSR0MDExNTU5MTE2MzYAAAACXzEEAAAADXBtdEFzc2V0TmFtZUEIBQAAAA0kdDAxMTU1OTExNjM2AAAAAl8yBAAAAAxwbXREZWNpbWFsc0EIBQAAAA0kdDAxMTU1OTExNjM2AAAAAl8zBAAAAA0kdDAxMTY0NTExNzIyCQEAAAAMZ2V0QXNzZXRJbmZvAAAAAQUAAAALcG10QXNzZXRJZEIEAAAADnBtdFN0ckFzc2V0SWRCCAUAAAANJHQwMTE2NDUxMTcyMgAAAAJfMQQAAAANcG10QXNzZXROYW1lQggFAAAADSR0MDExNjQ1MTE3MjIAAAACXzIEAAAADHBtdERlY2ltYWxzQggFAAAADSR0MDExNjQ1MTE3MjIAAAACXzMEAAAACnRva2VuUmF0aW8JAABrAAAAAwkAAGsAAAADBQAAAAphc3NldEluaXRBBQAAAAtzY2FsZVZhbHVlOAUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTMJAABrAAAAAwUAAAAKYXNzZXRJbml0QgUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEIDCQAAAAAAAAIFAAAAC3BtdEFzc2V0SWRBBQAAAAtwbXRBc3NldElkQgkAAAIAAAABAgAAABhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQEAAAADXNoYXJlRGVjaW1hbHMJAABpAAAAAgkAAGQAAAACBQAAAAxwbXREZWNpbWFsc0EFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAAAgQAAAASc2hhcmVJbml0aWFsU3VwcGx5CQAAawAAAAMJAABsAAAABgUAAAAKcG10QW1vdW50QQUAAAAMcG10RGVjaW1hbHNBAAAAAAAAAAAFAAAAAAAAAAABBQAAAAxwbXREZWNpbWFsc0EFAAAACEhBTEZET1dOCQAAbAAAAAYFAAAACnBtdEFtb3VudEIFAAAADHBtdERlY2ltYWxzQgAAAAAAAAAABQAAAAAAAAAAAQUAAAAMcG10RGVjaW1hbHNCBQAAAAhIQUxGRE9XTgkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAABQAAAA1zaGFyZURlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAAhIQUxGRE9XTgMJAQAAAAEhAAAAAQUAAAAIaXNBY3RpdmUJAAACAAAAAQIAAAAfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBgkAAGYAAAACBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAApU2xpcHBhZ2UgdG9sZXJhbmNlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAJAAGkAAAAAQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXICAAAAFiBpbmNsdXNpdmVseS4gQWN0dWFsOiAJAAGkAAAAAQUAAAARc2xpcHBhZ2VUb2xlcmFuY2UDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAACCQAAAgAAAAECAAAAHFR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQDAwkAAGYAAAACCQAAaQAAAAIJAABoAAAAAgUAAAALc2NhbGVWYWx1ZTMJAABlAAAAAgUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAAEXNsaXBwYWdlVG9sZXJhbmNlBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAAKdG9rZW5SYXRpbwYJAABmAAAAAgUAAAAKdG9rZW5SYXRpbwkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZAAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIJAAACAAAAAQIAAAA9SW5jb3JyZWN0IGFzc2V0cyBhbW91bnQ6IGFtb3VudHMgbXVzdCBoYXZlIHRoZSBjb250cmFjdCByYXRpbwMDCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQQUAAAAIYXNzZXRJZEEGCQEAAAACIT0AAAACBQAAAAtwbXRBc3NldElkQgUAAAAIYXNzZXRJZEIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAlSW5jb3JyZWN0IGFzc2V0cyBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAUAAAALc3RyQXNzZXRJZEECAAAABSBhbmQgBQAAAAtzdHJBc3NldElkQgMJAAAAAAAAAgUAAAASc2hhcmVJbml0aWFsU3VwcGx5AAAAAAAAAAAACQAAAgAAAAECAAAAHVRvbyBzbWFsbCBhbW91bnQgdG8gcmVwbGVuaXNoAwkBAAAAASEAAAABBQAAABBoYXNFbm91Z2hCYWxhbmNlCQEAAAAHc3VzcGVuZAAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAI1N1c3BpY2lvdXMgc3RhdGUuIEFjdHVhbCBiYWxhbmNlczogCQABpAAAAAEFAAAACGJhbGFuY2VBAgAAAAEgBQAAAAphc3NldE5hbWVBAgAAAAIsIAkAAaQAAAABBQAAAAhiYWxhbmNlQgIAAAABIAUAAAAKYXNzZXROYW1lQgIAAAAJLiBTdGF0ZTogCQABpAAAAAEJAQAAAA5hY2NvdW50QmFsYW5jZQAAAAEFAAAACGFzc2V0SWRBAgAAAAEgBQAAAAphc3NldE5hbWVBAgAAAAIsIAkAAaQAAAABCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQgIAAAABIAUAAAAKYXNzZXROYW1lQgkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAASc2hhcmVJbml0aWFsU3VwcGx5BgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAALa2V5QmFsYW5jZUEFAAAACnBtdEFtb3VudEEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAApwbXRBbW91bnRCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5BQAAABJzaGFyZUluaXRpYWxTdXBwbHkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABJzaGFyZUluaXRpYWxTdXBwbHkFAAAADHNoYXJlQXNzZXRJZAUAAAADbmlsBAAAAAp0b2tlblJhdGlvCQAAawAAAAMJAABrAAAAAwUAAAAIYmFsYW5jZUEFAAAAC3NjYWxlVmFsdWU4BQAAAApwbXRBbW91bnRBBQAAAAtzY2FsZVZhbHVlMwkAAGsAAAADBQAAAAhiYWxhbmNlQgUAAAALc2NhbGVWYWx1ZTgFAAAACnBtdEFtb3VudEIEAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkEJAABrAAAAAwUAAAAKcG10QW1vdW50QQUAAAALc2NhbGVWYWx1ZTgFAAAACGJhbGFuY2VBBAAAABNyYXRpb1NoYXJlVG9rZW5zSW5CCQAAawAAAAMFAAAACnBtdEFtb3VudEIFAAAAC3NjYWxlVmFsdWU4BQAAAAhiYWxhbmNlQgQAAAAVc2hhcmVUb2tlblRvUGF5QW1vdW50CQAAawAAAAMJAAGXAAAAAQkABEwAAAACBQAAABNyYXRpb1NoYXJlVG9rZW5zSW5BCQAETAAAAAIFAAAAE3JhdGlvU2hhcmVUb2tlbnNJbkIFAAAAA25pbAUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAALc2NhbGVWYWx1ZTgDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDAwkAAGYAAAACAAAAAAAAAAAABQAAABFzbGlwcGFnZVRvbGVyYW5jZQYJAABmAAAAAgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAKVNsaXBwYWdlIHRvbGVyYW5jZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgCQABpAAAAAEFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyAgAAABYgaW5jbHVzaXZlbHkuIEFjdHVhbDogCQABpAAAAAEFAAAAEXNsaXBwYWdlVG9sZXJhbmNlAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAgkAAAIAAAABAgAAABxUd28gYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkAwMJAQAAAAIhPQAAAAIFAAAAC3BtdEFzc2V0SWRBBQAAAAhhc3NldElkQQYJAQAAAAIhPQAAAAIFAAAAC3BtdEFzc2V0SWRCBQAAAAhhc3NldElkQgkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACVJbmNvcnJlY3QgYXNzZXRzIGF0dGFjaGVkLiBFeHBlY3RlZDogBQAAAAtzdHJBc3NldElkQQIAAAAFIGFuZCAFAAAAC3N0ckFzc2V0SWRCAwMJAABmAAAAAgkAAGkAAAACCQAAaAAAAAIFAAAAC3NjYWxlVmFsdWUzCQAAZQAAAAIFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyBQAAABFzbGlwcGFnZVRvbGVyYW5jZQUAAAAac2xpcHBhZ2VUb2xlcmFuY2VEZWxpbWl0ZXIFAAAACnRva2VuUmF0aW8GCQAAZgAAAAIFAAAACnRva2VuUmF0aW8JAABpAAAAAgkAAGgAAAACBQAAAAtzY2FsZVZhbHVlMwkAAGQAAAACBQAAABpzbGlwcGFnZVRvbGVyYW5jZURlbGltaXRlcgUAAAARc2xpcHBhZ2VUb2xlcmFuY2UFAAAAGnNsaXBwYWdlVG9sZXJhbmNlRGVsaW1pdGVyCQAAAgAAAAECAAAAPUluY29ycmVjdCBhc3NldHMgYW1vdW50OiBhbW91bnRzIG11c3QgaGF2ZSB0aGUgY29udHJhY3QgcmF0aW8DCQAAAAAAAAIFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAAAAAAAAAAAAAkAAAIAAAABAgAAAB1Ub28gc21hbGwgYW1vdW50IHRvIHJlcGxlbmlzaAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkBAAAAB3N1c3BlbmQAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACNTdXNwaWNpb3VzIHN0YXRlLiBBY3R1YWwgYmFsYW5jZXM6IAkAAaQAAAABBQAAAAhiYWxhbmNlQQIAAAABIAUAAAAKYXNzZXROYW1lQQIAAAACLCAJAAGkAAAAAQUAAAAIYmFsYW5jZUICAAAAASAFAAAACmFzc2V0TmFtZUICAAAACS4gU3RhdGU6IAkAAaQAAAABCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQQIAAAABIAUAAAAKYXNzZXROYW1lQQIAAAACLCAJAAGkAAAAAQkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEICAAAAASAFAAAACmFzc2V0TmFtZUIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VBCQAAZAAAAAIFAAAACGJhbGFuY2VBBQAAAApwbXRBbW91bnRBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAKcG10QW1vdW50QgkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAATa2V5U2hhcmVBc3NldFN1cHBseQkAAGQAAAACBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQJAARMAAAAAgkBAAAAB1JlaXNzdWUAAAADBQAAAAxzaGFyZUFzc2V0SWQFAAAAFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABVzaGFyZVRva2VuVG9QYXlBbW91bnQFAAAADHNoYXJlQXNzZXRJZAUAAAADbmlsAAAAAWkBAAAACHdpdGhkcmF3AAAAAAQAAAANJHQwMTYzNTUxNjUwNQkABRQAAAACCAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAAAAAZhbW91bnQICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAAB2Fzc2V0SWQEAAAACXBtdEFtb3VudAgFAAAADSR0MDE2MzU1MTY1MDUAAAACXzEEAAAACnBtdEFzc2V0SWQIBQAAAA0kdDAxNjM1NTE2NTA1AAAAAl8yBAAAAAxhbW91bnRUb1BheUEJAQAAABBkZWR1Y3RTdGFraW5nRmVlAAAAAgkAAGsAAAADBQAAAAlwbXRBbW91bnQFAAAACGJhbGFuY2VBBQAAABBzaGFyZUFzc2V0U3VwcGx5BQAAAAhhc3NldElkQQQAAAAMYW1vdW50VG9QYXlCCQEAAAAQZGVkdWN0U3Rha2luZ0ZlZQAAAAIJAABrAAAAAwUAAAAJcG10QW1vdW50BQAAAAhiYWxhbmNlQgUAAAAQc2hhcmVBc3NldFN1cHBseQUAAAAIYXNzZXRJZEIDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDCQEAAAACIT0AAAACCQABkAAAAAEIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAABCQAAAgAAAAECAAAAHU9uZSBhdHRhY2hlZCBwYXltZW50IGV4cGVjdGVkAwkBAAAAAiE9AAAAAgUAAAAKcG10QXNzZXRJZAUAAAAMc2hhcmVBc3NldElkCQAAAgAAAAEJAAEsAAAAAgIAAAAkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQACWAAAAAEFAAAADHNoYXJlQXNzZXRJZAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkBAAAAB3N1c3BlbmQAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACNTdXNwaWNpb3VzIHN0YXRlLiBBY3R1YWwgYmFsYW5jZXM6IAkAAaQAAAABBQAAAAhiYWxhbmNlQQIAAAABIAUAAAAKYXNzZXROYW1lQQIAAAACLCAJAAGkAAAAAQUAAAAIYmFsYW5jZUICAAAAASAFAAAACmFzc2V0TmFtZUICAAAACS4gU3RhdGU6IAkAAaQAAAABCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQQIAAAABIAUAAAAKYXNzZXROYW1lQQIAAAACLCAJAAGkAAAAAQkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEICAAAAASAFAAAACmFzc2V0TmFtZUIDAwkAAGYAAAACBQAAAAxhbW91bnRUb1BheUEFAAAAEWF2YWlsYWJsZUJhbGFuY2VBBgkAAGYAAAACBQAAAAxhbW91bnRUb1BheUIFAAAAEWF2YWlsYWJsZUJhbGFuY2VCCQEAAAAidGhyb3dJbnN1ZmZpY2llbnRBdmFpbGFibGVCYWxhbmNlcwAAAAIFAAAADGFtb3VudFRvUGF5QQUAAAAMYW1vdW50VG9QYXlCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQkAAGUAAAACBQAAAAhiYWxhbmNlQQUAAAAMYW1vdW50VG9QYXlBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQgkAAGUAAAACBQAAAAhiYWxhbmNlQgUAAAAMYW1vdW50VG9QYXlCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAABNrZXlTaGFyZUFzc2V0U3VwcGx5CQAAZQAAAAIFAAAAEHNoYXJlQXNzZXRTdXBwbHkFAAAACXBtdEFtb3VudAkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAADHNoYXJlQXNzZXRJZAUAAAAJcG10QW1vdW50CQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMIBQAAAAFpAAAABmNhbGxlcgUAAAAMYW1vdW50VG9QYXlBBQAAAAhhc3NldElkQQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvUGF5QgUAAAAIYXNzZXRJZEIFAAAAA25pbAAAAAFpAQAAAAhleGNoYW5nZQAAAAEAAAASbWluQW1vdW50VG9SZWNlaXZlBAAAAA0kdDAxNzg5NTE3OTcwCQAFFAAAAAIICQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAAAAAABmFtb3VudAgJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAAAAAHYXNzZXRJZAQAAAAJcG10QW1vdW50CAUAAAANJHQwMTc4OTUxNzk3MAAAAAJfMQQAAAAKcG10QXNzZXRJZAgFAAAADSR0MDE3ODk1MTc5NzAAAAACXzIKAQAAAA1jYWxjdWxhdGVGZWVzAAAAAgAAAAl0b2tlbkZyb20AAAAHdG9rZW5UbwQAAAAQYW1vdW50V2l0aG91dEZlZQkAAGsAAAADBQAAAAd0b2tlblRvBQAAAAlwbXRBbW91bnQJAABkAAAAAgUAAAAJcG10QW1vdW50BQAAAAl0b2tlbkZyb20EAAAADWFtb3VudFdpdGhGZWUJAABrAAAAAwUAAAAQYW1vdW50V2l0aG91dEZlZQkAAGUAAAACBQAAABhjb21taXNzaW9uU2NhbGVEZWxpbWl0ZXIFAAAACmNvbW1pc3Npb24FAAAAGGNvbW1pc3Npb25TY2FsZURlbGltaXRlcgQAAAAQZ292ZXJuYW5jZVJld2FyZAkAAGsAAAADBQAAABBhbW91bnRXaXRob3V0RmVlBQAAABRjb21taXNzaW9uR292ZXJuYW5jZQUAAAAYY29tbWlzc2lvblNjYWxlRGVsaW1pdGVyAwkAAGYAAAACBQAAABJtaW5BbW91bnRUb1JlY2VpdmUFAAAADWFtb3VudFdpdGhGZWUJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAdQ2FsY3VsYXRlZCBhbW91bnQgdG8gcmVjZWl2ZSAJAAGkAAAAAQUAAAANYW1vdW50V2l0aEZlZQIAAAAgIGlzIGxlc3MgdGhhbiBzcGVjaWZpZWQgbWluaW11bSAJAAGkAAAAAQUAAAASbWluQW1vdW50VG9SZWNlaXZlCQAFFQAAAAMFAAAAEGFtb3VudFdpdGhvdXRGZWUFAAAADWFtb3VudFdpdGhGZWUFAAAAEGdvdmVybmFuY2VSZXdhcmQDCQEAAAABIQAAAAEFAAAACGlzQWN0aXZlCQAAAgAAAAECAAAAH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQDAwkAAAAAAAACBQAAAAhiYWxhbmNlQQAAAAAAAAAAAAYJAAAAAAAAAgUAAAAIYmFsYW5jZUIAAAAAAAAAAAAJAAACAAAAAQIAAAAgQ2FuJ3QgZXhjaGFuZ2Ugd2l0aCB6ZXJvIGJhbGFuY2UDCQAAZwAAAAIAAAAAAAAAAAAFAAAAEm1pbkFtb3VudFRvUmVjZWl2ZQkAAAIAAAABCQABLAAAAAICAAAANE1pbmltYWwgYW1vdW50IHRvIHJlY2VpdmUgbXVzdCBiZSBwb3NpdGl2ZS4gQWN0dWFsOiAJAAGkAAAAAQUAAAASbWluQW1vdW50VG9SZWNlaXZlAwkBAAAAAiE9AAAAAgkAAZAAAAABCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAQkAAAIAAAABAgAAAB1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQAAAAEhAAAAAQUAAAAQaGFzRW5vdWdoQmFsYW5jZQkBAAAAB3N1c3BlbmQAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAACNTdXNwaWNpb3VzIHN0YXRlLiBBY3R1YWwgYmFsYW5jZXM6IAkAAaQAAAABBQAAAAhiYWxhbmNlQQIAAAABIAUAAAAKYXNzZXROYW1lQQIAAAACLCAJAAGkAAAAAQUAAAAIYmFsYW5jZUICAAAAASAFAAAACmFzc2V0TmFtZUICAAAACS4gU3RhdGU6IAkAAaQAAAABCQEAAAAOYWNjb3VudEJhbGFuY2UAAAABBQAAAAhhc3NldElkQQIAAAABIAUAAAAKYXNzZXROYW1lQQIAAAACLCAJAAGkAAAAAQkBAAAADmFjY291bnRCYWxhbmNlAAAAAQUAAAAIYXNzZXRJZEICAAAAASAFAAAACmFzc2V0TmFtZUIDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRBBAAAAAthc3NldElkU2VuZAUAAAAIYXNzZXRJZEIEAAAADSR0MDE5NDI4MTk1MTkJAQAAAA1jYWxjdWxhdGVGZWVzAAAAAgUAAAAIYmFsYW5jZUEFAAAACGJhbGFuY2VCBAAAABBhbW91bnRXaXRob3V0RmVlCAUAAAANJHQwMTk0MjgxOTUxOQAAAAJfMQQAAAANYW1vdW50V2l0aEZlZQgFAAAADSR0MDE5NDI4MTk1MTkAAAACXzIEAAAAEGdvdmVybmFuY2VSZXdhcmQIBQAAAA0kdDAxOTQyODE5NTE5AAAAAl8zBAAAAAtuZXdCYWxhbmNlQQkAAGQAAAACBQAAAAhiYWxhbmNlQQUAAAAJcG10QW1vdW50BAAAAAtuZXdCYWxhbmNlQgkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VCBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkAwMDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROCQAAZwAAAAIFAAAAEHN0YWtlZEFtb3VudFVTRE4FAAAAC25ld0JhbGFuY2VBBwYDCQAAAAAAAAIFAAAACGFzc2V0SWRCBQAAAARVU0ROCQAAZwAAAAIFAAAAEHN0YWtlZEFtb3VudFVTRE4FAAAAC25ld0JhbGFuY2VCBwkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VCBQAAAAphc3NldE5hbWVCCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXdhbGxldEFkZHJlc3MFAAAAEGdvdmVybmFuY2VSZXdhcmQFAAAAC2Fzc2V0SWRTZW5kBQAAAANuaWwDCQAAAAAAAAIFAAAACnBtdEFzc2V0SWQFAAAACGFzc2V0SWRCBAAAAAthc3NldElkU2VuZAUAAAAIYXNzZXRJZEEEAAAADSR0MDIwMzg4MjA0NzkJAQAAAA1jYWxjdWxhdGVGZWVzAAAAAgUAAAAIYmFsYW5jZUIFAAAACGJhbGFuY2VBBAAAABBhbW91bnRXaXRob3V0RmVlCAUAAAANJHQwMjAzODgyMDQ3OQAAAAJfMQQAAAANYW1vdW50V2l0aEZlZQgFAAAADSR0MDIwMzg4MjA0NzkAAAACXzIEAAAAEGdvdmVybmFuY2VSZXdhcmQIBQAAAA0kdDAyMDM4ODIwNDc5AAAAAl8zBAAAAAtuZXdCYWxhbmNlQQkAAGUAAAACCQAAZQAAAAIFAAAACGJhbGFuY2VBBQAAAA1hbW91bnRXaXRoRmVlBQAAABBnb3Zlcm5hbmNlUmV3YXJkBAAAAAtuZXdCYWxhbmNlQgkAAGQAAAACBQAAAAhiYWxhbmNlQgUAAAAJcG10QW1vdW50AwMDCQAAAAAAAAIFAAAACGFzc2V0SWRBBQAAAARVU0ROCQAAZwAAAAIFAAAAEHN0YWtlZEFtb3VudFVTRE4FAAAAC25ld0JhbGFuY2VBBwYDCQAAAAAAAAIFAAAACGFzc2V0SWRCBQAAAARVU0ROCQAAZwAAAAIFAAAAEHN0YWtlZEFtb3VudFVTRE4FAAAAC25ld0JhbGFuY2VCBwkBAAAAIXRocm93SW5zdWZmaWNpZW50QXZhaWxhYmxlQmFsYW5jZQAAAAMFAAAADWFtb3VudFdpdGhGZWUFAAAAEWF2YWlsYWJsZUJhbGFuY2VBBQAAAAphc3NldE5hbWVBCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAAtrZXlCYWxhbmNlQQUAAAALbmV3QmFsYW5jZUEJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAAC2tleUJhbGFuY2VCBQAAAAtuZXdCYWxhbmNlQgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADWFtb3VudFdpdGhGZWUFAAAAC2Fzc2V0SWRTZW5kCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMFAAAADXdhbGxldEFkZHJlc3MFAAAAEGdvdmVybmFuY2VSZXdhcmQFAAAAC2Fzc2V0SWRTZW5kBQAAAANuaWwJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogBQAAAAtzdHJBc3NldElkQQIAAAAEIG9yIAUAAAALc3RyQXNzZXRJZEIAAAABaQEAAAAIc2h1dGRvd24AAAAAAwkBAAAAASEAAAABBQAAAAhpc0FjdGl2ZQkAAAIAAAABCQABLAAAAAICAAAAIkRBcHAgaXMgYWxyZWFkeSBzdXNwZW5kZWQuIENhdXNlOiAJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAAIa2V5Q2F1c2UCAAAAGnRoZSBjYXVzZSB3YXNuJ3Qgc3BlY2lmaWVkAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABRhZG1pblB1YktleVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQEAAAAHc3VzcGVuZAAAAAECAAAAD1BhdXNlZCBieSBhZG1pbgAAAAFpAQAAAAhhY3RpdmF0ZQAAAAADBQAAAAhpc0FjdGl2ZQkAAAIAAAABAgAAABZEQXBwIGlzIGFscmVhZHkgYWN0aXZlAwkBAAAAASEAAAABCQEAAAAPY29udGFpbnNFbGVtZW50AAAAAgkABEwAAAACBQAAAAxhZG1pblB1YktleTEJAARMAAAAAgUAAAAMYWRtaW5QdWJLZXkyCQAETAAAAAIFAAAADGFkbWluUHViS2V5MwkABEwAAAACBQAAABRhZG1pblB1YktleVN0YXJ0U3RvcAUAAAADbmlsCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkJAAACAAAAAQIAAAAhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uCQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACBQAAAAlrZXlBY3RpdmUGCQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAACGtleUNhdXNlBQAAAANuaWwAAAABaQEAAAAZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwAAAAEAAAALYW1vdW50TGVhdmUEAAAAHXVuY291bnRhYmxlQW1vdW50RW5yb2xsQXNzZXRBCQAAZQAAAAIFAAAAGWFjY291bnRCYWxhbmNlV2l0aFN0YWtlZEEFAAAACGJhbGFuY2VBBAAAAB11bmNvdW50YWJsZUFtb3VudEVucm9sbEFzc2V0QgkAAGUAAAACBQAAABlhY2NvdW50QmFsYW5jZVdpdGhTdGFrZWRCBQAAAAhiYWxhbmNlQgQAAAANYW1vdW50RW5yb2xsQQkAAGUAAAAC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", "height": 1533220, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9e9yqNCfk4PDEb9XB1ZrM1DAfLfwS5VhCi59eFKZ1cGi Next: none Diff:
OldNewDifferences
3131
3232 let o = "first_harvest"
3333
34-let p = "base_period"
34+let p = "first_harvest_height"
3535
36-let q = "period_length"
36+let q = "share_limit_on_first_harvest"
3737
38-let r = "start_height"
38+let r = "base_period"
3939
40-let s = "first_harvest_height"
40+let s = "period_length"
4141
42-let t = "duration_full_vote_power"
42+let t = "start_height"
4343
44-let u = "share_limit_on_first_harvest"
44+let u = "first_harvest_height"
4545
46-let v = "min_vote_power"
46+let v = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4747
4848 let w = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4949
5353
5454 let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5555
56-let A = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
56+let A = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
5757
58-let B = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
58+let B = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
5959
60-let C = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
60+let C = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
6161
62-let D = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
62+let D = valueOrErrorMessage(getInteger(B, r), "Empty kBasePeriod")
6363
64-let E = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
64+let E = valueOrErrorMessage(getInteger(B, t), "Empty kStartHeight")
6565
66-let F = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
66+let F = valueOrErrorMessage(getInteger(B, s), "Empty kPeriodLength")
6767
68-let G = (9 * value(value(assetInfo(F)).minSponsoredFee))
68+let G = ((D + ((height - E) / F)) + 2)
6969
70-let H = valueOrErrorMessage(getInteger(D, p), "Empty kBasePeriod")
70+let H = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
7171
72-let I = valueOrErrorMessage(getInteger(D, r), "Empty kStartHeight")
72+let I = (9 * value(value(assetInfo(H)).minSponsoredFee))
7373
74-let J = valueOrErrorMessage(getInteger(D, q), "Empty kPeriodLength")
74+let J = getBooleanValue(this, c)
7575
76-let K = valueOrErrorMessage(getInteger(D, t), "Empty kDurationFullVotePower")
76+let K = getStringValue(this, d)
7777
78-let L = valueOrErrorMessage(getInteger(D, v), "Empty kMinVotePower")
78+let L = getStringValue(this, e)
7979
80-let M = ((H + ((height - I) / J)) + 2)
80+let M = if ((K == "WAVES"))
81+ then unit
82+ else fromBase58String(K)
8183
82-let N = getBooleanValue(this, c)
84+let N = if ((L == "WAVES"))
85+ then unit
86+ else fromBase58String(L)
8387
84-let O = getStringValue(this, d)
85-
86-let P = getStringValue(this, e)
87-
88-let Q = if ((O == "WAVES"))
89- then unit
90- else fromBase58String(O)
91-
92-let R = if ((P == "WAVES"))
93- then unit
94- else fromBase58String(P)
95-
96-let S = {
97- let T = Q
98- if ($isInstanceOf(T, "ByteVector"))
88+let O = {
89+ let P = M
90+ if ($isInstanceOf(P, "ByteVector"))
9991 then {
100- let U = T
101- value(assetInfo(U)).name
92+ let Q = P
93+ value(assetInfo(Q)).name
10294 }
103- else if ($isInstanceOf(T, "Unit"))
95+ else if ($isInstanceOf(P, "Unit"))
10496 then {
105- let V = T
97+ let R = P
10698 "WAVES"
10799 }
108100 else throw("Match error")
109101 }
110102
111-let W = {
112- let T = R
113- if ($isInstanceOf(T, "ByteVector"))
103+let S = {
104+ let P = N
105+ if ($isInstanceOf(P, "ByteVector"))
114106 then {
115- let U = T
116- value(assetInfo(U)).name
107+ let Q = P
108+ value(assetInfo(Q)).name
117109 }
118- else if ($isInstanceOf(T, "Unit"))
110+ else if ($isInstanceOf(P, "Unit"))
119111 then {
120- let V = T
112+ let R = P
121113 "WAVES"
122114 }
123115 else throw("Match error")
124116 }
125117
126-let X = getIntegerValue(this, f)
118+let T = getIntegerValue(this, f)
127119
128-let Y = getIntegerValue(this, g)
120+let U = getIntegerValue(this, g)
129121
130-let Z = fromBase58String(getStringValue(this, j))
122+let V = fromBase58String(getStringValue(this, j))
131123
132-let aa = getIntegerValue(this, k)
124+let W = getIntegerValue(this, k)
133125
134-let ab = 3000
126+let X = 3000
135127
136-let ac = 1200
128+let Y = 1200
137129
138-let ad = 1000000
130+let Z = 1000000
139131
140-let ae = 1000
132+let aa = 1000
141133
142-let af = 100000000
134+let ab = 100000000
143135
144-let ag = 1000
136+let ac = 1000
145137
146-let ah = 8
138+let ad = 8
147139
148-func ai (aj) = {
149- let T = aj
150- if ($isInstanceOf(T, "ByteVector"))
140+func ae (af) = {
141+ let P = af
142+ if ($isInstanceOf(P, "ByteVector"))
151143 then {
152- let U = T
153- assetBalance(this, U)
144+ let Q = P
145+ assetBalance(this, Q)
154146 }
155- else if ($isInstanceOf(T, "Unit"))
147+ else if ($isInstanceOf(P, "Unit"))
156148 then {
157- let V = T
149+ let R = P
158150 wavesBalance(this).available
159151 }
160152 else throw("Match error")
161153 }
162154
163155
164-let ak = {
165- let T = getInteger(E, ((("rpd_balance_" + toBase58String(F)) + "_") + toString(this)))
166- if ($isInstanceOf(T, "Int"))
156+let ag = {
157+ let P = getInteger(C, ((("rpd_balance_" + toBase58String(H)) + "_") + toString(this)))
158+ if ($isInstanceOf(P, "Int"))
167159 then {
168- let al = T
169- al
160+ let ah = P
161+ ah
170162 }
171- else if ($isInstanceOf(T, "Unit"))
163+ else if ($isInstanceOf(P, "Unit"))
172164 then {
173- let am = T
165+ let ai = P
174166 0
175167 }
176168 else throw("Match error")
177169 }
178170
179-let an = getIntegerValue(this, h)
171+let aj = getIntegerValue(this, h)
180172
181-let ao = getIntegerValue(this, i)
173+let ak = getIntegerValue(this, i)
182174
183-let ap = (X - (if ((Q == F))
184- then ak
175+let al = (T - (if ((M == H))
176+ then ag
185177 else 0))
186178
187-let aq = (Y - (if ((R == F))
188- then ak
179+let am = (U - (if ((N == H))
180+ then ag
189181 else 0))
190182
191-let ar = (ai(Q) + (if ((Q == F))
192- then ak
183+let an = (ae(M) + (if ((M == H))
184+ then ag
193185 else 0))
194186
195-let as = (ai(R) + (if ((R == F))
196- then ak
187+let ao = (ae(N) + (if ((N == H))
188+ then ag
197189 else 0))
198190
199-let at = if ((ar >= X))
200- then (as >= Y)
191+let ap = if ((an >= T))
192+ then (ao >= U)
201193 else false
202194
203-func au (aj) = {
204- let T = aj
205- if ($isInstanceOf(T, "ByteVector"))
195+func aq (af) = {
196+ let P = af
197+ if ($isInstanceOf(P, "ByteVector"))
206198 then {
207- let U = T
208- let av = toBase58String(U)
209- let aw = valueOrErrorMessage(assetInfo(U), (("Asset " + av) + " doesn't exist"))
210- $Tuple3(av, aw.name, aw.decimals)
199+ let Q = P
200+ let ar = toBase58String(Q)
201+ let as = valueOrErrorMessage(assetInfo(Q), (("Asset " + ar) + " doesn't exist"))
202+ $Tuple3(ar, as.name, as.decimals)
211203 }
212- else if ($isInstanceOf(T, "Unit"))
204+ else if ($isInstanceOf(P, "Unit"))
213205 then {
214- let V = T
206+ let R = P
215207 $Tuple3("WAVES", "WAVES", 8)
216208 }
217209 else throw("Match error")
218210 }
219211
220212
221-func ax (ay) = if ((ay == "WAVES"))
213+func at (au) = if ((au == "WAVES"))
222214 then $Tuple3("WAVES", "WAVES", 8)
223215 else {
224- let av = ay
225- let U = fromBase58String(ay)
226- let aw = valueOrErrorMessage(assetInfo(U), (("Asset " + av) + " doesn't exist"))
227- $Tuple3(av, aw.name, aw.decimals)
216+ let ar = au
217+ let Q = fromBase58String(au)
218+ let as = valueOrErrorMessage(assetInfo(Q), (("Asset " + ar) + " doesn't exist"))
219+ $Tuple3(ar, as.name, as.decimals)
228220 }
229221
230222
231-func az (aA) = [BooleanEntry(c, false), StringEntry(n, aA)]
223+func av (aw) = [BooleanEntry(c, false), StringEntry(n, aw)]
232224
233225
234-func aB (aC,aj) = if ((aj == F))
226+func ax (ay,af) = if ((af == H))
235227 then {
236- let aD = (aC - G)
237- if ((0 >= aD))
238- then throw((((("Insufficient amount " + toString(aC)) + " to deduct staking fee ") + toString(G)) + " USD-N"))
239- else aD
228+ let az = (ay - I)
229+ if ((0 >= az))
230+ then throw((((("Insufficient amount " + toString(ay)) + " to deduct staking fee ") + toString(I)) + " USD-N"))
231+ else az
240232 }
241- else aC
233+ else ay
242234
243235
244-func aE (aC,aF,aG) = throw((((((((("Insufficient DApp balance to pay " + toString(aC)) + " ") + aG) + " due to staking. Available: ") + toString(aF)) + " ") + aG) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
236+func aA (ay,aB,aC) = throw((((((((("Insufficient DApp balance to pay " + toString(ay)) + " ") + aC) + " due to staking. Available: ") + toString(aB)) + " ") + aC) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
245237
246238
247-func aH (aI,aJ) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aI)) + " ") + S) + " and ") + toString(aJ)) + " ") + W) + " due to staking. Available: ") + toString(ap)) + " ") + S) + " and ") + toString(aq)) + " ") + W) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
239+func aD (aE,aF) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aE)) + " ") + O) + " and ") + toString(aF)) + " ") + S) + " due to staking. Available: ") + toString(al)) + " ") + O) + " and ") + toString(am)) + " ") + S) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
248240
249241
250-@Callable(aK)
251-func init (aL) = {
252- let aM = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
253- let aN = aM._1
254- let aO = aM._2
255- let aP = $Tuple2(aK.payments[1].amount, aK.payments[1].assetId)
256- let aQ = aP._1
257- let aR = aP._2
258- let aS = au(aO)
242+@Callable(aG)
243+func init (aH) = {
244+ let aI = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
245+ let aJ = aI._1
246+ let aK = aI._2
247+ let aL = $Tuple2(aG.payments[1].amount, aG.payments[1].assetId)
248+ let aM = aL._1
249+ let aN = aL._2
250+ let aO = aq(aK)
251+ let aP = aO._1
252+ let aQ = aO._2
253+ let aR = aO._3
254+ let aS = aq(aN)
259255 let aT = aS._1
260256 let aU = aS._2
261257 let aV = aS._3
262- let aW = au(aR)
263- let aX = aW._1
264- let aY = aW._2
265- let aZ = aW._3
266- if (isDefined(getBoolean(this, c)))
267- then throw("DApp is already active")
268- else if ((aO == aR))
269- then throw("Assets must be different")
270- else {
271- let ba = ((("s" + take(aU, 7)) + "_") + take(aY, 7))
272- let bb = ((((("ShareToken of SwopFi protocol for " + aU) + " and ") + aY) + " at address ") + toString(this))
273- let bc = ((aV + aZ) / 2)
274- let bd = fraction(pow(aN, aV, 5, 1, aV, HALFDOWN), pow(aQ, aZ, 5, 1, aZ, HALFDOWN), pow(10, 0, bc, 0, 0, HALFDOWN))
275- let be = Issue(ba, bb, bd, bc, true)
276- let bf = calculateAssetId(be)
277- let bg = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aT), StringEntry(e, aX), IntegerEntry(f, aN), IntegerEntry(g, aQ), IntegerEntry(l, ab), IntegerEntry(m, ad), be, StringEntry(j, toBase58String(bf)), IntegerEntry(k, bd), ScriptTransfer(aK.caller, bd, bf)]
278- if (aL)
279- then (bg ++ [BooleanEntry(o, aL), IntegerEntry(s, M)])
280- else bg
281- }
258+ if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
259+ then throw("Only admin can call this function")
260+ else if (isDefined(getBoolean(this, c)))
261+ then throw("DApp is already active")
262+ else if ((aK == aN))
263+ then throw("Assets must be different")
264+ else {
265+ let aW = ((("s" + take(aQ, 7)) + "_") + take(aU, 7))
266+ let aX = ((((("ShareToken of SwopFi protocol for " + aQ) + " and ") + aU) + " at address ") + toString(this))
267+ let aY = ((aR + aV) / 2)
268+ let aZ = fraction(pow(aJ, aR, 5, 1, aR, HALFDOWN), pow(aM, aV, 5, 1, aV, HALFDOWN), pow(10, 0, aY, 0, 0, HALFDOWN))
269+ let ba = Issue(aW, aX, aZ, aY, true)
270+ let bb = calculateAssetId(ba)
271+ let bc = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aP), StringEntry(e, aT), IntegerEntry(f, aJ), IntegerEntry(g, aM), IntegerEntry(l, X), IntegerEntry(m, Z), ba, StringEntry(j, toBase58String(bb)), IntegerEntry(k, aZ), ScriptTransfer(aG.caller, aZ, bb)]
272+ if (aH)
273+ then (bc ++ [BooleanEntry(o, aH), IntegerEntry(p, (E + (G * F)))])
274+ else bc
275+ }
282276 }
283277
284278
285279
286-@Callable(aK)
287-func initWithInitRatio (bh,bi,O,P,aL) = {
288- let bj = ax(O)
289- let aT = bj._1
290- let aU = bj._2
291- let aV = bj._3
292- let bk = ax(P)
293- let aX = bk._1
294- let aY = bk._2
295- let aZ = bk._3
296- if (isDefined(getBoolean(this, c)))
297- then throw("DApp is already active")
298- else if ((O == P))
299- then throw("Assets must be different")
300- else {
301- let ba = ((("s" + take(aU, 7)) + "_") + take(aY, 7))
302- let bb = ((((("ShareToken of SwopFi protocol for " + aU) + " and ") + aY) + " at address ") + toString(this))
303- let bc = ((aV + aZ) / 2)
304- let bd = 0
305- let be = Issue(ba, bb, bd, bc, true)
306- let bf = calculateAssetId(be)
307- let bg = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aT), StringEntry(e, aX), IntegerEntry(h, bh), IntegerEntry(i, bi), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ab), IntegerEntry(m, ad), be, StringEntry(j, toBase58String(bf)), IntegerEntry(s, M), IntegerEntry(k, bd)]
308- if (aL)
309- then (bg ++ [BooleanEntry(o, aL), IntegerEntry(s, M)])
310- else bg
311- }
280+@Callable(aG)
281+func initWithInitRatio (bd,be,K,L,aH) = {
282+ let bf = at(K)
283+ let aP = bf._1
284+ let aQ = bf._2
285+ let aR = bf._3
286+ let bg = at(L)
287+ let aT = bg._1
288+ let aU = bg._2
289+ let aV = bg._3
290+ if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
291+ then throw("Only admin can call this function")
292+ else if (isDefined(getBoolean(this, c)))
293+ then throw("DApp is already active")
294+ else if ((K == L))
295+ then throw("Assets must be different")
296+ else {
297+ let aW = ((("s" + take(aQ, 7)) + "_") + take(aU, 7))
298+ let aX = ((((("ShareToken of SwopFi protocol for " + aQ) + " and ") + aU) + " at address ") + toString(this))
299+ let aY = ((aR + aV) / 2)
300+ let aZ = 0
301+ let ba = Issue(aW, aX, aZ, aY, true)
302+ let bb = calculateAssetId(ba)
303+ let bc = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aP), StringEntry(e, aT), IntegerEntry(h, bd), IntegerEntry(i, be), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, X), IntegerEntry(m, Z), ba, StringEntry(j, toBase58String(bb)), IntegerEntry(p, (E + (G * F))), IntegerEntry(k, aZ)]
304+ if (aH)
305+ then (bc ++ [BooleanEntry(o, aH), IntegerEntry(p, (E + (G * F)))])
306+ else bc
307+ }
312308 }
313309
314310
315311
316-@Callable(aK)
317-func keepLimitForFirstHarvest (bl) = if (!(N))
312+@Callable(aG)
313+func keepLimitForFirstHarvest (bh) = if (!(J))
318314 then throw("DApp is inactive at this moment")
319- else if (!(containsElement([w, x, y, B], aK.callerPublicKey)))
315+ else if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
320316 then throw("Only admin can call this function")
321- else [IntegerEntry(u, bl)]
317+ else [IntegerEntry(q, bh)]
322318
323319
324320
325-@Callable(aK)
326-func replenishWithTwoTokens (bm) = {
327- let aO = aK.payments[0].assetId
328- let aR = aK.payments[1].assetId
329- let aN = aB(aK.payments[0].amount, aO)
330- let aQ = aB(aK.payments[1].amount, aR)
331- if (if ((X == 0))
332- then (Y == 0)
321+@Callable(aG)
322+func replenishWithTwoTokens (bi) = {
323+ let aK = aG.payments[0].assetId
324+ let aN = aG.payments[1].assetId
325+ let aJ = ax(aG.payments[0].amount, aK)
326+ let aM = ax(aG.payments[1].amount, aN)
327+ if (if ((T == 0))
328+ then (U == 0)
333329 else false)
334330 then {
335- let bn = au(aO)
336- let aT = bn._1
337- let aU = bn._2
338- let aV = bn._3
339- let bo = au(aR)
340- let aX = bo._1
341- let aY = bo._2
342- let aZ = bo._3
343- if ((aO == aR))
331+ let bj = aq(aK)
332+ let aP = bj._1
333+ let aQ = bj._2
334+ let aR = bj._3
335+ let bk = aq(aN)
336+ let aT = bk._1
337+ let aU = bk._2
338+ let aV = bk._3
339+ let bl = fraction(fraction(aj, ab, aJ), aa, fraction(ak, ab, aM))
340+ if ((aK == aN))
344341 then throw("Assets must be different")
345342 else {
346- let bc = ((aV + aZ) / 2)
347- let bd = fraction(pow(aN, aV, 5, 1, aV, HALFDOWN), pow(aQ, aZ, 5, 1, aZ, HALFDOWN), pow(10, 0, bc, 0, 0, HALFDOWN))
348- if (!(N))
343+ let aY = ((aR + aV) / 2)
344+ let aZ = fraction(pow(aJ, aR, 5, 1, aR, HALFDOWN), pow(aM, aV, 5, 1, aV, HALFDOWN), pow(10, 0, aY, 0, 0, HALFDOWN))
345+ if (!(J))
349346 then throw("DApp is inactive at this moment")
350- else if (if ((0 > bm))
347+ else if (if ((0 > bi))
351348 then true
352- else (bm > ag))
353- then throw(((("Slippage tolerance must be between 0 and " + toString(ag)) + " inclusively. Actual: ") + toString(bm)))
354- else if ((size(aK.payments) != 2))
349+ else (bi > ac))
350+ then throw(((("Slippage tolerance must be between 0 and " + toString(ac)) + " inclusively. Actual: ") + toString(bi)))
351+ else if ((size(aG.payments) != 2))
355352 then throw("Two attached assets expected")
356- else if (if ((aO != Q))
353+ else if (if ((((aa * (ac - bi)) / ac) > bl))
357354 then true
358- else (aR != R))
359- then throw(((("Incorrect assets attached. Expected: " + O) + " and ") + P))
360- else if ((bd == 0))
361- then throw("Too small amount to replenish")
362- else if (!(at))
363- then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
364- else [Reissue(Z, bd, true), IntegerEntry(f, aN), IntegerEntry(g, aQ), IntegerEntry(k, bd), ScriptTransfer(aK.caller, bd, Z)]
355+ else (bl > ((aa * (ac + bi)) / ac)))
356+ then throw("Incorrect assets amount: amounts must have the contract ratio")
357+ else if (if ((aK != M))
358+ then true
359+ else (aN != N))
360+ then throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
361+ else if ((aZ == 0))
362+ then throw("Too small amount to replenish")
363+ else if (!(ap))
364+ then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
365+ else [Reissue(V, aZ, true), IntegerEntry(f, aJ), IntegerEntry(g, aM), IntegerEntry(k, aZ), ScriptTransfer(aG.caller, aZ, V)]
365366 }
366367 }
367368 else {
368- let bp = fraction(fraction(X, af, aN), ae, fraction(Y, af, aQ))
369- let bq = fraction(aN, af, X)
370- let br = fraction(aQ, af, Y)
371- let bs = fraction(min([bq, br]), aa, af)
372- if (!(N))
369+ let bl = fraction(fraction(T, ab, aJ), aa, fraction(U, ab, aM))
370+ let bm = fraction(aJ, ab, T)
371+ let bn = fraction(aM, ab, U)
372+ let bo = fraction(min([bm, bn]), W, ab)
373+ if (!(J))
373374 then throw("DApp is inactive at this moment")
374- else if (if ((0 > bm))
375+ else if (if ((0 > bi))
375376 then true
376- else (bm > ag))
377- then throw(((("Slippage tolerance must be between 0 and " + toString(ag)) + " inclusively. Actual: ") + toString(bm)))
378- else if ((size(aK.payments) != 2))
377+ else (bi > ac))
378+ then throw(((("Slippage tolerance must be between 0 and " + toString(ac)) + " inclusively. Actual: ") + toString(bi)))
379+ else if ((size(aG.payments) != 2))
379380 then throw("Two attached assets expected")
380- else if (if ((aO != Q))
381+ else if (if ((aK != M))
381382 then true
382- else (aR != R))
383- then throw(((("Incorrect assets attached. Expected: " + O) + " and ") + P))
384- else if (if ((((ae * (ag - bm)) / ag) > bp))
383+ else (aN != N))
384+ then throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
385+ else if (if ((((aa * (ac - bi)) / ac) > bl))
385386 then true
386- else (bp > ((ae * (ag + bm)) / ag)))
387+ else (bl > ((aa * (ac + bi)) / ac)))
387388 then throw("Incorrect assets amount: amounts must have the contract ratio")
388- else if ((bs == 0))
389+ else if ((bo == 0))
389390 then throw("Too small amount to replenish")
390- else if (!(at))
391- then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
392- else [IntegerEntry(f, (X + aN)), IntegerEntry(g, (Y + aQ)), IntegerEntry(k, (aa + bs)), Reissue(Z, bs, true), ScriptTransfer(aK.caller, bs, Z)]
391+ else if (!(ap))
392+ then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
393+ else [IntegerEntry(f, (T + aJ)), IntegerEntry(g, (U + aM)), IntegerEntry(k, (W + bo)), Reissue(V, bo, true), ScriptTransfer(aG.caller, bo, V)]
393394 }
394395 }
395396
396397
397398
398-@Callable(aK)
399+@Callable(aG)
399400 func withdraw () = {
400- let bt = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
401- let bu = bt._1
402- let bv = bt._2
403- let bw = aB(fraction(bu, X, aa), Q)
404- let bx = aB(fraction(bu, Y, aa), R)
405- if (!(N))
401+ let bp = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
402+ let bq = bp._1
403+ let br = bp._2
404+ let bs = ax(fraction(bq, T, W), M)
405+ let bt = ax(fraction(bq, U, W), N)
406+ if (!(J))
406407 then throw("DApp is inactive at this moment")
407- else if ((size(aK.payments) != 1))
408+ else if ((size(aG.payments) != 1))
408409 then throw("One attached payment expected")
409- else if ((bv != Z))
410- then throw(("Incorrect asset attached. Expected: " + toBase58String(Z)))
411- else if (!(at))
412- then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
413- else if (if ((bw > ap))
410+ else if ((br != V))
411+ then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
412+ else if (!(ap))
413+ then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
414+ else if (if ((bs > al))
414415 then true
415- else (bx > aq))
416- then aH(bw, bx)
417- else [IntegerEntry(f, (X - bw)), IntegerEntry(g, (Y - bx)), IntegerEntry(k, (aa - bu)), Burn(Z, bu), ScriptTransfer(aK.caller, bw, Q), ScriptTransfer(aK.caller, bx, R)]
416+ else (bt > am))
417+ then aD(bs, bt)
418+ else [IntegerEntry(f, (T - bs)), IntegerEntry(g, (U - bt)), IntegerEntry(k, (W - bq)), Burn(V, bq), ScriptTransfer(aG.caller, bs, M), ScriptTransfer(aG.caller, bt, N)]
418419 }
419420
420421
421422
422-@Callable(aK)
423-func exchange (by) = {
424- let bz = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
425- let bu = bz._1
426- let bv = bz._2
427- func bA (bB,bC) = {
428- let bD = fraction(bC, bu, (bu + bB))
429- let bE = fraction(bD, (ad - ab), ad)
430- let bF = fraction(bD, ac, ad)
431- if ((by > bE))
432- then throw(((("Calculated amount to receive " + toString(bE)) + " is less than specified minimum ") + toString(by)))
433- else $Tuple3(bD, bE, bF)
423+@Callable(aG)
424+func exchange (bu) = {
425+ let bv = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
426+ let bq = bv._1
427+ let br = bv._2
428+ func bw (bx,by) = {
429+ let bz = fraction(by, bq, (bq + bx))
430+ let bA = fraction(bz, (Z - X), Z)
431+ let bB = fraction(bz, Y, Z)
432+ if ((bu > bA))
433+ then throw(((("Calculated amount to receive " + toString(bA)) + " is less than specified minimum ") + toString(bu)))
434+ else $Tuple3(bz, bA, bB)
434435 }
435436
436- if (!(N))
437+ if (!(J))
437438 then throw("DApp is inactive at this moment")
438- else if (if ((X == 0))
439- then (Y == 0)
440- else false)
439+ else if (if ((T == 0))
440+ then true
441+ else (U == 0))
441442 then throw("Can't exchange with zero balance")
442- else if ((0 >= by))
443- then throw(("Minimal amount to receive must be positive. Actual: " + toString(by)))
444- else if ((size(aK.payments) != 1))
443+ else if ((0 >= bu))
444+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bu)))
445+ else if ((size(aG.payments) != 1))
445446 then throw("One attached payment expected")
446- else if (!(at))
447- then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
448- else if ((bv == Q))
447+ else if (!(ap))
448+ then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
449+ else if ((br == M))
449450 then {
450- let bG = R
451- let bH = bA(X, Y)
452- let bD = bH._1
453- let bE = bH._2
454- let bF = bH._3
455- let bI = (X + bu)
456- let bJ = ((Y - bE) - bF)
457- if (if (if ((Q == F))
458- then (ak >= bI)
451+ let bC = N
452+ let bD = bw(T, U)
453+ let bz = bD._1
454+ let bA = bD._2
455+ let bB = bD._3
456+ let bE = (T + bq)
457+ let bF = ((U - bA) - bB)
458+ if (if (if ((M == H))
459+ then (ag >= bE)
459460 else false)
460461 then true
461- else if ((R == F))
462- then (ak >= bJ)
462+ else if ((N == H))
463+ then (ag >= bF)
463464 else false)
464- then aE(bE, aq, W)
465- else [IntegerEntry(f, bI), IntegerEntry(g, bJ), ScriptTransfer(aK.caller, bE, bG), ScriptTransfer(C, bF, bG)]
465+ then aA(bA, am, S)
466+ else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aG.caller, bA, bC), ScriptTransfer(A, bB, bC)]
466467 }
467- else if ((bv == R))
468+ else if ((br == N))
468469 then {
469- let bG = Q
470- let bK = bA(Y, X)
471- let bD = bK._1
472- let bE = bK._2
473- let bF = bK._3
474- let bI = ((X - bE) - bF)
475- let bJ = (Y + bu)
476- if (if (if ((Q == F))
477- then (ak >= bI)
470+ let bC = M
471+ let bG = bw(U, T)
472+ let bz = bG._1
473+ let bA = bG._2
474+ let bB = bG._3
475+ let bE = ((T - bA) - bB)
476+ let bF = (U + bq)
477+ if (if (if ((M == H))
478+ then (ag >= bE)
478479 else false)
479480 then true
480- else if ((R == F))
481- then (ak >= bJ)
481+ else if ((N == H))
482+ then (ag >= bF)
482483 else false)
483- then aE(bE, ap, S)
484- else [IntegerEntry(f, bI), IntegerEntry(g, bJ), ScriptTransfer(aK.caller, bE, bG), ScriptTransfer(C, bF, bG)]
484+ then aA(bA, al, O)
485+ else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aG.caller, bA, bC), ScriptTransfer(A, bB, bC)]
485486 }
486- else throw(((("Incorrect asset attached. Expected: " + O) + " or ") + P))
487+ else throw(((("Incorrect asset attached. Expected: " + K) + " or ") + L))
487488 }
488489
489490
490491
491-@Callable(aK)
492-func shutdown () = if (!(N))
492+@Callable(aG)
493+func shutdown () = if (!(J))
493494 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
494- else if (!(containsElement([w, x, y, z], aK.callerPublicKey)))
495+ else if (!(containsElement([v, w, x, y], aG.callerPublicKey)))
495496 then throw("Only admin can call this function")
496- else az("Paused by admin")
497+ else av("Paused by admin")
497498
498499
499500
500-@Callable(aK)
501-func activate () = if (N)
501+@Callable(aG)
502+func activate () = if (J)
502503 then throw("DApp is already active")
503- else if (!(containsElement([w, x, y, z], aK.callerPublicKey)))
504+ else if (!(containsElement([v, w, x, y], aG.callerPublicKey)))
504505 then throw("Only admin can call this function")
505506 else [BooleanEntry(c, true), DeleteEntry(n)]
506507
507508
508509
509-@Callable(aK)
510-func takeIntoAccountExtraFunds (bL) = {
511- let bM = (ar - X)
512- let bN = (as - Y)
513- let bO = (bM - (if ((Q == F))
514- then bL
510+@Callable(aG)
511+func takeIntoAccountExtraFunds (bH) = {
512+ let bI = (an - T)
513+ let bJ = (ao - U)
514+ let bK = (bI - (if ((M == H))
515+ then bH
515516 else 0))
516- let bP = (bN - (if ((R == F))
517- then bL
517+ let bL = (bJ - (if ((N == H))
518+ then bH
518519 else 0))
519- if (!(N))
520+ if (!(J))
520521 then throw("DApp is inactive at this moment")
521- else if ((aK.caller != this))
522+ else if ((aG.caller != this))
522523 then throw("Only the DApp itself can call this function")
523- else if ((0 > bL))
524- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bL)))
525- else if (if ((0 > bM))
524+ else if ((0 > bH))
525+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bH)))
526+ else if (if ((0 > bI))
526527 then true
527- else (0 > bN))
528- then az("Enroll amount negative")
529- else if (if ((0 > bO))
528+ else (0 > bJ))
529+ then av("Enroll amount negative")
530+ else if (if ((0 > bK))
530531 then true
531- else (0 > bP))
532+ else (0 > bL))
532533 then throw("Too large amountLeave")
533- else [IntegerEntry(f, (X + bO)), IntegerEntry(g, (Y + bP)), IntegerEntry(("last_income_" + O), bO), IntegerEntry(("last_income_" + P), bP)]
534+ else [IntegerEntry(f, (T + bK)), IntegerEntry(g, (U + bL)), IntegerEntry(("last_income_" + K), bK), IntegerEntry(("last_income_" + L), bL)]
534535 }
535536
536537
537-@Verifier(bQ)
538-func bR () = {
539- let T = bQ
540- if ($isInstanceOf(T, "InvokeScriptTransaction"))
538+@Verifier(bM)
539+func bN () = {
540+ let P = bM
541+ if ($isInstanceOf(P, "InvokeScriptTransaction"))
541542 then {
542- let bS = T
543- let bT = if ((bS.dApp == this))
544- then (bS.function == "takeIntoAccountExtraFunds")
543+ let bO = P
544+ let bP = if ((bO.dApp == this))
545+ then (bO.function == "takeIntoAccountExtraFunds")
545546 else false
546- let bU = if ((bS.dApp == E))
547- then if (if (if ((bS.function == "lockNeutrino"))
548- then (size(bS.payments) == 1)
547+ let bQ = if ((bO.dApp == C))
548+ then if (if (if ((bO.function == "lockNeutrino"))
549+ then (size(bO.payments) == 1)
549550 else false)
550- then (bS.payments[0].assetId == F)
551+ then (bO.payments[0].assetId == H)
551552 else false)
552553 then true
553- else if ((bS.function == "unlockNeutrino"))
554- then (size(bS.payments) == 0)
554+ else if ((bO.function == "unlockNeutrino"))
555+ then (size(bO.payments) == 0)
555556 else false
556557 else false
557- let bV = if (if (if (sigVerify(bQ.bodyBytes, bQ.proofs[0], w))
558+ let bR = if (if (if (sigVerify(bM.bodyBytes, bM.proofs[0], v))
558559 then true
559- else sigVerify(bQ.bodyBytes, bQ.proofs[0], x))
560+ else sigVerify(bM.bodyBytes, bM.proofs[0], w))
560561 then true
561- else sigVerify(bQ.bodyBytes, bQ.proofs[0], y))
562+ else sigVerify(bM.bodyBytes, bM.proofs[0], x))
562563 then true
563- else sigVerify(bQ.bodyBytes, bQ.proofs[0], A)
564- if (bT)
564+ else sigVerify(bM.bodyBytes, bM.proofs[0], z)
565+ if (bP)
565566 then true
566- else bU
567+ else bQ
567568 }
568- else sigVerify(bQ.bodyBytes, bQ.proofs[0], bQ.senderPublicKey)
569+ else sigVerify(bM.bodyBytes, bM.proofs[0], bM.senderPublicKey)
569570 }
570571
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 4 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "A_asset_id"
1111
1212 let e = "B_asset_id"
1313
1414 let f = "A_asset_balance"
1515
1616 let g = "B_asset_balance"
1717
1818 let h = "A_asset_init"
1919
2020 let i = "B_asset_init"
2121
2222 let j = "share_asset_id"
2323
2424 let k = "share_asset_supply"
2525
2626 let l = "commission"
2727
2828 let m = "commission_scale_delimiter"
2929
3030 let n = "shutdown_cause"
3131
3232 let o = "first_harvest"
3333
34-let p = "base_period"
34+let p = "first_harvest_height"
3535
36-let q = "period_length"
36+let q = "share_limit_on_first_harvest"
3737
38-let r = "start_height"
38+let r = "base_period"
3939
40-let s = "first_harvest_height"
40+let s = "period_length"
4141
42-let t = "duration_full_vote_power"
42+let t = "start_height"
4343
44-let u = "share_limit_on_first_harvest"
44+let u = "first_harvest_height"
4545
46-let v = "min_vote_power"
46+let v = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4747
4848 let w = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
4949
5050 let x = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5151
5252 let y = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5353
5454 let z = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
5555
56-let A = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
56+let A = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
5757
58-let B = base58'Kn7NpzaG12dLZgcHf2ipUftU6hbJygmrhFqQYE4B7ZK'
58+let B = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
5959
60-let C = Address(base58'3NAGTtZz6WpupSN89NZD5rMZwwziZEg4Kx4')
60+let C = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
6161
62-let D = Address(base58'3N6CYoCsxrcXKe75pQvvV3JqJrwJjm1t4QN')
62+let D = valueOrErrorMessage(getInteger(B, r), "Empty kBasePeriod")
6363
64-let E = Address(base58'3N6q7sCGSSLBUXDdjBdYGTJbZGZfhhh8cNg')
64+let E = valueOrErrorMessage(getInteger(B, t), "Empty kStartHeight")
6565
66-let F = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
66+let F = valueOrErrorMessage(getInteger(B, s), "Empty kPeriodLength")
6767
68-let G = (9 * value(value(assetInfo(F)).minSponsoredFee))
68+let G = ((D + ((height - E) / F)) + 2)
6969
70-let H = valueOrErrorMessage(getInteger(D, p), "Empty kBasePeriod")
70+let H = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
7171
72-let I = valueOrErrorMessage(getInteger(D, r), "Empty kStartHeight")
72+let I = (9 * value(value(assetInfo(H)).minSponsoredFee))
7373
74-let J = valueOrErrorMessage(getInteger(D, q), "Empty kPeriodLength")
74+let J = getBooleanValue(this, c)
7575
76-let K = valueOrErrorMessage(getInteger(D, t), "Empty kDurationFullVotePower")
76+let K = getStringValue(this, d)
7777
78-let L = valueOrErrorMessage(getInteger(D, v), "Empty kMinVotePower")
78+let L = getStringValue(this, e)
7979
80-let M = ((H + ((height - I) / J)) + 2)
80+let M = if ((K == "WAVES"))
81+ then unit
82+ else fromBase58String(K)
8183
82-let N = getBooleanValue(this, c)
84+let N = if ((L == "WAVES"))
85+ then unit
86+ else fromBase58String(L)
8387
84-let O = getStringValue(this, d)
85-
86-let P = getStringValue(this, e)
87-
88-let Q = if ((O == "WAVES"))
89- then unit
90- else fromBase58String(O)
91-
92-let R = if ((P == "WAVES"))
93- then unit
94- else fromBase58String(P)
95-
96-let S = {
97- let T = Q
98- if ($isInstanceOf(T, "ByteVector"))
88+let O = {
89+ let P = M
90+ if ($isInstanceOf(P, "ByteVector"))
9991 then {
100- let U = T
101- value(assetInfo(U)).name
92+ let Q = P
93+ value(assetInfo(Q)).name
10294 }
103- else if ($isInstanceOf(T, "Unit"))
95+ else if ($isInstanceOf(P, "Unit"))
10496 then {
105- let V = T
97+ let R = P
10698 "WAVES"
10799 }
108100 else throw("Match error")
109101 }
110102
111-let W = {
112- let T = R
113- if ($isInstanceOf(T, "ByteVector"))
103+let S = {
104+ let P = N
105+ if ($isInstanceOf(P, "ByteVector"))
114106 then {
115- let U = T
116- value(assetInfo(U)).name
107+ let Q = P
108+ value(assetInfo(Q)).name
117109 }
118- else if ($isInstanceOf(T, "Unit"))
110+ else if ($isInstanceOf(P, "Unit"))
119111 then {
120- let V = T
112+ let R = P
121113 "WAVES"
122114 }
123115 else throw("Match error")
124116 }
125117
126-let X = getIntegerValue(this, f)
118+let T = getIntegerValue(this, f)
127119
128-let Y = getIntegerValue(this, g)
120+let U = getIntegerValue(this, g)
129121
130-let Z = fromBase58String(getStringValue(this, j))
122+let V = fromBase58String(getStringValue(this, j))
131123
132-let aa = getIntegerValue(this, k)
124+let W = getIntegerValue(this, k)
133125
134-let ab = 3000
126+let X = 3000
135127
136-let ac = 1200
128+let Y = 1200
137129
138-let ad = 1000000
130+let Z = 1000000
139131
140-let ae = 1000
132+let aa = 1000
141133
142-let af = 100000000
134+let ab = 100000000
143135
144-let ag = 1000
136+let ac = 1000
145137
146-let ah = 8
138+let ad = 8
147139
148-func ai (aj) = {
149- let T = aj
150- if ($isInstanceOf(T, "ByteVector"))
140+func ae (af) = {
141+ let P = af
142+ if ($isInstanceOf(P, "ByteVector"))
151143 then {
152- let U = T
153- assetBalance(this, U)
144+ let Q = P
145+ assetBalance(this, Q)
154146 }
155- else if ($isInstanceOf(T, "Unit"))
147+ else if ($isInstanceOf(P, "Unit"))
156148 then {
157- let V = T
149+ let R = P
158150 wavesBalance(this).available
159151 }
160152 else throw("Match error")
161153 }
162154
163155
164-let ak = {
165- let T = getInteger(E, ((("rpd_balance_" + toBase58String(F)) + "_") + toString(this)))
166- if ($isInstanceOf(T, "Int"))
156+let ag = {
157+ let P = getInteger(C, ((("rpd_balance_" + toBase58String(H)) + "_") + toString(this)))
158+ if ($isInstanceOf(P, "Int"))
167159 then {
168- let al = T
169- al
160+ let ah = P
161+ ah
170162 }
171- else if ($isInstanceOf(T, "Unit"))
163+ else if ($isInstanceOf(P, "Unit"))
172164 then {
173- let am = T
165+ let ai = P
174166 0
175167 }
176168 else throw("Match error")
177169 }
178170
179-let an = getIntegerValue(this, h)
171+let aj = getIntegerValue(this, h)
180172
181-let ao = getIntegerValue(this, i)
173+let ak = getIntegerValue(this, i)
182174
183-let ap = (X - (if ((Q == F))
184- then ak
175+let al = (T - (if ((M == H))
176+ then ag
185177 else 0))
186178
187-let aq = (Y - (if ((R == F))
188- then ak
179+let am = (U - (if ((N == H))
180+ then ag
189181 else 0))
190182
191-let ar = (ai(Q) + (if ((Q == F))
192- then ak
183+let an = (ae(M) + (if ((M == H))
184+ then ag
193185 else 0))
194186
195-let as = (ai(R) + (if ((R == F))
196- then ak
187+let ao = (ae(N) + (if ((N == H))
188+ then ag
197189 else 0))
198190
199-let at = if ((ar >= X))
200- then (as >= Y)
191+let ap = if ((an >= T))
192+ then (ao >= U)
201193 else false
202194
203-func au (aj) = {
204- let T = aj
205- if ($isInstanceOf(T, "ByteVector"))
195+func aq (af) = {
196+ let P = af
197+ if ($isInstanceOf(P, "ByteVector"))
206198 then {
207- let U = T
208- let av = toBase58String(U)
209- let aw = valueOrErrorMessage(assetInfo(U), (("Asset " + av) + " doesn't exist"))
210- $Tuple3(av, aw.name, aw.decimals)
199+ let Q = P
200+ let ar = toBase58String(Q)
201+ let as = valueOrErrorMessage(assetInfo(Q), (("Asset " + ar) + " doesn't exist"))
202+ $Tuple3(ar, as.name, as.decimals)
211203 }
212- else if ($isInstanceOf(T, "Unit"))
204+ else if ($isInstanceOf(P, "Unit"))
213205 then {
214- let V = T
206+ let R = P
215207 $Tuple3("WAVES", "WAVES", 8)
216208 }
217209 else throw("Match error")
218210 }
219211
220212
221-func ax (ay) = if ((ay == "WAVES"))
213+func at (au) = if ((au == "WAVES"))
222214 then $Tuple3("WAVES", "WAVES", 8)
223215 else {
224- let av = ay
225- let U = fromBase58String(ay)
226- let aw = valueOrErrorMessage(assetInfo(U), (("Asset " + av) + " doesn't exist"))
227- $Tuple3(av, aw.name, aw.decimals)
216+ let ar = au
217+ let Q = fromBase58String(au)
218+ let as = valueOrErrorMessage(assetInfo(Q), (("Asset " + ar) + " doesn't exist"))
219+ $Tuple3(ar, as.name, as.decimals)
228220 }
229221
230222
231-func az (aA) = [BooleanEntry(c, false), StringEntry(n, aA)]
223+func av (aw) = [BooleanEntry(c, false), StringEntry(n, aw)]
232224
233225
234-func aB (aC,aj) = if ((aj == F))
226+func ax (ay,af) = if ((af == H))
235227 then {
236- let aD = (aC - G)
237- if ((0 >= aD))
238- then throw((((("Insufficient amount " + toString(aC)) + " to deduct staking fee ") + toString(G)) + " USD-N"))
239- else aD
228+ let az = (ay - I)
229+ if ((0 >= az))
230+ then throw((((("Insufficient amount " + toString(ay)) + " to deduct staking fee ") + toString(I)) + " USD-N"))
231+ else az
240232 }
241- else aC
233+ else ay
242234
243235
244-func aE (aC,aF,aG) = throw((((((((("Insufficient DApp balance to pay " + toString(aC)) + " ") + aG) + " due to staking. Available: ") + toString(aF)) + " ") + aG) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
236+func aA (ay,aB,aC) = throw((((((((("Insufficient DApp balance to pay " + toString(ay)) + " ") + aC) + " due to staking. Available: ") + toString(aB)) + " ") + aC) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
245237
246238
247-func aH (aI,aJ) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aI)) + " ") + S) + " and ") + toString(aJ)) + " ") + W) + " due to staking. Available: ") + toString(ap)) + " ") + S) + " and ") + toString(aq)) + " ") + W) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
239+func aD (aE,aF) = throw((((((((((((((((("Insufficient DApp balance to pay " + toString(aE)) + " ") + O) + " and ") + toString(aF)) + " ") + S) + " due to staking. Available: ") + toString(al)) + " ") + O) + " and ") + toString(am)) + " ") + S) + ". Please contact support in Telegram: https://t.me/swopfisupport"))
248240
249241
250-@Callable(aK)
251-func init (aL) = {
252- let aM = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
253- let aN = aM._1
254- let aO = aM._2
255- let aP = $Tuple2(aK.payments[1].amount, aK.payments[1].assetId)
256- let aQ = aP._1
257- let aR = aP._2
258- let aS = au(aO)
242+@Callable(aG)
243+func init (aH) = {
244+ let aI = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
245+ let aJ = aI._1
246+ let aK = aI._2
247+ let aL = $Tuple2(aG.payments[1].amount, aG.payments[1].assetId)
248+ let aM = aL._1
249+ let aN = aL._2
250+ let aO = aq(aK)
251+ let aP = aO._1
252+ let aQ = aO._2
253+ let aR = aO._3
254+ let aS = aq(aN)
259255 let aT = aS._1
260256 let aU = aS._2
261257 let aV = aS._3
262- let aW = au(aR)
263- let aX = aW._1
264- let aY = aW._2
265- let aZ = aW._3
266- if (isDefined(getBoolean(this, c)))
267- then throw("DApp is already active")
268- else if ((aO == aR))
269- then throw("Assets must be different")
270- else {
271- let ba = ((("s" + take(aU, 7)) + "_") + take(aY, 7))
272- let bb = ((((("ShareToken of SwopFi protocol for " + aU) + " and ") + aY) + " at address ") + toString(this))
273- let bc = ((aV + aZ) / 2)
274- let bd = fraction(pow(aN, aV, 5, 1, aV, HALFDOWN), pow(aQ, aZ, 5, 1, aZ, HALFDOWN), pow(10, 0, bc, 0, 0, HALFDOWN))
275- let be = Issue(ba, bb, bd, bc, true)
276- let bf = calculateAssetId(be)
277- let bg = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aT), StringEntry(e, aX), IntegerEntry(f, aN), IntegerEntry(g, aQ), IntegerEntry(l, ab), IntegerEntry(m, ad), be, StringEntry(j, toBase58String(bf)), IntegerEntry(k, bd), ScriptTransfer(aK.caller, bd, bf)]
278- if (aL)
279- then (bg ++ [BooleanEntry(o, aL), IntegerEntry(s, M)])
280- else bg
281- }
258+ if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
259+ then throw("Only admin can call this function")
260+ else if (isDefined(getBoolean(this, c)))
261+ then throw("DApp is already active")
262+ else if ((aK == aN))
263+ then throw("Assets must be different")
264+ else {
265+ let aW = ((("s" + take(aQ, 7)) + "_") + take(aU, 7))
266+ let aX = ((((("ShareToken of SwopFi protocol for " + aQ) + " and ") + aU) + " at address ") + toString(this))
267+ let aY = ((aR + aV) / 2)
268+ let aZ = fraction(pow(aJ, aR, 5, 1, aR, HALFDOWN), pow(aM, aV, 5, 1, aV, HALFDOWN), pow(10, 0, aY, 0, 0, HALFDOWN))
269+ let ba = Issue(aW, aX, aZ, aY, true)
270+ let bb = calculateAssetId(ba)
271+ let bc = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aP), StringEntry(e, aT), IntegerEntry(f, aJ), IntegerEntry(g, aM), IntegerEntry(l, X), IntegerEntry(m, Z), ba, StringEntry(j, toBase58String(bb)), IntegerEntry(k, aZ), ScriptTransfer(aG.caller, aZ, bb)]
272+ if (aH)
273+ then (bc ++ [BooleanEntry(o, aH), IntegerEntry(p, (E + (G * F)))])
274+ else bc
275+ }
282276 }
283277
284278
285279
286-@Callable(aK)
287-func initWithInitRatio (bh,bi,O,P,aL) = {
288- let bj = ax(O)
289- let aT = bj._1
290- let aU = bj._2
291- let aV = bj._3
292- let bk = ax(P)
293- let aX = bk._1
294- let aY = bk._2
295- let aZ = bk._3
296- if (isDefined(getBoolean(this, c)))
297- then throw("DApp is already active")
298- else if ((O == P))
299- then throw("Assets must be different")
300- else {
301- let ba = ((("s" + take(aU, 7)) + "_") + take(aY, 7))
302- let bb = ((((("ShareToken of SwopFi protocol for " + aU) + " and ") + aY) + " at address ") + toString(this))
303- let bc = ((aV + aZ) / 2)
304- let bd = 0
305- let be = Issue(ba, bb, bd, bc, true)
306- let bf = calculateAssetId(be)
307- let bg = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aT), StringEntry(e, aX), IntegerEntry(h, bh), IntegerEntry(i, bi), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, ab), IntegerEntry(m, ad), be, StringEntry(j, toBase58String(bf)), IntegerEntry(s, M), IntegerEntry(k, bd)]
308- if (aL)
309- then (bg ++ [BooleanEntry(o, aL), IntegerEntry(s, M)])
310- else bg
311- }
280+@Callable(aG)
281+func initWithInitRatio (bd,be,K,L,aH) = {
282+ let bf = at(K)
283+ let aP = bf._1
284+ let aQ = bf._2
285+ let aR = bf._3
286+ let bg = at(L)
287+ let aT = bg._1
288+ let aU = bg._2
289+ let aV = bg._3
290+ if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
291+ then throw("Only admin can call this function")
292+ else if (isDefined(getBoolean(this, c)))
293+ then throw("DApp is already active")
294+ else if ((K == L))
295+ then throw("Assets must be different")
296+ else {
297+ let aW = ((("s" + take(aQ, 7)) + "_") + take(aU, 7))
298+ let aX = ((((("ShareToken of SwopFi protocol for " + aQ) + " and ") + aU) + " at address ") + toString(this))
299+ let aY = ((aR + aV) / 2)
300+ let aZ = 0
301+ let ba = Issue(aW, aX, aZ, aY, true)
302+ let bb = calculateAssetId(ba)
303+ let bc = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(d, aP), StringEntry(e, aT), IntegerEntry(h, bd), IntegerEntry(i, be), IntegerEntry(f, 0), IntegerEntry(g, 0), IntegerEntry(l, X), IntegerEntry(m, Z), ba, StringEntry(j, toBase58String(bb)), IntegerEntry(p, (E + (G * F))), IntegerEntry(k, aZ)]
304+ if (aH)
305+ then (bc ++ [BooleanEntry(o, aH), IntegerEntry(p, (E + (G * F)))])
306+ else bc
307+ }
312308 }
313309
314310
315311
316-@Callable(aK)
317-func keepLimitForFirstHarvest (bl) = if (!(N))
312+@Callable(aG)
313+func keepLimitForFirstHarvest (bh) = if (!(J))
318314 then throw("DApp is inactive at this moment")
319- else if (!(containsElement([w, x, y, B], aK.callerPublicKey)))
315+ else if (!(containsElement([v, w, x, z], aG.callerPublicKey)))
320316 then throw("Only admin can call this function")
321- else [IntegerEntry(u, bl)]
317+ else [IntegerEntry(q, bh)]
322318
323319
324320
325-@Callable(aK)
326-func replenishWithTwoTokens (bm) = {
327- let aO = aK.payments[0].assetId
328- let aR = aK.payments[1].assetId
329- let aN = aB(aK.payments[0].amount, aO)
330- let aQ = aB(aK.payments[1].amount, aR)
331- if (if ((X == 0))
332- then (Y == 0)
321+@Callable(aG)
322+func replenishWithTwoTokens (bi) = {
323+ let aK = aG.payments[0].assetId
324+ let aN = aG.payments[1].assetId
325+ let aJ = ax(aG.payments[0].amount, aK)
326+ let aM = ax(aG.payments[1].amount, aN)
327+ if (if ((T == 0))
328+ then (U == 0)
333329 else false)
334330 then {
335- let bn = au(aO)
336- let aT = bn._1
337- let aU = bn._2
338- let aV = bn._3
339- let bo = au(aR)
340- let aX = bo._1
341- let aY = bo._2
342- let aZ = bo._3
343- if ((aO == aR))
331+ let bj = aq(aK)
332+ let aP = bj._1
333+ let aQ = bj._2
334+ let aR = bj._3
335+ let bk = aq(aN)
336+ let aT = bk._1
337+ let aU = bk._2
338+ let aV = bk._3
339+ let bl = fraction(fraction(aj, ab, aJ), aa, fraction(ak, ab, aM))
340+ if ((aK == aN))
344341 then throw("Assets must be different")
345342 else {
346- let bc = ((aV + aZ) / 2)
347- let bd = fraction(pow(aN, aV, 5, 1, aV, HALFDOWN), pow(aQ, aZ, 5, 1, aZ, HALFDOWN), pow(10, 0, bc, 0, 0, HALFDOWN))
348- if (!(N))
343+ let aY = ((aR + aV) / 2)
344+ let aZ = fraction(pow(aJ, aR, 5, 1, aR, HALFDOWN), pow(aM, aV, 5, 1, aV, HALFDOWN), pow(10, 0, aY, 0, 0, HALFDOWN))
345+ if (!(J))
349346 then throw("DApp is inactive at this moment")
350- else if (if ((0 > bm))
347+ else if (if ((0 > bi))
351348 then true
352- else (bm > ag))
353- then throw(((("Slippage tolerance must be between 0 and " + toString(ag)) + " inclusively. Actual: ") + toString(bm)))
354- else if ((size(aK.payments) != 2))
349+ else (bi > ac))
350+ then throw(((("Slippage tolerance must be between 0 and " + toString(ac)) + " inclusively. Actual: ") + toString(bi)))
351+ else if ((size(aG.payments) != 2))
355352 then throw("Two attached assets expected")
356- else if (if ((aO != Q))
353+ else if (if ((((aa * (ac - bi)) / ac) > bl))
357354 then true
358- else (aR != R))
359- then throw(((("Incorrect assets attached. Expected: " + O) + " and ") + P))
360- else if ((bd == 0))
361- then throw("Too small amount to replenish")
362- else if (!(at))
363- then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
364- else [Reissue(Z, bd, true), IntegerEntry(f, aN), IntegerEntry(g, aQ), IntegerEntry(k, bd), ScriptTransfer(aK.caller, bd, Z)]
355+ else (bl > ((aa * (ac + bi)) / ac)))
356+ then throw("Incorrect assets amount: amounts must have the contract ratio")
357+ else if (if ((aK != M))
358+ then true
359+ else (aN != N))
360+ then throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
361+ else if ((aZ == 0))
362+ then throw("Too small amount to replenish")
363+ else if (!(ap))
364+ then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
365+ else [Reissue(V, aZ, true), IntegerEntry(f, aJ), IntegerEntry(g, aM), IntegerEntry(k, aZ), ScriptTransfer(aG.caller, aZ, V)]
365366 }
366367 }
367368 else {
368- let bp = fraction(fraction(X, af, aN), ae, fraction(Y, af, aQ))
369- let bq = fraction(aN, af, X)
370- let br = fraction(aQ, af, Y)
371- let bs = fraction(min([bq, br]), aa, af)
372- if (!(N))
369+ let bl = fraction(fraction(T, ab, aJ), aa, fraction(U, ab, aM))
370+ let bm = fraction(aJ, ab, T)
371+ let bn = fraction(aM, ab, U)
372+ let bo = fraction(min([bm, bn]), W, ab)
373+ if (!(J))
373374 then throw("DApp is inactive at this moment")
374- else if (if ((0 > bm))
375+ else if (if ((0 > bi))
375376 then true
376- else (bm > ag))
377- then throw(((("Slippage tolerance must be between 0 and " + toString(ag)) + " inclusively. Actual: ") + toString(bm)))
378- else if ((size(aK.payments) != 2))
377+ else (bi > ac))
378+ then throw(((("Slippage tolerance must be between 0 and " + toString(ac)) + " inclusively. Actual: ") + toString(bi)))
379+ else if ((size(aG.payments) != 2))
379380 then throw("Two attached assets expected")
380- else if (if ((aO != Q))
381+ else if (if ((aK != M))
381382 then true
382- else (aR != R))
383- then throw(((("Incorrect assets attached. Expected: " + O) + " and ") + P))
384- else if (if ((((ae * (ag - bm)) / ag) > bp))
383+ else (aN != N))
384+ then throw(((("Incorrect assets attached. Expected: " + K) + " and ") + L))
385+ else if (if ((((aa * (ac - bi)) / ac) > bl))
385386 then true
386- else (bp > ((ae * (ag + bm)) / ag)))
387+ else (bl > ((aa * (ac + bi)) / ac)))
387388 then throw("Incorrect assets amount: amounts must have the contract ratio")
388- else if ((bs == 0))
389+ else if ((bo == 0))
389390 then throw("Too small amount to replenish")
390- else if (!(at))
391- then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
392- else [IntegerEntry(f, (X + aN)), IntegerEntry(g, (Y + aQ)), IntegerEntry(k, (aa + bs)), Reissue(Z, bs, true), ScriptTransfer(aK.caller, bs, Z)]
391+ else if (!(ap))
392+ then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
393+ else [IntegerEntry(f, (T + aJ)), IntegerEntry(g, (U + aM)), IntegerEntry(k, (W + bo)), Reissue(V, bo, true), ScriptTransfer(aG.caller, bo, V)]
393394 }
394395 }
395396
396397
397398
398-@Callable(aK)
399+@Callable(aG)
399400 func withdraw () = {
400- let bt = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
401- let bu = bt._1
402- let bv = bt._2
403- let bw = aB(fraction(bu, X, aa), Q)
404- let bx = aB(fraction(bu, Y, aa), R)
405- if (!(N))
401+ let bp = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
402+ let bq = bp._1
403+ let br = bp._2
404+ let bs = ax(fraction(bq, T, W), M)
405+ let bt = ax(fraction(bq, U, W), N)
406+ if (!(J))
406407 then throw("DApp is inactive at this moment")
407- else if ((size(aK.payments) != 1))
408+ else if ((size(aG.payments) != 1))
408409 then throw("One attached payment expected")
409- else if ((bv != Z))
410- then throw(("Incorrect asset attached. Expected: " + toBase58String(Z)))
411- else if (!(at))
412- then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
413- else if (if ((bw > ap))
410+ else if ((br != V))
411+ then throw(("Incorrect asset attached. Expected: " + toBase58String(V)))
412+ else if (!(ap))
413+ then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
414+ else if (if ((bs > al))
414415 then true
415- else (bx > aq))
416- then aH(bw, bx)
417- else [IntegerEntry(f, (X - bw)), IntegerEntry(g, (Y - bx)), IntegerEntry(k, (aa - bu)), Burn(Z, bu), ScriptTransfer(aK.caller, bw, Q), ScriptTransfer(aK.caller, bx, R)]
416+ else (bt > am))
417+ then aD(bs, bt)
418+ else [IntegerEntry(f, (T - bs)), IntegerEntry(g, (U - bt)), IntegerEntry(k, (W - bq)), Burn(V, bq), ScriptTransfer(aG.caller, bs, M), ScriptTransfer(aG.caller, bt, N)]
418419 }
419420
420421
421422
422-@Callable(aK)
423-func exchange (by) = {
424- let bz = $Tuple2(aK.payments[0].amount, aK.payments[0].assetId)
425- let bu = bz._1
426- let bv = bz._2
427- func bA (bB,bC) = {
428- let bD = fraction(bC, bu, (bu + bB))
429- let bE = fraction(bD, (ad - ab), ad)
430- let bF = fraction(bD, ac, ad)
431- if ((by > bE))
432- then throw(((("Calculated amount to receive " + toString(bE)) + " is less than specified minimum ") + toString(by)))
433- else $Tuple3(bD, bE, bF)
423+@Callable(aG)
424+func exchange (bu) = {
425+ let bv = $Tuple2(aG.payments[0].amount, aG.payments[0].assetId)
426+ let bq = bv._1
427+ let br = bv._2
428+ func bw (bx,by) = {
429+ let bz = fraction(by, bq, (bq + bx))
430+ let bA = fraction(bz, (Z - X), Z)
431+ let bB = fraction(bz, Y, Z)
432+ if ((bu > bA))
433+ then throw(((("Calculated amount to receive " + toString(bA)) + " is less than specified minimum ") + toString(bu)))
434+ else $Tuple3(bz, bA, bB)
434435 }
435436
436- if (!(N))
437+ if (!(J))
437438 then throw("DApp is inactive at this moment")
438- else if (if ((X == 0))
439- then (Y == 0)
440- else false)
439+ else if (if ((T == 0))
440+ then true
441+ else (U == 0))
441442 then throw("Can't exchange with zero balance")
442- else if ((0 >= by))
443- then throw(("Minimal amount to receive must be positive. Actual: " + toString(by)))
444- else if ((size(aK.payments) != 1))
443+ else if ((0 >= bu))
444+ then throw(("Minimal amount to receive must be positive. Actual: " + toString(bu)))
445+ else if ((size(aG.payments) != 1))
445446 then throw("One attached payment expected")
446- else if (!(at))
447- then az(((((((((((((((("Suspicious state. Actual balances: " + toString(X)) + " ") + S) + ", ") + toString(Y)) + " ") + W) + ". State: ") + toString(ai(Q))) + " ") + S) + ", ") + toString(ai(R))) + " ") + W))
448- else if ((bv == Q))
447+ else if (!(ap))
448+ then av(((((((((((((((("Suspicious state. Actual balances: " + toString(T)) + " ") + O) + ", ") + toString(U)) + " ") + S) + ". State: ") + toString(ae(M))) + " ") + O) + ", ") + toString(ae(N))) + " ") + S))
449+ else if ((br == M))
449450 then {
450- let bG = R
451- let bH = bA(X, Y)
452- let bD = bH._1
453- let bE = bH._2
454- let bF = bH._3
455- let bI = (X + bu)
456- let bJ = ((Y - bE) - bF)
457- if (if (if ((Q == F))
458- then (ak >= bI)
451+ let bC = N
452+ let bD = bw(T, U)
453+ let bz = bD._1
454+ let bA = bD._2
455+ let bB = bD._3
456+ let bE = (T + bq)
457+ let bF = ((U - bA) - bB)
458+ if (if (if ((M == H))
459+ then (ag >= bE)
459460 else false)
460461 then true
461- else if ((R == F))
462- then (ak >= bJ)
462+ else if ((N == H))
463+ then (ag >= bF)
463464 else false)
464- then aE(bE, aq, W)
465- else [IntegerEntry(f, bI), IntegerEntry(g, bJ), ScriptTransfer(aK.caller, bE, bG), ScriptTransfer(C, bF, bG)]
465+ then aA(bA, am, S)
466+ else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aG.caller, bA, bC), ScriptTransfer(A, bB, bC)]
466467 }
467- else if ((bv == R))
468+ else if ((br == N))
468469 then {
469- let bG = Q
470- let bK = bA(Y, X)
471- let bD = bK._1
472- let bE = bK._2
473- let bF = bK._3
474- let bI = ((X - bE) - bF)
475- let bJ = (Y + bu)
476- if (if (if ((Q == F))
477- then (ak >= bI)
470+ let bC = M
471+ let bG = bw(U, T)
472+ let bz = bG._1
473+ let bA = bG._2
474+ let bB = bG._3
475+ let bE = ((T - bA) - bB)
476+ let bF = (U + bq)
477+ if (if (if ((M == H))
478+ then (ag >= bE)
478479 else false)
479480 then true
480- else if ((R == F))
481- then (ak >= bJ)
481+ else if ((N == H))
482+ then (ag >= bF)
482483 else false)
483- then aE(bE, ap, S)
484- else [IntegerEntry(f, bI), IntegerEntry(g, bJ), ScriptTransfer(aK.caller, bE, bG), ScriptTransfer(C, bF, bG)]
484+ then aA(bA, al, O)
485+ else [IntegerEntry(f, bE), IntegerEntry(g, bF), ScriptTransfer(aG.caller, bA, bC), ScriptTransfer(A, bB, bC)]
485486 }
486- else throw(((("Incorrect asset attached. Expected: " + O) + " or ") + P))
487+ else throw(((("Incorrect asset attached. Expected: " + K) + " or ") + L))
487488 }
488489
489490
490491
491-@Callable(aK)
492-func shutdown () = if (!(N))
492+@Callable(aG)
493+func shutdown () = if (!(J))
493494 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, n), "the cause wasn't specified")))
494- else if (!(containsElement([w, x, y, z], aK.callerPublicKey)))
495+ else if (!(containsElement([v, w, x, y], aG.callerPublicKey)))
495496 then throw("Only admin can call this function")
496- else az("Paused by admin")
497+ else av("Paused by admin")
497498
498499
499500
500-@Callable(aK)
501-func activate () = if (N)
501+@Callable(aG)
502+func activate () = if (J)
502503 then throw("DApp is already active")
503- else if (!(containsElement([w, x, y, z], aK.callerPublicKey)))
504+ else if (!(containsElement([v, w, x, y], aG.callerPublicKey)))
504505 then throw("Only admin can call this function")
505506 else [BooleanEntry(c, true), DeleteEntry(n)]
506507
507508
508509
509-@Callable(aK)
510-func takeIntoAccountExtraFunds (bL) = {
511- let bM = (ar - X)
512- let bN = (as - Y)
513- let bO = (bM - (if ((Q == F))
514- then bL
510+@Callable(aG)
511+func takeIntoAccountExtraFunds (bH) = {
512+ let bI = (an - T)
513+ let bJ = (ao - U)
514+ let bK = (bI - (if ((M == H))
515+ then bH
515516 else 0))
516- let bP = (bN - (if ((R == F))
517- then bL
517+ let bL = (bJ - (if ((N == H))
518+ then bH
518519 else 0))
519- if (!(N))
520+ if (!(J))
520521 then throw("DApp is inactive at this moment")
521- else if ((aK.caller != this))
522+ else if ((aG.caller != this))
522523 then throw("Only the DApp itself can call this function")
523- else if ((0 > bL))
524- then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bL)))
525- else if (if ((0 > bM))
524+ else if ((0 > bH))
525+ then throw(("Argument 'amountLeave' cannot be negative. Actual: " + toString(bH)))
526+ else if (if ((0 > bI))
526527 then true
527- else (0 > bN))
528- then az("Enroll amount negative")
529- else if (if ((0 > bO))
528+ else (0 > bJ))
529+ then av("Enroll amount negative")
530+ else if (if ((0 > bK))
530531 then true
531- else (0 > bP))
532+ else (0 > bL))
532533 then throw("Too large amountLeave")
533- else [IntegerEntry(f, (X + bO)), IntegerEntry(g, (Y + bP)), IntegerEntry(("last_income_" + O), bO), IntegerEntry(("last_income_" + P), bP)]
534+ else [IntegerEntry(f, (T + bK)), IntegerEntry(g, (U + bL)), IntegerEntry(("last_income_" + K), bK), IntegerEntry(("last_income_" + L), bL)]
534535 }
535536
536537
537-@Verifier(bQ)
538-func bR () = {
539- let T = bQ
540- if ($isInstanceOf(T, "InvokeScriptTransaction"))
538+@Verifier(bM)
539+func bN () = {
540+ let P = bM
541+ if ($isInstanceOf(P, "InvokeScriptTransaction"))
541542 then {
542- let bS = T
543- let bT = if ((bS.dApp == this))
544- then (bS.function == "takeIntoAccountExtraFunds")
543+ let bO = P
544+ let bP = if ((bO.dApp == this))
545+ then (bO.function == "takeIntoAccountExtraFunds")
545546 else false
546- let bU = if ((bS.dApp == E))
547- then if (if (if ((bS.function == "lockNeutrino"))
548- then (size(bS.payments) == 1)
547+ let bQ = if ((bO.dApp == C))
548+ then if (if (if ((bO.function == "lockNeutrino"))
549+ then (size(bO.payments) == 1)
549550 else false)
550- then (bS.payments[0].assetId == F)
551+ then (bO.payments[0].assetId == H)
551552 else false)
552553 then true
553- else if ((bS.function == "unlockNeutrino"))
554- then (size(bS.payments) == 0)
554+ else if ((bO.function == "unlockNeutrino"))
555+ then (size(bO.payments) == 0)
555556 else false
556557 else false
557- let bV = if (if (if (sigVerify(bQ.bodyBytes, bQ.proofs[0], w))
558+ let bR = if (if (if (sigVerify(bM.bodyBytes, bM.proofs[0], v))
558559 then true
559- else sigVerify(bQ.bodyBytes, bQ.proofs[0], x))
560+ else sigVerify(bM.bodyBytes, bM.proofs[0], w))
560561 then true
561- else sigVerify(bQ.bodyBytes, bQ.proofs[0], y))
562+ else sigVerify(bM.bodyBytes, bM.proofs[0], x))
562563 then true
563- else sigVerify(bQ.bodyBytes, bQ.proofs[0], A)
564- if (bT)
564+ else sigVerify(bM.bodyBytes, bM.proofs[0], z)
565+ if (bP)
565566 then true
566- else bU
567+ else bQ
567568 }
568- else sigVerify(bQ.bodyBytes, bQ.proofs[0], bQ.senderPublicKey)
569+ else sigVerify(bM.bodyBytes, bM.proofs[0], bM.senderPublicKey)
569570 }
570571

github/deemru/w8io/169f3d6 
211.15 ms