tx · 4opCmweNFJvfGjV1kBC5K5Kgyr2up5W19rX3J8B4rERv

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.05300000 Waves

2023.08.09 17:08 [2703161] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "4opCmweNFJvfGjV1kBC5K5Kgyr2up5W19rX3J8B4rERv", "fee": 5300000, "feeAssetId": null, "timestamp": 1691590100823, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "3AsxcpMtHTYLd5mZj1buyThT4jzxALjKiM4nUkU8k87gpMx8xhV1NVsmfp2kvc4kcAt8ZwuU7z9dZ5e1NDMxyPHU" ], "script": "base64:BgLBAQgCEgMKAQgSAwoBCBIECgIICBIFCgMIGBgSBQoDCAEIEgQKAggBEgYKBAEICAESBQoDAQgIEg8KDQgICAgICAgICAgICAgSAwoBCBIDCgEIEgUKAwgIARIGCgQIAQgIEg0KCwgIAQQRGBgYAQEYEgkKBwgIAQQIARgSDQoLCAgBBBgYGBgYARgSBQoDCAQBEgsKCQgIAQEBAQEBBBIJCgcIAQEBAQEBEgASABIAEgASABIAEgASABIDCgEIEgMKAQiBAQAHU0ZfUE9PTAICU0YAB1dYX1BPT0wCAldYAA9DQVBfRkVFX05PX0xPQU4CCWNhcE5vTG9hbgAMQ0FQX0ZFRV9MT0FOAgdjYXBMb2FuABRTVE9QTE9TU19GRUVfTk9fTE9BTgIOc3RvcExvc3NOb0xvYW4ADVNUT1BMT1NTX0xPQU4CDHN0b3BMb3NzTG9hbgAITE9BTl9GRUUCBGxvYW4AC05PX0xPQU5fRkVFAgZub0xvYW4ABk5PX0ZFRQIFbm9GZWUABlNDQUxFOACAwtcvAAdTQ0FMRTEwAIDIr6AlAAdTQ0FMRTE2CQC2AgEAgICE/qbe4REACkZFRV9TQ0FMRTYAwIQ9ABRrU0ZQb29sQUFzc2V0QmFsYW5jZQIPQV9hc3NldF9iYWxhbmNlABRrU0ZQb29sQkFzc2V0QmFsYW5jZQIPQl9hc3NldF9iYWxhbmNlAA9rU0ZQb29sQUFzc2V0SWQCCkFfYXNzZXRfaWQAD2tTRlBvb2xCQXNzZXRJZAIKQl9hc3NldF9pZAAOa1NGUG9vbFNoYXJlSWQCDnNoYXJlX2Fzc2V0X2lkABJrU0ZQb29sU2hhcmVTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAKa1NGUG9vbEZlZQIKY29tbWlzc2lvbgANa1VzZXJQb3NpdGlvbgINX3VzZXJQb3NpdGlvbgARa1VzZXJQb3NpdGlvblBvb2wCEV91c2VyUG9zaXRpb25Qb29sABFrVXNlckJvcnJvd0Ftb3VudAIZX3VzZXJQb3NpdGlvbkJvcnJvd0Ftb3VudAASa1VzZXJCb3Jyb3dBc3NldElkAhpfdXNlclBvc2l0aW9uQm9ycm93QXNzZXRJZAAQa1VzZXJQb3NpdGlvbk51bQITX3VzZXJQb3NpdGlvbk51bWJlcgAVa1VzZXJQb3NpdGlvbkludGVyZXN0AhVfdXNlclBvc2l0aW9uSW50ZXJlc3QACmtQb29sVG90YWwCCl9wb29sVG90YWwADmtQb29sVG90YWxMb2FuAg5fcG9vbFRvdGFsTG9hbgARa1Bvb2xJbnRlcmVzdExvYW4CEV9wb29sSW50ZXJlc3RMb2FuABNrUG9vbEludGVyZXN0Tm9Mb2FuAhNfcG9vbEludGVyZXN0Tm9Mb2FuAA5rUG9vbENhbkJvcnJvdwIOX3Bvb2xDYW5Cb3Jyb3cAFWtBeGx5SW5GZWVXaXRob3V0TG9hbgIOX2F4bHlGZWVOb0xvYW4AEmtBeGx5SW5GZWVXaXRoTG9hbgIQX2F4bHlGZWVXaXRoTG9hbgARa0F4bHlOb0xvYW5DYXBGZWUCEV9heGx5RmVlQ2FwTm9Mb2FuABNrQXhseVdpdGhMb2FuQ2FwRmVlAhNfYXhseUZlZUNhcFdpdGhMb2FuABZrQXhseVN0b3BMb3NzTm9Mb2FuRmVlAhhfYXhseUZlZVN0b3Bsb3NzV2l0aExvYW4AFGtBeGx5U3RvcExvc3NMb2FuRmVlAhZfYXhseUZlZVN0b3Bsb3NzTm9Mb2FuAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ACmtTaGFyZVBvb2wCDF9wb29sU2hhcmVJZAAOa1Bvb2xDYXBDaGFuZ2UCDl9wb29sQ2FwQ2hhbmdlAA9rVG9rZW5MYXN0UHJpY2UCCmxhc3RfcHJpY2UADmtQcmljZUluT3JhY2xlAgdfdHdhcDVCAAdrQWN0aXZlAgZhY3RpdmUADGtBY3RpdmVVc2VycwILYWN0aXZlVXNlcnMAC2tBY3RpdmVTRldYAgdfYWN0aXZlAAtrUG9vbEFjdGl2ZQILX2FjdGl2ZVBvb2wADWtVc2VyU3RvcExvc3MCCV9zdG9wTG9zcwAJa01vbmV5Qm94Ag5heGx5X21vbmV5X2JveAAOa1NGRmFybWluZ0FkZHICE3N3b3BmaV9mYXJtaW5nX2FkZHIADGtMZW5kU2VydmljZQIRbGVuZF9zZXJ2aWNlX2FkZHIAD2tPcGVyYXRvckNhbGxQSwISYWRtaW5fY2FsbF9wdWJfa2V5AAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QAB2tTd29wSWQCB3N3b3BfaWQABWtXeElkAgV3eF9pZAAPa0dyb3VwMUFkbWluMVBLAhVncm91cDFfYWRtaW4xX3B1Yl9rZXkAD2tHcm91cDFBZG1pbjJQSwIVZ3JvdXAxX2FkbWluMl9wdWJfa2V5AA9rR3JvdXAyQWRtaW4xUEsCFWdyb3VwMl9hZG1pbjFfcHViX2tleQAPa0dyb3VwMkFkbWluMlBLAhVncm91cDJfYWRtaW4yX3B1Yl9rZXkACG1vbmV5Qm94CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtNb25leUJveAIYTm8gYXhseSBtb25leUJveCBhZGRyZXNzAApleENvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFC2tFeENvbnRyYWN0AhxObyBleGNoYW5nZSBjb250cmFjdCBhZGRyZXNzAA9wcmljZU9yYWNsZUFkZHIJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa1ByaWNlT3JhY2xlAhdObyBwcmljZSBvcmFjbGUgYWRkcmVzcwAOd3hTd2FwQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa1d4U3dhcENvbnRyYWN0AhJObyB3eCBzd2FwIGFkZHJlc3MABlNXT1BJRAkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUHa1N3b3BJZAIKTm8gc3dvcCBpZAAEV1hJRAkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUFa1d4SWQCCE5vIHd4IGlkAA5ncm91cDFBZG1pbjFQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa0dyb3VwMUFkbWluMVBLAhlDYW4ndCBnZXQga0dyb3VwMUFkbWluMVBLAA5ncm91cDFBZG1pbjJQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa0dyb3VwMUFkbWluMlBLAhlDYW4ndCBnZXQga0dyb3VwMUFkbWluMlBLAA5ncm91cDJBZG1pbjFQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa0dyb3VwMkFkbWluMVBLAhlDYW4ndCBnZXQga0dyb3VwMkFkbWluMVBLAA5ncm91cDJBZG1pbjJQSwkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa0dyb3VwMkFkbWluMlBLAhlDYW4ndCBnZXQga0dyb3VwMkFkbWluMVBLAApvcGVyYXRvclBLCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ9rT3BlcmF0b3JDYWxsUEsCFENhbid0IGdldCBvcGVyYXRvclBLAQ91bmtub3duUG9vbFR5cGUACQACAQIPV3JvbmcgcG9vbCB0eXBlAQ5nZXRMZW5kU3J2QWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0xlbmRTZXJ2aWNlAhtDYW4ndCBnZXQgbGVuZCBzZXJ2aWNlIGFkZHIBDmlzT3BlcmF0b3JDYWxsAQFpAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIkT25seSBvcGVyYXRvciBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQtpc0FkbWluQ2FsbAEBaQMDCQAAAggFAWkPY2FsbGVyUHVibGljS2V5CAUBaQ9jYWxsZXJQdWJsaWNLZXkGCQAAAggFAWkPY2FsbGVyUHVibGljS2V5CAUBaQ9jYWxsZXJQdWJsaWNLZXkFBHVuaXQJAAIBAihPbmx5IGFkbWluIGdyb3VwMSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzTGFuZENhbGwBAWkDCQAAAggFAWkGY2FsbGVyCQEOZ2V0TGVuZFNydkFkZHIABQR1bml0CQACAQIpT25seSBsYW5kIGNvbnRyYWN0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCGlzQWN0aXZlAAMJAAACCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFB2tBY3RpdmUGBgUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBEGlzQWN0aXZlRm9yVXNlcnMAAwMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUHa0FjdGl2ZQYJAAACCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDGtBY3RpdmVVc2VycwYGBwUEdW5pdAkAAgECKURBcHAgaXMgaW5hY3RpdmUgZm9yIHVzZXJzIGF0IHRoaXMgbW9tZW50AQxpc1Bvb2xBY3RpdmUCBHBvb2wEdHlwZQQKV1hTRkFjdGl2ZQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQCsAgIFBHR5cGUFC2tBY3RpdmVTRldYBgQKcG9vbEFjdGl2ZQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQCsAgIFBHBvb2wFC2tQb29sQWN0aXZlBgMDBQpXWFNGQWN0aXZlBQpwb29sQWN0aXZlBwYHAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgERZ2V0U0ZQb29sQmFsYW5jZXMBCHBvb2xBZGRyCQCUCgIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEFBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEEgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRRrU0ZQb29sQkFzc2V0QmFsYW5jZQIeQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBiYWxhbmNlARFnZXRXWFBvb2xCYWxhbmNlcwMIcG9vbEFkZHIDYUlkA2JJZAkAlAoCCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQkAzAgCBQNhSWQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAoAAUAJAPwHBAUIcG9vbEFkZHICHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkJAMwIAgUDYklkBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQBD2dldFBvb2xCYWxhbmNlcwQIcG9vbEFkZHIEdHlwZQNhSWQDYklkAwkAAAIFBHR5cGUFB1NGX1BPT0wJARFnZXRTRlBvb2xCYWxhbmNlcwEFCHBvb2xBZGRyAwkAAAIFBHR5cGUFB1dYX1BPT0wJARFnZXRXWFBvb2xCYWxhbmNlcwMFCHBvb2xBZGRyBQNhSWQFA2JJZAkBD3Vua25vd25Qb29sVHlwZQABDWdldFNGUG9vbERhdGEBCHBvb2xBZGRyBAskdDA3OTEyNzk2MQkBEWdldFNGUG9vbEJhbGFuY2VzAQUIcG9vbEFkZHIDCQAAAgULJHQwNzkxMjc5NjEFCyR0MDc5MTI3OTYxBARiYWxCCAULJHQwNzkxMjc5NjECXzIEBGJhbEEIBQskdDA3OTEyNzk2MQJfMQkAlwoFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xBQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQkFzc2V0SWQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQFBGJhbEEFBGJhbEIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUOa1NGUG9vbFNoYXJlSWQCGENhbid0IGdldCBzaGFyZSBhc3NldCBpZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0V1hQb29sRGF0YQEIcG9vbEFkZHIEA2NmZwoAAUAJAPwHBAUIcG9vbEFkZHICHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQNjZmcFA2NmZwQDYUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAEAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAQDYklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAFAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAQHc2hhcmVJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcAAwMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGkNhbid0IGdldCBwb29sIExQIGFzc2V0IGlkBAskdDA4NjU4ODcxNwkBEWdldFdYUG9vbEJhbGFuY2VzAwUIcG9vbEFkZHIFA2FJZAUDYklkAwkAAAIFCyR0MDg2NTg4NzE3BQskdDA4NjU4ODcxNwQEYmFsQggFCyR0MDg2NTg4NzE3Al8yBARiYWxBCAULJHQwODY1ODg3MTcCXzEJAJcKBQUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFBvb2xEYXRhAghwb29sQWRkcgR0eXBlAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ1nZXRTRlBvb2xEYXRhAQUIcG9vbEFkZHIDCQAAAgUEdHlwZQUHV1hfUE9PTAkBDWdldFdYUG9vbERhdGEBBQhwb29sQWRkcgkBD3Vua25vd25Qb29sVHlwZQABDmdldFNoYXJlU3VwcGx5Awhwb29sQWRkcgR0eXBlB3NoYXJlSWQDCQAAAgUEdHlwZQUHU0ZfUE9PTAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRJrU0ZQb29sU2hhcmVTdXBwbHkCHENhbid0IGdldCBzaGFyZSBhc3NldCBzdXBwbHkDCQAAAgUEdHlwZQUHV1hfUE9PTAgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFB3NoYXJlSWQCDVdyb25nIFNoYXJlSWQIcXVhbnRpdHkJAQ91bmtub3duUG9vbFR5cGUAARFnZXRQb29sVG90YWxTaGFyZQEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFCmtQb29sVG90YWwAAAEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuAAABGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEEdXNlcgkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtAAAAAQEKZ2V0QXhseUZlZQIEcG9vbAdmZWVUeXBlAwkAAAIFB2ZlZVR5cGUFDENBUF9GRUVfTE9BTgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRNrQXhseVdpdGhMb2FuQ2FwRmVlAwkAAAIFB2ZlZVR5cGUFD0NBUF9GRUVfTk9fTE9BTgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrQXhseU5vTG9hbkNhcEZlZQMJAAACBQdmZWVUeXBlBQhMT0FOX0ZFRQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRJrQXhseUluRmVlV2l0aExvYW4DCQAAAgUHZmVlVHlwZQULTk9fTE9BTl9GRUUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUVa0F4bHlJbkZlZVdpdGhvdXRMb2FuAwkAAAIFB2ZlZVR5cGUFBk5PX0ZFRQAACQACAQIOV3JvbmcgZmVlIHR5cGUBEGdldFNGRmFybWluZ0FkZHIACQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDmtTRkZhcm1pbmdBZGRyAh1DYW4ndCBnZXQgc3dvcGZpIGZhcm1pbmcgYWRkcgEQZ2V0V1hGYXJtaW5nQWRkcgEIcG9vbEFkZHIECWZDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgITJXNfX2ZhY3RvcnlDb250cmFjdAIiQ2FuJ3QgZ2V0IFdYIGZhY3RvcnkgY29udHJhY3QgYWRkcgQKZmFjdHJveUNmZwkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUJZkNvbnRyYWN0AhElc19fZmFjdG9yeUNvbmZpZwIYQ2FuJ3QgZ2V0IFdYIGZhY3RvcnkgY2ZnAgJfXwkBB0FkZHJlc3MBCQDZBAEJAJEDAgUKZmFjdHJveUNmZwABAQxhc3NldElkVG9TdHIBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJANgEAQUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDACBVdBVkVTCQACAQIMTm90IEFzc2V0IGlkAQ5hc3NldElkRnJvbVN0cgEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARBnZXRBc3NldERlY2ltYWxzAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTAAgEByRtYXRjaDAJAOwHAQkA2QQBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CGRlY2ltYWxzCQACAQIQQ2FuJ3QgZmluZCBhc3NldAERZ2V0QXNzZXRQcmVjaXRpb24BB2Fzc2V0SWQJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdhc3NldElkAAAAAAUERE9XTgEOZ2V0QXNzZXRzUHJpY2UBCGFzc2V0SWRzCgEJZ2V0UHJpY2VzAgFhB2Fzc2V0SWQECmFzc2V0UHJpY2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFB2Fzc2V0SWQFDmtQcmljZUluT3JhY2xlAP///////////wEJAM0IAgUBYQUKYXNzZXRQcmljZQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZ2V0UHJpY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDWdldFNoYXJlUHJpY2UBB3NoYXJlSWQEBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFB3NoYXJlSWQFCmtTaGFyZVBvb2wCIENhbid0IGZpbmQgcG9vbCBhZGRyIGJ5IHNoYXJlIGlkBAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAxMTcwNjExNzcxCQELZ2V0UG9vbERhdGECBQhwb29sQWRkcgUFcFR5cGUEA2FJZAgFDSR0MDExNzA2MTE3NzECXzEEA2JJZAgFDSR0MDExNzA2MTE3NzECXzIECGFCYWxhbmNlCAUNJHQwMTE3MDYxMTc3MQJfMwQIYkJhbGFuY2UIBQ0kdDAxMTcwNjExNzcxAl80BAZwcmljZXMJAQ5nZXRBc3NldHNQcmljZQEJAMwIAgUDYUlkCQDMCAIFA2JJZAUDbmlsBAdkUHJpY2VBCQCRAwIFBnByaWNlcwAABAdkUHJpY2VCCQCRAwIFBnByaWNlcwABAwMJAGYCAAAFB2RQcmljZUEGCQBmAgAABQdkUHJpY2VCAP///////////wEEC3NoYXJlU3VwcGx5CQEOZ2V0U2hhcmVTdXBwbHkDBQhwb29sQWRkcgUFcFR5cGUFB3NoYXJlSWQECkFQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNhSWQAAAAABQRET1dOBApCUHJlY2lzaW9uCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYklkAAAAAAUERE9XTgQOc2hhcmVQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdzaGFyZUlkAAAAAAUERE9XTgQDc3VtCQBkAgkAawMFCGFCYWxhbmNlBQdkUHJpY2VBBQpBUHJlY2lzaW9uCQBrAwUIYkJhbGFuY2UFB2RQcmljZUIFCkJQcmVjaXNpb24JAGsDBQNzdW0FDnNoYXJlUHJlY2lzaW9uBQtzaGFyZVN1cHBseQEOZ2V0U2hhcmVQcmljZXMBCHNoYXJlSWRzCgEJZ2V0UHJpY2VzAgFhB3NoYXJlSWQJAM0IAgUBYQkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkCgACJGwFCHNoYXJlSWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlnZXRQcmljZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAEOZ2V0Q3Vyc0VudHJpZXMEA2FJZANiSWQHc2hhcmVJZAh3QW1vdW50cwQMYXNzZXRzUHJpY2VzCQEOZ2V0QXNzZXRzUHJpY2UBCQDMCAIFA2FJZAkAzAgCBQNiSWQFA25pbAQKc2hhcmVQcmljZQkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkBAZwcmljZXMJAM4IAgkAzAgCCQCkAwEJAJEDAgUMYXNzZXRzUHJpY2VzAAAJAMwIAgkApAMBCQCRAwIFDGFzc2V0c1ByaWNlcwABCQDMCAIJAKQDAQUKc2hhcmVQcmljZQUDbmlsBQh3QW1vdW50cwkAzAgCCQELU3RyaW5nRW50cnkCBQ9rVG9rZW5MYXN0UHJpY2UJALkJAgUGcHJpY2VzAgEsBQNuaWwBGGNhbGNSZXBsZW5pc2hCeVR3b1Rva2VucwgFcFR5cGUIcG9vbEFkZHIEcG10QQNhSWQEcG10QgNiSWQEYmFsQQRiYWxCAwkAAAIFBXBUeXBlBQdTRl9QT09MBARyZXBsCgABQAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICIGNhbGNMUFJlcGxlbmlzaFR3b1Rva2Vuc1JFQURPTkxZCQDMCAIJAMwIAgkApAMBBQRwbXRBCQDMCAIJAKQDAQUEcG10QgUDbmlsBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUEcmVwbAUEcmVwbAkAlwoFCgABQAkAkQMCBQRyZXBsAAMDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CgABQAkAkQMCBQRyZXBsAAQDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CgABQAkAkQMCBQRyZXBsAAEDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CQEMYXNzZXRJZFRvU3RyAQkAkQMCBQRyZXBsAAIKAAFACQCRAwIFBHJlcGwAAAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUFcFR5cGUFB1dYX1BPT0wEDSR0MDEzMzE1MTM1NjUJAJQKAgkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgIgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkJAMwIAgUEcG10QQUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nAgJfXwkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgIfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQkAzAgCBQRwbXRCBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fAwkAAAIFDSR0MDEzMzE1MTM1NjUFDSR0MDEzMzE1MTM1NjUECmV2YWxQdXRJbkIIBQ0kdDAxMzMxNTEzNTY1Al8yBApldmFsUHV0SW5BCAUNJHQwMTMzMTUxMzU2NQJfMQQFbHBJbkEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAEEBWxwSW5CCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgABAwkAZgIFBWxwSW5CBQVscEluQQQDcG10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQAICQCXCgUFBHBtdEEFA3BtdAkAZQIFBHBtdEIFA3BtdAUDYklkBQVscEluQgQDcG10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgAHCQCXCgUFA3BtdAUEcG10QgkAZQIFBHBtdEEFA3BtdAUDYUlkBQVscEluQQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBD3Vua25vd25Qb29sVHlwZQABGHJlcGxlbmlzaFR3b1Rva2Vuc0J5VHlwZQYIcG9vbEFkZHIFcFR5cGUEcG10QQNhSWQEcG10QgNiSWQECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQNhSWQFBHBtdEEJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFA2JJZAUEcG10QgUDbmlsAwkAAAIFBXBUeXBlBQdTRl9QT09MCQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwkAzAgCCQDMCAICBWZhbHNlCQDMCAICATAFA25pbAUDbmlsBQhwYXltZW50cwMJAAACBQVwVHlwZQUHV1hfUE9PTAkA/AcEBQhwb29sQWRkcgIDcHV0CQDMCAIAwIQ9CQDMCAIHBQNuaWwFCHBheW1lbnRzCQEPdW5rbm93blBvb2xUeXBlAAEXcmVwbGVuaXNoT25lVG9rZW5CeVR5cGUECHBvb2xBZGRyBXBUeXBlA3BtdAVwbXRJZAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFBXBtdElkBQNwbXQFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICFXJlcGxlbmlzaFdpdGhPbmVUb2tlbgkAzAgCCQDMCAICATAJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzAwkAAAIFBXBUeXBlBQdXWF9QT09MCQD8BwQFCHBvb2xBZGRyAglwdXRPbmVUa24JAMwIAgAACQDMCAIHBQNuaWwFCHBheW1lbnRzCQEPdW5rbm93blBvb2xUeXBlAAEHc3Rha2VMUAQEcG9vbAVwVHlwZQdzaGFyZUlkBmFtb3VudAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAUGYW1vdW50BQNuaWwDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAg9sb2NrU2hhcmVUb2tlbnMJAMwIAgUEcG9vbAkAzAgCAAAFA25pbAUIcGF5bWVudHMDCQAAAgUFcFR5cGUFB1dYX1BPT0wJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sAgVzdGFrZQUDbmlsBQhwYXltZW50cwkBD3Vua25vd25Qb29sVHlwZQABCXVuc3Rha2VMUAQEcG9vbAVwVHlwZQdzaGFyZUlkBmFtb3VudAQNJHQwMTUyMjQxNTU3NAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkAlQoDCQEQZ2V0U0ZGYXJtaW5nQWRkcgACE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgUEcG9vbAkAzAgCBQZhbW91bnQFA25pbAMJAAACBQVwVHlwZQUHV1hfUE9PTAkAlQoDCQEQZ2V0V1hGYXJtaW5nQWRkcgEJAQdBZGRyZXNzAQkA2QQBBQRwb29sAgd1bnN0YWtlCQDMCAIFB3NoYXJlSWQJAMwIAgUGYW1vdW50BQNuaWwJAQ91bmtub3duUG9vbFR5cGUABAhmYXJtQWRkcggFDSR0MDE1MjI0MTU1NzQCXzEEBWZOYW1lCAUNJHQwMTUyMjQxNTU3NAJfMgQGcGFyYW1zCAUNJHQwMTUyMjQxNTU3NAJfMwQDaW52CQD8BwQFCGZhcm1BZGRyBQVmTmFtZQUGcGFyYW1zBQNuaWwDCQAAAgUDaW52BQNpbnYFBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERY2FsY0Ftb3VudFRvUGF5U0YHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wECWZlZVNjYWxlNgDAhD0EA2ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUIcG9vbEFkZHIFCmtTRlBvb2xGZWUEDGFtbnRHZXROb0ZlZQkAbgQFEGFtb3VudFRva2VuVG9HZXQFCWZlZVNjYWxlNgkAZQIFCWZlZVNjYWxlNgUDZmVlBQdDRUlMSU5HBA0kdDAxNTk5NjE2MzAyAwkAAAIFD2Fzc2V0VG9rZW5Ub0dldAUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CQBuBAUMYW1udEdldE5vRmVlBQRiYWxCCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlBQdDRUlMSU5HCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQgQLYW1vdW50VG9QYXkJAG4EBQxhbW50R2V0Tm9GZWUFBGJhbEEJAGUCBQRiYWxCBQxhbW50R2V0Tm9GZWUFB0NFSUxJTkcJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDE1OTk2MTYzMDICXzEECmFzc2V0VG9QYXkIBQ0kdDAxNTk5NjE2MzAyAl8yCQCUCgIFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5AQ1nZXRXWFN3YXBGZWVzAQRwb29sBAhwb29sQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAQJZkNvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHICEyVzX19mYWN0b3J5Q29udHJhY3QCIkNhbid0IGdldCBXWCBmYWN0b3J5IGNvbnRyYWN0IGFkZHIEDnBvb2xGZWVEZWZhdWx0CQEFdmFsdWUBCQCaCAIFDnd4U3dhcENvbnRyYWN0Agslc19fcG9vbEZlZQQScHJvdG9jb2xGZWVEZWZhdWx0CQEFdmFsdWUBCQCaCAIFDnd4U3dhcENvbnRyYWN0Ag8lc19fcHJvdG9jb2xGZWUEByRtYXRjaDAJAPwHBAUJZkNvbnRyYWN0AhJnZXRTd2FwRmVlUkVBRE9OTFkJAMwIAgkApQgBBQhwb29sQWRkcgUDbmlsBQNuaWwDCQABAgUHJG1hdGNoMAIKKEludCwgSW50KQQEZmVlcwUHJG1hdGNoMAkAlAoCCAUEZmVlcwJfMQgFBGZlZXMCXzIJAJQKAgUOcG9vbEZlZURlZmF1bHQFEnByb3RvY29sRmVlRGVmYXVsdAERY2FsY0Ftb3VudFRvUGF5V1gHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BA0kdDAxNzA0MjE3MDgxCQENZ2V0V1hTd2FwRmVlcwEFBHBvb2wEBHBGZWUIBQ0kdDAxNzA0MjE3MDgxAl8xBAVwckZlZQgFDSR0MDE3MDQyMTcwODECXzIECGZlZVNjYWxlCQC2AgEAgMLXLwQNJHQwMTcxMjExNzQyOQMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFEGFtb3VudFRva2VuVG9HZXQFBGJhbEIJAGUCBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQgQLYW1vdW50VG9QYXkJAGsDBRBhbW91bnRUb2tlblRvR2V0BQRiYWxBCQBlAgUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CAUNJHQwMTcxMjExNzQyOQJfMQQKYXNzZXRUb1BheQgFDSR0MDE3MTIxMTc0MjkCXzIEEmFtb3VudFRvUGF5V2l0aEZlZQkAoAMBCQC9AgQJALYCAQULYW1vdW50VG9QYXkFCGZlZVNjYWxlCQC4AgIFCGZlZVNjYWxlCQC2AgEJAGQCBQVwckZlZQUEcEZlZQUHQ0VJTElORwkAlAoCBQphc3NldFRvUGF5BRJhbW91bnRUb1BheVdpdGhGZWUBEGV4Y2hhbmdlRGlyZWN0bHkIBXBUeXBlBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0AwkAAAIFBXBUeXBlBQdTRl9QT09MBA0kdDAxNzc3NjE3ODk4CQERY2FsY0Ftb3VudFRvUGF5U0YHBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQFD2Fzc2V0VG9rZW5Ub0dldAQKYXNzZXRUb1BheQgFDSR0MDE3Nzc2MTc4OTgCXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTc3NzYxNzg5OAJfMgkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sAgxjYWxsRnVuY3Rpb24JAMwIAgIIZXhjaGFuZ2UJAMwIAgkAzAgCCQCkAwEFEGFtb3VudFRva2VuVG9HZXQFA25pbAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQphc3NldFRvUGF5BQthbW91bnRUb1BheQUDbmlsAwkAAAIFBXBUeXBlBQdXWF9QT09MBA0kdDAxODA5ODE4MjIwCQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQFD2Fzc2V0VG9rZW5Ub0dldAQKYXNzZXRUb1BheQgFDSR0MDE4MDk4MTgyMjACXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTgwOTgxODIyMAJfMgkA/AcEBQ53eFN3YXBDb250cmFjdAIEc3dhcAkAzAgCBRBhbW91bnRUb2tlblRvR2V0CQDMCAIFD2Fzc2V0VG9rZW5Ub0dldAkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQULYW1vdW50VG9QYXkFA25pbAkBD3Vua25vd25Qb29sVHlwZQABGmNhbGNXaXRoZHJhd0xQRnJvbVBvb2xWaXJ0BAhwb29sQWRkcgVwVHlwZQdzaGFyZUlkD3VzZXJDYW5XaXRoZHJhdwQNJHQwMTg1MDcxODk3MQMJAAACBQVwVHlwZQUHU0ZfUE9PTAQDaW52CgABQAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICEHdpdGhkcmF3UkVBRE9OTFkJAMwIAgkAzAgCCQCkAwEFD3VzZXJDYW5XaXRoZHJhdwUDbmlsBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUDaW52BQNpbnYJAJQKAgoAAUAJAJEDAgUDaW52AAADCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CgABQAkAkQMCBQNpbnYAAQMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUFcFR5cGUFB1dYX1BPT0wEA2ludgkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgITZXZhbHVhdGVHZXRSRUFET05MWQkAzAgCBQdzaGFyZUlkCQDMCAIFD3VzZXJDYW5XaXRoZHJhdwUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nAgJfXwMJAAACBQNpbnYFA2ludgkAlAoCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaW52AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNpbnYAAgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBD3Vua25vd25Qb29sVHlwZQAEB2Ftb3VudEEIBQ0kdDAxODUwNzE4OTcxAl8xBAdhbW91bnRCCAUNJHQwMTg1MDcxODk3MQJfMgkAlAoCBQdhbW91bnRBBQdhbW91bnRCAQtjbGFpbUZhcm1lZAIFcFR5cGUEcG9vbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACBWNsYWltCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQZTV09QSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUFcFR5cGUFB1dYX1BPT0wEDSR0MDE5MzM5MTk0MTgJAQ1nZXRXWFBvb2xEYXRhAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAQDYUlkCAUNJHQwMTkzMzkxOTQxOAJfMQQDYklkCAUNJHQwMTkzMzkxOTQxOAJfMgQEYUJhbAgFDSR0MDE5MzM5MTk0MTgCXzMEBGJCYWwIBQ0kdDAxOTMzOTE5NDE4Al80BARscElkCAUNJHQwMTkzMzkxOTQxOAJfNQQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQRXWElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sAgdjbGFpbVd4CQDMCAIFBGxwSWQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUEV1hJRAkAlAoCCQBlAgUIYmFsQWZ0ZXIFCWJhbEJlZm9yZQUEV1hJRAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBD3Vua25vd25Qb29sVHlwZQABD3JlcGxlbmlzaEJ5VHlwZQoFcFR5cGUEcG9vbAdmZWVUeXBlBHBtdEEDYUlkBHBtdEIDYklkBGJhbEEEYmFsQgRMUElkBA9scEJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUETFBJZAMJAAACBQ9scEJhbGFuY2VCZWZvcmUFD2xwQmFsYW5jZUJlZm9yZQQIcG9vbEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEDSR0MDIwMDE2MjA0MzIDAwkAZgIFBHBtdEEAAAkAZgIFBHBtdEIAAAcEDSR0MDIwMDgyMjAxOTgJARhjYWxjUmVwbGVuaXNoQnlUd29Ub2tlbnMIBQVwVHlwZQUIcG9vbEFkZHIFBHBtdEEFA2FJZAUEcG10QgUDYklkBQRiYWxBBQRiYWxCBAZwbXRJbkEIBQ0kdDAyMDA4MjIwMTk4Al8xBAZwbXRJbkIIBQ0kdDAyMDA4MjIwMTk4Al8yBAZjaGFuZ2UIBQ0kdDAyMDA4MjIwMTk4Al8zBAhjaGFuZ2VJZAgFDSR0MDIwMDgyMjAxOTgCXzQEA2ludgkBGHJlcGxlbmlzaFR3b1Rva2Vuc0J5VHlwZQYFCHBvb2xBZGRyBQVwVHlwZQUGcG10SW5BBQNhSWQFBnBtdEluQgUDYklkAwkAAAIFA2ludgUDaW52CQCUCgIFBmNoYW5nZQUIY2hhbmdlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQBmAgUEcG10QQAACQCUCgIFBHBtdEEFA2FJZAMJAGYCBQRwbXRCAAAJAJQKAgUEcG10QgUDYklkCQACAQIQcG10cyBtdXN0IGJlID4gMAQGY2hhbmdlCAUNJHQwMjAwMTYyMDQzMgJfMQQIY2hhbmdlSWQIBQ0kdDAyMDAxNjIwNDMyAl8yBANpbnYDCQBmAgUGY2hhbmdlAAAJARdyZXBsZW5pc2hPbmVUb2tlbkJ5VHlwZQQFCHBvb2xBZGRyBQVwVHlwZQUGY2hhbmdlBQhjaGFuZ2VJZAUDbmlsAwkAAAIFA2ludgUDaW52BA5scEJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQRMUElkBAt0b3RhbFN0YWtlZAkAZQIFDmxwQmFsYW5jZUFmdGVyBQ9scEJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBAVpbnZMUAkBB3N0YWtlTFAEBQRwb29sBQVwVHlwZQUETFBJZAURdXNlclNoYXJlRm9yU3Rha2UDCQAAAgUFaW52TFAFBWludkxQCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARByZXBsZW5pc2hFbnRyaWVzCARwb29sBHVzZXIMc3Rha2VkQW1vdW50DWF4bHlGZWVBbW91bnQGcG9zTnVtB3NoYXJlSWQEdHlwZQh3aXRoTG9hbgQLdG90YWxBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wED3RvdGFsQW1vdW50TG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBA0kdDAyMTI4OTIxNTI3AwUId2l0aExvYW4JAJQKAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkAZAIFD3RvdGFsQW1vdW50TG9hbgUMc3Rha2VkQW1vdW50CQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgUPdG90YWxBbW91bnRMb2FuBA9jdXJQb29sSW50ZXJlc3QIBQ0kdDAyMTI4OTIxNTI3Al8xBBN0b3RhbFN0YWtlZFdpdGhMb2FuCAUNJHQwMjEyODkyMTUyNwJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBkAgULdG90YWxBbW91bnQFDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgUTdG90YWxTdGFrZWRXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBQ1rVXNlclBvc2l0aW9uBQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUVa1VzZXJQb3NpdGlvbkludGVyZXN0BQ9jdXJQb29sSW50ZXJlc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FBnBvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUNYXhseUZlZUFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBDmV4Y2hhbmdlS2VlcGVyCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgRzd2FwCQDMCAIFCWFtb3VudHNJbgkAzAgCBQlhZGRyZXNzZXMJAMwIAgUPYXNzZXRzVG9SZWNlaXZlCQDMCAIFC2VzdFJlY2VpdmVkCQDMCAIFEXNsaXBwYWdlVG9sZXJhbmNlCQDMCAIFC21pblJlY2VpdmVkCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVB1enpsZQYHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgpwdXp6bGVTd2FwCQDMCAIFCXJvdXRlc1N0cgkAzAgCBQxtaW5Ub1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlU3dvcEZpCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldApleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0Agpzd29wZmlTd2FwCQDMCAIFCmV4Y2hhbmdlcnMJAMwIAgUOZXhjaGFuZ2Vyc1R5cGUJAMwIAgUFYXJnczEJAMwIAgUFYXJnczIJAMwIAgURcm91dGluZ0Fzc2V0c0tleXMJAMwIAgUSbWluQW1vdW50VG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQpjYXBpdGFsaXplBARwb29sBXBUeXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMjM4ODEyMzk0NwkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANBSWQIBQ0kdDAyMzg4MTIzOTQ3Al8xBANCSWQIBQ0kdDAyMzg4MTIzOTQ3Al8yBARiYWxBCAUNJHQwMjM4ODEyMzk0NwJfMwQEYmFsQggFDSR0MDIzODgxMjM5NDcCXzQEB3NoYXJlSWQIBQ0kdDAyMzg4MTIzOTQ3Al81AwMJAQIhPQIFB3Rva2VuSWQFA0FJZAkBAiE9AgUHdG9rZW5JZAUDQklkBwkAAgECC1dyb25nIGFzc2V0BBB0b3RhbFNoYXJlQW1vdW50CQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBBh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4JARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAQLbG9hblBlcmNlbnQJAGsDBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FBlNDQUxFOAUQdG90YWxTaGFyZUFtb3VudAQQdG9rZW5zRm9yRmVlTG9hbgkAawMFC3Rva2VuQW1vdW50BQtsb2FuUGVyY2VudAUGU0NBTEU4BBJ0b2tlbnNGb3JGZWVOb0xvYW4JAGUCBQt0b2tlbkFtb3VudAUQdG9rZW5zRm9yRmVlTG9hbgQLYXhseUZlZUxvYW4JAGsDBRB0b2tlbnNGb3JGZWVMb2FuCQEKZ2V0QXhseUZlZQIFBHBvb2wFDENBUF9GRUVfTE9BTgUKRkVFX1NDQUxFNgQNYXhseUZlZU5vTG9hbgkAawMFEnRva2Vuc0ZvckZlZU5vTG9hbgkBCmdldEF4bHlGZWUCBQRwb29sBQ9DQVBfRkVFX05PX0xPQU4FCkZFRV9TQ0FMRTYEB2F4bHlGZWUJAGQCBQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgQNJHQwMjQ1ODcyNDY4NwMJAAACBQd0b2tlbklkBQNBSWQJAJQKAgkAZQIFC3Rva2VuQW1vdW50BQdheGx5RmVlAAAJAJQKAgAACQBlAgULdG9rZW5BbW91bnQFB2F4bHlGZWUEBHBtdEEIBQ0kdDAyNDU4NzI0Njg3Al8xBARwbXRCCAUNJHQwMjQ1ODcyNDY4NwJfMgQNJHQwMjQ2OTAyNDc5NAkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQZOT19GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAxzdGFrZWRBbW91bnQIBQ0kdDAyNDY5MDI0Nzk0Al8xBAJuZggFDSR0MDI0NjkwMjQ3OTQCXzIEE2N1clBvb2xJbnRlcmVzdExvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgAABBVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAECnN0YWtlZExvYW4JAGsDBQxzdGFrZWRBbW91bnQFC2xvYW5QZXJjZW50BQZTQ0FMRTgEDHN0YWtlZE5vTG9hbgkAZQIFDHN0YWtlZEFtb3VudAUKc3Rha2VkTG9hbgQPbmV3SW50ZXJlc3RMb2FuAwkAZgIFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAACQBkAgUTY3VyUG9vbEludGVyZXN0TG9hbgkAawMFCnN0YWtlZExvYW4FB1NDQUxFMTAFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAABBFuZXdJbnRlcmVzdE5vTG9hbgMJAGYCCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAJAGQCBRVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4FB1NDQUxFMTAJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuBQ9uZXdJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgURbmV3SW50ZXJlc3ROb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZAIFEHRvdGFsU2hhcmVBbW91bnQFDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZAIFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUKc3Rha2VkTG9hbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUHYXhseUZlZQkA2QQBBQd0b2tlbklkBQNuaWwJAQ5nZXRDdXJzRW50cmllcwQFA0FJZAUDQklkBQdzaGFyZUlkBQNuaWwBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQEdXNlcgRwb29sBXBvc0lkCGJvcnJvd2VkBAdwQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBQ1rVXNlclBvc2l0aW9uAhBVbmtub3duIHBvc2l0aW9uBAx1c2VySW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0BAxwb29sSW50ZXJlc3QDBQhib3Jyb3dlZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuCQBkAgUHcEFtb3VudAkAawMFB3BBbW91bnQJAGUCBQxwb29sSW50ZXJlc3QFDHVzZXJJbnRlcmVzdAUHU0NBTEUxMAEPY2FsY1N0b3BMb3NzRmVlBARwb29sCmlzQm9ycm93ZWQIc3RvcExvc3MKbHBXaXRoZHJhdwQHZmVlVHlwZQMFCmlzQm9ycm93ZWQFDVNUT1BMT1NTX0xPQU4FFFNUT1BMT1NTX0ZFRV9OT19MT0FOAwUIc3RvcExvc3MJAGsDBQpscFdpdGhkcmF3CQEKZ2V0QXhseUZlZQIFBHBvb2wFB2ZlZVR5cGUFCkZFRV9TQ0FMRTYAAAEOd2l0aGRyYXdUb1VzZXIEBHVzZXIEcG9vbAVwb3NJZAhzdG9wTG9zcwQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQKaXNCb3Jyb3dlZAkAZgIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAAAAAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBXBvc0lkBQppc0JvcnJvd2VkBA5wb29sVG90YWxTaGFyZQkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQScG9vbFRvdGFsU2hhcmVMb2FuCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wECHVzZXJBZGRyCQEHQWRkcmVzcwEJANkEAQUEdXNlcgQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCDFVua25vd24gcG9vbAQNJHQwMjczMjUyNzM5NwkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBAZpZEFTdHIIBQ0kdDAyNzMyNTI3Mzk3Al8xBAZpZEJTdHIIBQ0kdDAyNzMyNTI3Mzk3Al8yBARiYWxBCAUNJHQwMjczMjUyNzM5NwJfMwQEYmFsQggFDSR0MDI3MzI1MjczOTcCXzQEB3NoYXJlSWQIBQ0kdDAyNzMyNTI3Mzk3Al81BA0kdDAyNzQwMDI3NDY3CQCUCgIJAQ5hc3NldElkRnJvbVN0cgEFBmlkQVN0cgkBDmFzc2V0SWRGcm9tU3RyAQUGaWRCU3RyBANpZEEIBQ0kdDAyNzQwMDI3NDY3Al8xBANpZEIIBQ0kdDAyNzQwMDI3NDY3Al8yBAtzdG9wTG9zc0ZlZQkBD2NhbGNTdG9wTG9zc0ZlZQQFBHBvb2wFCmlzQm9ycm93ZWQFCHN0b3BMb3NzBQ91c2VyQ2FuV2l0aGRyYXcEC2NCYWxBQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQNpZEEDCQAAAgULY0JhbEFCZWZvcmUFC2NCYWxBQmVmb3JlBAtjQmFsQkJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUDaWRCAwkAAAIFC2NCYWxCQmVmb3JlBQtjQmFsQkJlZm9yZQQDaW52AwkAAAIFBXBUeXBlBQdTRl9QT09MBANpbnYJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAULc3RvcExvc3NGZWUDCQAAAgUDaW52BQNpbnYJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAgh3aXRoZHJhdwkAzAgCCQDMCAIJAKQDAQUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBXBUeXBlBQdXWF9QT09MBANpbnYJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAkAZAIFD3VzZXJDYW5XaXRoZHJhdwULc3RvcExvc3NGZWUDCQAAAgUDaW52BQNpbnYJAPwHBAUIcG9vbEFkZHICA2dldAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQdzaGFyZUlkBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBD3Vua25vd25Qb29sVHlwZQADCQAAAgUDaW52BQNpbnYECmNCYWxBQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFA2lkQQMJAAACBQpjQmFsQUFmdGVyBQpjQmFsQUFmdGVyBApjQmFsQkFmdGVyCQEOYWNjb3VudEJhbGFuY2UBBQNpZEIDCQAAAgUKY0JhbEJBZnRlcgUKY0JhbEJBZnRlcgQNJHQwMjgxNjIyODI1MQkAlAoCCQBlAgUKY0JhbEFBZnRlcgULY0JhbEFCZWZvcmUJAGUCBQpjQmFsQkFmdGVyBQtjQmFsQkJlZm9yZQQNdG9rZW5zQW1vdW50QQgFDSR0MDI4MTYyMjgyNTECXzEEDXRva2Vuc0Ftb3VudEIIBQ0kdDAyODE2MjI4MjUxAl8yBA0kdDAyODI1NDI5NDkwAwUKaXNCb3Jyb3dlZAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBARkZWJ0CgABQAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAgxnZXRBc3NldERlYnQJAMwIAgcJAMwIAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkCQDMCAIFC2JvcnJvd0Fzc2V0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUEZGVidAUEZGVidAQNYW1vdW50VG9HZXRFeAMDCQAAAgULYm9ycm93QXNzZXQFBmlkQVN0cgkAZgIFBGRlYnQFDXRva2Vuc0Ftb3VudEEHCQBlAgUEZGVidAUNdG9rZW5zQW1vdW50QQMDCQAAAgULYm9ycm93QXNzZXQFBmlkQlN0cgkAZgIFBGRlYnQFDXRva2Vuc0Ftb3VudEIHCQBlAgUEZGVidAUNdG9rZW5zQW1vdW50QgAABAVleEludgMJAGYCBQ1hbW91bnRUb0dldEV4AAAJARBleGNoYW5nZURpcmVjdGx5CAUFcFR5cGUFBHBvb2wFBmlkQVN0cgUGaWRCU3RyCQBlAgUEYmFsQQUNdG9rZW5zQW1vdW50QQkAZQIFBGJhbEIFDXRva2Vuc0Ftb3VudEIFDWFtb3VudFRvR2V0RXgFC2JvcnJvd0Fzc2V0BQNuaWwDCQAAAgUFZXhJbnYFBWV4SW52BA9jQmFsQUFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEFA2lkQQMJAAACBQ9jQmFsQUFmdGVyUmVwYXkFD2NCYWxBQWZ0ZXJSZXBheQQPY0JhbEJBZnRlclJlcGF5CQEOYWNjb3VudEJhbGFuY2UBBQNpZEIDCQAAAgUPY0JhbEJBZnRlclJlcGF5BQ9jQmFsQkFmdGVyUmVwYXkEC2Nsb3NlRGJ0SW52AwkAZgIFBGRlYnQAAAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAghyZXBheUZvcgkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQULYm9ycm93QXNzZXQFBGRlYnQFA25pbAAAAwkAAAIFC2Nsb3NlRGJ0SW52BQtjbG9zZURidEludgMJAAACBQtib3Jyb3dBc3NldAUGaWRBU3RyCQCUCgIJAGUCCQBlAgUPY0JhbEFBZnRlclJlcGF5BQtjQmFsQUJlZm9yZQUEZGVidAkAZQIFD2NCYWxCQWZ0ZXJSZXBheQULY0JhbEJCZWZvcmUJAJQKAgkAZQIFD2NCYWxBQWZ0ZXJSZXBheQULY0JhbEFCZWZvcmUJAGUCCQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQUEZGVidAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQ10b2tlbnNBbW91bnRBBQ10b2tlbnNBbW91bnRCBAd0b1VzZXJBCAUNJHQwMjgyNTQyOTQ5MAJfMQQHdG9Vc2VyQggFDSR0MDI4MjU0Mjk0OTACXzIEFHBvb2xUb3RhbExvYW5FbnRyaWVzAwUKaXNCb3Jyb3dlZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJAGUCBRJwb29sVG90YWxTaGFyZUxvYW4FD3VzZXJDYW5XaXRoZHJhdwULc3RvcExvc3NGZWUFA25pbAUDbmlsBAdlbnRyaWVzCQDOCAIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyUG9zaXRpb25Qb29sCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAURa1VzZXJCb3Jyb3dBbW91bnQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRJrVXNlckJvcnJvd0Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJAGUCBQ5wb29sVG90YWxTaGFyZQUPdXNlckNhbldpdGhkcmF3BQtzdG9wTG9zc0ZlZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQh1c2VyQWRkcgUHdG9Vc2VyQQUDaWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQd0b1VzZXJCBQNpZEIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gFC3N0b3BMb3NzRmVlCQDZBAEFB3NoYXJlSWQFA25pbAUUcG9vbFRvdGFsTG9hbkVudHJpZXMJAQ5nZXRDdXJzRW50cmllcwQFBmlkQVN0cgUGaWRCU3RyBQdzaGFyZUlkBQNuaWwJAJQKAgUHZW50cmllcwkAzAgCBQd0b1VzZXJBCQDMCAIFB3RvVXNlckIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEMcGFyc2VSZXF1ZXN0AQlyZXF1ZXN0SWQEB3JlcXVlc3QJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkCQCsAgICE05vIHJlcXVlc3Qgd2l0aCBpZCAFCXJlcXVlc3RJZAIBLAQEdXNlcgkAkQMCBQdyZXF1ZXN0AAAEBHBvb2wJAJEDAgUHcmVxdWVzdAABBARwbXRBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAACBANBSWQJAJEDAgUHcmVxdWVzdAADBARwbXRCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAEBANCSWQJAJEDAgUHcmVxdWVzdAAFBARiYWxBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAGBARiYWxCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAHBAdzaGFyZUlkCQCRAwIFB3JlcXVlc3QACAQHYndBc3NldAkAkQMCBQdyZXF1ZXN0AAkECGJ3QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAKCQCdCgsFBHVzZXIFBHBvb2wFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBQdid0Fzc2V0BQhid0Ftb3VudAEQY2FsY0JvcnJvd0Ftb3VudAYEcG10QQRwbXRCA2FJZANiSWQIbGV2ZXJhZ2UIYm9ycm93SWQDAwkBAiE9AgUIYm9ycm93SWQFA2FJZAkBAiE9AgUIYm9ycm93SWQFA2JJZAcJAAIBAhJXcm9uZyBib3Jyb3cgYXNzZXQEB2RQcmljZUEJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNhSWQFDmtQcmljZUluT3JhY2xlBAdkUHJpY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUDYklkBQ5rUHJpY2VJbk9yYWNsZQQGZGVjUHJBCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYUlkAAAAAAUERE9XTgQGZGVjUHJCCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYklkAAAAAAUERE9XTgQMcGF5ZEluRG9sbGFyCQBkAgkAawMFB2RQcmljZUEFBHBtdEEFBmRlY1ByQQkAawMFB2RQcmljZUIFBHBtdEIFBmRlY1ByQgQNJHQwMzE0NzIzMTU2OQMJAAACBQhib3Jyb3dJZAUDYUlkCQCUCgIFB2RQcmljZUEFBmRlY1ByQQkAlAoCBQdkUHJpY2VCBQZkZWNQckIEC2JvcnJvd1ByaWNlCAUNJHQwMzE0NzIzMTU2OQJfMQQLYm9ycm93RGVjUHIIBQ0kdDAzMTQ3MjMxNTY5Al8yCQBrAwkAawMFDHBheWRJbkRvbGxhcgkAZQIFCGxldmVyYWdlAGQAZAULYm9ycm93RGVjUHIFC2JvcnJvd1ByaWNlARJwYXJzZVJlcGxlbmlzaFBtdHMDBHBtdHMDQUlkA0JJZAMJAAACCQCQAwEFBHBtdHMAAgMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCBQRwbXRzAAAHYXNzZXRJZAUDQUlkCQACAQIVV3JvbmcgcGF5bWVudCBhc3NldCBBAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIFBHBtdHMAAQdhc3NldElkBQNCSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEIJAJQKAggJAJEDAgUEcG10cwAABmFtb3VudAgJAJEDAgUEcG10cwABBmFtb3VudAMJAAACCQCQAwEFBHBtdHMAAQMJAAACCQEMYXNzZXRJZFRvU3RyAQgJAJEDAgUEcG10cwAAB2Fzc2V0SWQFA0FJZAkAlAoCCAkAkQMCBQRwbXRzAAAGYW1vdW50AAADCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIFBHBtdHMAAAdhc3NldElkBQNCSWQJAJQKAgAACAkAkQMCBQRwbXRzAAAGYW1vdW50CQACAQINV3JvbmcgcGF5bWVudAkAAgECHE9uZSBvciB0d28gcGF5bWVudHMgZXhwZWN0ZWQBD2NhbGNQcmljZUltcGFjdAQEYmFsQQRiYWxCB25ld0JhbEEHbmV3QmFsQgQDcHJpCQBoAgkAZQIFBlNDQUxFOAkAawMJAGsDBQRiYWxCBQZTQ0FMRTgFBGJhbEEFBlNDQUxFOAkAawMFB25ld0JhbEIFBlNDQUxFOAUHbmV3QmFsQQBkAwkAZgIAAAUDcHJpCQBoAgUDcHJpAP///////////wEFA3ByaQERY2xhaW1BbmRDaGVja0FtbnQFBHBvb2wFcFR5cGUFY2xhaW0GYW1vdW50BmNoYW5nZQQNJHQwMzI1NjkzMjgyOAMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQVwVHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBXBUeXBlBQdTRl9QT09MBQZTV09QSUQDCQAAAgUFcFR5cGUFB1dYX1BPT0wFBFdYSUQJAQ91bmtub3duUG9vbFR5cGUACQCUCgIFBmFtb3VudAUMY2xhaW1lZEFzc2V0BAtjbGFpbUFtb3VudAgFDSR0MDMyNTY5MzI4MjgCXzEECmNsYWltQXNzZXQIBQ0kdDAzMjU2OTMyODI4Al8yBANiYWwJAQ5hY2NvdW50QmFsYW5jZQEFCmNsYWltQXNzZXQDAwkAZgIFBmFtb3VudAkAZAIFC2NsYWltQW1vdW50BQZjaGFuZ2UGCQBmAgUGYW1vdW50BQNiYWwJAAIBAhlUbyBiaWcgYW1vdW50IHRvIGV4Y2hhbmdlCQCUCgIFC2NsYWltQW1vdW50BQpjbGFpbUFzc2V0HQFpARNnZXRQb29sSW5mb1JFQURPTkxZAQRwb29sBAhwb29sQWRkcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDMzMjI1MzMzMTUJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzMyMjUzMzMxNQJfMQQDQklkCAUNJHQwMzMyMjUzMzMxNQJfMgQEYmFsQQgFDSR0MDMzMjI1MzMzMTUCXzMEBGJhbEIIBQ0kdDAzMzIyNTMzMzE1Al80BAdzaGFyZUlkCAUNJHQwMzMyMjUzMzMxNQJfNQQLc2hhcmVTdXBwbHkJAQ5nZXRTaGFyZVN1cHBseQMFCHBvb2xBZGRyBQVwVHlwZQUHc2hhcmVJZAkAlAoCBQNuaWwJAJgKBgUDQUlkBQNCSWQFB3NoYXJlSWQFBGJhbEEFBGJhbEIFC3NoYXJlU3VwcGx5AWkBGmdldFNoYXJlQXNzZXRQcmljZVJFQURPTkxZAQdzaGFyZUlkBAtzaGFyZVByaWNlcwkBDWdldFNoYXJlUHJpY2UBBQdzaGFyZUlkCQCUCgIFA25pbAULc2hhcmVQcmljZXMBaQEiZ2V0VXNlclBvc2l0aW9uU2hhcmVBbW91bnRSRUFET05MWQIEdXNlcgZwb3NOdW0EBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sAhBVbmtub3duIHBvc2l0aW9uBAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyQm9ycm93QW1vdW50BA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQZwb3NOdW0JAGYCBQxib3Jyb3dBbW91bnQAAAkAlAoCBQNuaWwFD3VzZXJDYW5XaXRoZHJhdwFpARdnZXRVc2VyUG9zaXRpb25SRUFET05MWQMEdXNlcgVwb29scwZwb3NOdW0KAQd1c2VyUG9zAgFhBHBvb2wEDSR0MDM0MTg4MzQyNTgFAWEECXdBbW91bnRzQQgFDSR0MDM0MTg4MzQyNTgCXzEECXdBbW91bnRzQggFDSR0MDM0MTg4MzQyNTgCXzIEBWRlYnRzCAUNJHQwMzQxODgzNDI1OAJfMwQLZXFXQW1vdW50c0EIBQ0kdDAzNDE4ODM0MjU4Al80BAtlcVdBbW91bnRzQggFDSR0MDM0MTg4MzQyNTgCXzUEBWluZGV4CAUNJHQwMzQxODgzNDI1OAJfNgMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAJEDAgUGcG9zTnVtBQVpbmRleAUNa1VzZXJQb3NpdGlvbgkAmAoGCQDNCAIFCXdBbW91bnRzQQAACQDNCAIFCXdBbW91bnRzQgAACQDNCAIFBWRlYnRzAAAJAM0IAgULZXFXQW1vdW50c0EAAAkAzQgCBQtlcVdBbW91bnRzQgAACQBkAgUFaW5kZXgAAQQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDM0NTM3MzQ2MjcJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzQ1MzczNDYyNwJfMQQDQklkCAUNJHQwMzQ1MzczNDYyNwJfMgQEYmFsQQgFDSR0MDM0NTM3MzQ2MjcCXzMEBGJhbEIIBQ0kdDAzNDUzNzM0NjI3Al80BAdzaGFyZUlkCAUNJHQwMzQ1MzczNDYyNwJfNQQMYm9ycm93QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCRAwIFBnBvc051bQUFaW5kZXgFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wJAJEDAgUGcG9zTnVtBQVpbmRleAkAZgIFDGJvcnJvd0Ftb3VudAAABA0kdDAzNDg0MzM0OTYzCQEaY2FsY1dpdGhkcmF3TFBGcm9tUG9vbFZpcnQECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFB3NoYXJlSWQFD3VzZXJDYW5XaXRoZHJhdwQId0Ftb3VudEEIBQ0kdDAzNDg0MzM0OTYzAl8xBAh3QW1vdW50QggFDSR0MDM0ODQzMzQ5NjMCXzIDCQBmAgUMYm9ycm93QW1vdW50AAAEC2JvcnJvd0Fzc2V0CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkAkQMCBQZwb3NOdW0FBWluZGV4BRJrVXNlckJvcnJvd0Fzc2V0SWQEBGRlYnQKAAFACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACDGdldEFzc2V0RGVidAkAzAgCBwkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwkAkQMCBQZwb3NOdW0FBWluZGV4CQDMCAIFC2JvcnJvd0Fzc2V0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUEZGVidAUEZGVidAQNYW1vdW50VG9HZXRFeAMDCQAAAgULYm9ycm93QXNzZXQFA0FJZAkAZgIFBGRlYnQFCHdBbW91bnRBBwkAZQIFBGRlYnQFCHdBbW91bnRBAwMJAAACBQtib3Jyb3dBc3NldAUDQklkCQBmAgUEZGVidAUId0Ftb3VudEIHCQBlAgUEZGVidAUId0Ftb3VudEIAAAQLYW1vdW50VG9QYXkDCQBmAgUNYW1vdW50VG9HZXRFeAAAAwkAAAIFBXBUeXBlBQdTRl9QT09MBAJleAkBEWNhbGNBbW91bnRUb1BheVNGBwUEcG9vbAUDQUlkBQNCSWQFBGJhbEEFBGJhbEIFDWFtb3VudFRvR2V0RXgFC2JvcnJvd0Fzc2V0CAUCZXgCXzIDCQAAAgUFcFR5cGUFB1dYX1BPT0wEAmV4CQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQNBSWQFA0JJZAUEYmFsQQUEYmFsQgUNYW1vdW50VG9HZXRFeAULYm9ycm93QXNzZXQIBQJleAJfMgkBD3Vua25vd25Qb29sVHlwZQAAAAQNJHQwMzU4NzUzNjA5NAMJAAACBQtib3Jyb3dBc3NldAUDQUlkCQCUCgIJAGUCCQBkAgUId0Ftb3VudEEFDWFtb3VudFRvR2V0RXgFBGRlYnQJAGUCBQh3QW1vdW50QgULYW1vdW50VG9QYXkJAJQKAgkAZQIFCHdBbW91bnRBBQthbW91bnRUb1BheQkAZQIJAGQCBQh3QW1vdW50QgUNYW1vdW50VG9HZXRFeAUEZGVidAQKZXFXQW1vdW50QQgFDSR0MDM1ODc1MzYwOTQCXzEECmVxV0Ftb3VudEIIBQ0kdDAzNTg3NTM2MDk0Al8yCQCYCgYJAM0IAgUJd0Ftb3VudHNBBQh3QW1vdW50QQkAzQgCBQl3QW1vdW50c0IFCHdBbW91bnRCCQDNCAIFBWRlYnRzBQRkZWJ0CQDNCAIFC2VxV0Ftb3VudHNBBQplcVdBbW91bnRBCQDNCAIFC2VxV0Ftb3VudHNCBQplcVdBbW91bnRCCQBkAgUFaW5kZXgAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAmAoGCQDNCAIFCXdBbW91bnRzQQUId0Ftb3VudEEJAM0IAgUJd0Ftb3VudHNCBQh3QW1vdW50QgUFZGVidHMJAM0IAgUJd0Ftb3VudHNBBQh3QW1vdW50QQkAzQgCBQl3QW1vdW50c0IFCHdBbW91bnRCCQBkAgUFaW5kZXgAAQQNJHQwMzYzNDkzNjQ2MAoAAiRsBQVwb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJgKBgUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXNlclBvcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBAl3QW1vdW50c0EIBQ0kdDAzNjM0OTM2NDYwAl8xBAl3QW1vdW50c0IIBQ0kdDAzNjM0OTM2NDYwAl8yBAVkZWJ0cwgFDSR0MDM2MzQ5MzY0NjACXzMEC2VxV0Ftb3VudHNBCAUNJHQwMzYzNDkzNjQ2MAJfNAQLZXFXQW1vdW50c0IIBQ0kdDAzNjM0OTM2NDYwAl81CQCUCgIFA25pbAkAlwoFBQl3QW1vdW50c0EFCXdBbW91bnRzQgUFZGVidHMFC2VxV0Ftb3VudHNBBQtlcVdBbW91bnRzQgFpAQlyZXBsZW5pc2gDBHBvb2wIbGV2ZXJhZ2UIYm9ycm93SWQJAQt2YWx1ZU9yRWxzZQIJARBpc0FjdGl2ZUZvclVzZXJzAAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQDCQEBIQEJAQxpc1Bvb2xBY3RpdmUCBQRwb29sBQVwVHlwZQkAAgECHlBvb2wgbm90IGFjdGl2ZSBhdCB0aGlzIG1vbWVudAMDCQBmAgBkBQhsZXZlcmFnZQYJAGYCBQhsZXZlcmFnZQCsAgkAAgECH0xldmVyYWdlIGNhbid0IGJlIDwxMDAgYW5kID4zMDADAwkBASEBCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FuQm9ycm93CQBmAgUIbGV2ZXJhZ2UAZAcJAAIBAh1Zb3UgY2FuJ3QgYm9ycm93IGluIHRoaXMgcG9vbAQNJHQwMzcwNTgzNzE0OAkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBANBSWQIBQ0kdDAzNzA1ODM3MTQ4Al8xBANCSWQIBQ0kdDAzNzA1ODM3MTQ4Al8yBARiYWxBCAUNJHQwMzcwNTgzNzE0OAJfMwQEYmFsQggFDSR0MDM3MDU4MzcxNDgCXzQEB3NoYXJlSWQIBQ0kdDAzNzA1ODM3MTQ4Al81AwMJAQIhPQIFCGJvcnJvd0lkBQNBSWQJAQIhPQIFCGJvcnJvd0lkBQNCSWQHCQACAQISV3JvbmcgYm9ycm93IGFzc2V0BA0kdDAzNzIyOTM3Mjg4CQEScGFyc2VSZXBsZW5pc2hQbXRzAwgFAWkIcGF5bWVudHMFA0FJZAUDQklkBARwbXRBCAUNJHQwMzcyMjkzNzI4OAJfMQQEcG10QggFDSR0MDM3MjI5MzcyODgCXzIEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAluZXdQb3NOdW0JARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXIBBQR1c2VyAwkAZgIFCGxldmVyYWdlAGQEDGJvcnJvd0Ftb3VudAkBEGNhbGNCb3Jyb3dBbW91bnQGBQRwbXRBBQRwbXRCBQNBSWQFA0JJZAUIbGV2ZXJhZ2UFCGJvcnJvd0lkBAdyZXF1ZXN0CQC5CQIJAMwIAgUEdXNlcgkAzAgCBQRwb29sCQDMCAIJAKQDAQUEcG10QQkAzAgCBQNBSWQJAMwIAgkApAMBBQRwbXRCCQDMCAIFA0JJZAkAzAgCCQCkAwEFBGJhbEEJAMwIAgkApAMBBQRiYWxCCQDMCAIFB3NoYXJlSWQJAMwIAgUIYm9ycm93SWQJAMwIAgkApAMBBQxib3Jyb3dBbW91bnQFA25pbAIBLAQMbmV3UmVxdWVzdElkCgABQAkA/AcEBQR0aGlzAhBjcmVhdGVOZXdSZXF1ZXN0CQDMCAIFB3JlcXVlc3QFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQxuZXdSZXF1ZXN0SWQFDG5ld1JlcXVlc3RJZAQEYXJncwkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQluZXdQb3NOdW0JAMwIAgUHc2hhcmVJZAkAzAgCBQhib3Jyb3dJZAkAzAgCBQxib3Jyb3dBbW91bnQJAMwIAgkApQgBBQR0aGlzCQDMCAICEXJlcGxlbmlzaEZyb21MYW5kCQDMCAIJAKQDAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQxuZXdSZXF1ZXN0SWQCGENhbid0IGNyZWF0ZSBuZXcgcmVxdWVzdAUDbmlsBANpbnYJAP0HBAkBDmdldExlbmRTcnZBZGRyAAINZmxhc2hQb3NpdGlvbgUEYXJncwUDbmlsAwkAAAIFA2ludgUDaW52BAp1c2VyU3Rha2VkCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQluZXdQb3NOdW0FDWtVc2VyUG9zaXRpb24EDSR0MDM4Mjc3MzgzNzEJAQ9nZXRQb29sQmFsYW5jZXMECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFA0FJZAUDQklkAwkAAAIFDSR0MDM4Mjc3MzgzNzEFDSR0MDM4Mjc3MzgzNzEEB25ld0JhbEIIBQ0kdDAzODI3NzM4MzcxAl8yBAduZXdCYWxBCAUNJHQwMzgyNzczODM3MQJfMQQIcHJJbXBhY3QJAQ9jYWxjUHJpY2VJbXBhY3QEBQRiYWxBBQRiYWxCBQduZXdCYWxBBQduZXdCYWxCBA0kdDAzODQ0MTM4NTU2CQEaY2FsY1dpdGhkcmF3TFBGcm9tUG9vbFZpcnQECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFB3NoYXJlSWQFCnVzZXJTdGFrZWQECHdBbW91bnRBCAUNJHQwMzg0NDEzODU1NgJfMQQId0Ftb3VudEIIBQ0kdDAzODQ0MTM4NTU2Al8yCQCUCgIFA25pbAkAzAgCBQhwckltcGFjdAkAzAgCBQh3QW1vdW50QQkAzAgCBQh3QW1vdW50QgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAzODYwOTM4NzI0CQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFC05PX0xPQU5fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAMJAAACBQ0kdDAzODYwOTM4NzI0BQ0kdDAzODYwOTM4NzI0BAdheGx5RmVlCAUNJHQwMzg2MDkzODcyNAJfMgQKdXNlclN0YWtlZAgFDSR0MDM4NjA5Mzg3MjQCXzEEDSR0MDM4NzMwMzg4MjQJAQ9nZXRQb29sQmFsYW5jZXMECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFA0FJZAUDQklkAwkAAAIFDSR0MDM4NzMwMzg4MjQFDSR0MDM4NzMwMzg4MjQEB25ld0JhbEIIBQ0kdDAzODczMDM4ODI0Al8yBAduZXdCYWxBCAUNJHQwMzg3MzAzODgyNAJfMQQIcHJJbXBhY3QJAQ9jYWxjUHJpY2VJbXBhY3QEBQRiYWxBBQRiYWxCBQduZXdCYWxBBQduZXdCYWxCBA0kdDAzODg5NDM5MDA5CQEaY2FsY1dpdGhkcmF3TFBGcm9tUG9vbFZpcnQECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFB3NoYXJlSWQFCnVzZXJTdGFrZWQECHdBbW91bnRBCAUNJHQwMzg4OTQzOTAwOQJfMQQId0Ftb3VudEIIBQ0kdDAzODg5NDM5MDA5Al8yCQCUCgIJAM4IAgkBEHJlcGxlbmlzaEVudHJpZXMIBQRwb29sBQR1c2VyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQluZXdQb3NOdW0FB3NoYXJlSWQFBXBUeXBlBwkBDmdldEN1cnNFbnRyaWVzBAUDQUlkBQNCSWQFB3NoYXJlSWQJAMwIAgkApAMBBQh3QW1vdW50QQkAzAgCCQCkAwEFCHdBbW91bnRCBQNuaWwJAMwIAgUIcHJJbXBhY3QJAMwIAgUId0Ftb3VudEEJAMwIAgUId0Ftb3VudEIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwIEcG9vbAVwb3NJZAkBC3ZhbHVlT3JFbHNlAgkBEGlzQWN0aXZlRm9yVXNlcnMABAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAMJAQEhAQkBDGlzUG9vbEFjdGl2ZQIFBHBvb2wFBXBUeXBlCQACAQIeUG9vbCBub3QgYWN0aXZlIGF0IHRoaXMgbW9tZW50CQEOd2l0aGRyYXdUb1VzZXIECQClCAEIBQFpBmNhbGxlcgUEcG9vbAkApAMBBQVwb3NJZAcBaQEUY3JlYXRlVXBkYXRlU3RvcExvc3MEBXBvc0lkBnBvb2xJZAdhc3NldElkBXByaWNlCQELdmFsdWVPckVsc2UCCQEQaXNBY3RpdmVGb3JVc2VycwAEEHRva2VuT3JhY2xlUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQdhc3NldElkBQ5rUHJpY2VJbk9yYWNsZQQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQZwb29sSWQCElBvb2wgaXMgbm90IGluaXRlZAMJAQEhAQkBDGlzUG9vbEFjdGl2ZQIFBnBvb2xJZAUFcFR5cGUJAAIBAh5Qb29sIG5vdCBhY3RpdmUgYXQgdGhpcyBtb21lbnQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQZwb29sSWQCAV8JAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFBXBvc0lkBQ1rVXNlclBvc2l0aW9uCQACAQIaVGhlcmUgYXJlIG5vIHVzZXIgcG9zaXRpb24DCQBnAgAABQVwcmljZQkAAgECHFByaWNlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgUFcHJpY2UFEHRva2VuT3JhY2xlUHJpY2UJAAIBAitQcmljZSBtdXN0IGJlIGxlc3MgdGhhbiBjdXJyZW50IHRva2VuIHByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFBXBvc0lkAgFfBQZwb29sSWQCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MFBXByaWNlBQNuaWwBaQEOZGVsZXRlU3RvcExvc3MDBXBvc0lkBnBvb2xJZAdhc3NldElkCQELdmFsdWVPckVsc2UCCQEQaXNBY3RpdmVGb3JVc2VycwAEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUGcG9vbElkAhJQb29sIGlzIG5vdCBpbml0ZWQDCQEBIQEJAQxpc1Bvb2xBY3RpdmUCBQZwb29sSWQFBXBUeXBlCQACAQIeUG9vbCBub3QgYWN0aXZlIGF0IHRoaXMgbW9tZW50AwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFBXBvc0lkAgFfBQZwb29sSWQCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MJAAIBAghObyBlbnRyeQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFBXBvc0lkAgFfBQZwb29sSWQCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MFA25pbAFpAQRpbml0DQxtb25leUJveEFkZHINc2ZGYXJtaW5nQWRkcghsZW5kQWRkcg9wcmljZU9yYWNsZUFkZHIQa2VlcGVyRXhDb250cmFjdA53eFN3YXBDb250cmFjdAtzd29wQXNzZXRJZAl3eEFzc2V0SWQOb3BlcmF0b3JQdWJLZXkSZ3JvdXAxQWRtaW4xUHViS2V5Emdyb3VwMUFkbWluMlB1YktleRJncm91cDJBZG1pbjFQdWJLZXkSZ3JvdXAyQWRtaW4yUHViS2V5CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkDCQEJaXNEZWZpbmVkAQkAoggBBQ9rT3BlcmF0b3JDYWxsUEsJAAIBAg5BbHJlYWR5IGluaXRlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUMbW9uZXlCb3hBZGRyCQACAQIjbW9uZXlCb3hBZGRyIGlzIG5vdCBjb3JyZWN0IGFkZHJlc3MDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFDXNmRmFybWluZ0FkZHIJAAIBAiRzZkZhcm1pbmdBZGRyIGlzIG5vdCBjb3JyZWN0IGFkZHJlc3MDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCGxlbmRBZGRyCQACAQIfbGVuZEFkZHIgaXMgbm90IGNvcnJlY3QgYWRkcmVzcwMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUPcHJpY2VPcmFjbGVBZGRyCQACAQImcHJpY2VPcmFjbGVBZGRyIGlzIG5vdCBjb3JyZWN0IGFkZHJlc3MDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFEGtlZXBlckV4Q29udHJhY3QJAAIBAidrZWVwZXJFeENvbnRyYWN0IGlzIG5vdCBjb3JyZWN0IGFkZHJlc3MDCQEBIQEJAQlpc0RlZmluZWQBCQDsBwEJANkEAQULc3dvcEFzc2V0SWQJAAIBAiNzd29wQXNzZXRJZCBpcyBub3QgY29ycmVjdCBhc3NldCBpZAMJAQEhAQkBCWlzRGVmaW5lZAEJAOwHAQkA2QQBBQl3eEFzc2V0SWQJAAIBAiNzd29wQXNzZXRJZCBpcyBub3QgY29ycmVjdCBhc3NldCBpZAMJAQIhPQIJAMgBAQkA2QQBBQ5vcGVyYXRvclB1YktleQAgCQACAQIdb3BlcmF0b3JQdWJLZXkgaXMgbm90IGNvcnJlY3QDCQECIT0CCQDIAQEJANkEAQUSZ3JvdXAxQWRtaW4xUHViS2V5ACAJAAIBAiFncm91cDFBZG1pbjFQdWJLZXkgaXMgbm90IGNvcnJlY3QDCQECIT0CCQDIAQEJANkEAQUSZ3JvdXAxQWRtaW4yUHViS2V5ACAJAAIBAiFncm91cDFBZG1pbjJQdWJLZXkgaXMgbm90IGNvcnJlY3QDCQECIT0CCQDIAQEJANkEAQUSZ3JvdXAyQWRtaW4xUHViS2V5ACAJAAIBAiFncm91cDJBZG1pbjFQdWJLZXkgaXMgbm90IGNvcnJlY3QDCQECIT0CCQDIAQEJANkEAQUSZ3JvdXAyQWRtaW4yUHViS2V5ACAJAAIBAiFncm91cDJBZG1pbjJQdWJLZXkgaXMgbm90IGNvcnJlY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa01vbmV5Qm94BQxtb25leUJveEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUOa1NGRmFybWluZ0FkZHIFDXNmRmFybWluZ0FkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa0xlbmRTZXJ2aWNlBQhsZW5kQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQxrUHJpY2VPcmFjbGUFD3ByaWNlT3JhY2xlQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQtrRXhDb250cmFjdAUQa2VlcGVyRXhDb250cmFjdAkAzAgCCQELU3RyaW5nRW50cnkCBQ9rV3hTd2FwQ29udHJhY3QFDnd4U3dhcENvbnRyYWN0CQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tTd29wSWQFC3N3b3BBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWtXeElkBQl3eEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa09wZXJhdG9yQ2FsbFBLBQ5vcGVyYXRvclB1YktleQkAzAgCCQELU3RyaW5nRW50cnkCBQ9rR3JvdXAxQWRtaW4xUEsFEmdyb3VwMUFkbWluMVB1YktleQkAzAgCCQELU3RyaW5nRW50cnkCBQ9rR3JvdXAxQWRtaW4yUEsFEmdyb3VwMUFkbWluMlB1YktleQkAzAgCCQELU3RyaW5nRW50cnkCBQ9rR3JvdXAyQWRtaW4xUEsFEmdyb3VwMkFkbWluMVB1YktleQkAzAgCCQELU3RyaW5nRW50cnkCBQ9rR3JvdXAyQWRtaW4yUEsFEmdyb3VwMkFkbWluMlB1YktleQUDbmlsAWkBEGNyZWF0ZU5ld1JlcXVlc3QBBnBhcmFtcwkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAxuZXdSZXF1ZXN0SWQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtSZXF1ZXN0SXRlcgAAAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQUMbmV3UmVxdWVzdElkBQprUmVxdWVzdElkBQZwYXJhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtSZXF1ZXN0SXRlcgUMbmV3UmVxdWVzdElkBQNuaWwFDG5ld1JlcXVlc3RJZAFpARFyZXBsZW5pc2hGcm9tTGFuZAEJcmVxdWVzdElkCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEKaXNMYW5kQ2FsbAEFAWkEDSR0MDQzODQ4NDM5NTIJAQxwYXJzZVJlcXVlc3QBBQlyZXF1ZXN0SWQEBHVzZXIIBQ0kdDA0Mzg0ODQzOTUyAl8xBARwb29sCAUNJHQwNDM4NDg0Mzk1MgJfMgQEcG10QQgFDSR0MDQzODQ4NDM5NTICXzMEA0FJZAgFDSR0MDQzODQ4NDM5NTICXzQEBHBtdEIIBQ0kdDA0Mzg0ODQzOTUyAl81BANCSWQIBQ0kdDA0Mzg0ODQzOTUyAl82BARiYWxBCAUNJHQwNDM4NDg0Mzk1MgJfNwQEYmFsQggFDSR0MDQzODQ4NDM5NTICXzgEB3NoYXJlSWQIBQ0kdDA0Mzg0ODQzOTUyAl85BAdid0Fzc2V0CAUNJHQwNDM4NDg0Mzk1MgNfMTAECGJ3QW1vdW50CAUNJHQwNDM4NDg0Mzk1MgNfMTEDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhJXcm9uZyBwYXltZW50IHNpemUDAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUHYndBc3NldAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQhid0Ftb3VudAkAAgECDVdyb25nIHBheW1lbnQEDSR0MDQ0MTQyNDQyNDIDCQAAAgUDQUlkBQdid0Fzc2V0CQCUCgIJAGQCBQRwbXRBBQhid0Ftb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QgUIYndBbW91bnQEB3BtdEFsbEEIBQ0kdDA0NDE0MjQ0MjQyAl8xBAdwbXRBbGxCCAUNJHQwNDQxNDI0NDI0MgJfMgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDQ0MzI0NDQ0MzkJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUITE9BTl9GRUUFB3BtdEFsbEEFA0FJZAUHcG10QWxsQgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwNDQzMjQ0NDQzOQJfMQQHYXhseUZlZQgFDSR0MDQ0MzI0NDQ0MzkCXzIEBnBvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEFBHVzZXIEDWJvcnJvd0VudHJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQFCGJ3QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUSa1VzZXJCb3Jyb3dBc3NldElkBQdid0Fzc2V0BQNuaWwEB2VudHJpZXMJARByZXBsZW5pc2hFbnRyaWVzCAUEcG9vbAUEdXNlcgUKdXNlclN0YWtlZAUHYXhseUZlZQUGcG9zTnVtBQdzaGFyZUlkBQVwVHlwZQYEDSR0MDQ0Nzk5NDQ5MTQJARpjYWxjV2l0aGRyYXdMUEZyb21Qb29sVmlydAQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUKdXNlclN0YWtlZAQId0Ftb3VudEEIBQ0kdDA0NDc5OTQ0OTE0Al8xBAh3QW1vdW50QggFDSR0MDQ0Nzk5NDQ5MTQCXzIJAJQKAgkAzQgCCQDOCAIJAM4IAgUHZW50cmllcwkBDmdldEN1cnNFbnRyaWVzBAUDQUlkBQNCSWQFB3NoYXJlSWQJAMwIAgkApAMBBQh3QW1vdW50QQkAzAgCCQCkAwEFCHdBbW91bnRCBQNuaWwFDWJvcnJvd0VudHJpZXMJAQtEZWxldGVFbnRyeQEJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkBQp1c2VyU3Rha2VkAWkBCWxpcXVpZGF0ZQMEdXNlcgVwb3NJZA9saXF1aWRhdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQppc0xhbmRDYWxsAQUBaQQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBRFrVXNlclBvc2l0aW9uUG9vbAILbm8gcG9zaXRpb24EBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDA0NTQzNTQ1NTI1CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDQ1NDM1NDU1MjUCXzEEA0JJZAgFDSR0MDQ1NDM1NDU1MjUCXzIEBGJhbEEIBQ0kdDA0NTQzNTQ1NTI1Al8zBARiYWxCCAUNJHQwNDU0MzU0NTUyNQJfNAQHc2hhcmVJZAgFDSR0MDQ1NDM1NDU1MjUCXzUEBmFtb3VudAkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ9saXF1aWRhdGVBbW91bnQEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQVwb3NJZAkAZgIFDGJvcnJvd0Ftb3VudAAAAwkAZgIFD2xpcXVpZGF0ZUFtb3VudAUPdXNlckNhbldpdGhkcmF3CQACAQInWW91IGNhbid0IGxpcXVpZGF0ZSBtb3JlIHRoYW4gdXNlciBoYXZlAwkAAAIFDGJvcnJvd0Ftb3VudAAACQACAQIrWW91IGNhbid0IGxpcXVpZGF0ZSBwb3NpdGlvbiB3aXRob3V0IGJvcnJvdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAGUCBQ91c2VyQ2FuV2l0aGRyYXcFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBaQEIc3RvcExvc3MEBHVzZXIFcG9zSWQEcG9vbAdhc3NldElkCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEOaXNPcGVyYXRvckNhbGwBBQFpBBB0b2tlbk9yYWNsZVByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUEDXN0b3BMb3NzUHJpY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUFcG9zSWQCAV8FBHBvb2wCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MCCE5vIGVudHJ5AwkAZgIFEHRva2VuT3JhY2xlUHJpY2UFDXN0b3BMb3NzUHJpY2UJAAIBAiNUb2tlbiBwcmljZSBncmVhdGVyIHN0b3AgbG9zcyBwcmljZQQDcmVzCQEOd2l0aGRyYXdUb1VzZXIEBQR1c2VyBQRwb29sCQCkAwEFBXBvc0lkBgkAlAoCCQDNCAIIBQNyZXMCXzEJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQVwb3NJZAIBXwUEcG9vbAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwgFA3JlcwJfMgFpARJjYXBpdGFsaXplRXhLZWVwZXILBHBvb2wJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0JYW1vdW50c0luCWFkZHJlc3Nlcw9hc3NldHNUb1JlY2VpdmULZXN0UmVjZWl2ZWQRc2xpcHBhZ2VUb2xlcmFuY2ULbWluUmVjZWl2ZWQHb3B0aW9ucwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBDmlzT3BlcmF0b3JDYWxsAQUBaQQFcFR5cGUJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wEBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAEDSR0MDQ3Njc0NDc3NzMJARFjbGFpbUFuZENoZWNrQW1udAUFBHBvb2wFBXBUeXBlBQVjbGFpbQUQYW1vdW50VG9FeGNoYW5nZQUGY2hhbmdlBA1jbGFpbWVkQW1vdW50CAUNJHQwNDc2NzQ0Nzc3MwJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwNDc2NzQ0Nzc3MwJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VLZWVwZXIKBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUJYW1vdW50c0luBQlhZGRyZXNzZXMFD2Fzc2V0c1RvUmVjZWl2ZQULZXN0UmVjZWl2ZWQFEXNsaXBwYWdlVG9sZXJhbmNlBQttaW5SZWNlaXZlZAUHb3B0aW9ucwQJbmV3Q2hhbmdlCQBlAgkAZAIFDWNsYWltZWRBbW91bnQFBmNoYW5nZQUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBnAgUJbmV3Q2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UFCW5ld0NoYW5nZQUDbmlsCQACAQIPTmVnYXRpdmUgY2hhbmdlCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUFcFR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpARJjYXBpdGFsaXplRXhQdXp6bGUHBHBvb2wJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0Jcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEOaXNPcGVyYXRvckNhbGwBBQFpBAVwVHlwZQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAQGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAQNJHQwNDg1NzM0ODY3MgkBEWNsYWltQW5kQ2hlY2tBbW50BQUEcG9vbAUFcFR5cGUFBWNsYWltBRBhbW91bnRUb0V4Y2hhbmdlBQZjaGFuZ2UEDWNsYWltZWRBbW91bnQIBQ0kdDA0ODU3MzQ4NjcyAl8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0ODU3MzQ4NjcyAl8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVB1enpsZQYFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlyb3V0ZXNTdHIFDG1pblRvUmVjZWl2ZQUHb3B0aW9ucwQJbmV3Q2hhbmdlCQBlAgkAZAIFDWNsYWltZWRBbW91bnQFBmNoYW5nZQUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBnAgUJbmV3Q2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UFCW5ld0NoYW5nZQUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQVwVHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFN3b3BGaQsEcG9vbAl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQpleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEOaXNPcGVyYXRvckNhbGwBBQFpBAVwVHlwZQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAQGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAQNJHQwNDk1MTc0OTYxNgkBEWNsYWltQW5kQ2hlY2tBbW50BQUEcG9vbAUFcFR5cGUFBWNsYWltBRBhbW91bnRUb0V4Y2hhbmdlBQZjaGFuZ2UEDWNsYWltZWRBbW91bnQIBQ0kdDA0OTUxNzQ5NjE2Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0OTUxNzQ5NjE2Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVN3b3BGaQoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQpleGNoYW5nZXJzBQ5leGNoYW5nZXJzVHlwZQUFYXJnczEFBWFyZ3MyBRFyb3V0aW5nQXNzZXRzS2V5cwUSbWluQW1vdW50VG9SZWNlaXZlBQdvcHRpb25zBAluZXdDaGFuZ2UJAGUCCQBkAgUNY2xhaW1lZEFtb3VudAUGY2hhbmdlBRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGcCBQluZXdDaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQUJbmV3Q2hhbmdlBQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBXBUeXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQEOY2FwaXRhbGl6ZU5vRXgDBHBvb2wFY2xhaW0RYW1vdW50RnJvbUJhbGFuY2UJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQ5pc09wZXJhdG9yQ2FsbAEFAWkEBXBUeXBlCQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sBA0kdDA1MDIxMzUwMzA4CQERY2xhaW1BbmRDaGVja0FtbnQFBQRwb29sBQVwVHlwZQUFY2xhaW0FEWFtb3VudEZyb21CYWxhbmNlAAAEDWNsYWltZWRBbW91bnQIBQ0kdDA1MDIxMzUwMzA4Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA1MDIxMzUwMzA4Al8yCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBXBUeXBlCQEMYXNzZXRJZFRvU3RyAQUMY2xhaW1lZEFzc2V0CQBkAgUNY2xhaW1lZEFtb3VudAURYW1vdW50RnJvbUJhbGFuY2UBaQELaW5pdE5ld1Bvb2wJBHR5cGUIcG9vbEFkZHILaW5GZWVOb0xvYW4JaW5GZWVMb2FuDGNhcEZlZU5vTG9hbg5jYXBGZWVXaXRoTG9hbhFzdG9wbG9zc0ZlZU5vTG9hbhNzdG9wbG9zc0ZlZVdpdGhMb2FuCWNhbkJvcnJvdwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMDCQECIT0CBQR0eXBlBQdTRl9QT09MCQECIT0CBQR0eXBlBQdXWF9QT09MBwkAAgECCldyb25nIHR5cGUEDSR0MDUwNzM0NTA4MjgJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQhwb29sQWRkcgUEdHlwZQQDYUlkCAUNJHQwNTA3MzQ1MDgyOAJfMQQDYklkCAUNJHQwNTA3MzQ1MDgyOAJfMgQEYUJhbAgFDSR0MDUwNzM0NTA4MjgCXzMEBGJCYWwIBQ0kdDA1MDczNDUwODI4Al80BAdzaGFyZUlkCAUNJHQwNTA3MzQ1MDgyOAJfNQMJAGYCAAAFC2luRmVlTm9Mb2FuCQACAQIiaW5GZWVOb0xvYW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCAAAFCWluRmVlTG9hbgkAAgECIGluRmVlTG9hbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwAwkAZgIAAAUMY2FwRmVlTm9Mb2FuCQACAQIjY2FwRmVlTm9Mb2FuIG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgAABQ5jYXBGZWVXaXRoTG9hbgkAAgECJWNhcEZlZVdpdGhMb2FuIG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgAABRFzdG9wbG9zc0ZlZU5vTG9hbgkAAgECKHN0b3Bsb3NzRmVlTm9Mb2FuIG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgAABRNzdG9wbG9zc0ZlZVdpdGhMb2FuCQACAQIqc3RvcGxvc3NGZWVXaXRoTG9hbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRVrQXhseUluRmVlV2l0aG91dExvYW4FC2luRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRJrQXhseUluRmVlV2l0aExvYW4FCWluRmVlTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgURa0F4bHlOb0xvYW5DYXBGZWUFDGNhcEZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUTa0F4bHlXaXRoTG9hbkNhcEZlZQUOY2FwRmVlV2l0aExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFmtBeGx5U3RvcExvc3NOb0xvYW5GZWUFEXN0b3Bsb3NzRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRRrQXhseVN0b3BMb3NzTG9hbkZlZQUTc3RvcGxvc3NGZWVXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgURa1Bvb2xJbnRlcmVzdExvYW4AAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUTa1Bvb2xJbnRlcmVzdE5vTG9hbgAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUFa1Bvb2wFCHBvb2xBZGRyBQR0eXBlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgUHc2hhcmVJZAUKa1NoYXJlUG9vbAUIcG9vbEFkZHIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgUIcG9vbEFkZHIFDmtQb29sQ2FuQm9ycm93BQljYW5Cb3Jyb3cFA25pbAFpAQ51cGRhdGVQb29sRmVlcwcIcG9vbEFkZHILaW5GZWVOb0xvYW4JaW5GZWVMb2FuDGNhcEZlZU5vTG9hbg5jYXBGZWVXaXRoTG9hbhFzdG9wbG9zc0ZlZU5vTG9hbhNzdG9wbG9zc0ZlZVdpdGhMb2FuCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBASEBCQEJaXNEZWZpbmVkAQkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQhwb29sQWRkcgkAAgEJAKwCAgIaQ2FuJ3QgZmluZCBwb29sIHdpdGggYWRkciAFCHBvb2xBZGRyAwkAZgIAAAULaW5GZWVOb0xvYW4JAAIBAiJpbkZlZU5vTG9hbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwAwkAZgIAAAUJaW5GZWVMb2FuCQACAQIgaW5GZWVMb2FuIG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgAABQxjYXBGZWVOb0xvYW4JAAIBAiNjYXBGZWVOb0xvYW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCAAAFDmNhcEZlZVdpdGhMb2FuCQACAQIlY2FwRmVlV2l0aExvYW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCAAAFEXN0b3Bsb3NzRmVlTm9Mb2FuCQACAQIoc3RvcGxvc3NGZWVOb0xvYW4gbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCAAAFE3N0b3Bsb3NzRmVlV2l0aExvYW4JAAIBAipzdG9wbG9zc0ZlZVdpdGhMb2FuIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgULaW5GZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEmtBeGx5SW5GZWVXaXRoTG9hbgUJaW5GZWVMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrQXhseU5vTG9hbkNhcEZlZQUMY2FwRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrQXhseVdpdGhMb2FuQ2FwRmVlBQ5jYXBGZWVXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQURc3RvcGxvc3NGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFGtBeGx5U3RvcExvc3NMb2FuRmVlBRNzdG9wbG9zc0ZlZVdpdGhMb2FuBQNuaWwBaQEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQdrQWN0aXZlBgkAAgECE2RBcHAgYWxyZWFkeSBhY3RpdmUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGBQNuaWwBaQEIc2h1dGRvd24ACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBASEBCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFB2tBY3RpdmUGCQACAQIVZEFwcCBhbHJlYWR5IHNodXRkb3duCQDMCAIJAQxCb29sZWFuRW50cnkCBQdrQWN0aXZlBwUDbmlsAWkBEGFjdGl2YXRlRm9yVXNlcnMACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQxrQWN0aXZlVXNlcnMGCQACAQIdZEFwcCBhbHJlYWR5IGFjdGl2ZSBmb3IgdXNlcnMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDGtBY3RpdmVVc2VycwYFA25pbAFpARBzaHV0ZG93bkZvclVzZXJzAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQEhAQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQxrQWN0aXZlVXNlcnMGCQACAQIfZEFwcCBhbHJlYWR5IHNodXRkb3duIGZvciB1c2VycwkAzAgCCQEMQm9vbGVhbkVudHJ5AgUMa0FjdGl2ZVVzZXJzBwUDbmlsAWkBCmFjdGl2YXRlU0YACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQCsAgIFB1NGX1BPT0wFC2tBY3RpdmVTRldYBgkAAgECFVNXT1BGSSBhbHJlYWR5IGFjdGl2ZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICBQdTRl9QT09MBQtrQWN0aXZlU0ZXWAYFA25pbAFpAQpzaHV0ZG93blNGAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQEhAQkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQCsAgIFB1NGX1BPT0wFC2tBY3RpdmVTRldYBgkAAgECF1NXT1BGSSBhbHJlYWR5IHNodXRkb3duCQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgIFB1NGX1BPT0wFC2tBY3RpdmVTRldYBwUDbmlsAWkBCmFjdGl2YXRlV1gACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzCQCsAgIFB1dYX1BPT0wFC2tBY3RpdmVTRldYBgkAAgECEVdYIGFscmVhZHkgYWN0aXZlCQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgIFB1dYX1BPT0wFC2tBY3RpdmVTRldYBgUDbmlsAWkBCnNodXRkb3duV1gACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpAwkBASEBCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJAKwCAgUHV1hfUE9PTAULa0FjdGl2ZVNGV1gGCQACAQITV1ggYWxyZWFkeSBzaHV0ZG93bgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICBQdXWF9QT09MBQtrQWN0aXZlU0ZXWAcFA25pbAFpAQxhY3RpdmF0ZVBvb2wBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wJAAIBAgxVbmtub3duIHBvb2wDCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMJAKwCAgUEcG9vbAULa1Bvb2xBY3RpdmUGCQACAQITUG9vbCBhbHJlYWR5IGFjdGl2ZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICBQRwb29sBQtrUG9vbEFjdGl2ZQYFA25pbAFpAQxzaHV0ZG93blBvb2wBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDCQEBIQEJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wJAAIBAgxVbmtub3duIHBvb2wDCQEBIQEJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwkArAICBQRwb29sBQtrUG9vbEFjdGl2ZQYJAAIBAhVQb29sIGFscmVhZHkgc2h1dGRvd24JAMwIAgkBDEJvb2xlYW5FbnRyeQIJAKwCAgUEcG9vbAULa1Bvb2xBY3RpdmUHBQNuaWwAu303DA==", "height": 2703161, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: FxVCrpoJFb2gwrAJBhMAeUvSjuGMv8pTNvFKARVw2ixj Next: 5W8me79ju9vr22gKggeGKTHUvDDc2gnGH7wsLsZTbiku Diff:
OldNewDifferences
6767
6868 let G = "_axlyFeeWithLoan"
6969
70-let H = "_axlyFeeCapWithLoan"
70+let H = "_axlyFeeCapNoLoan"
7171
72-let I = "_axlyFeeCapNoLoan"
72+let I = "_axlyFeeCapWithLoan"
7373
7474 let J = "_axlyFeeStoplossWithLoan"
7575
117117
118118 let af = "wx_id"
119119
120-let ag = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No axly moneyBox address")))
120+let ag = "group1_admin1_pub_key"
121121
122-let ah = Address(fromBase58String(valueOrErrorMessage(getString(this, ac), "No exchange contract address")))
122+let ah = "group1_admin2_pub_key"
123123
124-let ai = Address(fromBase58String(valueOrErrorMessage(getString(this, ab), "No price oracle address")))
124+let ai = "group2_admin1_pub_key"
125125
126-let aj = Address(fromBase58String(valueOrErrorMessage(getString(this, ad), "No wx swap address")))
126+let aj = "group2_admin2_pub_key"
127127
128-let ak = fromBase58String(valueOrErrorMessage(getString(this, ae), "No swop id"))
128+let ak = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No axly moneyBox address")))
129129
130-let al = fromBase58String(valueOrErrorMessage(getString(this, af), "No wx id"))
130+let al = Address(fromBase58String(valueOrErrorMessage(getString(this, ac), "No exchange contract address")))
131131
132-func am () = throw("Wrong pool type")
132+let am = Address(fromBase58String(valueOrErrorMessage(getString(this, ab), "No price oracle address")))
133+
134+let an = Address(fromBase58String(valueOrErrorMessage(getString(this, ad), "No wx swap address")))
135+
136+let ao = fromBase58String(valueOrErrorMessage(getString(this, ae), "No swop id"))
137+
138+let ap = fromBase58String(valueOrErrorMessage(getString(this, af), "No wx id"))
139+
140+let aq = fromBase58String(valueOrErrorMessage(getString(this, ag), "Can't get kGroup1Admin1PK"))
141+
142+let ar = fromBase58String(valueOrErrorMessage(getString(this, ah), "Can't get kGroup1Admin2PK"))
143+
144+let as = fromBase58String(valueOrErrorMessage(getString(this, ai), "Can't get kGroup2Admin1PK"))
145+
146+let at = fromBase58String(valueOrErrorMessage(getString(this, aj), "Can't get kGroup2Admin1PK"))
147+
148+let au = fromBase58String(valueOrErrorMessage(getString(this, aa), "Can't get operatorPK"))
149+
150+func av () = throw("Wrong pool type")
133151
134152
135-func an () = Address(fromBase58String(valueOrErrorMessage(getString(this, Z), "Can't get lend service addr")))
153+func aw () = Address(fromBase58String(valueOrErrorMessage(getString(this, Z), "Can't get lend service addr")))
136154
137155
138-func ao () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, aa), "Can't get admin addr")))
156+func ax (ay) = if ((ay.callerPublicKey == ay.callerPublicKey))
157+ then unit
158+ else throw("Only operator can call this function")
139159
140160
141-func ap (aq) = if ((aq.caller == ao()))
161+func az (ay) = if (if ((ay.callerPublicKey == ay.callerPublicKey))
162+ then true
163+ else (ay.callerPublicKey == ay.callerPublicKey))
142164 then unit
143- else throw("Only admin can call this function")
165+ else throw("Only admin group1 can call this function")
144166
145167
146-func ar (aq) = if ((aq.caller == this))
168+func aA (ay) = if ((ay.caller == this))
147169 then unit
148170 else throw("Only contract itself can call this function")
149171
150172
151-func as (aq) = if ((aq.caller == an()))
173+func aB (ay) = if ((ay.caller == aw()))
152174 then unit
153175 else throw("Only land contract can call this function")
154176
155177
156-func at () = if ((valueOrElse(getBoolean(this, S), true) == true))
178+func aC () = if ((valueOrElse(getBoolean(this, S), true) == true))
157179 then unit
158180 else throw("DApp is inactive at this moment")
159181
160182
161-func au () = if (if (valueOrElse(getBoolean(this, S), true))
183+func aD () = if (if (valueOrElse(getBoolean(this, S), true))
162184 then (valueOrElse(getBoolean(this, T), true) == true)
163185 else false)
164186 then unit
165187 else throw("DApp is inactive for users at this moment")
166188
167189
168-func av (aw,ax) = {
169- let ay = valueOrElse(getBoolean(this, (ax + U)), true)
170- let az = valueOrElse(getBoolean(this, (aw + V)), true)
171- if (if (ay)
172- then az
190+func aE (aF,aG) = {
191+ let aH = valueOrElse(getBoolean(this, (aG + U)), true)
192+ let aI = valueOrElse(getBoolean(this, (aF + V)), true)
193+ if (if (aH)
194+ then aI
173195 else false)
174196 then true
175197 else false
176198 }
177199
178200
179-func aA (aB) = {
180- let aC = aB
181- if ($isInstanceOf(aC, "ByteVector"))
201+func aJ (aK) = {
202+ let aL = aK
203+ if ($isInstanceOf(aL, "ByteVector"))
182204 then {
183- let aD = aC
184- assetBalance(this, aD)
205+ let aM = aL
206+ assetBalance(this, aM)
185207 }
186- else if ($isInstanceOf(aC, "Unit"))
208+ else if ($isInstanceOf(aL, "Unit"))
187209 then {
188- let aE = aC
210+ let aN = aL
189211 wavesBalance(this).available
190212 }
191213 else throw("Match error")
192214 }
193215
194216
195-func aF (aG) = $Tuple2(valueOrErrorMessage(getInteger(aG, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(aG, o), "Can't get pool B asset balance"))
217+func aO (aP) = $Tuple2(valueOrErrorMessage(getInteger(aP, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(aP, o), "Can't get pool B asset balance"))
196218
197219
198-func aH (aG,aI,aJ) = $Tuple2({
199- let aK = invoke(aG, "getAccBalanceWrapperREADONLY", [aI], nil)
200- if ($isInstanceOf(aK, "Int"))
201- then aK
202- else throw(($getType(aK) + " couldn't be cast to Int"))
220+func aQ (aP,aR,aS) = $Tuple2({
221+ let aT = invoke(aP, "getAccBalanceWrapperREADONLY", [aR], nil)
222+ if ($isInstanceOf(aT, "Int"))
223+ then aT
224+ else throw(($getType(aT) + " couldn't be cast to Int"))
203225 }, {
204- let aK = invoke(aG, "getAccBalanceWrapperREADONLY", [aJ], nil)
205- if ($isInstanceOf(aK, "Int"))
206- then aK
207- else throw(($getType(aK) + " couldn't be cast to Int"))
226+ let aT = invoke(aP, "getAccBalanceWrapperREADONLY", [aS], nil)
227+ if ($isInstanceOf(aT, "Int"))
228+ then aT
229+ else throw(($getType(aT) + " couldn't be cast to Int"))
208230 })
209231
210232
211-func aL (aG,ax,aI,aJ) = if ((ax == a))
212- then aF(aG)
213- else if ((ax == b))
214- then aH(aG, aI, aJ)
215- else am()
233+func aU (aP,aG,aR,aS) = if ((aG == a))
234+ then aO(aP)
235+ else if ((aG == b))
236+ then aQ(aP, aR, aS)
237+ else av()
216238
217239
218-func aM (aG) = {
219- let aN = aF(aG)
220- if ((aN == aN))
240+func aV (aP) = {
241+ let aW = aO(aP)
242+ if ((aW == aW))
221243 then {
222- let aO = aN._2
223- let aP = aN._1
224- $Tuple5(valueOrErrorMessage(getString(aG, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(aG, q), "Can't get pool B asset id"), aP, aO, valueOrErrorMessage(getString(aG, r), "Can't get share asset id"))
244+ let aX = aW._2
245+ let aY = aW._1
246+ $Tuple5(valueOrErrorMessage(getString(aP, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(aP, q), "Can't get pool B asset id"), aY, aX, valueOrErrorMessage(getString(aP, r), "Can't get share asset id"))
225247 }
226248 else throw("Strict value is not equal to itself.")
227249 }
228250
229251
230-func aQ (aG) = {
231- let aR = {
232- let aK = invoke(aG, "getPoolConfigWrapperREADONLY", nil, nil)
233- if ($isInstanceOf(aK, "List[Any]"))
234- then aK
235- else throw(($getType(aK) + " couldn't be cast to List[Any]"))
252+func aZ (aP) = {
253+ let ba = {
254+ let aT = invoke(aP, "getPoolConfigWrapperREADONLY", nil, nil)
255+ if ($isInstanceOf(aT, "List[Any]"))
256+ then aT
257+ else throw(($getType(aT) + " couldn't be cast to List[Any]"))
236258 }
237- if ((aR == aR))
259+ if ((ba == ba))
238260 then {
239- let aI = valueOrErrorMessage({
240- let aK = aR[4]
241- if ($isInstanceOf(aK, "String"))
242- then aK
261+ let aR = valueOrErrorMessage({
262+ let aT = ba[4]
263+ if ($isInstanceOf(aT, "String"))
264+ then aT
243265 else unit
244266 }, "Can't get pool A asset id")
245- let aJ = valueOrErrorMessage({
246- let aK = aR[5]
247- if ($isInstanceOf(aK, "String"))
248- then aK
267+ let aS = valueOrErrorMessage({
268+ let aT = ba[5]
269+ if ($isInstanceOf(aT, "String"))
270+ then aT
249271 else unit
250272 }, "Can't get pool B asset id")
251- let aS = valueOrErrorMessage({
252- let aK = aR[3]
253- if ($isInstanceOf(aK, "String"))
254- then aK
273+ let bb = valueOrErrorMessage({
274+ let aT = ba[3]
275+ if ($isInstanceOf(aT, "String"))
276+ then aT
255277 else unit
256278 }, "Can't get pool LP asset id")
257- let aT = aH(aG, aI, aJ)
258- if ((aT == aT))
279+ let bc = aQ(aP, aR, aS)
280+ if ((bc == bc))
259281 then {
260- let aO = aT._2
261- let aP = aT._1
262- $Tuple5(aI, aJ, aP, aO, aS)
282+ let aX = bc._2
283+ let aY = bc._1
284+ $Tuple5(aR, aS, aY, aX, bb)
263285 }
264286 else throw("Strict value is not equal to itself.")
265287 }
267289 }
268290
269291
270-func aU (aG,ax) = if ((ax == a))
271- then aM(aG)
272- else if ((ax == b))
273- then aQ(aG)
274- else am()
292+func bd (aP,aG) = if ((aG == a))
293+ then aV(aP)
294+ else if ((aG == b))
295+ then aZ(aP)
296+ else av()
275297
276298
277-func aV (aG,ax,aS) = if ((ax == a))
278- then valueOrErrorMessage(getInteger(aG, s), "Can't get share asset supply")
279- else if ((ax == b))
280- then valueOrErrorMessage(assetInfo(fromBase58String(aS)), "Wrong ShareId").quantity
281- else am()
299+func be (aP,aG,bb) = if ((aG == a))
300+ then valueOrErrorMessage(getInteger(aP, s), "Can't get share asset supply")
301+ else if ((aG == b))
302+ then valueOrErrorMessage(assetInfo(fromBase58String(bb)), "Wrong ShareId").quantity
303+ else av()
282304
283305
284-func aW (aw) = valueOrElse(getInteger(this, (aw + A)), 0)
306+func bf (aF) = valueOrElse(getInteger(this, (aF + A)), 0)
285307
286308
287-func aX (aw) = valueOrElse(getInteger(this, (aw + B)), 0)
309+func bg (aF) = valueOrElse(getInteger(this, (aF + B)), 0)
288310
289311
290-func aY (aZ) = (valueOrElse(getInteger(this, (aZ + y)), 0) + 1)
312+func bh (bi) = (valueOrElse(getInteger(this, (bi + y)), 0) + 1)
291313
292314
293-func ba (aw,bb) = if ((bb == d))
294- then getIntegerValue(this, (aw + I))
295- else if ((bb == c))
296- then getIntegerValue(this, (aw + H))
297- else if ((bb == g))
298- then getIntegerValue(this, (aw + G))
299- else if ((bb == h))
300- then getIntegerValue(this, (aw + F))
301- else if ((bb == i))
315+func bj (aF,bk) = if ((bk == d))
316+ then getIntegerValue(this, (aF + I))
317+ else if ((bk == c))
318+ then getIntegerValue(this, (aF + H))
319+ else if ((bk == g))
320+ then getIntegerValue(this, (aF + G))
321+ else if ((bk == h))
322+ then getIntegerValue(this, (aF + F))
323+ else if ((bk == i))
302324 then 0
303325 else throw("Wrong fee type")
304326
305327
306-func bc () = Address(fromBase58String(valueOrErrorMessage(getString(this, Y), "Can't get swopfi farming addr")))
328+func bl () = Address(fromBase58String(valueOrErrorMessage(getString(this, Y), "Can't get swopfi farming addr")))
307329
308330
309-func bd (aG) = {
310- let be = Address(fromBase58String(valueOrErrorMessage(getString(aG, "%s__factoryContract"), "Can't get WX factory contract addr")))
311- let bf = split(valueOrErrorMessage(getString(be, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
312- Address(fromBase58String(bf[1]))
331+func bm (aP) = {
332+ let bn = Address(fromBase58String(valueOrErrorMessage(getString(aP, "%s__factoryContract"), "Can't get WX factory contract addr")))
333+ let bo = split(valueOrErrorMessage(getString(bn, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
334+ Address(fromBase58String(bo[1]))
313335 }
314336
315337
316-func bg (aB) = {
317- let aC = aB
318- if ($isInstanceOf(aC, "ByteVector"))
338+func bp (aK) = {
339+ let aL = aK
340+ if ($isInstanceOf(aL, "ByteVector"))
319341 then {
320- let aD = aC
321- toBase58String(aD)
342+ let aM = aL
343+ toBase58String(aM)
322344 }
323- else if ($isInstanceOf(aC, "Unit"))
345+ else if ($isInstanceOf(aL, "Unit"))
324346 then {
325- let aE = aC
347+ let aN = aL
326348 "WAVES"
327349 }
328350 else throw("Not Asset id")
329351 }
330352
331353
332-func bh (aB) = if ((aB == "WAVES"))
354+func bq (aK) = if ((aK == "WAVES"))
333355 then unit
334- else fromBase58String(aB)
356+ else fromBase58String(aK)
335357
336358
337-func bi (aB) = if ((aB == "WAVES"))
359+func br (aK) = if ((aK == "WAVES"))
338360 then 8
339361 else {
340- let aC = assetInfo(fromBase58String(aB))
341- if ($isInstanceOf(aC, "Asset"))
362+ let aL = assetInfo(fromBase58String(aK))
363+ if ($isInstanceOf(aL, "Asset"))
342364 then {
343- let bj = aC
344- bj.decimals
365+ let bs = aL
366+ bs.decimals
345367 }
346368 else throw("Can't find asset")
347369 }
348370
349371
350-func bk (aB) = pow(10, 0, bi(aB), 0, 0, DOWN)
372+func bt (aK) = pow(10, 0, br(aK), 0, 0, DOWN)
351373
352374
353-func bl (bm) = {
354- func bn (bo,aB) = {
355- let bp = getIntegerValue(ai, (aB + R))
356- (bo :+ bp)
375+func bu (bv) = {
376+ func bw (bx,aK) = {
377+ let by = valueOrElse(getInteger(am, (aK + R)), -1)
378+ (bx :+ by)
357379 }
358380
359- let bq = bm
360- let br = size(bq)
361- let bs = nil
362- func bt (bu,bv) = if ((bv >= br))
363- then bu
364- else bn(bu, bq[bv])
381+ let bz = bv
382+ let bA = size(bz)
383+ let bB = nil
384+ func bC (bD,bE) = if ((bE >= bA))
385+ then bD
386+ else bw(bD, bz[bE])
365387
366- func bw (bu,bv) = if ((bv >= br))
367- then bu
388+ func bF (bD,bE) = if ((bE >= bA))
389+ then bD
368390 else throw("List size exceeds 50")
369391
370- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
392+ bF(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bB, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
371393 }
372394
373395
374-func bx (aS) = {
375- let aw = valueOrErrorMessage(getString(this, (aS + O)), "Can't find pool addr by share id")
376- let aG = Address(fromBase58String(aw))
377- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
378- let bz = aU(aG, by)
379- let aI = bz._1
380- let aJ = bz._2
381- let bA = bz._3
382- let bB = bz._4
383- let bC = getIntegerValue(ai, (aI + R))
384- let bD = getIntegerValue(ai, (aJ + R))
385- let bE = aV(aG, by, aS)
386- let bF = pow(10, 0, bi(aI), 0, 0, DOWN)
387- let bG = pow(10, 0, bi(aJ), 0, 0, DOWN)
388- let bH = pow(10, 0, bi(aS), 0, 0, DOWN)
389- let bI = (fraction(bA, bC, bF) + fraction(bB, bD, bG))
390- fraction(bI, bH, bE)
396+func bG (bb) = {
397+ let aF = valueOrErrorMessage(getString(this, (bb + O)), "Can't find pool addr by share id")
398+ let aP = Address(fromBase58String(aF))
399+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
400+ let bI = bd(aP, bH)
401+ let aR = bI._1
402+ let aS = bI._2
403+ let bJ = bI._3
404+ let bK = bI._4
405+ let bL = bu([aR, aS])
406+ let bM = bL[0]
407+ let bN = bL[1]
408+ if (if ((0 > bM))
409+ then true
410+ else (0 > bN))
411+ then -1
412+ else {
413+ let bO = be(aP, bH, bb)
414+ let bP = pow(10, 0, br(aR), 0, 0, DOWN)
415+ let bQ = pow(10, 0, br(aS), 0, 0, DOWN)
416+ let bR = pow(10, 0, br(bb), 0, 0, DOWN)
417+ let bS = (fraction(bJ, bM, bP) + fraction(bK, bN, bQ))
418+ fraction(bS, bR, bO)
419+ }
391420 }
392421
393422
394-func bJ (bK) = {
395- func bn (bo,aS) = (bo :+ bx(aS))
423+func bT (bU) = {
424+ func bw (bx,bb) = (bx :+ bG(bb))
396425
397- let bq = bK
398- let br = size(bq)
399- let bs = nil
400- func bt (bu,bv) = if ((bv >= br))
401- then bu
402- else bn(bu, bq[bv])
426+ let bz = bU
427+ let bA = size(bz)
428+ let bB = nil
429+ func bC (bD,bE) = if ((bE >= bA))
430+ then bD
431+ else bw(bD, bz[bE])
403432
404- func bw (bu,bv) = if ((bv >= br))
405- then bu
433+ func bF (bD,bE) = if ((bE >= bA))
434+ then bD
406435 else throw("List size exceeds 20")
407436
408- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
437+ bF(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bB, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
409438 }
410439
411440
412-func bL (aI,aJ,aS,bM) = {
413- let bN = bl([aI, aJ])
414- let bO = bx(aS)
415- let bP = ([toString(bN[0]), toString(bN[1]), toString(bO)] ++ bM)
416-[StringEntry(Q, makeString(bP, ","))]
441+func bV (aR,aS,bb,bW) = {
442+ let bX = bu([aR, aS])
443+ let bY = bG(bb)
444+ let bL = ([toString(bX[0]), toString(bX[1]), toString(bY)] ++ bW)
445+[StringEntry(Q, makeString(bL, ","))]
417446 }
418447
419448
420-func bQ (by,aG,bR,aI,bS,aJ,aP,aO) = if ((by == a))
449+func bZ (bH,aP,ca,aR,cb,aS,aY,aX) = if ((bH == a))
421450 then {
422- let bT = {
423- let aK = invoke(aG, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bR), toString(bS)]], nil)
424- if ($isInstanceOf(aK, "List[Any]"))
425- then aK
426- else throw(($getType(aK) + " couldn't be cast to List[Any]"))
451+ let cc = {
452+ let aT = invoke(aP, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(ca), toString(cb)]], nil)
453+ if ($isInstanceOf(aT, "List[Any]"))
454+ then aT
455+ else throw(($getType(aT) + " couldn't be cast to List[Any]"))
427456 }
428- if ((bT == bT))
457+ if ((cc == cc))
429458 then $Tuple5({
430- let aK = bT[3]
431- if ($isInstanceOf(aK, "Int"))
432- then aK
433- else throw(($getType(aK) + " couldn't be cast to Int"))
459+ let aT = cc[3]
460+ if ($isInstanceOf(aT, "Int"))
461+ then aT
462+ else throw(($getType(aT) + " couldn't be cast to Int"))
434463 }, {
435- let aK = bT[4]
436- if ($isInstanceOf(aK, "Int"))
437- then aK
438- else throw(($getType(aK) + " couldn't be cast to Int"))
464+ let aT = cc[4]
465+ if ($isInstanceOf(aT, "Int"))
466+ then aT
467+ else throw(($getType(aT) + " couldn't be cast to Int"))
439468 }, {
440- let aK = bT[1]
441- if ($isInstanceOf(aK, "Int"))
442- then aK
443- else throw(($getType(aK) + " couldn't be cast to Int"))
444- }, bg(bT[2]), {
445- let aK = bT[0]
446- if ($isInstanceOf(aK, "Int"))
447- then aK
448- else throw(($getType(aK) + " couldn't be cast to Int"))
469+ let aT = cc[1]
470+ if ($isInstanceOf(aT, "Int"))
471+ then aT
472+ else throw(($getType(aT) + " couldn't be cast to Int"))
473+ }, bp(cc[2]), {
474+ let aT = cc[0]
475+ if ($isInstanceOf(aT, "Int"))
476+ then aT
477+ else throw(($getType(aT) + " couldn't be cast to Int"))
449478 })
450479 else throw("Strict value is not equal to itself.")
451480 }
452- else if ((by == b))
481+ else if ((bH == b))
453482 then {
454- let bU = $Tuple2(split({
455- let aK = invoke(aG, "evaluatePutByAmountAssetREADONLY", [bR], nil)
456- if ($isInstanceOf(aK, "String"))
457- then aK
458- else throw(($getType(aK) + " couldn't be cast to String"))
483+ let cd = $Tuple2(split({
484+ let aT = invoke(aP, "evaluatePutByAmountAssetREADONLY", [ca], nil)
485+ if ($isInstanceOf(aT, "String"))
486+ then aT
487+ else throw(($getType(aT) + " couldn't be cast to String"))
459488 }, "__"), split({
460- let aK = invoke(aG, "evaluatePutByPriceAssetREADONLY", [bS], nil)
461- if ($isInstanceOf(aK, "String"))
462- then aK
463- else throw(($getType(aK) + " couldn't be cast to String"))
489+ let aT = invoke(aP, "evaluatePutByPriceAssetREADONLY", [cb], nil)
490+ if ($isInstanceOf(aT, "String"))
491+ then aT
492+ else throw(($getType(aT) + " couldn't be cast to String"))
464493 }, "__"))
465- if ((bU == bU))
494+ if ((cd == cd))
466495 then {
467- let bV = bU._2
468- let bW = bU._1
469- let bX = parseIntValue(bW[1])
470- let bY = parseIntValue(bV[1])
471- if ((bY > bX))
496+ let ce = cd._2
497+ let cf = cd._1
498+ let cg = parseIntValue(cf[1])
499+ let ch = parseIntValue(ce[1])
500+ if ((ch > cg))
472501 then {
473- let bZ = parseIntValue(bW[8])
474- $Tuple5(bR, bZ, (bS - bZ), aJ, bY)
502+ let ci = parseIntValue(cf[8])
503+ $Tuple5(ca, ci, (cb - ci), aS, ch)
475504 }
476505 else {
477- let bZ = parseIntValue(bV[7])
478- $Tuple5(bZ, bS, (bR - bZ), aI, bX)
506+ let ci = parseIntValue(ce[7])
507+ $Tuple5(ci, cb, (ca - ci), aR, cg)
479508 }
480509 }
481510 else throw("Strict value is not equal to itself.")
482511 }
483- else am()
512+ else av()
484513
485514
486-func ca (aG,by,bR,aI,bS,aJ) = {
487- let cb = [AttachedPayment(bh(aI), bR), AttachedPayment(bh(aJ), bS)]
488- if ((by == a))
489- then invoke(aG, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], cb)
490- else if ((by == b))
491- then invoke(aG, "put", [1000000, false], cb)
492- else am()
515+func cj (aP,bH,ca,aR,cb,aS) = {
516+ let ck = [AttachedPayment(bq(aR), ca), AttachedPayment(bq(aS), cb)]
517+ if ((bH == a))
518+ then invoke(aP, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], ck)
519+ else if ((bH == b))
520+ then invoke(aP, "put", [1000000, false], ck)
521+ else av()
493522 }
494523
495524
496-func cc (aG,by,bZ,cd) = {
497- let cb = [AttachedPayment(bh(cd), bZ)]
498- if ((by == a))
499- then invoke(aG, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], cb)
500- else if ((by == b))
501- then invoke(aG, "putOneTkn", [0, false], cb)
502- else am()
525+func cl (aP,bH,ci,cm) = {
526+ let ck = [AttachedPayment(bq(cm), ci)]
527+ if ((bH == a))
528+ then invoke(aP, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], ck)
529+ else if ((bH == b))
530+ then invoke(aP, "putOneTkn", [0, false], ck)
531+ else av()
503532 }
504533
505534
506-func ce (aw,by,aS,cf) = {
507- let cb = [AttachedPayment(fromBase58String(aS), cf)]
508- if ((by == a))
509- then invoke(bc(), "lockShareTokens", [aw, 0], cb)
510- else if ((by == b))
511- then invoke(bd(addressFromStringValue(aw)), "stake", nil, cb)
512- else am()
535+func cn (aF,bH,bb,co) = {
536+ let ck = [AttachedPayment(fromBase58String(bb), co)]
537+ if ((bH == a))
538+ then invoke(bl(), "lockShareTokens", [aF, 0], ck)
539+ else if ((bH == b))
540+ then invoke(bm(addressFromStringValue(aF)), "stake", nil, ck)
541+ else av()
513542 }
514543
515544
516-func cg (aw,by,aS,cf) = {
517- let ch = if ((by == a))
518- then $Tuple3(bc(), "withdrawShareTokens", [aw, cf])
519- else if ((by == b))
520- then $Tuple3(bd(Address(fromBase58String(aw))), "unstake", [aS, cf])
521- else am()
522- let ci = ch._1
523- let cj = ch._2
524- let ck = ch._3
525- let cl = invoke(ci, cj, ck, nil)
526- if ((cl == cl))
527- then cf
545+func cp (aF,bH,bb,co) = {
546+ let cq = if ((bH == a))
547+ then $Tuple3(bl(), "withdrawShareTokens", [aF, co])
548+ else if ((bH == b))
549+ then $Tuple3(bm(Address(fromBase58String(aF))), "unstake", [bb, co])
550+ else av()
551+ let cr = cq._1
552+ let cs = cq._2
553+ let ct = cq._3
554+ let cu = invoke(cr, cs, ct, nil)
555+ if ((cu == cu))
556+ then co
528557 else throw("Strict value is not equal to itself.")
529558 }
530559
531560
532-func cm (aw,cn,co,aP,aO,cp,cq) = {
533- let aG = Address(fromBase58String(aw))
534- let cr = 1000000
535- let cs = getIntegerValue(aG, t)
536- let ct = fraction(cp, cr, (cr - cs), CEILING)
537- let cu = if ((cq == cn))
561+func cv (aF,cw,cx,aY,aX,cy,cz) = {
562+ let aP = Address(fromBase58String(aF))
563+ let cA = 1000000
564+ let cB = getIntegerValue(aP, t)
565+ let cC = fraction(cy, cA, (cA - cB), CEILING)
566+ let cD = if ((cz == cw))
538567 then {
539- let cv = fraction(ct, aO, (aP - ct), CEILING)
540- $Tuple2(cv, co)
568+ let cE = fraction(cC, aX, (aY - cC), CEILING)
569+ $Tuple2(cE, cx)
541570 }
542571 else {
543- let cv = fraction(ct, aP, (aO - ct), CEILING)
544- $Tuple2(cv, cn)
572+ let cE = fraction(cC, aY, (aX - cC), CEILING)
573+ $Tuple2(cE, cw)
545574 }
546- let cv = cu._1
547- let cw = cu._2
548- $Tuple2(cw, cv)
575+ let cE = cD._1
576+ let cF = cD._2
577+ $Tuple2(cF, cE)
549578 }
550579
551580
552-func cx (aw) = {
553- let aG = addressFromStringValue(aw)
554- let be = addressFromStringValue(valueOrErrorMessage(getString(aG, "%s__factoryContract"), "Can't get WX factory contract addr"))
555- let cy = value(getInteger(aj, "%s__poolFee"))
556- let cz = value(getInteger(aj, "%s__protocolFee"))
557- let aC = invoke(be, "getSwapFeeREADONLY", [toString(aG)], nil)
558- if ($isInstanceOf(aC, "(Int, Int)"))
581+func cG (aF) = {
582+ let aP = addressFromStringValue(aF)
583+ let bn = addressFromStringValue(valueOrErrorMessage(getString(aP, "%s__factoryContract"), "Can't get WX factory contract addr"))
584+ let cH = value(getInteger(an, "%s__poolFee"))
585+ let cI = value(getInteger(an, "%s__protocolFee"))
586+ let aL = invoke(bn, "getSwapFeeREADONLY", [toString(aP)], nil)
587+ if ($isInstanceOf(aL, "(Int, Int)"))
559588 then {
560- let cA = aC
561- $Tuple2(cA._1, cA._2)
589+ let cJ = aL
590+ $Tuple2(cJ._1, cJ._2)
562591 }
563- else $Tuple2(cy, cz)
592+ else $Tuple2(cH, cI)
564593 }
565594
566595
567-func cB (aw,cn,co,aP,aO,cp,cq) = {
568- let cC = cx(aw)
569- let cD = cC._1
570- let cE = cC._2
571- let cF = toBigInt(100000000)
572- let cG = if ((cq == cn))
596+func cK (aF,cw,cx,aY,aX,cy,cz) = {
597+ let cL = cG(aF)
598+ let cM = cL._1
599+ let cN = cL._2
600+ let cO = toBigInt(100000000)
601+ let cP = if ((cz == cw))
573602 then {
574- let cv = fraction(cp, aO, (aP - cp))
575- $Tuple2(cv, co)
603+ let cE = fraction(cy, aX, (aY - cy))
604+ $Tuple2(cE, cx)
576605 }
577606 else {
578- let cv = fraction(cp, aP, (aO - cp))
579- $Tuple2(cv, cn)
607+ let cE = fraction(cy, aY, (aX - cy))
608+ $Tuple2(cE, cw)
580609 }
581- let cv = cG._1
582- let cw = cG._2
583- let cH = toInt(fraction(toBigInt(cv), cF, (cF - toBigInt((cE + cD))), CEILING))
584- $Tuple2(cw, cH)
610+ let cE = cP._1
611+ let cF = cP._2
612+ let cQ = toInt(fraction(toBigInt(cE), cO, (cO - toBigInt((cN + cM))), CEILING))
613+ $Tuple2(cF, cQ)
585614 }
586615
587616
588-func cI (by,aw,cn,co,aP,aO,cp,cq) = if ((by == a))
617+func cR (bH,aF,cw,cx,aY,aX,cy,cz) = if ((bH == a))
589618 then {
590- let cJ = cm(aw, cn, co, aP, aO, cp, cq)
591- let cw = cJ._1
592- let cv = cJ._2
593- invoke(addressFromStringValue(aw), "callFunction", ["exchange", [toString(cp)]], [AttachedPayment(bh(cw), cv)])
619+ let cS = cv(aF, cw, cx, aY, aX, cy, cz)
620+ let cF = cS._1
621+ let cE = cS._2
622+ invoke(addressFromStringValue(aF), "callFunction", ["exchange", [toString(cy)]], [AttachedPayment(bq(cF), cE)])
594623 }
595- else if ((by == b))
624+ else if ((bH == b))
596625 then {
597- let cK = cB(aw, cn, co, aP, aO, cp, cq)
598- let cw = cK._1
599- let cv = cK._2
600- invoke(aj, "swap", [cp, cq, toString(this)], [AttachedPayment(bh(cw), cv)])
626+ let cT = cK(aF, cw, cx, aY, aX, cy, cz)
627+ let cF = cT._1
628+ let cE = cT._2
629+ invoke(an, "swap", [cy, cz, toString(this)], [AttachedPayment(bq(cF), cE)])
601630 }
602- else am()
631+ else av()
603632
604633
605-func cL (aG,by,aS,cM) = {
606- let cN = if ((by == a))
634+func cU (aP,bH,bb,cV) = {
635+ let cW = if ((bH == a))
607636 then {
608- let cl = {
609- let aK = invoke(aG, "callFunction", ["withdrawREADONLY", [toString(cM)]], nil)
610- if ($isInstanceOf(aK, "List[Any]"))
611- then aK
612- else throw(($getType(aK) + " couldn't be cast to List[Any]"))
637+ let cu = {
638+ let aT = invoke(aP, "callFunction", ["withdrawREADONLY", [toString(cV)]], nil)
639+ if ($isInstanceOf(aT, "List[Any]"))
640+ then aT
641+ else throw(($getType(aT) + " couldn't be cast to List[Any]"))
613642 }
614- if ((cl == cl))
643+ if ((cu == cu))
615644 then $Tuple2({
616- let aK = cl[0]
617- if ($isInstanceOf(aK, "Int"))
618- then aK
619- else throw(($getType(aK) + " couldn't be cast to Int"))
645+ let aT = cu[0]
646+ if ($isInstanceOf(aT, "Int"))
647+ then aT
648+ else throw(($getType(aT) + " couldn't be cast to Int"))
620649 }, {
621- let aK = cl[1]
622- if ($isInstanceOf(aK, "Int"))
623- then aK
624- else throw(($getType(aK) + " couldn't be cast to Int"))
650+ let aT = cu[1]
651+ if ($isInstanceOf(aT, "Int"))
652+ then aT
653+ else throw(($getType(aT) + " couldn't be cast to Int"))
625654 })
626655 else throw("Strict value is not equal to itself.")
627656 }
628- else if ((by == b))
657+ else if ((bH == b))
629658 then {
630- let cl = split({
631- let aK = invoke(aG, "evaluateGetREADONLY", [aS, cM], nil)
632- if ($isInstanceOf(aK, "String"))
633- then aK
634- else throw(($getType(aK) + " couldn't be cast to String"))
659+ let cu = split({
660+ let aT = invoke(aP, "evaluateGetREADONLY", [bb, cV], nil)
661+ if ($isInstanceOf(aT, "String"))
662+ then aT
663+ else throw(($getType(aT) + " couldn't be cast to String"))
635664 }, "__")
636- if ((cl == cl))
637- then $Tuple2(parseIntValue(cl[1]), parseIntValue(cl[2]))
665+ if ((cu == cu))
666+ then $Tuple2(parseIntValue(cu[1]), parseIntValue(cu[2]))
638667 else throw("Strict value is not equal to itself.")
639668 }
640- else am()
641- let cO = cN._1
642- let cP = cN._2
643- $Tuple2(cO, cP)
669+ else av()
670+ let cX = cW._1
671+ let cY = cW._2
672+ $Tuple2(cX, cY)
644673 }
645674
646675
647-func cQ (by,aw) = if ((by == a))
676+func cZ (bH,aF) = if ((bH == a))
648677 then {
649- let cR = aA(ak)
650- if ((cR == cR))
678+ let da = aJ(ao)
679+ if ((da == da))
651680 then {
652- let cl = invoke(bc(), "claim", [aw], nil)
653- if ((cl == cl))
681+ let cu = invoke(bl(), "claim", [aF], nil)
682+ if ((cu == cu))
654683 then {
655- let cS = aA(ak)
656- $Tuple2((cS - cR), ak)
684+ let db = aJ(ao)
685+ $Tuple2((db - da), ao)
657686 }
658687 else throw("Strict value is not equal to itself.")
659688 }
660689 else throw("Strict value is not equal to itself.")
661690 }
662- else if ((by == b))
691+ else if ((bH == b))
663692 then {
664- let cR = aA(al)
665- if ((cR == cR))
693+ let dc = aZ(addressFromStringValue(aF))
694+ let aR = dc._1
695+ let aS = dc._2
696+ let dd = dc._3
697+ let de = dc._4
698+ let df = dc._5
699+ let da = aJ(ap)
700+ if ((da == da))
666701 then {
667- let cl = invoke(bd(Address(fromBase58String(aw))), "claimWX", [aw], nil)
668- if ((cl == cl))
702+ let cu = invoke(bm(addressFromStringValue(aF)), "claimWx", [df], nil)
703+ if ((cu == cu))
669704 then {
670- let cS = aA(al)
671- $Tuple2((cS - cR), al)
705+ let db = aJ(ap)
706+ $Tuple2((db - da), ap)
672707 }
673708 else throw("Strict value is not equal to itself.")
674709 }
675710 else throw("Strict value is not equal to itself.")
676711 }
677- else am()
712+ else av()
678713
679714
680-func cT (by,aw,bb,bR,aI,bS,aJ,aP,aO,cU) = {
681- let cV = aA(fromBase58String(cU))
682- if ((cV == cV))
715+func dg (bH,aF,bk,ca,aR,cb,aS,aY,aX,dh) = {
716+ let di = aJ(fromBase58String(dh))
717+ if ((di == di))
683718 then {
684- let aG = addressFromStringValue(aw)
685- let cW = if (if ((bR > 0))
686- then (bS > 0)
719+ let aP = addressFromStringValue(aF)
720+ let dj = if (if ((ca > 0))
721+ then (cb > 0)
687722 else false)
688723 then {
689- let cX = bQ(by, aG, bR, aI, bS, aJ, aP, aO)
690- let cY = cX._1
691- let cZ = cX._2
692- let da = cX._3
693- let db = cX._4
694- let cl = ca(aG, by, cY, aI, cZ, aJ)
695- if ((cl == cl))
696- then $Tuple2(da, db)
724+ let dk = bZ(bH, aP, ca, aR, cb, aS, aY, aX)
725+ let dl = dk._1
726+ let dm = dk._2
727+ let dn = dk._3
728+ let do = dk._4
729+ let cu = cj(aP, bH, dl, aR, dm, aS)
730+ if ((cu == cu))
731+ then $Tuple2(dn, do)
697732 else throw("Strict value is not equal to itself.")
698733 }
699- else if ((bR > 0))
700- then $Tuple2(bR, aI)
701- else if ((bS > 0))
702- then $Tuple2(bS, aJ)
734+ else if ((ca > 0))
735+ then $Tuple2(ca, aR)
736+ else if ((cb > 0))
737+ then $Tuple2(cb, aS)
703738 else throw("pmts must be > 0")
704- let da = cW._1
705- let db = cW._2
706- let cl = if ((da > 0))
707- then cc(aG, by, da, db)
739+ let dn = dj._1
740+ let do = dj._2
741+ let cu = if ((dn > 0))
742+ then cl(aP, bH, dn, do)
708743 else nil
709- if ((cl == cl))
744+ if ((cu == cu))
710745 then {
711- let dc = aA(fromBase58String(cU))
712- let dd = (dc - cV)
713- let de = fraction(dd, ba(aw, bb), m)
714- let df = (dd - de)
715- if ((0 >= df))
746+ let dp = aJ(fromBase58String(dh))
747+ let dq = (dp - di)
748+ let dr = fraction(dq, bj(aF, bk), m)
749+ let ds = (dq - dr)
750+ if ((0 >= ds))
716751 then throw("amount of staked sharetokens must be > 0")
717752 else {
718- let dg = ce(aw, by, cU, df)
719- if ((dg == dg))
720- then $Tuple2(df, de)
753+ let dt = cn(aF, bH, dh, ds)
754+ if ((dt == dt))
755+ then $Tuple2(ds, dr)
721756 else throw("Strict value is not equal to itself.")
722757 }
723758 }
727762 }
728763
729764
730-func dh (aw,aZ,di,de,dj,aS,ax,dk) = {
731- let dl = aW(aw)
732- let dm = aX(aw)
733- let dn = if (dk)
734- then $Tuple2(getIntegerValue(this, (aw + C)), (dm + di))
735- else $Tuple2(getIntegerValue(this, (aw + D)), dm)
736- let do = dn._1
737- let dp = dn._2
738-[IntegerEntry((aw + A), (dl + di)), IntegerEntry((aw + B), dp), IntegerEntry((((((aw + "_") + aZ) + "_") + toString(dj)) + u), di), IntegerEntry((((((aw + "_") + aZ) + "_") + toString(dj)) + z), do), StringEntry((((aZ + "_") + toString(dj)) + v), aw), IntegerEntry((aZ + y), dj), ScriptTransfer(ag, de, fromBase58String(aS))]
765+func du (aF,bi,dv,dr,dw,bb,aG,dx) = {
766+ let dy = bf(aF)
767+ let dz = bg(aF)
768+ let dA = if (dx)
769+ then $Tuple2(getIntegerValue(this, (aF + C)), (dz + dv))
770+ else $Tuple2(getIntegerValue(this, (aF + D)), dz)
771+ let dB = dA._1
772+ let dC = dA._2
773+[IntegerEntry((aF + A), (dy + dv)), IntegerEntry((aF + B), dC), IntegerEntry((((((aF + "_") + bi) + "_") + toString(dw)) + u), dv), IntegerEntry((((((aF + "_") + bi) + "_") + toString(dw)) + z), dB), StringEntry((((bi + "_") + toString(dw)) + v), aF), IntegerEntry((bi + y), dw), ScriptTransfer(ak, dr, fromBase58String(bb))]
739774 }
740775
741776
742-func dq (dr,ds,dt,du,dv,dw,dx,dy,dz,dA) = {
743- let dB = aA(bh(dr))
744- if ((dB == dB))
777+func dD (dE,dF,dG,dH,dI,dJ,dK,dL,dM,dN) = {
778+ let dO = aJ(bq(dE))
779+ if ((dO == dO))
745780 then {
746- let cl = invoke(ah, "swap", [du, dv, dw, dx, dy, dz, dA], [AttachedPayment(dt, ds)])
747- if ((cl == cl))
748- then (aA(bh(dr)) - dB)
781+ let cu = invoke(al, "swap", [dH, dI, dJ, dK, dL, dM, dN], [AttachedPayment(dG, dF)])
782+ if ((cu == cu))
783+ then (aJ(bq(dE)) - dO)
749784 else throw("Strict value is not equal to itself.")
750785 }
751786 else throw("Strict value is not equal to itself.")
752787 }
753788
754789
755-func dC (dr,ds,dt,dD,dE,dA) = {
756- let dB = aA(bh(dr))
757- if ((dB == dB))
790+func dP (dE,dF,dG,dQ,dR,dN) = {
791+ let dO = aJ(bq(dE))
792+ if ((dO == dO))
758793 then {
759- let cl = invoke(ah, "puzzleSwap", [dD, dE, dA], [AttachedPayment(dt, ds)])
760- if ((cl == cl))
761- then (aA(bh(dr)) - dB)
794+ let cu = invoke(al, "puzzleSwap", [dQ, dR, dN], [AttachedPayment(dG, dF)])
795+ if ((cu == cu))
796+ then (aJ(bq(dE)) - dO)
762797 else throw("Strict value is not equal to itself.")
763798 }
764799 else throw("Strict value is not equal to itself.")
765800 }
766801
767802
768-func dF (dr,ds,dt,dG,dH,dI,dJ,dK,dL,dA) = {
769- let dB = aA(bh(dr))
770- if ((dB == dB))
803+func dS (dE,dF,dG,dT,dU,dV,dW,dX,dY,dN) = {
804+ let dO = aJ(bq(dE))
805+ if ((dO == dO))
771806 then {
772- let cl = invoke(ah, "swopfiSwap", [dG, dH, dI, dJ, dK, dL, dA], [AttachedPayment(dt, ds)])
773- if ((cl == cl))
774- then (aA(bh(dr)) - dB)
807+ let cu = invoke(al, "swopfiSwap", [dT, dU, dV, dW, dX, dY, dN], [AttachedPayment(dG, dF)])
808+ if ((cu == cu))
809+ then (aJ(bq(dE)) - dO)
775810 else throw("Strict value is not equal to itself.")
776811 }
777812 else throw("Strict value is not equal to itself.")
778813 }
779814
780815
781-func dM (aw,by,dN,dO) = {
782- let aG = Address(fromBase58String(aw))
783- let dP = aU(aG, by)
784- let dQ = dP._1
785- let dR = dP._2
786- let aP = dP._3
787- let aO = dP._4
788- let aS = dP._5
789- if (if ((dN != dQ))
790- then (dN != dR)
816+func dZ (aF,bH,ea,eb) = {
817+ let aP = Address(fromBase58String(aF))
818+ let ec = bd(aP, bH)
819+ let ed = ec._1
820+ let ee = ec._2
821+ let aY = ec._3
822+ let aX = ec._4
823+ let bb = ec._5
824+ if (if ((ea != ed))
825+ then (ea != ee)
791826 else false)
792827 then throw("Wrong asset")
793828 else {
794- let dS = if ((dN == dQ))
795- then $Tuple2(dO, 0)
796- else $Tuple2(0, dO)
797- let bR = dS._1
798- let bS = dS._2
799- let dT = cT(by, aw, i, bR, dQ, bS, dR, aP, aO, aS)
800- let di = dT._1
801- let dU = dT._2
802- let dV = valueOrElse(getInteger(this, (aw + C)), 0)
803- let dW = valueOrElse(getInteger(this, (aw + D)), 0)
804- let dX = aW(aw)
805- let dY = aX(aw)
806- let dZ = fraction(dY, j, dX)
807- let ea = fraction(di, dZ, j)
808- let eb = (di - ea)
809- let ec = if ((dY > 0))
810- then (dV + fraction(ea, k, dY))
829+ let ef = bf(aF)
830+ let eg = bg(aF)
831+ let eh = fraction(eg, j, ef)
832+ let ei = fraction(eb, eh, j)
833+ let ej = (eb - ei)
834+ let ek = fraction(ei, bj(aF, d), m)
835+ let el = fraction(ej, bj(aF, c), m)
836+ let em = (ek + el)
837+ let en = if ((ea == ed))
838+ then $Tuple2((eb - em), 0)
839+ else $Tuple2(0, (eb - em))
840+ let ca = en._1
841+ let cb = en._2
842+ let eo = dg(bH, aF, i, ca, ed, cb, ee, aY, aX, bb)
843+ let dv = eo._1
844+ let ep = eo._2
845+ let eq = valueOrElse(getInteger(this, (aF + C)), 0)
846+ let er = valueOrElse(getInteger(this, (aF + D)), 0)
847+ let es = fraction(dv, eh, j)
848+ let et = (dv - es)
849+ let eu = if ((eg > 0))
850+ then (eq + fraction(es, k, eg))
811851 else 0
812- let ed = if (((dX - dY) > 0))
813- then (dW + fraction(eb, k, (dX - dY)))
852+ let ev = if (((ef - eg) > 0))
853+ then (er + fraction(et, k, (ef - eg)))
814854 else 0
815- let ee = fraction(ea, ba(aw, d), m)
816- let ef = fraction(eb, ba(aw, c), m)
817- let eg = cg(aw, by, aS, (ee + ef))
818- if ((eg == eg))
819- then ([IntegerEntry((aw + C), ec), IntegerEntry((aw + D), ed), IntegerEntry((aw + A), ((dX + di) - eg)), IntegerEntry((aw + B), ((dY + ea) - ee)), ScriptTransfer(ag, (ee + ef), fromBase58String(aS))] ++ bL(dQ, dR, aS, nil))
820- else throw("Strict value is not equal to itself.")
855+ ([IntegerEntry((aF + C), eu), IntegerEntry((aF + D), ev), IntegerEntry((aF + A), (ef + dv)), IntegerEntry((aF + B), (eg + es)), ScriptTransfer(ak, em, fromBase58String(ea))] ++ bV(ed, ee, bb, nil))
821856 }
822857 }
823858
824859
825-func eh (aw,cM,ei,ej,ek) = {
826- let aG = Address(fromBase58String(aw))
827- let by = valueOrErrorMessage(getString(this, (N + aw)), "Unknown pool")
828- let el = aU(aG, by)
829- let cn = el._1
830- let co = el._2
831- let aP = el._3
832- let aO = el._4
833- let aS = el._5
834- let em = aA(bh(cn))
835- if ((em == em))
860+func ew (bi,aF,ex,ey) = {
861+ let ez = valueOrErrorMessage(getInteger(this, (((((aF + "_") + bi) + "_") + ex) + u)), "Unknown position")
862+ let eA = getIntegerValue(this, (((((aF + "_") + bi) + "_") + ex) + z))
863+ let eB = if (ey)
864+ then getIntegerValue(this, (aF + C))
865+ else getIntegerValue(this, (aF + D))
866+ (ez + fraction(ez, (eB - eA), k))
867+ }
868+
869+
870+func eC (aF,eD,eE,eF) = {
871+ let bk = if (eD)
872+ then f
873+ else e
874+ if (eE)
875+ then fraction(eF, bj(aF, bk), m)
876+ else 0
877+ }
878+
879+
880+func eG (bi,aF,ex,eE) = {
881+ let ez = valueOrErrorMessage(getInteger(this, (((((aF + "_") + bi) + "_") + ex) + u)), "Unknown position")
882+ let eD = (valueOrElse(getInteger(this, (((((aF + "_") + bi) + "_") + ex) + w)), 0) > 0)
883+ let cV = ew(bi, aF, ex, eD)
884+ let eH = bf(aF)
885+ let eI = bg(aF)
886+ let eJ = Address(fromBase58String(bi))
887+ let aP = Address(fromBase58String(aF))
888+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Unknown pool")
889+ let eK = bd(aP, bH)
890+ let eL = eK._1
891+ let eM = eK._2
892+ let aY = eK._3
893+ let aX = eK._4
894+ let bb = eK._5
895+ let eN = $Tuple2(bq(eL), bq(eM))
896+ let eO = eN._1
897+ let eP = eN._2
898+ let eQ = eC(aF, eD, eE, cV)
899+ let eR = aJ(eO)
900+ if ((eR == eR))
836901 then {
837- let en = aA(bh(co))
838- if ((en == en))
902+ let eS = aJ(eP)
903+ if ((eS == eS))
839904 then {
840- let cl = if ((by == a))
905+ let cu = if ((bH == a))
841906 then {
842- let cl = cg(aw, by, aS, ek)
843- if ((cl == cl))
844- then invoke(aG, "callFunction", ["withdraw", [toString(cM)]], nil)
907+ let cu = cp(aF, bH, bb, eQ)
908+ if ((cu == cu))
909+ then invoke(aP, "callFunction", ["withdraw", [toString(cV)]], nil)
845910 else throw("Strict value is not equal to itself.")
846911 }
847- else if ((by == b))
912+ else if ((bH == b))
848913 then {
849- let cl = cg(aw, by, aS, (cM + ek))
850- if ((cl == cl))
851- then invoke(aG, "get", nil, [AttachedPayment(bh(aS), cM)])
914+ let cu = cp(aF, bH, bb, (cV + eQ))
915+ if ((cu == cu))
916+ then invoke(aP, "get", nil, [AttachedPayment(bq(bb), cV)])
852917 else throw("Strict value is not equal to itself.")
853918 }
854- else am()
855- if ((cl == cl))
919+ else av()
920+ if ((cu == cu))
856921 then {
857- let eo = aA(bh(cn))
858- let ep = aA(bh(co))
859- let eq = $Tuple2((eo - em), (ep - en))
860- let er = eq._1
861- let es = eq._2
862- let et = if ((ei > 0))
922+ let eT = aJ(eO)
923+ if ((eT == eT))
863924 then {
864- let eu = if (if ((ej == cn))
865- then (ei > er)
866- else false)
867- then (ei - er)
868- else if (if ((ej == co))
869- then (ei > es)
870- else false)
871- then (ei - es)
872- else 0
873- let ev = if ((eu > 0))
874- then cI(by, aw, cn, co, (aP - er), (aO - es), eu, ej)
875- else nil
876- if ((ev == ev))
925+ let eU = aJ(eP)
926+ if ((eU == eU))
877927 then {
878- let ew = aA(bh(cn))
879- let ex = aA(bh(co))
880- if ((ej == cn))
881- then $Tuple2(((ew - em) - ei), (ex - en))
882- else $Tuple2((ew - em), ((ex - en) - ei))
928+ let eV = $Tuple2((eT - eR), (eU - eS))
929+ let eW = eV._1
930+ let eX = eV._2
931+ let eY = if (eD)
932+ then {
933+ let eZ = getStringValue(this, (((((aF + "_") + bi) + "_") + ex) + x))
934+ let fa = {
935+ let aT = invoke(aw(), "getAssetDebt", [false, ((bi + "_") + ex), eZ], nil)
936+ if ($isInstanceOf(aT, "Int"))
937+ then aT
938+ else throw(($getType(aT) + " couldn't be cast to Int"))
939+ }
940+ if ((fa == fa))
941+ then {
942+ let fb = if (if ((eZ == eL))
943+ then (fa > eW)
944+ else false)
945+ then (fa - eW)
946+ else if (if ((eZ == eM))
947+ then (fa > eX)
948+ else false)
949+ then (fa - eX)
950+ else 0
951+ let fc = if ((fb > 0))
952+ then cR(bH, aF, eL, eM, (aY - eW), (aX - eX), fb, eZ)
953+ else nil
954+ if ((fc == fc))
955+ then {
956+ let fd = aJ(eO)
957+ if ((fd == fd))
958+ then {
959+ let fe = aJ(eP)
960+ if ((fe == fe))
961+ then {
962+ let ff = if ((fa > 0))
963+ then invoke(aw(), "repayFor", [((bi + "_") + ex)], [AttachedPayment(bq(eZ), fa)])
964+ else 0
965+ if ((ff == ff))
966+ then if ((eZ == eL))
967+ then $Tuple2(((fd - eR) - fa), (fe - eS))
968+ else $Tuple2((fd - eR), ((fe - eS) - fa))
969+ else throw("Strict value is not equal to itself.")
970+ }
971+ else throw("Strict value is not equal to itself.")
972+ }
973+ else throw("Strict value is not equal to itself.")
974+ }
975+ else throw("Strict value is not equal to itself.")
976+ }
977+ else throw("Strict value is not equal to itself.")
978+ }
979+ else $Tuple2(eW, eX)
980+ let fg = eY._1
981+ let fh = eY._2
982+ let fi = if (eD)
983+ then [IntegerEntry((aF + B), ((eI - cV) - eQ))]
984+ else nil
985+ let fj = (([DeleteEntry((((((aF + "_") + bi) + "_") + ex) + u)), DeleteEntry((((bi + "_") + ex) + v)), DeleteEntry((((((aF + "_") + bi) + "_") + ex) + w)), DeleteEntry((((((aF + "_") + bi) + "_") + ex) + x)), DeleteEntry((((((aF + "_") + bi) + "_") + ex) + z)), IntegerEntry((aF + A), ((eH - cV) - eQ)), ScriptTransfer(eJ, fg, eO), ScriptTransfer(eJ, fh, eP), ScriptTransfer(ak, eQ, fromBase58String(bb))] ++ fi) ++ bV(eL, eM, bb, nil))
986+ $Tuple2(fj, [fg, fh])
883987 }
884988 else throw("Strict value is not equal to itself.")
885989 }
886- else $Tuple2(er, es)
887- let ey = et._1
888- let ez = et._2
889- $Tuple5(ey, cn, ez, co, aS)
990+ else throw("Strict value is not equal to itself.")
890991 }
891992 else throw("Strict value is not equal to itself.")
892993 }
896997 }
897998
898999
899-func eA (aZ,aw,eB,eC) = {
900- let eD = valueOrErrorMessage(getInteger(this, (((((aw + "_") + aZ) + "_") + eB) + u)), "Unknown position")
901- let eE = getIntegerValue(this, (((((aw + "_") + aZ) + "_") + eB) + z))
902- let eF = if (eC)
903- then getIntegerValue(this, (aw + C))
904- else getIntegerValue(this, (aw + D))
905- (eD + fraction(eD, (eF - eE), k))
1000+func fk (fl) = {
1001+ let fm = split(valueOrErrorMessage(getString(this, (fl + L)), ("No request with id " + fl)), ",")
1002+ let bi = fm[0]
1003+ let aF = fm[1]
1004+ let ca = parseIntValue(fm[2])
1005+ let ed = fm[3]
1006+ let cb = parseIntValue(fm[4])
1007+ let ee = fm[5]
1008+ let aY = parseIntValue(fm[6])
1009+ let aX = parseIntValue(fm[7])
1010+ let bb = fm[8]
1011+ let fn = fm[9]
1012+ let fo = parseIntValue(fm[10])
1013+ $Tuple11(bi, aF, ca, ed, cb, ee, aY, aX, bb, fn, fo)
9061014 }
9071015
9081016
909-func eG (aZ,aw,eB,eH) = {
910- let eD = valueOrErrorMessage(getInteger(this, (((((aw + "_") + aZ) + "_") + eB) + u)), "Unknown position")
911- let eI = valueOrElse(getInteger(this, (((((aw + "_") + aZ) + "_") + eB) + w)), 0)
912- let cM = eA(aZ, aw, eB, (eI > 0))
913- let eJ = aW(aw)
914- let eK = Address(fromBase58String(aZ))
915- let ej = valueOrElse(getString(this, (((((aw + "_") + aZ) + "_") + eB) + x)), "")
916- let eL = if ((eI > 0))
917- then $Tuple2({
918- let aK = invoke(an(), "getAssetDebt", [false, ((aZ + "_") + eB), ej], nil)
919- if ($isInstanceOf(aK, "Int"))
920- then aK
921- else throw(($getType(aK) + " couldn't be cast to Int"))
922- }, f)
923- else $Tuple2(0, e)
924- let ei = eL._1
925- let bb = eL._2
926- let ek = if (eH)
927- then fraction(cM, ba(aw, bb), m)
928- else 0
929- let eM = eh(aw, (cM - ek), ei, ej, ek)
930- if ((eM == eM))
931- then {
932- let aS = eM._5
933- let co = eM._4
934- let eN = eM._3
935- let cn = eM._2
936- let eO = eM._1
937- let eP = if ((ei > 0))
938- then invoke(an(), "repayFor", [((aZ + "_") + eB)], [AttachedPayment(bh(ej), ei)])
939- else 0
940- if ((eP == eP))
941- then {
942- let eQ = ([DeleteEntry((((((aw + "_") + aZ) + "_") + eB) + u)), DeleteEntry((((aZ + "_") + eB) + v)), DeleteEntry((((((aw + "_") + aZ) + "_") + eB) + w)), DeleteEntry((((((aw + "_") + aZ) + "_") + eB) + x)), DeleteEntry((((((aw + "_") + aZ) + "_") + eB) + z)), IntegerEntry((aw + A), ((eJ - cM) - ek)), ScriptTransfer(eK, eO, bh(cn)), ScriptTransfer(eK, eN, bh(co)), ScriptTransfer(ag, ek, fromBase58String(aS))] ++ bL(cn, co, aS, nil))
943- $Tuple2(eQ, [eO, eN])
944- }
945- else throw("Strict value is not equal to itself.")
946- }
947- else throw("Strict value is not equal to itself.")
948- }
949-
950-
951-func eR (eS) = {
952- let eT = split(valueOrErrorMessage(getString(this, (eS + L)), ("No request with id " + eS)), ",")
953- let aZ = eT[0]
954- let aw = eT[1]
955- let bR = parseIntValue(eT[2])
956- let dQ = eT[3]
957- let bS = parseIntValue(eT[4])
958- let dR = eT[5]
959- let aP = parseIntValue(eT[6])
960- let aO = parseIntValue(eT[7])
961- let aS = eT[8]
962- let eU = eT[9]
963- let eV = parseIntValue(eT[10])
964- $Tuple11(aZ, aw, bR, dQ, bS, dR, aP, aO, aS, eU, eV)
965- }
966-
967-
968-func eW (bR,bS,aI,aJ,eX,eY) = if (if ((eY != aI))
969- then (eY != aJ)
1017+func fp (ca,cb,aR,aS,fq,fr) = if (if ((fr != aR))
1018+ then (fr != aS)
9701019 else false)
9711020 then throw("Wrong borrow asset")
9721021 else {
973- let bC = getIntegerValue(ai, (aI + R))
974- let bD = getIntegerValue(ai, (aJ + R))
975- let eZ = pow(10, 0, bi(aI), 0, 0, DOWN)
976- let fa = pow(10, 0, bi(aJ), 0, 0, DOWN)
977- let fb = (fraction(bC, bR, eZ) + fraction(bD, bS, fa))
978- let fc = if ((eY == aI))
979- then $Tuple2(bC, eZ)
980- else $Tuple2(bD, fa)
981- let fd = fc._1
982- let fe = fc._2
983- fraction(fraction(fb, (eX - 100), 100), fe, fd)
1022+ let bM = getIntegerValue(am, (aR + R))
1023+ let bN = getIntegerValue(am, (aS + R))
1024+ let fs = pow(10, 0, br(aR), 0, 0, DOWN)
1025+ let ft = pow(10, 0, br(aS), 0, 0, DOWN)
1026+ let fu = (fraction(bM, ca, fs) + fraction(bN, cb, ft))
1027+ let fv = if ((fr == aR))
1028+ then $Tuple2(bM, fs)
1029+ else $Tuple2(bN, ft)
1030+ let fw = fv._1
1031+ let fx = fv._2
1032+ fraction(fraction(fu, (fq - 100), 100), fx, fw)
9841033 }
9851034
9861035
987-func ff (fg,dQ,dR) = if ((size(fg) == 2))
988- then if ((bg(fg[0].assetId) != dQ))
1036+func fy (fz,ed,ee) = if ((size(fz) == 2))
1037+ then if ((bp(fz[0].assetId) != ed))
9891038 then throw("Wrong payment asset A")
990- else if ((bg(fg[1].assetId) != dR))
1039+ else if ((bp(fz[1].assetId) != ee))
9911040 then throw("Wrong payment asset B")
992- else $Tuple2(fg[0].amount, fg[1].amount)
993- else if ((size(fg) == 1))
994- then if ((bg(fg[0].assetId) == dQ))
995- then $Tuple2(fg[0].amount, 0)
996- else if ((bg(fg[0].assetId) == dR))
997- then $Tuple2(0, fg[0].amount)
1041+ else $Tuple2(fz[0].amount, fz[1].amount)
1042+ else if ((size(fz) == 1))
1043+ then if ((bp(fz[0].assetId) == ed))
1044+ then $Tuple2(fz[0].amount, 0)
1045+ else if ((bp(fz[0].assetId) == ee))
1046+ then $Tuple2(0, fz[0].amount)
9981047 else throw("Wrong payment")
9991048 else throw("One or two payments expected")
10001049
10011050
1002-func fh (aP,aO,fi,fj) = {
1003- let fk = ((j - fraction(fraction(aO, j, aP), j, fraction(fj, j, fi))) * 100)
1004- if ((0 > fk))
1005- then (fk * -1)
1006- else fk
1051+func fA (aY,aX,fB,fC) = {
1052+ let fD = ((j - fraction(fraction(aX, j, aY), j, fraction(fC, j, fB))) * 100)
1053+ if ((0 > fD))
1054+ then (fD * -1)
1055+ else fD
10071056 }
10081057
10091058
1010-func fl (aw,by,fm,fn,da) = {
1011- let fo = if (fm)
1012- then cQ(by, aw)
1059+func fE (aF,bH,fF,co,dn) = {
1060+ let fG = if (fF)
1061+ then cZ(bH, aF)
10131062 else {
1014- let fp = if ((by == a))
1015- then ak
1016- else if ((by == b))
1017- then al
1018- else am()
1019- $Tuple2(fn, fp)
1063+ let fH = if ((bH == a))
1064+ then ao
1065+ else if ((bH == b))
1066+ then ap
1067+ else av()
1068+ $Tuple2(co, fH)
10201069 }
1021- let fq = fo._1
1022- let fr = fo._2
1023- let fs = aA(fr)
1024- if (if ((fn > (fq + da)))
1070+ let fI = fG._1
1071+ let fJ = fG._2
1072+ let fK = aJ(fJ)
1073+ if (if ((co > (fI + dn)))
10251074 then true
1026- else (fn > fs))
1075+ else (co > fK))
10271076 then throw("To big amount to exchange")
1028- else $Tuple2(fq, fr)
1077+ else $Tuple2(fI, fJ)
10291078 }
10301079
10311080
1032-@Callable(aq)
1033-func getShareAssetPriceREADONLY (aS) = {
1034- let ft = bx(aS)
1035- $Tuple2(nil, ft)
1081+@Callable(ay)
1082+func getPoolInfoREADONLY (aF) = {
1083+ let aP = addressFromStringValue(aF)
1084+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1085+ let fL = bd(Address(fromBase58String(aF)), bH)
1086+ let ed = fL._1
1087+ let ee = fL._2
1088+ let aY = fL._3
1089+ let aX = fL._4
1090+ let bb = fL._5
1091+ let bO = be(aP, bH, bb)
1092+ $Tuple2(nil, $Tuple6(ed, ee, bb, aY, aX, bO))
10361093 }
10371094
10381095
10391096
1040-@Callable(aq)
1041-func getUserPositionShareAmountREADONLY (aZ,dj) = {
1042- let aw = valueOrErrorMessage(getString(this, (((aZ + "_") + dj) + v)), "Unknown position")
1043- let eI = getIntegerValue(this, (((((aw + "_") + aZ) + "_") + dj) + w))
1044- let cM = eA(aZ, aw, dj, (eI > 0))
1045- $Tuple2(nil, cM)
1097+@Callable(ay)
1098+func getShareAssetPriceREADONLY (bb) = {
1099+ let fM = bG(bb)
1100+ $Tuple2(nil, fM)
10461101 }
10471102
10481103
10491104
1050-@Callable(aq)
1051-func getUserPositionREADONLY (aZ,fu,dj) = {
1052- func fv (bo,aw) = {
1053- let fw = bo
1054- let fx = fw._1
1055- let fy = fw._2
1056- let fz = fw._3
1057- let fA = fw._4
1058- let fB = fw._5
1059- let fC = fw._6
1060- if (!(isDefined(getInteger(this, (((((aw + "_") + aZ) + "_") + dj[fC]) + u)))))
1061- then $Tuple6((fx :+ 0), (fy :+ 0), (fz :+ 0), (fA :+ 0), (fB :+ 0), (fC + 1))
1062- else {
1063- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
1064- let fD = aU(Address(fromBase58String(aw)), by)
1065- let dQ = fD._1
1066- let dR = fD._2
1067- let aP = fD._3
1068- let aO = fD._4
1069- let aS = fD._5
1070- let eI = valueOrElse(getInteger(this, (((((aw + "_") + aZ) + "_") + dj[fC]) + w)), 0)
1071- let cM = eA(aZ, aw, dj[fC], (eI > 0))
1072- let fE = cL(Address(fromBase58String(aw)), by, aS, cM)
1073- let fF = fE._1
1074- let fG = fE._2
1075- if ((eI > 0))
1076- then {
1077- let ej = getStringValue(this, (((((aw + "_") + aZ) + "_") + dj[fC]) + x))
1078- let ei = {
1079- let aK = invoke(an(), "getAssetDebt", [false, ((aZ + "_") + dj[fC]), ej], nil)
1080- if ($isInstanceOf(aK, "Int"))
1081- then aK
1082- else throw(($getType(aK) + " couldn't be cast to Int"))
1083- }
1084- if ((ei == ei))
1085- then {
1086- let fH = if ((by == a))
1087- then cm(aw, dQ, dR, aP, aO, ei, ej)
1088- else if ((by == b))
1089- then cB(aw, dQ, dR, aP, aO, ei, ej)
1090- else am()
1091- let cw = fH._1
1092- let cv = fH._2
1093- let fI = if ((cw == dR))
1094- then $Tuple2((fF - ei), (fG - cv))
1095- else $Tuple2((fF - cv), (fG - ei))
1096- let fJ = fI._1
1097- let fK = fI._2
1098- $Tuple6((fx :+ fF), (fy :+ fG), (fz :+ ei), (fA :+ fJ), (fB :+ fK), (fC + 1))
1099- }
1100- else throw("Strict value is not equal to itself.")
1101- }
1102- else $Tuple6((fx :+ fF), (fy :+ fG), fz, (fx :+ fF), (fy :+ fG), (fC + 1))
1103- }
1104- }
1105-
1106- let fL = {
1107- let bq = fu
1108- let br = size(bq)
1109- let bs = $Tuple6(nil, nil, nil, nil, nil, 0)
1110- func bt (bu,bv) = if ((bv >= br))
1111- then bu
1112- else fv(bu, bq[bv])
1113-
1114- func bw (bu,bv) = if ((bv >= br))
1115- then bu
1116- else throw("List size exceeds 20")
1117-
1118- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1119- }
1120- let fx = fL._1
1121- let fy = fL._2
1122- let fz = fL._3
1123- let fA = fL._4
1124- let fB = fL._5
1125- $Tuple2(nil, $Tuple5(fx, fy, fz, fA, fB))
1105+@Callable(ay)
1106+func getUserPositionShareAmountREADONLY (bi,dw) = {
1107+ let aF = valueOrErrorMessage(getString(this, (((bi + "_") + dw) + v)), "Unknown position")
1108+ let fN = getIntegerValue(this, (((((aF + "_") + bi) + "_") + dw) + w))
1109+ let cV = ew(bi, aF, dw, (fN > 0))
1110+ $Tuple2(nil, cV)
11261111 }
11271112
11281113
11291114
1130-@Callable(aq)
1131-func replenish (aw,eX,eY) = valueOrElse(au(), {
1132- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
1133- if (!(av(aw, by)))
1115+@Callable(ay)
1116+func getUserPositionREADONLY (bi,fO,dw) = {
1117+ func fP (bx,aF) = {
1118+ let fQ = bx
1119+ let fR = fQ._1
1120+ let fS = fQ._2
1121+ let fT = fQ._3
1122+ let fU = fQ._4
1123+ let fV = fQ._5
1124+ let fW = fQ._6
1125+ if (!(isDefined(getInteger(this, (((((aF + "_") + bi) + "_") + dw[fW]) + u)))))
1126+ then $Tuple6((fR :+ 0), (fS :+ 0), (fT :+ 0), (fU :+ 0), (fV :+ 0), (fW + 1))
1127+ else {
1128+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1129+ let fX = bd(Address(fromBase58String(aF)), bH)
1130+ let ed = fX._1
1131+ let ee = fX._2
1132+ let aY = fX._3
1133+ let aX = fX._4
1134+ let bb = fX._5
1135+ let fN = valueOrElse(getInteger(this, (((((aF + "_") + bi) + "_") + dw[fW]) + w)), 0)
1136+ let cV = ew(bi, aF, dw[fW], (fN > 0))
1137+ let fY = cU(Address(fromBase58String(aF)), bH, bb, cV)
1138+ let fZ = fY._1
1139+ let ga = fY._2
1140+ if ((fN > 0))
1141+ then {
1142+ let eZ = getStringValue(this, (((((aF + "_") + bi) + "_") + dw[fW]) + x))
1143+ let fa = {
1144+ let aT = invoke(aw(), "getAssetDebt", [false, ((bi + "_") + dw[fW]), eZ], nil)
1145+ if ($isInstanceOf(aT, "Int"))
1146+ then aT
1147+ else throw(($getType(aT) + " couldn't be cast to Int"))
1148+ }
1149+ if ((fa == fa))
1150+ then {
1151+ let fb = if (if ((eZ == ed))
1152+ then (fa > fZ)
1153+ else false)
1154+ then (fa - fZ)
1155+ else if (if ((eZ == ee))
1156+ then (fa > ga)
1157+ else false)
1158+ then (fa - ga)
1159+ else 0
1160+ let cE = if ((fb > 0))
1161+ then if ((bH == a))
1162+ then {
1163+ let gb = cv(aF, ed, ee, aY, aX, fb, eZ)
1164+ gb._2
1165+ }
1166+ else if ((bH == b))
1167+ then {
1168+ let gb = cK(aF, ed, ee, aY, aX, fb, eZ)
1169+ gb._2
1170+ }
1171+ else av()
1172+ else 0
1173+ let gc = if ((eZ == ed))
1174+ then $Tuple2(((fZ + fb) - fa), (ga - cE))
1175+ else $Tuple2((fZ - cE), ((ga + fb) - fa))
1176+ let gd = gc._1
1177+ let ge = gc._2
1178+ $Tuple6((fR :+ fZ), (fS :+ ga), (fT :+ fa), (fU :+ gd), (fV :+ ge), (fW + 1))
1179+ }
1180+ else throw("Strict value is not equal to itself.")
1181+ }
1182+ else $Tuple6((fR :+ fZ), (fS :+ ga), fT, (fR :+ fZ), (fS :+ ga), (fW + 1))
1183+ }
1184+ }
1185+
1186+ let gf = {
1187+ let bz = fO
1188+ let bA = size(bz)
1189+ let bB = $Tuple6(nil, nil, nil, nil, nil, 0)
1190+ func bC (bD,bE) = if ((bE >= bA))
1191+ then bD
1192+ else fP(bD, bz[bE])
1193+
1194+ func bF (bD,bE) = if ((bE >= bA))
1195+ then bD
1196+ else throw("List size exceeds 20")
1197+
1198+ bF(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bB, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1199+ }
1200+ let fR = gf._1
1201+ let fS = gf._2
1202+ let fT = gf._3
1203+ let fU = gf._4
1204+ let fV = gf._5
1205+ $Tuple2(nil, $Tuple5(fR, fS, fT, fU, fV))
1206+ }
1207+
1208+
1209+
1210+@Callable(ay)
1211+func replenish (aF,fq,fr) = valueOrElse(aD(), {
1212+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1213+ if (!(aE(aF, bH)))
11341214 then throw("Pool not active at this moment")
1135- else if (if ((100 > eX))
1215+ else if (if ((100 > fq))
11361216 then true
1137- else (eX > 300))
1217+ else (fq > 300))
11381218 then throw("Leverage can't be <100 and >300")
1139- else if (if (!(getBooleanValue(this, (aw + E))))
1140- then (eX > 100)
1219+ else if (if (!(getBooleanValue(this, (aF + E))))
1220+ then (fq > 100)
11411221 else false)
11421222 then throw("You can't borrow in this pool")
11431223 else {
1144- let fM = aU(Address(fromBase58String(aw)), by)
1145- let dQ = fM._1
1146- let dR = fM._2
1147- let aP = fM._3
1148- let aO = fM._4
1149- let aS = fM._5
1150- if (if ((eY != dQ))
1151- then (eY != dR)
1224+ let gg = bd(Address(fromBase58String(aF)), bH)
1225+ let ed = gg._1
1226+ let ee = gg._2
1227+ let aY = gg._3
1228+ let aX = gg._4
1229+ let bb = gg._5
1230+ if (if ((fr != ed))
1231+ then (fr != ee)
11521232 else false)
11531233 then throw("Wrong borrow asset")
11541234 else {
1155- let fN = ff(aq.payments, dQ, dR)
1156- let bR = fN._1
1157- let bS = fN._2
1158- let aZ = toString(aq.caller)
1159- let fO = aY(aZ)
1160- if ((eX > 100))
1235+ let gh = fy(ay.payments, ed, ee)
1236+ let ca = gh._1
1237+ let cb = gh._2
1238+ let bi = toString(ay.caller)
1239+ let gi = bh(bi)
1240+ if ((fq > 100))
11611241 then {
1162- let eI = eW(bR, bS, dQ, dR, eX, eY)
1163- let eT = makeString([aZ, aw, toString(bR), dQ, toString(bS), dR, toString(aP), toString(aO), aS, eY, toString(eI)], ",")
1164- let fP = {
1165- let aK = invoke(this, "createNewRequest", [eT], nil)
1166- if ($isInstanceOf(aK, "Int"))
1167- then aK
1168- else throw(($getType(aK) + " couldn't be cast to Int"))
1242+ let fN = fp(ca, cb, ed, ee, fq, fr)
1243+ let fm = makeString([bi, aF, toString(ca), ed, toString(cb), ee, toString(aY), toString(aX), bb, fr, toString(fN)], ",")
1244+ let gj = {
1245+ let aT = invoke(this, "createNewRequest", [fm], nil)
1246+ if ($isInstanceOf(aT, "Int"))
1247+ then aT
1248+ else throw(($getType(aT) + " couldn't be cast to Int"))
11691249 }
1170- if ((fP == fP))
1250+ if ((gj == gj))
11711251 then {
1172- let fQ = [((aZ + "_") + toString(fO)), aS, eY, eI, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fP, "Can't create new request"))]
1173- let cl = reentrantInvoke(an(), "flashPosition", fQ, nil)
1174- if ((cl == cl))
1252+ let gk = [((bi + "_") + toString(gi)), bb, fr, fN, toString(this), "replenishFromLand", toString(valueOrErrorMessage(gj, "Can't create new request"))]
1253+ let cu = reentrantInvoke(aw(), "flashPosition", gk, nil)
1254+ if ((cu == cu))
11751255 then {
1176- let fR = getIntegerValue(this, (((((aw + "_") + aZ) + "_") + toString(fO)) + u))
1177- let fS = aL(Address(fromBase58String(aw)), by, dQ, dR)
1178- if ((fS == fS))
1256+ let gl = getIntegerValue(this, (((((aF + "_") + bi) + "_") + toString(gi)) + u))
1257+ let gm = aU(Address(fromBase58String(aF)), bH, ed, ee)
1258+ if ((gm == gm))
11791259 then {
1180- let fj = fS._2
1181- let fi = fS._1
1182- let fT = fh(aP, aO, fi, fj)
1183- let fU = cL(Address(fromBase58String(aw)), by, aS, fR)
1184- let fF = fU._1
1185- let fG = fU._2
1186- $Tuple2(nil, [fT, fF, fG])
1260+ let fC = gm._2
1261+ let fB = gm._1
1262+ let gn = fA(aY, aX, fB, fC)
1263+ let go = cU(Address(fromBase58String(aF)), bH, bb, gl)
1264+ let fZ = go._1
1265+ let ga = go._2
1266+ $Tuple2(nil, [gn, fZ, ga])
11871267 }
11881268 else throw("Strict value is not equal to itself.")
11891269 }
11921272 else throw("Strict value is not equal to itself.")
11931273 }
11941274 else {
1195- let fV = cT(by, aw, h, bR, dQ, bS, dR, aP, aO, aS)
1196- if ((fV == fV))
1275+ let gp = dg(bH, aF, h, ca, ed, cb, ee, aY, aX, bb)
1276+ if ((gp == gp))
11971277 then {
1198- let eg = fV._2
1199- let fR = fV._1
1200- let fW = aL(Address(fromBase58String(aw)), by, dQ, dR)
1201- if ((fW == fW))
1278+ let em = gp._2
1279+ let gl = gp._1
1280+ let gq = aU(Address(fromBase58String(aF)), bH, ed, ee)
1281+ if ((gq == gq))
12021282 then {
1203- let fj = fW._2
1204- let fi = fW._1
1205- let fT = fh(aP, aO, fi, fj)
1206- let fX = cL(Address(fromBase58String(aw)), by, aS, fR)
1207- let fF = fX._1
1208- let fG = fX._2
1209- $Tuple2((dh(aw, aZ, fR, eg, fO, aS, by, false) ++ bL(dQ, dR, aS, [toString(fF), toString(fG)])), [fT, fF, fG])
1283+ let fC = gq._2
1284+ let fB = gq._1
1285+ let gn = fA(aY, aX, fB, fC)
1286+ let gr = cU(Address(fromBase58String(aF)), bH, bb, gl)
1287+ let fZ = gr._1
1288+ let ga = gr._2
1289+ $Tuple2((du(aF, bi, gl, em, gi, bb, bH, false) ++ bV(ed, ee, bb, [toString(fZ), toString(ga)])), [gn, fZ, ga])
12101290 }
12111291 else throw("Strict value is not equal to itself.")
12121292 }
12181298
12191299
12201300
1221-@Callable(aq)
1222-func withdraw (aw,eB) = valueOrElse(au(), {
1223- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
1224- if (!(av(aw, by)))
1301+@Callable(ay)
1302+func withdraw (aF,ex) = valueOrElse(aD(), {
1303+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1304+ if (!(aE(aF, bH)))
12251305 then throw("Pool not active at this moment")
1226- else eG(toString(aq.caller), aw, toString(eB), false)
1306+ else eG(toString(ay.caller), aF, toString(ex), false)
12271307 })
12281308
12291309
12301310
1231-@Callable(aq)
1232-func createUpdateStopLoss (eB,fY,aB,fZ) = valueOrElse(au(), {
1233- let ga = getIntegerValue(ai, (aB + R))
1234- let by = valueOrErrorMessage(getString(this, (N + fY)), "Pool is not inited")
1235- if (!(av(fY, by)))
1311+@Callable(ay)
1312+func createUpdateStopLoss (ex,gs,aK,gt) = valueOrElse(aD(), {
1313+ let gu = getIntegerValue(am, (aK + R))
1314+ let bH = valueOrErrorMessage(getString(this, (N + gs)), "Pool is not inited")
1315+ if (!(aE(gs, bH)))
12361316 then throw("Pool not active at this moment")
1237- else if (!(isDefined(getInteger(this, (((((fY + "_") + toString(aq.caller)) + "_") + toString(eB)) + u)))))
1317+ else if (!(isDefined(getInteger(this, (((((gs + "_") + toString(ay.caller)) + "_") + toString(ex)) + u)))))
12381318 then throw("There are no user position")
1239- else if ((0 >= fZ))
1319+ else if ((0 >= gt))
12401320 then throw("Price must be greater than 0")
1241- else if ((fZ > ga))
1321+ else if ((gt > gu))
12421322 then throw("Price must be less than current token price")
1243- else [IntegerEntry((((((((toString(aq.caller) + "_") + toString(eB)) + "_") + fY) + "_") + aB) + W), fZ)]
1323+ else [IntegerEntry((((((((toString(ay.caller) + "_") + toString(ex)) + "_") + gs) + "_") + aK) + W), gt)]
12441324 })
12451325
12461326
12471327
1248-@Callable(aq)
1249-func deleteStopLoss (eB,fY,aB) = valueOrElse(au(), {
1250- let by = valueOrErrorMessage(getString(this, (N + fY)), "Pool is not inited")
1251- if (!(av(fY, by)))
1328+@Callable(ay)
1329+func deleteStopLoss (ex,gs,aK) = valueOrElse(aD(), {
1330+ let bH = valueOrErrorMessage(getString(this, (N + gs)), "Pool is not inited")
1331+ if (!(aE(gs, bH)))
12521332 then throw("Pool not active at this moment")
1253- else if (!(isDefined(getInteger(this, (((((((toString(aq.caller) + "_") + toString(eB)) + "_") + fY) + "_") + aB) + W)))))
1333+ else if (!(isDefined(getInteger(this, (((((((toString(ay.caller) + "_") + toString(ex)) + "_") + gs) + "_") + aK) + W)))))
12541334 then throw("No entry")
1255- else [DeleteEntry((((((((toString(aq.caller) + "_") + toString(eB)) + "_") + fY) + "_") + aB) + W))]
1335+ else [DeleteEntry((((((((toString(ay.caller) + "_") + toString(ex)) + "_") + gs) + "_") + aK) + W))]
12561336 })
12571337
12581338
12591339
1260-@Callable(aq)
1261-func init (gb,gc,gd,ai,ge,aj,gf,gg,gh) = valueOrElse(ar(aq), if (isDefined(getString(aa)))
1340+@Callable(ay)
1341+func init (gv,gw,gx,am,gy,an,gz,gA,gB,gC,gD,gE,gF) = valueOrElse(aA(ay), if (isDefined(getString(aa)))
12621342 then throw("Already inited")
1263- else if (!(isDefined(addressFromString(gb))))
1343+ else if (!(isDefined(addressFromString(gv))))
12641344 then throw("moneyBoxAddr is not correct address")
1265- else if (!(isDefined(addressFromString(gc))))
1345+ else if (!(isDefined(addressFromString(gw))))
12661346 then throw("sfFarmingAddr is not correct address")
1267- else if (!(isDefined(addressFromString(gd))))
1347+ else if (!(isDefined(addressFromString(gx))))
12681348 then throw("lendAddr is not correct address")
1269- else if (!(isDefined(addressFromString(ai))))
1349+ else if (!(isDefined(addressFromString(am))))
12701350 then throw("priceOracleAddr is not correct address")
1271- else if (!(isDefined(addressFromString(ge))))
1351+ else if (!(isDefined(addressFromString(gy))))
12721352 then throw("keeperExContract is not correct address")
1273- else if (!(isDefined(assetInfo(fromBase58String(gf)))))
1353+ else if (!(isDefined(assetInfo(fromBase58String(gz)))))
12741354 then throw("swopAssetId is not correct asset id")
1275- else if (!(isDefined(assetInfo(fromBase58String(gg)))))
1355+ else if (!(isDefined(assetInfo(fromBase58String(gA)))))
12761356 then throw("swopAssetId is not correct asset id")
1277- else if ((size(fromBase58String(gh)) != 32))
1278- then throw("adminPubKey is not correct")
1279- else [StringEntry(X, gb), StringEntry(Y, gc), StringEntry(Z, gd), StringEntry(ab, ai), StringEntry(ac, ge), StringEntry(ad, aj), StringEntry(ae, gf), StringEntry(af, gg), StringEntry(aa, gh)])
1357+ else if ((size(fromBase58String(gB)) != 32))
1358+ then throw("operatorPubKey is not correct")
1359+ else if ((size(fromBase58String(gC)) != 32))
1360+ then throw("group1Admin1PubKey is not correct")
1361+ else if ((size(fromBase58String(gD)) != 32))
1362+ then throw("group1Admin2PubKey is not correct")
1363+ else if ((size(fromBase58String(gE)) != 32))
1364+ then throw("group2Admin1PubKey is not correct")
1365+ else if ((size(fromBase58String(gF)) != 32))
1366+ then throw("group2Admin2PubKey is not correct")
1367+ else [StringEntry(X, gv), StringEntry(Y, gw), StringEntry(Z, gx), StringEntry(ab, am), StringEntry(ac, gy), StringEntry(ad, an), StringEntry(ae, gz), StringEntry(af, gA), StringEntry(aa, gB), StringEntry(ag, gC), StringEntry(ah, gD), StringEntry(ai, gE), StringEntry(aj, gF)])
12801368
12811369
12821370
1283-@Callable(aq)
1284-func createNewRequest (ck) = valueOrElse(ar(aq), {
1285- let fP = (valueOrElse(getInteger(this, M), 0) + 1)
1286- $Tuple2([StringEntry((toString(fP) + L), ck), IntegerEntry(M, fP)], fP)
1371+@Callable(ay)
1372+func createNewRequest (ct) = valueOrElse(aA(ay), {
1373+ let gj = (valueOrElse(getInteger(this, M), 0) + 1)
1374+ $Tuple2([StringEntry((toString(gj) + L), ct), IntegerEntry(M, gj)], gj)
12871375 })
12881376
12891377
12901378
1291-@Callable(aq)
1292-func replenishFromLand (eS) = valueOrElse(at(), valueOrElse(as(aq), {
1293- let gi = eR(eS)
1294- let aZ = gi._1
1295- let aw = gi._2
1296- let bR = gi._3
1297- let dQ = gi._4
1298- let bS = gi._5
1299- let dR = gi._6
1300- let aP = gi._7
1301- let aO = gi._8
1302- let aS = gi._9
1303- let eU = gi._10
1304- let eV = gi._11
1305- if ((size(aq.payments) != 1))
1379+@Callable(ay)
1380+func replenishFromLand (fl) = valueOrElse(aC(), valueOrElse(aB(ay), {
1381+ let gG = fk(fl)
1382+ let bi = gG._1
1383+ let aF = gG._2
1384+ let ca = gG._3
1385+ let ed = gG._4
1386+ let cb = gG._5
1387+ let ee = gG._6
1388+ let aY = gG._7
1389+ let aX = gG._8
1390+ let bb = gG._9
1391+ let fn = gG._10
1392+ let fo = gG._11
1393+ if ((size(ay.payments) != 1))
13061394 then throw("Wrong payment size")
1307- else if (if ((bg(aq.payments[0].assetId) != eU))
1395+ else if (if ((bp(ay.payments[0].assetId) != fn))
13081396 then true
1309- else (aq.payments[0].amount != eV))
1397+ else (ay.payments[0].amount != fo))
13101398 then throw("Wrong payment")
13111399 else {
1312- let gj = if ((dQ == eU))
1313- then $Tuple2((bR + eV), bS)
1314- else $Tuple2(bR, (bS + eV))
1315- let gk = gj._1
1316- let gl = gj._2
1317- let by = valueOrErrorMessage(getString(this, (N + aw)), "Unknown pool")
1318- let gm = cT(by, aw, g, gk, dQ, gl, dR, aP, aO, aS)
1319- let fR = gm._1
1320- let eg = gm._2
1321- let dj = aY(aZ)
1322- let gn = [IntegerEntry((((((aw + "_") + aZ) + "_") + toString(dj)) + w), eV), StringEntry((((((aw + "_") + aZ) + "_") + toString(dj)) + x), eU)]
1323- let eQ = dh(aw, aZ, fR, eg, dj, aS, by, true)
1324- let go = cL(Address(fromBase58String(aw)), by, aS, fR)
1325- let fF = go._1
1326- let fG = go._2
1327- $Tuple2((((eQ ++ bL(dQ, dR, aS, [toString(fF), toString(fG)])) ++ gn) :+ DeleteEntry((eS + L))), fR)
1400+ let gH = if ((ed == fn))
1401+ then $Tuple2((ca + fo), cb)
1402+ else $Tuple2(ca, (cb + fo))
1403+ let gI = gH._1
1404+ let gJ = gH._2
1405+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Unknown pool")
1406+ let gK = dg(bH, aF, g, gI, ed, gJ, ee, aY, aX, bb)
1407+ let gl = gK._1
1408+ let em = gK._2
1409+ let dw = bh(bi)
1410+ let gL = [IntegerEntry((((((aF + "_") + bi) + "_") + toString(dw)) + w), fo), StringEntry((((((aF + "_") + bi) + "_") + toString(dw)) + x), fn)]
1411+ let fj = du(aF, bi, gl, em, dw, bb, bH, true)
1412+ let gM = cU(Address(fromBase58String(aF)), bH, bb, gl)
1413+ let fZ = gM._1
1414+ let ga = gM._2
1415+ $Tuple2((((fj ++ bV(ed, ee, bb, [toString(fZ), toString(ga)])) ++ gL) :+ DeleteEntry((fl + L))), gl)
13281416 }
13291417 }))
13301418
13311419
13321420
1333-@Callable(aq)
1334-func liquidate (aZ,eB,gp) = valueOrElse(at(), valueOrElse(as(aq), {
1335- let aw = valueOrErrorMessage(getString(this, (((aZ + "_") + eB) + v)), "no position")
1336- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
1337- let gq = aU(Address(fromBase58String(aw)), by)
1338- let dQ = gq._1
1339- let dR = gq._2
1340- let aP = gq._3
1341- let aO = gq._4
1342- let aS = gq._5
1343- let cf = cg(aw, by, aS, gp)
1344- let eI = getIntegerValue(this, (((((aw + "_") + aZ) + "_") + eB) + w))
1345- let ej = getStringValue(this, (((((aw + "_") + aZ) + "_") + eB) + x))
1346- let cM = eA(aZ, aw, eB, (eI > 0))
1347- if ((gp > cM))
1421+@Callable(ay)
1422+func liquidate (bi,ex,gN) = valueOrElse(aC(), valueOrElse(aB(ay), {
1423+ let aF = valueOrErrorMessage(getString(this, (((bi + "_") + ex) + v)), "no position")
1424+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1425+ let gO = bd(Address(fromBase58String(aF)), bH)
1426+ let ed = gO._1
1427+ let ee = gO._2
1428+ let aY = gO._3
1429+ let aX = gO._4
1430+ let bb = gO._5
1431+ let co = cp(aF, bH, bb, gN)
1432+ let fN = getIntegerValue(this, (((((aF + "_") + bi) + "_") + ex) + w))
1433+ let eZ = getStringValue(this, (((((aF + "_") + bi) + "_") + ex) + x))
1434+ let cV = ew(bi, aF, ex, (fN > 0))
1435+ if ((gN > cV))
13481436 then throw("You can't liquidate more than user have")
1349- else if ((eI == 0))
1437+ else if ((fN == 0))
13501438 then throw("You can't liquidate position without borrow")
1351- else [IntegerEntry((((((aw + "_") + aZ) + "_") + eB) + z), getIntegerValue(this, (aw + C))), IntegerEntry((aw + B), (aX(aw) - gp)), IntegerEntry((aw + A), (aW(aw) - gp)), IntegerEntry((((((aw + "_") + aZ) + "_") + eB) + u), (cM - gp)), ScriptTransfer(aq.caller, cf, fromBase58String(aS))]
1439+ else [IntegerEntry((((((aF + "_") + bi) + "_") + ex) + z), getIntegerValue(this, (aF + C))), IntegerEntry((aF + B), (bg(aF) - gN)), IntegerEntry((aF + A), (bf(aF) - gN)), IntegerEntry((((((aF + "_") + bi) + "_") + ex) + u), (cV - gN)), ScriptTransfer(ay.caller, co, fromBase58String(bb))]
13521440 }))
13531441
13541442
13551443
1356-@Callable(aq)
1357-func stopLoss (aZ,eB,aw,aB) = valueOrElse(at(), valueOrElse(ap(aq), {
1358- let ga = getIntegerValue(ai, (aB + R))
1359- let gr = valueOrErrorMessage(getInteger(this, (((((((aZ + "_") + toString(eB)) + "_") + aw) + "_") + aB) + W)), "No entry")
1360- if ((ga > gr))
1444+@Callable(ay)
1445+func stopLoss (bi,ex,aF,aK) = valueOrElse(aC(), valueOrElse(ax(ay), {
1446+ let gu = getIntegerValue(am, (aK + R))
1447+ let gP = valueOrErrorMessage(getInteger(this, (((((((bi + "_") + toString(ex)) + "_") + aF) + "_") + aK) + W)), "No entry")
1448+ if ((gu > gP))
13611449 then throw("Token price greater stop loss price")
13621450 else {
1363- let gs = eG(aZ, aw, toString(eB), true)
1364- $Tuple2((gs._1 :+ DeleteEntry((((((((aZ + "_") + toString(eB)) + "_") + aw) + "_") + aB) + W))), gs._2)
1451+ let gQ = eG(bi, aF, toString(ex), true)
1452+ $Tuple2((gQ._1 :+ DeleteEntry((((((((bi + "_") + toString(ex)) + "_") + aF) + "_") + aK) + W))), gQ._2)
13651453 }
13661454 }))
13671455
13681456
13691457
1370-@Callable(aq)
1371-func capitalizeExKeeper (aw,gt,fn,fm,du,dv,dw,dx,dy,dz,dA) = valueOrElse(at(), valueOrElse(ap(aq), {
1372- let by = getStringValue(this, (N + aw))
1373- let da = valueOrElse(getInteger(this, (aw + P)), 0)
1374- let gu = fl(aw, by, fm, fn, da)
1375- let gv = gu._1
1376- let fp = gu._2
1377- let gw = dq(gt, fn, fp, du, dv, dw, dx, dy, dz, dA)
1378- let gx = ((gv + da) - fn)
1379- let gy = if ((gx >= 0))
1380- then [IntegerEntry((aw + P), gx)]
1381- else nil
1382- (dM(aw, by, gt, gw) ++ gy)
1458+@Callable(ay)
1459+func capitalizeExKeeper (aF,gR,gS,fF,dH,dI,dJ,dK,dL,dM,dN) = valueOrElse(aC(), valueOrElse(ax(ay), {
1460+ let bH = getStringValue(this, (N + aF))
1461+ let dn = valueOrElse(getInteger(this, (aF + P)), 0)
1462+ let gT = fE(aF, bH, fF, gS, dn)
1463+ let gU = gT._1
1464+ let fH = gT._2
1465+ let gV = dD(gR, gS, fH, dH, dI, dJ, dK, dL, dM, dN)
1466+ let gW = ((gU + dn) - gS)
1467+ let gX = if ((gW >= 0))
1468+ then [IntegerEntry((aF + P), gW)]
1469+ else throw("Negative change")
1470+ (dZ(aF, bH, gR, gV) ++ gX)
13831471 }))
13841472
13851473
13861474
1387-@Callable(aq)
1388-func capitalizeExPuzzle (aw,gt,fn,fm,dD,dE,dA) = valueOrElse(at(), valueOrElse(ap(aq), {
1389- let by = getStringValue(this, (N + aw))
1390- let da = valueOrElse(getInteger(this, (aw + P)), 0)
1391- let gz = fl(aw, by, fm, fn, da)
1392- let gv = gz._1
1393- let fp = gz._2
1394- let gw = dC(gt, fn, fp, dD, dE, dA)
1395- let gx = ((gv + da) - fn)
1396- let gy = if ((gx >= 0))
1397- then [IntegerEntry((aw + P), gx)]
1475+@Callable(ay)
1476+func capitalizeExPuzzle (aF,gR,gS,fF,dQ,dR,dN) = valueOrElse(aC(), valueOrElse(ax(ay), {
1477+ let bH = getStringValue(this, (N + aF))
1478+ let dn = valueOrElse(getInteger(this, (aF + P)), 0)
1479+ let gY = fE(aF, bH, fF, gS, dn)
1480+ let gU = gY._1
1481+ let fH = gY._2
1482+ let gV = dP(gR, gS, fH, dQ, dR, dN)
1483+ let gW = ((gU + dn) - gS)
1484+ let gX = if ((gW >= 0))
1485+ then [IntegerEntry((aF + P), gW)]
13981486 else nil
1399- (dM(aw, by, gt, gw) ++ gy)
1487+ (dZ(aF, bH, gR, gV) ++ gX)
14001488 }))
14011489
14021490
14031491
1404-@Callable(aq)
1405-func capitalizeExSwopFi (aw,gt,fn,fm,dG,dH,dI,dJ,dK,dL,dA) = valueOrElse(at(), valueOrElse(ap(aq), {
1406- let by = getStringValue(this, (N + aw))
1407- let da = valueOrElse(getInteger(this, (aw + P)), 0)
1408- let gA = fl(aw, by, fm, fn, da)
1409- let gv = gA._1
1410- let fp = gA._2
1411- let gw = dF(gt, fn, fp, dG, dH, dI, dJ, dK, dL, dA)
1412- let gx = ((gv + da) - fn)
1413- let gy = if ((gx >= 0))
1414- then [IntegerEntry((aw + P), gx)]
1492+@Callable(ay)
1493+func capitalizeExSwopFi (aF,gR,gS,fF,dT,dU,dV,dW,dX,dY,dN) = valueOrElse(aC(), valueOrElse(ax(ay), {
1494+ let bH = getStringValue(this, (N + aF))
1495+ let dn = valueOrElse(getInteger(this, (aF + P)), 0)
1496+ let gZ = fE(aF, bH, fF, gS, dn)
1497+ let gU = gZ._1
1498+ let fH = gZ._2
1499+ let gV = dS(gR, gS, fH, dT, dU, dV, dW, dX, dY, dN)
1500+ let gW = ((gU + dn) - gS)
1501+ let gX = if ((gW >= 0))
1502+ then [IntegerEntry((aF + P), gW)]
14151503 else nil
1416- (dM(aw, by, gt, gw) ++ gy)
1504+ (dZ(aF, bH, gR, gV) ++ gX)
14171505 }))
14181506
14191507
14201508
1421-@Callable(aq)
1422-func initNewPool (ax,aG,gB,gC,gD,gE,gF,gG,gH) = valueOrElse(at(), valueOrElse(ap(aq), if (if ((ax != a))
1423- then (ax != b)
1509+@Callable(ay)
1510+func capitalizeNoEx (aF,fF,ha) = valueOrElse(aC(), valueOrElse(ax(ay), {
1511+ let bH = getStringValue(this, (N + aF))
1512+ let hb = fE(aF, bH, fF, ha, 0)
1513+ let gU = hb._1
1514+ let fH = hb._2
1515+ dZ(aF, bH, bp(fH), (gU + ha))
1516+ }))
1517+
1518+
1519+
1520+@Callable(ay)
1521+func initNewPool (aG,aP,hc,hd,he,hf,hg,hh,hi) = valueOrElse(aC(), valueOrElse(az(ay), if (if ((aG != a))
1522+ then (aG != b)
14241523 else false)
14251524 then throw("Wrong type")
14261525 else {
1427- let gI = aU(Address(fromBase58String(aG)), ax)
1428- let aI = gI._1
1429- let aJ = gI._2
1430- let gJ = gI._3
1431- let gK = gI._4
1432- let aS = gI._5
1433- if ((0 > gB))
1526+ let hj = bd(Address(fromBase58String(aP)), aG)
1527+ let aR = hj._1
1528+ let aS = hj._2
1529+ let dd = hj._3
1530+ let de = hj._4
1531+ let bb = hj._5
1532+ if ((0 > hc))
14341533 then throw("inFeeNoLoan must be greater than 0")
1435- else if ((0 > gC))
1534+ else if ((0 > hd))
14361535 then throw("inFeeLoan must be greater than 0")
1437- else if ((0 > gD))
1536+ else if ((0 > he))
14381537 then throw("capFeeNoLoan must be greater than 0")
1439- else if ((0 > gE))
1538+ else if ((0 > hf))
14401539 then throw("capFeeWithLoan must be greater than 0")
1441- else if ((0 > gF))
1540+ else if ((0 > hg))
14421541 then throw("stoplossFeeNoLoan must be greater than 0")
1443- else if ((0 > gG))
1542+ else if ((0 > hh))
14441543 then throw("stoplossFeeWithLoan must be greater than 0")
1445- else [IntegerEntry((aG + F), gB), IntegerEntry((aG + G), gC), IntegerEntry((aG + H), gD), IntegerEntry((aG + I), gE), IntegerEntry((aG + J), gF), IntegerEntry((aG + K), gG), IntegerEntry((aG + C), 0), IntegerEntry((aG + D), 0), StringEntry((N + aG), ax), StringEntry((aS + O), aG), BooleanEntry((aG + E), gH)]
1544+ else [IntegerEntry((aP + F), hc), IntegerEntry((aP + G), hd), IntegerEntry((aP + H), he), IntegerEntry((aP + I), hf), IntegerEntry((aP + J), hg), IntegerEntry((aP + K), hh), IntegerEntry((aP + C), 0), IntegerEntry((aP + D), 0), StringEntry((N + aP), aG), StringEntry((bb + O), aP), BooleanEntry((aP + E), hi)]
14461545 }))
14471546
14481547
14491548
1450-@Callable(aq)
1451-func activate () = valueOrElse(ap(aq), if (valueOrElse(getBoolean(this, S), true))
1549+@Callable(ay)
1550+func updatePoolFees (aP,hc,hd,he,hf,hg,hh) = valueOrElse(aC(), valueOrElse(az(ay), if (!(isDefined(getString(this, (N + aP)))))
1551+ then throw(("Can't find pool with addr " + aP))
1552+ else if ((0 > hc))
1553+ then throw("inFeeNoLoan must be greater than 0")
1554+ else if ((0 > hd))
1555+ then throw("inFeeLoan must be greater than 0")
1556+ else if ((0 > he))
1557+ then throw("capFeeNoLoan must be greater than 0")
1558+ else if ((0 > hf))
1559+ then throw("capFeeWithLoan must be greater than 0")
1560+ else if ((0 > hg))
1561+ then throw("stoplossFeeNoLoan must be greater than 0")
1562+ else if ((0 > hh))
1563+ then throw("stoplossFeeWithLoan must be greater than 0")
1564+ else [IntegerEntry((aP + F), hc), IntegerEntry((aP + G), hd), IntegerEntry((aP + H), he), IntegerEntry((aP + I), hf), IntegerEntry((aP + J), hg), IntegerEntry((aP + K), hh)]))
1565+
1566+
1567+
1568+@Callable(ay)
1569+func activate () = valueOrElse(az(ay), if (valueOrElse(getBoolean(this, S), true))
14521570 then throw("dApp already active")
14531571 else [BooleanEntry(S, true)])
14541572
14551573
14561574
1457-@Callable(aq)
1458-func shutdown () = valueOrElse(ap(aq), if (!(valueOrElse(getBoolean(this, S), true)))
1575+@Callable(ay)
1576+func shutdown () = valueOrElse(az(ay), if (!(valueOrElse(getBoolean(this, S), true)))
14591577 then throw("dApp already shutdown")
14601578 else [BooleanEntry(S, false)])
14611579
14621580
14631581
1464-@Callable(aq)
1465-func activateForUsers () = valueOrElse(ap(aq), if (valueOrElse(getBoolean(this, T), true))
1582+@Callable(ay)
1583+func activateForUsers () = valueOrElse(az(ay), if (valueOrElse(getBoolean(this, T), true))
14661584 then throw("dApp already active for users")
14671585 else [BooleanEntry(T, true)])
14681586
14691587
14701588
1471-@Callable(aq)
1472-func shutdownForUsers () = valueOrElse(ap(aq), if (!(valueOrElse(getBoolean(this, T), true)))
1589+@Callable(ay)
1590+func shutdownForUsers () = valueOrElse(az(ay), if (!(valueOrElse(getBoolean(this, T), true)))
14731591 then throw("dApp already shutdown for users")
14741592 else [BooleanEntry(T, false)])
14751593
14761594
14771595
1478-@Callable(aq)
1479-func activateSF () = valueOrElse(ap(aq), if (valueOrElse(getBoolean(this, (a + U)), true))
1596+@Callable(ay)
1597+func activateSF () = valueOrElse(az(ay), if (valueOrElse(getBoolean(this, (a + U)), true))
14801598 then throw("SWOPFI already active")
14811599 else [BooleanEntry((a + U), true)])
14821600
14831601
14841602
1485-@Callable(aq)
1486-func shutdownSF () = valueOrElse(ap(aq), if (!(valueOrElse(getBoolean(this, (a + U)), true)))
1603+@Callable(ay)
1604+func shutdownSF () = valueOrElse(az(ay), if (!(valueOrElse(getBoolean(this, (a + U)), true)))
14871605 then throw("SWOPFI already shutdown")
14881606 else [BooleanEntry((a + U), false)])
14891607
14901608
14911609
1492-@Callable(aq)
1493-func activateWX () = valueOrElse(ap(aq), if (valueOrElse(getBoolean(this, (b + U)), true))
1610+@Callable(ay)
1611+func activateWX () = valueOrElse(az(ay), if (valueOrElse(getBoolean(this, (b + U)), true))
14941612 then throw("WX already active")
14951613 else [BooleanEntry((b + U), true)])
14961614
14971615
14981616
1499-@Callable(aq)
1500-func shutdownWX () = valueOrElse(ap(aq), if (!(valueOrElse(getBoolean(this, (b + U)), true)))
1617+@Callable(ay)
1618+func shutdownWX () = valueOrElse(az(ay), if (!(valueOrElse(getBoolean(this, (b + U)), true)))
15011619 then throw("WX already shutdown")
15021620 else [BooleanEntry((b + U), false)])
15031621
15041622
15051623
1506-@Callable(aq)
1507-func activatePool (aw) = valueOrElse(ap(aq), if (!(isDefined(getString(this, (N + aw)))))
1624+@Callable(ay)
1625+func activatePool (aF) = valueOrElse(az(ay), if (!(isDefined(getString(this, (N + aF)))))
15081626 then throw("Unknown pool")
1509- else if (valueOrElse(getBoolean(this, (aw + V)), true))
1627+ else if (valueOrElse(getBoolean(this, (aF + V)), true))
15101628 then throw("Pool already active")
1511- else [BooleanEntry((aw + V), true)])
1629+ else [BooleanEntry((aF + V), true)])
15121630
15131631
15141632
1515-@Callable(aq)
1516-func shutdownPool (aw) = valueOrElse(ap(aq), if (!(isDefined(getString(this, (N + aw)))))
1633+@Callable(ay)
1634+func shutdownPool (aF) = valueOrElse(az(ay), if (!(isDefined(getString(this, (N + aF)))))
15171635 then throw("Unknown pool")
1518- else if (!(valueOrElse(getBoolean(this, (aw + V)), true)))
1636+ else if (!(valueOrElse(getBoolean(this, (aF + V)), true)))
15191637 then throw("Pool already shutdown")
1520- else [BooleanEntry((aw + V), false)])
1638+ else [BooleanEntry((aF + V), false)])
15211639
1522-
1523-@Verifier(gL)
1524-func gM () = sigVerify(gL.bodyBytes, gL.proofs[0], gL.senderPublicKey)
15251640
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "SF"
55
66 let b = "WX"
77
88 let c = "capNoLoan"
99
1010 let d = "capLoan"
1111
1212 let e = "stopLossNoLoan"
1313
1414 let f = "stopLossLoan"
1515
1616 let g = "loan"
1717
1818 let h = "noLoan"
1919
2020 let i = "noFee"
2121
2222 let j = 100000000
2323
2424 let k = 10000000000
2525
2626 let l = toBigInt(10000000000000000)
2727
2828 let m = 1000000
2929
3030 let n = "A_asset_balance"
3131
3232 let o = "B_asset_balance"
3333
3434 let p = "A_asset_id"
3535
3636 let q = "B_asset_id"
3737
3838 let r = "share_asset_id"
3939
4040 let s = "share_asset_supply"
4141
4242 let t = "commission"
4343
4444 let u = "_userPosition"
4545
4646 let v = "_userPositionPool"
4747
4848 let w = "_userPositionBorrowAmount"
4949
5050 let x = "_userPositionBorrowAssetId"
5151
5252 let y = "_userPositionNumber"
5353
5454 let z = "_userPositionInterest"
5555
5656 let A = "_poolTotal"
5757
5858 let B = "_poolTotalLoan"
5959
6060 let C = "_poolInterestLoan"
6161
6262 let D = "_poolInterestNoLoan"
6363
6464 let E = "_poolCanBorrow"
6565
6666 let F = "_axlyFeeNoLoan"
6767
6868 let G = "_axlyFeeWithLoan"
6969
70-let H = "_axlyFeeCapWithLoan"
70+let H = "_axlyFeeCapNoLoan"
7171
72-let I = "_axlyFeeCapNoLoan"
72+let I = "_axlyFeeCapWithLoan"
7373
7474 let J = "_axlyFeeStoplossWithLoan"
7575
7676 let K = "_axlyFeeStoplossNoLoan"
7777
7878 let L = "_request_id"
7979
8080 let M = "requests_iter"
8181
8282 let N = "pool_"
8383
8484 let O = "_poolShareId"
8585
8686 let P = "_poolCapChange"
8787
8888 let Q = "last_price"
8989
9090 let R = "_twap5B"
9191
9292 let S = "active"
9393
9494 let T = "activeUsers"
9595
9696 let U = "_active"
9797
9898 let V = "_activePool"
9999
100100 let W = "_stopLoss"
101101
102102 let X = "axly_money_box"
103103
104104 let Y = "swopfi_farming_addr"
105105
106106 let Z = "lend_service_addr"
107107
108108 let aa = "admin_call_pub_key"
109109
110110 let ab = "price_oracle"
111111
112112 let ac = "exchange_contract"
113113
114114 let ad = "wx_swap_contract"
115115
116116 let ae = "swop_id"
117117
118118 let af = "wx_id"
119119
120-let ag = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No axly moneyBox address")))
120+let ag = "group1_admin1_pub_key"
121121
122-let ah = Address(fromBase58String(valueOrErrorMessage(getString(this, ac), "No exchange contract address")))
122+let ah = "group1_admin2_pub_key"
123123
124-let ai = Address(fromBase58String(valueOrErrorMessage(getString(this, ab), "No price oracle address")))
124+let ai = "group2_admin1_pub_key"
125125
126-let aj = Address(fromBase58String(valueOrErrorMessage(getString(this, ad), "No wx swap address")))
126+let aj = "group2_admin2_pub_key"
127127
128-let ak = fromBase58String(valueOrErrorMessage(getString(this, ae), "No swop id"))
128+let ak = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No axly moneyBox address")))
129129
130-let al = fromBase58String(valueOrErrorMessage(getString(this, af), "No wx id"))
130+let al = Address(fromBase58String(valueOrErrorMessage(getString(this, ac), "No exchange contract address")))
131131
132-func am () = throw("Wrong pool type")
132+let am = Address(fromBase58String(valueOrErrorMessage(getString(this, ab), "No price oracle address")))
133+
134+let an = Address(fromBase58String(valueOrErrorMessage(getString(this, ad), "No wx swap address")))
135+
136+let ao = fromBase58String(valueOrErrorMessage(getString(this, ae), "No swop id"))
137+
138+let ap = fromBase58String(valueOrErrorMessage(getString(this, af), "No wx id"))
139+
140+let aq = fromBase58String(valueOrErrorMessage(getString(this, ag), "Can't get kGroup1Admin1PK"))
141+
142+let ar = fromBase58String(valueOrErrorMessage(getString(this, ah), "Can't get kGroup1Admin2PK"))
143+
144+let as = fromBase58String(valueOrErrorMessage(getString(this, ai), "Can't get kGroup2Admin1PK"))
145+
146+let at = fromBase58String(valueOrErrorMessage(getString(this, aj), "Can't get kGroup2Admin1PK"))
147+
148+let au = fromBase58String(valueOrErrorMessage(getString(this, aa), "Can't get operatorPK"))
149+
150+func av () = throw("Wrong pool type")
133151
134152
135-func an () = Address(fromBase58String(valueOrErrorMessage(getString(this, Z), "Can't get lend service addr")))
153+func aw () = Address(fromBase58String(valueOrErrorMessage(getString(this, Z), "Can't get lend service addr")))
136154
137155
138-func ao () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, aa), "Can't get admin addr")))
156+func ax (ay) = if ((ay.callerPublicKey == ay.callerPublicKey))
157+ then unit
158+ else throw("Only operator can call this function")
139159
140160
141-func ap (aq) = if ((aq.caller == ao()))
161+func az (ay) = if (if ((ay.callerPublicKey == ay.callerPublicKey))
162+ then true
163+ else (ay.callerPublicKey == ay.callerPublicKey))
142164 then unit
143- else throw("Only admin can call this function")
165+ else throw("Only admin group1 can call this function")
144166
145167
146-func ar (aq) = if ((aq.caller == this))
168+func aA (ay) = if ((ay.caller == this))
147169 then unit
148170 else throw("Only contract itself can call this function")
149171
150172
151-func as (aq) = if ((aq.caller == an()))
173+func aB (ay) = if ((ay.caller == aw()))
152174 then unit
153175 else throw("Only land contract can call this function")
154176
155177
156-func at () = if ((valueOrElse(getBoolean(this, S), true) == true))
178+func aC () = if ((valueOrElse(getBoolean(this, S), true) == true))
157179 then unit
158180 else throw("DApp is inactive at this moment")
159181
160182
161-func au () = if (if (valueOrElse(getBoolean(this, S), true))
183+func aD () = if (if (valueOrElse(getBoolean(this, S), true))
162184 then (valueOrElse(getBoolean(this, T), true) == true)
163185 else false)
164186 then unit
165187 else throw("DApp is inactive for users at this moment")
166188
167189
168-func av (aw,ax) = {
169- let ay = valueOrElse(getBoolean(this, (ax + U)), true)
170- let az = valueOrElse(getBoolean(this, (aw + V)), true)
171- if (if (ay)
172- then az
190+func aE (aF,aG) = {
191+ let aH = valueOrElse(getBoolean(this, (aG + U)), true)
192+ let aI = valueOrElse(getBoolean(this, (aF + V)), true)
193+ if (if (aH)
194+ then aI
173195 else false)
174196 then true
175197 else false
176198 }
177199
178200
179-func aA (aB) = {
180- let aC = aB
181- if ($isInstanceOf(aC, "ByteVector"))
201+func aJ (aK) = {
202+ let aL = aK
203+ if ($isInstanceOf(aL, "ByteVector"))
182204 then {
183- let aD = aC
184- assetBalance(this, aD)
205+ let aM = aL
206+ assetBalance(this, aM)
185207 }
186- else if ($isInstanceOf(aC, "Unit"))
208+ else if ($isInstanceOf(aL, "Unit"))
187209 then {
188- let aE = aC
210+ let aN = aL
189211 wavesBalance(this).available
190212 }
191213 else throw("Match error")
192214 }
193215
194216
195-func aF (aG) = $Tuple2(valueOrErrorMessage(getInteger(aG, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(aG, o), "Can't get pool B asset balance"))
217+func aO (aP) = $Tuple2(valueOrErrorMessage(getInteger(aP, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(aP, o), "Can't get pool B asset balance"))
196218
197219
198-func aH (aG,aI,aJ) = $Tuple2({
199- let aK = invoke(aG, "getAccBalanceWrapperREADONLY", [aI], nil)
200- if ($isInstanceOf(aK, "Int"))
201- then aK
202- else throw(($getType(aK) + " couldn't be cast to Int"))
220+func aQ (aP,aR,aS) = $Tuple2({
221+ let aT = invoke(aP, "getAccBalanceWrapperREADONLY", [aR], nil)
222+ if ($isInstanceOf(aT, "Int"))
223+ then aT
224+ else throw(($getType(aT) + " couldn't be cast to Int"))
203225 }, {
204- let aK = invoke(aG, "getAccBalanceWrapperREADONLY", [aJ], nil)
205- if ($isInstanceOf(aK, "Int"))
206- then aK
207- else throw(($getType(aK) + " couldn't be cast to Int"))
226+ let aT = invoke(aP, "getAccBalanceWrapperREADONLY", [aS], nil)
227+ if ($isInstanceOf(aT, "Int"))
228+ then aT
229+ else throw(($getType(aT) + " couldn't be cast to Int"))
208230 })
209231
210232
211-func aL (aG,ax,aI,aJ) = if ((ax == a))
212- then aF(aG)
213- else if ((ax == b))
214- then aH(aG, aI, aJ)
215- else am()
233+func aU (aP,aG,aR,aS) = if ((aG == a))
234+ then aO(aP)
235+ else if ((aG == b))
236+ then aQ(aP, aR, aS)
237+ else av()
216238
217239
218-func aM (aG) = {
219- let aN = aF(aG)
220- if ((aN == aN))
240+func aV (aP) = {
241+ let aW = aO(aP)
242+ if ((aW == aW))
221243 then {
222- let aO = aN._2
223- let aP = aN._1
224- $Tuple5(valueOrErrorMessage(getString(aG, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(aG, q), "Can't get pool B asset id"), aP, aO, valueOrErrorMessage(getString(aG, r), "Can't get share asset id"))
244+ let aX = aW._2
245+ let aY = aW._1
246+ $Tuple5(valueOrErrorMessage(getString(aP, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(aP, q), "Can't get pool B asset id"), aY, aX, valueOrErrorMessage(getString(aP, r), "Can't get share asset id"))
225247 }
226248 else throw("Strict value is not equal to itself.")
227249 }
228250
229251
230-func aQ (aG) = {
231- let aR = {
232- let aK = invoke(aG, "getPoolConfigWrapperREADONLY", nil, nil)
233- if ($isInstanceOf(aK, "List[Any]"))
234- then aK
235- else throw(($getType(aK) + " couldn't be cast to List[Any]"))
252+func aZ (aP) = {
253+ let ba = {
254+ let aT = invoke(aP, "getPoolConfigWrapperREADONLY", nil, nil)
255+ if ($isInstanceOf(aT, "List[Any]"))
256+ then aT
257+ else throw(($getType(aT) + " couldn't be cast to List[Any]"))
236258 }
237- if ((aR == aR))
259+ if ((ba == ba))
238260 then {
239- let aI = valueOrErrorMessage({
240- let aK = aR[4]
241- if ($isInstanceOf(aK, "String"))
242- then aK
261+ let aR = valueOrErrorMessage({
262+ let aT = ba[4]
263+ if ($isInstanceOf(aT, "String"))
264+ then aT
243265 else unit
244266 }, "Can't get pool A asset id")
245- let aJ = valueOrErrorMessage({
246- let aK = aR[5]
247- if ($isInstanceOf(aK, "String"))
248- then aK
267+ let aS = valueOrErrorMessage({
268+ let aT = ba[5]
269+ if ($isInstanceOf(aT, "String"))
270+ then aT
249271 else unit
250272 }, "Can't get pool B asset id")
251- let aS = valueOrErrorMessage({
252- let aK = aR[3]
253- if ($isInstanceOf(aK, "String"))
254- then aK
273+ let bb = valueOrErrorMessage({
274+ let aT = ba[3]
275+ if ($isInstanceOf(aT, "String"))
276+ then aT
255277 else unit
256278 }, "Can't get pool LP asset id")
257- let aT = aH(aG, aI, aJ)
258- if ((aT == aT))
279+ let bc = aQ(aP, aR, aS)
280+ if ((bc == bc))
259281 then {
260- let aO = aT._2
261- let aP = aT._1
262- $Tuple5(aI, aJ, aP, aO, aS)
282+ let aX = bc._2
283+ let aY = bc._1
284+ $Tuple5(aR, aS, aY, aX, bb)
263285 }
264286 else throw("Strict value is not equal to itself.")
265287 }
266288 else throw("Strict value is not equal to itself.")
267289 }
268290
269291
270-func aU (aG,ax) = if ((ax == a))
271- then aM(aG)
272- else if ((ax == b))
273- then aQ(aG)
274- else am()
292+func bd (aP,aG) = if ((aG == a))
293+ then aV(aP)
294+ else if ((aG == b))
295+ then aZ(aP)
296+ else av()
275297
276298
277-func aV (aG,ax,aS) = if ((ax == a))
278- then valueOrErrorMessage(getInteger(aG, s), "Can't get share asset supply")
279- else if ((ax == b))
280- then valueOrErrorMessage(assetInfo(fromBase58String(aS)), "Wrong ShareId").quantity
281- else am()
299+func be (aP,aG,bb) = if ((aG == a))
300+ then valueOrErrorMessage(getInteger(aP, s), "Can't get share asset supply")
301+ else if ((aG == b))
302+ then valueOrErrorMessage(assetInfo(fromBase58String(bb)), "Wrong ShareId").quantity
303+ else av()
282304
283305
284-func aW (aw) = valueOrElse(getInteger(this, (aw + A)), 0)
306+func bf (aF) = valueOrElse(getInteger(this, (aF + A)), 0)
285307
286308
287-func aX (aw) = valueOrElse(getInteger(this, (aw + B)), 0)
309+func bg (aF) = valueOrElse(getInteger(this, (aF + B)), 0)
288310
289311
290-func aY (aZ) = (valueOrElse(getInteger(this, (aZ + y)), 0) + 1)
312+func bh (bi) = (valueOrElse(getInteger(this, (bi + y)), 0) + 1)
291313
292314
293-func ba (aw,bb) = if ((bb == d))
294- then getIntegerValue(this, (aw + I))
295- else if ((bb == c))
296- then getIntegerValue(this, (aw + H))
297- else if ((bb == g))
298- then getIntegerValue(this, (aw + G))
299- else if ((bb == h))
300- then getIntegerValue(this, (aw + F))
301- else if ((bb == i))
315+func bj (aF,bk) = if ((bk == d))
316+ then getIntegerValue(this, (aF + I))
317+ else if ((bk == c))
318+ then getIntegerValue(this, (aF + H))
319+ else if ((bk == g))
320+ then getIntegerValue(this, (aF + G))
321+ else if ((bk == h))
322+ then getIntegerValue(this, (aF + F))
323+ else if ((bk == i))
302324 then 0
303325 else throw("Wrong fee type")
304326
305327
306-func bc () = Address(fromBase58String(valueOrErrorMessage(getString(this, Y), "Can't get swopfi farming addr")))
328+func bl () = Address(fromBase58String(valueOrErrorMessage(getString(this, Y), "Can't get swopfi farming addr")))
307329
308330
309-func bd (aG) = {
310- let be = Address(fromBase58String(valueOrErrorMessage(getString(aG, "%s__factoryContract"), "Can't get WX factory contract addr")))
311- let bf = split(valueOrErrorMessage(getString(be, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
312- Address(fromBase58String(bf[1]))
331+func bm (aP) = {
332+ let bn = Address(fromBase58String(valueOrErrorMessage(getString(aP, "%s__factoryContract"), "Can't get WX factory contract addr")))
333+ let bo = split(valueOrErrorMessage(getString(bn, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
334+ Address(fromBase58String(bo[1]))
313335 }
314336
315337
316-func bg (aB) = {
317- let aC = aB
318- if ($isInstanceOf(aC, "ByteVector"))
338+func bp (aK) = {
339+ let aL = aK
340+ if ($isInstanceOf(aL, "ByteVector"))
319341 then {
320- let aD = aC
321- toBase58String(aD)
342+ let aM = aL
343+ toBase58String(aM)
322344 }
323- else if ($isInstanceOf(aC, "Unit"))
345+ else if ($isInstanceOf(aL, "Unit"))
324346 then {
325- let aE = aC
347+ let aN = aL
326348 "WAVES"
327349 }
328350 else throw("Not Asset id")
329351 }
330352
331353
332-func bh (aB) = if ((aB == "WAVES"))
354+func bq (aK) = if ((aK == "WAVES"))
333355 then unit
334- else fromBase58String(aB)
356+ else fromBase58String(aK)
335357
336358
337-func bi (aB) = if ((aB == "WAVES"))
359+func br (aK) = if ((aK == "WAVES"))
338360 then 8
339361 else {
340- let aC = assetInfo(fromBase58String(aB))
341- if ($isInstanceOf(aC, "Asset"))
362+ let aL = assetInfo(fromBase58String(aK))
363+ if ($isInstanceOf(aL, "Asset"))
342364 then {
343- let bj = aC
344- bj.decimals
365+ let bs = aL
366+ bs.decimals
345367 }
346368 else throw("Can't find asset")
347369 }
348370
349371
350-func bk (aB) = pow(10, 0, bi(aB), 0, 0, DOWN)
372+func bt (aK) = pow(10, 0, br(aK), 0, 0, DOWN)
351373
352374
353-func bl (bm) = {
354- func bn (bo,aB) = {
355- let bp = getIntegerValue(ai, (aB + R))
356- (bo :+ bp)
375+func bu (bv) = {
376+ func bw (bx,aK) = {
377+ let by = valueOrElse(getInteger(am, (aK + R)), -1)
378+ (bx :+ by)
357379 }
358380
359- let bq = bm
360- let br = size(bq)
361- let bs = nil
362- func bt (bu,bv) = if ((bv >= br))
363- then bu
364- else bn(bu, bq[bv])
381+ let bz = bv
382+ let bA = size(bz)
383+ let bB = nil
384+ func bC (bD,bE) = if ((bE >= bA))
385+ then bD
386+ else bw(bD, bz[bE])
365387
366- func bw (bu,bv) = if ((bv >= br))
367- then bu
388+ func bF (bD,bE) = if ((bE >= bA))
389+ then bD
368390 else throw("List size exceeds 50")
369391
370- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
392+ bF(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bB, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
371393 }
372394
373395
374-func bx (aS) = {
375- let aw = valueOrErrorMessage(getString(this, (aS + O)), "Can't find pool addr by share id")
376- let aG = Address(fromBase58String(aw))
377- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
378- let bz = aU(aG, by)
379- let aI = bz._1
380- let aJ = bz._2
381- let bA = bz._3
382- let bB = bz._4
383- let bC = getIntegerValue(ai, (aI + R))
384- let bD = getIntegerValue(ai, (aJ + R))
385- let bE = aV(aG, by, aS)
386- let bF = pow(10, 0, bi(aI), 0, 0, DOWN)
387- let bG = pow(10, 0, bi(aJ), 0, 0, DOWN)
388- let bH = pow(10, 0, bi(aS), 0, 0, DOWN)
389- let bI = (fraction(bA, bC, bF) + fraction(bB, bD, bG))
390- fraction(bI, bH, bE)
396+func bG (bb) = {
397+ let aF = valueOrErrorMessage(getString(this, (bb + O)), "Can't find pool addr by share id")
398+ let aP = Address(fromBase58String(aF))
399+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
400+ let bI = bd(aP, bH)
401+ let aR = bI._1
402+ let aS = bI._2
403+ let bJ = bI._3
404+ let bK = bI._4
405+ let bL = bu([aR, aS])
406+ let bM = bL[0]
407+ let bN = bL[1]
408+ if (if ((0 > bM))
409+ then true
410+ else (0 > bN))
411+ then -1
412+ else {
413+ let bO = be(aP, bH, bb)
414+ let bP = pow(10, 0, br(aR), 0, 0, DOWN)
415+ let bQ = pow(10, 0, br(aS), 0, 0, DOWN)
416+ let bR = pow(10, 0, br(bb), 0, 0, DOWN)
417+ let bS = (fraction(bJ, bM, bP) + fraction(bK, bN, bQ))
418+ fraction(bS, bR, bO)
419+ }
391420 }
392421
393422
394-func bJ (bK) = {
395- func bn (bo,aS) = (bo :+ bx(aS))
423+func bT (bU) = {
424+ func bw (bx,bb) = (bx :+ bG(bb))
396425
397- let bq = bK
398- let br = size(bq)
399- let bs = nil
400- func bt (bu,bv) = if ((bv >= br))
401- then bu
402- else bn(bu, bq[bv])
426+ let bz = bU
427+ let bA = size(bz)
428+ let bB = nil
429+ func bC (bD,bE) = if ((bE >= bA))
430+ then bD
431+ else bw(bD, bz[bE])
403432
404- func bw (bu,bv) = if ((bv >= br))
405- then bu
433+ func bF (bD,bE) = if ((bE >= bA))
434+ then bD
406435 else throw("List size exceeds 20")
407436
408- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
437+ bF(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bB, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
409438 }
410439
411440
412-func bL (aI,aJ,aS,bM) = {
413- let bN = bl([aI, aJ])
414- let bO = bx(aS)
415- let bP = ([toString(bN[0]), toString(bN[1]), toString(bO)] ++ bM)
416-[StringEntry(Q, makeString(bP, ","))]
441+func bV (aR,aS,bb,bW) = {
442+ let bX = bu([aR, aS])
443+ let bY = bG(bb)
444+ let bL = ([toString(bX[0]), toString(bX[1]), toString(bY)] ++ bW)
445+[StringEntry(Q, makeString(bL, ","))]
417446 }
418447
419448
420-func bQ (by,aG,bR,aI,bS,aJ,aP,aO) = if ((by == a))
449+func bZ (bH,aP,ca,aR,cb,aS,aY,aX) = if ((bH == a))
421450 then {
422- let bT = {
423- let aK = invoke(aG, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bR), toString(bS)]], nil)
424- if ($isInstanceOf(aK, "List[Any]"))
425- then aK
426- else throw(($getType(aK) + " couldn't be cast to List[Any]"))
451+ let cc = {
452+ let aT = invoke(aP, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(ca), toString(cb)]], nil)
453+ if ($isInstanceOf(aT, "List[Any]"))
454+ then aT
455+ else throw(($getType(aT) + " couldn't be cast to List[Any]"))
427456 }
428- if ((bT == bT))
457+ if ((cc == cc))
429458 then $Tuple5({
430- let aK = bT[3]
431- if ($isInstanceOf(aK, "Int"))
432- then aK
433- else throw(($getType(aK) + " couldn't be cast to Int"))
459+ let aT = cc[3]
460+ if ($isInstanceOf(aT, "Int"))
461+ then aT
462+ else throw(($getType(aT) + " couldn't be cast to Int"))
434463 }, {
435- let aK = bT[4]
436- if ($isInstanceOf(aK, "Int"))
437- then aK
438- else throw(($getType(aK) + " couldn't be cast to Int"))
464+ let aT = cc[4]
465+ if ($isInstanceOf(aT, "Int"))
466+ then aT
467+ else throw(($getType(aT) + " couldn't be cast to Int"))
439468 }, {
440- let aK = bT[1]
441- if ($isInstanceOf(aK, "Int"))
442- then aK
443- else throw(($getType(aK) + " couldn't be cast to Int"))
444- }, bg(bT[2]), {
445- let aK = bT[0]
446- if ($isInstanceOf(aK, "Int"))
447- then aK
448- else throw(($getType(aK) + " couldn't be cast to Int"))
469+ let aT = cc[1]
470+ if ($isInstanceOf(aT, "Int"))
471+ then aT
472+ else throw(($getType(aT) + " couldn't be cast to Int"))
473+ }, bp(cc[2]), {
474+ let aT = cc[0]
475+ if ($isInstanceOf(aT, "Int"))
476+ then aT
477+ else throw(($getType(aT) + " couldn't be cast to Int"))
449478 })
450479 else throw("Strict value is not equal to itself.")
451480 }
452- else if ((by == b))
481+ else if ((bH == b))
453482 then {
454- let bU = $Tuple2(split({
455- let aK = invoke(aG, "evaluatePutByAmountAssetREADONLY", [bR], nil)
456- if ($isInstanceOf(aK, "String"))
457- then aK
458- else throw(($getType(aK) + " couldn't be cast to String"))
483+ let cd = $Tuple2(split({
484+ let aT = invoke(aP, "evaluatePutByAmountAssetREADONLY", [ca], nil)
485+ if ($isInstanceOf(aT, "String"))
486+ then aT
487+ else throw(($getType(aT) + " couldn't be cast to String"))
459488 }, "__"), split({
460- let aK = invoke(aG, "evaluatePutByPriceAssetREADONLY", [bS], nil)
461- if ($isInstanceOf(aK, "String"))
462- then aK
463- else throw(($getType(aK) + " couldn't be cast to String"))
489+ let aT = invoke(aP, "evaluatePutByPriceAssetREADONLY", [cb], nil)
490+ if ($isInstanceOf(aT, "String"))
491+ then aT
492+ else throw(($getType(aT) + " couldn't be cast to String"))
464493 }, "__"))
465- if ((bU == bU))
494+ if ((cd == cd))
466495 then {
467- let bV = bU._2
468- let bW = bU._1
469- let bX = parseIntValue(bW[1])
470- let bY = parseIntValue(bV[1])
471- if ((bY > bX))
496+ let ce = cd._2
497+ let cf = cd._1
498+ let cg = parseIntValue(cf[1])
499+ let ch = parseIntValue(ce[1])
500+ if ((ch > cg))
472501 then {
473- let bZ = parseIntValue(bW[8])
474- $Tuple5(bR, bZ, (bS - bZ), aJ, bY)
502+ let ci = parseIntValue(cf[8])
503+ $Tuple5(ca, ci, (cb - ci), aS, ch)
475504 }
476505 else {
477- let bZ = parseIntValue(bV[7])
478- $Tuple5(bZ, bS, (bR - bZ), aI, bX)
506+ let ci = parseIntValue(ce[7])
507+ $Tuple5(ci, cb, (ca - ci), aR, cg)
479508 }
480509 }
481510 else throw("Strict value is not equal to itself.")
482511 }
483- else am()
512+ else av()
484513
485514
486-func ca (aG,by,bR,aI,bS,aJ) = {
487- let cb = [AttachedPayment(bh(aI), bR), AttachedPayment(bh(aJ), bS)]
488- if ((by == a))
489- then invoke(aG, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], cb)
490- else if ((by == b))
491- then invoke(aG, "put", [1000000, false], cb)
492- else am()
515+func cj (aP,bH,ca,aR,cb,aS) = {
516+ let ck = [AttachedPayment(bq(aR), ca), AttachedPayment(bq(aS), cb)]
517+ if ((bH == a))
518+ then invoke(aP, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], ck)
519+ else if ((bH == b))
520+ then invoke(aP, "put", [1000000, false], ck)
521+ else av()
493522 }
494523
495524
496-func cc (aG,by,bZ,cd) = {
497- let cb = [AttachedPayment(bh(cd), bZ)]
498- if ((by == a))
499- then invoke(aG, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], cb)
500- else if ((by == b))
501- then invoke(aG, "putOneTkn", [0, false], cb)
502- else am()
525+func cl (aP,bH,ci,cm) = {
526+ let ck = [AttachedPayment(bq(cm), ci)]
527+ if ((bH == a))
528+ then invoke(aP, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], ck)
529+ else if ((bH == b))
530+ then invoke(aP, "putOneTkn", [0, false], ck)
531+ else av()
503532 }
504533
505534
506-func ce (aw,by,aS,cf) = {
507- let cb = [AttachedPayment(fromBase58String(aS), cf)]
508- if ((by == a))
509- then invoke(bc(), "lockShareTokens", [aw, 0], cb)
510- else if ((by == b))
511- then invoke(bd(addressFromStringValue(aw)), "stake", nil, cb)
512- else am()
535+func cn (aF,bH,bb,co) = {
536+ let ck = [AttachedPayment(fromBase58String(bb), co)]
537+ if ((bH == a))
538+ then invoke(bl(), "lockShareTokens", [aF, 0], ck)
539+ else if ((bH == b))
540+ then invoke(bm(addressFromStringValue(aF)), "stake", nil, ck)
541+ else av()
513542 }
514543
515544
516-func cg (aw,by,aS,cf) = {
517- let ch = if ((by == a))
518- then $Tuple3(bc(), "withdrawShareTokens", [aw, cf])
519- else if ((by == b))
520- then $Tuple3(bd(Address(fromBase58String(aw))), "unstake", [aS, cf])
521- else am()
522- let ci = ch._1
523- let cj = ch._2
524- let ck = ch._3
525- let cl = invoke(ci, cj, ck, nil)
526- if ((cl == cl))
527- then cf
545+func cp (aF,bH,bb,co) = {
546+ let cq = if ((bH == a))
547+ then $Tuple3(bl(), "withdrawShareTokens", [aF, co])
548+ else if ((bH == b))
549+ then $Tuple3(bm(Address(fromBase58String(aF))), "unstake", [bb, co])
550+ else av()
551+ let cr = cq._1
552+ let cs = cq._2
553+ let ct = cq._3
554+ let cu = invoke(cr, cs, ct, nil)
555+ if ((cu == cu))
556+ then co
528557 else throw("Strict value is not equal to itself.")
529558 }
530559
531560
532-func cm (aw,cn,co,aP,aO,cp,cq) = {
533- let aG = Address(fromBase58String(aw))
534- let cr = 1000000
535- let cs = getIntegerValue(aG, t)
536- let ct = fraction(cp, cr, (cr - cs), CEILING)
537- let cu = if ((cq == cn))
561+func cv (aF,cw,cx,aY,aX,cy,cz) = {
562+ let aP = Address(fromBase58String(aF))
563+ let cA = 1000000
564+ let cB = getIntegerValue(aP, t)
565+ let cC = fraction(cy, cA, (cA - cB), CEILING)
566+ let cD = if ((cz == cw))
538567 then {
539- let cv = fraction(ct, aO, (aP - ct), CEILING)
540- $Tuple2(cv, co)
568+ let cE = fraction(cC, aX, (aY - cC), CEILING)
569+ $Tuple2(cE, cx)
541570 }
542571 else {
543- let cv = fraction(ct, aP, (aO - ct), CEILING)
544- $Tuple2(cv, cn)
572+ let cE = fraction(cC, aY, (aX - cC), CEILING)
573+ $Tuple2(cE, cw)
545574 }
546- let cv = cu._1
547- let cw = cu._2
548- $Tuple2(cw, cv)
575+ let cE = cD._1
576+ let cF = cD._2
577+ $Tuple2(cF, cE)
549578 }
550579
551580
552-func cx (aw) = {
553- let aG = addressFromStringValue(aw)
554- let be = addressFromStringValue(valueOrErrorMessage(getString(aG, "%s__factoryContract"), "Can't get WX factory contract addr"))
555- let cy = value(getInteger(aj, "%s__poolFee"))
556- let cz = value(getInteger(aj, "%s__protocolFee"))
557- let aC = invoke(be, "getSwapFeeREADONLY", [toString(aG)], nil)
558- if ($isInstanceOf(aC, "(Int, Int)"))
581+func cG (aF) = {
582+ let aP = addressFromStringValue(aF)
583+ let bn = addressFromStringValue(valueOrErrorMessage(getString(aP, "%s__factoryContract"), "Can't get WX factory contract addr"))
584+ let cH = value(getInteger(an, "%s__poolFee"))
585+ let cI = value(getInteger(an, "%s__protocolFee"))
586+ let aL = invoke(bn, "getSwapFeeREADONLY", [toString(aP)], nil)
587+ if ($isInstanceOf(aL, "(Int, Int)"))
559588 then {
560- let cA = aC
561- $Tuple2(cA._1, cA._2)
589+ let cJ = aL
590+ $Tuple2(cJ._1, cJ._2)
562591 }
563- else $Tuple2(cy, cz)
592+ else $Tuple2(cH, cI)
564593 }
565594
566595
567-func cB (aw,cn,co,aP,aO,cp,cq) = {
568- let cC = cx(aw)
569- let cD = cC._1
570- let cE = cC._2
571- let cF = toBigInt(100000000)
572- let cG = if ((cq == cn))
596+func cK (aF,cw,cx,aY,aX,cy,cz) = {
597+ let cL = cG(aF)
598+ let cM = cL._1
599+ let cN = cL._2
600+ let cO = toBigInt(100000000)
601+ let cP = if ((cz == cw))
573602 then {
574- let cv = fraction(cp, aO, (aP - cp))
575- $Tuple2(cv, co)
603+ let cE = fraction(cy, aX, (aY - cy))
604+ $Tuple2(cE, cx)
576605 }
577606 else {
578- let cv = fraction(cp, aP, (aO - cp))
579- $Tuple2(cv, cn)
607+ let cE = fraction(cy, aY, (aX - cy))
608+ $Tuple2(cE, cw)
580609 }
581- let cv = cG._1
582- let cw = cG._2
583- let cH = toInt(fraction(toBigInt(cv), cF, (cF - toBigInt((cE + cD))), CEILING))
584- $Tuple2(cw, cH)
610+ let cE = cP._1
611+ let cF = cP._2
612+ let cQ = toInt(fraction(toBigInt(cE), cO, (cO - toBigInt((cN + cM))), CEILING))
613+ $Tuple2(cF, cQ)
585614 }
586615
587616
588-func cI (by,aw,cn,co,aP,aO,cp,cq) = if ((by == a))
617+func cR (bH,aF,cw,cx,aY,aX,cy,cz) = if ((bH == a))
589618 then {
590- let cJ = cm(aw, cn, co, aP, aO, cp, cq)
591- let cw = cJ._1
592- let cv = cJ._2
593- invoke(addressFromStringValue(aw), "callFunction", ["exchange", [toString(cp)]], [AttachedPayment(bh(cw), cv)])
619+ let cS = cv(aF, cw, cx, aY, aX, cy, cz)
620+ let cF = cS._1
621+ let cE = cS._2
622+ invoke(addressFromStringValue(aF), "callFunction", ["exchange", [toString(cy)]], [AttachedPayment(bq(cF), cE)])
594623 }
595- else if ((by == b))
624+ else if ((bH == b))
596625 then {
597- let cK = cB(aw, cn, co, aP, aO, cp, cq)
598- let cw = cK._1
599- let cv = cK._2
600- invoke(aj, "swap", [cp, cq, toString(this)], [AttachedPayment(bh(cw), cv)])
626+ let cT = cK(aF, cw, cx, aY, aX, cy, cz)
627+ let cF = cT._1
628+ let cE = cT._2
629+ invoke(an, "swap", [cy, cz, toString(this)], [AttachedPayment(bq(cF), cE)])
601630 }
602- else am()
631+ else av()
603632
604633
605-func cL (aG,by,aS,cM) = {
606- let cN = if ((by == a))
634+func cU (aP,bH,bb,cV) = {
635+ let cW = if ((bH == a))
607636 then {
608- let cl = {
609- let aK = invoke(aG, "callFunction", ["withdrawREADONLY", [toString(cM)]], nil)
610- if ($isInstanceOf(aK, "List[Any]"))
611- then aK
612- else throw(($getType(aK) + " couldn't be cast to List[Any]"))
637+ let cu = {
638+ let aT = invoke(aP, "callFunction", ["withdrawREADONLY", [toString(cV)]], nil)
639+ if ($isInstanceOf(aT, "List[Any]"))
640+ then aT
641+ else throw(($getType(aT) + " couldn't be cast to List[Any]"))
613642 }
614- if ((cl == cl))
643+ if ((cu == cu))
615644 then $Tuple2({
616- let aK = cl[0]
617- if ($isInstanceOf(aK, "Int"))
618- then aK
619- else throw(($getType(aK) + " couldn't be cast to Int"))
645+ let aT = cu[0]
646+ if ($isInstanceOf(aT, "Int"))
647+ then aT
648+ else throw(($getType(aT) + " couldn't be cast to Int"))
620649 }, {
621- let aK = cl[1]
622- if ($isInstanceOf(aK, "Int"))
623- then aK
624- else throw(($getType(aK) + " couldn't be cast to Int"))
650+ let aT = cu[1]
651+ if ($isInstanceOf(aT, "Int"))
652+ then aT
653+ else throw(($getType(aT) + " couldn't be cast to Int"))
625654 })
626655 else throw("Strict value is not equal to itself.")
627656 }
628- else if ((by == b))
657+ else if ((bH == b))
629658 then {
630- let cl = split({
631- let aK = invoke(aG, "evaluateGetREADONLY", [aS, cM], nil)
632- if ($isInstanceOf(aK, "String"))
633- then aK
634- else throw(($getType(aK) + " couldn't be cast to String"))
659+ let cu = split({
660+ let aT = invoke(aP, "evaluateGetREADONLY", [bb, cV], nil)
661+ if ($isInstanceOf(aT, "String"))
662+ then aT
663+ else throw(($getType(aT) + " couldn't be cast to String"))
635664 }, "__")
636- if ((cl == cl))
637- then $Tuple2(parseIntValue(cl[1]), parseIntValue(cl[2]))
665+ if ((cu == cu))
666+ then $Tuple2(parseIntValue(cu[1]), parseIntValue(cu[2]))
638667 else throw("Strict value is not equal to itself.")
639668 }
640- else am()
641- let cO = cN._1
642- let cP = cN._2
643- $Tuple2(cO, cP)
669+ else av()
670+ let cX = cW._1
671+ let cY = cW._2
672+ $Tuple2(cX, cY)
644673 }
645674
646675
647-func cQ (by,aw) = if ((by == a))
676+func cZ (bH,aF) = if ((bH == a))
648677 then {
649- let cR = aA(ak)
650- if ((cR == cR))
678+ let da = aJ(ao)
679+ if ((da == da))
651680 then {
652- let cl = invoke(bc(), "claim", [aw], nil)
653- if ((cl == cl))
681+ let cu = invoke(bl(), "claim", [aF], nil)
682+ if ((cu == cu))
654683 then {
655- let cS = aA(ak)
656- $Tuple2((cS - cR), ak)
684+ let db = aJ(ao)
685+ $Tuple2((db - da), ao)
657686 }
658687 else throw("Strict value is not equal to itself.")
659688 }
660689 else throw("Strict value is not equal to itself.")
661690 }
662- else if ((by == b))
691+ else if ((bH == b))
663692 then {
664- let cR = aA(al)
665- if ((cR == cR))
693+ let dc = aZ(addressFromStringValue(aF))
694+ let aR = dc._1
695+ let aS = dc._2
696+ let dd = dc._3
697+ let de = dc._4
698+ let df = dc._5
699+ let da = aJ(ap)
700+ if ((da == da))
666701 then {
667- let cl = invoke(bd(Address(fromBase58String(aw))), "claimWX", [aw], nil)
668- if ((cl == cl))
702+ let cu = invoke(bm(addressFromStringValue(aF)), "claimWx", [df], nil)
703+ if ((cu == cu))
669704 then {
670- let cS = aA(al)
671- $Tuple2((cS - cR), al)
705+ let db = aJ(ap)
706+ $Tuple2((db - da), ap)
672707 }
673708 else throw("Strict value is not equal to itself.")
674709 }
675710 else throw("Strict value is not equal to itself.")
676711 }
677- else am()
712+ else av()
678713
679714
680-func cT (by,aw,bb,bR,aI,bS,aJ,aP,aO,cU) = {
681- let cV = aA(fromBase58String(cU))
682- if ((cV == cV))
715+func dg (bH,aF,bk,ca,aR,cb,aS,aY,aX,dh) = {
716+ let di = aJ(fromBase58String(dh))
717+ if ((di == di))
683718 then {
684- let aG = addressFromStringValue(aw)
685- let cW = if (if ((bR > 0))
686- then (bS > 0)
719+ let aP = addressFromStringValue(aF)
720+ let dj = if (if ((ca > 0))
721+ then (cb > 0)
687722 else false)
688723 then {
689- let cX = bQ(by, aG, bR, aI, bS, aJ, aP, aO)
690- let cY = cX._1
691- let cZ = cX._2
692- let da = cX._3
693- let db = cX._4
694- let cl = ca(aG, by, cY, aI, cZ, aJ)
695- if ((cl == cl))
696- then $Tuple2(da, db)
724+ let dk = bZ(bH, aP, ca, aR, cb, aS, aY, aX)
725+ let dl = dk._1
726+ let dm = dk._2
727+ let dn = dk._3
728+ let do = dk._4
729+ let cu = cj(aP, bH, dl, aR, dm, aS)
730+ if ((cu == cu))
731+ then $Tuple2(dn, do)
697732 else throw("Strict value is not equal to itself.")
698733 }
699- else if ((bR > 0))
700- then $Tuple2(bR, aI)
701- else if ((bS > 0))
702- then $Tuple2(bS, aJ)
734+ else if ((ca > 0))
735+ then $Tuple2(ca, aR)
736+ else if ((cb > 0))
737+ then $Tuple2(cb, aS)
703738 else throw("pmts must be > 0")
704- let da = cW._1
705- let db = cW._2
706- let cl = if ((da > 0))
707- then cc(aG, by, da, db)
739+ let dn = dj._1
740+ let do = dj._2
741+ let cu = if ((dn > 0))
742+ then cl(aP, bH, dn, do)
708743 else nil
709- if ((cl == cl))
744+ if ((cu == cu))
710745 then {
711- let dc = aA(fromBase58String(cU))
712- let dd = (dc - cV)
713- let de = fraction(dd, ba(aw, bb), m)
714- let df = (dd - de)
715- if ((0 >= df))
746+ let dp = aJ(fromBase58String(dh))
747+ let dq = (dp - di)
748+ let dr = fraction(dq, bj(aF, bk), m)
749+ let ds = (dq - dr)
750+ if ((0 >= ds))
716751 then throw("amount of staked sharetokens must be > 0")
717752 else {
718- let dg = ce(aw, by, cU, df)
719- if ((dg == dg))
720- then $Tuple2(df, de)
753+ let dt = cn(aF, bH, dh, ds)
754+ if ((dt == dt))
755+ then $Tuple2(ds, dr)
721756 else throw("Strict value is not equal to itself.")
722757 }
723758 }
724759 else throw("Strict value is not equal to itself.")
725760 }
726761 else throw("Strict value is not equal to itself.")
727762 }
728763
729764
730-func dh (aw,aZ,di,de,dj,aS,ax,dk) = {
731- let dl = aW(aw)
732- let dm = aX(aw)
733- let dn = if (dk)
734- then $Tuple2(getIntegerValue(this, (aw + C)), (dm + di))
735- else $Tuple2(getIntegerValue(this, (aw + D)), dm)
736- let do = dn._1
737- let dp = dn._2
738-[IntegerEntry((aw + A), (dl + di)), IntegerEntry((aw + B), dp), IntegerEntry((((((aw + "_") + aZ) + "_") + toString(dj)) + u), di), IntegerEntry((((((aw + "_") + aZ) + "_") + toString(dj)) + z), do), StringEntry((((aZ + "_") + toString(dj)) + v), aw), IntegerEntry((aZ + y), dj), ScriptTransfer(ag, de, fromBase58String(aS))]
765+func du (aF,bi,dv,dr,dw,bb,aG,dx) = {
766+ let dy = bf(aF)
767+ let dz = bg(aF)
768+ let dA = if (dx)
769+ then $Tuple2(getIntegerValue(this, (aF + C)), (dz + dv))
770+ else $Tuple2(getIntegerValue(this, (aF + D)), dz)
771+ let dB = dA._1
772+ let dC = dA._2
773+[IntegerEntry((aF + A), (dy + dv)), IntegerEntry((aF + B), dC), IntegerEntry((((((aF + "_") + bi) + "_") + toString(dw)) + u), dv), IntegerEntry((((((aF + "_") + bi) + "_") + toString(dw)) + z), dB), StringEntry((((bi + "_") + toString(dw)) + v), aF), IntegerEntry((bi + y), dw), ScriptTransfer(ak, dr, fromBase58String(bb))]
739774 }
740775
741776
742-func dq (dr,ds,dt,du,dv,dw,dx,dy,dz,dA) = {
743- let dB = aA(bh(dr))
744- if ((dB == dB))
777+func dD (dE,dF,dG,dH,dI,dJ,dK,dL,dM,dN) = {
778+ let dO = aJ(bq(dE))
779+ if ((dO == dO))
745780 then {
746- let cl = invoke(ah, "swap", [du, dv, dw, dx, dy, dz, dA], [AttachedPayment(dt, ds)])
747- if ((cl == cl))
748- then (aA(bh(dr)) - dB)
781+ let cu = invoke(al, "swap", [dH, dI, dJ, dK, dL, dM, dN], [AttachedPayment(dG, dF)])
782+ if ((cu == cu))
783+ then (aJ(bq(dE)) - dO)
749784 else throw("Strict value is not equal to itself.")
750785 }
751786 else throw("Strict value is not equal to itself.")
752787 }
753788
754789
755-func dC (dr,ds,dt,dD,dE,dA) = {
756- let dB = aA(bh(dr))
757- if ((dB == dB))
790+func dP (dE,dF,dG,dQ,dR,dN) = {
791+ let dO = aJ(bq(dE))
792+ if ((dO == dO))
758793 then {
759- let cl = invoke(ah, "puzzleSwap", [dD, dE, dA], [AttachedPayment(dt, ds)])
760- if ((cl == cl))
761- then (aA(bh(dr)) - dB)
794+ let cu = invoke(al, "puzzleSwap", [dQ, dR, dN], [AttachedPayment(dG, dF)])
795+ if ((cu == cu))
796+ then (aJ(bq(dE)) - dO)
762797 else throw("Strict value is not equal to itself.")
763798 }
764799 else throw("Strict value is not equal to itself.")
765800 }
766801
767802
768-func dF (dr,ds,dt,dG,dH,dI,dJ,dK,dL,dA) = {
769- let dB = aA(bh(dr))
770- if ((dB == dB))
803+func dS (dE,dF,dG,dT,dU,dV,dW,dX,dY,dN) = {
804+ let dO = aJ(bq(dE))
805+ if ((dO == dO))
771806 then {
772- let cl = invoke(ah, "swopfiSwap", [dG, dH, dI, dJ, dK, dL, dA], [AttachedPayment(dt, ds)])
773- if ((cl == cl))
774- then (aA(bh(dr)) - dB)
807+ let cu = invoke(al, "swopfiSwap", [dT, dU, dV, dW, dX, dY, dN], [AttachedPayment(dG, dF)])
808+ if ((cu == cu))
809+ then (aJ(bq(dE)) - dO)
775810 else throw("Strict value is not equal to itself.")
776811 }
777812 else throw("Strict value is not equal to itself.")
778813 }
779814
780815
781-func dM (aw,by,dN,dO) = {
782- let aG = Address(fromBase58String(aw))
783- let dP = aU(aG, by)
784- let dQ = dP._1
785- let dR = dP._2
786- let aP = dP._3
787- let aO = dP._4
788- let aS = dP._5
789- if (if ((dN != dQ))
790- then (dN != dR)
816+func dZ (aF,bH,ea,eb) = {
817+ let aP = Address(fromBase58String(aF))
818+ let ec = bd(aP, bH)
819+ let ed = ec._1
820+ let ee = ec._2
821+ let aY = ec._3
822+ let aX = ec._4
823+ let bb = ec._5
824+ if (if ((ea != ed))
825+ then (ea != ee)
791826 else false)
792827 then throw("Wrong asset")
793828 else {
794- let dS = if ((dN == dQ))
795- then $Tuple2(dO, 0)
796- else $Tuple2(0, dO)
797- let bR = dS._1
798- let bS = dS._2
799- let dT = cT(by, aw, i, bR, dQ, bS, dR, aP, aO, aS)
800- let di = dT._1
801- let dU = dT._2
802- let dV = valueOrElse(getInteger(this, (aw + C)), 0)
803- let dW = valueOrElse(getInteger(this, (aw + D)), 0)
804- let dX = aW(aw)
805- let dY = aX(aw)
806- let dZ = fraction(dY, j, dX)
807- let ea = fraction(di, dZ, j)
808- let eb = (di - ea)
809- let ec = if ((dY > 0))
810- then (dV + fraction(ea, k, dY))
829+ let ef = bf(aF)
830+ let eg = bg(aF)
831+ let eh = fraction(eg, j, ef)
832+ let ei = fraction(eb, eh, j)
833+ let ej = (eb - ei)
834+ let ek = fraction(ei, bj(aF, d), m)
835+ let el = fraction(ej, bj(aF, c), m)
836+ let em = (ek + el)
837+ let en = if ((ea == ed))
838+ then $Tuple2((eb - em), 0)
839+ else $Tuple2(0, (eb - em))
840+ let ca = en._1
841+ let cb = en._2
842+ let eo = dg(bH, aF, i, ca, ed, cb, ee, aY, aX, bb)
843+ let dv = eo._1
844+ let ep = eo._2
845+ let eq = valueOrElse(getInteger(this, (aF + C)), 0)
846+ let er = valueOrElse(getInteger(this, (aF + D)), 0)
847+ let es = fraction(dv, eh, j)
848+ let et = (dv - es)
849+ let eu = if ((eg > 0))
850+ then (eq + fraction(es, k, eg))
811851 else 0
812- let ed = if (((dX - dY) > 0))
813- then (dW + fraction(eb, k, (dX - dY)))
852+ let ev = if (((ef - eg) > 0))
853+ then (er + fraction(et, k, (ef - eg)))
814854 else 0
815- let ee = fraction(ea, ba(aw, d), m)
816- let ef = fraction(eb, ba(aw, c), m)
817- let eg = cg(aw, by, aS, (ee + ef))
818- if ((eg == eg))
819- then ([IntegerEntry((aw + C), ec), IntegerEntry((aw + D), ed), IntegerEntry((aw + A), ((dX + di) - eg)), IntegerEntry((aw + B), ((dY + ea) - ee)), ScriptTransfer(ag, (ee + ef), fromBase58String(aS))] ++ bL(dQ, dR, aS, nil))
820- else throw("Strict value is not equal to itself.")
855+ ([IntegerEntry((aF + C), eu), IntegerEntry((aF + D), ev), IntegerEntry((aF + A), (ef + dv)), IntegerEntry((aF + B), (eg + es)), ScriptTransfer(ak, em, fromBase58String(ea))] ++ bV(ed, ee, bb, nil))
821856 }
822857 }
823858
824859
825-func eh (aw,cM,ei,ej,ek) = {
826- let aG = Address(fromBase58String(aw))
827- let by = valueOrErrorMessage(getString(this, (N + aw)), "Unknown pool")
828- let el = aU(aG, by)
829- let cn = el._1
830- let co = el._2
831- let aP = el._3
832- let aO = el._4
833- let aS = el._5
834- let em = aA(bh(cn))
835- if ((em == em))
860+func ew (bi,aF,ex,ey) = {
861+ let ez = valueOrErrorMessage(getInteger(this, (((((aF + "_") + bi) + "_") + ex) + u)), "Unknown position")
862+ let eA = getIntegerValue(this, (((((aF + "_") + bi) + "_") + ex) + z))
863+ let eB = if (ey)
864+ then getIntegerValue(this, (aF + C))
865+ else getIntegerValue(this, (aF + D))
866+ (ez + fraction(ez, (eB - eA), k))
867+ }
868+
869+
870+func eC (aF,eD,eE,eF) = {
871+ let bk = if (eD)
872+ then f
873+ else e
874+ if (eE)
875+ then fraction(eF, bj(aF, bk), m)
876+ else 0
877+ }
878+
879+
880+func eG (bi,aF,ex,eE) = {
881+ let ez = valueOrErrorMessage(getInteger(this, (((((aF + "_") + bi) + "_") + ex) + u)), "Unknown position")
882+ let eD = (valueOrElse(getInteger(this, (((((aF + "_") + bi) + "_") + ex) + w)), 0) > 0)
883+ let cV = ew(bi, aF, ex, eD)
884+ let eH = bf(aF)
885+ let eI = bg(aF)
886+ let eJ = Address(fromBase58String(bi))
887+ let aP = Address(fromBase58String(aF))
888+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Unknown pool")
889+ let eK = bd(aP, bH)
890+ let eL = eK._1
891+ let eM = eK._2
892+ let aY = eK._3
893+ let aX = eK._4
894+ let bb = eK._5
895+ let eN = $Tuple2(bq(eL), bq(eM))
896+ let eO = eN._1
897+ let eP = eN._2
898+ let eQ = eC(aF, eD, eE, cV)
899+ let eR = aJ(eO)
900+ if ((eR == eR))
836901 then {
837- let en = aA(bh(co))
838- if ((en == en))
902+ let eS = aJ(eP)
903+ if ((eS == eS))
839904 then {
840- let cl = if ((by == a))
905+ let cu = if ((bH == a))
841906 then {
842- let cl = cg(aw, by, aS, ek)
843- if ((cl == cl))
844- then invoke(aG, "callFunction", ["withdraw", [toString(cM)]], nil)
907+ let cu = cp(aF, bH, bb, eQ)
908+ if ((cu == cu))
909+ then invoke(aP, "callFunction", ["withdraw", [toString(cV)]], nil)
845910 else throw("Strict value is not equal to itself.")
846911 }
847- else if ((by == b))
912+ else if ((bH == b))
848913 then {
849- let cl = cg(aw, by, aS, (cM + ek))
850- if ((cl == cl))
851- then invoke(aG, "get", nil, [AttachedPayment(bh(aS), cM)])
914+ let cu = cp(aF, bH, bb, (cV + eQ))
915+ if ((cu == cu))
916+ then invoke(aP, "get", nil, [AttachedPayment(bq(bb), cV)])
852917 else throw("Strict value is not equal to itself.")
853918 }
854- else am()
855- if ((cl == cl))
919+ else av()
920+ if ((cu == cu))
856921 then {
857- let eo = aA(bh(cn))
858- let ep = aA(bh(co))
859- let eq = $Tuple2((eo - em), (ep - en))
860- let er = eq._1
861- let es = eq._2
862- let et = if ((ei > 0))
922+ let eT = aJ(eO)
923+ if ((eT == eT))
863924 then {
864- let eu = if (if ((ej == cn))
865- then (ei > er)
866- else false)
867- then (ei - er)
868- else if (if ((ej == co))
869- then (ei > es)
870- else false)
871- then (ei - es)
872- else 0
873- let ev = if ((eu > 0))
874- then cI(by, aw, cn, co, (aP - er), (aO - es), eu, ej)
875- else nil
876- if ((ev == ev))
925+ let eU = aJ(eP)
926+ if ((eU == eU))
877927 then {
878- let ew = aA(bh(cn))
879- let ex = aA(bh(co))
880- if ((ej == cn))
881- then $Tuple2(((ew - em) - ei), (ex - en))
882- else $Tuple2((ew - em), ((ex - en) - ei))
928+ let eV = $Tuple2((eT - eR), (eU - eS))
929+ let eW = eV._1
930+ let eX = eV._2
931+ let eY = if (eD)
932+ then {
933+ let eZ = getStringValue(this, (((((aF + "_") + bi) + "_") + ex) + x))
934+ let fa = {
935+ let aT = invoke(aw(), "getAssetDebt", [false, ((bi + "_") + ex), eZ], nil)
936+ if ($isInstanceOf(aT, "Int"))
937+ then aT
938+ else throw(($getType(aT) + " couldn't be cast to Int"))
939+ }
940+ if ((fa == fa))
941+ then {
942+ let fb = if (if ((eZ == eL))
943+ then (fa > eW)
944+ else false)
945+ then (fa - eW)
946+ else if (if ((eZ == eM))
947+ then (fa > eX)
948+ else false)
949+ then (fa - eX)
950+ else 0
951+ let fc = if ((fb > 0))
952+ then cR(bH, aF, eL, eM, (aY - eW), (aX - eX), fb, eZ)
953+ else nil
954+ if ((fc == fc))
955+ then {
956+ let fd = aJ(eO)
957+ if ((fd == fd))
958+ then {
959+ let fe = aJ(eP)
960+ if ((fe == fe))
961+ then {
962+ let ff = if ((fa > 0))
963+ then invoke(aw(), "repayFor", [((bi + "_") + ex)], [AttachedPayment(bq(eZ), fa)])
964+ else 0
965+ if ((ff == ff))
966+ then if ((eZ == eL))
967+ then $Tuple2(((fd - eR) - fa), (fe - eS))
968+ else $Tuple2((fd - eR), ((fe - eS) - fa))
969+ else throw("Strict value is not equal to itself.")
970+ }
971+ else throw("Strict value is not equal to itself.")
972+ }
973+ else throw("Strict value is not equal to itself.")
974+ }
975+ else throw("Strict value is not equal to itself.")
976+ }
977+ else throw("Strict value is not equal to itself.")
978+ }
979+ else $Tuple2(eW, eX)
980+ let fg = eY._1
981+ let fh = eY._2
982+ let fi = if (eD)
983+ then [IntegerEntry((aF + B), ((eI - cV) - eQ))]
984+ else nil
985+ let fj = (([DeleteEntry((((((aF + "_") + bi) + "_") + ex) + u)), DeleteEntry((((bi + "_") + ex) + v)), DeleteEntry((((((aF + "_") + bi) + "_") + ex) + w)), DeleteEntry((((((aF + "_") + bi) + "_") + ex) + x)), DeleteEntry((((((aF + "_") + bi) + "_") + ex) + z)), IntegerEntry((aF + A), ((eH - cV) - eQ)), ScriptTransfer(eJ, fg, eO), ScriptTransfer(eJ, fh, eP), ScriptTransfer(ak, eQ, fromBase58String(bb))] ++ fi) ++ bV(eL, eM, bb, nil))
986+ $Tuple2(fj, [fg, fh])
883987 }
884988 else throw("Strict value is not equal to itself.")
885989 }
886- else $Tuple2(er, es)
887- let ey = et._1
888- let ez = et._2
889- $Tuple5(ey, cn, ez, co, aS)
990+ else throw("Strict value is not equal to itself.")
890991 }
891992 else throw("Strict value is not equal to itself.")
892993 }
893994 else throw("Strict value is not equal to itself.")
894995 }
895996 else throw("Strict value is not equal to itself.")
896997 }
897998
898999
899-func eA (aZ,aw,eB,eC) = {
900- let eD = valueOrErrorMessage(getInteger(this, (((((aw + "_") + aZ) + "_") + eB) + u)), "Unknown position")
901- let eE = getIntegerValue(this, (((((aw + "_") + aZ) + "_") + eB) + z))
902- let eF = if (eC)
903- then getIntegerValue(this, (aw + C))
904- else getIntegerValue(this, (aw + D))
905- (eD + fraction(eD, (eF - eE), k))
1000+func fk (fl) = {
1001+ let fm = split(valueOrErrorMessage(getString(this, (fl + L)), ("No request with id " + fl)), ",")
1002+ let bi = fm[0]
1003+ let aF = fm[1]
1004+ let ca = parseIntValue(fm[2])
1005+ let ed = fm[3]
1006+ let cb = parseIntValue(fm[4])
1007+ let ee = fm[5]
1008+ let aY = parseIntValue(fm[6])
1009+ let aX = parseIntValue(fm[7])
1010+ let bb = fm[8]
1011+ let fn = fm[9]
1012+ let fo = parseIntValue(fm[10])
1013+ $Tuple11(bi, aF, ca, ed, cb, ee, aY, aX, bb, fn, fo)
9061014 }
9071015
9081016
909-func eG (aZ,aw,eB,eH) = {
910- let eD = valueOrErrorMessage(getInteger(this, (((((aw + "_") + aZ) + "_") + eB) + u)), "Unknown position")
911- let eI = valueOrElse(getInteger(this, (((((aw + "_") + aZ) + "_") + eB) + w)), 0)
912- let cM = eA(aZ, aw, eB, (eI > 0))
913- let eJ = aW(aw)
914- let eK = Address(fromBase58String(aZ))
915- let ej = valueOrElse(getString(this, (((((aw + "_") + aZ) + "_") + eB) + x)), "")
916- let eL = if ((eI > 0))
917- then $Tuple2({
918- let aK = invoke(an(), "getAssetDebt", [false, ((aZ + "_") + eB), ej], nil)
919- if ($isInstanceOf(aK, "Int"))
920- then aK
921- else throw(($getType(aK) + " couldn't be cast to Int"))
922- }, f)
923- else $Tuple2(0, e)
924- let ei = eL._1
925- let bb = eL._2
926- let ek = if (eH)
927- then fraction(cM, ba(aw, bb), m)
928- else 0
929- let eM = eh(aw, (cM - ek), ei, ej, ek)
930- if ((eM == eM))
931- then {
932- let aS = eM._5
933- let co = eM._4
934- let eN = eM._3
935- let cn = eM._2
936- let eO = eM._1
937- let eP = if ((ei > 0))
938- then invoke(an(), "repayFor", [((aZ + "_") + eB)], [AttachedPayment(bh(ej), ei)])
939- else 0
940- if ((eP == eP))
941- then {
942- let eQ = ([DeleteEntry((((((aw + "_") + aZ) + "_") + eB) + u)), DeleteEntry((((aZ + "_") + eB) + v)), DeleteEntry((((((aw + "_") + aZ) + "_") + eB) + w)), DeleteEntry((((((aw + "_") + aZ) + "_") + eB) + x)), DeleteEntry((((((aw + "_") + aZ) + "_") + eB) + z)), IntegerEntry((aw + A), ((eJ - cM) - ek)), ScriptTransfer(eK, eO, bh(cn)), ScriptTransfer(eK, eN, bh(co)), ScriptTransfer(ag, ek, fromBase58String(aS))] ++ bL(cn, co, aS, nil))
943- $Tuple2(eQ, [eO, eN])
944- }
945- else throw("Strict value is not equal to itself.")
946- }
947- else throw("Strict value is not equal to itself.")
948- }
949-
950-
951-func eR (eS) = {
952- let eT = split(valueOrErrorMessage(getString(this, (eS + L)), ("No request with id " + eS)), ",")
953- let aZ = eT[0]
954- let aw = eT[1]
955- let bR = parseIntValue(eT[2])
956- let dQ = eT[3]
957- let bS = parseIntValue(eT[4])
958- let dR = eT[5]
959- let aP = parseIntValue(eT[6])
960- let aO = parseIntValue(eT[7])
961- let aS = eT[8]
962- let eU = eT[9]
963- let eV = parseIntValue(eT[10])
964- $Tuple11(aZ, aw, bR, dQ, bS, dR, aP, aO, aS, eU, eV)
965- }
966-
967-
968-func eW (bR,bS,aI,aJ,eX,eY) = if (if ((eY != aI))
969- then (eY != aJ)
1017+func fp (ca,cb,aR,aS,fq,fr) = if (if ((fr != aR))
1018+ then (fr != aS)
9701019 else false)
9711020 then throw("Wrong borrow asset")
9721021 else {
973- let bC = getIntegerValue(ai, (aI + R))
974- let bD = getIntegerValue(ai, (aJ + R))
975- let eZ = pow(10, 0, bi(aI), 0, 0, DOWN)
976- let fa = pow(10, 0, bi(aJ), 0, 0, DOWN)
977- let fb = (fraction(bC, bR, eZ) + fraction(bD, bS, fa))
978- let fc = if ((eY == aI))
979- then $Tuple2(bC, eZ)
980- else $Tuple2(bD, fa)
981- let fd = fc._1
982- let fe = fc._2
983- fraction(fraction(fb, (eX - 100), 100), fe, fd)
1022+ let bM = getIntegerValue(am, (aR + R))
1023+ let bN = getIntegerValue(am, (aS + R))
1024+ let fs = pow(10, 0, br(aR), 0, 0, DOWN)
1025+ let ft = pow(10, 0, br(aS), 0, 0, DOWN)
1026+ let fu = (fraction(bM, ca, fs) + fraction(bN, cb, ft))
1027+ let fv = if ((fr == aR))
1028+ then $Tuple2(bM, fs)
1029+ else $Tuple2(bN, ft)
1030+ let fw = fv._1
1031+ let fx = fv._2
1032+ fraction(fraction(fu, (fq - 100), 100), fx, fw)
9841033 }
9851034
9861035
987-func ff (fg,dQ,dR) = if ((size(fg) == 2))
988- then if ((bg(fg[0].assetId) != dQ))
1036+func fy (fz,ed,ee) = if ((size(fz) == 2))
1037+ then if ((bp(fz[0].assetId) != ed))
9891038 then throw("Wrong payment asset A")
990- else if ((bg(fg[1].assetId) != dR))
1039+ else if ((bp(fz[1].assetId) != ee))
9911040 then throw("Wrong payment asset B")
992- else $Tuple2(fg[0].amount, fg[1].amount)
993- else if ((size(fg) == 1))
994- then if ((bg(fg[0].assetId) == dQ))
995- then $Tuple2(fg[0].amount, 0)
996- else if ((bg(fg[0].assetId) == dR))
997- then $Tuple2(0, fg[0].amount)
1041+ else $Tuple2(fz[0].amount, fz[1].amount)
1042+ else if ((size(fz) == 1))
1043+ then if ((bp(fz[0].assetId) == ed))
1044+ then $Tuple2(fz[0].amount, 0)
1045+ else if ((bp(fz[0].assetId) == ee))
1046+ then $Tuple2(0, fz[0].amount)
9981047 else throw("Wrong payment")
9991048 else throw("One or two payments expected")
10001049
10011050
1002-func fh (aP,aO,fi,fj) = {
1003- let fk = ((j - fraction(fraction(aO, j, aP), j, fraction(fj, j, fi))) * 100)
1004- if ((0 > fk))
1005- then (fk * -1)
1006- else fk
1051+func fA (aY,aX,fB,fC) = {
1052+ let fD = ((j - fraction(fraction(aX, j, aY), j, fraction(fC, j, fB))) * 100)
1053+ if ((0 > fD))
1054+ then (fD * -1)
1055+ else fD
10071056 }
10081057
10091058
1010-func fl (aw,by,fm,fn,da) = {
1011- let fo = if (fm)
1012- then cQ(by, aw)
1059+func fE (aF,bH,fF,co,dn) = {
1060+ let fG = if (fF)
1061+ then cZ(bH, aF)
10131062 else {
1014- let fp = if ((by == a))
1015- then ak
1016- else if ((by == b))
1017- then al
1018- else am()
1019- $Tuple2(fn, fp)
1063+ let fH = if ((bH == a))
1064+ then ao
1065+ else if ((bH == b))
1066+ then ap
1067+ else av()
1068+ $Tuple2(co, fH)
10201069 }
1021- let fq = fo._1
1022- let fr = fo._2
1023- let fs = aA(fr)
1024- if (if ((fn > (fq + da)))
1070+ let fI = fG._1
1071+ let fJ = fG._2
1072+ let fK = aJ(fJ)
1073+ if (if ((co > (fI + dn)))
10251074 then true
1026- else (fn > fs))
1075+ else (co > fK))
10271076 then throw("To big amount to exchange")
1028- else $Tuple2(fq, fr)
1077+ else $Tuple2(fI, fJ)
10291078 }
10301079
10311080
1032-@Callable(aq)
1033-func getShareAssetPriceREADONLY (aS) = {
1034- let ft = bx(aS)
1035- $Tuple2(nil, ft)
1081+@Callable(ay)
1082+func getPoolInfoREADONLY (aF) = {
1083+ let aP = addressFromStringValue(aF)
1084+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1085+ let fL = bd(Address(fromBase58String(aF)), bH)
1086+ let ed = fL._1
1087+ let ee = fL._2
1088+ let aY = fL._3
1089+ let aX = fL._4
1090+ let bb = fL._5
1091+ let bO = be(aP, bH, bb)
1092+ $Tuple2(nil, $Tuple6(ed, ee, bb, aY, aX, bO))
10361093 }
10371094
10381095
10391096
1040-@Callable(aq)
1041-func getUserPositionShareAmountREADONLY (aZ,dj) = {
1042- let aw = valueOrErrorMessage(getString(this, (((aZ + "_") + dj) + v)), "Unknown position")
1043- let eI = getIntegerValue(this, (((((aw + "_") + aZ) + "_") + dj) + w))
1044- let cM = eA(aZ, aw, dj, (eI > 0))
1045- $Tuple2(nil, cM)
1097+@Callable(ay)
1098+func getShareAssetPriceREADONLY (bb) = {
1099+ let fM = bG(bb)
1100+ $Tuple2(nil, fM)
10461101 }
10471102
10481103
10491104
1050-@Callable(aq)
1051-func getUserPositionREADONLY (aZ,fu,dj) = {
1052- func fv (bo,aw) = {
1053- let fw = bo
1054- let fx = fw._1
1055- let fy = fw._2
1056- let fz = fw._3
1057- let fA = fw._4
1058- let fB = fw._5
1059- let fC = fw._6
1060- if (!(isDefined(getInteger(this, (((((aw + "_") + aZ) + "_") + dj[fC]) + u)))))
1061- then $Tuple6((fx :+ 0), (fy :+ 0), (fz :+ 0), (fA :+ 0), (fB :+ 0), (fC + 1))
1062- else {
1063- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
1064- let fD = aU(Address(fromBase58String(aw)), by)
1065- let dQ = fD._1
1066- let dR = fD._2
1067- let aP = fD._3
1068- let aO = fD._4
1069- let aS = fD._5
1070- let eI = valueOrElse(getInteger(this, (((((aw + "_") + aZ) + "_") + dj[fC]) + w)), 0)
1071- let cM = eA(aZ, aw, dj[fC], (eI > 0))
1072- let fE = cL(Address(fromBase58String(aw)), by, aS, cM)
1073- let fF = fE._1
1074- let fG = fE._2
1075- if ((eI > 0))
1076- then {
1077- let ej = getStringValue(this, (((((aw + "_") + aZ) + "_") + dj[fC]) + x))
1078- let ei = {
1079- let aK = invoke(an(), "getAssetDebt", [false, ((aZ + "_") + dj[fC]), ej], nil)
1080- if ($isInstanceOf(aK, "Int"))
1081- then aK
1082- else throw(($getType(aK) + " couldn't be cast to Int"))
1083- }
1084- if ((ei == ei))
1085- then {
1086- let fH = if ((by == a))
1087- then cm(aw, dQ, dR, aP, aO, ei, ej)
1088- else if ((by == b))
1089- then cB(aw, dQ, dR, aP, aO, ei, ej)
1090- else am()
1091- let cw = fH._1
1092- let cv = fH._2
1093- let fI = if ((cw == dR))
1094- then $Tuple2((fF - ei), (fG - cv))
1095- else $Tuple2((fF - cv), (fG - ei))
1096- let fJ = fI._1
1097- let fK = fI._2
1098- $Tuple6((fx :+ fF), (fy :+ fG), (fz :+ ei), (fA :+ fJ), (fB :+ fK), (fC + 1))
1099- }
1100- else throw("Strict value is not equal to itself.")
1101- }
1102- else $Tuple6((fx :+ fF), (fy :+ fG), fz, (fx :+ fF), (fy :+ fG), (fC + 1))
1103- }
1104- }
1105-
1106- let fL = {
1107- let bq = fu
1108- let br = size(bq)
1109- let bs = $Tuple6(nil, nil, nil, nil, nil, 0)
1110- func bt (bu,bv) = if ((bv >= br))
1111- then bu
1112- else fv(bu, bq[bv])
1113-
1114- func bw (bu,bv) = if ((bv >= br))
1115- then bu
1116- else throw("List size exceeds 20")
1117-
1118- bw(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bt(bs, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1119- }
1120- let fx = fL._1
1121- let fy = fL._2
1122- let fz = fL._3
1123- let fA = fL._4
1124- let fB = fL._5
1125- $Tuple2(nil, $Tuple5(fx, fy, fz, fA, fB))
1105+@Callable(ay)
1106+func getUserPositionShareAmountREADONLY (bi,dw) = {
1107+ let aF = valueOrErrorMessage(getString(this, (((bi + "_") + dw) + v)), "Unknown position")
1108+ let fN = getIntegerValue(this, (((((aF + "_") + bi) + "_") + dw) + w))
1109+ let cV = ew(bi, aF, dw, (fN > 0))
1110+ $Tuple2(nil, cV)
11261111 }
11271112
11281113
11291114
1130-@Callable(aq)
1131-func replenish (aw,eX,eY) = valueOrElse(au(), {
1132- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
1133- if (!(av(aw, by)))
1115+@Callable(ay)
1116+func getUserPositionREADONLY (bi,fO,dw) = {
1117+ func fP (bx,aF) = {
1118+ let fQ = bx
1119+ let fR = fQ._1
1120+ let fS = fQ._2
1121+ let fT = fQ._3
1122+ let fU = fQ._4
1123+ let fV = fQ._5
1124+ let fW = fQ._6
1125+ if (!(isDefined(getInteger(this, (((((aF + "_") + bi) + "_") + dw[fW]) + u)))))
1126+ then $Tuple6((fR :+ 0), (fS :+ 0), (fT :+ 0), (fU :+ 0), (fV :+ 0), (fW + 1))
1127+ else {
1128+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1129+ let fX = bd(Address(fromBase58String(aF)), bH)
1130+ let ed = fX._1
1131+ let ee = fX._2
1132+ let aY = fX._3
1133+ let aX = fX._4
1134+ let bb = fX._5
1135+ let fN = valueOrElse(getInteger(this, (((((aF + "_") + bi) + "_") + dw[fW]) + w)), 0)
1136+ let cV = ew(bi, aF, dw[fW], (fN > 0))
1137+ let fY = cU(Address(fromBase58String(aF)), bH, bb, cV)
1138+ let fZ = fY._1
1139+ let ga = fY._2
1140+ if ((fN > 0))
1141+ then {
1142+ let eZ = getStringValue(this, (((((aF + "_") + bi) + "_") + dw[fW]) + x))
1143+ let fa = {
1144+ let aT = invoke(aw(), "getAssetDebt", [false, ((bi + "_") + dw[fW]), eZ], nil)
1145+ if ($isInstanceOf(aT, "Int"))
1146+ then aT
1147+ else throw(($getType(aT) + " couldn't be cast to Int"))
1148+ }
1149+ if ((fa == fa))
1150+ then {
1151+ let fb = if (if ((eZ == ed))
1152+ then (fa > fZ)
1153+ else false)
1154+ then (fa - fZ)
1155+ else if (if ((eZ == ee))
1156+ then (fa > ga)
1157+ else false)
1158+ then (fa - ga)
1159+ else 0
1160+ let cE = if ((fb > 0))
1161+ then if ((bH == a))
1162+ then {
1163+ let gb = cv(aF, ed, ee, aY, aX, fb, eZ)
1164+ gb._2
1165+ }
1166+ else if ((bH == b))
1167+ then {
1168+ let gb = cK(aF, ed, ee, aY, aX, fb, eZ)
1169+ gb._2
1170+ }
1171+ else av()
1172+ else 0
1173+ let gc = if ((eZ == ed))
1174+ then $Tuple2(((fZ + fb) - fa), (ga - cE))
1175+ else $Tuple2((fZ - cE), ((ga + fb) - fa))
1176+ let gd = gc._1
1177+ let ge = gc._2
1178+ $Tuple6((fR :+ fZ), (fS :+ ga), (fT :+ fa), (fU :+ gd), (fV :+ ge), (fW + 1))
1179+ }
1180+ else throw("Strict value is not equal to itself.")
1181+ }
1182+ else $Tuple6((fR :+ fZ), (fS :+ ga), fT, (fR :+ fZ), (fS :+ ga), (fW + 1))
1183+ }
1184+ }
1185+
1186+ let gf = {
1187+ let bz = fO
1188+ let bA = size(bz)
1189+ let bB = $Tuple6(nil, nil, nil, nil, nil, 0)
1190+ func bC (bD,bE) = if ((bE >= bA))
1191+ then bD
1192+ else fP(bD, bz[bE])
1193+
1194+ func bF (bD,bE) = if ((bE >= bA))
1195+ then bD
1196+ else throw("List size exceeds 20")
1197+
1198+ bF(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bC(bB, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
1199+ }
1200+ let fR = gf._1
1201+ let fS = gf._2
1202+ let fT = gf._3
1203+ let fU = gf._4
1204+ let fV = gf._5
1205+ $Tuple2(nil, $Tuple5(fR, fS, fT, fU, fV))
1206+ }
1207+
1208+
1209+
1210+@Callable(ay)
1211+func replenish (aF,fq,fr) = valueOrElse(aD(), {
1212+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1213+ if (!(aE(aF, bH)))
11341214 then throw("Pool not active at this moment")
1135- else if (if ((100 > eX))
1215+ else if (if ((100 > fq))
11361216 then true
1137- else (eX > 300))
1217+ else (fq > 300))
11381218 then throw("Leverage can't be <100 and >300")
1139- else if (if (!(getBooleanValue(this, (aw + E))))
1140- then (eX > 100)
1219+ else if (if (!(getBooleanValue(this, (aF + E))))
1220+ then (fq > 100)
11411221 else false)
11421222 then throw("You can't borrow in this pool")
11431223 else {
1144- let fM = aU(Address(fromBase58String(aw)), by)
1145- let dQ = fM._1
1146- let dR = fM._2
1147- let aP = fM._3
1148- let aO = fM._4
1149- let aS = fM._5
1150- if (if ((eY != dQ))
1151- then (eY != dR)
1224+ let gg = bd(Address(fromBase58String(aF)), bH)
1225+ let ed = gg._1
1226+ let ee = gg._2
1227+ let aY = gg._3
1228+ let aX = gg._4
1229+ let bb = gg._5
1230+ if (if ((fr != ed))
1231+ then (fr != ee)
11521232 else false)
11531233 then throw("Wrong borrow asset")
11541234 else {
1155- let fN = ff(aq.payments, dQ, dR)
1156- let bR = fN._1
1157- let bS = fN._2
1158- let aZ = toString(aq.caller)
1159- let fO = aY(aZ)
1160- if ((eX > 100))
1235+ let gh = fy(ay.payments, ed, ee)
1236+ let ca = gh._1
1237+ let cb = gh._2
1238+ let bi = toString(ay.caller)
1239+ let gi = bh(bi)
1240+ if ((fq > 100))
11611241 then {
1162- let eI = eW(bR, bS, dQ, dR, eX, eY)
1163- let eT = makeString([aZ, aw, toString(bR), dQ, toString(bS), dR, toString(aP), toString(aO), aS, eY, toString(eI)], ",")
1164- let fP = {
1165- let aK = invoke(this, "createNewRequest", [eT], nil)
1166- if ($isInstanceOf(aK, "Int"))
1167- then aK
1168- else throw(($getType(aK) + " couldn't be cast to Int"))
1242+ let fN = fp(ca, cb, ed, ee, fq, fr)
1243+ let fm = makeString([bi, aF, toString(ca), ed, toString(cb), ee, toString(aY), toString(aX), bb, fr, toString(fN)], ",")
1244+ let gj = {
1245+ let aT = invoke(this, "createNewRequest", [fm], nil)
1246+ if ($isInstanceOf(aT, "Int"))
1247+ then aT
1248+ else throw(($getType(aT) + " couldn't be cast to Int"))
11691249 }
1170- if ((fP == fP))
1250+ if ((gj == gj))
11711251 then {
1172- let fQ = [((aZ + "_") + toString(fO)), aS, eY, eI, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fP, "Can't create new request"))]
1173- let cl = reentrantInvoke(an(), "flashPosition", fQ, nil)
1174- if ((cl == cl))
1252+ let gk = [((bi + "_") + toString(gi)), bb, fr, fN, toString(this), "replenishFromLand", toString(valueOrErrorMessage(gj, "Can't create new request"))]
1253+ let cu = reentrantInvoke(aw(), "flashPosition", gk, nil)
1254+ if ((cu == cu))
11751255 then {
1176- let fR = getIntegerValue(this, (((((aw + "_") + aZ) + "_") + toString(fO)) + u))
1177- let fS = aL(Address(fromBase58String(aw)), by, dQ, dR)
1178- if ((fS == fS))
1256+ let gl = getIntegerValue(this, (((((aF + "_") + bi) + "_") + toString(gi)) + u))
1257+ let gm = aU(Address(fromBase58String(aF)), bH, ed, ee)
1258+ if ((gm == gm))
11791259 then {
1180- let fj = fS._2
1181- let fi = fS._1
1182- let fT = fh(aP, aO, fi, fj)
1183- let fU = cL(Address(fromBase58String(aw)), by, aS, fR)
1184- let fF = fU._1
1185- let fG = fU._2
1186- $Tuple2(nil, [fT, fF, fG])
1260+ let fC = gm._2
1261+ let fB = gm._1
1262+ let gn = fA(aY, aX, fB, fC)
1263+ let go = cU(Address(fromBase58String(aF)), bH, bb, gl)
1264+ let fZ = go._1
1265+ let ga = go._2
1266+ $Tuple2(nil, [gn, fZ, ga])
11871267 }
11881268 else throw("Strict value is not equal to itself.")
11891269 }
11901270 else throw("Strict value is not equal to itself.")
11911271 }
11921272 else throw("Strict value is not equal to itself.")
11931273 }
11941274 else {
1195- let fV = cT(by, aw, h, bR, dQ, bS, dR, aP, aO, aS)
1196- if ((fV == fV))
1275+ let gp = dg(bH, aF, h, ca, ed, cb, ee, aY, aX, bb)
1276+ if ((gp == gp))
11971277 then {
1198- let eg = fV._2
1199- let fR = fV._1
1200- let fW = aL(Address(fromBase58String(aw)), by, dQ, dR)
1201- if ((fW == fW))
1278+ let em = gp._2
1279+ let gl = gp._1
1280+ let gq = aU(Address(fromBase58String(aF)), bH, ed, ee)
1281+ if ((gq == gq))
12021282 then {
1203- let fj = fW._2
1204- let fi = fW._1
1205- let fT = fh(aP, aO, fi, fj)
1206- let fX = cL(Address(fromBase58String(aw)), by, aS, fR)
1207- let fF = fX._1
1208- let fG = fX._2
1209- $Tuple2((dh(aw, aZ, fR, eg, fO, aS, by, false) ++ bL(dQ, dR, aS, [toString(fF), toString(fG)])), [fT, fF, fG])
1283+ let fC = gq._2
1284+ let fB = gq._1
1285+ let gn = fA(aY, aX, fB, fC)
1286+ let gr = cU(Address(fromBase58String(aF)), bH, bb, gl)
1287+ let fZ = gr._1
1288+ let ga = gr._2
1289+ $Tuple2((du(aF, bi, gl, em, gi, bb, bH, false) ++ bV(ed, ee, bb, [toString(fZ), toString(ga)])), [gn, fZ, ga])
12101290 }
12111291 else throw("Strict value is not equal to itself.")
12121292 }
12131293 else throw("Strict value is not equal to itself.")
12141294 }
12151295 }
12161296 }
12171297 })
12181298
12191299
12201300
1221-@Callable(aq)
1222-func withdraw (aw,eB) = valueOrElse(au(), {
1223- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
1224- if (!(av(aw, by)))
1301+@Callable(ay)
1302+func withdraw (aF,ex) = valueOrElse(aD(), {
1303+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1304+ if (!(aE(aF, bH)))
12251305 then throw("Pool not active at this moment")
1226- else eG(toString(aq.caller), aw, toString(eB), false)
1306+ else eG(toString(ay.caller), aF, toString(ex), false)
12271307 })
12281308
12291309
12301310
1231-@Callable(aq)
1232-func createUpdateStopLoss (eB,fY,aB,fZ) = valueOrElse(au(), {
1233- let ga = getIntegerValue(ai, (aB + R))
1234- let by = valueOrErrorMessage(getString(this, (N + fY)), "Pool is not inited")
1235- if (!(av(fY, by)))
1311+@Callable(ay)
1312+func createUpdateStopLoss (ex,gs,aK,gt) = valueOrElse(aD(), {
1313+ let gu = getIntegerValue(am, (aK + R))
1314+ let bH = valueOrErrorMessage(getString(this, (N + gs)), "Pool is not inited")
1315+ if (!(aE(gs, bH)))
12361316 then throw("Pool not active at this moment")
1237- else if (!(isDefined(getInteger(this, (((((fY + "_") + toString(aq.caller)) + "_") + toString(eB)) + u)))))
1317+ else if (!(isDefined(getInteger(this, (((((gs + "_") + toString(ay.caller)) + "_") + toString(ex)) + u)))))
12381318 then throw("There are no user position")
1239- else if ((0 >= fZ))
1319+ else if ((0 >= gt))
12401320 then throw("Price must be greater than 0")
1241- else if ((fZ > ga))
1321+ else if ((gt > gu))
12421322 then throw("Price must be less than current token price")
1243- else [IntegerEntry((((((((toString(aq.caller) + "_") + toString(eB)) + "_") + fY) + "_") + aB) + W), fZ)]
1323+ else [IntegerEntry((((((((toString(ay.caller) + "_") + toString(ex)) + "_") + gs) + "_") + aK) + W), gt)]
12441324 })
12451325
12461326
12471327
1248-@Callable(aq)
1249-func deleteStopLoss (eB,fY,aB) = valueOrElse(au(), {
1250- let by = valueOrErrorMessage(getString(this, (N + fY)), "Pool is not inited")
1251- if (!(av(fY, by)))
1328+@Callable(ay)
1329+func deleteStopLoss (ex,gs,aK) = valueOrElse(aD(), {
1330+ let bH = valueOrErrorMessage(getString(this, (N + gs)), "Pool is not inited")
1331+ if (!(aE(gs, bH)))
12521332 then throw("Pool not active at this moment")
1253- else if (!(isDefined(getInteger(this, (((((((toString(aq.caller) + "_") + toString(eB)) + "_") + fY) + "_") + aB) + W)))))
1333+ else if (!(isDefined(getInteger(this, (((((((toString(ay.caller) + "_") + toString(ex)) + "_") + gs) + "_") + aK) + W)))))
12541334 then throw("No entry")
1255- else [DeleteEntry((((((((toString(aq.caller) + "_") + toString(eB)) + "_") + fY) + "_") + aB) + W))]
1335+ else [DeleteEntry((((((((toString(ay.caller) + "_") + toString(ex)) + "_") + gs) + "_") + aK) + W))]
12561336 })
12571337
12581338
12591339
1260-@Callable(aq)
1261-func init (gb,gc,gd,ai,ge,aj,gf,gg,gh) = valueOrElse(ar(aq), if (isDefined(getString(aa)))
1340+@Callable(ay)
1341+func init (gv,gw,gx,am,gy,an,gz,gA,gB,gC,gD,gE,gF) = valueOrElse(aA(ay), if (isDefined(getString(aa)))
12621342 then throw("Already inited")
1263- else if (!(isDefined(addressFromString(gb))))
1343+ else if (!(isDefined(addressFromString(gv))))
12641344 then throw("moneyBoxAddr is not correct address")
1265- else if (!(isDefined(addressFromString(gc))))
1345+ else if (!(isDefined(addressFromString(gw))))
12661346 then throw("sfFarmingAddr is not correct address")
1267- else if (!(isDefined(addressFromString(gd))))
1347+ else if (!(isDefined(addressFromString(gx))))
12681348 then throw("lendAddr is not correct address")
1269- else if (!(isDefined(addressFromString(ai))))
1349+ else if (!(isDefined(addressFromString(am))))
12701350 then throw("priceOracleAddr is not correct address")
1271- else if (!(isDefined(addressFromString(ge))))
1351+ else if (!(isDefined(addressFromString(gy))))
12721352 then throw("keeperExContract is not correct address")
1273- else if (!(isDefined(assetInfo(fromBase58String(gf)))))
1353+ else if (!(isDefined(assetInfo(fromBase58String(gz)))))
12741354 then throw("swopAssetId is not correct asset id")
1275- else if (!(isDefined(assetInfo(fromBase58String(gg)))))
1355+ else if (!(isDefined(assetInfo(fromBase58String(gA)))))
12761356 then throw("swopAssetId is not correct asset id")
1277- else if ((size(fromBase58String(gh)) != 32))
1278- then throw("adminPubKey is not correct")
1279- else [StringEntry(X, gb), StringEntry(Y, gc), StringEntry(Z, gd), StringEntry(ab, ai), StringEntry(ac, ge), StringEntry(ad, aj), StringEntry(ae, gf), StringEntry(af, gg), StringEntry(aa, gh)])
1357+ else if ((size(fromBase58String(gB)) != 32))
1358+ then throw("operatorPubKey is not correct")
1359+ else if ((size(fromBase58String(gC)) != 32))
1360+ then throw("group1Admin1PubKey is not correct")
1361+ else if ((size(fromBase58String(gD)) != 32))
1362+ then throw("group1Admin2PubKey is not correct")
1363+ else if ((size(fromBase58String(gE)) != 32))
1364+ then throw("group2Admin1PubKey is not correct")
1365+ else if ((size(fromBase58String(gF)) != 32))
1366+ then throw("group2Admin2PubKey is not correct")
1367+ else [StringEntry(X, gv), StringEntry(Y, gw), StringEntry(Z, gx), StringEntry(ab, am), StringEntry(ac, gy), StringEntry(ad, an), StringEntry(ae, gz), StringEntry(af, gA), StringEntry(aa, gB), StringEntry(ag, gC), StringEntry(ah, gD), StringEntry(ai, gE), StringEntry(aj, gF)])
12801368
12811369
12821370
1283-@Callable(aq)
1284-func createNewRequest (ck) = valueOrElse(ar(aq), {
1285- let fP = (valueOrElse(getInteger(this, M), 0) + 1)
1286- $Tuple2([StringEntry((toString(fP) + L), ck), IntegerEntry(M, fP)], fP)
1371+@Callable(ay)
1372+func createNewRequest (ct) = valueOrElse(aA(ay), {
1373+ let gj = (valueOrElse(getInteger(this, M), 0) + 1)
1374+ $Tuple2([StringEntry((toString(gj) + L), ct), IntegerEntry(M, gj)], gj)
12871375 })
12881376
12891377
12901378
1291-@Callable(aq)
1292-func replenishFromLand (eS) = valueOrElse(at(), valueOrElse(as(aq), {
1293- let gi = eR(eS)
1294- let aZ = gi._1
1295- let aw = gi._2
1296- let bR = gi._3
1297- let dQ = gi._4
1298- let bS = gi._5
1299- let dR = gi._6
1300- let aP = gi._7
1301- let aO = gi._8
1302- let aS = gi._9
1303- let eU = gi._10
1304- let eV = gi._11
1305- if ((size(aq.payments) != 1))
1379+@Callable(ay)
1380+func replenishFromLand (fl) = valueOrElse(aC(), valueOrElse(aB(ay), {
1381+ let gG = fk(fl)
1382+ let bi = gG._1
1383+ let aF = gG._2
1384+ let ca = gG._3
1385+ let ed = gG._4
1386+ let cb = gG._5
1387+ let ee = gG._6
1388+ let aY = gG._7
1389+ let aX = gG._8
1390+ let bb = gG._9
1391+ let fn = gG._10
1392+ let fo = gG._11
1393+ if ((size(ay.payments) != 1))
13061394 then throw("Wrong payment size")
1307- else if (if ((bg(aq.payments[0].assetId) != eU))
1395+ else if (if ((bp(ay.payments[0].assetId) != fn))
13081396 then true
1309- else (aq.payments[0].amount != eV))
1397+ else (ay.payments[0].amount != fo))
13101398 then throw("Wrong payment")
13111399 else {
1312- let gj = if ((dQ == eU))
1313- then $Tuple2((bR + eV), bS)
1314- else $Tuple2(bR, (bS + eV))
1315- let gk = gj._1
1316- let gl = gj._2
1317- let by = valueOrErrorMessage(getString(this, (N + aw)), "Unknown pool")
1318- let gm = cT(by, aw, g, gk, dQ, gl, dR, aP, aO, aS)
1319- let fR = gm._1
1320- let eg = gm._2
1321- let dj = aY(aZ)
1322- let gn = [IntegerEntry((((((aw + "_") + aZ) + "_") + toString(dj)) + w), eV), StringEntry((((((aw + "_") + aZ) + "_") + toString(dj)) + x), eU)]
1323- let eQ = dh(aw, aZ, fR, eg, dj, aS, by, true)
1324- let go = cL(Address(fromBase58String(aw)), by, aS, fR)
1325- let fF = go._1
1326- let fG = go._2
1327- $Tuple2((((eQ ++ bL(dQ, dR, aS, [toString(fF), toString(fG)])) ++ gn) :+ DeleteEntry((eS + L))), fR)
1400+ let gH = if ((ed == fn))
1401+ then $Tuple2((ca + fo), cb)
1402+ else $Tuple2(ca, (cb + fo))
1403+ let gI = gH._1
1404+ let gJ = gH._2
1405+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Unknown pool")
1406+ let gK = dg(bH, aF, g, gI, ed, gJ, ee, aY, aX, bb)
1407+ let gl = gK._1
1408+ let em = gK._2
1409+ let dw = bh(bi)
1410+ let gL = [IntegerEntry((((((aF + "_") + bi) + "_") + toString(dw)) + w), fo), StringEntry((((((aF + "_") + bi) + "_") + toString(dw)) + x), fn)]
1411+ let fj = du(aF, bi, gl, em, dw, bb, bH, true)
1412+ let gM = cU(Address(fromBase58String(aF)), bH, bb, gl)
1413+ let fZ = gM._1
1414+ let ga = gM._2
1415+ $Tuple2((((fj ++ bV(ed, ee, bb, [toString(fZ), toString(ga)])) ++ gL) :+ DeleteEntry((fl + L))), gl)
13281416 }
13291417 }))
13301418
13311419
13321420
1333-@Callable(aq)
1334-func liquidate (aZ,eB,gp) = valueOrElse(at(), valueOrElse(as(aq), {
1335- let aw = valueOrErrorMessage(getString(this, (((aZ + "_") + eB) + v)), "no position")
1336- let by = valueOrErrorMessage(getString(this, (N + aw)), "Pool is not inited")
1337- let gq = aU(Address(fromBase58String(aw)), by)
1338- let dQ = gq._1
1339- let dR = gq._2
1340- let aP = gq._3
1341- let aO = gq._4
1342- let aS = gq._5
1343- let cf = cg(aw, by, aS, gp)
1344- let eI = getIntegerValue(this, (((((aw + "_") + aZ) + "_") + eB) + w))
1345- let ej = getStringValue(this, (((((aw + "_") + aZ) + "_") + eB) + x))
1346- let cM = eA(aZ, aw, eB, (eI > 0))
1347- if ((gp > cM))
1421+@Callable(ay)
1422+func liquidate (bi,ex,gN) = valueOrElse(aC(), valueOrElse(aB(ay), {
1423+ let aF = valueOrErrorMessage(getString(this, (((bi + "_") + ex) + v)), "no position")
1424+ let bH = valueOrErrorMessage(getString(this, (N + aF)), "Pool is not inited")
1425+ let gO = bd(Address(fromBase58String(aF)), bH)
1426+ let ed = gO._1
1427+ let ee = gO._2
1428+ let aY = gO._3
1429+ let aX = gO._4
1430+ let bb = gO._5
1431+ let co = cp(aF, bH, bb, gN)
1432+ let fN = getIntegerValue(this, (((((aF + "_") + bi) + "_") + ex) + w))
1433+ let eZ = getStringValue(this, (((((aF + "_") + bi) + "_") + ex) + x))
1434+ let cV = ew(bi, aF, ex, (fN > 0))
1435+ if ((gN > cV))
13481436 then throw("You can't liquidate more than user have")
1349- else if ((eI == 0))
1437+ else if ((fN == 0))
13501438 then throw("You can't liquidate position without borrow")
1351- else [IntegerEntry((((((aw + "_") + aZ) + "_") + eB) + z), getIntegerValue(this, (aw + C))), IntegerEntry((aw + B), (aX(aw) - gp)), IntegerEntry((aw + A), (aW(aw) - gp)), IntegerEntry((((((aw + "_") + aZ) + "_") + eB) + u), (cM - gp)), ScriptTransfer(aq.caller, cf, fromBase58String(aS))]
1439+ else [IntegerEntry((((((aF + "_") + bi) + "_") + ex) + z), getIntegerValue(this, (aF + C))), IntegerEntry((aF + B), (bg(aF) - gN)), IntegerEntry((aF + A), (bf(aF) - gN)), IntegerEntry((((((aF + "_") + bi) + "_") + ex) + u), (cV - gN)), ScriptTransfer(ay.caller, co, fromBase58String(bb))]
13521440 }))
13531441
13541442
13551443
1356-@Callable(aq)
1357-func stopLoss (aZ,eB,aw,aB) = valueOrElse(at(), valueOrElse(ap(aq), {
1358- let ga = getIntegerValue(ai, (aB + R))
1359- let gr = valueOrErrorMessage(getInteger(this, (((((((aZ + "_") + toString(eB)) + "_") + aw) + "_") + aB) + W)), "No entry")
1360- if ((ga > gr))
1444+@Callable(ay)
1445+func stopLoss (bi,ex,aF,aK) = valueOrElse(aC(), valueOrElse(ax(ay), {
1446+ let gu = getIntegerValue(am, (aK + R))
1447+ let gP = valueOrErrorMessage(getInteger(this, (((((((bi + "_") + toString(ex)) + "_") + aF) + "_") + aK) + W)), "No entry")
1448+ if ((gu > gP))
13611449 then throw("Token price greater stop loss price")
13621450 else {
1363- let gs = eG(aZ, aw, toString(eB), true)
1364- $Tuple2((gs._1 :+ DeleteEntry((((((((aZ + "_") + toString(eB)) + "_") + aw) + "_") + aB) + W))), gs._2)
1451+ let gQ = eG(bi, aF, toString(ex), true)
1452+ $Tuple2((gQ._1 :+ DeleteEntry((((((((bi + "_") + toString(ex)) + "_") + aF) + "_") + aK) + W))), gQ._2)
13651453 }
13661454 }))
13671455
13681456
13691457
1370-@Callable(aq)
1371-func capitalizeExKeeper (aw,gt,fn,fm,du,dv,dw,dx,dy,dz,dA) = valueOrElse(at(), valueOrElse(ap(aq), {
1372- let by = getStringValue(this, (N + aw))
1373- let da = valueOrElse(getInteger(this, (aw + P)), 0)
1374- let gu = fl(aw, by, fm, fn, da)
1375- let gv = gu._1
1376- let fp = gu._2
1377- let gw = dq(gt, fn, fp, du, dv, dw, dx, dy, dz, dA)
1378- let gx = ((gv + da) - fn)
1379- let gy = if ((gx >= 0))
1380- then [IntegerEntry((aw + P), gx)]
1381- else nil
1382- (dM(aw, by, gt, gw) ++ gy)
1458+@Callable(ay)
1459+func capitalizeExKeeper (aF,gR,gS,fF,dH,dI,dJ,dK,dL,dM,dN) = valueOrElse(aC(), valueOrElse(ax(ay), {
1460+ let bH = getStringValue(this, (N + aF))
1461+ let dn = valueOrElse(getInteger(this, (aF + P)), 0)
1462+ let gT = fE(aF, bH, fF, gS, dn)
1463+ let gU = gT._1
1464+ let fH = gT._2
1465+ let gV = dD(gR, gS, fH, dH, dI, dJ, dK, dL, dM, dN)
1466+ let gW = ((gU + dn) - gS)
1467+ let gX = if ((gW >= 0))
1468+ then [IntegerEntry((aF + P), gW)]
1469+ else throw("Negative change")
1470+ (dZ(aF, bH, gR, gV) ++ gX)
13831471 }))
13841472
13851473
13861474
1387-@Callable(aq)
1388-func capitalizeExPuzzle (aw,gt,fn,fm,dD,dE,dA) = valueOrElse(at(), valueOrElse(ap(aq), {
1389- let by = getStringValue(this, (N + aw))
1390- let da = valueOrElse(getInteger(this, (aw + P)), 0)
1391- let gz = fl(aw, by, fm, fn, da)
1392- let gv = gz._1
1393- let fp = gz._2
1394- let gw = dC(gt, fn, fp, dD, dE, dA)
1395- let gx = ((gv + da) - fn)
1396- let gy = if ((gx >= 0))
1397- then [IntegerEntry((aw + P), gx)]
1475+@Callable(ay)
1476+func capitalizeExPuzzle (aF,gR,gS,fF,dQ,dR,dN) = valueOrElse(aC(), valueOrElse(ax(ay), {
1477+ let bH = getStringValue(this, (N + aF))
1478+ let dn = valueOrElse(getInteger(this, (aF + P)), 0)
1479+ let gY = fE(aF, bH, fF, gS, dn)
1480+ let gU = gY._1
1481+ let fH = gY._2
1482+ let gV = dP(gR, gS, fH, dQ, dR, dN)
1483+ let gW = ((gU + dn) - gS)
1484+ let gX = if ((gW >= 0))
1485+ then [IntegerEntry((aF + P), gW)]
13981486 else nil
1399- (dM(aw, by, gt, gw) ++ gy)
1487+ (dZ(aF, bH, gR, gV) ++ gX)
14001488 }))
14011489
14021490
14031491
1404-@Callable(aq)
1405-func capitalizeExSwopFi (aw,gt,fn,fm,dG,dH,dI,dJ,dK,dL,dA) = valueOrElse(at(), valueOrElse(ap(aq), {
1406- let by = getStringValue(this, (N + aw))
1407- let da = valueOrElse(getInteger(this, (aw + P)), 0)
1408- let gA = fl(aw, by, fm, fn, da)
1409- let gv = gA._1
1410- let fp = gA._2
1411- let gw = dF(gt, fn, fp, dG, dH, dI, dJ, dK, dL, dA)
1412- let gx = ((gv + da) - fn)
1413- let gy = if ((gx >= 0))
1414- then [IntegerEntry((aw + P), gx)]
1492+@Callable(ay)
1493+func capitalizeExSwopFi (aF,gR,gS,fF,dT,dU,dV,dW,dX,dY,dN) = valueOrElse(aC(), valueOrElse(ax(ay), {
1494+ let bH = getStringValue(this, (N + aF))
1495+ let dn = valueOrElse(getInteger(this, (aF + P)), 0)
1496+ let gZ = fE(aF, bH, fF, gS, dn)
1497+ let gU = gZ._1
1498+ let fH = gZ._2
1499+ let gV = dS(gR, gS, fH, dT, dU, dV, dW, dX, dY, dN)
1500+ let gW = ((gU + dn) - gS)
1501+ let gX = if ((gW >= 0))
1502+ then [IntegerEntry((aF + P), gW)]
14151503 else nil
1416- (dM(aw, by, gt, gw) ++ gy)
1504+ (dZ(aF, bH, gR, gV) ++ gX)
14171505 }))
14181506
14191507
14201508
1421-@Callable(aq)
1422-func initNewPool (ax,aG,gB,gC,gD,gE,gF,gG,gH) = valueOrElse(at(), valueOrElse(ap(aq), if (if ((ax != a))
1423- then (ax != b)
1509+@Callable(ay)
1510+func capitalizeNoEx (aF,fF,ha) = valueOrElse(aC(), valueOrElse(ax(ay), {
1511+ let bH = getStringValue(this, (N + aF))
1512+ let hb = fE(aF, bH, fF, ha, 0)
1513+ let gU = hb._1
1514+ let fH = hb._2
1515+ dZ(aF, bH, bp(fH), (gU + ha))
1516+ }))
1517+
1518+
1519+
1520+@Callable(ay)
1521+func initNewPool (aG,aP,hc,hd,he,hf,hg,hh,hi) = valueOrElse(aC(), valueOrElse(az(ay), if (if ((aG != a))
1522+ then (aG != b)
14241523 else false)
14251524 then throw("Wrong type")
14261525 else {
1427- let gI = aU(Address(fromBase58String(aG)), ax)
1428- let aI = gI._1
1429- let aJ = gI._2
1430- let gJ = gI._3
1431- let gK = gI._4
1432- let aS = gI._5
1433- if ((0 > gB))
1526+ let hj = bd(Address(fromBase58String(aP)), aG)
1527+ let aR = hj._1
1528+ let aS = hj._2
1529+ let dd = hj._3
1530+ let de = hj._4
1531+ let bb = hj._5
1532+ if ((0 > hc))
14341533 then throw("inFeeNoLoan must be greater than 0")
1435- else if ((0 > gC))
1534+ else if ((0 > hd))
14361535 then throw("inFeeLoan must be greater than 0")
1437- else if ((0 > gD))
1536+ else if ((0 > he))
14381537 then throw("capFeeNoLoan must be greater than 0")
1439- else if ((0 > gE))
1538+ else if ((0 > hf))
14401539 then throw("capFeeWithLoan must be greater than 0")
1441- else if ((0 > gF))
1540+ else if ((0 > hg))
14421541 then throw("stoplossFeeNoLoan must be greater than 0")
1443- else if ((0 > gG))
1542+ else if ((0 > hh))
14441543 then throw("stoplossFeeWithLoan must be greater than 0")
1445- else [IntegerEntry((aG + F), gB), IntegerEntry((aG + G), gC), IntegerEntry((aG + H), gD), IntegerEntry((aG + I), gE), IntegerEntry((aG + J), gF), IntegerEntry((aG + K), gG), IntegerEntry((aG + C), 0), IntegerEntry((aG + D), 0), StringEntry((N + aG), ax), StringEntry((aS + O), aG), BooleanEntry((aG + E), gH)]
1544+ else [IntegerEntry((aP + F), hc), IntegerEntry((aP + G), hd), IntegerEntry((aP + H), he), IntegerEntry((aP + I), hf), IntegerEntry((aP + J), hg), IntegerEntry((aP + K), hh), IntegerEntry((aP + C), 0), IntegerEntry((aP + D), 0), StringEntry((N + aP), aG), StringEntry((bb + O), aP), BooleanEntry((aP + E), hi)]
14461545 }))
14471546
14481547
14491548
1450-@Callable(aq)
1451-func activate () = valueOrElse(ap(aq), if (valueOrElse(getBoolean(this, S), true))
1549+@Callable(ay)
1550+func updatePoolFees (aP,hc,hd,he,hf,hg,hh) = valueOrElse(aC(), valueOrElse(az(ay), if (!(isDefined(getString(this, (N + aP)))))
1551+ then throw(("Can't find pool with addr " + aP))
1552+ else if ((0 > hc))
1553+ then throw("inFeeNoLoan must be greater than 0")
1554+ else if ((0 > hd))
1555+ then throw("inFeeLoan must be greater than 0")
1556+ else if ((0 > he))
1557+ then throw("capFeeNoLoan must be greater than 0")
1558+ else if ((0 > hf))
1559+ then throw("capFeeWithLoan must be greater than 0")
1560+ else if ((0 > hg))
1561+ then throw("stoplossFeeNoLoan must be greater than 0")
1562+ else if ((0 > hh))
1563+ then throw("stoplossFeeWithLoan must be greater than 0")
1564+ else [IntegerEntry((aP + F), hc), IntegerEntry((aP + G), hd), IntegerEntry((aP + H), he), IntegerEntry((aP + I), hf), IntegerEntry((aP + J), hg), IntegerEntry((aP + K), hh)]))
1565+
1566+
1567+
1568+@Callable(ay)
1569+func activate () = valueOrElse(az(ay), if (valueOrElse(getBoolean(this, S), true))
14521570 then throw("dApp already active")
14531571 else [BooleanEntry(S, true)])
14541572
14551573
14561574
1457-@Callable(aq)
1458-func shutdown () = valueOrElse(ap(aq), if (!(valueOrElse(getBoolean(this, S), true)))
1575+@Callable(ay)
1576+func shutdown () = valueOrElse(az(ay), if (!(valueOrElse(getBoolean(this, S), true)))
14591577 then throw("dApp already shutdown")
14601578 else [BooleanEntry(S, false)])
14611579
14621580
14631581
1464-@Callable(aq)
1465-func activateForUsers () = valueOrElse(ap(aq), if (valueOrElse(getBoolean(this, T), true))
1582+@Callable(ay)
1583+func activateForUsers () = valueOrElse(az(ay), if (valueOrElse(getBoolean(this, T), true))
14661584 then throw("dApp already active for users")
14671585 else [BooleanEntry(T, true)])
14681586
14691587
14701588
1471-@Callable(aq)
1472-func shutdownForUsers () = valueOrElse(ap(aq), if (!(valueOrElse(getBoolean(this, T), true)))
1589+@Callable(ay)
1590+func shutdownForUsers () = valueOrElse(az(ay), if (!(valueOrElse(getBoolean(this, T), true)))
14731591 then throw("dApp already shutdown for users")
14741592 else [BooleanEntry(T, false)])
14751593
14761594
14771595
1478-@Callable(aq)
1479-func activateSF () = valueOrElse(ap(aq), if (valueOrElse(getBoolean(this, (a + U)), true))
1596+@Callable(ay)
1597+func activateSF () = valueOrElse(az(ay), if (valueOrElse(getBoolean(this, (a + U)), true))
14801598 then throw("SWOPFI already active")
14811599 else [BooleanEntry((a + U), true)])
14821600
14831601
14841602
1485-@Callable(aq)
1486-func shutdownSF () = valueOrElse(ap(aq), if (!(valueOrElse(getBoolean(this, (a + U)), true)))
1603+@Callable(ay)
1604+func shutdownSF () = valueOrElse(az(ay), if (!(valueOrElse(getBoolean(this, (a + U)), true)))
14871605 then throw("SWOPFI already shutdown")
14881606 else [BooleanEntry((a + U), false)])
14891607
14901608
14911609
1492-@Callable(aq)
1493-func activateWX () = valueOrElse(ap(aq), if (valueOrElse(getBoolean(this, (b + U)), true))
1610+@Callable(ay)
1611+func activateWX () = valueOrElse(az(ay), if (valueOrElse(getBoolean(this, (b + U)), true))
14941612 then throw("WX already active")
14951613 else [BooleanEntry((b + U), true)])
14961614
14971615
14981616
1499-@Callable(aq)
1500-func shutdownWX () = valueOrElse(ap(aq), if (!(valueOrElse(getBoolean(this, (b + U)), true)))
1617+@Callable(ay)
1618+func shutdownWX () = valueOrElse(az(ay), if (!(valueOrElse(getBoolean(this, (b + U)), true)))
15011619 then throw("WX already shutdown")
15021620 else [BooleanEntry((b + U), false)])
15031621
15041622
15051623
1506-@Callable(aq)
1507-func activatePool (aw) = valueOrElse(ap(aq), if (!(isDefined(getString(this, (N + aw)))))
1624+@Callable(ay)
1625+func activatePool (aF) = valueOrElse(az(ay), if (!(isDefined(getString(this, (N + aF)))))
15081626 then throw("Unknown pool")
1509- else if (valueOrElse(getBoolean(this, (aw + V)), true))
1627+ else if (valueOrElse(getBoolean(this, (aF + V)), true))
15101628 then throw("Pool already active")
1511- else [BooleanEntry((aw + V), true)])
1629+ else [BooleanEntry((aF + V), true)])
15121630
15131631
15141632
1515-@Callable(aq)
1516-func shutdownPool (aw) = valueOrElse(ap(aq), if (!(isDefined(getString(this, (N + aw)))))
1633+@Callable(ay)
1634+func shutdownPool (aF) = valueOrElse(az(ay), if (!(isDefined(getString(this, (N + aF)))))
15171635 then throw("Unknown pool")
1518- else if (!(valueOrElse(getBoolean(this, (aw + V)), true)))
1636+ else if (!(valueOrElse(getBoolean(this, (aF + V)), true)))
15191637 then throw("Pool already shutdown")
1520- else [BooleanEntry((aw + V), false)])
1638+ else [BooleanEntry((aF + V), false)])
15211639
1522-
1523-@Verifier(gL)
1524-func gM () = sigVerify(gL.bodyBytes, gL.proofs[0], gL.senderPublicKey)
15251640

github/deemru/w8io/169f3d6 
577.60 ms