tx · Aykfwr5jGhNU1JhkCPYo8TqJ3CeJcoZe7MeXSiyMnhgb

3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS:  -0.14000000 Waves

2022.10.24 16:06 [2286532] smart account 3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS > SELF 0.00000000 Waves

{ "type": 13, "id": "Aykfwr5jGhNU1JhkCPYo8TqJ3CeJcoZe7MeXSiyMnhgb", "fee": 14000000, "feeAssetId": null, "timestamp": 1666616810525, "version": 2, "chainId": 84, "sender": "3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS", "senderPublicKey": "C7xgcYqQ8qV8rmvzAjhQWq4cz82F6VJfXMNygvrTXsfW", "proofs": [ "5BZXzsSYq9yZD9Y2Uxc3H4ykVxPn5wUPMqtRW7gytH79Jn1omvsmQdSBFcx7QGMDeiQ8cfxzcT4C8QZqSYWGUGq9", "3AnhyBKhrqvBbai5RR9CGhEn1hQwdmfJanoQ1oPZDKfwcjZTKfbwxUUqSd4dTYA11cjASpFA5HCWLAESp36G4tiD" ], "script": "base64:BgJmCAISBAoCEQESBQoDCAEBEgUKAwEEARIECgIRCBIDCgEBEgYKBAgIAQgSBAoCCAESAwoBERIECgIRARIFCgMBCAgSBAoCCAESBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIAWAAJUFJFQ0lTSU9OAMCEPQAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgAIREVDSU1BTFMABgANTUlOX1JBTVBfVElNRQkAaQIAgKMFADwAB3ZlcnNpb24CBTMuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0Fzc2V0cwIJYXNzZXRfaWRzAA1rQXNzZXRCYWxhbmNlAghfYmFsYW5jZQAHa0FjdGl2ZQIGYWN0aXZlAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rU2hhcmVBc3NldElkAg5zaGFyZV9hc3NldF9pZAARa1NoYXJlQXNzZXRTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAEa0ZlZQIKY29tbWlzc2lvbgASa0RBcHBUaHJlc2hvbGRDb2VmAhFkQXBwVGhyZXNob2xkQ29lZgAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQAD2tVc2VyR1N3b3BJbkdvdgINX0dTd29wX2Ftb3VudAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwARa0xQRmFybWluZ0FkZHJlc3MCCmxwX2Zhcm1pbmcABm9yYWNsZQkBB0FkZHJlc3MBARoBVEgTlwzA0zPMJTKAtin3p2RogKvjzHtLmQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5QdWJLZXlJbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEnN0YWtpbmdVU0ROQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtVU0ROQWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tGYXJtaW5nQWRkcmVzcwAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzAARVU0ROASC2JinDBPXOU5GkDkt1JC9kjFGx+t+vVCm9SNIdKrKq0QANc3Rha2luZ0Fzc2V0cwkAzAgCCQDYBAEFBFVTRE4FA25pbAAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAxzaGFyZUFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa1NoYXJlQXNzZXRJZAALc2hhcmVTdXBwbHkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtTaGFyZUFzc2V0U3VwcGx5AAlmZWVTY2FsZTYAwIQ9AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDACgFCWZlZVNjYWxlNgBkAAlpbml0aWFsX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCWluaXRpYWxfQQAIZnV0dXJlX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCGZ1dHVyZV9BAA5pbml0aWFsX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg5pbml0aWFsX0FfdGltZQAAAA1mdXR1cmVfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDWZ1dHVyZV9BX3RpbWUAAAAIYXNzZXRJZHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUHa0Fzc2V0cwIBLAAGbkNvaW5zCQCQAwEFCGFzc2V0SWRzAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQ10aHJvd0lzQWN0aXZlAAkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUBCGlzQWN0aXZlAAMFBmFjdGl2ZQUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIFBHRoaXMIBQFpBmNhbGxlcgUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24ABGJpZzIJALYCAQACAAZpdGVyMTAJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJBQNuaWwABml0ZXIxNQkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsAAZpdGVyMTYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPBQNuaWwADmJsb2NrVGltZXN0YW1wBQZoZWlnaHQBBmFzc2VydAEBYQMFAWEHBgEUY2FsY3VsYXRlRmVlRGlzY291bnQBCHVzZXJBZGRyBAR1c2VyBAckbWF0Y2gwBQh1c2VyQWRkcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAF1BQckbWF0Y2gwCQClCAEFAXUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF1BQckbWF0Y2gwBQF1CQACAQIYVW5rbm93IHR5cGUgb2YgdXNlciBBZGRyBApzd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEdXNlcgUPa1VzZXJHU3dvcEluR292AAAEC2dTd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEdXNlcgUPa1VzZXJHU3dvcEluR292BQpzd29wQW1vdW50BA5kaXNjb3VudFZhbHVlcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFD2tEaXNjb3VudFZhbHVlcwIBLAQJZGlzY291bnRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUKa0Rpc2NvdW50cwIBLAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAACQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAAAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAEDAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAgMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAQFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwADAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAEBQlmZWVTY2FsZTYBAl9BAAQCdDEFDWZ1dHVyZV9BX3RpbWUEAkExBQhmdXR1cmVfQQMJAGYCBQJ0MQUOYmxvY2tUaW1lc3RhbXAEAkEwBQlpbml0aWFsX0EEAnQwBQ5pbml0aWFsX0FfdGltZQMJAGYCBQJBMQUCQTAJAGQCBQJB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MTAxNDYCXzIEDHhwX3JlZHVjZWRfaQkAkQMCBQp4cF9yZWR1Y2VkBQFpBAJkeQkAZQIJAGUCBQx4cF9yZWR1Y2VkX2kJAQdnZXRfeV9EBAUDYW1wBQFpBQp4cF9yZWR1Y2VkBQJEMQABCQCUCgIFAmR5CQBlAgUEZHlfMAUCZHkBDWdldFN0ckFzc2V0SWQBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJANgEAQUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlCQCUCgICDGxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICDnVubG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBA0kdDAxMDcxMDEwNzc2CQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMDcxMDEwNzc2Al8xBAtzdGFraW5nQWRkcggFDSR0MDEwNzEwMTA3NzYCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwEDSR0MDEwODYyMTA5MjgJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDEwODYyMTA5MjgCXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTA4NjIxMDkyOAJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEFc3Rha2UCBmFtb3VudA1hc3NldElkU3RyaW5nAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDWFzc2V0SWRTdHJpbmcEDSR0MDExMTE1MTEyMTcJARFjYWxjU3Rha2luZ1BhcmFtcwMGBQZhbW91bnQJANkEAQUNYXNzZXRJZFN0cmluZwQEY2FsbAgFDSR0MDExMTE1MTEyMTcCXzEEBGFkZHIIBQ0kdDAxMTExNTExMjE3Al8yBAZwYXJhbXMIBQ0kdDAxMTExNTExMjE3Al8zBAhwYXltZW50cwgFDSR0MDExMTE1MTEyMTcCXzQJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwAAAQd1bnN0YWtlAgZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1hc3NldElkU3RyaW5nBA0kdDAxMTQwMjExNTA1CQERY2FsY1N0YWtpbmdQYXJhbXMDBwUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAxMTQwMjExNTA1Al8xBARhZGRyCAUNJHQwMTE0MDIxMTUwNQJfMgQGcGFyYW1zCAUNJHQwMTE0MDIxMTUwNQJfMwQIcGF5bWVudHMIBQ0kdDAxMTQwMjExNTA1Al80CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMAAAEMc3Rha2VkQW1vdW50AQdhc3NldElkBBZzdGFrZWRBbW91bnRDYWxjdWxhdGVkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA2FJZAUHJG1hdGNoMAMJAAACBQNhSWQFBFVTRE4JAJoIAgUSc3Rha2luZ1VTRE5BZGRyZXNzCQCsAgIJAKwCAgkArAICAgxycGRfYmFsYW5jZV8JANgEAQUDYUlkAgFfCQClCAEFBHRoaXMAAAMJAAECBQckbWF0Y2gwAgRVbml0AAAJAAIBAgtNYXRjaCBlcnJvcgQHJG1hdGNoMAUWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkAAAEPY2hlY2tTdXNwaWNpb3VzAAQQY29udHJhY3RCYWxhbmNlcwkBA194cAAKAQxjaGVja0JhbGFuY2UCA2FjYwdhc3NldElkBA0kdDAxMjExNjEyMTQxBQNhY2MECnN1c3BpY2lvdXMIBQ0kdDAxMjExNjEyMTQxAl8xBAFpCAUNJHQwMTIxMTYxMjE0MQJfMgMFCnN1c3BpY2lvdXMJAJQKAgUKc3VzcGljaW91cwUBaQQIYUJhbGFuY2UJAGQCCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAkBDHN0YWtlZEFtb3VudAEJANkEAQUHYXNzZXRJZAMJAGYCCQCRAwIFEGNvbnRyYWN0QmFsYW5jZXMFAWkFCGFCYWxhbmNlCQCUCgIGBQFpCQCUCgIHCQBkAgUBaQABCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBwAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxjaGVja0JhbGFuY2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBEXN1c3BlbmRTdXNwaWNpb3VzAQFpCQEHc3VzcGVuZAEJAKwCAgIdU3VzcGljaW91cyBzdGF0ZSB3aXRoIGFzc2V0OiAJAJEDAgUIYXNzZXRJZHMFAWkBDnJldHVyblBheW1lbnRzAgZjYWxsZXIIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHcGF5bWVudAkAzQgCBQNhY2MJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcggFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkCgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1wYXJzZVBheW1lbnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARJjaGVja0RBcHBUaHJlc2hvbGQBC25ld0JhbGFuY2VzBBFkQXBwVGhyZXNob2xkQ29lZgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFEmtEQXBwVGhyZXNob2xkQ29lZgIYTm8gZEFwcFRocmVzaG9sZENvZWYga2V5BA50aHJlc2hvbGRTY2FsZQCQTgQKbWF4QmFsYW5jZQkAlgMBBQtuZXdCYWxhbmNlcwQKbWluQmFsYW5jZQkAlwMBBQtuZXdCYWxhbmNlcwQFcmF0aW8JAGsDBQptYXhCYWxhbmNlBQ50aHJlc2hvbGRTY2FsZQUKbWluQmFsYW5jZQMJAGYCBQVyYXRpbwkAaAIFEWRBcHBUaHJlc2hvbGRDb2VmBQ50aHJlc2hvbGRTY2FsZQkAAgECOE5ldyBiYWxhbmNlIGluIGFzc2V0cyBvZiB0aGUgREFwcCBpcyBsZXNzIHRoYW4gdGhyZXNob2xkBwEKY2hlY2tDb2lucwEIYXNzZXRJZHMEBWNvaW5zCQC1CQIFCGFzc2V0SWRzAgEsAwkAZgIJAJADAQUFY29pbnMACgkAAgECIFRvIG1hbnkgY29pbnMsIG1heCBjb2lucyBzaXplIDEwCgEJY2hlY2tDb2luAgVlcnJvcgdhc3NldElkBAVhc3NldAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDZBAEFB2Fzc2V0SWQJAKwCAgISZnJvbUJhc2U1OFN0cmluZzogBQdhc3NldElkBAhkZWNpbWFscwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQVhc3NldAkArAICAgthc3NldEluZm86IAUHYXNzZXRJZAhkZWNpbWFscwMJAQIhPQIFCGRlY2ltYWxzBQhERUNJTUFMUwkAAgECDndyb25nIGRlY2ltYWxzBwoAAiRsBQVjb2lucwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQljaGVja0NvaW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoUA21zZwEBRAICeHADYW1wBAFECQEOZ2V0X0RfaW50ZXJuYWwCBQJ4cAUDYW1wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQICAUQFAUQFA25pbAUBRANtc2cBBGluaXQDCGFzc2V0SWRzAl9BEl9kQXBwVGhyZXNob2xkQ29lZgMJAQEhAQkAnggBBQR0aGlzCQACAQITQWxyZWFkeSBpbml0aWFsaXplZAMJAGcCAAAFAl9BCQACAQIUQW1wIG11c3QgYmUgbXVzdCA+IDADCQBnAgAABRJfZEFwcFRocmVzaG9sZENvZWYJAAIBAh9kQXBwIFRocmVzaG9sZCBDb2VmIG11c3QgYmUgPiAwBAlzaGFyZU5hbWUCC3NfTXVsdGlfVVNEBBBzaGFyZURlc2NyaXB0aW9uCQCsAgICQlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciBNdWx0aVN0YWJsZSBVU0QgcG9vbCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBAppc3N1ZVRva2VuCQDCCAUFCXNoYXJlTmFtZQUQc2hhcmVEZXNjcmlwdGlvbgAAAAYGBAd0b2tlbklkCQC4CAEFCmlzc3VlVG9rZW4DCQEKY2hlY2tDb2lucwEFCGFzc2V0SWRzCQEFdGhyb3cACQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tBc3NldHMFCGFzc2V0SWRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQIFBGtGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQINYmFzZV9mZWVfZmxhdAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFB3Rva2VuSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtEQXBwVGhyZXNob2xkQ29lZgUSX2RBcHBUaHJlc2hvbGRDb2VmCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCBQppc3N1ZVRva2VuBQNuaWwDbXNnAQxhZGRMaXF1aWRpdHkDDW1pbk1pbnRBbW91bnQMc3Rha2VGYXJtaW5nCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABANhbXAJAQJfQQAEAnhwCQEDX3hwAAQCRDADCQAAAgULc2hhcmVTdXBwbHkAAAAACQEHZ2V0RE1lbQIFAnhwBQNhbXAEDSR0MDE1MzQ5MTU1NjIDCQBmAgkAkAMBCAUDbXNnCHBheW1lbnRzBQZuQ29pbnMJAJQKAgkA0QgCCAUDbXNnCHBheW1lbnRzCQBlAgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAMwIAgkAkQMCCAUDbXNnCHBheW1lbnRzCQBlAgkAkAMBCAUDbXNnCHBheW1lbnRzAAEFA25pbAkAlAoCCAUDbXNnCHBheW1lbnRzBQNuaWwECHBheW1lbnRzCAUNJHQwMTUzNDkxNTU2MgJfMQQHbG9ja0ZlZQgFDSR0MDE1MzQ5MTU1NjICXzIEDHBheW1lbnRzU2l6ZQkAkAMBBQhwYXltZW50cwoBDXZhbGlkUGF5bWVudHMBAW4DCQBmAgUMcGF5bWVudHNTaXplBQZuQ29pbnMJAAIBCQCsAgICEHBheW1lbnRzIHNpemUgPiAJAKQDAQUGbkNvaW5zAwkAZgIAAQUMcGF5bWVudHNTaXplCQACAQIRcGF5bWVudHMgc2l6ZSA8IDEDAwkAAAIFC3NoYXJlU3VwcGx5AAAJAQIhPQIFBm5Db2lucwUMcGF5bWVudHNTaXplBwkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMKAQxwYXltYW50VmFsaWQCA2FjYwdwYXltZW50AwkBD2NvbnRhaW5zRWxlbWVudAIFCGFzc2V0SWRzCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQGCQACAQIYSW52YWxpZCBhc3NldCBpbiBwYXltZW50CgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHBheW1hbnRWYWxpZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAQEhAQkBDXZhbGlkUGF5bWVudHMBBQxwYXltZW50c1NpemUJAQV0aHJvdwAECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyBQhwYXltZW50cwoBDXBhcnNlUGF5bWVudHMCA2FjYwdhc3NldElkBA0kdDAxNjQzMjE2NDU4BQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMTY0MzIxNjQ1OAJfMQQBaQgFDSR0MDE2NDMyMTY0NTgCXzIKAQxwYXJzZVBheW1lbnQCCm5ld0JhbGFuY2UHcGF5bWVudAMJAAACCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQFB2Fzc2V0SWQJAGQCBQpuZXdCYWxhbmNlCAUHcGF5bWVudAZhbW91bnQFCm5ld0JhbGFuY2UECW5ld0JhbGFjZQoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJEDAgUCeHAFAWkKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHBhcnNlUGF5bWVudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAlAoCCQDNCAIFC25ld0JhbGFuY2VzBQluZXdCYWxhY2UJAGQCBQFpAAEEDSR0MDE2ODA4MTY4NzUKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1wYXJzZVBheW1lbnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtuZXdCYWxhbmNlcwgFDSR0MDE2ODA4MTY4NzUCXzEEAWsIBQ0kdDAxNjgwODE2ODc1Al8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkBBmFzc2VydAEJAGYCBQJEMQUCRDAJAAIBAgdEMSA+IEQwBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFA21zZwZjYWxsZXIKARFjYWxjU2NyaXB0QWN0aW9ucwIDYWNjCm5ld0JhbGFuY2UEDSR0MDE3MTk1MTcyMzYFA2FjYwQLaW52QmFsYW5jZXMIBQ0kdDAxNzE5NTE3MjM2Al8xBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTcxOTUxNzIzNgJfMgQBaQgFDSR0MDE3MTk1MTcyMzYCXzMDCQBmAgULc2hhcmVTdXBwbHkAAAQEX2ZlZQkAaQIJAGgCCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQZuQ29pbnMJAGgCAAQJAGUCBQZuQ29pbnMAAQQEZmVlcwQMaWRlYWxCYWxhbmNlCQBrAwUCRDEJAJEDAgUCeHAFAWkFAkQwBApkaWZmZXJlbmNlAwkAZgIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFDGlkZWFsQmFsYW5jZQkAawMFBF9mZWUFCmRpZmZlcmVuY2UFCWZlZVNjYWxlNgQOZ292ZXJuYW5jZUZlZXMJAGsDBQRmZWVzBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYEDGZpbmFsQmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBANwbXQJAGUCBQpuZXdCYWxhbmNlCQCRAwIFAnhwBQFpBAZscEZlZXMJAGUCBQRmZWVzBQ5nb3Zlcm5hbmNlRmVlcwQDaW52AwkAZgIFA3BtdAAACQEFc3Rha2UCCQBlAgUDcG10BQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpCQEHdW5zdGFrZQIFBGZlZXMJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAlQoDCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UFDGZpbmFsQmFsYW5jZQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBANpbnYJAQVzdGFrZQIFCm5ld0JhbGFuY2UJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYJAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUKbmV3QmFsYW5jZQkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQpuZXdCYWxhbmNlCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAxODk0MTE5MDI5CgACJGwFC25ld0JhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARFjYWxjU2NyaXB0QWN0aW9ucwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLaW52QmFsYW5jZXMIBQ0kdDAxODk0MTE5MDI5Al8xBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTg5NDExOTAyOQJfMgQCRDIJAQdnZXRETWVtAgULaW52QmFsYW5jZXMFA2FtcAQLbWludF9hbW91bnQDCQAAAgULc2hhcmVTdXBwbHkAAAUCRDEJAGsDBQtzaGFyZVN1cHBseQkAZQIFAkQyBQJEMAUCRDADCQEGYXNzZXJ0AQkAZwIFC21pbnRfYW1vdW50BQ1taW5NaW50QW1vdW50CQACAQIUU2xpcHBhZ2Ugc2NyZXdlZCB5b3UDBQxzdGFrZUZhcm1pbmcEAnJlCQD8BwQFBHRoaXMCDHJlaXNzdWVTaGFyZQkAzAgCBQttaW50X2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUCcmUFAnJlBAFzCQD8BwQFDmZhcm1pbmdBZGRyZXNzAg9sb2NrU2hhcmVUb2tlbnMJAMwIAgkApQgBBQR0aGlzCQDMCAIFCGxvY2tUeXBlBQNuaWwJAM4IAgkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQttaW50X2Ftb3VudAUDbmlsBQdsb2NrRmVlAwkAAAIFAXMFAXMJAM0IAgUNc2NyaXB0QWN0aW9ucwkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgULc2hhcmVTdXBwbHkFC21pbnRfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgULbWludF9hbW91bnQFDHNoYXJlQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQFA25pbANtc2cBDmNhbGNNaW50QW1vdW50AgtuZXdCYWxhbmNlcwR1c2VyBANhbXAJAQJfQQAEAnhwCQEDX3hwAAQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAMJAAACBQtzaGFyZVN1cHBseQAACQCUCgIFA25pbAUCRDEEAkQwCQEHZ2V0RE1lbQIFAnhwBQNhbXAEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBBQR1c2VyCgEPY2FsY0ludkJhbGFuY2VzAgNhY2MKbmV3QmFsYW5jZQQNJHQwMjAyNzkyMDMwNQUDYWNjBAtpbnZCYWxhbmNlcwgFDSR0MDIwMjc5MjAzMDUCXzEEAWkIBQ0kdDAyMDI3OTIwMzA1Al8yBARfZmVlCQBpAgkAaAIJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFBm5Db2lucwkAaAIABAkAZQIFBm5Db2lucwABBARmZWVzBAxpZGVhbEJhbGFuY2UJAGsDBQJEMQkAkQMCBQJ4cAUBaQUCRDAECmRpZmZlcmVuY2UDCQBmAgUMaWRlYWxCYWxhbmNlBQpuZXdCYWxhbmNlCQBlAgUMaWRlYWxCYWxhbmNlBQpuZXdCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUMaWRlYWxCYWxhbmNlCQBrAwUEX2ZlZQUKZGlmZmVyZW5jZQUJZmVlU2NhbGU2BBBpbnZhcmlhbnRCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUEZmVlcwkAlAoCCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQBkAgUBaQABBA0kdDAyMDkwNzIwOTc3CgACJGwFC25ld0JhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY2FsY0ludkJhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtpbnZCYWxhbmNlcwgFDSR0MDIwOTA3MjA5NzcCXzEEAWsIBQ0kdDAyMDkwNzIwOTc3Al8yBAJEMgkBB2dldERNZW0CBQtpbnZCYWxhbmNlcwUDYW1wBAptaW50QW1vdW50CQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwCQCUCgIFA25pbAUKbWludEFtb3VudANtc2cBDHJlaXNzdWVTaGFyZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFA21zZwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUGYW1vdW50BgUDbmlsA21zZwEFZ2V0RHkECWFzc2V0RnJvbQdhc3NldFRvAmR4C3VzZXJBZGRyZXNzBAJ4cAkBA194cAAECWZyb21JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQlhc3NldEZyb20CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHYXNzZXRUbwIRdW5rbm93biB0b2tlbiBvdXQEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEAmR5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEJAQdBZGRyZXNzAQkA2QQBBQt1c2VyQWRkcmVzcwQEX2ZlZQkAawMJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFAmR5BQlmZWVTY2FsZTYJAJQKAgUDbmlsCQCUCgIJAGUCBQJkeQUEX2ZlZQUEX2ZlZQNtc2cBCGV4Y2hhbmdlAgh0b2tlbk91dAZtaW5fZHkJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAQHdG9rZW5JbgkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQCZHgIBQdwYXltZW50BmFtb3VudAQJZnJvbUluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFB3Rva2VuSW4CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAJ4cAkBA194cAAEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEA19keQkAZQIJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQF5AAEEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCAUDbXNnDG9yaWdpbkNhbGxlcgQEX2ZlZQkAawMFA19keQkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAJkeQkAZQIFA19keQUEX2ZlZQQOZ292ZXJuYW5jZUZlZXMJAGsDBQRfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYDCQEGYXNzZXJ0AQkAZwIFAmR5BQZtaW5fZHkJAAIBAi5FeGNoYW5nZSByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyMzAxODIzMDQ0BQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjMwMTgyMzA0NAJfMQQBaQgFDSR0MDIzMDE4MjMwNDQCXzIDCQAAAgUBaQUJZnJvbUluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGQCBQx0b2tlbkJhbGFuY2UFAmR4CQBkAgUBaQABAwkAAAIFAWkFB3RvSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUDX2R5CQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjMyOTUyMzM1NgoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLbmV3QmFsYW5jZXMIBQ0kdDAyMzI5NTIzMzU2Al8xBAFpCAUNJHQwMjMyOTUyMzM1NgJfMgMJARJjaGVja0RBcHBUaHJlc2hvbGQBBQtuZXdCYWxhbmNlcwkBBXRocm93AAQBcwkBBXN0YWtlAggFB3BheW1lbnQGYW1vdW50CQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQDCQAAAgUBcwUBcwQCdXMJAQd1bnN0YWtlAgUDX2R5BQh0b2tlbk91dAMJAAACBQJ1cwUCdXMEBmxwRmVlcwkAZQIFBF9mZWUFDmdvdmVybmFuY2VGZWVzBAdhaXJkcm9wAwkAZgIFBmxwRmVlcwAACQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCB2FpckRyb3AFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdG9rZW5PdXRCNTgFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSW4FDWtBc3NldEJhbGFuY2UFAXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIdG9rZW5PdXQFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQNfZHkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFA21zZwZjYWxsZXIFAmR5BQt0b2tlbk91dEI1OAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFDmdvdmVybmFuY2VGZWVzBQt0b2tlbk91dEI1OAUDbmlsCQDMCAIFAmR5CQDMCAIFC3Rva2VuT3V0QjU4BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQh3aXRoZHJhdwEKbWluQW1vdW50cwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQJcG10QW1vdW50CAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50BApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbgQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwxvcmlnaW5DYWxsZXIIBQNtc2cIcGF5bWVudHMKARFjYWxjU2NyaXB0QWN0aW9ucwIDYWNjB2JhbGFuY2UEDSR0MDI0NjQ3MjQ2NzUFA2FjYwQNc2NyaXB0QWN0aW9ucwgFDSR0MDI0NjQ3MjQ2NzUCXzEEAWkIBQ0kdDAyNDY0NzI0Njc1Al8yBAd3QW1vdW50CQBrAwUHYmFsYW5jZQUJcG10QW1vdW50BQtzaGFyZVN1cHBseQMJAQZhc3NlcnQBCQBnAgUHd0Ftb3VudAkAkQMCBQptaW5BbW91bnRzBQFpCQACAQIwV2l0aGRyYXdhbCByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkBAJ1cwkBB3Vuc3Rha2UCBQd3QW1vdW50CQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFAnVzBQJ1cwkAlAoCCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUBaQUNa0Fzc2V0QmFsYW5jZQkAZQIFB2JhbGFuY2UFB3dBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFA21zZwxvcmlnaW5DYWxsZXIFB3dBbW91bnQJANkEAQkAkQMCBQhhc3NldElkcwUBaQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAyNTE2NTI1MjMzCgACJGwJAQNfeHAACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2FsY1NjcmlwdEFjdGlvbnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEDXNjcmlwdEFjdGlvbnMIBQ0kdDAyNTE2NTI1MjMzAl8xBAFpCAUNJHQwMjUxNjUyNTIzMwJfMgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQlwbXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBlAgULc2hhcmVTdXBwbHkFCXBtdEFtb3VudAUDbmlsA21zZwESd2l0aGRyYXdXaXRoVW5sb2NrAgptaW5BbW91bnRzDHVubG9ja0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAGcCAAAFDHVubG9ja0Ftb3VudAkAAgECHlVubG9jayBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZQQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwZjYWxsZXIIBQNtc2cIcGF5bWVudHMECXBtdEFtb3VudAMJAGYCCQCQAwEIBQNtc2cIcGF5bWVudHMAAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQAAAQGdW5sb2NrCQD8BwQFDmZhcm1pbmdBZGRyZXNzAhN3aXRoZHJhd1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAwkAAAIFBnVubG9jawUGdW5sb2NrBA53aXRoZHJhd0Ftb3VudAkAZAIFCXBtdEFtb3VudAUMdW5sb2NrQW1vdW50BANpbnYJAPwHBAUEdGhpcwIId2l0aGRyYXcJAMwIAgUKbWluQW1vdW50cwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFDndpdGhkcmF3QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBE2NhbGNXaXRoZHJhd09uZUNvaW4DC3Rva2VuQW1vdW50CHRva2VuT3V0BHVzZXIDCQBnAgAABQt0b2tlbkFtb3VudAkAAgECF0Ftb3VudCBtdXN0IGJlIHBvc2l0aXZlBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAkAlAoCBQNuaWwICQEUX2NhbGNXaXRoZHJhd09uZUNvaW4ECQEDX3hwAAULdG9rZW5BbW91bnQFAWkJAQdBZGRyZXNzAQkA2QQBBQR1c2VyAl8xA21zZwEPd2l0aGRyYXdPbmVDb2luAgh0b2tlbk91dAltaW5BbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cMb3JpZ2luQ2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUKcG10QXNzZXRJZAUMc2hhcmVBc3NldElkCQACAQINdW5rbm93biB0b2tlbgQIb3V0SW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQCeHAJAQNfeHAABA0kdDAyNzI2NTI3MzQ3CQEUX2NhbGNXaXRoZHJhd09uZUNvaW4EBQJ4cAUJcG10QW1vdW50BQhvdXRJbmRleAgFA21zZwxvcmlnaW5DYWxsZXIEAmR5CAUNJHQwMjcyNjUyNzM0NwJfMQQGZHlfZmVlCAUNJHQwMjcyNjUyNzM0NwJfMgMJAQZhc3NlcnQBCQBnAgUCZHkFCW1pbkFtb3VudAkAAgECGE5vdCBlbm91Z2ggY29pbnMgcmVtb3ZlZAQOZ292ZXJuYW5jZUZlZXMJAGsDBQZkeV9mZWUFDWZlZUdvdmVybmFuY2UFCWZlZVNjYWxlNgQKZHlfYW5kX2ZlZQkAZAIFAmR5BQZkeV9mZWUKAQ9tYWtlTmV3QmFsYW5jZXMCA2FjYwx0b2tlbkJhbGFuY2UEDSR0MDI3NjA1Mjc2MzEFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAyNzYwNTI3NjMxAl8xBAFpCAUNJHQwMjc2MDUyNzYzMQJfMgMJAAACBQFpBQhvdXRJbmRleAkAlAoCCQDNCAIFC25ld0JhbGFuY2VzCQBlAgUMdG9rZW5CYWxhbmNlBQpkeV9hbmRfZmVlCQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjc3OTgyNzg1OQoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLbmV3QmFsYW5jZXMIBQ0kdDAyNzc5ODI3ODU5Al8xBAF2CAUNJHQwMjc3OTgyNzg1OQJfMgMJARJjaGVja0RBcHBUaHJlc2hvbGQBBQtuZXdCYWxhbmNlcwkBBXRocm93AAQCdXMJAQd1bnN0YWtlAgUKZHlfYW5kX2ZlZQUIdG9rZW5PdXQDCQAAAgUCdXMFAnVzBAZscEZlZXMJAGUCBQZkeV9mZWUFDmdvdmVybmFuY2VGZWVzBAdhaXJkcm9wAwkAZgIFBmxwRmVlcwAACQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCB2FpckRyb3AFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdG9rZW5PdXRCNTgFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnDG9yaWdpbkNhbGxlcgUCZHkFC3Rva2VuT3V0QjU4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFCG91dEluZGV4BQ1rQXNzZXRCYWxhbmNlCQBlAgkAkQMCBQJ4cAUIb3V0SW5kZXgFCmR5X2FuZF9mZWUJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFCXBtdEFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFDmdvdmVybmFuY2VGZWVzBQt0b2tlbk91dEI1OAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBQtzaGFyZVN1cHBseQUJcG10QW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnARl3aXRoZHJhd09uZUNvaW5XaXRoVW5sb2NrAwh0b2tlbk91dAltaW5BbW91bnQMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZwIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50AwkAZgIJAJADAQgFA21zZwhwYXltZW50cwAAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbggJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAAABAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEA2ludgkA/AcEBQR0aGlzAg93aXRoZHJhd09uZUNvaW4JAMwIAgUIdG9rZW5PdXQJAMwIAgUJbWluQW1vdW50BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEBQQAJAJQKAgUDbmlsCQECX0EAA21zZwEPZ2V0VmlydHVhbFByaWNlAAQBRAkBBWdldF9EAgkBA194cAAJAQJfQQAJAJQKAgUDbmlsCQBrAwUBRAUJUFJFQ0lTSU9OBQtzaGFyZVN1cHBseQNtc2cBD2NhbGNUb2tlbkFtb3VudAIHYW1vdW50cwdkZXBvc2l0BANhbXAJAQJfQQAECGJhbGFuY2VzCQEDX3hwAAQCRDAJAQdnZXRETWVtAgUIYmFsYW5jZXMFA2FtcAoBD2NhbGNOZXdCYWxhbmNlcwIDYWNjB2JhbGFuY2UEDSR0MDI5ODc2Mjk5MDIFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAyOTg3NjI5OTAyAl8xBAFpCAUNJHQwMjk4NzYyOTkwMgJfMgQKbmV3QmFsYW5jZQkAZAIFB2JhbGFuY2UDBQdkZXBvc2l0CQCRAwIFB2Ftb3VudHMFAWkJAQEtAQkAkQMCBQdhbW91bnRzBQFpCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFCm5ld0JhbGFuY2UJAGQCBQFpAAEEC25ld0JhbGFuY2VzCAoAAiRsBQhiYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2NhbGNOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIIBQNtc2cGY2FsbGVyBQ9tb25leUJveEFkZHJlc3MJAAIBAiZPbmx5IHRoZSB3YWxsZXQgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQIYmFsYW5jZXMJAQNfeHAACgEOdGFrZUV4dHJhRnVuZHMCA2FjYwdhc3NldElkBA0kdDAzMjI0NDMyMjYyBQNhY2MEA3N1bQgFDSR0MDMyMjQ0MzIyNjICXzEEAWkIBQ0kdDAzMjI0NDMyMjYyAl8yBAh0b2tlbkI1OAkA2QQBBQdhc3NldElkBAhyQmFsYW5jZQkAZAIJAPAHAgUEdGhpcwUIdG9rZW5CNTgJAQxzdGFrZWRBbW91bnQBBQh0b2tlbkI1OAQMZW5yb2xsQW1vdW50CQBlAgUIckJhbGFuY2UJAJEDAgUIYmFsYW5jZXMFAWkDCQBmAgAABQxlbnJvbGxBbW91bnQJAQdzdXNwZW5kAQkArAICAiBFbnJvbGwgYW1vdW50IG5lZ2F0aXZlIGZvciBhc3NldAUHYXNzZXRJZAQHYWlyZHJvcAMJAGYCBQxlbnJvbGxBbW91bnQAAAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAgdhaXJEcm9wBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHRva2VuQjU4BQxlbnJvbGxBbW91bnQFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJQKAgkAZAIFA3N1bQUMZW5yb2xsQW1vdW50CQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAFrCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEOdGFrZUV4dHJhRnVuZHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAggFAWsCXzEAAAkAAgECEE5vIG1vbmV5IHRvIHRha2UFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQTY2FsbFRha2VJbnRvQWNjb3VudAMJAAACCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQNc2lnbmVkQnlBZG1pbgMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkyBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkzBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAURYWRtaW5QdWJLZXlJbnZva2UDAwUTY2FsbFRha2VJbnRvQWNjb3VudAUNc2lnbmVkQnlBZG1pbgcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5z1L0Ezw==", "height": 2286532, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9GDJqh7tMaqmqFFHYGC89reXt68bGsNyNuufFpxj1mEp Next: H5nDHCAQYfWvdHmpwq6BAKet1aHwZp2YKtdkh8e4rTVo Diff:
OldNewDifferences
736736 let bV = if ((Z == 0))
737737 then 0
738738 else bq(aW, ba)
739- let cx = da.payments
740- let dj = size(cx)
741- func dk (dl) = if ((dj > ai))
739+ let dj = if ((size(da.payments) > ai))
740+ then $Tuple2(removeByIndex(da.payments, (size(da.payments) - 1)), [da.payments[(size(da.payments) - 1)]])
741+ else $Tuple2(da.payments, nil)
742+ let cx = dj._1
743+ let dk = dj._2
744+ let dl = size(cx)
745+ func dm (dn) = if ((dl > ai))
742746 then throw(("payments size > " + toString(ai)))
743- else if ((1 > dj))
747+ else if ((1 > dl))
744748 then throw("payments size < 1")
745749 else if (if ((Z == 0))
746- then (ai != dj)
750+ then (ai != dl)
747751 else false)
748752 then throw("initial deposit requires all coins")
749753 else {
750- func dm (aM,cM) = if (containsElement(ah, ci(cM.assetId)))
754+ func do (aM,cM) = if (containsElement(ah, ci(cM.assetId)))
751755 then true
752756 else throw("Invalid asset in payment")
753757
756760 let aQ = false
757761 func aR (aS,aT) = if ((aT >= aP))
758762 then aS
759- else dm(aS, aO[aT])
763+ else do(aS, aO[aT])
760764
761765 func aU (aS,aT) = if ((aT >= aP))
762766 then aS
765769 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
766770 }
767771
768- if (!(dk(dj)))
772+ if (!(dm(dl)))
769773 then throw()
770774 else {
771775 let cH = cD()
773777 then (cJ(cH._2) ++ cK(da.caller, cx))
774778 else {
775779 func cL (aM,aN) = {
776- let dn = aM
777- let cO = dn._1
778- let ao = dn._2
779- func do (dp,cM) = if ((ci(cM.assetId) == aN))
780- then (dp + cM.amount)
781- else dp
780+ let dp = aM
781+ let cO = dp._1
782+ let ao = dp._2
783+ func dq (dr,cM) = if ((ci(cM.assetId) == aN))
784+ then (dr + cM.amount)
785+ else dr
782786
783- let dq = {
787+ let ds = {
784788 let aO = cx
785789 let aP = size(aO)
786790 let aQ = aW[ao]
787791 func aR (aS,aT) = if ((aT >= aP))
788792 then aS
789- else do(aS, aO[aT])
793+ else dq(aS, aO[aT])
790794
791795 func aU (aS,aT) = if ((aT >= aP))
792796 then aS
794798
795799 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
796800 }
797- $Tuple2((cO :+ dq), (ao + 1))
801+ $Tuple2((cO :+ ds), (ao + 1))
798802 }
799803
800- let dr = {
804+ let dt = {
801805 let aO = ah
802806 let aP = size(aO)
803807 let aQ = $Tuple2(nil, 0)
811815
812816 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
813817 }
814- let cO = dr._1
815- let ds = dr._2
818+ let cO = dt._1
819+ let du = dt._2
816820 if (cN(cO))
817821 then throw()
818822 else {
821825 then throw("D1 > D0")
822826 else {
823827 let bS = ax(da.caller)
824- func dt (aM,dp) = {
825- let du = aM
826- let dv = du._1
827- let dw = du._2
828- let ao = du._3
828+ func dv (aM,dr) = {
829+ let dw = aM
830+ let dx = dw._1
831+ let dy = dw._2
832+ let ao = dw._3
829833 if ((Z > 0))
830834 then {
831835 let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
832- let dx = {
833- let dy = fraction(bW, aW[ao], bV)
834- let dz = if ((dy > dp))
835- then (dy - dp)
836- else (dp - dy)
837- fraction(bT, dz, aa)
836+ let dz = {
837+ let dA = fraction(bW, aW[ao], bV)
838+ let dB = if ((dA > dr))
839+ then (dA - dr)
840+ else (dr - dA)
841+ fraction(bT, dB, aa)
838842 }
839- let dA = fraction(dx, ac, aa)
840- let dB = (dp - dx)
841- let dC = (dp - dx)
842- let dD = (dp - aW[ao])
843- let dE = (dx - dA)
844- let dF = if ((dD > 0))
845- then cm((dD - dx), ah[ao])
846- else cy(dx, ah[ao])
847- if ((dF == dF))
843+ let dC = fraction(dz, ac, aa)
844+ let dD = (dr - dz)
845+ let dE = (dr - dz)
846+ let dF = (dr - aW[ao])
847+ let dG = (dz - dC)
848+ let dH = if ((dF > 0))
849+ then cm((dF - dz), ah[ao])
850+ else cy(dz, ah[ao])
851+ if ((dH == dH))
848852 then {
849- let dG = if ((dE > 0))
850- then invoke(U, "airDrop", nil, [AttachedPayment(fromBase58String(ah[ao]), dE)])
853+ let dI = if ((dG > 0))
854+ then invoke(U, "airDrop", nil, [AttachedPayment(fromBase58String(ah[ao]), dG)])
851855 else 0
852- if ((dG == dG))
853- then $Tuple3((dv :+ dC), (dw ++ [ScriptTransfer(P, dA, fromBase58String(ah[ao])), IntegerEntry((ah[ao] + i), dB)]), (ao + 1))
856+ if ((dI == dI))
857+ then $Tuple3((dx :+ dE), (dy ++ [ScriptTransfer(P, dC, fromBase58String(ah[ao])), IntegerEntry((ah[ao] + i), dD)]), (ao + 1))
854858 else throw("Strict value is not equal to itself.")
855859 }
856860 else throw("Strict value is not equal to itself.")
857861 }
858862 else {
859- let dF = cm(dp, ah[ao])
860- if ((dF == dF))
861- then $Tuple3((dv :+ dp), (dw :+ IntegerEntry((ah[ao] + i), dp)), (ao + 1))
863+ let dH = cm(dr, ah[ao])
864+ if ((dH == dH))
865+ then $Tuple3((dx :+ dr), (dy :+ IntegerEntry((ah[ao] + i), dr)), (ao + 1))
862866 else throw("Strict value is not equal to itself.")
863867 }
864868 }
865869
866- let dH = {
870+ let dJ = {
867871 let aO = cO
868872 let aP = size(aO)
869873 let aQ = $Tuple3(nil, nil, 0)
870874 func bl (aS,aT) = if ((aT >= aP))
871875 then aS
872- else dt(aS, aO[aT])
876+ else dv(aS, aO[aT])
873877
874878 func bm (aS,aT) = if ((aT >= aP))
875879 then aS
877881
878882 bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
879883 }
880- let dv = dH._1
881- let dw = dH._2
882- let dI = bq(dv, ba)
883- let dJ = if ((Z == 0))
884+ let dx = dJ._1
885+ let dy = dJ._2
886+ let dK = bq(dx, ba)
887+ let dL = if ((Z == 0))
884888 then bW
885- else fraction(Z, (dI - bV), bV)
886- if (av((dJ >= dg)))
889+ else fraction(Z, (dK - bV), bV)
890+ if (av((dL >= dg)))
887891 then throw("Slippage screwed you")
888892 else if (dh)
889893 then {
890- let dK = invoke(this, "reissueShare", [dJ], nil)
891- if ((dK == dK))
894+ let dM = invoke(this, "reissueShare", [dL], nil)
895+ if ((dM == dM))
892896 then {
893- let dL = invoke(T, "lockShareTokens", [toString(this), di], [AttachedPayment(Y, dJ)])
894- if ((dL == dL))
895- then (dw :+ IntegerEntry(m, (Z + dJ)))
897+ let dN = invoke(T, "lockShareTokens", [toString(this), di], ([AttachedPayment(Y, dL)] ++ dk))
898+ if ((dN == dN))
899+ then (dy :+ IntegerEntry(m, (Z + dL)))
896900 else throw("Strict value is not equal to itself.")
897901 }
898902 else throw("Strict value is not equal to itself.")
899903 }
900- else (dw ++ [Reissue(Y, dJ, true), ScriptTransfer(da.caller, dJ, Y), IntegerEntry(m, (Z + dJ))])
904+ else (dy ++ [Reissue(Y, dL, true), ScriptTransfer(da.caller, dL, Y), IntegerEntry(m, (Z + dL))])
901905 }
902906 }
903907 }
916920 else {
917921 let bV = bq(aW, ba)
918922 let bS = ax(az)
919- func dM (aM,dp) = {
920- let dN = aM
921- let dv = dN._1
922- let ao = dN._2
923+ func dO (aM,dr) = {
924+ let dP = aM
925+ let dx = dP._1
926+ let ao = dP._2
923927 let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
924- let dx = {
925- let dy = fraction(bW, aW[ao], bV)
926- let dz = if ((dy > dp))
927- then (dy - dp)
928- else (dp - dy)
929- fraction(bT, dz, aa)
928+ let dz = {
929+ let dA = fraction(bW, aW[ao], bV)
930+ let dB = if ((dA > dr))
931+ then (dA - dr)
932+ else (dr - dA)
933+ fraction(bT, dB, aa)
930934 }
931- let dC = (dp - dx)
932- $Tuple2((dv :+ dC), (ao + 1))
935+ let dE = (dr - dz)
936+ $Tuple2((dx :+ dE), (ao + 1))
933937 }
934938
935- let dO = {
939+ let dQ = {
936940 let aO = cO
937941 let aP = size(aO)
938942 let aQ = $Tuple2(nil, 0)
939943 func aR (aS,aT) = if ((aT >= aP))
940944 then aS
941- else dM(aS, aO[aT])
945+ else dO(aS, aO[aT])
942946
943947 func aU (aS,aT) = if ((aT >= aP))
944948 then aS
946950
947951 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
948952 }
949- let dv = dO._1
950- let ds = dO._2
951- let dI = bq(dv, ba)
952- let dP = fraction(Z, (dI - bV), bV)
953- $Tuple2(nil, dP)
953+ let dx = dQ._1
954+ let du = dQ._2
955+ let dK = bq(dx, ba)
956+ let dR = fraction(Z, (dK - bV), bV)
957+ $Tuple2(nil, dR)
954958 }
955959 }
956960
962966
963967
964968 @Callable(da)
965-func getDy (dQ,dR,dS,dT) = {
969+func getDy (dS,dT,dU,dV) = {
966970 let aW = aK()
967- let dU = valueOrErrorMessage(indexOf(ah, dQ), "unknown token in")
968- let dV = valueOrErrorMessage(indexOf(ah, dR), "unknown token out")
969- let bu = (aW[dU] + dS)
970- let bH = br(dU, dV, bu, aW)
971- let ch = ((aW[dV] - bH) - 1)
972- let bS = ax(Address(fromBase58String(dT)))
971+ let dW = valueOrErrorMessage(indexOf(ah, dS), "unknown token in")
972+ let dX = valueOrErrorMessage(indexOf(ah, dT), "unknown token out")
973+ let bu = (aW[dW] + dU)
974+ let bH = br(dW, dX, bu, aW)
975+ let ch = ((aW[dX] - bH) - 1)
976+ let bS = ax(Address(fromBase58String(dV)))
973977 let bT = fraction(fraction(ab, bS, aa, CEILING), ch, aa)
974978 $Tuple2(nil, $Tuple2((ch - bT), bT))
975979 }
977981
978982
979983 @Callable(da)
980-func exchange (dW,dX) = valueOrElse(am(), if ((size(da.payments) != 1))
984+func exchange (dY,dZ) = valueOrElse(am(), if ((size(da.payments) != 1))
981985 then throw("size(payments) != 1")
982986 else {
983987 let cH = cD()
985989 then (cJ(cH._2) ++ cK(da.caller, da.payments))
986990 else {
987991 let cM = da.payments[0]
988- let dY = ci(cM.assetId)
989- let dZ = fromBase58String(dW)
990- let dS = cM.amount
991- let dU = valueOrErrorMessage(indexOf(ah, dY), "unknown token in")
992- let dV = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
992+ let ea = ci(cM.assetId)
993+ let eb = fromBase58String(dY)
994+ let dU = cM.amount
995+ let dW = valueOrErrorMessage(indexOf(ah, ea), "unknown token in")
996+ let dX = valueOrErrorMessage(indexOf(ah, dY), "unknown token out")
993997 let aW = aK()
994- let bu = (aW[dU] + dS)
995- let bH = br(dU, dV, bu, aW)
996- let ea = ((aW[dV] - bH) - 1)
998+ let bu = (aW[dW] + dU)
999+ let bH = br(dW, dX, bu, aW)
1000+ let ec = ((aW[dX] - bH) - 1)
9971001 let bS = ax(da.originCaller)
998- let bT = fraction(ea, fraction(ab, bS, aa, CEILING), aa)
999- let ch = (ea - bT)
1000- let dA = fraction(bT, ac, aa)
1001- if (av((ch >= dX)))
1002+ let bT = fraction(ec, fraction(ab, bS, aa, CEILING), aa)
1003+ let ch = (ec - bT)
1004+ let dC = fraction(bT, ac, aa)
1005+ if (av((ch >= dZ)))
10021006 then throw("Exchange resulted in fewer coins than expected")
10031007 else {
1004- func eb (aM,ec) = {
1005- let ed = aM
1006- let cO = ed._1
1007- let ao = ed._2
1008- if ((ao == dU))
1009- then $Tuple2((cO :+ (ec + dS)), (ao + 1))
1010- else if ((ao == dV))
1011- then $Tuple2((cO :+ (ec - ea)), (ao + 1))
1012- else $Tuple2((cO :+ ec), (ao + 1))
1008+ func ed (aM,ee) = {
1009+ let ef = aM
1010+ let cO = ef._1
1011+ let ao = ef._2
1012+ if ((ao == dW))
1013+ then $Tuple2((cO :+ (ee + dU)), (ao + 1))
1014+ else if ((ao == dX))
1015+ then $Tuple2((cO :+ (ee - ec)), (ao + 1))
1016+ else $Tuple2((cO :+ ee), (ao + 1))
10131017 }
10141018
1015- let ee = {
1019+ let eg = {
10161020 let aO = aW
10171021 let aP = size(aO)
10181022 let aQ = $Tuple2(nil, 0)
10191023 func aR (aS,aT) = if ((aT >= aP))
10201024 then aS
1021- else eb(aS, aO[aT])
1025+ else ed(aS, aO[aT])
10221026
10231027 func aU (aS,aT) = if ((aT >= aP))
10241028 then aS
10261030
10271031 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10281032 }
1029- let cO = ee._1
1030- let ao = ee._2
1033+ let cO = eg._1
1034+ let ao = eg._2
10311035 if (cN(cO))
10321036 then throw()
10331037 else {
1034- let dL = cm(cM.amount, ci(cM.assetId))
1035- if ((dL == dL))
1038+ let dN = cm(cM.amount, ci(cM.assetId))
1039+ if ((dN == dN))
10361040 then {
1037- let ef = cy(ea, dW)
1038- if ((ef == ef))
1041+ let eh = cy(ec, dY)
1042+ if ((eh == eh))
10391043 then {
1040- let dE = (bT - dA)
1041- let dG = if ((dE > 0))
1042- then invoke(U, "airDrop", nil, [AttachedPayment(dZ, dE)])
1044+ let dG = (bT - dC)
1045+ let dI = if ((dG > 0))
1046+ then invoke(U, "airDrop", nil, [AttachedPayment(eb, dG)])
10431047 else 0
1044- if ((dG == dG))
1045- then $Tuple2([IntegerEntry((dY + i), bu), IntegerEntry((dW + i), (aW[dV] - ea)), ScriptTransfer(da.caller, ch, dZ), ScriptTransfer(P, dA, dZ)], [ch, dZ])
1048+ if ((dI == dI))
1049+ then $Tuple2([IntegerEntry((ea + i), bu), IntegerEntry((dY + i), (aW[dX] - ec)), ScriptTransfer(da.caller, ch, eb), ScriptTransfer(P, dC, eb)], [ch, eb])
10461050 else throw("Strict value is not equal to itself.")
10471051 }
10481052 else throw("Strict value is not equal to itself.")
10561060
10571061
10581062 @Callable(da)
1059-func withdraw (eg) = valueOrElse(am(), if ((size(da.payments) != 1))
1063+func withdraw (ei) = valueOrElse(am(), if ((size(da.payments) != 1))
10601064 then throw("size(payments) != 1")
10611065 else {
1062- let eh = da.payments[0].amount
1063- let ei = da.payments[0].assetId
1064- if ((Y != ei))
1066+ let ej = da.payments[0].amount
1067+ let ek = da.payments[0].assetId
1068+ if ((Y != ek))
10651069 then throw("unknown payment token")
10661070 else {
10671071 let cH = cD()
10681072 if (cH._1)
10691073 then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
10701074 else {
1071- func dt (aM,ej) = {
1072- let ek = aM
1073- let dw = ek._1
1074- let ao = ek._2
1075- let el = fraction(ej, eh, Z)
1076- if (av((el >= eg[ao])))
1075+ func dv (aM,el) = {
1076+ let em = aM
1077+ let dy = em._1
1078+ let ao = em._2
1079+ let en = fraction(el, ej, Z)
1080+ if (av((en >= ei[ao])))
10771081 then throw("Withdrawal resulted in fewer coins than expected")
10781082 else {
1079- let ef = cy(el, ah[ao])
1080- if ((ef == ef))
1081- then $Tuple2((dw ++ [IntegerEntry((ah[ao] + i), (ej - el)), ScriptTransfer(da.originCaller, el, fromBase58String(ah[ao]))]), (ao + 1))
1083+ let eh = cy(en, ah[ao])
1084+ if ((eh == eh))
1085+ then $Tuple2((dy ++ [IntegerEntry((ah[ao] + i), (el - en)), ScriptTransfer(da.originCaller, en, fromBase58String(ah[ao]))]), (ao + 1))
10821086 else throw("Strict value is not equal to itself.")
10831087 }
10841088 }
10851089
1086- let em = {
1090+ let eo = {
10871091 let aO = aK()
10881092 let aP = size(aO)
10891093 let aQ = $Tuple2(nil, 0)
10901094 func aR (aS,aT) = if ((aT >= aP))
10911095 then aS
1092- else dt(aS, aO[aT])
1096+ else dv(aS, aO[aT])
10931097
10941098 func aU (aS,aT) = if ((aT >= aP))
10951099 then aS
10971101
10981102 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10991103 }
1100- let dw = em._1
1101- let ao = em._2
1102- (dw ++ [Burn(Y, eh), IntegerEntry(m, (Z - eh))])
1104+ let dy = eo._1
1105+ let ao = eo._2
1106+ (dy ++ [Burn(Y, ej), IntegerEntry(m, (Z - ej))])
11031107 }
11041108 }
11051109 })
11071111
11081112
11091113 @Callable(da)
1110-func withdrawWithUnlock (eg,en) = valueOrElse(am(), if ((0 >= en))
1114+func withdrawWithUnlock (ei,ep) = valueOrElse(am(), if ((0 >= ep))
11111115 then throw("Unlock amount must be positive")
11121116 else {
11131117 let cH = cD()
11141118 if (cH._1)
11151119 then (cJ(cH._2) ++ cK(da.caller, da.payments))
11161120 else {
1117- let eh = if ((size(da.payments) > 0))
1121+ let ej = if ((size(da.payments) > 0))
11181122 then if ((size(da.payments) != 1))
11191123 then throw("size(payments) != 1")
11201124 else {
1121- let ei = da.payments[0].assetId
1122- if ((Y != ei))
1125+ let ek = da.payments[0].assetId
1126+ if ((Y != ek))
11231127 then throw("unknown payment token")
11241128 else da.payments[0].amount
11251129 }
11261130 else 0
1127- let eo = invoke(T, "withdrawShareTokens", [toString(this), en], nil)
1128- if ((eo == eo))
1131+ let eq = invoke(T, "withdrawShareTokens", [toString(this), ep], nil)
1132+ if ((eq == eq))
11291133 then {
1130- let ep = (eh + en)
1131- let dF = invoke(this, "withdraw", [eg], [AttachedPayment(Y, ep)])
1132- if ((dF == dF))
1134+ let er = (ej + ep)
1135+ let dH = invoke(this, "withdraw", [ei], [AttachedPayment(Y, er)])
1136+ if ((dH == dH))
11331137 then nil
11341138 else throw("Strict value is not equal to itself.")
11351139 }
11401144
11411145
11421146 @Callable(da)
1143-func calcWithdrawOneCoin (eq,dW,az) = if ((0 >= eq))
1147+func calcWithdrawOneCoin (es,dY,az) = if ((0 >= es))
11441148 then throw("Amount must be positive")
11451149 else {
1146- let ao = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
1147- $Tuple2(nil, bP(aK(), eq, ao, Address(fromBase58String(az)))._1)
1150+ let ao = valueOrErrorMessage(indexOf(ah, dY), "unknown token out")
1151+ $Tuple2(nil, bP(aK(), es, ao, Address(fromBase58String(az)))._1)
11481152 }
11491153
11501154
11511155
11521156 @Callable(da)
1153-func withdrawOneCoin (dW,er) = valueOrElse(am(), if ((size(da.payments) != 1))
1157+func withdrawOneCoin (dY,et) = valueOrElse(am(), if ((size(da.payments) != 1))
11541158 then throw("size(payments) != 1")
11551159 else {
11561160 let cH = cD()
11571161 if (cH._1)
11581162 then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
11591163 else {
1160- let eh = da.payments[0].amount
1161- let ei = da.payments[0].assetId
1162- if ((ei != Y))
1164+ let ej = da.payments[0].amount
1165+ let ek = da.payments[0].assetId
1166+ if ((ek != Y))
11631167 then throw("unknown token")
11641168 else {
1165- let es = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
1166- let dZ = fromBase58String(dW)
1169+ let eu = valueOrErrorMessage(indexOf(ah, dY), "unknown token out")
1170+ let eb = fromBase58String(dY)
11671171 let aW = aK()
1168- let et = bP(aW, eh, es, da.originCaller)
1169- let ch = et._1
1170- let eu = et._2
1171- if (av((ch >= er)))
1172+ let ev = bP(aW, ej, eu, da.originCaller)
1173+ let ch = ev._1
1174+ let ew = ev._2
1175+ if (av((ch >= et)))
11721176 then throw("Not enough coins removed")
11731177 else {
1174- let dA = fraction(eu, ac, aa)
1175- let ev = (ch + eu)
1176- func eb (aM,ec) = {
1177- let ew = aM
1178- let cO = ew._1
1179- let ao = ew._2
1180- if ((ao == es))
1181- then $Tuple2((cO :+ (ec - ev)), (ao + 1))
1182- else $Tuple2((cO :+ ec), (ao + 1))
1178+ let dC = fraction(ew, ac, aa)
1179+ let ex = (ch + ew)
1180+ func ed (aM,ee) = {
1181+ let ey = aM
1182+ let cO = ey._1
1183+ let ao = ey._2
1184+ if ((ao == eu))
1185+ then $Tuple2((cO :+ (ee - ex)), (ao + 1))
1186+ else $Tuple2((cO :+ ee), (ao + 1))
11831187 }
11841188
1185- let ex = {
1189+ let ez = {
11861190 let aO = aW
11871191 let aP = size(aO)
11881192 let aQ = $Tuple2(nil, 0)
11891193 func aR (aS,aT) = if ((aT >= aP))
11901194 then aS
1191- else eb(aS, aO[aT])
1195+ else ed(aS, aO[aT])
11921196
11931197 func aU (aS,aT) = if ((aT >= aP))
11941198 then aS
11961200
11971201 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11981202 }
1199- let cO = ex._1
1200- let ey = ex._2
1203+ let cO = ez._1
1204+ let eA = ez._2
12011205 if (cN(cO))
12021206 then throw()
12031207 else {
1204- let ef = cy(ev, dW)
1205- if ((ef == ef))
1208+ let eh = cy(ex, dY)
1209+ if ((eh == eh))
12061210 then {
1207- let dE = (eu - dA)
1208- let dG = if ((dE > 0))
1209- then invoke(U, "airDrop", nil, [AttachedPayment(dZ, dE)])
1211+ let dG = (ew - dC)
1212+ let dI = if ((dG > 0))
1213+ then invoke(U, "airDrop", nil, [AttachedPayment(eb, dG)])
12101214 else 0
1211- if ((dG == dG))
1212- then [ScriptTransfer(da.originCaller, ch, dZ), IntegerEntry((ah[es] + i), (aW[es] - ev)), Burn(Y, eh), ScriptTransfer(P, dA, dZ), IntegerEntry(m, (Z - eh))]
1215+ if ((dI == dI))
1216+ then [ScriptTransfer(da.originCaller, ch, eb), IntegerEntry((ah[eu] + i), (aW[eu] - ex)), Burn(Y, ej), ScriptTransfer(P, dC, eb), IntegerEntry(m, (Z - ej))]
12131217 else throw("Strict value is not equal to itself.")
12141218 }
12151219 else throw("Strict value is not equal to itself.")
12221226
12231227
12241228 @Callable(da)
1225-func withdrawOneCoinWithUnlock (dW,er,en) = valueOrElse(am(), if ((0 >= en))
1229+func withdrawOneCoinWithUnlock (dY,et,ep) = valueOrElse(am(), if ((0 >= ep))
12261230 then throw("Unlock amount must be positive")
12271231 else {
12281232 let cH = cD()
12291233 if (cH._1)
12301234 then (cJ(cH._2) ++ cK(da.caller, da.payments))
12311235 else {
1232- let eh = if ((size(da.payments) > 0))
1236+ let ej = if ((size(da.payments) > 0))
12331237 then if ((size(da.payments) != 1))
12341238 then throw("size(payments) != 1")
12351239 else {
1236- let ei = da.payments[0].assetId
1237- if ((Y != ei))
1240+ let ek = da.payments[0].assetId
1241+ if ((Y != ek))
12381242 then throw("unknown payment token")
12391243 else da.payments[0].amount
12401244 }
12411245 else 0
1242- let eo = invoke(T, "withdrawShareTokens", [toString(this), en], nil)
1243- if ((eo == eo))
1246+ let eq = invoke(T, "withdrawShareTokens", [toString(this), ep], nil)
1247+ if ((eq == eq))
12441248 then {
1245- let ep = (eh + en)
1246- let dF = invoke(this, "withdrawOneCoin", [dW, er], [AttachedPayment(Y, ep)])
1247- if ((dF == dF))
1249+ let er = (ej + ep)
1250+ let dH = invoke(this, "withdrawOneCoin", [dY, et], [AttachedPayment(Y, er)])
1251+ if ((dH == dH))
12481252 then nil
12491253 else throw("Strict value is not equal to itself.")
12501254 }
12681272
12691273
12701274 @Callable(da)
1271-func calcTokenAmount (ez,eA) = {
1275+func calcTokenAmount (eB,eC) = {
12721276 let ba = aF()
1273- let eB = aK()
1274- let bV = bq(eB, ba)
1275- func eC (aM,ej) = {
1276- let eD = aM
1277- let cO = eD._1
1278- let ao = eD._2
1279- let dp = (ej + (if (eA)
1280- then ez[ao]
1281- else -(ez[ao])))
1282- $Tuple2((cO :+ dp), (ao + 1))
1277+ let eD = aK()
1278+ let bV = bq(eD, ba)
1279+ func eE (aM,el) = {
1280+ let eF = aM
1281+ let cO = eF._1
1282+ let ao = eF._2
1283+ let dr = (el + (if (eC)
1284+ then eB[ao]
1285+ else -(eB[ao])))
1286+ $Tuple2((cO :+ dr), (ao + 1))
12831287 }
12841288
1285- let cO = ( let aO = eB
1289+ let cO = ( let aO = eD
12861290 let aP = size(aO)
12871291 let aQ = $Tuple2(nil, 0)
12881292 func aR (aS,aT) = if ((aT >= aP))
12891293 then aS
1290- else eC(aS, aO[aT])
1294+ else eE(aS, aO[aT])
12911295
12921296 func aU (aS,aT) = if ((aT >= aP))
12931297 then aS
12951299
12961300 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
12971301 let bW = bq(cO, ba)
1298- let eE = if (eA)
1302+ let eG = if (eC)
12991303 then (bW - bV)
13001304 else (bV - bW)
1301- $Tuple2(nil, fraction(eE, Z, bV))
1305+ $Tuple2(nil, fraction(eG, Z, bV))
13021306 }
13031307
13041308
13051309
13061310 @Callable(da)
1307-func rampA (eF,eG) = valueOrElse(am(), valueOrElse(an(da), if (av((au >= (af + e))))
1311+func rampA (eH,eI) = valueOrElse(am(), valueOrElse(an(da), if (av((au >= (af + e))))
13081312 then throw("too often")
1309- else if (av((eG >= (au + e))))
1313+ else if (av((eI >= (au + e))))
13101314 then throw("insufficient time")
13111315 else {
1312- let eH = aF()
1313- if (av(if ((eF > 0))
1314- then (b > eF)
1316+ let eJ = aF()
1317+ if (av(if ((eH > 0))
1318+ then (b > eH)
13151319 else false))
13161320 then throw("out of base range")
1317- else if (av(if (if ((eF >= eH))
1318- then ((eH * c) >= eF)
1321+ else if (av(if (if ((eH >= eJ))
1322+ then ((eJ * c) >= eH)
13191323 else false)
13201324 then true
1321- else if ((eH > eF))
1322- then ((eF * c) >= eH)
1325+ else if ((eJ > eH))
1326+ then ((eH * c) >= eJ)
13231327 else false))
13241328 then throw("out of range")
1325- else [IntegerEntry("initial_A", eH), IntegerEntry("future_A", eF), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", eG)]
1329+ else [IntegerEntry("initial_A", eJ), IntegerEntry("future_A", eH), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", eI)]
13261330 }))
13271331
13281332
13291333
13301334 @Callable(da)
13311335 func stopRampA () = valueOrElse(am(), valueOrElse(an(da), {
1332- let eI = aF()
1333-[IntegerEntry("initial_A", eI), IntegerEntry("future_A", eI), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", au)]
1336+ let eK = aF()
1337+[IntegerEntry("initial_A", eK), IntegerEntry("future_A", eK), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", au)]
13341338 }))
13351339
13361340
13531357 func takeIntoAccountExtraFunds () = valueOrElse(am(), if ((da.caller != P))
13541358 then throw("Only the wallet can call this function")
13551359 else {
1356- let eB = aK()
1357- func eJ (aM,aN) = {
1358- let eK = aM
1359- let eL = eK._1
1360- let ao = eK._2
1361- let eM = fromBase58String(aN)
1362- let eN = (assetBalance(this, eM) + cA(eM))
1363- let eO = (eN - eB[ao])
1364- if ((0 > eO))
1360+ let eD = aK()
1361+ func eL (aM,aN) = {
1362+ let eM = aM
1363+ let eN = eM._1
1364+ let ao = eM._2
1365+ let eO = fromBase58String(aN)
1366+ let eP = (assetBalance(this, eO) + cA(eO))
1367+ let eQ = (eP - eD[ao])
1368+ if ((0 > eQ))
13651369 then aj(("Enroll amount negative for asset" + aN))
13661370 else {
1367- let dG = if ((eO > 0))
1368- then invoke(U, "airDrop", nil, [AttachedPayment(eM, eO)])
1371+ let dI = if ((eQ > 0))
1372+ then invoke(U, "airDrop", nil, [AttachedPayment(eO, eQ)])
13691373 else 0
1370- if ((dG == dG))
1371- then $Tuple2((eL + eO), (ao + 1))
1374+ if ((dI == dI))
1375+ then $Tuple2((eN + eQ), (ao + 1))
13721376 else throw("Strict value is not equal to itself.")
13731377 }
13741378 }
13751379
1376- let ds = {
1380+ let du = {
13771381 let aO = ah
13781382 let aP = size(aO)
13791383 let aQ = $Tuple2(0, 0)
13801384 func aR (aS,aT) = if ((aT >= aP))
13811385 then aS
1382- else eJ(aS, aO[aT])
1386+ else eL(aS, aO[aT])
13831387
13841388 func aU (aS,aT) = if ((aT >= aP))
13851389 then aS
13871391
13881392 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
13891393 }
1390- if ((ds._1 == 0))
1394+ if ((du._1 == 0))
13911395 then throw("No money to take")
13921396 else nil
13931397 })
13941398
13951399
1396-@Verifier(eP)
1397-func eQ () = {
1398- let eR = {
1399- let eS = if (sigVerify(eP.bodyBytes, eP.proofs[0], L))
1400+@Verifier(eR)
1401+func eS () = {
1402+ let eT = {
1403+ let eU = if (sigVerify(eR.bodyBytes, eR.proofs[0], L))
14001404 then 1
14011405 else 0
1402- let eT = if (sigVerify(eP.bodyBytes, eP.proofs[1], M))
1406+ let eV = if (sigVerify(eR.bodyBytes, eR.proofs[1], M))
14031407 then 1
14041408 else 0
1405- let eU = if (sigVerify(eP.bodyBytes, eP.proofs[2], N))
1409+ let eW = if (sigVerify(eR.bodyBytes, eR.proofs[2], N))
14061410 then 1
14071411 else 0
1408- (((eS + eT) + eU) >= 2)
1412+ (((eU + eV) + eW) >= 2)
14091413 }
1410- let I = eP
1414+ let I = eR
14111415 if ($isInstanceOf(I, "InvokeScriptTransaction"))
14121416 then {
1413- let dF = I
1414- let eV = if ((dF.dApp == this))
1415- then (dF.function == "takeIntoAccountExtraFunds")
1417+ let dH = I
1418+ let eX = if ((dH.dApp == this))
1419+ then (dH.function == "takeIntoAccountExtraFunds")
14161420 else false
1417- let eW = if (if (if (sigVerify(eP.bodyBytes, eP.proofs[0], L))
1421+ let eY = if (if (if (sigVerify(eR.bodyBytes, eR.proofs[0], L))
14181422 then true
1419- else sigVerify(eP.bodyBytes, eP.proofs[0], M))
1423+ else sigVerify(eR.bodyBytes, eR.proofs[0], M))
14201424 then true
1421- else sigVerify(eP.bodyBytes, eP.proofs[0], N))
1425+ else sigVerify(eR.bodyBytes, eR.proofs[0], N))
14221426 then true
1423- else sigVerify(eP.bodyBytes, eP.proofs[0], O)
1424- if (if (eV)
1425- then eW
1427+ else sigVerify(eR.bodyBytes, eR.proofs[0], O)
1428+ if (if (eX)
1429+ then eY
14261430 else false)
14271431 then true
1428- else eR
1432+ else eT
14291433 }
1430- else eR
1434+ else eT
14311435 }
14321436
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 1000000
55
66 let b = 1000000
77
88 let c = 10
99
1010 let d = 6
1111
1212 let e = (86400 / 60)
1313
1414 let f = "3.0.0"
1515
1616 let g = "version"
1717
1818 let h = "asset_ids"
1919
2020 let i = "_balance"
2121
2222 let j = "active"
2323
2424 let k = "shutdown_cause"
2525
2626 let l = "share_asset_id"
2727
2828 let m = "share_asset_supply"
2929
3030 let n = "commission"
3131
3232 let o = "dAppThresholdCoef"
3333
3434 let p = "staking_usdnnsbt_address"
3535
3636 let q = "discounts"
3737
3838 let r = "discount_values"
3939
4040 let s = "_SWOP_amount"
4141
4242 let t = "_GSwop_amount"
4343
4444 let u = "admin_pub_1"
4545
4646 let v = "admin_pub_2"
4747
4848 let w = "admin_pub_3"
4949
5050 let x = "admin_invoke_pub"
5151
5252 let y = "money_box_address"
5353
5454 let z = "governance_address"
5555
5656 let B = "voting_address"
5757
5858 let C = "farming_address"
5959
6060 let E = "lp_farming"
6161
6262 let F = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
6363
6464 func G (H) = {
6565 let I = getString(F, H)
6666 if ($isInstanceOf(I, "String"))
6767 then {
6868 let J = I
6969 fromBase58String(J)
7070 }
7171 else {
7272 let K = I
7373 throw((H + "is empty"))
7474 }
7575 }
7676
7777
7878 let L = G(u)
7979
8080 let M = G(v)
8181
8282 let N = G(w)
8383
8484 let O = G(x)
8585
8686 let P = Address(G(y))
8787
8888 let Q = Address(G(z))
8989
9090 let R = Address(G(p))
9191
9292 let S = Address(G(B))
9393
9494 let T = Address(G(C))
9595
9696 let U = Address(G(E))
9797
9898 let V = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
9999
100100 let W = [toBase58String(V)]
101101
102102 let X = getBooleanValue(this, j)
103103
104104 let Y = fromBase58String(getStringValue(this, l))
105105
106106 let Z = getIntegerValue(this, m)
107107
108108 let aa = 1000000
109109
110110 let ab = getIntegerValue(this, n)
111111
112112 let ac = fraction(40, aa, 100)
113113
114114 let ad = getIntegerValue(this, "initial_A")
115115
116116 let ae = getIntegerValue(this, "future_A")
117117
118118 let af = valueOrElse(getInteger(this, "initial_A_time"), 0)
119119
120120 let ag = valueOrElse(getInteger(this, "future_A_time"), 0)
121121
122122 let ah = split(getStringValue(this, h), ",")
123123
124124 let ai = size(ah)
125125
126126 func aj (ak) = [BooleanEntry(j, false), StringEntry(k, ak)]
127127
128128
129129 func al () = throw("DApp is already active")
130130
131131
132132 func am () = if (X)
133133 then unit
134134 else throw("DApp is inactive at this moment")
135135
136136
137137 func an (ao) = if (containsElement([L, M, N], ao.callerPublicKey))
138138 then unit
139139 else throw("Only admin can call this function")
140140
141141
142142 func ap (ao) = if ((this == ao.caller))
143143 then unit
144144 else throw("Only contract itself can call this function")
145145
146146
147147 let aq = toBigInt(2)
148148
149149 let ar = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
150150
151151 let as = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
152152
153153 let at = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
154154
155155 let au = height
156156
157157 func av (aw) = if (aw)
158158 then false
159159 else true
160160
161161
162162 func ax (ay) = {
163163 let az = {
164164 let I = ay
165165 if ($isInstanceOf(I, "Address"))
166166 then {
167167 let aA = I
168168 toString(aA)
169169 }
170170 else if ($isInstanceOf(I, "String"))
171171 then {
172172 let aA = I
173173 aA
174174 }
175175 else throw("Unknow type of user Addr")
176176 }
177177 let aB = valueOrElse(getInteger(Q, (az + t)), 0)
178178 let aC = valueOrElse(getInteger(Q, (az + t)), aB)
179179 let aD = split(getStringValue(F, r), ",")
180180 let aE = split(getStringValue(F, q), ",")
181181 if (if ((aC >= parseIntValue(aD[0])))
182182 then (parseIntValue(aD[1]) > aC)
183183 else false)
184184 then (aa - parseIntValue(aE[0]))
185185 else if (if ((aC >= parseIntValue(aD[1])))
186186 then (parseIntValue(aD[2]) > aC)
187187 else false)
188188 then (aa - parseIntValue(aE[1]))
189189 else if (if ((aC >= parseIntValue(aD[2])))
190190 then (parseIntValue(aD[3]) > aC)
191191 else false)
192192 then (aa - parseIntValue(aE[2]))
193193 else if (if ((aC >= parseIntValue(aD[3])))
194194 then (parseIntValue(aD[4]) > aC)
195195 else false)
196196 then (aa - parseIntValue(aE[3]))
197197 else if ((aC >= parseIntValue(aD[4])))
198198 then (aa - parseIntValue(aE[4]))
199199 else aa
200200 }
201201
202202
203203 func aF () = {
204204 let aG = ag
205205 let aH = ae
206206 if ((aG > au))
207207 then {
208208 let aI = ad
209209 let aJ = af
210210 if ((aH > aI))
211211 then (aI + (((aH - aI) * (au - aJ)) / (aG - aJ)))
212212 else (aI - (((aI - aH) * (au - aJ)) / (aG - aJ)))
213213 }
214214 else aH
215215 }
216216
217217
218218 func aK () = {
219219 func aL (aM,aN) = (aM :+ valueOrElse(getInteger(this, (aN + i)), 0))
220220
221221 let aO = ah
222222 let aP = size(aO)
223223 let aQ = nil
224224 func aR (aS,aT) = if ((aT >= aP))
225225 then aS
226226 else aL(aS, aO[aT])
227227
228228 func aU (aS,aT) = if ((aT >= aP))
229229 then aS
230230 else throw("List size exceeds 10")
231231
232232 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
233233 }
234234
235235
236236 func aV (aW) = aW
237237
238238
239239 func aX (aM,aY) = (aM + aY)
240240
241241
242242 func aZ (aW,ba) = {
243243 let bb = invoke(this, "D", [aW, ba], nil)
244244 if ($isInstanceOf(bb, "Int"))
245245 then bb
246246 else throw(($getType(bb) + " couldn't be cast to Int"))
247247 }
248248
249249
250250 func bc (aW,ba) = {
251251 let bd = {
252252 let aO = aW
253253 let aP = size(aO)
254254 let aQ = 0
255255 func aR (aS,aT) = if ((aT >= aP))
256256 then aS
257257 else aX(aS, aO[aT])
258258
259259 func aU (aS,aT) = if ((aT >= aP))
260260 then aS
261261 else throw("List size exceeds 10")
262262
263263 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
264264 }
265265 if ((bd == 0))
266266 then 0
267267 else {
268268 let be = (ba * ai)
269269 let bf = (toBigInt(be) * toBigInt(bd))
270270 let bg = toBigInt((be - 1))
271271 func bh (aM,ao) = if ((aM._2 == true))
272272 then aM
273273 else {
274274 let bi = aM._1
275275 func bj (bk,ao) = if ((ai > ao))
276276 then ((bk * bi) / (toBigInt(aW[ao]) * toBigInt(ai)))
277277 else bk
278278
279279 let bk = {
280280 let aO = ar
281281 let aP = size(aO)
282282 let aQ = bi
283283 func bl (aS,aT) = if ((aT >= aP))
284284 then aS
285285 else bj(aS, aO[aT])
286286
287287 func bm (aS,aT) = if ((aT >= aP))
288288 then aS
289289 else throw("List size exceeds 10")
290290
291291 bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
292292 }
293293 let bn = fraction((bf + (toBigInt(ai) * bk)), bi, ((bg * bi) + (toBigInt((ai + 1)) * bk)))
294294 if ((bn > bi))
295295 then if ((1 >= toInt((bn - bi))))
296296 then $Tuple2(bn, true)
297297 else $Tuple2(bn, false)
298298 else if ((1 >= toInt((bi - bn))))
299299 then $Tuple2(bn, true)
300300 else $Tuple2(bn, false)
301301 }
302302
303303 let bo = {
304304 let aO = as
305305 let aP = size(aO)
306306 let aQ = $Tuple2(toBigInt(bd), false)
307307 func bl (aS,aT) = if ((aT >= aP))
308308 then aS
309309 else bh(aS, aO[aT])
310310
311311 func bm (aS,aT) = if ((aT >= aP))
312312 then aS
313313 else throw("List size exceeds 15")
314314
315315 bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
316316 }
317317 let bn = bo._1
318318 let bp = bo._2
319319 if ((bp == false))
320320 then throw(("get_D() not finished with " + toString(bn)))
321321 else toInt(bn)
322322 }
323323 }
324324
325325
326326 func bq (aW,ba) = aZ(aV(aW), ba)
327327
328328
329329 func br (bs,bt,bu,bv) = if (av((bs != bt)))
330330 then throw("same coin")
331331 else if (av(if ((bt >= 0))
332332 then (bs >= 0)
333333 else false))
334334 then throw("below zero")
335335 else if (av(if ((ai > bt))
336336 then (ai > bs)
337337 else false))
338338 then throw("above N_COINS")
339339 else {
340340 let ba = aF()
341341 let bn = aZ(bv, ba)
342342 let be = (ba * ai)
343343 func bw (aM,ao) = {
344344 let bx = aM
345345 let by = bx._1
346346 let bz = bx._2
347347 let bA = if ((bs == ao))
348348 then bu
349349 else bv[ao]
350350 if (if ((ao != bt))
351351 then (ai > ao)
352352 else false)
353353 then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ai))))
354354 else $Tuple2(by, bz)
355355 }
356356
357357 let bB = {
358358 let aO = ar
359359 let aP = size(aO)
360360 let aQ = $Tuple2(0, toBigInt(bn))
361361 func aR (aS,aT) = if ((aT >= aP))
362362 then aS
363363 else bw(aS, aO[aT])
364364
365365 func aU (aS,aT) = if ((aT >= aP))
366366 then aS
367367 else throw("List size exceeds 10")
368368
369369 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
370370 }
371371 let by = bB._1
372372 let bC = bB._2
373373 let bz = fraction(bC, toBigInt(bn), toBigInt((be * ai)))
374374 let bD = toBigInt(((by + (bn / be)) - bn))
375375 func bE (aM,bF) = if ((aM._2 == true))
376376 then aM
377377 else {
378378 let bG = aM._1
379379 let bH = (((bG * bG) + bz) / ((aq * bG) + bD))
380380 if ((bH > bG))
381381 then if ((1 >= toInt((bH - bG))))
382382 then $Tuple2(bH, true)
383383 else $Tuple2(bH, false)
384384 else if ((1 >= toInt((bG - bH))))
385385 then $Tuple2(bH, true)
386386 else $Tuple2(bH, false)
387387 }
388388
389389 let bI = {
390390 let aO = at
391391 let aP = size(aO)
392392 let aQ = $Tuple2(toBigInt(bn), false)
393393 func bl (aS,aT) = if ((aT >= aP))
394394 then aS
395395 else bE(aS, aO[aT])
396396
397397 func bm (aS,aT) = if ((aT >= aP))
398398 then aS
399399 else throw("List size exceeds 16")
400400
401401 bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
402402 }
403403 let bH = bI._1
404404 let bp = bI._2
405405 if ((bp == false))
406406 then throw(("getY() not finished with " + toString(bH)))
407407 else toInt(bH)
408408 }
409409
410410
411411 func bJ (bK,bs,aW,bn) = if (av((bs >= 0)))
412412 then throw("i below zero")
413413 else if (av((ai > bs)))
414414 then throw("i above N_COINS")
415415 else {
416416 let be = (bK * ai)
417417 func bw (aM,ao) = {
418418 let bL = aM
419419 let by = bL._1
420420 let bz = bL._2
421421 let bA = if (if ((bs != ao))
422422 then (ai > ao)
423423 else false)
424424 then aW[ao]
425425 else 0
426426 if (if ((ai > ao))
427427 then (bs != ao)
428428 else false)
429429 then $Tuple2((by + bA), fraction(bz, toBigInt(bn), toBigInt((bA * ai))))
430430 else $Tuple2(by, bz)
431431 }
432432
433433 let bM = {
434434 let aO = ar
435435 let aP = size(aO)
436436 let aQ = $Tuple2(0, toBigInt(bn))
437437 func aR (aS,aT) = if ((aT >= aP))
438438 then aS
439439 else bw(aS, aO[aT])
440440
441441 func aU (aS,aT) = if ((aT >= aP))
442442 then aS
443443 else throw("List size exceeds 10")
444444
445445 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
446446 }
447447 let by = bM._1
448448 let bC = bM._2
449449 let bz = fraction(bC, toBigInt(bn), toBigInt((be * ai)))
450450 let bD = toBigInt(((by + (bn / be)) - bn))
451451 func bN (aM,ao) = if ((aM._2 == true))
452452 then aM
453453 else {
454454 let bG = aM._1
455455 let bH = (((bG * bG) + bz) / ((aq * bG) + bD))
456456 if ((bH > bG))
457457 then if ((1 >= toInt((bH - bG))))
458458 then $Tuple2(bH, true)
459459 else $Tuple2(bH, false)
460460 else if ((1 >= toInt((bG - bH))))
461461 then $Tuple2(bH, true)
462462 else $Tuple2(bH, false)
463463 }
464464
465465 let bO = {
466466 let aO = at
467467 let aP = size(aO)
468468 let aQ = $Tuple2(toBigInt(bn), false)
469469 func bl (aS,aT) = if ((aT >= aP))
470470 then aS
471471 else bN(aS, aO[aT])
472472
473473 func bm (aS,aT) = if ((aT >= aP))
474474 then aS
475475 else throw("List size exceeds 16")
476476
477477 bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16)
478478 }
479479 let bH = bO._1
480480 let bp = bO._2
481481 if ((bp == false))
482482 then throw(("get_y_D() not finished with " + toString(bH)))
483483 else toInt(bH)
484484 }
485485
486486
487487 func bP (aW,bQ,ao,bR) = {
488488 let bS = ax(bR)
489489 let ba = aF()
490490 let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
491491 let bU = Z
492492 let bV = aZ(aW, ba)
493493 let bW = (bV - fraction(bQ, bV, bU))
494494 let bX = bJ(ba, ao, aW, bW)
495495 let bY = (aW[ao] - bX)
496496 func bZ (aM,ca) = {
497497 let cb = aM
498498 let cc = cb._1
499499 let cd = cb._2
500500 let ce = if ((cd == ao))
501501 then (fraction(ca, bW, bV) - bX)
502502 else (ca - fraction(ca, bW, bV))
503503 $Tuple2((cc :+ (ca - fraction(bT, ce, aa))), (cd + 1))
504504 }
505505
506506 let cf = {
507507 let aO = aW
508508 let aP = size(aO)
509509 let aQ = $Tuple2(nil, 0)
510510 func aR (aS,aT) = if ((aT >= aP))
511511 then aS
512512 else bZ(aS, aO[aT])
513513
514514 func aU (aS,aT) = if ((aT >= aP))
515515 then aS
516516 else throw("List size exceeds 10")
517517
518518 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
519519 }
520520 let cc = cf._1
521521 let cd = cf._2
522522 let cg = cc[ao]
523523 let ch = ((cg - bJ(ba, ao, cc, bW)) - 1)
524524 $Tuple2(ch, (bY - ch))
525525 }
526526
527527
528528 func ci (aN) = {
529529 let I = aN
530530 if ($isInstanceOf(I, "ByteVector"))
531531 then {
532532 let cj = I
533533 toBase58String(cj)
534534 }
535535 else if ($isInstanceOf(I, "Unit"))
536536 then {
537537 let ck = I
538538 "WAVES"
539539 }
540540 else throw("Match error")
541541 }
542542
543543
544544 func cl (cm,aN) = if (cm)
545545 then $Tuple2("lockNeutrino", R)
546546 else $Tuple2("unlockNeutrino", R)
547547
548548
549549 func cn (cm,co,aN) = if (cm)
550550 then {
551551 let cp = cl(cm, aN)
552552 let cq = cp._1
553553 let cr = cp._2
554554 $Tuple4(cq, cr, nil, [AttachedPayment(aN, co)])
555555 }
556556 else {
557557 let cs = cl(cm, aN)
558558 let cq = cs._1
559559 let cr = cs._2
560560 $Tuple4(cq, cr, [co, toBase58String(aN)], nil)
561561 }
562562
563563
564564 func cm (co,ct) = if (containsElement(W, ct))
565565 then {
566566 let cu = cn(true, co, fromBase58String(ct))
567567 let cq = cu._1
568568 let cv = cu._2
569569 let cw = cu._3
570570 let cx = cu._4
571571 invoke(cv, cq, cw, cx)
572572 }
573573 else 0
574574
575575
576576 func cy (co,ct) = if (containsElement(W, ct))
577577 then {
578578 let cz = cn(false, co, fromBase58String(ct))
579579 let cq = cz._1
580580 let cv = cz._2
581581 let cw = cz._3
582582 let cx = cz._4
583583 invoke(cv, cq, cw, cx)
584584 }
585585 else 0
586586
587587
588588 func cA (aN) = {
589589 let cB = {
590590 let I = aN
591591 if ($isInstanceOf(I, "ByteVector"))
592592 then {
593593 let cC = I
594594 if ((cC == V))
595595 then getInteger(R, ((("rpd_balance_" + toBase58String(cC)) + "_") + toString(this)))
596596 else 0
597597 }
598598 else if ($isInstanceOf(I, "Unit"))
599599 then 0
600600 else throw("Match error")
601601 }
602602 let I = cB
603603 if ($isInstanceOf(I, "Int"))
604604 then {
605605 let ao = I
606606 ao
607607 }
608608 else 0
609609 }
610610
611611
612612 func cD () = {
613613 let cE = aK()
614614 func cF (aM,aN) = {
615615 let cG = aM
616616 let cH = cG._1
617617 let ao = cG._2
618618 if (cH)
619619 then $Tuple2(cH, ao)
620620 else {
621621 let cI = (assetBalance(this, fromBase58String(aN)) + cA(fromBase58String(aN)))
622622 if ((cE[ao] > cI))
623623 then $Tuple2(true, ao)
624624 else $Tuple2(false, (ao + 1))
625625 }
626626 }
627627
628628 let aO = ah
629629 let aP = size(aO)
630630 let aQ = $Tuple2(false, 0)
631631 func aR (aS,aT) = if ((aT >= aP))
632632 then aS
633633 else cF(aS, aO[aT])
634634
635635 func aU (aS,aT) = if ((aT >= aP))
636636 then aS
637637 else throw("List size exceeds 10")
638638
639639 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
640640 }
641641
642642
643643 func cJ (ao) = aj(("Suspicious state with asset: " + ah[ao]))
644644
645645
646646 func cK (bR,cx) = {
647647 func cL (aM,cM) = (aM :+ ScriptTransfer(bR, cM.amount, cM.assetId))
648648
649649 let aO = cx
650650 let aP = size(aO)
651651 let aQ = nil
652652 func aR (aS,aT) = if ((aT >= aP))
653653 then aS
654654 else cL(aS, aO[aT])
655655
656656 func aU (aS,aT) = if ((aT >= aP))
657657 then aS
658658 else throw("List size exceeds 10")
659659
660660 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
661661 }
662662
663663
664664 func cN (cO) = {
665665 let cP = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key")
666666 let cQ = 10000
667667 let cR = max(cO)
668668 let cS = min(cO)
669669 let cT = fraction(cR, cQ, cS)
670670 if ((cT > (cP * cQ)))
671671 then throw("New balance in assets of the DApp is less than threshold")
672672 else false
673673 }
674674
675675
676676 func cU (ah) = {
677677 let cV = split(ah, ",")
678678 if ((size(cV) > 10))
679679 then throw("To many coins, max coins size 10")
680680 else {
681681 func cW (cX,aN) = {
682682 let cY = valueOrErrorMessage(fromBase58String(aN), ("fromBase58String: " + aN))
683683 let cZ = valueOrErrorMessage(assetInfo(cY), ("assetInfo: " + aN)).decimals
684684 if ((cZ != d))
685685 then throw("wrong decimals")
686686 else false
687687 }
688688
689689 let aO = cV
690690 let aP = size(aO)
691691 let aQ = false
692692 func aR (aS,aT) = if ((aT >= aP))
693693 then aS
694694 else cW(aS, aO[aT])
695695
696696 func aU (aS,aT) = if ((aT >= aP))
697697 then aS
698698 else throw("List size exceeds 10")
699699
700700 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
701701 }
702702 }
703703
704704
705705 @Callable(da)
706706 func D (aW,ba) = {
707707 let bn = bc(aW, ba)
708708 $Tuple2([IntegerEntry("D", bn)], bn)
709709 }
710710
711711
712712
713713 @Callable(da)
714714 func init (ah,aF,db) = if (!(isDataStorageUntouched(this)))
715715 then throw("Already initialized")
716716 else if ((0 >= aF))
717717 then throw("Amp must be must > 0")
718718 else if ((0 >= db))
719719 then throw("dApp Threshold Coef must be > 0")
720720 else {
721721 let dc = "s_Multi_USD"
722722 let dd = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this))
723723 let de = Issue(dc, dd, 0, 6, true)
724724 let df = calculateAssetId(de)
725725 if (cU(ah))
726726 then throw()
727727 else [StringEntry(g, f), StringEntry(h, ah), IntegerEntry("initial_A", aF), IntegerEntry("future_A", aF), IntegerEntry(n, getIntegerValue(F, "base_fee_flat")), StringEntry(l, toBase58String(df)), IntegerEntry(m, 0), IntegerEntry(o, db), BooleanEntry(j, true), de]
728728 }
729729
730730
731731
732732 @Callable(da)
733733 func addLiquidity (dg,dh,di) = valueOrElse(am(), {
734734 let ba = aF()
735735 let aW = aK()
736736 let bV = if ((Z == 0))
737737 then 0
738738 else bq(aW, ba)
739- let cx = da.payments
740- let dj = size(cx)
741- func dk (dl) = if ((dj > ai))
739+ let dj = if ((size(da.payments) > ai))
740+ then $Tuple2(removeByIndex(da.payments, (size(da.payments) - 1)), [da.payments[(size(da.payments) - 1)]])
741+ else $Tuple2(da.payments, nil)
742+ let cx = dj._1
743+ let dk = dj._2
744+ let dl = size(cx)
745+ func dm (dn) = if ((dl > ai))
742746 then throw(("payments size > " + toString(ai)))
743- else if ((1 > dj))
747+ else if ((1 > dl))
744748 then throw("payments size < 1")
745749 else if (if ((Z == 0))
746- then (ai != dj)
750+ then (ai != dl)
747751 else false)
748752 then throw("initial deposit requires all coins")
749753 else {
750- func dm (aM,cM) = if (containsElement(ah, ci(cM.assetId)))
754+ func do (aM,cM) = if (containsElement(ah, ci(cM.assetId)))
751755 then true
752756 else throw("Invalid asset in payment")
753757
754758 let aO = cx
755759 let aP = size(aO)
756760 let aQ = false
757761 func aR (aS,aT) = if ((aT >= aP))
758762 then aS
759- else dm(aS, aO[aT])
763+ else do(aS, aO[aT])
760764
761765 func aU (aS,aT) = if ((aT >= aP))
762766 then aS
763767 else throw("List size exceeds 10")
764768
765769 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
766770 }
767771
768- if (!(dk(dj)))
772+ if (!(dm(dl)))
769773 then throw()
770774 else {
771775 let cH = cD()
772776 if (cH._1)
773777 then (cJ(cH._2) ++ cK(da.caller, cx))
774778 else {
775779 func cL (aM,aN) = {
776- let dn = aM
777- let cO = dn._1
778- let ao = dn._2
779- func do (dp,cM) = if ((ci(cM.assetId) == aN))
780- then (dp + cM.amount)
781- else dp
780+ let dp = aM
781+ let cO = dp._1
782+ let ao = dp._2
783+ func dq (dr,cM) = if ((ci(cM.assetId) == aN))
784+ then (dr + cM.amount)
785+ else dr
782786
783- let dq = {
787+ let ds = {
784788 let aO = cx
785789 let aP = size(aO)
786790 let aQ = aW[ao]
787791 func aR (aS,aT) = if ((aT >= aP))
788792 then aS
789- else do(aS, aO[aT])
793+ else dq(aS, aO[aT])
790794
791795 func aU (aS,aT) = if ((aT >= aP))
792796 then aS
793797 else throw("List size exceeds 10")
794798
795799 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
796800 }
797- $Tuple2((cO :+ dq), (ao + 1))
801+ $Tuple2((cO :+ ds), (ao + 1))
798802 }
799803
800- let dr = {
804+ let dt = {
801805 let aO = ah
802806 let aP = size(aO)
803807 let aQ = $Tuple2(nil, 0)
804808 func aR (aS,aT) = if ((aT >= aP))
805809 then aS
806810 else cL(aS, aO[aT])
807811
808812 func aU (aS,aT) = if ((aT >= aP))
809813 then aS
810814 else throw("List size exceeds 10")
811815
812816 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
813817 }
814- let cO = dr._1
815- let ds = dr._2
818+ let cO = dt._1
819+ let du = dt._2
816820 if (cN(cO))
817821 then throw()
818822 else {
819823 let bW = bq(cO, ba)
820824 if (av((bW > bV)))
821825 then throw("D1 > D0")
822826 else {
823827 let bS = ax(da.caller)
824- func dt (aM,dp) = {
825- let du = aM
826- let dv = du._1
827- let dw = du._2
828- let ao = du._3
828+ func dv (aM,dr) = {
829+ let dw = aM
830+ let dx = dw._1
831+ let dy = dw._2
832+ let ao = dw._3
829833 if ((Z > 0))
830834 then {
831835 let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
832- let dx = {
833- let dy = fraction(bW, aW[ao], bV)
834- let dz = if ((dy > dp))
835- then (dy - dp)
836- else (dp - dy)
837- fraction(bT, dz, aa)
836+ let dz = {
837+ let dA = fraction(bW, aW[ao], bV)
838+ let dB = if ((dA > dr))
839+ then (dA - dr)
840+ else (dr - dA)
841+ fraction(bT, dB, aa)
838842 }
839- let dA = fraction(dx, ac, aa)
840- let dB = (dp - dx)
841- let dC = (dp - dx)
842- let dD = (dp - aW[ao])
843- let dE = (dx - dA)
844- let dF = if ((dD > 0))
845- then cm((dD - dx), ah[ao])
846- else cy(dx, ah[ao])
847- if ((dF == dF))
843+ let dC = fraction(dz, ac, aa)
844+ let dD = (dr - dz)
845+ let dE = (dr - dz)
846+ let dF = (dr - aW[ao])
847+ let dG = (dz - dC)
848+ let dH = if ((dF > 0))
849+ then cm((dF - dz), ah[ao])
850+ else cy(dz, ah[ao])
851+ if ((dH == dH))
848852 then {
849- let dG = if ((dE > 0))
850- then invoke(U, "airDrop", nil, [AttachedPayment(fromBase58String(ah[ao]), dE)])
853+ let dI = if ((dG > 0))
854+ then invoke(U, "airDrop", nil, [AttachedPayment(fromBase58String(ah[ao]), dG)])
851855 else 0
852- if ((dG == dG))
853- then $Tuple3((dv :+ dC), (dw ++ [ScriptTransfer(P, dA, fromBase58String(ah[ao])), IntegerEntry((ah[ao] + i), dB)]), (ao + 1))
856+ if ((dI == dI))
857+ then $Tuple3((dx :+ dE), (dy ++ [ScriptTransfer(P, dC, fromBase58String(ah[ao])), IntegerEntry((ah[ao] + i), dD)]), (ao + 1))
854858 else throw("Strict value is not equal to itself.")
855859 }
856860 else throw("Strict value is not equal to itself.")
857861 }
858862 else {
859- let dF = cm(dp, ah[ao])
860- if ((dF == dF))
861- then $Tuple3((dv :+ dp), (dw :+ IntegerEntry((ah[ao] + i), dp)), (ao + 1))
863+ let dH = cm(dr, ah[ao])
864+ if ((dH == dH))
865+ then $Tuple3((dx :+ dr), (dy :+ IntegerEntry((ah[ao] + i), dr)), (ao + 1))
862866 else throw("Strict value is not equal to itself.")
863867 }
864868 }
865869
866- let dH = {
870+ let dJ = {
867871 let aO = cO
868872 let aP = size(aO)
869873 let aQ = $Tuple3(nil, nil, 0)
870874 func bl (aS,aT) = if ((aT >= aP))
871875 then aS
872- else dt(aS, aO[aT])
876+ else dv(aS, aO[aT])
873877
874878 func bm (aS,aT) = if ((aT >= aP))
875879 then aS
876880 else throw("List size exceeds 10")
877881
878882 bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
879883 }
880- let dv = dH._1
881- let dw = dH._2
882- let dI = bq(dv, ba)
883- let dJ = if ((Z == 0))
884+ let dx = dJ._1
885+ let dy = dJ._2
886+ let dK = bq(dx, ba)
887+ let dL = if ((Z == 0))
884888 then bW
885- else fraction(Z, (dI - bV), bV)
886- if (av((dJ >= dg)))
889+ else fraction(Z, (dK - bV), bV)
890+ if (av((dL >= dg)))
887891 then throw("Slippage screwed you")
888892 else if (dh)
889893 then {
890- let dK = invoke(this, "reissueShare", [dJ], nil)
891- if ((dK == dK))
894+ let dM = invoke(this, "reissueShare", [dL], nil)
895+ if ((dM == dM))
892896 then {
893- let dL = invoke(T, "lockShareTokens", [toString(this), di], [AttachedPayment(Y, dJ)])
894- if ((dL == dL))
895- then (dw :+ IntegerEntry(m, (Z + dJ)))
897+ let dN = invoke(T, "lockShareTokens", [toString(this), di], ([AttachedPayment(Y, dL)] ++ dk))
898+ if ((dN == dN))
899+ then (dy :+ IntegerEntry(m, (Z + dL)))
896900 else throw("Strict value is not equal to itself.")
897901 }
898902 else throw("Strict value is not equal to itself.")
899903 }
900- else (dw ++ [Reissue(Y, dJ, true), ScriptTransfer(da.caller, dJ, Y), IntegerEntry(m, (Z + dJ))])
904+ else (dy ++ [Reissue(Y, dL, true), ScriptTransfer(da.caller, dL, Y), IntegerEntry(m, (Z + dL))])
901905 }
902906 }
903907 }
904908 }
905909 })
906910
907911
908912
909913 @Callable(da)
910914 func calcMintAmount (cO,az) = {
911915 let ba = aF()
912916 let aW = aK()
913917 let bW = bq(cO, ba)
914918 if ((Z == 0))
915919 then $Tuple2(nil, bW)
916920 else {
917921 let bV = bq(aW, ba)
918922 let bS = ax(az)
919- func dM (aM,dp) = {
920- let dN = aM
921- let dv = dN._1
922- let ao = dN._2
923+ func dO (aM,dr) = {
924+ let dP = aM
925+ let dx = dP._1
926+ let ao = dP._2
923927 let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
924- let dx = {
925- let dy = fraction(bW, aW[ao], bV)
926- let dz = if ((dy > dp))
927- then (dy - dp)
928- else (dp - dy)
929- fraction(bT, dz, aa)
928+ let dz = {
929+ let dA = fraction(bW, aW[ao], bV)
930+ let dB = if ((dA > dr))
931+ then (dA - dr)
932+ else (dr - dA)
933+ fraction(bT, dB, aa)
930934 }
931- let dC = (dp - dx)
932- $Tuple2((dv :+ dC), (ao + 1))
935+ let dE = (dr - dz)
936+ $Tuple2((dx :+ dE), (ao + 1))
933937 }
934938
935- let dO = {
939+ let dQ = {
936940 let aO = cO
937941 let aP = size(aO)
938942 let aQ = $Tuple2(nil, 0)
939943 func aR (aS,aT) = if ((aT >= aP))
940944 then aS
941- else dM(aS, aO[aT])
945+ else dO(aS, aO[aT])
942946
943947 func aU (aS,aT) = if ((aT >= aP))
944948 then aS
945949 else throw("List size exceeds 10")
946950
947951 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
948952 }
949- let dv = dO._1
950- let ds = dO._2
951- let dI = bq(dv, ba)
952- let dP = fraction(Z, (dI - bV), bV)
953- $Tuple2(nil, dP)
953+ let dx = dQ._1
954+ let du = dQ._2
955+ let dK = bq(dx, ba)
956+ let dR = fraction(Z, (dK - bV), bV)
957+ $Tuple2(nil, dR)
954958 }
955959 }
956960
957961
958962
959963 @Callable(da)
960964 func reissueShare (co) = valueOrElse(ap(da), [Reissue(Y, co, true)])
961965
962966
963967
964968 @Callable(da)
965-func getDy (dQ,dR,dS,dT) = {
969+func getDy (dS,dT,dU,dV) = {
966970 let aW = aK()
967- let dU = valueOrErrorMessage(indexOf(ah, dQ), "unknown token in")
968- let dV = valueOrErrorMessage(indexOf(ah, dR), "unknown token out")
969- let bu = (aW[dU] + dS)
970- let bH = br(dU, dV, bu, aW)
971- let ch = ((aW[dV] - bH) - 1)
972- let bS = ax(Address(fromBase58String(dT)))
971+ let dW = valueOrErrorMessage(indexOf(ah, dS), "unknown token in")
972+ let dX = valueOrErrorMessage(indexOf(ah, dT), "unknown token out")
973+ let bu = (aW[dW] + dU)
974+ let bH = br(dW, dX, bu, aW)
975+ let ch = ((aW[dX] - bH) - 1)
976+ let bS = ax(Address(fromBase58String(dV)))
973977 let bT = fraction(fraction(ab, bS, aa, CEILING), ch, aa)
974978 $Tuple2(nil, $Tuple2((ch - bT), bT))
975979 }
976980
977981
978982
979983 @Callable(da)
980-func exchange (dW,dX) = valueOrElse(am(), if ((size(da.payments) != 1))
984+func exchange (dY,dZ) = valueOrElse(am(), if ((size(da.payments) != 1))
981985 then throw("size(payments) != 1")
982986 else {
983987 let cH = cD()
984988 if (cH._1)
985989 then (cJ(cH._2) ++ cK(da.caller, da.payments))
986990 else {
987991 let cM = da.payments[0]
988- let dY = ci(cM.assetId)
989- let dZ = fromBase58String(dW)
990- let dS = cM.amount
991- let dU = valueOrErrorMessage(indexOf(ah, dY), "unknown token in")
992- let dV = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
992+ let ea = ci(cM.assetId)
993+ let eb = fromBase58String(dY)
994+ let dU = cM.amount
995+ let dW = valueOrErrorMessage(indexOf(ah, ea), "unknown token in")
996+ let dX = valueOrErrorMessage(indexOf(ah, dY), "unknown token out")
993997 let aW = aK()
994- let bu = (aW[dU] + dS)
995- let bH = br(dU, dV, bu, aW)
996- let ea = ((aW[dV] - bH) - 1)
998+ let bu = (aW[dW] + dU)
999+ let bH = br(dW, dX, bu, aW)
1000+ let ec = ((aW[dX] - bH) - 1)
9971001 let bS = ax(da.originCaller)
998- let bT = fraction(ea, fraction(ab, bS, aa, CEILING), aa)
999- let ch = (ea - bT)
1000- let dA = fraction(bT, ac, aa)
1001- if (av((ch >= dX)))
1002+ let bT = fraction(ec, fraction(ab, bS, aa, CEILING), aa)
1003+ let ch = (ec - bT)
1004+ let dC = fraction(bT, ac, aa)
1005+ if (av((ch >= dZ)))
10021006 then throw("Exchange resulted in fewer coins than expected")
10031007 else {
1004- func eb (aM,ec) = {
1005- let ed = aM
1006- let cO = ed._1
1007- let ao = ed._2
1008- if ((ao == dU))
1009- then $Tuple2((cO :+ (ec + dS)), (ao + 1))
1010- else if ((ao == dV))
1011- then $Tuple2((cO :+ (ec - ea)), (ao + 1))
1012- else $Tuple2((cO :+ ec), (ao + 1))
1008+ func ed (aM,ee) = {
1009+ let ef = aM
1010+ let cO = ef._1
1011+ let ao = ef._2
1012+ if ((ao == dW))
1013+ then $Tuple2((cO :+ (ee + dU)), (ao + 1))
1014+ else if ((ao == dX))
1015+ then $Tuple2((cO :+ (ee - ec)), (ao + 1))
1016+ else $Tuple2((cO :+ ee), (ao + 1))
10131017 }
10141018
1015- let ee = {
1019+ let eg = {
10161020 let aO = aW
10171021 let aP = size(aO)
10181022 let aQ = $Tuple2(nil, 0)
10191023 func aR (aS,aT) = if ((aT >= aP))
10201024 then aS
1021- else eb(aS, aO[aT])
1025+ else ed(aS, aO[aT])
10221026
10231027 func aU (aS,aT) = if ((aT >= aP))
10241028 then aS
10251029 else throw("List size exceeds 10")
10261030
10271031 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10281032 }
1029- let cO = ee._1
1030- let ao = ee._2
1033+ let cO = eg._1
1034+ let ao = eg._2
10311035 if (cN(cO))
10321036 then throw()
10331037 else {
1034- let dL = cm(cM.amount, ci(cM.assetId))
1035- if ((dL == dL))
1038+ let dN = cm(cM.amount, ci(cM.assetId))
1039+ if ((dN == dN))
10361040 then {
1037- let ef = cy(ea, dW)
1038- if ((ef == ef))
1041+ let eh = cy(ec, dY)
1042+ if ((eh == eh))
10391043 then {
1040- let dE = (bT - dA)
1041- let dG = if ((dE > 0))
1042- then invoke(U, "airDrop", nil, [AttachedPayment(dZ, dE)])
1044+ let dG = (bT - dC)
1045+ let dI = if ((dG > 0))
1046+ then invoke(U, "airDrop", nil, [AttachedPayment(eb, dG)])
10431047 else 0
1044- if ((dG == dG))
1045- then $Tuple2([IntegerEntry((dY + i), bu), IntegerEntry((dW + i), (aW[dV] - ea)), ScriptTransfer(da.caller, ch, dZ), ScriptTransfer(P, dA, dZ)], [ch, dZ])
1048+ if ((dI == dI))
1049+ then $Tuple2([IntegerEntry((ea + i), bu), IntegerEntry((dY + i), (aW[dX] - ec)), ScriptTransfer(da.caller, ch, eb), ScriptTransfer(P, dC, eb)], [ch, eb])
10461050 else throw("Strict value is not equal to itself.")
10471051 }
10481052 else throw("Strict value is not equal to itself.")
10491053 }
10501054 else throw("Strict value is not equal to itself.")
10511055 }
10521056 }
10531057 }
10541058 })
10551059
10561060
10571061
10581062 @Callable(da)
1059-func withdraw (eg) = valueOrElse(am(), if ((size(da.payments) != 1))
1063+func withdraw (ei) = valueOrElse(am(), if ((size(da.payments) != 1))
10601064 then throw("size(payments) != 1")
10611065 else {
1062- let eh = da.payments[0].amount
1063- let ei = da.payments[0].assetId
1064- if ((Y != ei))
1066+ let ej = da.payments[0].amount
1067+ let ek = da.payments[0].assetId
1068+ if ((Y != ek))
10651069 then throw("unknown payment token")
10661070 else {
10671071 let cH = cD()
10681072 if (cH._1)
10691073 then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
10701074 else {
1071- func dt (aM,ej) = {
1072- let ek = aM
1073- let dw = ek._1
1074- let ao = ek._2
1075- let el = fraction(ej, eh, Z)
1076- if (av((el >= eg[ao])))
1075+ func dv (aM,el) = {
1076+ let em = aM
1077+ let dy = em._1
1078+ let ao = em._2
1079+ let en = fraction(el, ej, Z)
1080+ if (av((en >= ei[ao])))
10771081 then throw("Withdrawal resulted in fewer coins than expected")
10781082 else {
1079- let ef = cy(el, ah[ao])
1080- if ((ef == ef))
1081- then $Tuple2((dw ++ [IntegerEntry((ah[ao] + i), (ej - el)), ScriptTransfer(da.originCaller, el, fromBase58String(ah[ao]))]), (ao + 1))
1083+ let eh = cy(en, ah[ao])
1084+ if ((eh == eh))
1085+ then $Tuple2((dy ++ [IntegerEntry((ah[ao] + i), (el - en)), ScriptTransfer(da.originCaller, en, fromBase58String(ah[ao]))]), (ao + 1))
10821086 else throw("Strict value is not equal to itself.")
10831087 }
10841088 }
10851089
1086- let em = {
1090+ let eo = {
10871091 let aO = aK()
10881092 let aP = size(aO)
10891093 let aQ = $Tuple2(nil, 0)
10901094 func aR (aS,aT) = if ((aT >= aP))
10911095 then aS
1092- else dt(aS, aO[aT])
1096+ else dv(aS, aO[aT])
10931097
10941098 func aU (aS,aT) = if ((aT >= aP))
10951099 then aS
10961100 else throw("List size exceeds 10")
10971101
10981102 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10991103 }
1100- let dw = em._1
1101- let ao = em._2
1102- (dw ++ [Burn(Y, eh), IntegerEntry(m, (Z - eh))])
1104+ let dy = eo._1
1105+ let ao = eo._2
1106+ (dy ++ [Burn(Y, ej), IntegerEntry(m, (Z - ej))])
11031107 }
11041108 }
11051109 })
11061110
11071111
11081112
11091113 @Callable(da)
1110-func withdrawWithUnlock (eg,en) = valueOrElse(am(), if ((0 >= en))
1114+func withdrawWithUnlock (ei,ep) = valueOrElse(am(), if ((0 >= ep))
11111115 then throw("Unlock amount must be positive")
11121116 else {
11131117 let cH = cD()
11141118 if (cH._1)
11151119 then (cJ(cH._2) ++ cK(da.caller, da.payments))
11161120 else {
1117- let eh = if ((size(da.payments) > 0))
1121+ let ej = if ((size(da.payments) > 0))
11181122 then if ((size(da.payments) != 1))
11191123 then throw("size(payments) != 1")
11201124 else {
1121- let ei = da.payments[0].assetId
1122- if ((Y != ei))
1125+ let ek = da.payments[0].assetId
1126+ if ((Y != ek))
11231127 then throw("unknown payment token")
11241128 else da.payments[0].amount
11251129 }
11261130 else 0
1127- let eo = invoke(T, "withdrawShareTokens", [toString(this), en], nil)
1128- if ((eo == eo))
1131+ let eq = invoke(T, "withdrawShareTokens", [toString(this), ep], nil)
1132+ if ((eq == eq))
11291133 then {
1130- let ep = (eh + en)
1131- let dF = invoke(this, "withdraw", [eg], [AttachedPayment(Y, ep)])
1132- if ((dF == dF))
1134+ let er = (ej + ep)
1135+ let dH = invoke(this, "withdraw", [ei], [AttachedPayment(Y, er)])
1136+ if ((dH == dH))
11331137 then nil
11341138 else throw("Strict value is not equal to itself.")
11351139 }
11361140 else throw("Strict value is not equal to itself.")
11371141 }
11381142 })
11391143
11401144
11411145
11421146 @Callable(da)
1143-func calcWithdrawOneCoin (eq,dW,az) = if ((0 >= eq))
1147+func calcWithdrawOneCoin (es,dY,az) = if ((0 >= es))
11441148 then throw("Amount must be positive")
11451149 else {
1146- let ao = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
1147- $Tuple2(nil, bP(aK(), eq, ao, Address(fromBase58String(az)))._1)
1150+ let ao = valueOrErrorMessage(indexOf(ah, dY), "unknown token out")
1151+ $Tuple2(nil, bP(aK(), es, ao, Address(fromBase58String(az)))._1)
11481152 }
11491153
11501154
11511155
11521156 @Callable(da)
1153-func withdrawOneCoin (dW,er) = valueOrElse(am(), if ((size(da.payments) != 1))
1157+func withdrawOneCoin (dY,et) = valueOrElse(am(), if ((size(da.payments) != 1))
11541158 then throw("size(payments) != 1")
11551159 else {
11561160 let cH = cD()
11571161 if (cH._1)
11581162 then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
11591163 else {
1160- let eh = da.payments[0].amount
1161- let ei = da.payments[0].assetId
1162- if ((ei != Y))
1164+ let ej = da.payments[0].amount
1165+ let ek = da.payments[0].assetId
1166+ if ((ek != Y))
11631167 then throw("unknown token")
11641168 else {
1165- let es = valueOrErrorMessage(indexOf(ah, dW), "unknown token out")
1166- let dZ = fromBase58String(dW)
1169+ let eu = valueOrErrorMessage(indexOf(ah, dY), "unknown token out")
1170+ let eb = fromBase58String(dY)
11671171 let aW = aK()
1168- let et = bP(aW, eh, es, da.originCaller)
1169- let ch = et._1
1170- let eu = et._2
1171- if (av((ch >= er)))
1172+ let ev = bP(aW, ej, eu, da.originCaller)
1173+ let ch = ev._1
1174+ let ew = ev._2
1175+ if (av((ch >= et)))
11721176 then throw("Not enough coins removed")
11731177 else {
1174- let dA = fraction(eu, ac, aa)
1175- let ev = (ch + eu)
1176- func eb (aM,ec) = {
1177- let ew = aM
1178- let cO = ew._1
1179- let ao = ew._2
1180- if ((ao == es))
1181- then $Tuple2((cO :+ (ec - ev)), (ao + 1))
1182- else $Tuple2((cO :+ ec), (ao + 1))
1178+ let dC = fraction(ew, ac, aa)
1179+ let ex = (ch + ew)
1180+ func ed (aM,ee) = {
1181+ let ey = aM
1182+ let cO = ey._1
1183+ let ao = ey._2
1184+ if ((ao == eu))
1185+ then $Tuple2((cO :+ (ee - ex)), (ao + 1))
1186+ else $Tuple2((cO :+ ee), (ao + 1))
11831187 }
11841188
1185- let ex = {
1189+ let ez = {
11861190 let aO = aW
11871191 let aP = size(aO)
11881192 let aQ = $Tuple2(nil, 0)
11891193 func aR (aS,aT) = if ((aT >= aP))
11901194 then aS
1191- else eb(aS, aO[aT])
1195+ else ed(aS, aO[aT])
11921196
11931197 func aU (aS,aT) = if ((aT >= aP))
11941198 then aS
11951199 else throw("List size exceeds 10")
11961200
11971201 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11981202 }
1199- let cO = ex._1
1200- let ey = ex._2
1203+ let cO = ez._1
1204+ let eA = ez._2
12011205 if (cN(cO))
12021206 then throw()
12031207 else {
1204- let ef = cy(ev, dW)
1205- if ((ef == ef))
1208+ let eh = cy(ex, dY)
1209+ if ((eh == eh))
12061210 then {
1207- let dE = (eu - dA)
1208- let dG = if ((dE > 0))
1209- then invoke(U, "airDrop", nil, [AttachedPayment(dZ, dE)])
1211+ let dG = (ew - dC)
1212+ let dI = if ((dG > 0))
1213+ then invoke(U, "airDrop", nil, [AttachedPayment(eb, dG)])
12101214 else 0
1211- if ((dG == dG))
1212- then [ScriptTransfer(da.originCaller, ch, dZ), IntegerEntry((ah[es] + i), (aW[es] - ev)), Burn(Y, eh), ScriptTransfer(P, dA, dZ), IntegerEntry(m, (Z - eh))]
1215+ if ((dI == dI))
1216+ then [ScriptTransfer(da.originCaller, ch, eb), IntegerEntry((ah[eu] + i), (aW[eu] - ex)), Burn(Y, ej), ScriptTransfer(P, dC, eb), IntegerEntry(m, (Z - ej))]
12131217 else throw("Strict value is not equal to itself.")
12141218 }
12151219 else throw("Strict value is not equal to itself.")
12161220 }
12171221 }
12181222 }
12191223 }
12201224 })
12211225
12221226
12231227
12241228 @Callable(da)
1225-func withdrawOneCoinWithUnlock (dW,er,en) = valueOrElse(am(), if ((0 >= en))
1229+func withdrawOneCoinWithUnlock (dY,et,ep) = valueOrElse(am(), if ((0 >= ep))
12261230 then throw("Unlock amount must be positive")
12271231 else {
12281232 let cH = cD()
12291233 if (cH._1)
12301234 then (cJ(cH._2) ++ cK(da.caller, da.payments))
12311235 else {
1232- let eh = if ((size(da.payments) > 0))
1236+ let ej = if ((size(da.payments) > 0))
12331237 then if ((size(da.payments) != 1))
12341238 then throw("size(payments) != 1")
12351239 else {
1236- let ei = da.payments[0].assetId
1237- if ((Y != ei))
1240+ let ek = da.payments[0].assetId
1241+ if ((Y != ek))
12381242 then throw("unknown payment token")
12391243 else da.payments[0].amount
12401244 }
12411245 else 0
1242- let eo = invoke(T, "withdrawShareTokens", [toString(this), en], nil)
1243- if ((eo == eo))
1246+ let eq = invoke(T, "withdrawShareTokens", [toString(this), ep], nil)
1247+ if ((eq == eq))
12441248 then {
1245- let ep = (eh + en)
1246- let dF = invoke(this, "withdrawOneCoin", [dW, er], [AttachedPayment(Y, ep)])
1247- if ((dF == dF))
1249+ let er = (ej + ep)
1250+ let dH = invoke(this, "withdrawOneCoin", [dY, et], [AttachedPayment(Y, er)])
1251+ if ((dH == dH))
12481252 then nil
12491253 else throw("Strict value is not equal to itself.")
12501254 }
12511255 else throw("Strict value is not equal to itself.")
12521256 }
12531257 })
12541258
12551259
12561260
12571261 @Callable(da)
12581262 func A () = $Tuple2(nil, aF())
12591263
12601264
12611265
12621266 @Callable(da)
12631267 func getVirtualPrice () = {
12641268 let bn = aZ(aK(), aF())
12651269 $Tuple2(nil, fraction(bn, a, Z))
12661270 }
12671271
12681272
12691273
12701274 @Callable(da)
1271-func calcTokenAmount (ez,eA) = {
1275+func calcTokenAmount (eB,eC) = {
12721276 let ba = aF()
1273- let eB = aK()
1274- let bV = bq(eB, ba)
1275- func eC (aM,ej) = {
1276- let eD = aM
1277- let cO = eD._1
1278- let ao = eD._2
1279- let dp = (ej + (if (eA)
1280- then ez[ao]
1281- else -(ez[ao])))
1282- $Tuple2((cO :+ dp), (ao + 1))
1277+ let eD = aK()
1278+ let bV = bq(eD, ba)
1279+ func eE (aM,el) = {
1280+ let eF = aM
1281+ let cO = eF._1
1282+ let ao = eF._2
1283+ let dr = (el + (if (eC)
1284+ then eB[ao]
1285+ else -(eB[ao])))
1286+ $Tuple2((cO :+ dr), (ao + 1))
12831287 }
12841288
1285- let cO = ( let aO = eB
1289+ let cO = ( let aO = eD
12861290 let aP = size(aO)
12871291 let aQ = $Tuple2(nil, 0)
12881292 func aR (aS,aT) = if ((aT >= aP))
12891293 then aS
1290- else eC(aS, aO[aT])
1294+ else eE(aS, aO[aT])
12911295
12921296 func aU (aS,aT) = if ((aT >= aP))
12931297 then aS
12941298 else throw("List size exceeds 10")
12951299
12961300 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
12971301 let bW = bq(cO, ba)
1298- let eE = if (eA)
1302+ let eG = if (eC)
12991303 then (bW - bV)
13001304 else (bV - bW)
1301- $Tuple2(nil, fraction(eE, Z, bV))
1305+ $Tuple2(nil, fraction(eG, Z, bV))
13021306 }
13031307
13041308
13051309
13061310 @Callable(da)
1307-func rampA (eF,eG) = valueOrElse(am(), valueOrElse(an(da), if (av((au >= (af + e))))
1311+func rampA (eH,eI) = valueOrElse(am(), valueOrElse(an(da), if (av((au >= (af + e))))
13081312 then throw("too often")
1309- else if (av((eG >= (au + e))))
1313+ else if (av((eI >= (au + e))))
13101314 then throw("insufficient time")
13111315 else {
1312- let eH = aF()
1313- if (av(if ((eF > 0))
1314- then (b > eF)
1316+ let eJ = aF()
1317+ if (av(if ((eH > 0))
1318+ then (b > eH)
13151319 else false))
13161320 then throw("out of base range")
1317- else if (av(if (if ((eF >= eH))
1318- then ((eH * c) >= eF)
1321+ else if (av(if (if ((eH >= eJ))
1322+ then ((eJ * c) >= eH)
13191323 else false)
13201324 then true
1321- else if ((eH > eF))
1322- then ((eF * c) >= eH)
1325+ else if ((eJ > eH))
1326+ then ((eH * c) >= eJ)
13231327 else false))
13241328 then throw("out of range")
1325- else [IntegerEntry("initial_A", eH), IntegerEntry("future_A", eF), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", eG)]
1329+ else [IntegerEntry("initial_A", eJ), IntegerEntry("future_A", eH), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", eI)]
13261330 }))
13271331
13281332
13291333
13301334 @Callable(da)
13311335 func stopRampA () = valueOrElse(am(), valueOrElse(an(da), {
1332- let eI = aF()
1333-[IntegerEntry("initial_A", eI), IntegerEntry("future_A", eI), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", au)]
1336+ let eK = aF()
1337+[IntegerEntry("initial_A", eK), IntegerEntry("future_A", eK), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", au)]
13341338 }))
13351339
13361340
13371341
13381342 @Callable(da)
13391343 func shutdown () = valueOrElse(an(da), if (!(X))
13401344 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
13411345 else aj("Paused by admin"))
13421346
13431347
13441348
13451349 @Callable(da)
13461350 func activate () = valueOrElse(an(da), if (X)
13471351 then al()
13481352 else [BooleanEntry(j, true), DeleteEntry(k)])
13491353
13501354
13511355
13521356 @Callable(da)
13531357 func takeIntoAccountExtraFunds () = valueOrElse(am(), if ((da.caller != P))
13541358 then throw("Only the wallet can call this function")
13551359 else {
1356- let eB = aK()
1357- func eJ (aM,aN) = {
1358- let eK = aM
1359- let eL = eK._1
1360- let ao = eK._2
1361- let eM = fromBase58String(aN)
1362- let eN = (assetBalance(this, eM) + cA(eM))
1363- let eO = (eN - eB[ao])
1364- if ((0 > eO))
1360+ let eD = aK()
1361+ func eL (aM,aN) = {
1362+ let eM = aM
1363+ let eN = eM._1
1364+ let ao = eM._2
1365+ let eO = fromBase58String(aN)
1366+ let eP = (assetBalance(this, eO) + cA(eO))
1367+ let eQ = (eP - eD[ao])
1368+ if ((0 > eQ))
13651369 then aj(("Enroll amount negative for asset" + aN))
13661370 else {
1367- let dG = if ((eO > 0))
1368- then invoke(U, "airDrop", nil, [AttachedPayment(eM, eO)])
1371+ let dI = if ((eQ > 0))
1372+ then invoke(U, "airDrop", nil, [AttachedPayment(eO, eQ)])
13691373 else 0
1370- if ((dG == dG))
1371- then $Tuple2((eL + eO), (ao + 1))
1374+ if ((dI == dI))
1375+ then $Tuple2((eN + eQ), (ao + 1))
13721376 else throw("Strict value is not equal to itself.")
13731377 }
13741378 }
13751379
1376- let ds = {
1380+ let du = {
13771381 let aO = ah
13781382 let aP = size(aO)
13791383 let aQ = $Tuple2(0, 0)
13801384 func aR (aS,aT) = if ((aT >= aP))
13811385 then aS
1382- else eJ(aS, aO[aT])
1386+ else eL(aS, aO[aT])
13831387
13841388 func aU (aS,aT) = if ((aT >= aP))
13851389 then aS
13861390 else throw("List size exceeds 10")
13871391
13881392 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
13891393 }
1390- if ((ds._1 == 0))
1394+ if ((du._1 == 0))
13911395 then throw("No money to take")
13921396 else nil
13931397 })
13941398
13951399
1396-@Verifier(eP)
1397-func eQ () = {
1398- let eR = {
1399- let eS = if (sigVerify(eP.bodyBytes, eP.proofs[0], L))
1400+@Verifier(eR)
1401+func eS () = {
1402+ let eT = {
1403+ let eU = if (sigVerify(eR.bodyBytes, eR.proofs[0], L))
14001404 then 1
14011405 else 0
1402- let eT = if (sigVerify(eP.bodyBytes, eP.proofs[1], M))
1406+ let eV = if (sigVerify(eR.bodyBytes, eR.proofs[1], M))
14031407 then 1
14041408 else 0
1405- let eU = if (sigVerify(eP.bodyBytes, eP.proofs[2], N))
1409+ let eW = if (sigVerify(eR.bodyBytes, eR.proofs[2], N))
14061410 then 1
14071411 else 0
1408- (((eS + eT) + eU) >= 2)
1412+ (((eU + eV) + eW) >= 2)
14091413 }
1410- let I = eP
1414+ let I = eR
14111415 if ($isInstanceOf(I, "InvokeScriptTransaction"))
14121416 then {
1413- let dF = I
1414- let eV = if ((dF.dApp == this))
1415- then (dF.function == "takeIntoAccountExtraFunds")
1417+ let dH = I
1418+ let eX = if ((dH.dApp == this))
1419+ then (dH.function == "takeIntoAccountExtraFunds")
14161420 else false
1417- let eW = if (if (if (sigVerify(eP.bodyBytes, eP.proofs[0], L))
1421+ let eY = if (if (if (sigVerify(eR.bodyBytes, eR.proofs[0], L))
14181422 then true
1419- else sigVerify(eP.bodyBytes, eP.proofs[0], M))
1423+ else sigVerify(eR.bodyBytes, eR.proofs[0], M))
14201424 then true
1421- else sigVerify(eP.bodyBytes, eP.proofs[0], N))
1425+ else sigVerify(eR.bodyBytes, eR.proofs[0], N))
14221426 then true
1423- else sigVerify(eP.bodyBytes, eP.proofs[0], O)
1424- if (if (eV)
1425- then eW
1427+ else sigVerify(eR.bodyBytes, eR.proofs[0], O)
1428+ if (if (eX)
1429+ then eY
14261430 else false)
14271431 then true
1428- else eR
1432+ else eT
14291433 }
1430- else eR
1434+ else eT
14311435 }
14321436

github/deemru/w8io/873ac7e 
1045.78 ms