tx · H5nDHCAQYfWvdHmpwq6BAKet1aHwZp2YKtdkh8e4rTVo

3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS:  -0.05000000 Waves

2022.10.25 18:27 [2288099] smart account 3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS > SELF 0.00000000 Waves

{ "type": 13, "id": "H5nDHCAQYfWvdHmpwq6BAKet1aHwZp2YKtdkh8e4rTVo", "fee": 5000000, "feeAssetId": null, "timestamp": 1666711602112, "version": 2, "chainId": 84, "sender": "3MxWgDbE9EmjQj8b3LfFwa91FZizptyeQXS", "senderPublicKey": "C7xgcYqQ8qV8rmvzAjhQWq4cz82F6VJfXMNygvrTXsfW", "proofs": [ "472PU9nPdWGStGaU5igTEDK2dP64NyKqnipRYSXTWR8h9wTATqYsFR4aXDHusb8a84MHFQ5rsKbQeYquDvzsYGt8", "4MmQYQs3KW1Ukdtf8RTHKba6wb5zrNRrBaUrmQzWEA2AEg4ExaZiPJKnUruuD7W96yFB3YDGLMhVNe3VFQhYd4B3" ], "script": "base64:BgJmCAISBAoCEQESBQoDCAEBEgUKAwEEARIECgIRCBIDCgEBEgYKBAgIAQgSBAoCCAESAwoBERIECgIRARIFCgMBCAgSBAoCCAESBQoDCAEBEgASABIECgIRBBIECgIBARIAEgASABIAWAAJUFJFQ0lTSU9OAMCEPQAFTUFYX0EAwIQ9AAxNQVhfQV9DSEFOR0UACgAIREVDSU1BTFMABgANTUlOX1JBTVBfVElNRQkAaQIAgKMFADwAB3ZlcnNpb24CBTMuMC4wAAhrVmVyc2lvbgIHdmVyc2lvbgAHa0Fzc2V0cwIJYXNzZXRfaWRzAA1rQXNzZXRCYWxhbmNlAghfYmFsYW5jZQAHa0FjdGl2ZQIGYWN0aXZlAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rU2hhcmVBc3NldElkAg5zaGFyZV9hc3NldF9pZAARa1NoYXJlQXNzZXRTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAEa0ZlZQIKY29tbWlzc2lvbgASa0RBcHBUaHJlc2hvbGRDb2VmAhFkQXBwVGhyZXNob2xkQ29lZgAMa1VTRE5BZGRyZXNzAhhzdGFraW5nX3VzZG5uc2J0X2FkZHJlc3MACmtEaXNjb3VudHMCCWRpc2NvdW50cwAPa0Rpc2NvdW50VmFsdWVzAg9kaXNjb3VudF92YWx1ZXMADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQAD2tVc2VyR1N3b3BJbkdvdgINX0dTd29wX2Ftb3VudAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwARa0xQRmFybWluZ0FkZHJlc3MCCmxwX2Zhcm1pbmcABm9yYWNsZQkBB0FkZHJlc3MBARoBVEgTlwzA0zPMJTKAtin3p2RogKvjzHtLmQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5QdWJLZXlJbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEnN0YWtpbmdVU0ROQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtVU0ROQWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tGYXJtaW5nQWRkcmVzcwAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzAARVU0ROASBvJKPKqzDcUimY6CxhWu5afyNNwi11u+mdqlTg0tAHwQANc3Rha2luZ0Fzc2V0cwkAzAgCCQDYBAEFBFVTRE4FA25pbAAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAxzaGFyZUFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa1NoYXJlQXNzZXRJZAALc2hhcmVTdXBwbHkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtTaGFyZUFzc2V0U3VwcGx5AAlmZWVTY2FsZTYAwIQ9AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDACgFCWZlZVNjYWxlNgBkAAlpbml0aWFsX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCWluaXRpYWxfQQAIZnV0dXJlX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCGZ1dHVyZV9BAA5pbml0aWFsX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg5pbml0aWFsX0FfdGltZQAAAA1mdXR1cmVfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDWZ1dHVyZV9BX3RpbWUAAAAIYXNzZXRJZHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUHa0Fzc2V0cwIBLAAGbkNvaW5zCQCQAwEFCGFzc2V0SWRzAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQ10aHJvd0lzQWN0aXZlAAkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUBCGlzQWN0aXZlAAMFBmFjdGl2ZQUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIFBHRoaXMIBQFpBmNhbGxlcgUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24ABGJpZzIJALYCAQACAAZpdGVyMTAJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJBQNuaWwABml0ZXIxNQkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsAAZpdGVyMTYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4JAMwIAgAPBQNuaWwADmJsb2NrVGltZXN0YW1wBQZoZWlnaHQBBmFzc2VydAEBYQMFAWEHBgEUY2FsY3VsYXRlRmVlRGlzY291bnQBCHVzZXJBZGRyBAR1c2VyBAckbWF0Y2gwBQh1c2VyQWRkcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAF1BQckbWF0Y2gwCQClCAEFAXUDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAF1BQckbWF0Y2gwBQF1CQACAQIYVW5rbm93IHR5cGUgb2YgdXNlciBBZGRyBApzd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEdXNlcgUPa1VzZXJHU3dvcEluR292AAAEC2dTd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEdXNlcgUPa1VzZXJHU3dvcEluR292BQpzd29wQW1vdW50BA5kaXNjb3VudFZhbHVlcwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFD2tEaXNjb3VudFZhbHVlcwIBLAQJZGlzY291bnRzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUKa0Rpc2NvdW50cwIBLAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAACQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAAAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAEJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAEDAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAgMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAQFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwADAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAEBQlmZWVTY2FsZTYBAl9BAAQCdDEFDWZ1dHVyZV9BX3RpbWUEAkExBQhmdXR1cmVfQQMJAGYCBQJ0MQUOYmxvY2tUaW1lc3RhbXAEAkEwBQlpbml0aWFsX0EEAnQwBQ5pbml0aWFsX0FfdGltZQMJAGYCBQJBMQUCQTAJAGQCBQJBMAkAaQIJAGgCCQBlAgUCQTEFAkEwCQBlAgUOYmxvY2tUaW1lc3RhbXAFAnQwCQBlAgUCdDEFAnQwCQBlAgUCQTAJAGkCCQBoAgkAZQIFAkEwBQJBMQkAZQIFDmJsb2NrVGltZXN0YW1wBQJ0MAkAZQIFAnQxBQJ0MAUCQTEBA194cAAKAQ1hc3NldEJhbGFuY2VzAgNhY2MHYXNzZXRJZAkAzQgCBQNhY2MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQdhc3NldElkBQ1rQXNzZXRCYWxhbmNlAAAKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDWFzc2V0QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBB194cF9tZW0BAnhwBQJ4cAEHc3VtTGlzdAIDYWNjB2VsZW1lbnQJAGQCBQNhY2MFB2VsZW1lbnQBBWdldF9EAgJ4cANhbXAKAAFACQD8BwQFBHRoaXMCAUQJAMwIAgUCeHAJAMwIAgUDYW1wBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQBDmdldF9EX2ludGVybmFsAgJ4cANhbXAEAVMKAAIkbAUCeHAKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1bUxpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAgUBUwAAAAAEA0FubgkAaAIFA2FtcAUGbkNvaW5zBARBbm5TCQC5AgIJALYCAQUDQW5uCQC2AgEFAVMEBEFubjEJALYCAQkAZQIFA0FubgABCgEFRHByb2MCA2FjYwFpAwkAAAIIBQNhY2MCXzIGBQNhY2MEBURwcmV2CAUDYWNjAl8xCgEHRF9QUHJvYwIDRF9QAWkDCQBmAgUGbkNvaW5zBQFpCQC6AgIJALkCAgUDRF9QBQVEcHJldgkAuQICCQC2AgEJAJEDAgUCeHAFAWkJALYCAQUGbkNvaW5zBQNEX1AEA0RfUAoAAiRsBQZpdGVyMTAKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQVEcHJldgoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHRF9QUHJvYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQBRAkAvAIDCQC3AgIFBEFublMJALkCAgkAtgIBBQZuQ29pbnMFA0RfUAUFRHByZXYJALcCAgkAuQICBQRBbm4xBQVEcHJldgkAuQICCQC2AgEJAGQCBQZuQ29pbnMAAQUDRF9QAwkAvwICBQFEBQVEcHJldgMJAGcCAAEJAKADAQkAuAICBQFEBQVEcHJldgkAlAoCBQFEBgkAlAoCBQFEBwMJAGcCAAEJAKADAQkAuAICBQVEcHJldgUBRAkAlAoCBQFEBgkAlAoCBQFEBwQLJHQwNjQ2MTY1MjcKAAIkbAUGaXRlcjE1CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCCQC2AgEFAVMHCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVEcHJvYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAUQIBQskdDA2NDYxNjUyNwJfMQQIZmluaXNoZWQIBQskdDA2NDYxNjUyNwJfMgMJAAACBQhmaW5pc2hlZAcJAAIBCQCsAgICGmdldF9EKCkgbm90IGZpbmlzaGVkIHdpdGggCQCmAwEFAUQJAKADAQUBRAEHZ2V0RE1lbQICeHADYW1wCQEFZ2V0X0QCCQEHX3hwX21lbQEFAnhwBQNhbXABBGdldFkEAmluA291dAF4A3hwXwMJAQZhc3NlcnQBCQECIT0CBQJpbgUDb3V0CQACAQIJc2FtZSBjb2luAwkBBmFzc2VydAEDCQBnAgUDb3V0AAAJAGcCBQJpbgAABwkAAgECCmJlbG93IHplcm8DCQEGYXNzZXJ0AQMJAGYCBQZuQ29pbnMFA291dAkAZgIFBm5Db2lucwUCaW4HCQACAQINYWJvdmUgTl9DT0lOUwQDYW1wCQECX0EABAFECQEFZ2V0X0QCBQN4cF8FA2FtcAQDQW5uCQBoAgUDYW1wBQZuQ29pbnMKAQNTX2MCA2FjYwFpBAskdDA3MDk4NzExNQUDYWNjBAJTXwgFCyR0MDcwOTg3MTE1Al8xBAFjCAULJHQwNzA5ODcxMTUCXzIEAnhfAwkAAAIFAmluBQFpBQF4CQCRAwIFA3hwXwUBaQMDCQECIT0CBQFpBQNvdXQJAGYCBQZuQ29pbnMFAWkHCQCUCgIJAGQCBQJTXwUCeF8JALwCAwUBYwkAtgIBBQFECQC2AgEJAGgCBQJ4XwUGbkNvaW5zCQCUCgIFAlNfBQFjBAskdDA3MzIzNzM3OAoAAiRsBQZpdGVyMTAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAkAtgIBBQFECgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNTX2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEAlNfCAULJHQwNzMyMzczNzgCXzEEAmNfCAULJHQwNzMyMzczNzgCXzIEAWMJALwCAwUCY18JALYCAQUBRAkAtgIBCQBoAgUDQW5uBQZuQ29pbnMEAmJECQC2AgEJAGUCCQBkAgUCU18JAGkCBQFEBQNBbm4FAUQKAQZ5X3Byb2MCA2FjYwJfaQMJAAACCAUDYWNjAl8yBgUDYWNjBAZ5X3ByZXYIBQNhY2MCXzEEAXkJALoCAgkAtwICCQC5AgIFBnlfcHJldgUGeV9wcmV2BQFjCQC3AgIJALkCAgUEYmlnMgUGeV9wcmV2BQJiRAMJAL8CAgUBeQUGeV9wcmV2AwkAZwIAAQkAoAMBCQC4AgIFAXkFBnlfcHJldgkAlAoCBQF5BgkAlAoCBQF5BwMJAGcCAAEJAKADAQkAuAICBQZ5X3ByZXYFAXkJAJQKAgUBeQYJAJQKAgUBeQcECyR0MDc4NjA3OTI3CgACJGwFBml0ZXIxNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgkAtgIBBQFEBwoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGeV9wcm9jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQBAF5CAULJHQwNzg2MDc5MjcCXzEECGZpbmlzaGVkCAULJHQwNzg2MDc5MjcCXzIDCQAAAgUIZmluaXNoZWQHCQACAQkArAICAhlnZXRZKCkgbm90IGZpbmlzaGVkIHdpdGggCQCmAwEFAXkJAKADAQUBeQEHZ2V0X3lfRAQCQV8CaW4CeHABRAMJAQZhc3NlcnQBCQBnAgUCaW4AAAkAAgECDGkgYmVsb3cgemVybwMJAQZhc3NlcnQBCQBmAgUGbkNvaW5zBQJpbgkAAgECD2kgYWJvdmUgTl9DT0lOUwQDQW5uCQBoAgUCQV8FBm5Db2lucwoBA1NfYwIDYWNjAWkECyR0MDgzMDY4MzIzBQNhY2MEAlNfCAULJHQwODMwNjgzMjMCXzEEAWMIBQskdDA4MzA2ODMyMwJfMgQCeF8DAwkBAiE9AgUCaW4FAWkJAGYCBQZuQ29pbnMFAWkHCQCRAwIFAnhwBQFpAAADAwkAZgIFBm5Db2lucwUBaQkBAiE9AgUCaW4FAWkHCQCUCgIJAGQCBQJTXwUCeF8JALwCAwUBYwkAtgIBBQFECQC2AgEJAGgCBQJ4XwUGbkNvaW5zCQCUCgIFAlNfBQFjBAskdDA4NTQzODU5OAoAAiRsBQZpdGVyMTAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAkAtgIBBQFECgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNTX2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEAlNfCAULJHQwODU0Mzg1OTgCXzEEAmNfCAULJHQwODU0Mzg1OTgCXzIEAWMJALwCAwUCY18JALYCAQUBRAkAtgIBCQBoAgUDQW5uBQZuQ29pbnMEAmJECQC2AgEJAGUCCQBkAgUCU18JAGkCBQFEBQNBbm4FAUQKAQh5X0RfcHJvYwIDYWNjAWkDCQAAAggFA2FjYwJfMgYFA2FjYwQGeV9wcmV2CAUDYWNjAl8xBAF5CQC6AgIJALcCAgkAuQICBQZ5X3ByZXYFBnlfcHJldgUBYwkAtwICCQC5AgIFBGJpZzIFBnlfcHJldgUCYkQDCQC/AgIFAXkFBnlfcHJldgMJAGcCAAEJAKADAQkAuAICBQF5BQZ5X3ByZXYJAJQKAgUBeQYJAJQKAgUBeQcDCQBnAgABCQCgAwEJALgCAgUGeV9wcmV2BQF5CQCUCgIFAXkGCQCUCgIFAXkHBAskdDA5MDgxOTE1MAoAAiRsBQZpdGVyMTYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIJALYCAQUBRAcKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCHlfRF9wcm9jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQBAF5CAULJHQwOTA4MTkxNTACXzEECGZpbmlzaGVkCAULJHQwOTA4MTkxNTACXzIDCQAAAgUIZmluaXNoZWQHCQACAQkArAICAhxnZXRfeV9EKCkgbm90IGZpbmlzaGVkIHdpdGggCQCmAwEFAXkJAKADAQUBeQEUX2NhbGNXaXRoZHJhd09uZUNvaW4EAnhwDV90b2tlbl9hbW91bnQBaQZjYWxsZXIEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBBQZjYWxsZXIEA2FtcAkBAl9BAAQEX2ZlZQkAaQIJAGgCCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQZuQ29pbnMJAGgCAAQJAGUCBQZuQ29pbnMAAQQMdG90YWxfc3VwcGx5BQtzaGFyZVN1cHBseQQCRDAJAQVnZXRfRAIFAnhwBQNhbXAEAkQxCQBlAgUCRDAJAGsDBQ1fdG9rZW5fYW1vdW50BQJEMAUMdG90YWxfc3VwcGx5BAVuZXdfeQkBB2dldF95X0QEBQNhbXAFAWkFAnhwBQJEMQQEZHlfMAkAZQIJAJEDAgUCeHAFAWkFBW5ld195CgEPeHBfcmVkdWNlZF9wcm9jAgNhY2MEeHBfagQLJHQwOTc5MTk4MjAFA2FjYwQKeHBfcmVkdWNlZAgFCyR0MDk3OTE5ODIwAl8xBAVpbmRleAgFCyR0MDk3OTE5ODIwAl8yBAtkeF9leHBlY3RlZAMJAAACBQVpbmRleAUBaQkAZQIJAGsDBQR4cF9qBQJEMQUCRDAFBW5ld195CQBlAgUEeHBfagkAawMFBHhwX2oFAkQxBQJEMAkAlAoCCQDNCAIFCnhwX3JlZHVjZWQJAGUCBQR4cF9qCQBrAwUEX2ZlZQULZHhfZXhwZWN0ZWQFCWZlZVNjYWxlNgkAZAIFBWluZGV4AAEEDSR0MDEwMDgyMTAxNDYKAAIkbAUCeHAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ94cF9yZWR1Y2VkX3Byb2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoECnhwX3JlZHVjZWQIBQ0kdDAxMDA4MjEwMTQ2Al8xBAVpbmRleAgFDSR0MDEwMDgyMTAxNDYCXzIEDHhwX3JlZHVjZWRfaQkAkQMCBQp4cF9yZWR1Y2VkBQFpBAJkeQkAZQIJAGUCBQx4cF9yZWR1Y2VkX2kJAQdnZXRfeV9EBAUDYW1wBQFpBQp4cF9yZWR1Y2VkBQJEMQABCQCUCgIFAmR5CQBlAgUEZHlfMAUCZHkBDWdldFN0ckFzc2V0SWQBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJANgEAQUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQILTWF0Y2ggZXJyb3IBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFc3Rha2UHYXNzZXRJZAMFBXN0YWtlCQCUCgICDGxvY2tOZXV0cmlubwUSc3Rha2luZ1VTRE5BZGRyZXNzCQCUCgICDnVubG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MBEWNhbGNTdGFraW5nUGFyYW1zAwVzdGFrZQZhbW91bnQHYXNzZXRJZAMFBXN0YWtlBA0kdDAxMDcxMDEwNzc2CQEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgUFc3Rha2UFB2Fzc2V0SWQEBGNhbGwIBQ0kdDAxMDcxMDEwNzc2Al8xBAtzdGFraW5nQWRkcggFDSR0MDEwNzEwMTA3NzYCXzIJAJYKBAUEY2FsbAULc3Rha2luZ0FkZHIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHYXNzZXRJZAUGYW1vdW50BQNuaWwEDSR0MDEwODYyMTA5MjgJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDEwODYyMTA5MjgCXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTA4NjIxMDkyOAJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgkAzAgCBQZhbW91bnQJAMwIAgkA2AQBBQdhc3NldElkBQNuaWwFA25pbAEFc3Rha2UCBmFtb3VudA1hc3NldElkU3RyaW5nAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDWFzc2V0SWRTdHJpbmcEDSR0MDExMTE1MTEyMTcJARFjYWxjU3Rha2luZ1BhcmFtcwMGBQZhbW91bnQJANkEAQUNYXNzZXRJZFN0cmluZwQEY2FsbAgFDSR0MDExMTE1MTEyMTcCXzEEBGFkZHIIBQ0kdDAxMTExNTExMjE3Al8yBAZwYXJhbXMIBQ0kdDAxMTExNTExMjE3Al8zBAhwYXltZW50cwgFDSR0MDExMTE1MTEyMTcCXzQJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwAAAQd1bnN0YWtlAgZhbW91bnQNYXNzZXRJZFN0cmluZwMJAQ9jb250YWluc0VsZW1lbnQCBQ1zdGFraW5nQXNzZXRzBQ1hc3NldElkU3RyaW5nBA0kdDAxMTQwMjExNTA1CQERY2FsY1N0YWtpbmdQYXJhbXMDBwUGYW1vdW50CQDZBAEFDWFzc2V0SWRTdHJpbmcEBGNhbGwIBQ0kdDAxMTQwMjExNTA1Al8xBARhZGRyCAUNJHQwMTE0MDIxMTUwNQJfMgQGcGFyYW1zCAUNJHQwMTE0MDIxMTUwNQJfMwQIcGF5bWVudHMIBQ0kdDAxMTQwMjExNTA1Al80CQD8BwQFBGFkZHIFBGNhbGwFBnBhcmFtcwUIcGF5bWVudHMAAAEMc3Rha2VkQW1vdW50AQdhc3NldElkBBZzdGFrZWRBbW91bnRDYWxjdWxhdGVkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEA2FJZAUHJG1hdGNoMAMJAAACBQNhSWQFBFVTRE4JAJoIAgUSc3Rha2luZ1VTRE5BZGRyZXNzCQCsAgIJAKwCAgkArAICAgxycGRfYmFsYW5jZV8JANgEAQUDYUlkAgFfCQClCAEFBHRoaXMAAAMJAAECBQckbWF0Y2gwAgRVbml0AAAJAAIBAgtNYXRjaCBlcnJvcgQHJG1hdGNoMAUWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkAAAEPY2hlY2tTdXNwaWNpb3VzAAQQY29udHJhY3RCYWxhbmNlcwkBA194cAAKAQxjaGVja0JhbGFuY2UCA2FjYwdhc3NldElkBA0kdDAxMjExNjEyMTQxBQNhY2MECnN1c3BpY2lvdXMIBQ0kdDAxMjExNjEyMTQxAl8xBAFpCAUNJHQwMTIxMTYxMjE0MQJfMgMFCnN1c3BpY2lvdXMJAJQKAgUKc3VzcGljaW91cwUBaQQIYUJhbGFuY2UJAGQCCQDwBwIFBHRoaXMJANkEAQUHYXNzZXRJZAkBDHN0YWtlZEFtb3VudAEJANkEAQUHYXNzZXRJZAMJAGYCCQCRAwIFEGNvbnRyYWN0QmFsYW5jZXMFAWkFCGFCYWxhbmNlCQCUCgIGBQFpCQCUCgIHCQBkAgUBaQABCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBwAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxjaGVja0JhbGFuY2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoBEXN1c3BlbmRTdXNwaWNpb3VzAQFpCQEHc3VzcGVuZAEJAKwCAgIdU3VzcGljaW91cyBzdGF0ZSB3aXRoIGFzc2V0OiAJAJEDAgUIYXNzZXRJZHMFAWkBDnJldHVyblBheW1lbnRzAgZjYWxsZXIIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHcGF5bWVudAkAzQgCBQNhY2MJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcggFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkCgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1wYXJzZVBheW1lbnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKARJjaGVja0RBcHBUaHJlc2hvbGQBC25ld0JhbGFuY2VzBBFkQXBwVGhyZXNob2xkQ29lZgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMFEmtEQXBwVGhyZXNob2xkQ29lZgIYTm8gZEFwcFRocmVzaG9sZENvZWYga2V5BA50aHJlc2hvbGRTY2FsZQCQTgQKbWF4QmFsYW5jZQkAlgMBBQtuZXdCYWxhbmNlcwQKbWluQmFsYW5jZQkAlwMBBQtuZXdCYWxhbmNlcwQFcmF0aW8JAGsDBQptYXhCYWxhbmNlBQ50aHJlc2hvbGRTY2FsZQUKbWluQmFsYW5jZQMJAGYCBQVyYXRpbwkAaAIFEWRBcHBUaHJlc2hvbGRDb2VmBQ50aHJlc2hvbGRTY2FsZQkAAgECOE5ldyBiYWxhbmNlIGluIGFzc2V0cyBvZiB0aGUgREFwcCBpcyBsZXNzIHRoYW4gdGhyZXNob2xkBwEKY2hlY2tDb2lucwEIYXNzZXRJZHMEBWNvaW5zCQC1CQIFCGFzc2V0SWRzAgEsAwkAZgIJAJADAQUFY29pbnMACgkAAgECIFRvIG1hbnkgY29pbnMsIG1heCBjb2lucyBzaXplIDEwCgEJY2hlY2tDb2luAgVlcnJvcgdhc3NldElkBAVhc3NldAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDZBAEFB2Fzc2V0SWQJAKwCAgISZnJvbUJhc2U1OFN0cmluZzogBQdhc3NldElkBAhkZWNpbWFscwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQVhc3NldAkArAICAgthc3NldEluZm86IAUHYXNzZXRJZAhkZWNpbWFscwMJAQIhPQIFCGRlY2ltYWxzBQhERUNJTUFMUwkAAgECDndyb25nIGRlY2ltYWxzBwoAAiRsBQVjb2lucwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQljaGVja0NvaW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoUA21zZwEBRAICeHADYW1wBAFECQEOZ2V0X0RfaW50ZXJuYWwCBQJ4cAUDYW1wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQICAUQFAUQFA25pbAUBRANtc2cBBGluaXQDCGFzc2V0SWRzAl9BEl9kQXBwVGhyZXNob2xkQ29lZgMJAQEhAQkAnggBBQR0aGlzCQACAQITQWxyZWFkeSBpbml0aWFsaXplZAMJAGcCAAAFAl9BCQACAQIUQW1wIG11c3QgYmUgbXVzdCA+IDADCQBnAgAABRJfZEFwcFRocmVzaG9sZENvZWYJAAIBAh9kQXBwIFRocmVzaG9sZCBDb2VmIG11c3QgYmUgPiAwBAlzaGFyZU5hbWUCC3NfTXVsdGlfVVNEBBBzaGFyZURlc2NyaXB0aW9uCQCsAgICQlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciBNdWx0aVN0YWJsZSBVU0QgcG9vbCBhdCBhZGRyZXNzIAkApQgBBQR0aGlzBAppc3N1ZVRva2VuCQDCCAUFCXNoYXJlTmFtZQUQc2hhcmVEZXNjcmlwdGlvbgAAAAYGBAd0b2tlbklkCQC4CAEFCmlzc3VlVG9rZW4DCQEKY2hlY2tDb2lucwEFCGFzc2V0SWRzCQEFdGhyb3cACQDMCAIJAQtTdHJpbmdFbnRyeQIFCGtWZXJzaW9uBQd2ZXJzaW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tBc3NldHMFCGFzc2V0SWRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFAl9BCQDMCAIJAQxJbnRlZ2VyRW50cnkCAghmdXR1cmVfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQIFBGtGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQINYmFzZV9mZWVfZmxhdAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rU2hhcmVBc3NldElkCQDYBAEFB3Rva2VuSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5AAAJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtEQXBwVGhyZXNob2xkQ29lZgUSX2RBcHBUaHJlc2hvbGRDb2VmCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBgkAzAgCBQppc3N1ZVRva2VuBQNuaWwDbXNnAQxhZGRMaXF1aWRpdHkDDW1pbk1pbnRBbW91bnQMc3Rha2VGYXJtaW5nCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUABANhbXAJAQJfQQAEAnhwCQEDX3hwAAQCRDADCQAAAgULc2hhcmVTdXBwbHkAAAAACQEHZ2V0RE1lbQIFAnhwBQNhbXAEDSR0MDE1MzQ5MTU2MDQDAwkAZgIFCGxvY2tUeXBlAAAJAAACCAkAkQMCCAUDbXNnCHBheW1lbnRzCQBlAgkAkAMBCAUDbXNnCHBheW1lbnRzAAEHYXNzZXRJZAUEdW5pdAcJAJQKAgkA0QgCCAUDbXNnCHBheW1lbnRzCQBlAgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAMwIAgkAkQMCCAUDbXNnCHBheW1lbnRzCQBlAgkAkAMBCAUDbXNnCHBheW1lbnRzAAEFA25pbAkAlAoCCAUDbXNnCHBheW1lbnRzBQNuaWwECHBheW1lbnRzCAUNJHQwMTUzNDkxNTYwNAJfMQQHbG9ja0ZlZQgFDSR0MDE1MzQ5MTU2MDQCXzIEDHBheW1lbnRzU2l6ZQkAkAMBBQhwYXltZW50cwoBDXZhbGlkUGF5bWVudHMBAW4DCQBmAgUMcGF5bWVudHNTaXplBQZuQ29pbnMJAAIBCQCsAgICEHBheW1lbnRzIHNpemUgPiAJAKQDAQUGbkNvaW5zAwkAZgIAAQUMcGF5bWVudHNTaXplCQACAQIRcGF5bWVudHMgc2l6ZSA8IDEDAwkAAAIFC3NoYXJlU3VwcGx5AAAJAQIhPQIFBm5Db2lucwUMcGF5bWVudHNTaXplBwkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMKAQxwYXltYW50VmFsaWQCA2FjYwdwYXltZW50AwkBD2NvbnRhaW5zRWxlbWVudAIFCGFzc2V0SWRzCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQGCQACAQIYSW52YWxpZCBhc3NldCBpbiBwYXltZW50CgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHBheW1hbnRWYWxpZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAQEhAQkBDXZhbGlkUGF5bWVudHMBBQxwYXltZW50c1NpemUJAQV0aHJvdwAECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyBQhwYXltZW50cwoBDXBhcnNlUGF5bWVudHMCA2FjYwdhc3NldElkBA0kdDAxNjQ3NDE2NTAwBQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMTY0NzQxNjUwMAJfMQQBaQgFDSR0MDE2NDc0MTY1MDACXzIKAQxwYXJzZVBheW1lbnQCCm5ld0JhbGFuY2UHcGF5bWVudAMJAAACCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQFB2Fzc2V0SWQJAGQCBQpuZXdCYWxhbmNlCAUHcGF5bWVudAZhbW91bnQFCm5ld0JhbGFuY2UECW5ld0JhbGFjZQoAAiRsBQhwYXltZW50cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJEDAgUCeHAFAWkKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHBhcnNlUGF5bWVudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAlAoCCQDNCAIFC25ld0JhbGFuY2VzBQluZXdCYWxhY2UJAGQCBQFpAAEEDSR0MDE2ODUwMTY5MTcKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1wYXJzZVBheW1lbnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtuZXdCYWxhbmNlcwgFDSR0MDE2ODUwMTY5MTcCXzEEAWsIBQ0kdDAxNjg1MDE2OTE3Al8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkBBmFzc2VydAEJAGYCBQJEMQUCRDAJAAIBAgdEMSA+IEQwBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFA21zZwZjYWxsZXIKARFjYWxjU2NyaXB0QWN0aW9ucwIDYWNjCm5ld0JhbGFuY2UEDSR0MDE3MjM3MTcyNzgFA2FjYwQLaW52QmFsYW5jZXMIBQ0kdDAxNzIzNzE3Mjc4Al8xBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTcyMzcxNzI3OAJfMgQBaQgFDSR0MDE3MjM3MTcyNzgCXzMDCQBmAgULc2hhcmVTdXBwbHkAAAQEX2ZlZQkAaQIJAGgCCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQZuQ29pbnMJAGgCAAQJAGUCBQZuQ29pbnMAAQQEZmVlcwQMaWRlYWxCYWxhbmNlCQBrAwUCRDEJAJEDAgUCeHAFAWkFAkQwBApkaWZmZXJlbmNlAwkAZgIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFDGlkZWFsQmFsYW5jZQkAawMFBF9mZWUFCmRpZmZlcmVuY2UFCWZlZVNjYWxlNgQOZ292ZXJuYW5jZUZlZXMJAGsDBQRmZWVzBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYEDGZpbmFsQmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBANwbXQJAGUCBQpuZXdCYWxhbmNlCQCRAwIFAnhwBQFpBAZscEZlZXMJAGUCBQRmZWVzBQ5nb3Zlcm5hbmNlRmVlcwQDaW52AwkAZgIFA3BtdAAACQEFc3Rha2UCCQBlAgUDcG10BQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpCQEHdW5zdGFrZQIFBGZlZXMJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAlQoDCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UFDGZpbmFsQmFsYW5jZQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBANpbnYJAQVzdGFrZQIFCm5ld0JhbGFuY2UJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYJAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUKbmV3QmFsYW5jZQkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQpuZXdCYWxhbmNlCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAxODk4MzE5MDcxCgACJGwFC25ld0JhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARFjYWxjU2NyaXB0QWN0aW9ucwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLaW52QmFsYW5jZXMIBQ0kdDAxODk4MzE5MDcxAl8xBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTg5ODMxOTA3MQJfMgQCRDIJAQdnZXRETWVtAgULaW52QmFsYW5jZXMFA2FtcAQLbWludF9hbW91bnQDCQAAAgULc2hhcmVTdXBwbHkAAAUCRDEJAGsDBQtzaGFyZVN1cHBseQkAZQIFAkQyBQJEMAUCRDADCQEGYXNzZXJ0AQkAZwIFC21pbnRfYW1vdW50BQ1taW5NaW50QW1vdW50CQACAQIUU2xpcHBhZ2Ugc2NyZXdlZCB5b3UDBQxzdGFrZUZhcm1pbmcEAnJlCQD8BwQFBHRoaXMCDHJlaXNzdWVTaGFyZQkAzAgCBQttaW50X2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUCcmUFAnJlBAFzCQD8BwQFDmZhcm1pbmdBZGRyZXNzAg9sb2NrU2hhcmVUb2tlbnMJAMwIAgkApQgBBQR0aGlzCQDMCAIFCGxvY2tUeXBlBQNuaWwJAM4IAgkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQttaW50X2Ftb3VudAUDbmlsBQdsb2NrRmVlAwkAAAIFAXMFAXMJAM0IAgUNc2NyaXB0QWN0aW9ucwkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgULc2hhcmVTdXBwbHkFC21pbnRfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnBmNhbGxlcgULbWludF9hbW91bnQFDHNoYXJlQXNzZXRJZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQFA25pbANtc2cBDmNhbGNNaW50QW1vdW50AgtuZXdCYWxhbmNlcwR1c2VyBANhbXAJAQJfQQAEAnhwCQEDX3hwAAQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAMJAAACBQtzaGFyZVN1cHBseQAACQCUCgIFA25pbAUCRDEEAkQwCQEHZ2V0RE1lbQIFAnhwBQNhbXAEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBBQR1c2VyCgEPY2FsY0ludkJhbGFuY2VzAgNhY2MKbmV3QmFsYW5jZQQNJHQwMjAzMjEyMDM0NwUDYWNjBAtpbnZCYWxhbmNlcwgFDSR0MDIwMzIxMjAzNDcCXzEEAWkIBQ0kdDAyMDMyMTIwMzQ3Al8yBARfZmVlCQBpAgkAaAIJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFBm5Db2lucwkAaAIABAkAZQIFBm5Db2lucwABBARmZWVzBAxpZGVhbEJhbGFuY2UJAGsDBQJEMQkAkQMCBQJ4cAUBaQUCRDAECmRpZmZlcmVuY2UDCQBmAgUMaWRlYWxCYWxhbmNlBQpuZXdCYWxhbmNlCQBlAgUMaWRlYWxCYWxhbmNlBQpuZXdCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUMaWRlYWxCYWxhbmNlCQBrAwUEX2ZlZQUKZGlmZmVyZW5jZQUJZmVlU2NhbGU2BBBpbnZhcmlhbnRCYWxhbmNlCQBlAgUKbmV3QmFsYW5jZQUEZmVlcwkAlAoCCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQBkAgUBaQABBA0kdDAyMDk0OTIxMDE5CgACJGwFC25ld0JhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY2FsY0ludkJhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKBAtpbnZCYWxhbmNlcwgFDSR0MDIwOTQ5MjEwMTkCXzEEAWsIBQ0kdDAyMDk0OTIxMDE5Al8yBAJEMgkBB2dldERNZW0CBQtpbnZCYWxhbmNlcwUDYW1wBAptaW50QW1vdW50CQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwCQCUCgIFA25pbAUKbWludEFtb3VudANtc2cBDHJlaXNzdWVTaGFyZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFA21zZwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUGYW1vdW50BgUDbmlsA21zZwEFZ2V0RHkECWFzc2V0RnJvbQdhc3NldFRvAmR4C3VzZXJBZGRyZXNzBAJ4cAkBA194cAAECWZyb21JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQlhc3NldEZyb20CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHYXNzZXRUbwIRdW5rbm93biB0b2tlbiBvdXQEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEAmR5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEJAQdBZGRyZXNzAQkA2QQBBQt1c2VyQWRkcmVzcwQEX2ZlZQkAawMJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFAmR5BQlmZWVTY2FsZTYJAJQKAgUDbmlsCQCUCgIJAGUCBQJkeQUEX2ZlZQUEX2ZlZQNtc2cBCGV4Y2hhbmdlAgh0b2tlbk91dAZtaW5fZHkJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAQHdG9rZW5JbgkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQCZHgIBQdwYXltZW50BmFtb3VudAQJZnJvbUluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFB3Rva2VuSW4CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAJ4cAkBA194cAAEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEA19keQkAZQIJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQF5AAEEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCAUDbXNnDG9yaWdpbkNhbGxlcgQEX2ZlZQkAawMFA19keQkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAJkeQkAZQIFA19keQUEX2ZlZQQOZ292ZXJuYW5jZUZlZXMJAGsDBQRfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYDCQEGYXNzZXJ0AQkAZwIFAmR5BQZtaW5fZHkJAAIBAi5FeGNoYW5nZSByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyMzA2MDIzMDg2BQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjMwNjAyMzA4NgJfMQQBaQgFDSR0MDIzMDYwMjMwODYCXzIDCQAAAgUBaQUJZnJvbUluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGQCBQx0b2tlbkJhbGFuY2UFAmR4CQBkAgUBaQABAwkAAAIFAWkFB3RvSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUDX2R5CQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjMzMzcyMzM5OAoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLbmV3QmFsYW5jZXMIBQ0kdDAyMzMzNzIzMzk4Al8xBAFpCAUNJHQwMjMzMzcyMzM5OAJfMgMJARJjaGVja0RBcHBUaHJlc2hvbGQBBQtuZXdCYWxhbmNlcwkBBXRocm93AAQBcwkBBXN0YWtlAggFB3BheW1lbnQGYW1vdW50CQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQDCQAAAgUBcwUBcwQCdXMJAQd1bnN0YWtlAgUDX2R5BQh0b2tlbk91dAMJAAACBQJ1cwUCdXMEBmxwRmVlcwkAZQIFBF9mZWUFDmdvdmVybmFuY2VGZWVzBAdhaXJkcm9wAwkAZgIFBmxwRmVlcwAACQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCB2FpckRyb3AFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdG9rZW5PdXRCNTgFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFB3Rva2VuSW4FDWtBc3NldEJhbGFuY2UFAXgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIdG9rZW5PdXQFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQNfZHkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFA21zZwZjYWxsZXIFAmR5BQt0b2tlbk91dEI1OAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFDmdvdmVybmFuY2VGZWVzBQt0b2tlbk91dEI1OAUDbmlsCQDMCAIFAmR5CQDMCAIFC3Rva2VuT3V0QjU4BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQh3aXRoZHJhdwEKbWluQW1vdW50cwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQJcG10QW1vdW50CAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50BApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbgQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwxvcmlnaW5DYWxsZXIIBQNtc2cIcGF5bWVudHMKARFjYWxjU2NyaXB0QWN0aW9ucwIDYWNjB2JhbGFuY2UEDSR0MDI0Njg5MjQ3MTcFA2FjYwQNc2NyaXB0QWN0aW9ucwgFDSR0MDI0Njg5MjQ3MTcCXzEEAWkIBQ0kdDAyNDY4OTI0NzE3Al8yBAd3QW1vdW50CQBrAwUHYmFsYW5jZQUJcG10QW1vdW50BQtzaGFyZVN1cHBseQMJAQZhc3NlcnQBCQBnAgUHd0Ftb3VudAkAkQMCBQptaW5BbW91bnRzBQFpCQACAQIwV2l0aGRyYXdhbCByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkBAJ1cwkBB3Vuc3Rha2UCBQd3QW1vdW50CQCRAwIFCGFzc2V0SWRzBQFpAwkAAAIFAnVzBQJ1cwkAlAoCCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUBaQUNa0Fzc2V0QmFsYW5jZQkAZQIFB2JhbGFuY2UFB3dBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFA21zZwxvcmlnaW5DYWxsZXIFB3dBbW91bnQJANkEAQkAkQMCBQhhc3NldElkcwUBaQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAyNTIwNzI1Mjc1CgACJGwJAQNfeHAACgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQERY2FsY1NjcmlwdEFjdGlvbnMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoEDXNjcmlwdEFjdGlvbnMIBQ0kdDAyNTIwNzI1Mjc1Al8xBAFpCAUNJHQwMjUyMDcyNTI3NQJfMgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQlwbXRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBlAgULc2hhcmVTdXBwbHkFCXBtdEFtb3VudAUDbmlsA21zZwESd2l0aGRyYXdXaXRoVW5sb2NrAgptaW5BbW91bnRzDHVubG9ja0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAGcCAAAFDHVubG9ja0Ftb3VudAkAAgECHlVubG9jayBhbW91bnQgbXVzdCBiZSBwb3NpdGl2ZQQKc3VzcGljaW91cwkBD2NoZWNrU3VzcGljaW91cwADCAUKc3VzcGljaW91cwJfMQkAzggCCQERc3VzcGVuZFN1c3BpY2lvdXMBCAUKc3VzcGljaW91cwJfMgkBDnJldHVyblBheW1lbnRzAggFA21zZwZjYWxsZXIIBQNtc2cIcGF5bWVudHMECXBtdEFtb3VudAMJAGYCCQCQAwEIBQNtc2cIcGF5bWVudHMAAAMJAQIhPQIJAJADAQgFA21zZwhwYXltZW50cwABCQACAQITc2l6ZShwYXltZW50cykgIT0gMQQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQAAAQGdW5sb2NrCQD8BwQFDmZhcm1pbmdBZGRyZXNzAhN3aXRoZHJhd1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAwkAAAIFBnVubG9jawUGdW5sb2NrBA53aXRoZHJhd0Ftb3VudAkAZAIFCXBtdEFtb3VudAUMdW5sb2NrQW1vdW50BANpbnYJAPwHBAUEdGhpcwIId2l0aGRyYXcJAMwIAgUKbWluQW1vdW50cwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFDndpdGhkcmF3QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBE2NhbGNXaXRoZHJhd09uZUNvaW4DC3Rva2VuQW1vdW50CHRva2VuT3V0BHVzZXIDCQBnAgAABQt0b2tlbkFtb3VudAkAAgECF0Ftb3VudCBtdXN0IGJlIHBvc2l0aXZlBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAkAlAoCBQNuaWwICQEUX2NhbGNXaXRoZHJhd09uZUNvaW4ECQEDX3hwAAULdG9rZW5BbW91bnQFAWkJAQdBZGRyZXNzAQkA2QQBBQR1c2VyAl8xA21zZwEPd2l0aGRyYXdPbmVDb2luAgh0b2tlbk91dAltaW5BbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cMb3JpZ2luQ2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAZhbW91bnQECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUKcG10QXNzZXRJZAUMc2hhcmVBc3NldElkCQACAQINdW5rbm93biB0b2tlbgQIb3V0SW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQCeHAJAQNfeHAABA0kdDAyNzMwNzI3Mzg5CQEUX2NhbGNXaXRoZHJhd09uZUNvaW4EBQJ4cAUJcG10QW1vdW50BQhvdXRJbmRleAgFA21zZwxvcmlnaW5DYWxsZXIEAmR5CAUNJHQwMjczMDcyNzM4OQJfMQQGZHlfZmVlCAUNJHQwMjczMDcyNzM4OQJfMgMJAQZhc3NlcnQBCQBnAgUCZHkFCW1pbkFtb3VudAkAAgECGE5vdCBlbm91Z2ggY29pbnMgcmVtb3ZlZAQOZ292ZXJuYW5jZUZlZXMJAGsDBQZkeV9mZWUFDWZlZUdvdmVybmFuY2UFCWZlZVNjYWxlNgQKZHlfYW5kX2ZlZQkAZAIFAmR5BQZkeV9mZWUKAQ9tYWtlTmV3QmFsYW5jZXMCA2FjYwx0b2tlbkJhbGFuY2UEDSR0MDI3NjQ3Mjc2NzMFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAyNzY0NzI3NjczAl8xBAFpCAUNJHQwMjc2NDcyNzY3MwJfMgMJAAACBQFpBQhvdXRJbmRleAkAlAoCCQDNCAIFC25ld0JhbGFuY2VzCQBlAgUMdG9rZW5CYWxhbmNlBQpkeV9hbmRfZmVlCQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjc4NDAyNzkwMQoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgQLbmV3QmFsYW5jZXMIBQ0kdDAyNzg0MDI3OTAxAl8xBAF2CAUNJHQwMjc4NDAyNzkwMQJfMgMJARJjaGVja0RBcHBUaHJlc2hvbGQBBQtuZXdCYWxhbmNlcwkBBXRocm93AAQCdXMJAQd1bnN0YWtlAgUKZHlfYW5kX2ZlZQUIdG9rZW5PdXQDCQAAAgUCdXMFAnVzBAZscEZlZXMJAGUCBQZkeV9mZWUFDmdvdmVybmFuY2VGZWVzBAdhaXJkcm9wAwkAZgIFBmxwRmVlcwAACQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCB2FpckRyb3AFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdG9rZW5PdXRCNTgFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUDbXNnDG9yaWdpbkNhbGxlcgUCZHkFC3Rva2VuT3V0QjU4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFCG91dEluZGV4BQ1rQXNzZXRCYWxhbmNlCQBlAgkAkQMCBQJ4cAUIb3V0SW5kZXgFCmR5X2FuZF9mZWUJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFCXBtdEFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFDmdvdmVybmFuY2VGZWVzBQt0b2tlbk91dEI1OAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBQtzaGFyZVN1cHBseQUJcG10QW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnARl3aXRoZHJhd09uZUNvaW5XaXRoVW5sb2NrAwh0b2tlbk91dAltaW5BbW91bnQMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZwIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50AwkAZgIJAJADAQgFA21zZwhwYXltZW50cwAAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbggJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAAABAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEA2ludgkA/AcEBQR0aGlzAg93aXRoZHJhd09uZUNvaW4JAMwIAgUIdG9rZW5PdXQJAMwIAgUJbWluQW1vdW50BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEBQQAJAJQKAgUDbmlsCQECX0EAA21zZwEPZ2V0VmlydHVhbFByaWNlAAQBRAkBBWdldF9EAgkBA194cAAJAQJfQQAJAJQKAgUDbmlsCQBrAwUBRAUJUFJFQ0lTSU9OBQtzaGFyZVN1cHBseQNtc2cBD2NhbGNUb2tlbkFtb3VudAIHYW1vdW50cwdkZXBvc2l0BANhbXAJAQJfQQAECGJhbGFuY2VzCQEDX3hwAAQCRDAJAQdnZXRETWVtAgUIYmFsYW5jZXMFA2FtcAoBD2NhbGNOZXdCYWxhbmNlcwIDYWNjB2JhbGFuY2UEDSR0MDI5OTE4Mjk5NDQFA2FjYwQLbmV3QmFsYW5jZXMIBQ0kdDAyOTkxODI5OTQ0Al8xBAFpCAUNJHQwMjk5MTgyOTk0NAJfMgQKbmV3QmFsYW5jZQkAZAIFB2JhbGFuY2UDBQdkZXBvc2l0CQCRAwIFB2Ftb3VudHMFAWkJAQEtAQkAkQMCBQdhbW91bnRzBQFpCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFCm5ld0JhbGFuY2UJAGQCBQFpAAEEC25ld0JhbGFuY2VzCAoAAiRsBQhiYWxhbmNlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD2NhbGNOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIIBQNtc2cGY2FsbGVyBQ9tb25leUJveEFkZHJlc3MJAAIBAiZPbmx5IHRoZSB3YWxsZXQgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQIYmFsYW5jZXMJAQNfeHAACgEOdGFrZUV4dHJhRnVuZHMCA2FjYwdhc3NldElkBA0kdDAzMjI4NjMyMzA0BQNhY2MEA3N1bQgFDSR0MDMyMjg2MzIzMDQCXzEEAWkIBQ0kdDAzMjI4NjMyMzA0Al8yBAh0b2tlbkI1OAkA2QQBBQdhc3NldElkBAhyQmFsYW5jZQkAZAIJAPAHAgUEdGhpcwUIdG9rZW5CNTgJAQxzdGFrZWRBbW91bnQBBQh0b2tlbkI1OAQMZW5yb2xsQW1vdW50CQBlAgUIckJhbGFuY2UJAJEDAgUIYmFsYW5jZXMFAWkDCQBmAgAABQxlbnJvbGxBbW91bnQJAQdzdXNwZW5kAQkArAICAiBFbnJvbGwgYW1vdW50IG5lZ2F0aXZlIGZvciBhc3NldAUHYXNzZXRJZAQHYWlyZHJvcAMJAGYCBQxlbnJvbGxBbW91bnQAAAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAgdhaXJEcm9wBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHRva2VuQjU4BQxlbnJvbGxBbW91bnQFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJQKAgkAZAIFA3N1bQUMZW5yb2xsQW1vdW50CQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAFrCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEOdGFrZUV4dHJhRnVuZHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoDCQAAAggFAWsCXzEAAAkAAgECEE5vIG1vbmV5IHRvIHRha2UFA25pbAECdHgBBnZlcmlmeQAEE211bHRpU2lnbmVkQnlBZG1pbnMEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAQTY2FsbFRha2VJbnRvQWNjb3VudAMJAAACCAUDaW52BGRBcHAFBHRoaXMJAAACCAUDaW52CGZ1bmN0aW9uAhl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzBwQNc2lnbmVkQnlBZG1pbgMDAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkyBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkzBgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAURYWRtaW5QdWJLZXlJbnZva2UDAwUTY2FsbFRha2VJbnRvQWNjb3VudAUNc2lnbmVkQnlBZG1pbgcGBRNtdWx0aVNpZ25lZEJ5QWRtaW5zBRNtdWx0aVNpZ25lZEJ5QWRtaW5z4QUuPg==", "height": 2288099, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Aykfwr5jGhNU1JhkCPYo8TqJ3CeJcoZe7MeXSiyMnhgb Next: 4q3Vp3qM3eNq4RPCGQm1hT9GtXi47KZS539WZp4kZnkL Diff:
OldNewDifferences
9595
9696 let U = Address(G(E))
9797
98-let V = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
98+let V = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
9999
100100 let W = [toBase58String(V)]
101101
736736 let bV = if ((Z == 0))
737737 then 0
738738 else bq(aW, ba)
739- let dj = if ((size(da.payments) > ai))
739+ let dj = if (if ((di > 0))
740+ then (da.payments[(size(da.payments) - 1)].assetId == unit)
741+ else false)
740742 then $Tuple2(removeByIndex(da.payments, (size(da.payments) - 1)), [da.payments[(size(da.payments) - 1)]])
741743 else $Tuple2(da.payments, nil)
742744 let cx = dj._1
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
98-let V = base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
98+let V = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS'
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 dj = if ((size(da.payments) > ai))
739+ let dj = if (if ((di > 0))
740+ then (da.payments[(size(da.payments) - 1)].assetId == unit)
741+ else false)
740742 then $Tuple2(removeByIndex(da.payments, (size(da.payments) - 1)), [da.payments[(size(da.payments) - 1)]])
741743 else $Tuple2(da.payments, nil)
742744 let cx = dj._1
743745 let dk = dj._2
744746 let dl = size(cx)
745747 func dm (dn) = if ((dl > ai))
746748 then throw(("payments size > " + toString(ai)))
747749 else if ((1 > dl))
748750 then throw("payments size < 1")
749751 else if (if ((Z == 0))
750752 then (ai != dl)
751753 else false)
752754 then throw("initial deposit requires all coins")
753755 else {
754756 func do (aM,cM) = if (containsElement(ah, ci(cM.assetId)))
755757 then true
756758 else throw("Invalid asset in payment")
757759
758760 let aO = cx
759761 let aP = size(aO)
760762 let aQ = false
761763 func aR (aS,aT) = if ((aT >= aP))
762764 then aS
763765 else do(aS, aO[aT])
764766
765767 func aU (aS,aT) = if ((aT >= aP))
766768 then aS
767769 else throw("List size exceeds 10")
768770
769771 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
770772 }
771773
772774 if (!(dm(dl)))
773775 then throw()
774776 else {
775777 let cH = cD()
776778 if (cH._1)
777779 then (cJ(cH._2) ++ cK(da.caller, cx))
778780 else {
779781 func cL (aM,aN) = {
780782 let dp = aM
781783 let cO = dp._1
782784 let ao = dp._2
783785 func dq (dr,cM) = if ((ci(cM.assetId) == aN))
784786 then (dr + cM.amount)
785787 else dr
786788
787789 let ds = {
788790 let aO = cx
789791 let aP = size(aO)
790792 let aQ = aW[ao]
791793 func aR (aS,aT) = if ((aT >= aP))
792794 then aS
793795 else dq(aS, aO[aT])
794796
795797 func aU (aS,aT) = if ((aT >= aP))
796798 then aS
797799 else throw("List size exceeds 10")
798800
799801 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
800802 }
801803 $Tuple2((cO :+ ds), (ao + 1))
802804 }
803805
804806 let dt = {
805807 let aO = ah
806808 let aP = size(aO)
807809 let aQ = $Tuple2(nil, 0)
808810 func aR (aS,aT) = if ((aT >= aP))
809811 then aS
810812 else cL(aS, aO[aT])
811813
812814 func aU (aS,aT) = if ((aT >= aP))
813815 then aS
814816 else throw("List size exceeds 10")
815817
816818 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
817819 }
818820 let cO = dt._1
819821 let du = dt._2
820822 if (cN(cO))
821823 then throw()
822824 else {
823825 let bW = bq(cO, ba)
824826 if (av((bW > bV)))
825827 then throw("D1 > D0")
826828 else {
827829 let bS = ax(da.caller)
828830 func dv (aM,dr) = {
829831 let dw = aM
830832 let dx = dw._1
831833 let dy = dw._2
832834 let ao = dw._3
833835 if ((Z > 0))
834836 then {
835837 let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
836838 let dz = {
837839 let dA = fraction(bW, aW[ao], bV)
838840 let dB = if ((dA > dr))
839841 then (dA - dr)
840842 else (dr - dA)
841843 fraction(bT, dB, aa)
842844 }
843845 let dC = fraction(dz, ac, aa)
844846 let dD = (dr - dz)
845847 let dE = (dr - dz)
846848 let dF = (dr - aW[ao])
847849 let dG = (dz - dC)
848850 let dH = if ((dF > 0))
849851 then cm((dF - dz), ah[ao])
850852 else cy(dz, ah[ao])
851853 if ((dH == dH))
852854 then {
853855 let dI = if ((dG > 0))
854856 then invoke(U, "airDrop", nil, [AttachedPayment(fromBase58String(ah[ao]), dG)])
855857 else 0
856858 if ((dI == dI))
857859 then $Tuple3((dx :+ dE), (dy ++ [ScriptTransfer(P, dC, fromBase58String(ah[ao])), IntegerEntry((ah[ao] + i), dD)]), (ao + 1))
858860 else throw("Strict value is not equal to itself.")
859861 }
860862 else throw("Strict value is not equal to itself.")
861863 }
862864 else {
863865 let dH = cm(dr, ah[ao])
864866 if ((dH == dH))
865867 then $Tuple3((dx :+ dr), (dy :+ IntegerEntry((ah[ao] + i), dr)), (ao + 1))
866868 else throw("Strict value is not equal to itself.")
867869 }
868870 }
869871
870872 let dJ = {
871873 let aO = cO
872874 let aP = size(aO)
873875 let aQ = $Tuple3(nil, nil, 0)
874876 func bl (aS,aT) = if ((aT >= aP))
875877 then aS
876878 else dv(aS, aO[aT])
877879
878880 func bm (aS,aT) = if ((aT >= aP))
879881 then aS
880882 else throw("List size exceeds 10")
881883
882884 bm(bl(bl(bl(bl(bl(bl(bl(bl(bl(bl(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
883885 }
884886 let dx = dJ._1
885887 let dy = dJ._2
886888 let dK = bq(dx, ba)
887889 let dL = if ((Z == 0))
888890 then bW
889891 else fraction(Z, (dK - bV), bV)
890892 if (av((dL >= dg)))
891893 then throw("Slippage screwed you")
892894 else if (dh)
893895 then {
894896 let dM = invoke(this, "reissueShare", [dL], nil)
895897 if ((dM == dM))
896898 then {
897899 let dN = invoke(T, "lockShareTokens", [toString(this), di], ([AttachedPayment(Y, dL)] ++ dk))
898900 if ((dN == dN))
899901 then (dy :+ IntegerEntry(m, (Z + dL)))
900902 else throw("Strict value is not equal to itself.")
901903 }
902904 else throw("Strict value is not equal to itself.")
903905 }
904906 else (dy ++ [Reissue(Y, dL, true), ScriptTransfer(da.caller, dL, Y), IntegerEntry(m, (Z + dL))])
905907 }
906908 }
907909 }
908910 }
909911 })
910912
911913
912914
913915 @Callable(da)
914916 func calcMintAmount (cO,az) = {
915917 let ba = aF()
916918 let aW = aK()
917919 let bW = bq(cO, ba)
918920 if ((Z == 0))
919921 then $Tuple2(nil, bW)
920922 else {
921923 let bV = bq(aW, ba)
922924 let bS = ax(az)
923925 func dO (aM,dr) = {
924926 let dP = aM
925927 let dx = dP._1
926928 let ao = dP._2
927929 let bT = ((fraction(ab, bS, aa, CEILING) * ai) / (4 * (ai - 1)))
928930 let dz = {
929931 let dA = fraction(bW, aW[ao], bV)
930932 let dB = if ((dA > dr))
931933 then (dA - dr)
932934 else (dr - dA)
933935 fraction(bT, dB, aa)
934936 }
935937 let dE = (dr - dz)
936938 $Tuple2((dx :+ dE), (ao + 1))
937939 }
938940
939941 let dQ = {
940942 let aO = cO
941943 let aP = size(aO)
942944 let aQ = $Tuple2(nil, 0)
943945 func aR (aS,aT) = if ((aT >= aP))
944946 then aS
945947 else dO(aS, aO[aT])
946948
947949 func aU (aS,aT) = if ((aT >= aP))
948950 then aS
949951 else throw("List size exceeds 10")
950952
951953 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
952954 }
953955 let dx = dQ._1
954956 let du = dQ._2
955957 let dK = bq(dx, ba)
956958 let dR = fraction(Z, (dK - bV), bV)
957959 $Tuple2(nil, dR)
958960 }
959961 }
960962
961963
962964
963965 @Callable(da)
964966 func reissueShare (co) = valueOrElse(ap(da), [Reissue(Y, co, true)])
965967
966968
967969
968970 @Callable(da)
969971 func getDy (dS,dT,dU,dV) = {
970972 let aW = aK()
971973 let dW = valueOrErrorMessage(indexOf(ah, dS), "unknown token in")
972974 let dX = valueOrErrorMessage(indexOf(ah, dT), "unknown token out")
973975 let bu = (aW[dW] + dU)
974976 let bH = br(dW, dX, bu, aW)
975977 let ch = ((aW[dX] - bH) - 1)
976978 let bS = ax(Address(fromBase58String(dV)))
977979 let bT = fraction(fraction(ab, bS, aa, CEILING), ch, aa)
978980 $Tuple2(nil, $Tuple2((ch - bT), bT))
979981 }
980982
981983
982984
983985 @Callable(da)
984986 func exchange (dY,dZ) = valueOrElse(am(), if ((size(da.payments) != 1))
985987 then throw("size(payments) != 1")
986988 else {
987989 let cH = cD()
988990 if (cH._1)
989991 then (cJ(cH._2) ++ cK(da.caller, da.payments))
990992 else {
991993 let cM = da.payments[0]
992994 let ea = ci(cM.assetId)
993995 let eb = fromBase58String(dY)
994996 let dU = cM.amount
995997 let dW = valueOrErrorMessage(indexOf(ah, ea), "unknown token in")
996998 let dX = valueOrErrorMessage(indexOf(ah, dY), "unknown token out")
997999 let aW = aK()
9981000 let bu = (aW[dW] + dU)
9991001 let bH = br(dW, dX, bu, aW)
10001002 let ec = ((aW[dX] - bH) - 1)
10011003 let bS = ax(da.originCaller)
10021004 let bT = fraction(ec, fraction(ab, bS, aa, CEILING), aa)
10031005 let ch = (ec - bT)
10041006 let dC = fraction(bT, ac, aa)
10051007 if (av((ch >= dZ)))
10061008 then throw("Exchange resulted in fewer coins than expected")
10071009 else {
10081010 func ed (aM,ee) = {
10091011 let ef = aM
10101012 let cO = ef._1
10111013 let ao = ef._2
10121014 if ((ao == dW))
10131015 then $Tuple2((cO :+ (ee + dU)), (ao + 1))
10141016 else if ((ao == dX))
10151017 then $Tuple2((cO :+ (ee - ec)), (ao + 1))
10161018 else $Tuple2((cO :+ ee), (ao + 1))
10171019 }
10181020
10191021 let eg = {
10201022 let aO = aW
10211023 let aP = size(aO)
10221024 let aQ = $Tuple2(nil, 0)
10231025 func aR (aS,aT) = if ((aT >= aP))
10241026 then aS
10251027 else ed(aS, aO[aT])
10261028
10271029 func aU (aS,aT) = if ((aT >= aP))
10281030 then aS
10291031 else throw("List size exceeds 10")
10301032
10311033 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
10321034 }
10331035 let cO = eg._1
10341036 let ao = eg._2
10351037 if (cN(cO))
10361038 then throw()
10371039 else {
10381040 let dN = cm(cM.amount, ci(cM.assetId))
10391041 if ((dN == dN))
10401042 then {
10411043 let eh = cy(ec, dY)
10421044 if ((eh == eh))
10431045 then {
10441046 let dG = (bT - dC)
10451047 let dI = if ((dG > 0))
10461048 then invoke(U, "airDrop", nil, [AttachedPayment(eb, dG)])
10471049 else 0
10481050 if ((dI == dI))
10491051 then $Tuple2([IntegerEntry((ea + i), bu), IntegerEntry((dY + i), (aW[dX] - ec)), ScriptTransfer(da.caller, ch, eb), ScriptTransfer(P, dC, eb)], [ch, eb])
10501052 else throw("Strict value is not equal to itself.")
10511053 }
10521054 else throw("Strict value is not equal to itself.")
10531055 }
10541056 else throw("Strict value is not equal to itself.")
10551057 }
10561058 }
10571059 }
10581060 })
10591061
10601062
10611063
10621064 @Callable(da)
10631065 func withdraw (ei) = valueOrElse(am(), if ((size(da.payments) != 1))
10641066 then throw("size(payments) != 1")
10651067 else {
10661068 let ej = da.payments[0].amount
10671069 let ek = da.payments[0].assetId
10681070 if ((Y != ek))
10691071 then throw("unknown payment token")
10701072 else {
10711073 let cH = cD()
10721074 if (cH._1)
10731075 then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
10741076 else {
10751077 func dv (aM,el) = {
10761078 let em = aM
10771079 let dy = em._1
10781080 let ao = em._2
10791081 let en = fraction(el, ej, Z)
10801082 if (av((en >= ei[ao])))
10811083 then throw("Withdrawal resulted in fewer coins than expected")
10821084 else {
10831085 let eh = cy(en, ah[ao])
10841086 if ((eh == eh))
10851087 then $Tuple2((dy ++ [IntegerEntry((ah[ao] + i), (el - en)), ScriptTransfer(da.originCaller, en, fromBase58String(ah[ao]))]), (ao + 1))
10861088 else throw("Strict value is not equal to itself.")
10871089 }
10881090 }
10891091
10901092 let eo = {
10911093 let aO = aK()
10921094 let aP = size(aO)
10931095 let aQ = $Tuple2(nil, 0)
10941096 func aR (aS,aT) = if ((aT >= aP))
10951097 then aS
10961098 else dv(aS, aO[aT])
10971099
10981100 func aU (aS,aT) = if ((aT >= aP))
10991101 then aS
11001102 else throw("List size exceeds 10")
11011103
11021104 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11031105 }
11041106 let dy = eo._1
11051107 let ao = eo._2
11061108 (dy ++ [Burn(Y, ej), IntegerEntry(m, (Z - ej))])
11071109 }
11081110 }
11091111 })
11101112
11111113
11121114
11131115 @Callable(da)
11141116 func withdrawWithUnlock (ei,ep) = valueOrElse(am(), if ((0 >= ep))
11151117 then throw("Unlock amount must be positive")
11161118 else {
11171119 let cH = cD()
11181120 if (cH._1)
11191121 then (cJ(cH._2) ++ cK(da.caller, da.payments))
11201122 else {
11211123 let ej = if ((size(da.payments) > 0))
11221124 then if ((size(da.payments) != 1))
11231125 then throw("size(payments) != 1")
11241126 else {
11251127 let ek = da.payments[0].assetId
11261128 if ((Y != ek))
11271129 then throw("unknown payment token")
11281130 else da.payments[0].amount
11291131 }
11301132 else 0
11311133 let eq = invoke(T, "withdrawShareTokens", [toString(this), ep], nil)
11321134 if ((eq == eq))
11331135 then {
11341136 let er = (ej + ep)
11351137 let dH = invoke(this, "withdraw", [ei], [AttachedPayment(Y, er)])
11361138 if ((dH == dH))
11371139 then nil
11381140 else throw("Strict value is not equal to itself.")
11391141 }
11401142 else throw("Strict value is not equal to itself.")
11411143 }
11421144 })
11431145
11441146
11451147
11461148 @Callable(da)
11471149 func calcWithdrawOneCoin (es,dY,az) = if ((0 >= es))
11481150 then throw("Amount must be positive")
11491151 else {
11501152 let ao = valueOrErrorMessage(indexOf(ah, dY), "unknown token out")
11511153 $Tuple2(nil, bP(aK(), es, ao, Address(fromBase58String(az)))._1)
11521154 }
11531155
11541156
11551157
11561158 @Callable(da)
11571159 func withdrawOneCoin (dY,et) = valueOrElse(am(), if ((size(da.payments) != 1))
11581160 then throw("size(payments) != 1")
11591161 else {
11601162 let cH = cD()
11611163 if (cH._1)
11621164 then (cJ(cH._2) ++ cK(da.originCaller, da.payments))
11631165 else {
11641166 let ej = da.payments[0].amount
11651167 let ek = da.payments[0].assetId
11661168 if ((ek != Y))
11671169 then throw("unknown token")
11681170 else {
11691171 let eu = valueOrErrorMessage(indexOf(ah, dY), "unknown token out")
11701172 let eb = fromBase58String(dY)
11711173 let aW = aK()
11721174 let ev = bP(aW, ej, eu, da.originCaller)
11731175 let ch = ev._1
11741176 let ew = ev._2
11751177 if (av((ch >= et)))
11761178 then throw("Not enough coins removed")
11771179 else {
11781180 let dC = fraction(ew, ac, aa)
11791181 let ex = (ch + ew)
11801182 func ed (aM,ee) = {
11811183 let ey = aM
11821184 let cO = ey._1
11831185 let ao = ey._2
11841186 if ((ao == eu))
11851187 then $Tuple2((cO :+ (ee - ex)), (ao + 1))
11861188 else $Tuple2((cO :+ ee), (ao + 1))
11871189 }
11881190
11891191 let ez = {
11901192 let aO = aW
11911193 let aP = size(aO)
11921194 let aQ = $Tuple2(nil, 0)
11931195 func aR (aS,aT) = if ((aT >= aP))
11941196 then aS
11951197 else ed(aS, aO[aT])
11961198
11971199 func aU (aS,aT) = if ((aT >= aP))
11981200 then aS
11991201 else throw("List size exceeds 10")
12001202
12011203 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
12021204 }
12031205 let cO = ez._1
12041206 let eA = ez._2
12051207 if (cN(cO))
12061208 then throw()
12071209 else {
12081210 let eh = cy(ex, dY)
12091211 if ((eh == eh))
12101212 then {
12111213 let dG = (ew - dC)
12121214 let dI = if ((dG > 0))
12131215 then invoke(U, "airDrop", nil, [AttachedPayment(eb, dG)])
12141216 else 0
12151217 if ((dI == dI))
12161218 then [ScriptTransfer(da.originCaller, ch, eb), IntegerEntry((ah[eu] + i), (aW[eu] - ex)), Burn(Y, ej), ScriptTransfer(P, dC, eb), IntegerEntry(m, (Z - ej))]
12171219 else throw("Strict value is not equal to itself.")
12181220 }
12191221 else throw("Strict value is not equal to itself.")
12201222 }
12211223 }
12221224 }
12231225 }
12241226 })
12251227
12261228
12271229
12281230 @Callable(da)
12291231 func withdrawOneCoinWithUnlock (dY,et,ep) = valueOrElse(am(), if ((0 >= ep))
12301232 then throw("Unlock amount must be positive")
12311233 else {
12321234 let cH = cD()
12331235 if (cH._1)
12341236 then (cJ(cH._2) ++ cK(da.caller, da.payments))
12351237 else {
12361238 let ej = if ((size(da.payments) > 0))
12371239 then if ((size(da.payments) != 1))
12381240 then throw("size(payments) != 1")
12391241 else {
12401242 let ek = da.payments[0].assetId
12411243 if ((Y != ek))
12421244 then throw("unknown payment token")
12431245 else da.payments[0].amount
12441246 }
12451247 else 0
12461248 let eq = invoke(T, "withdrawShareTokens", [toString(this), ep], nil)
12471249 if ((eq == eq))
12481250 then {
12491251 let er = (ej + ep)
12501252 let dH = invoke(this, "withdrawOneCoin", [dY, et], [AttachedPayment(Y, er)])
12511253 if ((dH == dH))
12521254 then nil
12531255 else throw("Strict value is not equal to itself.")
12541256 }
12551257 else throw("Strict value is not equal to itself.")
12561258 }
12571259 })
12581260
12591261
12601262
12611263 @Callable(da)
12621264 func A () = $Tuple2(nil, aF())
12631265
12641266
12651267
12661268 @Callable(da)
12671269 func getVirtualPrice () = {
12681270 let bn = aZ(aK(), aF())
12691271 $Tuple2(nil, fraction(bn, a, Z))
12701272 }
12711273
12721274
12731275
12741276 @Callable(da)
12751277 func calcTokenAmount (eB,eC) = {
12761278 let ba = aF()
12771279 let eD = aK()
12781280 let bV = bq(eD, ba)
12791281 func eE (aM,el) = {
12801282 let eF = aM
12811283 let cO = eF._1
12821284 let ao = eF._2
12831285 let dr = (el + (if (eC)
12841286 then eB[ao]
12851287 else -(eB[ao])))
12861288 $Tuple2((cO :+ dr), (ao + 1))
12871289 }
12881290
12891291 let cO = ( let aO = eD
12901292 let aP = size(aO)
12911293 let aQ = $Tuple2(nil, 0)
12921294 func aR (aS,aT) = if ((aT >= aP))
12931295 then aS
12941296 else eE(aS, aO[aT])
12951297
12961298 func aU (aS,aT) = if ((aT >= aP))
12971299 then aS
12981300 else throw("List size exceeds 10")
12991301
13001302 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10))._1
13011303 let bW = bq(cO, ba)
13021304 let eG = if (eC)
13031305 then (bW - bV)
13041306 else (bV - bW)
13051307 $Tuple2(nil, fraction(eG, Z, bV))
13061308 }
13071309
13081310
13091311
13101312 @Callable(da)
13111313 func rampA (eH,eI) = valueOrElse(am(), valueOrElse(an(da), if (av((au >= (af + e))))
13121314 then throw("too often")
13131315 else if (av((eI >= (au + e))))
13141316 then throw("insufficient time")
13151317 else {
13161318 let eJ = aF()
13171319 if (av(if ((eH > 0))
13181320 then (b > eH)
13191321 else false))
13201322 then throw("out of base range")
13211323 else if (av(if (if ((eH >= eJ))
13221324 then ((eJ * c) >= eH)
13231325 else false)
13241326 then true
13251327 else if ((eJ > eH))
13261328 then ((eH * c) >= eJ)
13271329 else false))
13281330 then throw("out of range")
13291331 else [IntegerEntry("initial_A", eJ), IntegerEntry("future_A", eH), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", eI)]
13301332 }))
13311333
13321334
13331335
13341336 @Callable(da)
13351337 func stopRampA () = valueOrElse(am(), valueOrElse(an(da), {
13361338 let eK = aF()
13371339 [IntegerEntry("initial_A", eK), IntegerEntry("future_A", eK), IntegerEntry("initial_A_time", au), IntegerEntry("future_A_time", au)]
13381340 }))
13391341
13401342
13411343
13421344 @Callable(da)
13431345 func shutdown () = valueOrElse(an(da), if (!(X))
13441346 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified")))
13451347 else aj("Paused by admin"))
13461348
13471349
13481350
13491351 @Callable(da)
13501352 func activate () = valueOrElse(an(da), if (X)
13511353 then al()
13521354 else [BooleanEntry(j, true), DeleteEntry(k)])
13531355
13541356
13551357
13561358 @Callable(da)
13571359 func takeIntoAccountExtraFunds () = valueOrElse(am(), if ((da.caller != P))
13581360 then throw("Only the wallet can call this function")
13591361 else {
13601362 let eD = aK()
13611363 func eL (aM,aN) = {
13621364 let eM = aM
13631365 let eN = eM._1
13641366 let ao = eM._2
13651367 let eO = fromBase58String(aN)
13661368 let eP = (assetBalance(this, eO) + cA(eO))
13671369 let eQ = (eP - eD[ao])
13681370 if ((0 > eQ))
13691371 then aj(("Enroll amount negative for asset" + aN))
13701372 else {
13711373 let dI = if ((eQ > 0))
13721374 then invoke(U, "airDrop", nil, [AttachedPayment(eO, eQ)])
13731375 else 0
13741376 if ((dI == dI))
13751377 then $Tuple2((eN + eQ), (ao + 1))
13761378 else throw("Strict value is not equal to itself.")
13771379 }
13781380 }
13791381
13801382 let du = {
13811383 let aO = ah
13821384 let aP = size(aO)
13831385 let aQ = $Tuple2(0, 0)
13841386 func aR (aS,aT) = if ((aT >= aP))
13851387 then aS
13861388 else eL(aS, aO[aT])
13871389
13881390 func aU (aS,aT) = if ((aT >= aP))
13891391 then aS
13901392 else throw("List size exceeds 10")
13911393
13921394 aU(aR(aR(aR(aR(aR(aR(aR(aR(aR(aR(aQ, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
13931395 }
13941396 if ((du._1 == 0))
13951397 then throw("No money to take")
13961398 else nil
13971399 })
13981400
13991401
14001402 @Verifier(eR)
14011403 func eS () = {
14021404 let eT = {
14031405 let eU = if (sigVerify(eR.bodyBytes, eR.proofs[0], L))
14041406 then 1
14051407 else 0
14061408 let eV = if (sigVerify(eR.bodyBytes, eR.proofs[1], M))
14071409 then 1
14081410 else 0
14091411 let eW = if (sigVerify(eR.bodyBytes, eR.proofs[2], N))
14101412 then 1
14111413 else 0
14121414 (((eU + eV) + eW) >= 2)
14131415 }
14141416 let I = eR
14151417 if ($isInstanceOf(I, "InvokeScriptTransaction"))
14161418 then {
14171419 let dH = I
14181420 let eX = if ((dH.dApp == this))
14191421 then (dH.function == "takeIntoAccountExtraFunds")
14201422 else false
14211423 let eY = if (if (if (sigVerify(eR.bodyBytes, eR.proofs[0], L))
14221424 then true
14231425 else sigVerify(eR.bodyBytes, eR.proofs[0], M))
14241426 then true
14251427 else sigVerify(eR.bodyBytes, eR.proofs[0], N))
14261428 then true
14271429 else sigVerify(eR.bodyBytes, eR.proofs[0], O)
14281430 if (if (eX)
14291431 then eY
14301432 else false)
14311433 then true
14321434 else eT
14331435 }
14341436 else eT
14351437 }
14361438

github/deemru/w8io/026f985 
143.11 ms