tx · GYdffmNVVoYBErKVNcB3yS4uoSchwfGouQ9cwuaPd5QD

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.22000000 Waves

2023.04.18 11:23 [2539748] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "GYdffmNVVoYBErKVNcB3yS4uoSchwfGouQ9cwuaPd5QD", "fee": 22000000, "feeAssetId": null, "timestamp": 1681806217590, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "2QzqamZPg3mRoXAtTrd5YX97ccqZ2JtyYQXhCMXGwBH9YAfVwQKxsbsFqrF1LxY6EL97EZRvSjibewmBFhkQEQ32" ], "script": "base64:BgJYCAISCAoGCAgBAQEIEgUKAwgBCBIDCgEIEgQKAggBEgMKAQgSDgoMCAgIAQQRGBgRAQEYEgoKCAgICAEECAEYEg4KDAgICAEEGBgYGBgBGBIHCgUICAEBAUEAB1NGX1BPT0wCAlNGAAdXWF9QT09MAgJXWAAHQ0FQX0ZFRQIDY2FwAAhMT0FOX0ZFRQIEbG9hbgALTk9fTE9BTl9GRUUCBm5vTG9hbgAGU0NBTEU4AIDC1y8AB1NDQUxFMTAAgMivoCUACkZFRV9TQ0FMRTYAwIQ9ABRrU0ZQb29sQUFzc2V0QmFsYW5jZQIPQV9hc3NldF9iYWxhbmNlABRrU0ZQb29sQkFzc2V0QmFsYW5jZQIPQl9hc3NldF9iYWxhbmNlAA9rU0ZQb29sQUFzc2V0SWQCCkFfYXNzZXRfaWQAD2tTRlBvb2xCQXNzZXRJZAIKQl9hc3NldF9pZAAOa1NGUG9vbFNoYXJlSWQCDnNoYXJlX2Fzc2V0X2lkAAprU0ZQb29sRmVlAgpjb21taXNzaW9uAA1rVXNlclBvc2l0aW9uAg5fdXNlcl9wb3NpdGlvbgARa1VzZXJCb3Jyb3dBbW91bnQCHF91c2VyX3Bvc2l0aW9uX2JvcnJvd19hbW91bnQAEmtVc2VyQm9ycm93QXNzZXRJZAIeX3VzZXJfcG9zaXRpb25fYm9ycm93X2Fzc2V0X2lkABBrVXNlclBvc2l0aW9uTnVtAhVfdXNlcl9wb3NpdGlvbl9udW1iZXIAFWtVc2VyUG9zaXRpb25JbnRlcmVzdAIXX3VzZXJfcG9zaXRpb25faW50ZXJlc3QACmtQb29sVG90YWwCC19wb29sX3RvdGFsAA1rUG9vbEludGVyZXN0Ag5fcG9vbF9pbnRlcmVzdAAVa0F4bHlJbkZlZVdpdGhvdXRMb2FuAhZfYXhseV9mZWVfd2l0aG91dF9sb2FuABJrQXhseUluRmVlV2l0aExvYW4CE19heGx5X2ZlZV93aXRoX2xvYW4AC2tBeGx5Q2FwRmVlAg1fYXhseV9mZWVfY2FwAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ADmtQb29sQ2FwQ2hhbmdlAhBfcG9vbF9jYXBfY2hhbmdlAAlrTW9uZXlCb3gCDmF4bHlfbW9uZXlfYm94AA5rU0ZGYXJtaW5nQWRkcgITc3dvcGZpX2Zhcm1pbmdfYWRkcgAMa0xlbmRTZXJ2aWNlAhFsZW5kX3NlcnZpY2VfYWRkcgAMa1ByaWNlT3JhY2xlAgxwcmljZV9vcmFjbGUAC2tFeENvbnRyYWN0AhFleGNoYW5nZV9jb250cmFjdAAPa1d4U3dhcENvbnRyYWN0AhB3eF9zd2FwX2NvbnRyYWN0AAhtb25leUJveAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQlrTW9uZXlCb3gCGE5vIGF4bHkgbW9uZXlCb3ggYWRkcmVzcwAKZXhDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQtrRXhDb250cmFjdAIcTm8gZXhjaGFuZ2UgY29udHJhY3QgYWRkcmVzcwAPcHJpY2VPcmFjbGVBZGRyCQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFDGtQcmljZU9yYWNsZQIXTm8gcHJpY2Ugb3JhY2xlIGFkZHJlc3MADnd4U3dhcENvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFD2tXeFN3YXBDb250cmFjdAISTm8gd3ggc3dhcCBhZGRyZXNzAAZTV09QSUQBIDQBE1aOYEbiflupuAFHguexACYSm3bkTkuioHycbe6BAARXWElEASDGUh6BTupu4zzAl7AOXyzyauntnbKG0ZpCeKhgfT4bsQEKaXNTZWxmQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIFBHRoaXMFBHVuaXQJAAIBAitPbmx5IGNvbnRyYWN0IGl0c2VsZiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQ5hY2NvdW50QmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA8AcCBQR0aGlzBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAAIBAgtNYXRjaCBlcnJvcgENZ2V0U0ZQb29sRGF0YQEIcG9vbEFkZHIJAJcKBQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQUFzc2V0SWQCGUNhbid0IGdldCBwb29sIEEgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUPa1NGUG9vbEJBc3NldElkAhlDYW4ndCBnZXQgcG9vbCBCIGFzc2V0IGlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xBQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEJBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEIgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ5rU0ZQb29sU2hhcmVJZAIYQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IGlkAQ1nZXRXWFBvb2xEYXRhAQhwb29sQWRkcgQDY2ZnCgABQAkA/AcEBQhwb29sQWRkcgIcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFA2NmZwUDY2ZnCQCXCgUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAQDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhlDYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAFAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAAAAAAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAMDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhpDYW4ndCBnZXQgcG9vbCBMUCBhc3NldCBpZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgELZ2V0UG9vbERhdGECCHBvb2xBZGRyBHR5cGUDCQAAAgUEdHlwZQUHU0ZfUE9PTAkBDWdldFNGUG9vbERhdGEBBQhwb29sQWRkcgMJAAACBQR0eXBlBQdXWF9QT09MCQENZ2V0V1hQb29sRGF0YQEFCHBvb2xBZGRyCQACAQIPV3JvbmcgcG9vbCB0eXBlARFnZXRQb29sVG90YWxTaGFyZQEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFCmtQb29sVG90YWwAAAEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAgRwb29sBHVzZXIJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0AAAABAQpnZXRBeGx5RmVlAgRwb29sB2ZlZVR5cGUDCQAAAgUHZmVlVHlwZQIDY2FwCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFC2tBeGx5Q2FwRmVlAwkAAAIFB2ZlZVR5cGUCBGxvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUSa0F4bHlJbkZlZVdpdGhMb2FuAwkAAAIFB2ZlZVR5cGUCBm5vTG9hbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRVrQXhseUluRmVlV2l0aG91dExvYW4JAAIBAg5Xcm9uZyBmZWUgdHlwZQEQZ2V0U0ZGYXJtaW5nQWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUOa1NGRmFybWluZ0FkZHICHUNhbid0IGdldCBzd29wZmkgZmFybWluZyBhZGRyARBnZXRXWEZhcm1pbmdBZGRyAQhwb29sQWRkcgQJZkNvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyAhMlc19fZmFjdG9yeUNvbnRyYWN0AiJDYW4ndCBnZXQgV1ggZmFjdG9yeSBjb250cmFjdCBhZGRyBApmYWN0cm95Q2ZnCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQlmQ29udHJhY3QCESVzX19mYWN0b3J5Q29uZmlnAhhDYW4ndCBnZXQgV1ggZmFjdG9yeSBjZmcCAl9fCQEHQWRkcmVzcwEJANkEAQkAkQMCBQpmYWN0cm95Q2ZnAAEBDmdldExlbmRTcnZBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrTGVuZFNlcnZpY2UCG0Nhbid0IGdldCBsZW5kIHNlcnZpY2UgYWRkcgEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yAQ5hc3NldElkRnJvbVN0cgEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARBnZXRBc3NldERlY2ltYWxzAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTAAgEByRtYXRjaDAJAOwHAQkA2QQBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CGRlY2ltYWxzCQACAQIQQ2FuJ3QgZmluZCBhc3NldAEPcmVwbGVuaXNoU3dvcEZpCQRwb29sB2ZlZVR5cGUEcG10QQlwbXRBc3NldEEEcG10QglwbXRBc3NldEIEYmFsQQRiYWxCB3NoYXJlSWQEEnNoYXJlQmFsYW5jZUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQdzaGFyZUlkAwkAAAIFEnNoYXJlQmFsYW5jZUJlZm9yZQUSc2hhcmVCYWxhbmNlQmVmb3JlBAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBnJhdGlvQQkAawMFBlNDQUxFOAUEcG10QQUEYmFsQQQGcmF0aW9CCQBrAwUGU0NBTEU4BQRwbXRCBQRiYWxCBAskdDA2Mzk3NjY4OQMJAGYCBQZyYXRpb0IFBnJhdGlvQQQDcG10CQBuBAUEYmFsQgUGcmF0aW9BBQZTQ0FMRTgFB0NFSUxJTkcJAJYKBAUEcG10QQUDcG10CQBlAgUEcG10QgUDcG10BQlwbXRBc3NldEIEA3BtdAkAbgQFBGJhbEEFBnJhdGlvQgUGU0NBTEU4BQdDRUlMSU5HCQCWCgQFA3BtdAUEcG10QgkAZQIFBHBtdEEFA3BtdAUJcG10QXNzZXRBBApwbXRBbW91bnRBCAULJHQwNjM5NzY2ODkCXzEECnBtdEFtb3VudEIIBQskdDA2Mzk3NjY4OQJfMgQGY2hhbmdlCAULJHQwNjM5NzY2ODkCXzMEDWNoYW5nZUFzc2V0SWQIBQskdDA2Mzk3NjY4OQJfNAQEaW52MQMDCQBmAgUKcG10QW1vdW50QQAACQBmAgUKcG10QW1vdW50QgAABwQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QQUKcG10QW1vdW50QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUJcG10QXNzZXRCBQpwbXRBbW91bnRCBQNuaWwJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzAAADCQAAAgUEaW52MQUEaW52MQQEaW52MgMJAGYCBQZjaGFuZ2UAAAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFDWNoYW5nZUFzc2V0SWQFBmNoYW5nZQUDbmlsBAR2YXJzCQDMCAICATAJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsCQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIVcmVwbGVuaXNoV2l0aE9uZVRva2VuCQDMCAIFBHZhcnMFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYyBQRpbnYyBBFzaGFyZUJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQdzaGFyZUlkBAt0b3RhbFN0YWtlZAkAZQIFEXNoYXJlQmFsYW5jZUFmdGVyBRJzaGFyZUJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBARpbnYzCQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIPbG9ja1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAURdXNlclNoYXJlRm9yU3Rha2UFA25pbAMJAAACBQRpbnYzBQRpbnYzCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQtyZXBsZW5pc2hXWAcEcG9vbAdmZWVUeXBlBHBtdEEJcG10QXNzZXRBBHBtdEIJcG10QXNzZXRCB3NoYXJlSWQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQLJHQwODE0MDg5ODkDAwkAZgIFBHBtdEEAAAkAZgIFBHBtdEIAAAcECmV2YWxQdXRJbkEJALUJAgoAAUAJAPwHBAUIcG9vbEFkZHICIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZCQDMCAIFBHBtdEEFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUKZXZhbFB1dEluQQUKZXZhbFB1dEluQQQKZXZhbFB1dEluQgkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgIfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQkAzAgCBQRwbXRCBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fAwkAAAIFCmV2YWxQdXRJbkIFCmV2YWxQdXRJbkIEBWxwSW5BCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQABBAVscEluQgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkIAAQMJAGYCBQVscEluQgUFbHBJbkEEBnBtdEluQgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkEACAkAlgoEBQRwbXRBBQZwbXRJbkIJAGUCBQRwbXRCBQZwbXRJbkIFCXBtdEFzc2V0QgQGcG10SW5BCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgAHCQCWCgQFBnBtdEluQQUEcG10QgkAZQIFBHBtdEEFBnBtdEluQQUJcG10QXNzZXRBCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAZgIFBHBtdEEAAAkAlgoEBQRwbXRBBQRwbXRCBQRwbXRBBQlwbXRBc3NldEEDCQBmAgUEcG10QgAACQCWCgQFBHBtdEEFBHBtdEIFBHBtdEIFCXBtdEFzc2V0QgkAAgECEHBtdHMgbXVzdCBiZSA+IDAECnBtdEFtb3VudEEIBQskdDA4MTQwODk4OQJfMQQKcG10QW1vdW50QggFCyR0MDgxNDA4OTg5Al8yBAZjaGFuZ2UIBQskdDA4MTQwODk4OQJfMwQNY2hhbmdlQXNzZXRJZAgFCyR0MDgxNDA4OTg5Al80BBJzaGFyZUJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUHc2hhcmVJZAMJAAACBRJzaGFyZUJhbGFuY2VCZWZvcmUFEnNoYXJlQmFsYW5jZUJlZm9yZQQEaW52MQMDCQBmAgUKcG10QW1vdW50QQAACQBmAgUKcG10QW1vdW50QgAABwQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QQUKcG10QW1vdW50QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUJcG10QXNzZXRCBQpwbXRBbW91bnRCBQNuaWwJAPwHBAUIcG9vbEFkZHICA3B1dAkAzAgCAMCEPQkAzAgCBwUDbmlsBQhwYXltZW50cwAAAwkAAAIFBGludjEFBGludjEEBGludjIDCQBmAgUGY2hhbmdlAAAECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQ1jaGFuZ2VBc3NldElkBQZjaGFuZ2UFA25pbAkA/AcEBQhwb29sQWRkcgIJcHV0T25lVGtuCQDMCAIAAAkAzAgCBwUDbmlsBQhwYXltZW50cwAAAwkAAAIFBGludjIFBGludjIEEXNoYXJlQmFsYW5jZUFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQEC3RvdGFsU3Rha2VkCQBlAgURc2hhcmVCYWxhbmNlQWZ0ZXIFEnNoYXJlQmFsYW5jZUJlZm9yZQQNYXhseUZlZUFtb3VudAkAawMFC3RvdGFsU3Rha2VkCQEKZ2V0QXhseUZlZQIFBHBvb2wFB2ZlZVR5cGUFCkZFRV9TQ0FMRTYEEXVzZXJTaGFyZUZvclN0YWtlCQBlAgULdG90YWxTdGFrZWQFDWF4bHlGZWVBbW91bnQDCQBnAgAABRF1c2VyU2hhcmVGb3JTdGFrZQkAAgECKGFtb3VudCBvZiBzdGFrZWQgc2hhcmV0b2tlbnMgbXVzdCBiZSA+IDAEBGludjMJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBBQhwb29sQWRkcgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQdzaGFyZUlkBRF1c2VyU2hhcmVGb3JTdGFrZQUDbmlsAwkAAAIFBGludjMFBGludjMJAJQKAgURdXNlclNoYXJlRm9yU3Rha2UFDWF4bHlGZWVBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BEHJlcGxlbmlzaEVudHJpZXMHBHBvb2wEdXNlcgxzdGFrZWRBbW91bnQNYXhseUZlZUFtb3VudAZwb3NOdW0Hc2hhcmVJZAR0eXBlBAt0b3RhbEFtb3VudAkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQPY3VyUG9vbEludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFDWtQb29sSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZAIFC3RvdGFsQW1vdW50BQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUNa1VzZXJQb3NpdGlvbgUMc3Rha2VkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FFWtVc2VyUG9zaXRpb25JbnRlcmVzdAUPY3VyUG9vbEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtBQZwb3NOdW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gFDWF4bHlGZWVBbW91bnQJANkEAQUHc2hhcmVJZAUDbmlsAQtjbGFpbUZhcm1lZAIEdHlwZQRwb29sAwkAAAIFBHR5cGUFB1NGX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAgVjbGFpbQkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBlNXT1BJRAkAlAoCCQBlAgUIYmFsQWZ0ZXIFCWJhbEJlZm9yZQUGU1dPUElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBHR5cGUFB1dYX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUEV1hJRAMJAAACBQliYWxCZWZvcmUFCWJhbEJlZm9yZQQDaW52CQD8BwQJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB2NsYWltV1gJAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYECGJhbEFmdGVyCQEOYWNjb3VudEJhbGFuY2UBBQRXWElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQRXWElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIPV3JvbmcgcG9vbCB0eXBlAQ5leGNoYW5nZUtlZXBlcgoHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJYW1vdW50c0luCWFkZHJlc3Nlcw9hc3NldHNUb1JlY2VpdmULZXN0UmVjZWl2ZWQRc2xpcHBhZ2VUb2xlcmFuY2ULbWluUmVjZWl2ZWQHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIEc3dhcAkAzAgCBQlhbW91bnRzSW4JAMwIAgUJYWRkcmVzc2VzCQDMCAIFD2Fzc2V0c1RvUmVjZWl2ZQkAzAgCBQtlc3RSZWNlaXZlZAkAzAgCBRFzbGlwcGFnZVRvbGVyYW5jZQkAzAgCBQttaW5SZWNlaXZlZAkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOZXhjaGFuZ2VQYXp6bGUGB3RvVG9rZW4JcG10QW1vdW50CHBtdEFzc2V0CXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIKcHV6emxlU3dhcAkAzAgCBQlyb3V0ZXNTdHIJAMwIAgUMbWluVG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVN3b3BGaQoHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQKZXhjaGFuZ2Vycw5leGNoYW5nZXJzVHlwZQVhcmdzMQVhcmdzMhFyb3V0aW5nQXNzZXRzS2V5cxJtaW5BbW91bnRUb1JlY2VpdmUHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIKc3dvcGZpU3dhcAkAzAgCBQpleGNoYW5nZXJzCQDMCAIFDmV4Y2hhbmdlcnNUeXBlCQDMCAIFBWFyZ3MxCQDMCAIFBWFyZ3MyCQDMCAIFEXJvdXRpbmdBc3NldHNLZXlzCQDMCAIFEm1pbkFtb3VudFRvUmVjZWl2ZQkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEKY2FwaXRhbGl6ZQQEcG9vbAR0eXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMTMxOTAxMzI2OAkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBHR5cGUEA0FJZAgFDSR0MDEzMTkwMTMyNjgCXzEEA0JJZAgFDSR0MDEzMTkwMTMyNjgCXzIEBGJhbEEIBQ0kdDAxMzE5MDEzMjY4Al8zBARiYWxCCAUNJHQwMTMxOTAxMzI2OAJfNAQHc2hhcmVJZAgFDSR0MDEzMTkwMTMyNjgCXzUEDSR0MDEzMjcxMTMzNTEDCQAAAgUHdG9rZW5JZAUDQUlkCQCUCgIFC3Rva2VuQW1vdW50AAAJAJQKAgAABQt0b2tlbkFtb3VudAQEcG10QQgFDSR0MDEzMjcxMTMzNTECXzEEBHBtdEIIBQ0kdDAxMzI3MTEzMzUxAl8yBA0kdDAxMzM1NDEzNzE1AwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ9yZXBsZW5pc2hTd29wRmkJBQRwb29sBQdDQVBfRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAkBC3JlcGxlbmlzaFdYBwUEcG9vbAUHQ0FQX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFB3NoYXJlSWQEDHN0YWtlZEFtb3VudAgFDSR0MDEzMzU0MTM3MTUCXzEEB2F4bHlGZWUIBQ0kdDAxMzM1NDEzNzE1Al8yBA9jdXJQb29sSW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ1rUG9vbEludGVyZXN0AAAEEHRvdGFsU2hhcmVBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wEC25ld0ludGVyZXN0CQBkAgUPY3VyUG9vbEludGVyZXN0CQBrAwUMc3Rha2VkQW1vdW50BQdTQ0FMRTEwBRB0b3RhbFNoYXJlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDWtQb29sSW50ZXJlc3QFC25ld0ludGVyZXN0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94BQdheGx5RmVlCQDZBAEFB3NoYXJlSWQFA25pbAESZXhjaGFuZ2VEaXJlY3RseVNGBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAlmZWVTY2FsZTYAwIQ9BANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCHBvb2xBZGRyBQprU0ZQb29sRmVlBAxhbW50R2V0Tm9GZWUJAGsDBRBhbW91bnRUb2tlblRvR2V0BQlmZWVTY2FsZTYJAGUCBQlmZWVTY2FsZTYFA2ZlZQQNJHQwMTQ0MDgxNDY5NgMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFBGJhbEEFDGFtbnRHZXROb0ZlZQkAZQIFBGJhbEIFDGFtbnRHZXROb0ZlZQkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUMYW1udEdldE5vRmVlCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAxNDQwODE0Njk2Al8xBAphc3NldFRvUGF5CAUNJHQwMTQ0MDgxNDY5NgJfMgkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCGV4Y2hhbmdlCQDMCAICATEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQULYW1vdW50VG9QYXkFA25pbAESZXhjaGFuZ2VEaXJlY3RseVdYBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAVwckZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCDyVzX19wcm90b2NvbEZlZQQEcEZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUOd3hTd2FwQ29udHJhY3QCCyVzX19wb29sRmVlBAhmZWVTY2FsZQkAtgIBAIDC1y8EDSR0MDE1MTczMTU0ODEDCQAAAgUPYXNzZXRUb2tlblRvR2V0BQhhc3NldElkQQQLYW1vdW50VG9QYXkJAGsDBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQBlAgUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAZQIFBGJhbEEFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDE1MTczMTU0ODECXzEECmFzc2V0VG9QYXkIBQ0kdDAxNTE3MzE1NDgxAl8yBBJhbW91bnRUb1BheVdpdGhGZWUJAKADAQkAvAIDCQC2AgEFC2Ftb3VudFRvUGF5BQhmZWVTY2FsZQkAuAICBQhmZWVTY2FsZQkAtgIBCQBkAgUFcHJGZWUFBHBGZWUJAPwHBAUOd3hTd2FwQ29udHJhY3QCBHN3YXAJAMwIAgABCQDMCAIFD2Fzc2V0VG9rZW5Ub0dldAkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQUSYW1vdW50VG9QYXlXaXRoRmVlBQNuaWwBEGV4Y2hhbmdlRGlyZWN0bHkIBHR5cGUEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAkBEmV4Y2hhbmdlRGlyZWN0bHlTRgcFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAUPYXNzZXRUb2tlblRvR2V0CQESZXhjaGFuZ2VEaXJlY3RseVdYBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQJAWkBEXJlcGxlbmlzaFJFQURPTkxZBgR1c2VyBHBvb2wEcG10QQRwbXRCCGxldmVyYWdlDWJvcnJvd0Fzc2V0SWQDAwkAZgIAZAUIbGV2ZXJhZ2UGCQBmAgUIbGV2ZXJhZ2UArAIJAAIBAh9MZXZlcmFnZSBjYW4ndCBiZSA8MTAwIGFuZCA+MzAwBAR0eXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAxNjQ2MTE2NTUwCQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUEdHlwZQQDQUlkCAUNJHQwMTY0NjExNjU1MAJfMQQDQklkCAUNJHQwMTY0NjExNjU1MAJfMgQEYmFsQQgFDSR0MDE2NDYxMTY1NTACXzMEBGJhbEIIBQ0kdDAxNjQ2MTE2NTUwAl80BAdzaGFyZUlkCAUNJHQwMTY0NjExNjU1MAJfNQQNJHQwMTY1NTYxNzIzMAMJAGYCBQhsZXZlcmFnZQBkBAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUDQUlkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMQQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFA0JJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzEEDHBheWRJbkRvbGxhcgkAZAIJAGsDBQdkUHJpY2VBBQRwbXRBCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDQUlkAAAAAAUERE9XTgkAawMFB2RQcmljZUIFBHBtdEIJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNCSWQAAAAABQRET1dOBAxib3Jyb3dBbW91bnQJAGsDBQxwYXlkSW5Eb2xsYXIJAGUCBQhsZXZlcmFnZQBkAGQDCQAAAgUNYm9ycm93QXNzZXRJZAUDQUlkCQCVCgMJAGQCBQRwbXRBBQxib3Jyb3dBbW91bnQFBHBtdEIFCExPQU5fRkVFCQCVCgMFBHBtdEEJAGQCBQRwbXRCBQxib3Jyb3dBbW91bnQFCExPQU5fRkVFCQCVCgMFBHBtdEEFBHBtdEIFC05PX0xPQU5fRkVFBAhwYXltZW50QQgFDSR0MDE2NTU2MTcyMzACXzEECHBheW1lbnRCCAUNJHQwMTY1NTYxNzIzMAJfMgQDZmVlCAUNJHQwMTY1NTYxNzIzMAJfMwQNJHQwMTcyMzMxNzU5NQMJAAACBQR0eXBlBQdTRl9QT09MCQEPcmVwbGVuaXNoU3dvcEZpCQUEcG9vbAUDZmVlBQhwYXltZW50QQUDQUlkBQhwYXltZW50QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkCQELcmVwbGVuaXNoV1gHBQRwb29sBQNmZWUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMTcyMzMxNzU5NQJfMQQHYXhseUZlZQgFDSR0MDE3MjMzMTc1OTUCXzIJAJQKAgUDbmlsBQp1c2VyU3Rha2VkAWkBCXJlcGxlbmlzaAMEcG9vbAhsZXZlcmFnZQ1ib3Jyb3dBc3NldElkAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQEdHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQNJHQwMTc5MjMxODAxMgkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBHR5cGUEA0FJZAgFDSR0MDE3OTIzMTgwMTICXzEEA0JJZAgFDSR0MDE3OTIzMTgwMTICXzIEBGJhbEEIBQ0kdDAxNzkyMzE4MDEyAl8zBARiYWxCCAUNJHQwMTc5MjMxODAxMgJfNAQHc2hhcmVJZAgFDSR0MDE3OTIzMTgwMTICXzUEDSR0MDE4MDE1MTg2NTIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQUlkCQACAQIVV3JvbmcgcGF5bWVudCBhc3NldCBBAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAUDQklkCQACAQIVV3JvbmcgcGF5bWVudCBhc3NldCBCCQCWCgQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNBSWQICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQNCSWQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0FJZAkAlgoECAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDQUlkAAAFA0JJZAMJAAACCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNCSWQJAJYKBAAABQNBSWQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNCSWQJAAIBAg1Xcm9uZyBwYXltZW50CQACAQIcT25lIG9yIHR3byBwYXltZW50cyBleHBlY3RlZAQEcG10QQgFDSR0MDE4MDE1MTg2NTICXzEECXBtdEFzc2V0QQgFDSR0MDE4MDE1MTg2NTICXzIEBHBtdEIIBQ0kdDAxODAxNTE4NjUyAl8zBAlwbXRBc3NldEIIBQ0kdDAxODAxNTE4NjUyAl80BAluZXdQb3NOdW0JARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXICBQRwb29sCQClCAEIBQFpBmNhbGxlcgMJAGYCBQhsZXZlcmFnZQBkBAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUJcG10QXNzZXRBCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMQQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFCXBtdEFzc2V0QgkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzEEDHBheWRJbkRvbGxhcgkAZAIJAGsDBQdkUHJpY2VBBQRwbXRBCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUJcG10QXNzZXRBAAAAAAUERE9XTgkAawMFB2RQcmljZUIFBHBtdEIJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQlwbXRBc3NldEIAAAAABQRET1dOBAxib3Jyb3dBbW91bnQJAGsDBQxwYXlkSW5Eb2xsYXIJAGUCBQhsZXZlcmFnZQBkAGQEB3JlcXVlc3QJALkJAgkAzAgCBQR0eXBlCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFBHBvb2wJAMwIAgkApAMBBQRwbXRBCQDMCAIFCXBtdEFzc2V0QQkAzAgCCQCkAwEFBHBtdEIJAMwIAgUJcG10QXNzZXRCCQDMCAIJAKQDAQUEYmFsQQkAzAgCCQCkAwEFBGJhbEIJAMwIAgUHc2hhcmVJZAkAzAgCBQ1ib3Jyb3dBc3NldElkCQDMCAIJAKQDAQUMYm9ycm93QW1vdW50CQDMCAIJAKQDAQUJbmV3UG9zTnVtBQNuaWwCASwEDG5ld1JlcXVlc3RJZAoAAUAJAPwHBAUEdGhpcwIQY3JlYXRlTmV3UmVxdWVzdAkAzAgCBQdyZXF1ZXN0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUMbmV3UmVxdWVzdElkBQxuZXdSZXF1ZXN0SWQEBGFyZ3MJAMwIAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFCW5ld1Bvc051bQkAzAgCBQdzaGFyZUlkCQDMCAIFDWJvcnJvd0Fzc2V0SWQJAMwIAgUMYm9ycm93QW1vdW50CQDMCAIJAKUIAQUEdGhpcwkAzAgCAhFyZXBsZW5pc2hGcm9tTGFuZAkAzAgCCQCkAwEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUMbmV3UmVxdWVzdElkAhhDYW4ndCBjcmVhdGUgbmV3IHJlcXVlc3QFA25pbAQDaW52CQD9BwQJAQ5nZXRMZW5kU3J2QWRkcgACDWZsYXNoUG9zaXRpb24FBGFyZ3MFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAxOTk5MzIwMzg0AwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ9yZXBsZW5pc2hTd29wRmkJBQRwb29sBQtOT19MT0FOX0ZFRQUEcG10QQUJcG10QXNzZXRBBQRwbXRCBQlwbXRBc3NldEIFBGJhbEEFBGJhbEIFB3NoYXJlSWQJAQtyZXBsZW5pc2hXWAcFBHBvb2wFC05PX0xPQU5fRkVFBQRwbXRBBQlwbXRBc3NldEEFBHBtdEIFCXBtdEFzc2V0QgUHc2hhcmVJZAQKdXNlclN0YWtlZAgFDSR0MDE5OTkzMjAzODQCXzEEB2F4bHlGZWUIBQ0kdDAxOTk5MzIwMzg0Al8yCQEQcmVwbGVuaXNoRW50cmllcwcFBHBvb2wJAKUIAQgFAWkGY2FsbGVyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQluZXdQb3NOdW0FB3NoYXJlSWQFBHR5cGUBaQERcmVwbGVuaXNoRnJvbUxhbmQBCXJlcXVlc3RJZAQHcmVxdWVzdAkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQlyZXF1ZXN0SWQFCmtSZXF1ZXN0SWQJAKwCAgITTm8gcmVxdWVzdCB3aXRoIGlkIAUJcmVxdWVzdElkAgEsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQISV3JvbmcgcGF5bWVudCBzaXplAwMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAJEDAgUHcmVxdWVzdAAKBgkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAsJAAIBAg1Xcm9uZyBwYXltZW50BARwbXRBAwkAAAIJAJEDAgUHcmVxdWVzdAAECQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QAAwgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAMEBHBtdEIDCQAAAgkAkQMCBQdyZXF1ZXN0AAYJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAFCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QAAwQEcG9vbAkAkQMCBQdyZXF1ZXN0AAIEBHVzZXIJAJEDAgUHcmVxdWVzdAABBAdzaGFyZUlkCQCRAwIFB3JlcXVlc3QACQQGcG9zTnVtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAMBA0kdDAyMTM0MjIxODU3AwkAAAIJAJEDAgUHcmVxdWVzdAAABQdTRl9QT09MCQEPcmVwbGVuaXNoU3dvcEZpCQUEcG9vbAUITE9BTl9GRUUFBHBtdEEJAJEDAgUHcmVxdWVzdAAEBQRwbXRCCQCRAwIFB3JlcXVlc3QABgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QABwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3JlcXVlc3QACAUHc2hhcmVJZAMJAAACCQCRAwIFB3JlcXVlc3QAAAUHV1hfUE9PTAkBC3JlcGxlbmlzaFdYBwUEcG9vbAUITE9BTl9GRUUFBHBtdEEJAJEDAgUHcmVxdWVzdAAEBQRwbXRCCQCRAwIFB3JlcXVlc3QABgUHc2hhcmVJZAkAAgECEldyb25nIHJlcXVlc3QgdHlwZQQKdXNlclN0YWtlZAgFDSR0MDIxMzQyMjE4NTcCXzEEB2F4bHlGZWUIBQ0kdDAyMTM0MjIxODU3Al8yBA1ib3Jyb3dFbnRyaWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQdyZXF1ZXN0AAICAV8JAJEDAgUHcmVxdWVzdAABAgFfCQCRAwIFB3JlcXVlc3QADAURa1VzZXJCb3Jyb3dBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFB3JlcXVlc3QAAgIBXwkAkQMCBQdyZXF1ZXN0AAECAV8JAJEDAgUHcmVxdWVzdAAMBRJrVXNlckJvcnJvd0Fzc2V0SWQJAJEDAgUHcmVxdWVzdAAKBQNuaWwEB2VudHJpZXMJARByZXBsZW5pc2hFbnRyaWVzBwUEcG9vbAUEdXNlcgUKdXNlclN0YWtlZAUHYXhseUZlZQUGcG9zTnVtBQdzaGFyZUlkCQCRAwIFB3JlcXVlc3QAAAkAlAoCCQDNCAIJAM4IAgUHZW50cmllcwUNYm9ycm93RW50cmllcwkBC0RlbGV0ZUVudHJ5AQkArAICBQlyZXF1ZXN0SWQFCmtSZXF1ZXN0SWQFCnVzZXJTdGFrZWQBaQEId2l0aGRyYXcCBHBvb2wFcG9zSWQEBHVzZXIJAKUIAQgFAWkGY2FsbGVyBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCDFVua25vd24gcG9vbAQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBXBvc0lkBQ1rVXNlclBvc2l0aW9uAhBVbmtub3duIHBvc2l0aW9uBAx1c2VySW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QEC3Bvb2xJbnRlcnN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFDWtQb29sSW50ZXJlc3QEDnBvb2xUb3RhbFNoYXJlCQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBA91c2VyQ2FuV2l0aGRyYXcJAGQCBQdwQW1vdW50CQBrAwUHcEFtb3VudAkAZQIFC3Bvb2xJbnRlcnN0BQx1c2VySW50ZXJlc3QFB1NDQUxFMTAECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQIdXNlckFkZHIJAQdBZGRyZXNzAQkA2QQBBQR1c2VyBAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBXBvc0lkBRJrVXNlckJvcnJvd0Fzc2V0SWQEDSR0MDIzMjAzMjMzMDMJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQIYXNzZXRJZEEIBQ0kdDAyMzIwMzIzMzAzAl8xBAhhc3NldElkQggFDSR0MDIzMjAzMjMzMDMCXzIEBGJhbEEIBQ0kdDAyMzIwMzIzMzAzAl8zBARiYWxCCAUNJHQwMjMyMDMyMzMwMwJfNAQHc2hhcmVJZAgFDSR0MDIzMjAzMjMzMDMCXzUEC2NCYWxBQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQMJAAACBQtjQmFsQUJlZm9yZQULY0JhbEFCZWZvcmUEC2NCYWxCQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgMJAAACBQtjQmFsQkJlZm9yZQULY0JhbEJCZWZvcmUEA2ludgMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsBQNuaWwDCQAAAgUFcFR5cGUFB1dYX1BPT0wJAPwHBAUIcG9vbEFkZHICDXVuc3Rha2VBbmRHZXQJAMwIAgUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAkAAgECE1dyb25nIHBvc2l0aW9uIHR5cGUDCQAAAgUDaW52BQNpbnYECmNCYWxBQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBApjQmFsQkFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgQNJHQwMjM4MTUyMzkwNAkAlAoCCQBlAgUKY0JhbEFBZnRlcgULY0JhbEFCZWZvcmUJAGUCBQpjQmFsQkFmdGVyBQtjQmFsQkJlZm9yZQQNdG9rZW5zQW1vdW50QQgFDSR0MDIzODE1MjM5MDQCXzEEDXRva2Vuc0Ftb3VudEIIBQ0kdDAyMzgxNTIzOTA0Al8yBA0kdDAyMzkwNzI0OTAyAwkAZgIFDGJvcnJvd0Ftb3VudAAABARkZWJ0CgABQAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAgxnZXRBc3NldERlYnQJAMwIAgcJAMwIAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBXBvc0lkCQDMCAIFC2JvcnJvd0Fzc2V0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQEDWFtb3VudFRvR2V0RXgDAwkAAAIFC2JvcnJvd0Fzc2V0BQhhc3NldElkQQkAZgIFBGRlYnQFDXRva2Vuc0Ftb3VudEEHCQBlAgUEZGVidAUNdG9rZW5zQW1vdW50QQMDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRCCQBmAgUEZGVidAUNdG9rZW5zQW1vdW50QgcJAGUCBQRkZWJ0BQ10b2tlbnNBbW91bnRCAAAEBWV4SW52AwkAZgIFDWFtb3VudFRvR2V0RXgAAAkBEGV4Y2hhbmdlRGlyZWN0bHkIBQVwVHlwZQUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBQ1hbW91bnRUb0dldEV4BQtib3Jyb3dBc3NldAAAAwkAAAIFBWV4SW52BQVleEludgQLY2xvc2VEYnRJbnYJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIIcmVwYXlGb3IJAMwIAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUFcG9zSWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQULYm9ycm93QXNzZXQFBGRlYnQFA25pbAMJAAACBQtjbG9zZURidEludgULY2xvc2VEYnRJbnYED2NCYWxBQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEED2NCYWxCQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIJAJQKAgkAZQIFD2NCYWxBQWZ0ZXJSZXBheQULY0JhbEFCZWZvcmUJAGUCBQ9jQmFsQkFmdGVyUmVwYXkFC2NCYWxCQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFDXRva2Vuc0Ftb3VudEEFDXRva2Vuc0Ftb3VudEIEDXRvVXNlckFtb3VudEEIBQ0kdDAyMzkwNzI0OTAyAl8xBA10b1VzZXJBbW91bnRCCAUNJHQwMjM5MDcyNDkwMgJfMgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGUCBQ5wb29sVG90YWxTaGFyZQUPdXNlckNhbldpdGhkcmF3CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQ10b2tlbnNBbW91bnRBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQh1c2VyQWRkcgUNdG9rZW5zQW1vdW50QgkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBjcmVhdGVOZXdSZXF1ZXN0AQZwYXJhbXMJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQQMbmV3UmVxdWVzdElkCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQxrUmVxdWVzdEl0ZXIAAAABCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCkAwEFDG5ld1JlcXVlc3RJZAUKa1JlcXVlc3RJZAUGcGFyYW1zCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrUmVxdWVzdEl0ZXIFDG5ld1JlcXVlc3RJZAUDbmlsBQxuZXdSZXF1ZXN0SWQBaQESY2FwaXRhbGl6ZUV4S2VlcGVyDARwb29sBHR5cGUJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0JYW1vdW50c0luCWFkZHJlc3Nlcw9hc3NldHNUb1JlY2VpdmULZXN0UmVjZWl2ZWQRc2xpcHBhZ2VUb2xlcmFuY2ULbWluUmVjZWl2ZWQHb3B0aW9ucwQNJHQwMjYwMTEyNjIwNQMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDI2MDExMjYyMDUCXzEEDGNsYWltZWRBc3NldAgFDSR0MDI2MDExMjYyMDUCXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlS2VlcGVyCgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCWFtb3VudHNJbgUJYWRkcmVzc2VzBQ9hc3NldHNUb1JlY2VpdmUFC2VzdFJlY2VpdmVkBRFzbGlwcGFnZVRvbGVyYW5jZQULbWluUmVjZWl2ZWQFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQESY2FwaXRhbGl6ZUV4UGF6emxlCARwb29sBHR5cGUJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0Jcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBA0kdDAyNjg2MTI3MDU1AwUFY2xhaW0JAQtjbGFpbUZhcm1lZAIFBHR5cGUFBHBvb2wEDGNsYWltZWRBc3NldAMJAAACBQR0eXBlBQdTRl9QT09MBQZTV09QSUQFBFdYSUQJAJQKAgUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BA1jbGFpbWVkQW1vdW50CAUNJHQwMjY4NjEyNzA1NQJfMQQMY2xhaW1lZEFzc2V0CAUNJHQwMjY4NjEyNzA1NQJfMgQPZXhjaGFuZ2VkQW1vdW50CQEOZXhjaGFuZ2VQYXp6bGUGBQl0b2tlblRvSWQFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAUJcm91dGVzU3RyBQxtaW5Ub1JlY2VpdmUFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQESY2FwaXRhbGl6ZUV4U3dvcEZpDARwb29sBHR5cGUJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0KZXhjaGFuZ2Vycw5leGNoYW5nZXJzVHlwZQVhcmdzMQVhcmdzMhFyb3V0aW5nQXNzZXRzS2V5cxJtaW5BbW91bnRUb1JlY2VpdmUHb3B0aW9ucwQNJHQwMjc3NzgyNzk3MgMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDI3Nzc4Mjc5NzICXzEEDGNsYWltZWRBc3NldAgFDSR0MDI3Nzc4Mjc5NzICXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlU3dvcEZpCgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCmV4Y2hhbmdlcnMFDmV4Y2hhbmdlcnNUeXBlBQVhcmdzMQUFYXJnczIFEXJvdXRpbmdBc3NldHNLZXlzBRJtaW5BbW91bnRUb1JlY2VpdmUFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQELaW5pdE5ld1Bvb2wFBHR5cGUIcG9vbEFkZHILaW5GZWVOb0xvYW4JaW5GZWVMb2FuBmNhcEZlZQMDCQECIT0CBQR0eXBlBQdTRl9QT09MCQECIT0CBQR0eXBlBQdXWF9QT09MBwkAAgECCldyb25nIHR5cGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgULaW5GZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEmtBeGx5SW5GZWVXaXRoTG9hbgUJaW5GZWVMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBQtrQXhseUNhcEZlZQUGY2FwRmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBQ1rUG9vbEludGVyZXN0AAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQVrUG9vbAUIcG9vbEFkZHIFBHR5cGUFA25pbAECdHgBBnZlcmlmeQAJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXlCrRZg", "height": 2539748, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E4JbTH1etik8Tm6bawmhHKCoR52xS4vkaSTGmzFBSynb Next: 3gvvR1SPMCwsiHAjAJHRRptgZCShuyjJ2gpgZaVf71Y5 Diff:
OldNewDifferences
502502
503503
504504 @Callable(P)
505-func replenish (ad,ch,ci) = if (if ((100 > ch))
505+func replenishREADONLY (af,ad,as,au,ch,ci) = if (if ((100 > ch))
506506 then true
507507 else (ch > 300))
508508 then throw("Leverage can't be <100 and >300")
514514 let aw = cj._3
515515 let ax = cj._4
516516 let ay = cj._5
517- let ck = if ((size(P.payments) == 2))
517+ let ck = if ((ch > 100))
518+ then {
519+ let cl = ( let Z = invoke(K, "getTWAP60", [bI, false], nil)
520+ if ($isInstanceOf(Z, "(Int, Int)"))
521+ then Z
522+ else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
523+ let cm = ( let Z = invoke(K, "getTWAP60", [bJ, false], nil)
524+ if ($isInstanceOf(Z, "(Int, Int)"))
525+ then Z
526+ else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
527+ let cn = (fraction(cl, as, pow(10, 0, ap(bI), 0, 0, DOWN)) + fraction(cm, au, pow(10, 0, ap(bJ), 0, 0, DOWN)))
528+ let co = fraction(cn, (ch - 100), 100)
529+ if ((ci == bI))
530+ then $Tuple3((as + co), au, d)
531+ else $Tuple3(as, (au + co), d)
532+ }
533+ else $Tuple3(as, au, e)
534+ let cp = ck._1
535+ let cq = ck._2
536+ let bV = ck._3
537+ let cr = if ((ab == a))
538+ then ar(ad, bV, cp, bI, cq, bJ, aw, ax, ay)
539+ else aR(ad, bV, as, bI, au, bJ, ay)
540+ let cs = cr._1
541+ let bM = cr._2
542+ $Tuple2(nil, cs)
543+ }
544+
545+
546+
547+@Callable(P)
548+func replenish (ad,ch,ci) = if (if ((100 > ch))
549+ then true
550+ else (ch > 300))
551+ then throw("Leverage can't be <100 and >300")
552+ else {
553+ let ab = valueOrErrorMessage(getString(this, (A + ad)), "Pool is not inited")
554+ let ct = aa(Address(fromBase58String(ad)), ab)
555+ let bI = ct._1
556+ let bJ = ct._2
557+ let aw = ct._3
558+ let ax = ct._4
559+ let ay = ct._5
560+ let cu = if ((size(P.payments) == 2))
518561 then if ((an(P.payments[0].assetId) != bI))
519562 then throw("Wrong payment asset A")
520563 else if ((an(P.payments[1].assetId) != bJ))
527570 then $Tuple4(0, bI, P.payments[0].amount, bJ)
528571 else throw("Wrong payment")
529572 else throw("One or two payments expected")
530- let as = ck._1
531- let at = ck._2
532- let au = ck._3
533- let av = ck._4
534- let cl = ae(ad, toString(P.caller))
573+ let as = cu._1
574+ let at = cu._2
575+ let au = cu._3
576+ let av = cu._4
577+ let cv = ae(ad, toString(P.caller))
535578 if ((ch > 100))
536579 then {
537- let cm = ( let Z = invoke(K, "getTWAP60", [at, false], nil)
580+ let cl = ( let Z = invoke(K, "getTWAP60", [at, false], nil)
538581 if ($isInstanceOf(Z, "(Int, Int)"))
539582 then Z
540583 else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
541- let cn = ( let Z = invoke(K, "getTWAP60", [av, false], nil)
584+ let cm = ( let Z = invoke(K, "getTWAP60", [av, false], nil)
542585 if ($isInstanceOf(Z, "(Int, Int)"))
543586 then Z
544587 else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
545- let co = (fraction(cm, as, pow(10, 0, ap(at), 0, 0, DOWN)) + fraction(cn, au, pow(10, 0, ap(av), 0, 0, DOWN)))
546- let cp = fraction(co, (ch - 100), 100)
547- let cq = makeString([ab, toString(P.caller), ad, toString(as), at, toString(au), av, toString(aw), toString(ax), ay, ci, toString(cp), toString(cl)], ",")
548- let cr = {
549- let Z = invoke(this, "createNewRequest", [cq], nil)
588+ let cn = (fraction(cl, as, pow(10, 0, ap(at), 0, 0, DOWN)) + fraction(cm, au, pow(10, 0, ap(av), 0, 0, DOWN)))
589+ let co = fraction(cn, (ch - 100), 100)
590+ let cw = makeString([ab, toString(P.caller), ad, toString(as), at, toString(au), av, toString(aw), toString(ax), ay, ci, toString(co), toString(cv)], ",")
591+ let cx = {
592+ let Z = invoke(this, "createNewRequest", [cw], nil)
550593 if ($isInstanceOf(Z, "Int"))
551594 then Z
552595 else throw(($getType(Z) + " couldn't be cast to Int"))
553596 }
554- if ((cr == cr))
597+ if ((cx == cx))
555598 then {
556- let cs = [((toString(P.caller) + "_") + toString(cl)), ay, ci, cp, toString(this), "replenishFromLand", toString(valueOrErrorMessage(cr, "Can't create new request"))]
557- let bg = reentrantInvoke(am(), "flashPosition", cs, nil)
599+ let cy = [((toString(P.caller) + "_") + toString(cv)), ay, ci, co, toString(this), "replenishFromLand", toString(valueOrErrorMessage(cx, "Can't create new request"))]
600+ let bg = reentrantInvoke(am(), "flashPosition", cy, nil)
558601 if ((bg == bg))
559602 then nil
560603 else throw("Strict value is not equal to itself.")
562605 else throw("Strict value is not equal to itself.")
563606 }
564607 else {
565- let ct = if ((ab == a))
608+ let cz = if ((ab == a))
566609 then ar(ad, e, as, at, au, av, aw, ax, ay)
567610 else aR(ad, e, as, at, au, av, ay)
568- let cu = ct._1
569- let bM = ct._2
570- aZ(ad, toString(P.caller), cu, bM, cl, ay, ab)
611+ let cs = cz._1
612+ let bM = cz._2
613+ aZ(ad, toString(P.caller), cs, bM, cv, ay, ab)
571614 }
572615 }
573616
574617
575618
576619 @Callable(P)
577-func replenishFromLand (cv) = {
578- let cq = split(valueOrErrorMessage(getString(this, (cv + y)), ("No request with id " + cv)), ",")
620+func replenishFromLand (cA) = {
621+ let cw = split(valueOrErrorMessage(getString(this, (cA + y)), ("No request with id " + cA)), ",")
579622 if ((size(P.payments) != 1))
580623 then throw("Wrong payment size")
581- else if (if ((an(P.payments[0].assetId) != cq[10]))
624+ else if (if ((an(P.payments[0].assetId) != cw[10]))
582625 then true
583- else (P.payments[0].amount != parseIntValue(cq[11])))
626+ else (P.payments[0].amount != parseIntValue(cw[11])))
584627 then throw("Wrong payment")
585628 else {
586- let as = if ((cq[4] == an(P.payments[0].assetId)))
587- then (parseIntValue(cq[3]) + P.payments[0].amount)
588- else parseIntValue(cq[3])
589- let au = if ((cq[6] == an(P.payments[0].assetId)))
590- then (parseIntValue(cq[5]) + P.payments[0].amount)
591- else parseIntValue(cq[3])
592- let ad = cq[2]
593- let af = cq[1]
594- let ay = cq[9]
595- let bb = parseIntValue(cq[12])
596- let cw = if ((cq[0] == a))
597- then ar(ad, d, as, cq[4], au, cq[6], parseIntValue(cq[7]), parseIntValue(cq[8]), ay)
598- else if ((cq[0] == b))
599- then aR(ad, d, as, cq[4], au, cq[6], ay)
629+ let as = if ((cw[4] == an(P.payments[0].assetId)))
630+ then (parseIntValue(cw[3]) + P.payments[0].amount)
631+ else parseIntValue(cw[3])
632+ let au = if ((cw[6] == an(P.payments[0].assetId)))
633+ then (parseIntValue(cw[5]) + P.payments[0].amount)
634+ else parseIntValue(cw[3])
635+ let ad = cw[2]
636+ let af = cw[1]
637+ let ay = cw[9]
638+ let bb = parseIntValue(cw[12])
639+ let cB = if ((cw[0] == a))
640+ then ar(ad, d, as, cw[4], au, cw[6], parseIntValue(cw[7]), parseIntValue(cw[8]), ay)
641+ else if ((cw[0] == b))
642+ then aR(ad, d, as, cw[4], au, cw[6], ay)
600643 else throw("Wrong request type")
601- let cu = cw._1
602- let bM = cw._2
603- let cx = [IntegerEntry((((((cq[2] + "_") + cq[1]) + "_") + cq[12]) + p), P.payments[0].amount), StringEntry((((((cq[2] + "_") + cq[1]) + "_") + cq[12]) + q), cq[10])]
604- let cy = aZ(ad, af, cu, bM, bb, ay, cq[0])
605- $Tuple2(((cy ++ cx) :+ DeleteEntry((cv + y))), cu)
644+ let cs = cB._1
645+ let bM = cB._2
646+ let cC = [IntegerEntry((((((cw[2] + "_") + cw[1]) + "_") + cw[12]) + p), P.payments[0].amount), StringEntry((((((cw[2] + "_") + cw[1]) + "_") + cw[12]) + q), cw[10])]
647+ let cD = aZ(ad, af, cs, bM, bb, ay, cw[0])
648+ $Tuple2(((cD ++ cC) :+ DeleteEntry((cA + y))), cs)
606649 }
607650 }
608651
609652
610653
611654 @Callable(P)
612-func withdraw (ad,cz) = {
655+func withdraw (ad,cE) = {
613656 let af = toString(P.caller)
614- let cA = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
615- let cB = valueOrErrorMessage(getInteger(this, (((((ad + "_") + af) + "_") + toString(cz)) + o)), "Unknown position")
616- let cC = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(cz)) + s))
617- let cD = getIntegerValue(this, (ad + u))
618- let cE = ac(ad)
619- let cF = (cB + fraction(cB, (cD - cC), g))
657+ let cF = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
658+ let cG = valueOrErrorMessage(getInteger(this, (((((ad + "_") + af) + "_") + toString(cE)) + o)), "Unknown position")
659+ let cH = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(cE)) + s))
660+ let cI = getIntegerValue(this, (ad + u))
661+ let cJ = ac(ad)
662+ let cK = (cG + fraction(cG, (cI - cH), g))
620663 let W = Address(fromBase58String(ad))
621- let cG = Address(fromBase58String(af))
622- let cp = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(cz)) + p))
623- let cH = getStringValue(this, (((((ad + "_") + af) + "_") + toString(cz)) + q))
624- let cI = aa(Address(fromBase58String(ad)), cA)
625- let bQ = cI._1
626- let bR = cI._2
627- let aw = cI._3
628- let ax = cI._4
629- let ay = cI._5
630- let cJ = Q(ao(bQ))
631- if ((cJ == cJ))
664+ let cL = Address(fromBase58String(af))
665+ let co = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(cE)) + p))
666+ let cM = getStringValue(this, (((((ad + "_") + af) + "_") + toString(cE)) + q))
667+ let cN = aa(Address(fromBase58String(ad)), cF)
668+ let bQ = cN._1
669+ let bR = cN._2
670+ let aw = cN._3
671+ let ax = cN._4
672+ let ay = cN._5
673+ let cO = Q(ao(bQ))
674+ if ((cO == cO))
632675 then {
633- let cK = Q(ao(bR))
634- if ((cK == cK))
676+ let cP = Q(ao(bR))
677+ if ((cP == cP))
635678 then {
636- let bg = if ((cA == a))
637- then invoke(W, "callFunction", ["withdraw", [toString(cF)]], nil)
638- else if ((cA == b))
639- then invoke(W, "unstakeAndGet", [cF], nil)
679+ let bg = if ((cF == a))
680+ then invoke(W, "callFunction", ["withdraw", [toString(cK)]], nil)
681+ else if ((cF == b))
682+ then invoke(W, "unstakeAndGet", [cK], nil)
640683 else throw("Wrong position type")
641684 if ((bg == bg))
642685 then {
643- let cL = Q(ao(bQ))
644- let cM = Q(ao(bR))
645- let cN = $Tuple2((cL - cJ), (cM - cK))
646- let cO = cN._1
647- let cP = cN._2
648- let cQ = if ((cp > 0))
686+ let cQ = Q(ao(bQ))
687+ let cR = Q(ao(bR))
688+ let cS = $Tuple2((cQ - cO), (cR - cP))
689+ let cT = cS._1
690+ let cU = cS._2
691+ let cV = if ((co > 0))
649692 then {
650- let cR = {
651- let Z = invoke(am(), "getAssetDebt", [false, ((((ad + "_") + af) + "_") + toString(cz)), cH], nil)
693+ let cW = {
694+ let Z = invoke(am(), "getAssetDebt", [false, ((((ad + "_") + af) + "_") + toString(cE)), cM], nil)
652695 if ($isInstanceOf(Z, "Int"))
653696 then Z
654697 else throw(($getType(Z) + " couldn't be cast to Int"))
655698 }
656- let cS = if (if ((cH == bQ))
657- then (cR > cO)
699+ let cX = if (if ((cM == bQ))
700+ then (cW > cT)
658701 else false)
659- then (cR - cO)
660- else if (if ((cH == bR))
661- then (cR > cP)
702+ then (cW - cT)
703+ else if (if ((cM == bR))
704+ then (cW > cU)
662705 else false)
663- then (cR - cP)
706+ then (cW - cU)
664707 else 0
665- let cT = if ((cS > 0))
666- then cg(cA, ad, bQ, bR, aw, ax, cS, cH)
708+ let cY = if ((cX > 0))
709+ then cg(cF, ad, bQ, bR, aw, ax, cX, cM)
667710 else 0
668- if ((cT == cT))
711+ if ((cY == cY))
669712 then {
670- let cU = invoke(am(), "repay", [((af + "_") + toString(cz))], [AttachedPayment(ao(cH), cR)])
671- if ((cU == cU))
713+ let cZ = invoke(am(), "repayFor", [((af + "_") + toString(cE))], [AttachedPayment(ao(cM), cW)])
714+ if ((cZ == cZ))
672715 then {
673- let cV = Q(ao(bQ))
674- let cW = Q(ao(bR))
675- $Tuple2((cV - cJ), (cW - cK))
716+ let da = Q(ao(bQ))
717+ let db = Q(ao(bR))
718+ $Tuple2((da - cO), (db - cP))
676719 }
677720 else throw("Strict value is not equal to itself.")
678721 }
679722 else throw("Strict value is not equal to itself.")
680723 }
681- else $Tuple2(cO, cP)
682- let cX = cQ._1
683- let cY = cQ._2
684-[DeleteEntry((((((ad + "_") + af) + "_") + toString(cz)) + o)), DeleteEntry((((((ad + "_") + af) + "_") + toString(cz)) + s)), IntegerEntry((ad + t), (cE - cF)), ScriptTransfer(cG, cO, ao(bQ)), ScriptTransfer(cG, cP, ao(bR))]
724+ else $Tuple2(cT, cU)
725+ let dc = cV._1
726+ let dd = cV._2
727+[DeleteEntry((((((ad + "_") + af) + "_") + toString(cE)) + o)), DeleteEntry((((((ad + "_") + af) + "_") + toString(cE)) + s)), IntegerEntry((ad + t), (cJ - cK)), ScriptTransfer(cL, cT, ao(bQ)), ScriptTransfer(cL, cU, ao(bR))]
685728 }
686729 else throw("Strict value is not equal to itself.")
687730 }
693736
694737
695738 @Callable(P)
696-func createNewRequest (cZ) = valueOrElse(O(P), {
697- let cr = (valueOrElse(getInteger(this, z), 0) + 1)
698- $Tuple2([StringEntry((toString(cr) + y), cZ), IntegerEntry(z, cr)], cr)
739+func createNewRequest (de) = valueOrElse(O(P), {
740+ let cx = (valueOrElse(getInteger(this, z), 0) + 1)
741+ $Tuple2([StringEntry((toString(cx) + y), de), IntegerEntry(z, cx)], cx)
699742 })
700743
701744
702745
703746 @Callable(P)
704-func capitalizeExKeeper (ad,ab,da,db,dc,bm,bn,bo,bp,bq,br,bs) = {
705- let dd = if (dc)
747+func capitalizeExKeeper (ad,ab,df,dg,dh,bm,bn,bo,bp,bq,br,bs) = {
748+ let di = if (dh)
706749 then be(ab, ad)
707750 else {
708- let de = if ((ab == a))
751+ let dj = if ((ab == a))
709752 then M
710753 else N
711- $Tuple2(db, de)
754+ $Tuple2(dg, dj)
712755 }
713- let df = dd._1
714- let de = dd._2
715- let dg = bi(da, db, de, bm, bn, bo, bp, bq, br, bs)
716- let aG = (df - db)
717- let dh = if ((aG > 0))
756+ let dk = di._1
757+ let dj = di._2
758+ let dl = bi(df, dg, dj, bm, bn, bo, bp, bq, br, bs)
759+ let aG = (dk - dg)
760+ let dm = if ((aG > 0))
718761 then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
719762 else nil
720- (bE(ad, ab, da, dg) ++ dh)
763+ (bE(ad, ab, df, dl) ++ dm)
721764 }
722765
723766
724767
725768 @Callable(P)
726-func capitalizeExPazzle (ad,ab,da,db,dc,bv,bw,bs) = {
727- let di = if (dc)
769+func capitalizeExPazzle (ad,ab,df,dg,dh,bv,bw,bs) = {
770+ let dn = if (dh)
728771 then be(ab, ad)
729772 else {
730- let de = if ((ab == a))
773+ let dj = if ((ab == a))
731774 then M
732775 else N
733- $Tuple2(db, de)
776+ $Tuple2(dg, dj)
734777 }
735- let df = di._1
736- let de = di._2
737- let dg = bu(da, db, de, bv, bw, bs)
738- let aG = (df - db)
739- let dh = if ((aG > 0))
778+ let dk = dn._1
779+ let dj = dn._2
780+ let dl = bu(df, dg, dj, bv, bw, bs)
781+ let aG = (dk - dg)
782+ let dm = if ((aG > 0))
740783 then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
741784 else nil
742- (bE(ad, ab, da, dg) ++ dh)
785+ (bE(ad, ab, df, dl) ++ dm)
743786 }
744787
745788
746789
747790 @Callable(P)
748-func capitalizeExSwopFi (ad,ab,da,db,dc,by,bz,bA,bB,bC,bD,bs) = {
749- let dj = if (dc)
791+func capitalizeExSwopFi (ad,ab,df,dg,dh,by,bz,bA,bB,bC,bD,bs) = {
792+ let do = if (dh)
750793 then be(ab, ad)
751794 else {
752- let de = if ((ab == a))
795+ let dj = if ((ab == a))
753796 then M
754797 else N
755- $Tuple2(db, de)
798+ $Tuple2(dg, dj)
756799 }
757- let df = dj._1
758- let de = dj._2
759- let dg = bx(da, db, de, by, bz, bA, bB, bC, bD, bs)
760- let aG = (df - db)
761- let dh = if ((aG > 0))
800+ let dk = do._1
801+ let dj = do._2
802+ let dl = bx(df, dg, dj, by, bz, bA, bB, bC, bD, bs)
803+ let aG = (dk - dg)
804+ let dm = if ((aG > 0))
762805 then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
763806 else nil
764- (bE(ad, ab, da, dg) ++ dh)
807+ (bE(ad, ab, df, dl) ++ dm)
765808 }
766809
767810
768811
769812 @Callable(P)
770-func initNewPool (ab,W,dk,dl,dm) = if (if ((ab != a))
813+func initNewPool (ab,W,dp,dq,dr) = if (if ((ab != a))
771814 then (ab != b)
772815 else false)
773816 then throw("Wrong type")
774- else [IntegerEntry((W + v), dk), IntegerEntry((W + w), dl), IntegerEntry((W + x), dm), IntegerEntry((W + u), 0), StringEntry((A + W), ab)]
817+ else [IntegerEntry((W + v), dp), IntegerEntry((W + w), dq), IntegerEntry((W + x), dr), IntegerEntry((W + u), 0), StringEntry((A + W), ab)]
775818
776819
777-@Verifier(dn)
778-func do () = sigVerify(dn.bodyBytes, dn.proofs[0], dn.senderPublicKey)
820+@Verifier(ds)
821+func dt () = sigVerify(ds.bodyBytes, ds.proofs[0], ds.senderPublicKey)
779822
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 = "cap"
99
1010 let d = "loan"
1111
1212 let e = "noLoan"
1313
1414 let f = 100000000
1515
1616 let g = 10000000000
1717
1818 let h = 1000000
1919
2020 let i = "A_asset_balance"
2121
2222 let j = "B_asset_balance"
2323
2424 let k = "A_asset_id"
2525
2626 let l = "B_asset_id"
2727
2828 let m = "share_asset_id"
2929
3030 let n = "commission"
3131
3232 let o = "_user_position"
3333
3434 let p = "_user_position_borrow_amount"
3535
3636 let q = "_user_position_borrow_asset_id"
3737
3838 let r = "_user_position_number"
3939
4040 let s = "_user_position_interest"
4141
4242 let t = "_pool_total"
4343
4444 let u = "_pool_interest"
4545
4646 let v = "_axly_fee_without_loan"
4747
4848 let w = "_axly_fee_with_loan"
4949
5050 let x = "_axly_fee_cap"
5151
5252 let y = "_request_id"
5353
5454 let z = "requests_iter"
5555
5656 let A = "pool_"
5757
5858 let B = "_pool_cap_change"
5959
6060 let C = "axly_money_box"
6161
6262 let D = "swopfi_farming_addr"
6363
6464 let E = "lend_service_addr"
6565
6666 let F = "price_oracle"
6767
6868 let G = "exchange_contract"
6969
7070 let H = "wx_swap_contract"
7171
7272 let I = Address(fromBase58String(valueOrErrorMessage(getString(this, C), "No axly moneyBox address")))
7373
7474 let J = Address(fromBase58String(valueOrErrorMessage(getString(this, G), "No exchange contract address")))
7575
7676 let K = Address(fromBase58String(valueOrErrorMessage(getString(this, F), "No price oracle address")))
7777
7878 let L = Address(fromBase58String(valueOrErrorMessage(getString(this, H), "No wx swap address")))
7979
8080 let M = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
8181
8282 let N = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
8383
8484 func O (P) = if ((P.caller == this))
8585 then unit
8686 else throw("Only contract itself can call this function")
8787
8888
8989 func Q (R) = {
9090 let S = R
9191 if ($isInstanceOf(S, "ByteVector"))
9292 then {
9393 let T = S
9494 assetBalance(this, T)
9595 }
9696 else if ($isInstanceOf(S, "Unit"))
9797 then {
9898 let U = S
9999 wavesBalance(this).available
100100 }
101101 else throw("Match error")
102102 }
103103
104104
105105 func V (W) = $Tuple5(valueOrErrorMessage(getString(W, k), "Can't get pool A asset id"), valueOrErrorMessage(getString(W, l), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(W, i), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(W, j), "Can't get pool B asset balance"), valueOrErrorMessage(getString(W, m), "Can't get share asset id"))
106106
107107
108108 func X (W) = {
109109 let Y = {
110110 let Z = invoke(W, "getPoolConfigWrapperREADONLY", nil, nil)
111111 if ($isInstanceOf(Z, "List[Any]"))
112112 then Z
113113 else throw(($getType(Z) + " couldn't be cast to List[Any]"))
114114 }
115115 if ((Y == Y))
116116 then $Tuple5(valueOrErrorMessage({
117117 let Z = Y[4]
118118 if ($isInstanceOf(Z, "String"))
119119 then Z
120120 else unit
121121 }, "Can't get pool A asset id"), valueOrErrorMessage({
122122 let Z = Y[5]
123123 if ($isInstanceOf(Z, "String"))
124124 then Z
125125 else unit
126126 }, "Can't get pool B asset id"), 0, 0, valueOrErrorMessage({
127127 let Z = Y[3]
128128 if ($isInstanceOf(Z, "String"))
129129 then Z
130130 else unit
131131 }, "Can't get pool LP asset id"))
132132 else throw("Strict value is not equal to itself.")
133133 }
134134
135135
136136 func aa (W,ab) = if ((ab == a))
137137 then V(W)
138138 else if ((ab == b))
139139 then X(W)
140140 else throw("Wrong pool type")
141141
142142
143143 func ac (ad) = valueOrElse(getInteger(this, (ad + t)), 0)
144144
145145
146146 func ae (ad,af) = (valueOrElse(getInteger(this, (((ad + "_") + af) + r)), 0) + 1)
147147
148148
149149 func ag (ad,ah) = if ((ah == "cap"))
150150 then getIntegerValue(this, (ad + x))
151151 else if ((ah == "loan"))
152152 then getIntegerValue(this, (ad + w))
153153 else if ((ah == "noLoan"))
154154 then getIntegerValue(this, (ad + v))
155155 else throw("Wrong fee type")
156156
157157
158158 func ai () = Address(fromBase58String(valueOrErrorMessage(getString(this, D), "Can't get swopfi farming addr")))
159159
160160
161161 func aj (W) = {
162162 let ak = Address(fromBase58String(valueOrErrorMessage(getString(W, "%s__factoryContract"), "Can't get WX factory contract addr")))
163163 let al = split(valueOrErrorMessage(getString(ak, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
164164 Address(fromBase58String(al[1]))
165165 }
166166
167167
168168 func am () = Address(fromBase58String(valueOrErrorMessage(getString(this, E), "Can't get lend service addr")))
169169
170170
171171 func an (R) = {
172172 let S = R
173173 if ($isInstanceOf(S, "ByteVector"))
174174 then {
175175 let T = S
176176 toBase58String(T)
177177 }
178178 else if ($isInstanceOf(S, "Unit"))
179179 then {
180180 let U = S
181181 "WAVES"
182182 }
183183 else throw("Match error")
184184 }
185185
186186
187187 func ao (R) = if ((R == "WAVES"))
188188 then unit
189189 else fromBase58String(R)
190190
191191
192192 func ap (R) = if ((R == "WAVES"))
193193 then 8
194194 else {
195195 let S = assetInfo(fromBase58String(R))
196196 if ($isInstanceOf(S, "Asset"))
197197 then {
198198 let aq = S
199199 aq.decimals
200200 }
201201 else throw("Can't find asset")
202202 }
203203
204204
205205 func ar (ad,ah,as,at,au,av,aw,ax,ay) = {
206206 let az = Q(fromBase58String(ay))
207207 if ((az == az))
208208 then {
209209 let W = Address(fromBase58String(ad))
210210 let aA = fraction(f, as, aw)
211211 let aB = fraction(f, au, ax)
212212 let aC = if ((aB > aA))
213213 then {
214214 let aD = fraction(ax, aA, f, CEILING)
215215 $Tuple4(as, aD, (au - aD), av)
216216 }
217217 else {
218218 let aD = fraction(aw, aB, f, CEILING)
219219 $Tuple4(aD, au, (as - aD), at)
220220 }
221221 let aE = aC._1
222222 let aF = aC._2
223223 let aG = aC._3
224224 let aH = aC._4
225225 let aI = if (if ((aE > 0))
226226 then (aF > 0)
227227 else false)
228228 then {
229229 let aJ = [AttachedPayment(ao(at), aE), AttachedPayment(ao(av), aF)]
230230 invoke(W, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], aJ)
231231 }
232232 else 0
233233 if ((aI == aI))
234234 then {
235235 let aK = if ((aG > 0))
236236 then {
237237 let aJ = [AttachedPayment(ao(aH), aG)]
238238 let aL = ["0", "false", "0"]
239239 invoke(W, "callFunction", ["replenishWithOneToken", aL], aJ)
240240 }
241241 else 0
242242 if ((aK == aK))
243243 then {
244244 let aM = Q(fromBase58String(ay))
245245 let aN = (aM - az)
246246 let aO = fraction(aN, ag(ad, ah), h)
247247 let aP = (aN - aO)
248248 if ((0 >= aP))
249249 then throw("amount of staked sharetokens must be > 0")
250250 else {
251251 let aQ = invoke(ai(), "lockShareTokens", [ad, 0], [AttachedPayment(fromBase58String(ay), aP)])
252252 if ((aQ == aQ))
253253 then $Tuple2(aP, aO)
254254 else throw("Strict value is not equal to itself.")
255255 }
256256 }
257257 else throw("Strict value is not equal to itself.")
258258 }
259259 else throw("Strict value is not equal to itself.")
260260 }
261261 else throw("Strict value is not equal to itself.")
262262 }
263263
264264
265265 func aR (ad,ah,as,at,au,av,ay) = {
266266 let W = Address(fromBase58String(ad))
267267 let aS = if (if ((as > 0))
268268 then (au > 0)
269269 else false)
270270 then {
271271 let aT = split({
272272 let Z = invoke(W, "evaluatePutByAmountAssetREADONLY", [as], nil)
273273 if ($isInstanceOf(Z, "String"))
274274 then Z
275275 else throw(($getType(Z) + " couldn't be cast to String"))
276276 }, "__")
277277 if ((aT == aT))
278278 then {
279279 let aU = split({
280280 let Z = invoke(W, "evaluatePutByPriceAssetREADONLY", [au], nil)
281281 if ($isInstanceOf(Z, "String"))
282282 then Z
283283 else throw(($getType(Z) + " couldn't be cast to String"))
284284 }, "__")
285285 if ((aU == aU))
286286 then {
287287 let aV = parseIntValue(aT[1])
288288 let aW = parseIntValue(aU[1])
289289 if ((aW > aV))
290290 then {
291291 let aX = parseIntValue(aT[8])
292292 $Tuple4(as, aX, (au - aX), av)
293293 }
294294 else {
295295 let aY = parseIntValue(aU[7])
296296 $Tuple4(aY, au, (as - aY), at)
297297 }
298298 }
299299 else throw("Strict value is not equal to itself.")
300300 }
301301 else throw("Strict value is not equal to itself.")
302302 }
303303 else if ((as > 0))
304304 then $Tuple4(as, au, as, at)
305305 else if ((au > 0))
306306 then $Tuple4(as, au, au, av)
307307 else throw("pmts must be > 0")
308308 let aE = aS._1
309309 let aF = aS._2
310310 let aG = aS._3
311311 let aH = aS._4
312312 let az = Q(fromBase58String(ay))
313313 if ((az == az))
314314 then {
315315 let aI = if (if ((aE > 0))
316316 then (aF > 0)
317317 else false)
318318 then {
319319 let aJ = [AttachedPayment(ao(at), aE), AttachedPayment(ao(av), aF)]
320320 invoke(W, "put", [1000000, false], aJ)
321321 }
322322 else 0
323323 if ((aI == aI))
324324 then {
325325 let aK = if ((aG > 0))
326326 then {
327327 let aJ = [AttachedPayment(ao(aH), aG)]
328328 invoke(W, "putOneTkn", [0, false], aJ)
329329 }
330330 else 0
331331 if ((aK == aK))
332332 then {
333333 let aM = Q(fromBase58String(ay))
334334 let aN = (aM - az)
335335 let aO = fraction(aN, ag(ad, ah), h)
336336 let aP = (aN - aO)
337337 if ((0 >= aP))
338338 then throw("amount of staked sharetokens must be > 0")
339339 else {
340340 let aQ = invoke(aj(W), "stake", nil, [AttachedPayment(fromBase58String(ay), aP)])
341341 if ((aQ == aQ))
342342 then $Tuple2(aP, aO)
343343 else throw("Strict value is not equal to itself.")
344344 }
345345 }
346346 else throw("Strict value is not equal to itself.")
347347 }
348348 else throw("Strict value is not equal to itself.")
349349 }
350350 else throw("Strict value is not equal to itself.")
351351 }
352352
353353
354354 func aZ (ad,af,ba,aO,bb,ay,ab) = {
355355 let bc = ac(ad)
356356 let bd = getIntegerValue(this, (ad + u))
357357 [IntegerEntry((ad + t), (bc + ba)), IntegerEntry((((((ad + "_") + af) + "_") + toString(bb)) + o), ba), IntegerEntry((((((ad + "_") + af) + "_") + toString(bb)) + s), bd), IntegerEntry((((ad + "_") + af) + r), bb), ScriptTransfer(I, aO, fromBase58String(ay))]
358358 }
359359
360360
361361 func be (ab,ad) = if ((ab == a))
362362 then {
363363 let bf = Q(M)
364364 if ((bf == bf))
365365 then {
366366 let bg = invoke(ai(), "claim", [ad], nil)
367367 if ((bg == bg))
368368 then {
369369 let bh = Q(M)
370370 $Tuple2((bh - bf), M)
371371 }
372372 else throw("Strict value is not equal to itself.")
373373 }
374374 else throw("Strict value is not equal to itself.")
375375 }
376376 else if ((ab == b))
377377 then {
378378 let bf = Q(N)
379379 if ((bf == bf))
380380 then {
381381 let bg = invoke(aj(Address(fromBase58String(ad))), "claimWX", [ad], nil)
382382 if ((bg == bg))
383383 then {
384384 let bh = Q(N)
385385 $Tuple2((bh - bf), N)
386386 }
387387 else throw("Strict value is not equal to itself.")
388388 }
389389 else throw("Strict value is not equal to itself.")
390390 }
391391 else throw("Wrong pool type")
392392
393393
394394 func bi (bj,bk,bl,bm,bn,bo,bp,bq,br,bs) = {
395395 let bt = Q(ao(bj))
396396 if ((bt == bt))
397397 then {
398398 let bg = invoke(J, "swap", [bm, bn, bo, bp, bq, br, bs], [AttachedPayment(bl, bk)])
399399 if ((bg == bg))
400400 then (Q(ao(bj)) - bt)
401401 else throw("Strict value is not equal to itself.")
402402 }
403403 else throw("Strict value is not equal to itself.")
404404 }
405405
406406
407407 func bu (bj,bk,bl,bv,bw,bs) = {
408408 let bt = Q(ao(bj))
409409 if ((bt == bt))
410410 then {
411411 let bg = invoke(J, "puzzleSwap", [bv, bw, bs], [AttachedPayment(bl, bk)])
412412 if ((bg == bg))
413413 then (Q(ao(bj)) - bt)
414414 else throw("Strict value is not equal to itself.")
415415 }
416416 else throw("Strict value is not equal to itself.")
417417 }
418418
419419
420420 func bx (bj,bk,bl,by,bz,bA,bB,bC,bD,bs) = {
421421 let bt = Q(ao(bj))
422422 if ((bt == bt))
423423 then {
424424 let bg = invoke(J, "swopfiSwap", [by, bz, bA, bB, bC, bD, bs], [AttachedPayment(bl, bk)])
425425 if ((bg == bg))
426426 then (Q(ao(bj)) - bt)
427427 else throw("Strict value is not equal to itself.")
428428 }
429429 else throw("Strict value is not equal to itself.")
430430 }
431431
432432
433433 func bE (ad,ab,bF,bG) = {
434434 let W = Address(fromBase58String(ad))
435435 let bH = aa(W, ab)
436436 let bI = bH._1
437437 let bJ = bH._2
438438 let aw = bH._3
439439 let ax = bH._4
440440 let ay = bH._5
441441 let bK = if ((bF == bI))
442442 then $Tuple2(bG, 0)
443443 else $Tuple2(0, bG)
444444 let as = bK._1
445445 let au = bK._2
446446 let bL = if ((ab == a))
447447 then ar(ad, c, as, bI, au, bJ, aw, ax, ay)
448448 else aR(ad, c, as, bI, au, bJ, ay)
449449 let ba = bL._1
450450 let bM = bL._2
451451 let bd = valueOrElse(getInteger(this, (ad + u)), 0)
452452 let bN = ac(ad)
453453 let bO = (bd + fraction(ba, g, bN))
454454 [IntegerEntry((ad + u), bO), ScriptTransfer(I, bM, fromBase58String(ay))]
455455 }
456456
457457
458458 func bP (ad,bQ,bR,aw,ax,bS,bT) = {
459459 let W = Address(fromBase58String(ad))
460460 let bU = 1000000
461461 let bV = getIntegerValue(W, n)
462462 let bW = fraction(bS, bU, (bU - bV))
463463 let bX = if ((bT == bQ))
464464 then {
465465 let bY = fraction(aw, bW, (ax - bW))
466466 $Tuple2(bY, bR)
467467 }
468468 else {
469469 let bY = fraction(ax, bW, (aw - bW))
470470 $Tuple2(bY, bQ)
471471 }
472472 let bY = bX._1
473473 let bZ = bX._2
474474 invoke(W, "callFunction", ["exchange", "1"], [AttachedPayment(ao(bZ), bY)])
475475 }
476476
477477
478478 func ca (ad,bQ,bR,aw,ax,bS,bT) = {
479479 let W = Address(fromBase58String(ad))
480480 let cb = getIntegerValue(L, "%s__protocolFee")
481481 let cc = getIntegerValue(L, "%s__poolFee")
482482 let cd = toBigInt(100000000)
483483 let ce = if ((bT == bQ))
484484 then {
485485 let bY = fraction(aw, bS, (ax - bS))
486486 $Tuple2(bY, bR)
487487 }
488488 else {
489489 let bY = fraction(ax, bS, (aw - bS))
490490 $Tuple2(bY, bQ)
491491 }
492492 let bY = ce._1
493493 let bZ = ce._2
494494 let cf = toInt(fraction(toBigInt(bY), cd, (cd - toBigInt((cb + cc)))))
495495 invoke(L, "swap", [1, bT, toString(this)], [AttachedPayment(ao(bZ), cf)])
496496 }
497497
498498
499499 func cg (ab,ad,bQ,bR,aw,ax,bS,bT) = if ((ab == a))
500500 then bP(ad, bQ, bR, aw, ax, bS, bT)
501501 else ca(ad, bQ, bR, aw, ax, bS, bT)
502502
503503
504504 @Callable(P)
505-func replenish (ad,ch,ci) = if (if ((100 > ch))
505+func replenishREADONLY (af,ad,as,au,ch,ci) = if (if ((100 > ch))
506506 then true
507507 else (ch > 300))
508508 then throw("Leverage can't be <100 and >300")
509509 else {
510510 let ab = valueOrErrorMessage(getString(this, (A + ad)), "Pool is not inited")
511511 let cj = aa(Address(fromBase58String(ad)), ab)
512512 let bI = cj._1
513513 let bJ = cj._2
514514 let aw = cj._3
515515 let ax = cj._4
516516 let ay = cj._5
517- let ck = if ((size(P.payments) == 2))
517+ let ck = if ((ch > 100))
518+ then {
519+ let cl = ( let Z = invoke(K, "getTWAP60", [bI, false], nil)
520+ if ($isInstanceOf(Z, "(Int, Int)"))
521+ then Z
522+ else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
523+ let cm = ( let Z = invoke(K, "getTWAP60", [bJ, false], nil)
524+ if ($isInstanceOf(Z, "(Int, Int)"))
525+ then Z
526+ else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
527+ let cn = (fraction(cl, as, pow(10, 0, ap(bI), 0, 0, DOWN)) + fraction(cm, au, pow(10, 0, ap(bJ), 0, 0, DOWN)))
528+ let co = fraction(cn, (ch - 100), 100)
529+ if ((ci == bI))
530+ then $Tuple3((as + co), au, d)
531+ else $Tuple3(as, (au + co), d)
532+ }
533+ else $Tuple3(as, au, e)
534+ let cp = ck._1
535+ let cq = ck._2
536+ let bV = ck._3
537+ let cr = if ((ab == a))
538+ then ar(ad, bV, cp, bI, cq, bJ, aw, ax, ay)
539+ else aR(ad, bV, as, bI, au, bJ, ay)
540+ let cs = cr._1
541+ let bM = cr._2
542+ $Tuple2(nil, cs)
543+ }
544+
545+
546+
547+@Callable(P)
548+func replenish (ad,ch,ci) = if (if ((100 > ch))
549+ then true
550+ else (ch > 300))
551+ then throw("Leverage can't be <100 and >300")
552+ else {
553+ let ab = valueOrErrorMessage(getString(this, (A + ad)), "Pool is not inited")
554+ let ct = aa(Address(fromBase58String(ad)), ab)
555+ let bI = ct._1
556+ let bJ = ct._2
557+ let aw = ct._3
558+ let ax = ct._4
559+ let ay = ct._5
560+ let cu = if ((size(P.payments) == 2))
518561 then if ((an(P.payments[0].assetId) != bI))
519562 then throw("Wrong payment asset A")
520563 else if ((an(P.payments[1].assetId) != bJ))
521564 then throw("Wrong payment asset B")
522565 else $Tuple4(P.payments[0].amount, bI, P.payments[1].amount, bJ)
523566 else if ((size(P.payments) == 1))
524567 then if ((an(P.payments[0].assetId) == bI))
525568 then $Tuple4(P.payments[0].amount, bI, 0, bJ)
526569 else if ((an(P.payments[0].assetId) == bJ))
527570 then $Tuple4(0, bI, P.payments[0].amount, bJ)
528571 else throw("Wrong payment")
529572 else throw("One or two payments expected")
530- let as = ck._1
531- let at = ck._2
532- let au = ck._3
533- let av = ck._4
534- let cl = ae(ad, toString(P.caller))
573+ let as = cu._1
574+ let at = cu._2
575+ let au = cu._3
576+ let av = cu._4
577+ let cv = ae(ad, toString(P.caller))
535578 if ((ch > 100))
536579 then {
537- let cm = ( let Z = invoke(K, "getTWAP60", [at, false], nil)
580+ let cl = ( let Z = invoke(K, "getTWAP60", [at, false], nil)
538581 if ($isInstanceOf(Z, "(Int, Int)"))
539582 then Z
540583 else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
541- let cn = ( let Z = invoke(K, "getTWAP60", [av, false], nil)
584+ let cm = ( let Z = invoke(K, "getTWAP60", [av, false], nil)
542585 if ($isInstanceOf(Z, "(Int, Int)"))
543586 then Z
544587 else throw(($getType(Z) + " couldn't be cast to (Int, Int)")))._1
545- let co = (fraction(cm, as, pow(10, 0, ap(at), 0, 0, DOWN)) + fraction(cn, au, pow(10, 0, ap(av), 0, 0, DOWN)))
546- let cp = fraction(co, (ch - 100), 100)
547- let cq = makeString([ab, toString(P.caller), ad, toString(as), at, toString(au), av, toString(aw), toString(ax), ay, ci, toString(cp), toString(cl)], ",")
548- let cr = {
549- let Z = invoke(this, "createNewRequest", [cq], nil)
588+ let cn = (fraction(cl, as, pow(10, 0, ap(at), 0, 0, DOWN)) + fraction(cm, au, pow(10, 0, ap(av), 0, 0, DOWN)))
589+ let co = fraction(cn, (ch - 100), 100)
590+ let cw = makeString([ab, toString(P.caller), ad, toString(as), at, toString(au), av, toString(aw), toString(ax), ay, ci, toString(co), toString(cv)], ",")
591+ let cx = {
592+ let Z = invoke(this, "createNewRequest", [cw], nil)
550593 if ($isInstanceOf(Z, "Int"))
551594 then Z
552595 else throw(($getType(Z) + " couldn't be cast to Int"))
553596 }
554- if ((cr == cr))
597+ if ((cx == cx))
555598 then {
556- let cs = [((toString(P.caller) + "_") + toString(cl)), ay, ci, cp, toString(this), "replenishFromLand", toString(valueOrErrorMessage(cr, "Can't create new request"))]
557- let bg = reentrantInvoke(am(), "flashPosition", cs, nil)
599+ let cy = [((toString(P.caller) + "_") + toString(cv)), ay, ci, co, toString(this), "replenishFromLand", toString(valueOrErrorMessage(cx, "Can't create new request"))]
600+ let bg = reentrantInvoke(am(), "flashPosition", cy, nil)
558601 if ((bg == bg))
559602 then nil
560603 else throw("Strict value is not equal to itself.")
561604 }
562605 else throw("Strict value is not equal to itself.")
563606 }
564607 else {
565- let ct = if ((ab == a))
608+ let cz = if ((ab == a))
566609 then ar(ad, e, as, at, au, av, aw, ax, ay)
567610 else aR(ad, e, as, at, au, av, ay)
568- let cu = ct._1
569- let bM = ct._2
570- aZ(ad, toString(P.caller), cu, bM, cl, ay, ab)
611+ let cs = cz._1
612+ let bM = cz._2
613+ aZ(ad, toString(P.caller), cs, bM, cv, ay, ab)
571614 }
572615 }
573616
574617
575618
576619 @Callable(P)
577-func replenishFromLand (cv) = {
578- let cq = split(valueOrErrorMessage(getString(this, (cv + y)), ("No request with id " + cv)), ",")
620+func replenishFromLand (cA) = {
621+ let cw = split(valueOrErrorMessage(getString(this, (cA + y)), ("No request with id " + cA)), ",")
579622 if ((size(P.payments) != 1))
580623 then throw("Wrong payment size")
581- else if (if ((an(P.payments[0].assetId) != cq[10]))
624+ else if (if ((an(P.payments[0].assetId) != cw[10]))
582625 then true
583- else (P.payments[0].amount != parseIntValue(cq[11])))
626+ else (P.payments[0].amount != parseIntValue(cw[11])))
584627 then throw("Wrong payment")
585628 else {
586- let as = if ((cq[4] == an(P.payments[0].assetId)))
587- then (parseIntValue(cq[3]) + P.payments[0].amount)
588- else parseIntValue(cq[3])
589- let au = if ((cq[6] == an(P.payments[0].assetId)))
590- then (parseIntValue(cq[5]) + P.payments[0].amount)
591- else parseIntValue(cq[3])
592- let ad = cq[2]
593- let af = cq[1]
594- let ay = cq[9]
595- let bb = parseIntValue(cq[12])
596- let cw = if ((cq[0] == a))
597- then ar(ad, d, as, cq[4], au, cq[6], parseIntValue(cq[7]), parseIntValue(cq[8]), ay)
598- else if ((cq[0] == b))
599- then aR(ad, d, as, cq[4], au, cq[6], ay)
629+ let as = if ((cw[4] == an(P.payments[0].assetId)))
630+ then (parseIntValue(cw[3]) + P.payments[0].amount)
631+ else parseIntValue(cw[3])
632+ let au = if ((cw[6] == an(P.payments[0].assetId)))
633+ then (parseIntValue(cw[5]) + P.payments[0].amount)
634+ else parseIntValue(cw[3])
635+ let ad = cw[2]
636+ let af = cw[1]
637+ let ay = cw[9]
638+ let bb = parseIntValue(cw[12])
639+ let cB = if ((cw[0] == a))
640+ then ar(ad, d, as, cw[4], au, cw[6], parseIntValue(cw[7]), parseIntValue(cw[8]), ay)
641+ else if ((cw[0] == b))
642+ then aR(ad, d, as, cw[4], au, cw[6], ay)
600643 else throw("Wrong request type")
601- let cu = cw._1
602- let bM = cw._2
603- let cx = [IntegerEntry((((((cq[2] + "_") + cq[1]) + "_") + cq[12]) + p), P.payments[0].amount), StringEntry((((((cq[2] + "_") + cq[1]) + "_") + cq[12]) + q), cq[10])]
604- let cy = aZ(ad, af, cu, bM, bb, ay, cq[0])
605- $Tuple2(((cy ++ cx) :+ DeleteEntry((cv + y))), cu)
644+ let cs = cB._1
645+ let bM = cB._2
646+ let cC = [IntegerEntry((((((cw[2] + "_") + cw[1]) + "_") + cw[12]) + p), P.payments[0].amount), StringEntry((((((cw[2] + "_") + cw[1]) + "_") + cw[12]) + q), cw[10])]
647+ let cD = aZ(ad, af, cs, bM, bb, ay, cw[0])
648+ $Tuple2(((cD ++ cC) :+ DeleteEntry((cA + y))), cs)
606649 }
607650 }
608651
609652
610653
611654 @Callable(P)
612-func withdraw (ad,cz) = {
655+func withdraw (ad,cE) = {
613656 let af = toString(P.caller)
614- let cA = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
615- let cB = valueOrErrorMessage(getInteger(this, (((((ad + "_") + af) + "_") + toString(cz)) + o)), "Unknown position")
616- let cC = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(cz)) + s))
617- let cD = getIntegerValue(this, (ad + u))
618- let cE = ac(ad)
619- let cF = (cB + fraction(cB, (cD - cC), g))
657+ let cF = valueOrErrorMessage(getString(this, (A + ad)), "Unknown pool")
658+ let cG = valueOrErrorMessage(getInteger(this, (((((ad + "_") + af) + "_") + toString(cE)) + o)), "Unknown position")
659+ let cH = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(cE)) + s))
660+ let cI = getIntegerValue(this, (ad + u))
661+ let cJ = ac(ad)
662+ let cK = (cG + fraction(cG, (cI - cH), g))
620663 let W = Address(fromBase58String(ad))
621- let cG = Address(fromBase58String(af))
622- let cp = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(cz)) + p))
623- let cH = getStringValue(this, (((((ad + "_") + af) + "_") + toString(cz)) + q))
624- let cI = aa(Address(fromBase58String(ad)), cA)
625- let bQ = cI._1
626- let bR = cI._2
627- let aw = cI._3
628- let ax = cI._4
629- let ay = cI._5
630- let cJ = Q(ao(bQ))
631- if ((cJ == cJ))
664+ let cL = Address(fromBase58String(af))
665+ let co = getIntegerValue(this, (((((ad + "_") + af) + "_") + toString(cE)) + p))
666+ let cM = getStringValue(this, (((((ad + "_") + af) + "_") + toString(cE)) + q))
667+ let cN = aa(Address(fromBase58String(ad)), cF)
668+ let bQ = cN._1
669+ let bR = cN._2
670+ let aw = cN._3
671+ let ax = cN._4
672+ let ay = cN._5
673+ let cO = Q(ao(bQ))
674+ if ((cO == cO))
632675 then {
633- let cK = Q(ao(bR))
634- if ((cK == cK))
676+ let cP = Q(ao(bR))
677+ if ((cP == cP))
635678 then {
636- let bg = if ((cA == a))
637- then invoke(W, "callFunction", ["withdraw", [toString(cF)]], nil)
638- else if ((cA == b))
639- then invoke(W, "unstakeAndGet", [cF], nil)
679+ let bg = if ((cF == a))
680+ then invoke(W, "callFunction", ["withdraw", [toString(cK)]], nil)
681+ else if ((cF == b))
682+ then invoke(W, "unstakeAndGet", [cK], nil)
640683 else throw("Wrong position type")
641684 if ((bg == bg))
642685 then {
643- let cL = Q(ao(bQ))
644- let cM = Q(ao(bR))
645- let cN = $Tuple2((cL - cJ), (cM - cK))
646- let cO = cN._1
647- let cP = cN._2
648- let cQ = if ((cp > 0))
686+ let cQ = Q(ao(bQ))
687+ let cR = Q(ao(bR))
688+ let cS = $Tuple2((cQ - cO), (cR - cP))
689+ let cT = cS._1
690+ let cU = cS._2
691+ let cV = if ((co > 0))
649692 then {
650- let cR = {
651- let Z = invoke(am(), "getAssetDebt", [false, ((((ad + "_") + af) + "_") + toString(cz)), cH], nil)
693+ let cW = {
694+ let Z = invoke(am(), "getAssetDebt", [false, ((((ad + "_") + af) + "_") + toString(cE)), cM], nil)
652695 if ($isInstanceOf(Z, "Int"))
653696 then Z
654697 else throw(($getType(Z) + " couldn't be cast to Int"))
655698 }
656- let cS = if (if ((cH == bQ))
657- then (cR > cO)
699+ let cX = if (if ((cM == bQ))
700+ then (cW > cT)
658701 else false)
659- then (cR - cO)
660- else if (if ((cH == bR))
661- then (cR > cP)
702+ then (cW - cT)
703+ else if (if ((cM == bR))
704+ then (cW > cU)
662705 else false)
663- then (cR - cP)
706+ then (cW - cU)
664707 else 0
665- let cT = if ((cS > 0))
666- then cg(cA, ad, bQ, bR, aw, ax, cS, cH)
708+ let cY = if ((cX > 0))
709+ then cg(cF, ad, bQ, bR, aw, ax, cX, cM)
667710 else 0
668- if ((cT == cT))
711+ if ((cY == cY))
669712 then {
670- let cU = invoke(am(), "repay", [((af + "_") + toString(cz))], [AttachedPayment(ao(cH), cR)])
671- if ((cU == cU))
713+ let cZ = invoke(am(), "repayFor", [((af + "_") + toString(cE))], [AttachedPayment(ao(cM), cW)])
714+ if ((cZ == cZ))
672715 then {
673- let cV = Q(ao(bQ))
674- let cW = Q(ao(bR))
675- $Tuple2((cV - cJ), (cW - cK))
716+ let da = Q(ao(bQ))
717+ let db = Q(ao(bR))
718+ $Tuple2((da - cO), (db - cP))
676719 }
677720 else throw("Strict value is not equal to itself.")
678721 }
679722 else throw("Strict value is not equal to itself.")
680723 }
681- else $Tuple2(cO, cP)
682- let cX = cQ._1
683- let cY = cQ._2
684-[DeleteEntry((((((ad + "_") + af) + "_") + toString(cz)) + o)), DeleteEntry((((((ad + "_") + af) + "_") + toString(cz)) + s)), IntegerEntry((ad + t), (cE - cF)), ScriptTransfer(cG, cO, ao(bQ)), ScriptTransfer(cG, cP, ao(bR))]
724+ else $Tuple2(cT, cU)
725+ let dc = cV._1
726+ let dd = cV._2
727+[DeleteEntry((((((ad + "_") + af) + "_") + toString(cE)) + o)), DeleteEntry((((((ad + "_") + af) + "_") + toString(cE)) + s)), IntegerEntry((ad + t), (cJ - cK)), ScriptTransfer(cL, cT, ao(bQ)), ScriptTransfer(cL, cU, ao(bR))]
685728 }
686729 else throw("Strict value is not equal to itself.")
687730 }
688731 else throw("Strict value is not equal to itself.")
689732 }
690733 else throw("Strict value is not equal to itself.")
691734 }
692735
693736
694737
695738 @Callable(P)
696-func createNewRequest (cZ) = valueOrElse(O(P), {
697- let cr = (valueOrElse(getInteger(this, z), 0) + 1)
698- $Tuple2([StringEntry((toString(cr) + y), cZ), IntegerEntry(z, cr)], cr)
739+func createNewRequest (de) = valueOrElse(O(P), {
740+ let cx = (valueOrElse(getInteger(this, z), 0) + 1)
741+ $Tuple2([StringEntry((toString(cx) + y), de), IntegerEntry(z, cx)], cx)
699742 })
700743
701744
702745
703746 @Callable(P)
704-func capitalizeExKeeper (ad,ab,da,db,dc,bm,bn,bo,bp,bq,br,bs) = {
705- let dd = if (dc)
747+func capitalizeExKeeper (ad,ab,df,dg,dh,bm,bn,bo,bp,bq,br,bs) = {
748+ let di = if (dh)
706749 then be(ab, ad)
707750 else {
708- let de = if ((ab == a))
751+ let dj = if ((ab == a))
709752 then M
710753 else N
711- $Tuple2(db, de)
754+ $Tuple2(dg, dj)
712755 }
713- let df = dd._1
714- let de = dd._2
715- let dg = bi(da, db, de, bm, bn, bo, bp, bq, br, bs)
716- let aG = (df - db)
717- let dh = if ((aG > 0))
756+ let dk = di._1
757+ let dj = di._2
758+ let dl = bi(df, dg, dj, bm, bn, bo, bp, bq, br, bs)
759+ let aG = (dk - dg)
760+ let dm = if ((aG > 0))
718761 then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
719762 else nil
720- (bE(ad, ab, da, dg) ++ dh)
763+ (bE(ad, ab, df, dl) ++ dm)
721764 }
722765
723766
724767
725768 @Callable(P)
726-func capitalizeExPazzle (ad,ab,da,db,dc,bv,bw,bs) = {
727- let di = if (dc)
769+func capitalizeExPazzle (ad,ab,df,dg,dh,bv,bw,bs) = {
770+ let dn = if (dh)
728771 then be(ab, ad)
729772 else {
730- let de = if ((ab == a))
773+ let dj = if ((ab == a))
731774 then M
732775 else N
733- $Tuple2(db, de)
776+ $Tuple2(dg, dj)
734777 }
735- let df = di._1
736- let de = di._2
737- let dg = bu(da, db, de, bv, bw, bs)
738- let aG = (df - db)
739- let dh = if ((aG > 0))
778+ let dk = dn._1
779+ let dj = dn._2
780+ let dl = bu(df, dg, dj, bv, bw, bs)
781+ let aG = (dk - dg)
782+ let dm = if ((aG > 0))
740783 then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
741784 else nil
742- (bE(ad, ab, da, dg) ++ dh)
785+ (bE(ad, ab, df, dl) ++ dm)
743786 }
744787
745788
746789
747790 @Callable(P)
748-func capitalizeExSwopFi (ad,ab,da,db,dc,by,bz,bA,bB,bC,bD,bs) = {
749- let dj = if (dc)
791+func capitalizeExSwopFi (ad,ab,df,dg,dh,by,bz,bA,bB,bC,bD,bs) = {
792+ let do = if (dh)
750793 then be(ab, ad)
751794 else {
752- let de = if ((ab == a))
795+ let dj = if ((ab == a))
753796 then M
754797 else N
755- $Tuple2(db, de)
798+ $Tuple2(dg, dj)
756799 }
757- let df = dj._1
758- let de = dj._2
759- let dg = bx(da, db, de, by, bz, bA, bB, bC, bD, bs)
760- let aG = (df - db)
761- let dh = if ((aG > 0))
800+ let dk = do._1
801+ let dj = do._2
802+ let dl = bx(df, dg, dj, by, bz, bA, bB, bC, bD, bs)
803+ let aG = (dk - dg)
804+ let dm = if ((aG > 0))
762805 then [IntegerEntry((ad + B), (aG + valueOrElse(getInteger(this, (ad + B)), 0)))]
763806 else nil
764- (bE(ad, ab, da, dg) ++ dh)
807+ (bE(ad, ab, df, dl) ++ dm)
765808 }
766809
767810
768811
769812 @Callable(P)
770-func initNewPool (ab,W,dk,dl,dm) = if (if ((ab != a))
813+func initNewPool (ab,W,dp,dq,dr) = if (if ((ab != a))
771814 then (ab != b)
772815 else false)
773816 then throw("Wrong type")
774- else [IntegerEntry((W + v), dk), IntegerEntry((W + w), dl), IntegerEntry((W + x), dm), IntegerEntry((W + u), 0), StringEntry((A + W), ab)]
817+ else [IntegerEntry((W + v), dp), IntegerEntry((W + w), dq), IntegerEntry((W + x), dr), IntegerEntry((W + u), 0), StringEntry((A + W), ab)]
775818
776819
777-@Verifier(dn)
778-func do () = sigVerify(dn.bodyBytes, dn.proofs[0], dn.senderPublicKey)
820+@Verifier(ds)
821+func dt () = sigVerify(ds.bodyBytes, ds.proofs[0], ds.senderPublicKey)
779822

github/deemru/w8io/169f3d6 
151.52 ms