tx · 68dT47WUUScS9TySW4QnZK7i6Jt4CktNbH5sQZds1dM8

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.04100000 Waves

2023.05.30 14:48 [2600664] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "68dT47WUUScS9TySW4QnZK7i6Jt4CktNbH5sQZds1dM8", "fee": 4100000, "feeAssetId": null, "timestamp": 1685447286902, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "3MykVQuZLCGkQwsvN3DcRpaYJgYU9dmjfj9ECcTJ95SENZrBNxScmL6B2P3A1dhG9Gqbm2LvGYqkmDLWn13W8NBi" ], "script": "base64:BgKRAQgCEgcKBQgBCAEBEgMKAQgSBAoCCAgSBQoDCAEIEgMKAQgSBAoCCAESBgoEAQgIARIFCgMBCAgSAwoBCBIGCgQIAQgIEgUKAwgIARIOCgwICAgBBBEYGBEBARgSCgoICAgIAQQIARgSDgoMCAgIAQQYGBgYGAEYEgoKCAgIAQEBAQEBEgYKBAgICAESBAoCCAhbAAdTRl9QT09MAgJTRgAHV1hfUE9PTAICV1gAD0NBUF9GRUVfTk9fTE9BTgIJY2FwTm9Mb2FuAAxDQVBfRkVFX0xPQU4CB2NhcExvYW4AFFNUT1BMT1NTX0ZFRV9OT19MT0FOAgljYXBOb0xvYW4ADVNUT1BMT1NTX0xPQU4CB2NhcExvYW4ACExPQU5fRkVFAgRsb2FuAAtOT19MT0FOX0ZFRQIGbm9Mb2FuAAZOT19GRUUCBW5vRmVlAAZTQ0FMRTgAgMLXLwAHU0NBTEUxMACAyK+gJQAKRkVFX1NDQUxFNgDAhD0AFGtTRlBvb2xBQXNzZXRCYWxhbmNlAg9BX2Fzc2V0X2JhbGFuY2UAFGtTRlBvb2xCQXNzZXRCYWxhbmNlAg9CX2Fzc2V0X2JhbGFuY2UAD2tTRlBvb2xBQXNzZXRJZAIKQV9hc3NldF9pZAAPa1NGUG9vbEJBc3NldElkAgpCX2Fzc2V0X2lkAA5rU0ZQb29sU2hhcmVJZAIOc2hhcmVfYXNzZXRfaWQAEmtTRlBvb2xTaGFyZVN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AAprU0ZQb29sRmVlAgpjb21taXNzaW9uAA1rVXNlclBvc2l0aW9uAg5fdXNlcl9wb3NpdGlvbgARa1VzZXJQb3NpdGlvblBvb2wCE191c2VyX3Bvc2l0aW9uX3Bvb2wAEWtVc2VyQm9ycm93QW1vdW50AhxfdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYW1vdW50ABJrVXNlckJvcnJvd0Fzc2V0SWQCHl91c2VyX3Bvc2l0aW9uX2JvcnJvd19hc3NldF9pZAAQa1VzZXJQb3NpdGlvbk51bQIVX3VzZXJfcG9zaXRpb25fbnVtYmVyABVrVXNlclBvc2l0aW9uSW50ZXJlc3QCF191c2VyX3Bvc2l0aW9uX2ludGVyZXN0AAprUG9vbFRvdGFsAgtfcG9vbF90b3RhbAAOa1Bvb2xUb3RhbExvYW4CEF9wb29sX3RvdGFsX2xvYW4AEWtQb29sSW50ZXJlc3RMb2FuAhNfcG9vbF9pbnRlcmVzdF9sb2FuABNrUG9vbEludGVyZXN0Tm9Mb2FuAhZfcG9vbF9pbnRlcmVzdF9ub19sb2FuABVrQXhseUluRmVlV2l0aG91dExvYW4CFl9heGx5X2ZlZV93aXRob3V0X2xvYW4AEmtBeGx5SW5GZWVXaXRoTG9hbgITX2F4bHlfZmVlX3dpdGhfbG9hbgARa0F4bHlOb0xvYW5DYXBGZWUCF19heGx5X2ZlZV9jYXBfd2l0aF9sb2FuABNrQXhseVdpdGhMb2FuQ2FwRmVlAhVfYXhseV9mZWVfY2FwX25vX2xvYW4AFmtBeGx5U3RvcExvc3NOb0xvYW5GZWUCHF9heGx5X2ZlZV9zdG9wbG9zc193aXRoX2xvYW4AFGtBeGx5U3RvcExvc3NMb2FuRmVlAhpfYXhseV9mZWVfc3RvcGxvc3Nfbm9fbG9hbgAKa1JlcXVlc3RJZAILX3JlcXVlc3RfaWQADGtSZXF1ZXN0SXRlcgINcmVxdWVzdHNfaXRlcgAFa1Bvb2wCBXBvb2xfAAprU2hhcmVQb29sAg5fcG9vbF9zaGFyZV9pZAAOa1Bvb2xDYXBDaGFuZ2UCEF9wb29sX2NhcF9jaGFuZ2UAD2tUb2tlbkxhc3RQcmljZQILX2xhc3RfcHJpY2UADWtVc2VyU3RvcExvc3MCCl9zdG9wX2xvc3MACWtNb25leUJveAIOYXhseV9tb25leV9ib3gADmtTRkZhcm1pbmdBZGRyAhNzd29wZmlfZmFybWluZ19hZGRyAAxrTGVuZFNlcnZpY2UCEWxlbmRfc2VydmljZV9hZGRyAAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QACG1vbmV5Qm94CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFCWtNb25leUJveAIYTm8gYXhseSBtb25leUJveCBhZGRyZXNzAApleENvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFC2tFeENvbnRyYWN0AhxObyBleGNoYW5nZSBjb250cmFjdCBhZGRyZXNzAA9wcmljZU9yYWNsZUFkZHIJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa1ByaWNlT3JhY2xlAhdObyBwcmljZSBvcmFjbGUgYWRkcmVzcwAOd3hTd2FwQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUPa1d4U3dhcENvbnRyYWN0AhJObyB3eCBzd2FwIGFkZHJlc3MABlNXT1BJRAEgNAETVo5gRuJ+W6m4AUeC57EAJhKbduROS6KgfJxt7oEABFdYSUQBIMZSHoFO6m7jPMCXsA5fLPJq6e2dsobRmkJ4qGB9PhuxAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BDmFjY291bnRCYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDwBwIFBHRoaXMFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAQ1nZXRTRlBvb2xEYXRhAQhwb29sQWRkcgkAlwoFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xBQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQkFzc2V0SWQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEFBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEEgYXNzZXQgYmFsYW5jZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCHBvb2xBZGRyBRRrU0ZQb29sQkFzc2V0QmFsYW5jZQIeQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBiYWxhbmNlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFDmtTRlBvb2xTaGFyZUlkAhhDYW4ndCBnZXQgc2hhcmUgYXNzZXQgaWQBDWdldFdYUG9vbERhdGEBCHBvb2xBZGRyBANjZmcKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZBQNuaWwFA25pbAMJAAECBQFAAglMaXN0W0FueV0FAUAJAAIBCQCsAgIJAAMBBQFAAh4gY291bGRuJ3QgYmUgY2FzdCB0byBMaXN0W0FueV0DCQAAAgUDY2ZnBQNjZmcEA2FJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcABAMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGUNhbid0IGdldCBwb29sIEEgYXNzZXQgaWQEA2JJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcABQMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQEB3NoYXJlSWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgoAAUAJAJEDAgUDY2ZnAAMDCQABAgUBQAIGU3RyaW5nBQFABQR1bml0AhpDYW4ndCBnZXQgcG9vbCBMUCBhc3NldCBpZAQEYmFsQQoAAUAJAPwHBAUIcG9vbEFkZHICHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkJAMwIAgUDYUlkBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUEYmFsQQUEYmFsQQQEYmFsQgoAAUAJAPwHBAUIcG9vbEFkZHICHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkJAMwIAgUDYklkBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUEYmFsQgUEYmFsQgkAlwoFBQNhSWQFA2JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgELZ2V0UG9vbERhdGECCHBvb2xBZGRyBHR5cGUDCQAAAgUEdHlwZQUHU0ZfUE9PTAkBDWdldFNGUG9vbERhdGEBBQhwb29sQWRkcgMJAAACBQR0eXBlBQdXWF9QT09MCQENZ2V0V1hQb29sRGF0YQEFCHBvb2xBZGRyCQACAQIPV3JvbmcgcG9vbCB0eXBlAQ5nZXRTaGFyZVN1cHBseQMIcG9vbEFkZHIEdHlwZQdzaGFyZUlkAwkAAAIFBHR5cGUFB1NGX1BPT0wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUSa1NGUG9vbFNoYXJlU3VwcGx5AhxDYW4ndCBnZXQgc2hhcmUgYXNzZXQgc3VwcGx5AwkAAAIFBHR5cGUFB1dYX1BPT0wICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQdzaGFyZUlkAg1Xcm9uZyBTaGFyZUlkCHF1YW50aXR5CQACAQIPV3JvbmcgcG9vbCB0eXBlARFnZXRQb29sVG90YWxTaGFyZQEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFCmtQb29sVG90YWwAAAEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuAAABGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgIEcG9vbAR1c2VyCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0AAAABAQpnZXRBeGx5RmVlAgRwb29sB2ZlZVR5cGUDCQAAAgUHZmVlVHlwZQUMQ0FQX0ZFRV9MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tBeGx5V2l0aExvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUPQ0FQX0ZFRV9OT19MT0FOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtBeGx5Tm9Mb2FuQ2FwRmVlAwkAAAIFB2ZlZVR5cGUFCExPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEmtBeGx5SW5GZWVXaXRoTG9hbgMJAAACBQdmZWVUeXBlBQtOT19MT0FOX0ZFRQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRVrQXhseUluRmVlV2l0aG91dExvYW4JAAIBAg5Xcm9uZyBmZWUgdHlwZQEQZ2V0U0ZGYXJtaW5nQWRkcgAJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUOa1NGRmFybWluZ0FkZHICHUNhbid0IGdldCBzd29wZmkgZmFybWluZyBhZGRyARBnZXRXWEZhcm1pbmdBZGRyAQhwb29sQWRkcgQJZkNvbnRyYWN0CQEHQWRkcmVzcwEJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyAhMlc19fZmFjdG9yeUNvbnRyYWN0AiJDYW4ndCBnZXQgV1ggZmFjdG9yeSBjb250cmFjdCBhZGRyBApmYWN0cm95Q2ZnCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQlmQ29udHJhY3QCESVzX19mYWN0b3J5Q29uZmlnAhhDYW4ndCBnZXQgV1ggZmFjdG9yeSBjZmcCAl9fCQEHQWRkcmVzcwEJANkEAQkAkQMCBQpmYWN0cm95Q2ZnAAEBDmdldExlbmRTcnZBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrTGVuZFNlcnZpY2UCG0Nhbid0IGdldCBsZW5kIHNlcnZpY2UgYWRkcgEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECC01hdGNoIGVycm9yAQ5hc3NldElkRnJvbVN0cgEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARBnZXRBc3NldERlY2ltYWxzAQdhc3NldElkAwkAAAIFB2Fzc2V0SWQCBVdBVkVTAAgEByRtYXRjaDAJAOwHAQkA2QQBBQdhc3NldElkAwkAAQIFByRtYXRjaDACBUFzc2V0BAVhc3NldAUHJG1hdGNoMAgFBWFzc2V0CGRlY2ltYWxzCQACAQIQQ2FuJ3QgZmluZCBhc3NldAERZ2V0QXNzZXRQcmVjaXRpb24BB2Fzc2V0SWQJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdhc3NldElkAAAAAAUERE9XTgEOZ2V0QXNzZXRzUHJpY2UBCGFzc2V0SWRzCgEJZ2V0UHJpY2VzAgFhB2Fzc2V0SWQECmFzc2V0UHJpY2UICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQdhc3NldElkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgkAzQgCBQFhBQphc3NldFByaWNlCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlnZXRQcmljZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkAQ1nZXRTaGFyZVByaWNlAQhzaGFyZUlkcwoBCWdldFByaWNlcwIBYQdzaGFyZUlkBARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sAiBDYW4ndCBmaW5kIHBvb2wgYWRkciBieSBzaGFyZSBpZAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQLJHQwODM3Njg0NDEJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQDYUlkCAULJHQwODM3Njg0NDECXzEEA2JJZAgFCyR0MDgzNzY4NDQxAl8yBAhhQmFsYW5jZQgFCyR0MDgzNzY4NDQxAl8zBAhiQmFsYW5jZQgFCyR0MDgzNzY4NDQxAl80BAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUDYUlkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFA2JJZAkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIEC3NoYXJlU3VwcGx5CQEOZ2V0U2hhcmVTdXBwbHkDBQhwb29sQWRkcgUFcFR5cGUFB3NoYXJlSWQECkFQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNhSWQAAAAABQRET1dOBApCUHJlY2lzaW9uCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYklkAAAAAAUERE9XTgQOc2hhcmVQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdzaGFyZUlkAAAAAAUERE9XTgQDc3VtCQBkAgkAawMFCGFCYWxhbmNlBQdkUHJpY2VBBQpBUHJlY2lzaW9uCQBrAwUIYkJhbGFuY2UFB2RQcmljZUIFCkJQcmVjaXNpb24ECnNoYXJlUHJpY2UJAGsDBQNzdW0FDnNoYXJlUHJlY2lzaW9uBQtzaGFyZVN1cHBseQkAzQgCBQFhBQpzaGFyZVByaWNlCgACJGwFCHNoYXJlSWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlnZXRQcmljZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgEOZ2V0Q3Vyc0VudHJpZXMDA2FJZANiSWQHc2hhcmVJZAQMYXNzZXRzUHJpY2VzCQEOZ2V0QXNzZXRzUHJpY2UBCQDMCAIFA2FJZAkAzAgCBQNiSWQFA25pbAQKc2hhcmVQcmljZQkBDWdldFNoYXJlUHJpY2UBCQDMCAIFB3NoYXJlSWQFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQNhSWQFD2tUb2tlbkxhc3RQcmljZQkAkQMCBQxhc3NldHNQcmljZXMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQNiSWQFD2tUb2tlbkxhc3RQcmljZQkAkQMCBQxhc3NldHNQcmljZXMAAQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQdzaGFyZUlkBQ9rVG9rZW5MYXN0UHJpY2UJAJEDAgUKc2hhcmVQcmljZQAABQNuaWwBD3JlcGxlbmlzaFN3b3BGaQkEcG9vbAdmZWVUeXBlBHBtdEEJcG10QXNzZXRBBHBtdEIJcG10QXNzZXRCBGJhbEEEYmFsQgdzaGFyZUlkBBJzaGFyZUJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUHc2hhcmVJZAMJAAACBRJzaGFyZUJhbGFuY2VCZWZvcmUFEnNoYXJlQmFsYW5jZUJlZm9yZQQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAZyYXRpb0EJAGsDBQZTQ0FMRTgFBHBtdEEFBGJhbEEEBnJhdGlvQgkAawMFBlNDQUxFOAUEcG10QgUEYmFsQgQMJHQwOTk0NjEwMjM4AwkAZgIFBnJhdGlvQgUGcmF0aW9BBANwbXQJAG4EBQRiYWxCBQZyYXRpb0EFBlNDQUxFOAUHQ0VJTElORwkAlgoEBQRwbXRBBQNwbXQJAGUCBQRwbXRCBQNwbXQFCXBtdEFzc2V0QgQDcG10CQBuBAUEYmFsQQUGcmF0aW9CBQZTQ0FMRTgFB0NFSUxJTkcJAJYKBAUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQlwbXRBc3NldEEECnBtdEFtb3VudEEIBQwkdDA5OTQ2MTAyMzgCXzEECnBtdEFtb3VudEIIBQwkdDA5OTQ2MTAyMzgCXzIEBmNoYW5nZQgFDCR0MDk5NDYxMDIzOAJfMwQNY2hhbmdlQXNzZXRJZAgFDCR0MDk5NDYxMDIzOAJfNAQEaW52MQMDCQBmAgUKcG10QW1vdW50QQAACQBmAgUKcG10QW1vdW50QgAABwQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QQUKcG10QW1vdW50QQkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUJcG10QXNzZXRCBQpwbXRBbW91bnRCBQNuaWwJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAhZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zCQDMCAIJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzAAADCQAAAgUEaW52MQUEaW52MQQEaW52MgMJAGYCBQZjaGFuZ2UAAAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFDWNoYW5nZUFzc2V0SWQFBmNoYW5nZQUDbmlsBAR2YXJzCQDMCAICATAJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsCQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIVcmVwbGVuaXNoV2l0aE9uZVRva2VuCQDMCAIFBHZhcnMFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYyBQRpbnYyBBFzaGFyZUJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQdzaGFyZUlkBAt0b3RhbFN0YWtlZAkAZQIFEXNoYXJlQmFsYW5jZUFmdGVyBRJzaGFyZUJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBARpbnYzCQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIPbG9ja1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAURdXNlclNoYXJlRm9yU3Rha2UFA25pbAMJAAACBQRpbnYzBQRpbnYzCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQtyZXBsZW5pc2hXWAcEcG9vbAdmZWVUeXBlBHBtdEEJcG10QXNzZXRBBHBtdEIJcG10QXNzZXRCB3NoYXJlSWQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMTE2ODkxMjUzOAMDCQBmAgUEcG10QQAACQBmAgUEcG10QgAABwQKZXZhbFB1dEluQQkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgIgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkJAMwIAgUEcG10QQUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nAgJfXwMJAAACBQpldmFsUHV0SW5BBQpldmFsUHV0SW5BBApldmFsUHV0SW5CCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAh9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQDMCAIFBHBtdEIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUKZXZhbFB1dEluQgUKZXZhbFB1dEluQgQFbHBJbkEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAEEBWxwSW5CCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQgABAwkAZgIFBWxwSW5CBQVscEluQQQGcG10SW5CCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQAICQCWCgQFBHBtdEEFBnBtdEluQgkAZQIFBHBtdEIFBnBtdEluQgUJcG10QXNzZXRCBAZwbXRJbkEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAcJAJYKBAUGcG10SW5BBQRwbXRCCQBlAgUEcG10QQUGcG10SW5BBQlwbXRBc3NldEEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQBmAgUEcG10QQAACQCWCgQFBHBtdEEFBHBtdEIFBHBtdEEFCXBtdEFzc2V0QQMJAGYCBQRwbXRCAAAJAJYKBAUEcG10QQUEcG10QgUEcG10QgUJcG10QXNzZXRCCQACAQIQcG10cyBtdXN0IGJlID4gMAQKcG10QW1vdW50QQgFDSR0MDExNjg5MTI1MzgCXzEECnBtdEFtb3VudEIIBQ0kdDAxMTY4OTEyNTM4Al8yBAZjaGFuZ2UIBQ0kdDAxMTY4OTEyNTM4Al8zBA1jaGFuZ2VBc3NldElkCAUNJHQwMTE2ODkxMjUzOAJfNAQSc2hhcmVCYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFB3NoYXJlSWQDCQAAAgUSc2hhcmVCYWxhbmNlQmVmb3JlBRJzaGFyZUJhbGFuY2VCZWZvcmUEBGludjEDAwkAZgIFCnBtdEFtb3VudEEAAAkAZgIFCnBtdEFtb3VudEIAAAcECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQlwbXRBc3NldEEFCnBtdEFtb3VudEEJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCXBtdEFzc2V0QgUKcG10QW1vdW50QgUDbmlsCQD8BwQFCHBvb2xBZGRyAgNwdXQJAMwIAgDAhD0JAMwIAgcFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYxBQRpbnYxBARpbnYyAwkAZgIFBmNoYW5nZQAABAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUNY2hhbmdlQXNzZXRJZAUGY2hhbmdlBQNuaWwJAPwHBAUIcG9vbEFkZHICCXB1dE9uZVRrbgkAzAgCAAAJAMwIAgcFA25pbAUIcGF5bWVudHMAAAMJAAACBQRpbnYyBQRpbnYyBBFzaGFyZUJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQdzaGFyZUlkBAt0b3RhbFN0YWtlZAkAZQIFEXNoYXJlQmFsYW5jZUFmdGVyBRJzaGFyZUJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBARpbnYzCQD8BwQJARBnZXRXWEZhcm1pbmdBZGRyAQUIcG9vbEFkZHICBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJANkEAQUHc2hhcmVJZAURdXNlclNoYXJlRm9yU3Rha2UFA25pbAMJAAACBQRpbnYzBQRpbnYzCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ9yZXBsZW5pc2hCeVR5cGUKBHR5cGUEcG9vbAdmZWVUeXBlBHBtdEEDQUlkBHBtdEIDQklkBGJhbEEEYmFsQgdzaGFyZUlkAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ9yZXBsZW5pc2hTd29wRmkJBQRwb29sBQdmZWVUeXBlBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAMJAAACBQR0eXBlBQdXWF9QT09MCQELcmVwbGVuaXNoV1gHBQRwb29sBQdmZWVUeXBlBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUHc2hhcmVJZAkAAgECD1dyb25nIHBvb2wgdHlwZQEQcmVwbGVuaXNoRW50cmllcwgEcG9vbAR1c2VyDHN0YWtlZEFtb3VudA1heGx5RmVlQW1vdW50BnBvc051bQdzaGFyZUlkBHR5cGUId2l0aExvYW4EC3RvdGFsQW1vdW50CQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBA90b3RhbEFtb3VudExvYW4JARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAQNJHQwMTQ1NTYxNDc5NAMFCHdpdGhMb2FuCQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAGQCBQ90b3RhbEFtb3VudExvYW4FDHN0YWtlZEFtb3VudAkAlAoCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4FD3RvdGFsQW1vdW50TG9hbgQPY3VyUG9vbEludGVyZXN0CAUNJHQwMTQ1NTYxNDc5NAJfMQQTdG90YWxTdGFrZWRXaXRoTG9hbggFDSR0MDE0NTU2MTQ3OTQCXzIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZAIFC3RvdGFsQW1vdW50BQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGQCBQ90b3RhbEFtb3VudExvYW4FDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBQ1rVXNlclBvc2l0aW9uBQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUVa1VzZXJQb3NpdGlvbkludGVyZXN0BQ9jdXJQb29sSW50ZXJlc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FBnBvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUNYXhseUZlZUFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBC2NsYWltRmFybWVkAgR0eXBlBHBvb2wDCQAAAgUEdHlwZQUHU0ZfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACBWNsYWltCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQZTV09QSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQUHV1hfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQRXWElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHY2xhaW1XWAkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBFdYSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUBDmV4Y2hhbmdlS2VlcGVyCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgRzd2FwCQDMCAIFCWFtb3VudHNJbgkAzAgCBQlhZGRyZXNzZXMJAMwIAgUPYXNzZXRzVG9SZWNlaXZlCQDMCAIFC2VzdFJlY2VpdmVkCQDMCAIFEXNsaXBwYWdlVG9sZXJhbmNlCQDMCAIFC21pblJlY2VpdmVkCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVB1enpsZQYHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgpwdXp6bGVTd2FwCQDMCAIFCXJvdXRlc1N0cgkAzAgCBQxtaW5Ub1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlU3dvcEZpCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldApleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0Agpzd29wZmlTd2FwCQDMCAIFCmV4Y2hhbmdlcnMJAMwIAgUOZXhjaGFuZ2Vyc1R5cGUJAMwIAgUFYXJnczEJAMwIAgUFYXJnczIJAMwIAgURcm91dGluZ0Fzc2V0c0tleXMJAMwIAgUSbWluQW1vdW50VG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQpjYXBpdGFsaXplBARwb29sBXBUeXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMTc3NjAxNzgzOQkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANBSWQIBQ0kdDAxNzc2MDE3ODM5Al8xBANCSWQIBQ0kdDAxNzc2MDE3ODM5Al8yBARiYWxBCAUNJHQwMTc3NjAxNzgzOQJfMwQEYmFsQggFDSR0MDE3NzYwMTc4MzkCXzQEB3NoYXJlSWQIBQ0kdDAxNzc2MDE3ODM5Al81BA0kdDAxNzg0MjE3OTIyAwkAAAIFB3Rva2VuSWQFA0FJZAkAlAoCBQt0b2tlbkFtb3VudAAACQCUCgIAAAULdG9rZW5BbW91bnQEBHBtdEEIBQ0kdDAxNzg0MjE3OTIyAl8xBARwbXRCCAUNJHQwMTc4NDIxNzkyMgJfMgQNJHQwMTc5MjUxODAyOQkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQZOT19GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAxzdGFrZWRBbW91bnQIBQ0kdDAxNzkyNTE4MDI5Al8xBAJuZggFDSR0MDE3OTI1MTgwMjkCXzIEE2N1clBvb2xJbnRlcmVzdExvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgAABBVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAEEHRvdGFsU2hhcmVBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wEGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBAtsb2FuUGVyY2VudAkAawMFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUGU0NBTEU4BRB0b3RhbFNoYXJlQW1vdW50BApzdGFrZWRMb2FuCQBrAwUMc3Rha2VkQW1vdW50BQtsb2FuUGVyY2VudAUGU0NBTEU4BAxzdGFrZWROb0xvYW4JAGUCBQxzdGFrZWRBbW91bnQFCnN0YWtlZExvYW4ED25ld0ludGVyZXN0TG9hbgkAZAIFE2N1clBvb2xJbnRlcmVzdExvYW4JAGsDBQpzdGFrZWRMb2FuBQdTQ0FMRTEwBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4EEW5ld0ludGVyZXN0Tm9Mb2FuCQBkAgUVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuBQdTQ0FMRTEwCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuBAtheGx5RmVlTG9hbgkAawMFCnN0YWtlZExvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUMQ0FQX0ZFRV9MT0FOBQpGRUVfU0NBTEU2BA1heGx5RmVlTm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuCQEKZ2V0QXhseUZlZQIFBHBvb2wFD0NBUF9GRUVfTk9fTE9BTgUKRkVFX1NDQUxFNgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuBQ9uZXdJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgURbmV3SW50ZXJlc3ROb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJAGUCCQBkAgUQdG90YWxTaGFyZUFtb3VudAUMc3Rha2VkQW1vdW50BQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJAGQCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FCnN0YWtlZExvYW4FC2F4bHlGZWVMb2FuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94CQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4JANkEAQUHc2hhcmVJZAUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMDBQNBSWQFA0JJZAUHc2hhcmVJZAESZXhjaGFuZ2VEaXJlY3RseVNGBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBAlmZWVTY2FsZTYAwIQ9BANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCHBvb2xBZGRyBQprU0ZQb29sRmVlBAxhbW50R2V0Tm9GZWUJAGsDBRBhbW91bnRUb2tlblRvR2V0BQlmZWVTY2FsZTYJAGUCBQlmZWVTY2FsZTYFA2ZlZQQNJHQwMTk3MTcyMDAwNQMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFBGJhbEEFDGFtbnRHZXROb0ZlZQkAZQIFBGJhbEIFDGFtbnRHZXROb0ZlZQkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEIEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQgUMYW1udEdldE5vRmVlCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAxOTcxNzIwMDA1Al8xBAphc3NldFRvUGF5CAUNJHQwMTk3MTcyMDAwNQJfMgkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCGV4Y2hhbmdlCQDMCAIJAMwIAgIBMQUDbmlsBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5BQNuaWwBEmV4Y2hhbmdlRGlyZWN0bHlXWAcEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQFcHJGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDnd4U3dhcENvbnRyYWN0Ag8lc19fcHJvdG9jb2xGZWUEBHBGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDnd4U3dhcENvbnRyYWN0Agslc19fcG9vbEZlZQQIZmVlU2NhbGUJALYCAQCAwtcvBA0kdDAyMDQ4NDIwNzkyAwkAAAIFD2Fzc2V0VG9rZW5Ub0dldAUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CQBrAwUEYmFsQQUQYW1vdW50VG9rZW5Ub0dldAkAZQIFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRCBAthbW91bnRUb1BheQkAawMFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQJAGUCBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAyMDQ4NDIwNzkyAl8xBAphc3NldFRvUGF5CAUNJHQwMjA0ODQyMDc5MgJfMgQSYW1vdW50VG9QYXlXaXRoRmVlCQCgAwEJALwCAwkAtgIBBQthbW91bnRUb1BheQUIZmVlU2NhbGUJALgCAgUIZmVlU2NhbGUJALYCAQkAZAIFBXByRmVlBQRwRmVlCQD8BwQFDnd4U3dhcENvbnRyYWN0AgRzd2FwCQDMCAIAAQkAzAgCBQ9hc3NldFRva2VuVG9HZXQJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCmFzc2V0VG9QYXkFEmFtb3VudFRvUGF5V2l0aEZlZQUDbmlsARBleGNoYW5nZURpcmVjdGx5CAR0eXBlBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wJARJleGNoYW5nZURpcmVjdGx5U0YHBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQFD2Fzc2V0VG9rZW5Ub0dldAkBEmV4Y2hhbmdlRGlyZWN0bHlXWAcFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgUEYmFsQQUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAUPYXNzZXRUb2tlblRvR2V0ARJ3aXRoZHJhd0Ftb3VudENhbGMEBHBvb2wPdXNlckNhbldpdGhkcmF3BGRlYnQLYm9ycm93QXNzZXQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDIxNjU3MjE3MzMJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQIYXNzZXRJZEEIBQ0kdDAyMTY1NzIxNzMzAl8xBAhhc3NldElkQggFDSR0MDIxNjU3MjE3MzMCXzIEBGJhbEEIBQ0kdDAyMTY1NzIxNzMzAl8zBARiYWxCCAUNJHQwMjE2NTcyMTczMwJfNAQHc2hhcmVJZAgFDSR0MDIxNjU3MjE3MzMCXzUEC2NCYWxBQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQMJAAACBQtjQmFsQUJlZm9yZQULY0JhbEFCZWZvcmUEC2NCYWxCQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgMJAAACBQtjQmFsQkJlZm9yZQULY0JhbEJCZWZvcmUEA2ludgMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsBQNuaWwDCQAAAgUFcFR5cGUFB1dYX1BPT0wJAPwHBAUIcG9vbEFkZHICDXVuc3Rha2VBbmRHZXQJAMwIAgUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAkAAgECE1dyb25nIHBvc2l0aW9uIHR5cGUDCQAAAgUDaW52BQNpbnYECmNCYWxBQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBApjQmFsQkFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgQNJHQwMjIyNDUyMjMzNAkAlAoCCQBlAgUKY0JhbEFBZnRlcgULY0JhbEFCZWZvcmUJAGUCBQpjQmFsQkFmdGVyBQtjQmFsQkJlZm9yZQQNdG9rZW5zQW1vdW50QQgFDSR0MDIyMjQ1MjIzMzQCXzEEDXRva2Vuc0Ftb3VudEIIBQ0kdDAyMjI0NTIyMzM0Al8yBA0kdDAyMjMzNzIzMDMzAwkAZgIFBGRlYnQAAAQNYW1vdW50VG9HZXRFeAMDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQBmAgUEZGVidAUNdG9rZW5zQW1vdW50QQcJAGUCBQRkZWJ0BQ10b2tlbnNBbW91bnRBAwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEIJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRCBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEIAAAQFZXhJbnYDCQBmAgUNYW1vdW50VG9HZXRFeAAACQEQZXhjaGFuZ2VEaXJlY3RseQgFBXBUeXBlBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFDWFtb3VudFRvR2V0RXgFC2JvcnJvd0Fzc2V0AAADCQAAAgUFZXhJbnYFBWV4SW52BA9jQmFsQUFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBA9jQmFsQkFmdGVyUmVwYXkJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCCQCUCgIJAGUCBQ9jQmFsQUFmdGVyUmVwYXkFC2NCYWxBQmVmb3JlCQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQ10b2tlbnNBbW91bnRBBQ10b2tlbnNBbW91bnRCBA10b1VzZXJBbW91bnRBCAUNJHQwMjIzMzcyMzAzMwJfMQQNdG9Vc2VyQW1vdW50QggFDSR0MDIyMzM3MjMwMzMCXzIJAJkKBwUNdG9Vc2VyQW1vdW50QQUIYXNzZXRJZEEFDXRvVXNlckFtb3VudEIFCGFzc2V0SWRCBQpjQmFsQUFmdGVyBQpjQmFsQkFmdGVyBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBHVzZXIEcG9vbAVwb3NJZAhib3Jyb3dlZAQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMdXNlckludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAQMcG9vbEludGVyZXN0AwUIYm9ycm93ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgkAZAIFB3BBbW91bnQJAGsDBQdwQW1vdW50CQBlAgUMcG9vbEludGVyZXN0BQx1c2VySW50ZXJlc3QFB1NDQUxFMTABDndpdGhkcmF3VG9Vc2VyBAR1c2VyBHBvb2wFcG9zSWQIc3RvcExvc3MEB3BBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24CEFVua25vd24gcG9zaXRpb24EDHVzZXJJbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUFcG9zSWQJAGYCBQxib3Jyb3dBbW91bnQAAAQOcG9vbFRvdGFsU2hhcmUJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wECHVzZXJBZGRyCQEHQWRkcmVzcwEJANkEAQUEdXNlcgQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBARkZWJ0AwkAZgIFDGJvcnJvd0Ftb3VudAAACgABQAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAgxnZXRBc3NldERlYnQJAMwIAgcJAMwIAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAkAzAgCBQtib3Jyb3dBc3NldAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAAEDSR0MDI0NTI0MjQ2NzcJARJ3aXRoZHJhd0Ftb3VudENhbGMEBQRwb29sBQ91c2VyQ2FuV2l0aGRyYXcFBGRlYnQFC2JvcnJvd0Fzc2V0AwkAAAIFDSR0MDI0NTI0MjQ2NzcFDSR0MDI0NTI0MjQ2NzcEB3NoYXJlSWQIBQ0kdDAyNDUyNDI0Njc3Al83BApjQmFsQkFmdGVyCAUNJHQwMjQ1MjQyNDY3NwJfNgQKY0JhbEFBZnRlcggFDSR0MDI0NTI0MjQ2NzcCXzUECGFzc2V0SWRCCAUNJHQwMjQ1MjQyNDY3NwJfNAQNdG9Vc2VyQW1vdW50QggFDSR0MDI0NTI0MjQ2NzcCXzMECGFzc2V0SWRBCAUNJHQwMjQ1MjQyNDY3NwJfMgQNdG9Vc2VyQW1vdW50QQgFDSR0MDI0NTI0MjQ2NzcCXzEEC2Nsb3NlRGJ0SW52AwkAZgIFBGRlYnQAAAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAghyZXBheUZvcgkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQULYm9ycm93QXNzZXQFBGRlYnQFA25pbAAAAwkAAAIFC2Nsb3NlRGJ0SW52BQtjbG9zZURidEludgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgUOcG9vbFRvdGFsU2hhcmUFD3VzZXJDYW5XaXRoZHJhdwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQh1c2VyQWRkcgUNdG9Vc2VyQW1vdW50QQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEIJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCBQNuaWwJAQ5nZXRDdXJzRW50cmllcwMFCGFzc2V0SWRBBQhhc3NldElkQgUHc2hhcmVJZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEMcGFyc2VSZXF1ZXN0AQlyZXF1ZXN0SWQEB3JlcXVlc3QJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkCQCsAgICE05vIHJlcXVlc3Qgd2l0aCBpZCAFCXJlcXVlc3RJZAIBLAQEdXNlcgkAkQMCBQdyZXF1ZXN0AAAEBHBvb2wJAJEDAgUHcmVxdWVzdAABBARwbXRBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAACBANBSWQJAJEDAgUHcmVxdWVzdAADBARwbXRCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAEBANCSWQJAJEDAgUHcmVxdWVzdAAFBARiYWxBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAGBARiYWxCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAHBAdzaGFyZUlkCQCRAwIFB3JlcXVlc3QACAQHYndBc3NldAkAkQMCBQdyZXF1ZXN0AAkECGJ3QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAKCQCdCgsFBHVzZXIFBHBvb2wFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBQdid0Fzc2V0BQhid0Ftb3VudAEJdW5zdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BA0kdDAyNTkzOTI2Mjk2AwkAAAIFBXBUeXBlBQdTRl9QT09MCQCVCgMJARBnZXRTRkZhcm1pbmdBZGRyAAITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIFBmFtb3VudAUDbmlsAwkAAAIFBXBUeXBlBQdXWF9QT09MCQCVCgMJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3Vuc3Rha2UJAMwIAgUHc2hhcmVJZAkAzAgCBQZhbW91bnQFA25pbAkAAgECD1dyb25nIHBvb2wgdHlwZQQIZmFybUFkZHIIBQ0kdDAyNTkzOTI2Mjk2Al8xBAVmTmFtZQgFDSR0MDI1OTM5MjYyOTYCXzIEBnBhcmFtcwgFDSR0MDI1OTM5MjYyOTYCXzMEA2ludgkA/AcEBQhmYXJtQWRkcgUFZk5hbWUFBnBhcmFtcwUDbmlsAwkAAAIFA2ludgUDaW52BQZhbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4RAWkBEXJlcGxlbmlzaEVWQUxPTkxZBQRwb29sCGxldmVyYWdlDWJvcnJvd0Fzc2V0SWQEcG10QQRwbXRCAwMJAGYCAGQFCGxldmVyYWdlBgkAZgIFCGxldmVyYWdlAKwCCQACAQIfTGV2ZXJhZ2UgY2FuJ3QgYmUgPDEwMCBhbmQgPjMwMAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDI2NjkyMjY3ODIJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMjY2OTIyNjc4MgJfMQQDQklkCAUNJHQwMjY2OTIyNjc4MgJfMgQEYmFsQQgFDSR0MDI2NjkyMjY3ODICXzMEBGJhbEIIBQ0kdDAyNjY5MjI2NzgyAl80BAdzaGFyZUlkCAUNJHQwMjY2OTIyNjc4MgJfNQQMYm9ycm93QW1vdW50AwkAZgIFCGxldmVyYWdlAGQEB2RQcmljZUEICgABQAkA/AcEBQ9wcmljZU9yYWNsZUFkZHICCWdldFRXQVA2MAkAzAgCBQNBSWQJAMwIAgcFA25pbAUDbmlsAwkAAQIFAUACCihJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAl8yBAdkUHJpY2VCCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUDQklkCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQMcGF5ZEluRG9sbGFyCQBkAgkAawMFB2RQcmljZUEFBHBtdEEJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNBSWQAAAAABQRET1dOCQBrAwUHZFByaWNlQgUEcG10QgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA0JJZAAAAAAFBERPV04JAGsDBQxwYXlkSW5Eb2xsYXIJAGUCBQhsZXZlcmFnZQBkAGQJAJQKAggJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAULTk9fTE9BTl9GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkAl8xAAAFA25pbAFpARpnZXRTaGFyZUFzc2V0UHJpY2VSRUFET05MWQEHc2hhcmVJZAQLc2hhcmVQcmljZXMJAQ1nZXRTaGFyZVByaWNlAQkAzAgCBQdzaGFyZUlkBQNuaWwJAJQKAgUDbmlsCQCRAwIFC3NoYXJlUHJpY2VzAAABaQEiZ2V0VXNlclBvc2l0aW9uU2hhcmVBbW91bnRSRUFET05MWQIEdXNlcgZwb3NOdW0EBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sAhBVbmtub3duIHBvc2l0aW9uBAxib3Jyb3dBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQZwb3NOdW0FEWtVc2VyQm9ycm93QW1vdW50BA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQZwb3NOdW0JAGYCBQxib3Jyb3dBbW91bnQAAAkAlAoCBQNuaWwFD3VzZXJDYW5XaXRoZHJhdwFpAQlyZXBsZW5pc2gDBHBvb2wIbGV2ZXJhZ2UNYm9ycm93QXNzZXRJZAMDCQBmAgBkBQhsZXZlcmFnZQYJAGYCBQhsZXZlcmFnZQCsAgkAAgECH0xldmVyYWdlIGNhbid0IGJlIDwxMDAgYW5kID4zMDAEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAyODc5ODI4ODg4CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDI4Nzk4Mjg4ODgCXzEEA0JJZAgFDSR0MDI4Nzk4Mjg4ODgCXzIEBGJhbEEIBQ0kdDAyODc5ODI4ODg4Al8zBARiYWxCCAUNJHQwMjg3OTgyODg4OAJfNAQHc2hhcmVJZAgFDSR0MDI4Nzk4Mjg4ODgCXzUEDSR0MDI4ODkxMjk1MjgDCQAAAgkAkAMBCAUBaQhwYXltZW50cwACAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDQUlkCQACAQIVV3JvbmcgcGF5bWVudCBhc3NldCBBAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAUDQklkCQACAQIVV3JvbmcgcGF5bWVudCBhc3NldCBCCQCWCgQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNBSWQICQCRAwIIBQFpCHBheW1lbnRzAAEGYW1vdW50BQNCSWQDCQAAAgkAkAMBCAUBaQhwYXltZW50cwABAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQFA0FJZAkAlgoECAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDQUlkAAAFA0JJZAMJAAACCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQNCSWQJAJYKBAAABQNBSWQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQNCSWQJAAIBAg1Xcm9uZyBwYXltZW50CQACAQIcT25lIG9yIHR3byBwYXltZW50cyBleHBlY3RlZAQEcG10QQgFDSR0MDI4ODkxMjk1MjgCXzEECXBtdEFzc2V0QQgFDSR0MDI4ODkxMjk1MjgCXzIEBHBtdEIIBQ0kdDAyODg5MTI5NTI4Al8zBAlwbXRBc3NldEIIBQ0kdDAyODg5MTI5NTI4Al80BAluZXdQb3NOdW0JARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXICBQRwb29sCQClCAEIBQFpBmNhbGxlcgMJAGYCBQhsZXZlcmFnZQBkBAdkUHJpY2VBCAoAAUAJAPwHBAUPcHJpY2VPcmFjbGVBZGRyAglnZXRUV0FQNjAJAMwIAgUJcG10QXNzZXRBCQDMCAIHBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQJfMgQHZFByaWNlQggKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFCXBtdEFzc2V0QgkAzAgCBwUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkCXzIEDHBheWRJbkRvbGxhcgkAZAIJAGsDBQdkUHJpY2VBBQRwbXRBCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUJcG10QXNzZXRBAAAAAAUERE9XTgkAawMFB2RQcmljZUIFBHBtdEIJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQlwbXRBc3NldEIAAAAABQRET1dOBAtib3Jyb3dQcmljZQMJAAACBQ1ib3Jyb3dBc3NldElkBQNBSWQFB2RQcmljZUEFB2RQcmljZUIEDGJvcnJvd0Ftb3VudAkAaQIJAGsDBQxwYXlkSW5Eb2xsYXIJAGUCBQhsZXZlcmFnZQBkAGQFC2JvcnJvd1ByaWNlBAdyZXF1ZXN0CQC5CQIJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUEcG9vbAkAzAgCCQCkAwEFBHBtdEEJAMwIAgUJcG10QXNzZXRBCQDMCAIJAKQDAQUEcG10QgkAzAgCBQlwbXRBc3NldEIJAMwIAgkApAMBBQRiYWxBCQDMCAIJAKQDAQUEYmFsQgkAzAgCBQdzaGFyZUlkCQDMCAIFDWJvcnJvd0Fzc2V0SWQJAMwIAgkApAMBBQxib3Jyb3dBbW91bnQFA25pbAIBLAQMbmV3UmVxdWVzdElkCgABQAkA/AcEBQR0aGlzAhBjcmVhdGVOZXdSZXF1ZXN0CQDMCAIFB3JlcXVlc3QFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAMJAAACBQxuZXdSZXF1ZXN0SWQFDG5ld1JlcXVlc3RJZAQEYXJncwkAzAgCCQCsAgIJAKwCAgkApQgBCAUBaQZjYWxsZXICAV8JAKQDAQUJbmV3UG9zTnVtCQDMCAIFB3NoYXJlSWQJAMwIAgUNYm9ycm93QXNzZXRJZAkAzAgCBQxib3Jyb3dBbW91bnQJAMwIAgkApQgBBQR0aGlzCQDMCAICEXJlcGxlbmlzaEZyb21MYW5kCQDMCAIJAKQDAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCBQxuZXdSZXF1ZXN0SWQCGENhbid0IGNyZWF0ZSBuZXcgcmVxdWVzdAUDbmlsBANpbnYJAP0HBAkBDmdldExlbmRTcnZBZGRyAAINZmxhc2hQb3NpdGlvbgUEYXJncwUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDMwOTExMzEwMjMJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAULTk9fTE9BTl9GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMzA5MTEzMTAyMwJfMQQHYXhseUZlZQgFDSR0MDMwOTExMzEwMjMCXzIJAM4IAgkBEHJlcGxlbmlzaEVudHJpZXMIBQRwb29sCQClCAEIBQFpBmNhbGxlcgUKdXNlclN0YWtlZAUHYXhseUZlZQUJbmV3UG9zTnVtBQdzaGFyZUlkBQVwVHlwZQcJAQ5nZXRDdXJzRW50cmllcwMFA0FJZAUDQklkBQdzaGFyZUlkAWkBEXJlcGxlbmlzaEZyb21MYW5kAQlyZXF1ZXN0SWQEDSR0MDMxMjM0MzEzMzgJAQxwYXJzZVJlcXVlc3QBBQlyZXF1ZXN0SWQEBHVzZXIIBQ0kdDAzMTIzNDMxMzM4Al8xBARwb29sCAUNJHQwMzEyMzQzMTMzOAJfMgQEcG10QQgFDSR0MDMxMjM0MzEzMzgCXzMEA0FJZAgFDSR0MDMxMjM0MzEzMzgCXzQEBHBtdEIIBQ0kdDAzMTIzNDMxMzM4Al81BANCSWQIBQ0kdDAzMTIzNDMxMzM4Al82BARiYWxBCAUNJHQwMzEyMzQzMTMzOAJfNwQEYmFsQggFDSR0MDMxMjM0MzEzMzgCXzgEB3NoYXJlSWQIBQ0kdDAzMTIzNDMxMzM4Al85BAdid0Fzc2V0CAUNJHQwMzEyMzQzMTMzOANfMTAECGJ3QW1vdW50CAUNJHQwMzEyMzQzMTMzOANfMTEDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhJXcm9uZyBwYXltZW50IHNpemUDAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUHYndBc3NldAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQhid0Ftb3VudAkAAgECDVdyb25nIHBheW1lbnQEDSR0MDMxNTI4MzE2NTIDCQAAAgUDQUlkBQdid0Fzc2V0CQCUCgIJAGQCBQRwbXRBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB3BtdEFsbEEIBQ0kdDAzMTUyODMxNjUyAl8xBAdwbXRBbGxCCAUNJHQwMzE1MjgzMTY1MgJfMgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDMxNzM0MzE4NDMJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUITE9BTl9GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMzE3MzQzMTg0MwJfMQQHYXhseUZlZQgFDSR0MDMxNzM0MzE4NDMCXzIEBnBvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgIFBHBvb2wJAKUIAQgFAWkGY2FsbGVyBA1ib3Jyb3dFbnRyaWVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyQm9ycm93QW1vdW50BQhid0Ftb3VudAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEmtVc2VyQm9ycm93QXNzZXRJZAUHYndBc3NldAUDbmlsBAdlbnRyaWVzCQEQcmVwbGVuaXNoRW50cmllcwgFBHBvb2wFBHVzZXIFCnVzZXJTdGFrZWQFB2F4bHlGZWUFBnBvc051bQUHc2hhcmVJZAUFcFR5cGUGCQCUCgIJAM0IAgkAzggCCQDOCAIFB2VudHJpZXMJAQ5nZXRDdXJzRW50cmllcwMFA0FJZAUDQklkBQdzaGFyZUlkBQ1ib3Jyb3dFbnRyaWVzCQELRGVsZXRlRW50cnkBCQCsAgIFCXJlcXVlc3RJZAUKa1JlcXVlc3RJZAUKdXNlclN0YWtlZAFpAQh3aXRoZHJhdwIEcG9vbAVwb3NJZAkBDndpdGhkcmF3VG9Vc2VyBAkApQgBCAUBaQZjYWxsZXIFBHBvb2wJAKQDAQUFcG9zSWQHAWkBFGNyZWF0ZVVwZGF0ZVN0b3BMb3NzBAVwb3NJZAZwb29sSWQHYXNzZXRJZAVwcmljZQQQdG9rZW5PcmFjbGVQcmljZQgKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFB2Fzc2V0SWQJAMwIAgcFA25pbAUDbmlsAwkAAQIFAUACCihJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAl8xAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUGcG9vbElkAgFfCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAAgECGlRoZXJlIGFyZSBubyB1c2VyIHBvc2l0aW9uAwkAZwIAAAUFcHJpY2UJAAIBAhxQcmljZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwAwkAZgIFBXByaWNlBRB0b2tlbk9yYWNsZVByaWNlCQACAQIrUHJpY2UgbXVzdCBiZSBsZXNzIHRoYW4gY3VycmVudCB0b2tlbiBwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzBQVwcmljZQUDbmlsAWkBDmRlbGV0ZVN0b3BMb3NzAwVwb3NJZAZwb29sSWQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzCQACAQIITm8gZW50cnkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzBQNuaWwBaQEQY3JlYXRlTmV3UmVxdWVzdAEGcGFyYW1zCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkEDG5ld1JlcXVlc3RJZAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUMa1JlcXVlc3RJdGVyAAAAAQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkApAMBBQxuZXdSZXF1ZXN0SWQFCmtSZXF1ZXN0SWQFBnBhcmFtcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa1JlcXVlc3RJdGVyBQxuZXdSZXF1ZXN0SWQFA25pbAUMbmV3UmVxdWVzdElkAWkBCHN0b3BMb3NzBAR1c2VyBXBvc0lkBHBvb2wHYXNzZXRJZAQQdG9rZW5PcmFjbGVQcmljZQgKAAFACQD8BwQFD3ByaWNlT3JhY2xlQWRkcgIJZ2V0VFdBUDYwCQDMCAIFB2Fzc2V0SWQJAMwIAgcFA25pbAUDbmlsAwkAAQIFAUACCihJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAl8xAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUFcG9zSWQCAV8FBHBvb2wCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MJAAIBAghObyBlbnRyeQkAzQgCCQEOd2l0aGRyYXdUb1VzZXIECQClCAEIBQFpBmNhbGxlcgUEcG9vbAkApAMBBQVwb3NJZAYJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQVwb3NJZAIBXwUEcG9vbAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwFpAQlsaXF1aWRhdGUDBHVzZXIFcG9zSWQPbGlxdWlkYXRlQW1vdW50BARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyUG9zaXRpb25Qb29sAgtubyBwb3NpdGlvbgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDM0NjI2MzQ3MTYJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzQ2MjYzNDcxNgJfMQQDQklkCAUNJHQwMzQ2MjYzNDcxNgJfMgQEYmFsQQgFDSR0MDM0NjI2MzQ3MTYCXzMEBGJhbEIIBQ0kdDAzNDYyNjM0NzE2Al80BAdzaGFyZUlkCAUNJHQwMzQ2MjYzNDcxNgJfNQQGYW1vdW50CQEJdW5zdGFrZUxQBAUEcG9vbAUFcFR5cGUFB3NoYXJlSWQFD2xpcXVpZGF0ZUFtb3VudAQMYm9ycm93QW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyQm9ycm93QW1vdW50BAtib3Jyb3dBc3NldAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRJrVXNlckJvcnJvd0Fzc2V0SWQED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBXBvc0lkCQBmAgUMYm9ycm93QW1vdW50AAADCQBmAgUMYm9ycm93QW1vdW50AAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuCQBlAgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBQ9saXF1aWRhdGVBbW91bnQFA25pbAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBQ1rVXNlclBvc2l0aW9uCQBlAgUPdXNlckNhbldpdGhkcmF3BQ9saXF1aWRhdGVBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQZhbW91bnQJANkEAQUHc2hhcmVJZAUDbmlsAWkBEmNhcGl0YWxpemVFeEtlZXBlcgwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCWFtb3VudHNJbglhZGRyZXNzZXMPYXNzZXRzVG9SZWNlaXZlC2VzdFJlY2VpdmVkEXNsaXBwYWdlVG9sZXJhbmNlC21pblJlY2VpdmVkB29wdGlvbnMEDSR0MDM2MDU2MzYyNTADBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDAzNjA1NjM2MjUwAl8xBAxjbGFpbWVkQXNzZXQIBQ0kdDAzNjA1NjM2MjUwAl8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZUtlZXBlcgoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlhbW91bnRzSW4FCWFkZHJlc3NlcwUPYXNzZXRzVG9SZWNlaXZlBQtlc3RSZWNlaXZlZAURc2xpcHBhZ2VUb2xlcmFuY2UFC21pblJlY2VpdmVkBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFB1enpsZQgEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwQNJHQwMzY5MDczNzEwMQMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDM2OTA3MzcxMDECXzEEDGNsYWltZWRBc3NldAgFDSR0MDM2OTA3MzcxMDECXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlUHV6emxlBgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCXJvdXRlc1N0cgUMbWluVG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFN3b3BGaQwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCmV4Y2hhbmdlcnMOZXhjaGFuZ2Vyc1R5cGUFYXJnczEFYXJnczIRcm91dGluZ0Fzc2V0c0tleXMSbWluQW1vdW50VG9SZWNlaXZlB29wdGlvbnMEDSR0MDM3ODI0MzgwMTgDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDAzNzgyNDM4MDE4Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDAzNzgyNDM4MDE4Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVN3b3BGaQoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQpleGNoYW5nZXJzBQ5leGNoYW5nZXJzVHlwZQUFYXJnczEFBWFyZ3MyBRFyb3V0aW5nQXNzZXRzS2V5cwUSbWluQW1vdW50VG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBC2luaXROZXdQb29sCAR0eXBlCHBvb2xBZGRyC2luRmVlTm9Mb2FuCWluRmVlTG9hbgxjYXBGZWVOb0xvYW4OY2FwRmVlV2l0aExvYW4Rc3RvcGxvc3NGZWVOb0xvYW4Tc3RvcGxvc3NGZWVXaXRoTG9hbgMDCQECIT0CBQR0eXBlBQdTRl9QT09MCQECIT0CBQR0eXBlBQdXWF9QT09MBwkAAgECCldyb25nIHR5cGUEDSR0MDM4NzExMzg4MDUJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQhwb29sQWRkcgUEdHlwZQQDYUlkCAUNJHQwMzg3MTEzODgwNQJfMQQDYklkCAUNJHQwMzg3MTEzODgwNQJfMgQEYUJhbAgFDSR0MDM4NzExMzg4MDUCXzMEBGJCYWwIBQ0kdDAzODcxMTM4ODA1Al80BAdzaGFyZUlkCAUNJHQwMzg3MTEzODgwNQJfNQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUVa0F4bHlJbkZlZVdpdGhvdXRMb2FuBQtpbkZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUSa0F4bHlJbkZlZVdpdGhMb2FuBQlpbkZlZUxvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEWtBeGx5Tm9Mb2FuQ2FwRmVlBQxjYXBGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFE2tBeGx5V2l0aExvYW5DYXBGZWUFDmNhcEZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRZrQXhseVN0b3BMb3NzTm9Mb2FuRmVlBRFzdG9wbG9zc0ZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUUa0F4bHlTdG9wTG9zc0xvYW5GZWUFE3N0b3Bsb3NzRmVlV2l0aExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEWtQb29sSW50ZXJlc3RMb2FuAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFE2tQb29sSW50ZXJlc3ROb0xvYW4AAAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBWtQb29sBQhwb29sQWRkcgUEdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB3NoYXJlSWQFCmtTaGFyZVBvb2wFCHBvb2xBZGRyBQNuaWwBaQEOY2FwaXRhbGl6ZVRlc3QEBHBvb2wFcFR5cGUHdG9rZW5JZAt0b2tlbkFtb3VudAQIcG9vbEFkZHIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBA0kdDAzOTYwMTM5NjgwCQELZ2V0UG9vbERhdGECBQhwb29sQWRkcgUFcFR5cGUEA0FJZAgFDSR0MDM5NjAxMzk2ODACXzEEA0JJZAgFDSR0MDM5NjAxMzk2ODACXzIEBGJhbEEIBQ0kdDAzOTYwMTM5NjgwAl8zBARiYWxCCAUNJHQwMzk2MDEzOTY4MAJfNAQHc2hhcmVJZAgFDSR0MDM5NjAxMzk2ODACXzUEDSR0MDM5NjgzMzk3NjMDCQAAAgUHdG9rZW5JZAUDQUlkCQCUCgIFC3Rva2VuQW1vdW50AAAJAJQKAgAABQt0b2tlbkFtb3VudAQEcG10QQgFDSR0MDM5NjgzMzk3NjMCXzEEBHBtdEIIBQ0kdDAzOTY4MzM5NzYzAl8yBA0kdDAzOTc2NjM5ODcwCQEPcmVwbGVuaXNoQnlUeXBlCgUFcFR5cGUFBHBvb2wFBk5PX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQEDHN0YWtlZEFtb3VudAgFDSR0MDM5NzY2Mzk4NzACXzEEAm5mCAUNJHQwMzk3NjYzOTg3MAJfMgQTY3VyUG9vbEludGVyZXN0TG9hbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuAAAEFWN1clBvb2xJbnRlcmVzdE5vTG9hbgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4AAAQQdG90YWxTaGFyZUFtb3VudAkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAQYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wEC2xvYW5QZXJjZW50CQBrAwUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuBQZTQ0FMRTgFEHRvdGFsU2hhcmVBbW91bnQECnN0YWtlZExvYW4JAGsDBQxzdGFrZWRBbW91bnQFC2xvYW5QZXJjZW50BQZTQ0FMRTgEDHN0YWtlZE5vTG9hbgkAZQIFDHN0YWtlZEFtb3VudAUKc3Rha2VkTG9hbgQPbmV3SW50ZXJlc3RMb2FuCQBkAgUTY3VyUG9vbEludGVyZXN0TG9hbgkAawMFCnN0YWtlZExvYW4FB1NDQUxFMTAFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgQRbmV3SW50ZXJlc3ROb0xvYW4JAGQCBRVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4FB1NDQUxFMTAJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4EC2F4bHlGZWVMb2FuCQBrAwUKc3Rha2VkTG9hbgkBCmdldEF4bHlGZWUCBQRwb29sBQxDQVBfRkVFX0xPQU4FCkZFRV9TQ0FMRTYEDWF4bHlGZWVOb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUPQ0FQX0ZFRV9OT19MT0FOBQpGRUVfU0NBTEU2CQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4FD25ld0ludGVyZXN0TG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuBRFuZXdJbnRlcmVzdE5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkAZQIJAGQCBRB0b3RhbFNoYXJlQW1vdW50BQxzdGFrZWRBbW91bnQFC2F4bHlGZWVMb2FuBQ1heGx5RmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sVG90YWxMb2FuCQBlAgkAZAIFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUKc3Rha2VkTG9hbgULYXhseUZlZUxvYW4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gJAGQCBQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgkA2QQBBQdzaGFyZUlkBQNuaWwJAQ5nZXRDdXJzRW50cmllcwMFA0FJZAUDQklkBQdzaGFyZUlkAWkBD2NsYWltRmFybWVkVGVzdAIEdHlwZQRwb29sAwkAAAIFBHR5cGUFB1NGX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAgVjbGFpbQkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBlNXT1BJRAkAlAoCBQNuaWwJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBlNXT1BJRAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQR0eXBlBQdXWF9QT09MBAliYWxCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0V1hGYXJtaW5nQWRkcgEJAQdBZGRyZXNzAQkA2QQBBQRwb29sAgdjbGFpbVdYCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUEV1hJRAkAlAoCBQNuaWwJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBFdYSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5pIQTXw==", "height": 2600664, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B31DZk3ko2YH8wv3zNiqGzLwMABX4ySinT8muNVBTaRX Next: CtPYPUbTinZC3bBcgkcKcqbjtsqpJHSfysVkXWeZKxRi Diff:
OldNewDifferences
801801
802802
803803 @Callable(ad)
804-func replenishEVALONLY (ax,eh,ei) = if (if ((100 > eh))
804+func replenishEVALONLY (ax,eh,ei,bq,bs) = if (if ((100 > eh))
805805 then true
806806 else (eh > 300))
807807 then throw("Leverage can't be <100 and >300")
813813 let ar = ej._3
814814 let as = ej._4
815815 let aq = ej._5
816- let ek = if ((size(ad.payments) == 2))
817- then if ((aI(ad.payments[0].assetId) != bV))
818- then throw("Wrong payment asset A")
819- else if ((aI(ad.payments[1].assetId) != bW))
820- then throw("Wrong payment asset B")
821- else $Tuple4(ad.payments[0].amount, bV, ad.payments[1].amount, bW)
822- else if ((size(ad.payments) == 1))
823- then if ((aI(ad.payments[0].assetId) == bV))
824- then $Tuple4(ad.payments[0].amount, bV, 0, bW)
825- else if ((aI(ad.payments[0].assetId) == bW))
826- then $Tuple4(0, bV, ad.payments[0].amount, bW)
827- else throw("Wrong payment")
828- else throw("One or two payments expected")
829- let bq = ek._1
830- let br = ek._2
831- let bs = ek._3
832- let bt = ek._4
833- let el = if ((eh > 100))
816+ let dR = if ((eh > 100))
834817 then {
835- let bf = ( let an = invoke(Y, "getTWAP60", [br, false], nil)
818+ let bf = ( let an = invoke(Y, "getTWAP60", [bV, false], nil)
836819 if ($isInstanceOf(an, "(Int, Int)"))
837820 then an
838821 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
839- let bg = ( let an = invoke(Y, "getTWAP60", [bt, false], nil)
822+ let bg = ( let an = invoke(Y, "getTWAP60", [bW, false], nil)
840823 if ($isInstanceOf(an, "(Int, Int)"))
841824 then an
842825 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
843- let em = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
844- let dR = fraction(em, (eh - 100), 100)
845- let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ei, toString(dR), toString(1)], ",")
846- let en = {
847- let an = invoke(this, "createNewRequest", [dY], nil)
848- if ($isInstanceOf(an, "Int"))
849- then an
850- else throw(($getType(an) + " couldn't be cast to Int"))
851- }
852- if ((en == en))
853- then {
854- let eo = [((toString(ad.caller) + "_") + toString(1)), aq, ei, dR, toString(this), "replenishFromLandEVALONLY", toString(valueOrErrorMessage(en, "Can't create new request"))]
855- let ci = reentrantInvoke(aH(), "flashPosition", eo, nil)
856- if ((ci == ci))
857- then $Tuple2(getIntegerValue(this, "EVALONLY_STAKEDAMOUNT"), dR)
858- else throw("Strict value is not equal to itself.")
859- }
860- else throw("Strict value is not equal to itself.")
826+ let ek = (fraction(bf, bq, pow(10, 0, aK(bV), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bW), 0, 0, DOWN)))
827+ fraction(ek, (eh - 100), 100)
861828 }
862829 else $Tuple2(bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)._1, 0)
863- let ep = el._1
864- let dR = el._2
865- let eq = dq(ax, ep, dR, ei)
866- if ((eq == eq))
867- then {
868- let er = eq._6
869- let es = eq._5
870- let da = eq._4
871- let dI = eq._3
872- let cZ = eq._2
873- let dH = eq._1
874- let et = at(Address(fromBase58String(ax)), bb)
875- let eu = et._1
876- let ev = et._2
877- let ew = et._3
878- let ex = et._4
879- let ey = et._5
880- let ez = fraction(as, j, ar)
881- let eA = fraction(ex, j, ew)
882- let eB = (j - fraction(ez, j, eA))
883- let eC = if ((0 > eB))
884- then (eB * -1)
885- else eB
886- $Tuple2(nil, [es, er, eC])
887- }
888- else throw("Strict value is not equal to itself.")
830+ nil
889831 }
890832
891833
892834
893835 @Callable(ad)
894-func replenishFromLandEVALONLY (dX) = {
895- let eD = dW(dX)
896- let aA = eD._1
897- let ax = eD._2
898- let bq = eD._3
899- let bV = eD._4
900- let bs = eD._5
901- let bW = eD._6
902- let ar = eD._7
903- let as = eD._8
904- let aq = eD._9
905- let dZ = eD._10
906- let ea = eD._11
907- if ((size(ad.payments) != 1))
908- then throw("Wrong payment size")
909- else if (if ((aI(ad.payments[0].assetId) != dZ))
910- then true
911- else (ad.payments[0].amount != ea))
912- then throw("Wrong payment")
913- else {
914- let eE = if ((bV == dZ))
915- then $Tuple2((bq + ad.payments[0].amount), bs)
916- else $Tuple2(bq, (bs + ad.payments[0].amount))
917- let eF = eE._1
918- let eG = eE._2
919- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
920- let eH = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
921- let ep = eH._1
922- let eI = eH._2
923- $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", ep)], ep)
924- }
925- }
926-
927-
928-
929-@Callable(ad)
930836 func getShareAssetPriceREADONLY (aq) = {
931- let eJ = aZ([aq])
932- $Tuple2(nil, eJ[0])
837+ let el = aZ([aq])
838+ $Tuple2(nil, el[0])
933839 }
934840
935841
951857 then throw("Leverage can't be <100 and >300")
952858 else {
953859 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
954- let eK = at(Address(fromBase58String(ax)), bb)
955- let bV = eK._1
956- let bW = eK._2
957- let ar = eK._3
958- let as = eK._4
959- let aq = eK._5
960- let eL = if ((size(ad.payments) == 2))
860+ let em = at(Address(fromBase58String(ax)), bb)
861+ let bV = em._1
862+ let bW = em._2
863+ let ar = em._3
864+ let as = em._4
865+ let aq = em._5
866+ let en = if ((size(ad.payments) == 2))
961867 then if ((aI(ad.payments[0].assetId) != bV))
962868 then throw("Wrong payment asset A")
963869 else if ((aI(ad.payments[1].assetId) != bW))
970876 then $Tuple4(0, bV, ad.payments[0].amount, bW)
971877 else throw("Wrong payment")
972878 else throw("One or two payments expected")
973- let bq = eL._1
974- let br = eL._2
975- let bs = eL._3
976- let bt = eL._4
977- let eM = az(ax, toString(ad.caller))
879+ let bq = en._1
880+ let br = en._2
881+ let bs = en._3
882+ let bt = en._4
883+ let eo = az(ax, toString(ad.caller))
978884 if ((eh > 100))
979885 then {
980886 let bf = ( let an = invoke(Y, "getTWAP60", [br, false], nil)
985891 if ($isInstanceOf(an, "(Int, Int)"))
986892 then an
987893 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
988- let em = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
989- let dR = fraction(em, (eh - 100), 100)
894+ let ek = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
895+ let ep = if ((ei == bV))
896+ then bf
897+ else bg
898+ let dR = (fraction(ek, (eh - 100), 100) / ep)
990899 let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ei, toString(dR)], ",")
991- let en = {
900+ let eq = {
992901 let an = invoke(this, "createNewRequest", [dY], nil)
993902 if ($isInstanceOf(an, "Int"))
994903 then an
995904 else throw(($getType(an) + " couldn't be cast to Int"))
996905 }
997- if ((en == en))
906+ if ((eq == eq))
998907 then {
999- let eo = [((toString(ad.caller) + "_") + toString(eM)), aq, ei, dR, toString(this), "replenishFromLand", toString(valueOrErrorMessage(en, "Can't create new request"))]
1000- let ci = reentrantInvoke(aH(), "flashPosition", eo, nil)
908+ let er = [((toString(ad.caller) + "_") + toString(eo)), aq, ei, dR, toString(this), "replenishFromLand", toString(valueOrErrorMessage(eq, "Can't create new request"))]
909+ let ci = reentrantInvoke(aH(), "flashPosition", er, nil)
1001910 if ((ci == ci))
1002911 then nil
1003912 else throw("Strict value is not equal to itself.")
1005914 else throw("Strict value is not equal to itself.")
1006915 }
1007916 else {
1008- let eN = bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)
1009- let ep = eN._1
1010- let eI = eN._2
1011- (bX(ax, toString(ad.caller), ep, eI, eM, aq, bb, false) ++ bn(bV, bW, aq))
917+ let es = bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)
918+ let et = es._1
919+ let eu = es._2
920+ (bX(ax, toString(ad.caller), et, eu, eo, aq, bb, false) ++ bn(bV, bW, aq))
1012921 }
1013922 }
1014923
1016925
1017926 @Callable(ad)
1018927 func replenishFromLand (dX) = {
1019- let eO = dW(dX)
1020- let aA = eO._1
1021- let ax = eO._2
1022- let bq = eO._3
1023- let bV = eO._4
1024- let bs = eO._5
1025- let bW = eO._6
1026- let ar = eO._7
1027- let as = eO._8
1028- let aq = eO._9
1029- let dZ = eO._10
1030- let ea = eO._11
928+ let ev = dW(dX)
929+ let aA = ev._1
930+ let ax = ev._2
931+ let bq = ev._3
932+ let bV = ev._4
933+ let bs = ev._5
934+ let bW = ev._6
935+ let ar = ev._7
936+ let as = ev._8
937+ let aq = ev._9
938+ let dZ = ev._10
939+ let ea = ev._11
1031940 if ((size(ad.payments) != 1))
1032941 then throw("Wrong payment size")
1033942 else if (if ((aI(ad.payments[0].assetId) != dZ))
1035944 else (ad.payments[0].amount != ea))
1036945 then throw("Wrong payment")
1037946 else {
1038- let eP = if ((bV == dZ))
947+ let ew = if ((bV == dZ))
1039948 then $Tuple2((bq + ad.payments[0].amount), bs)
1040949 else $Tuple2(bq, (bs + ad.payments[0].amount))
1041- let eF = eP._1
1042- let eG = eP._2
950+ let ex = ew._1
951+ let ey = ew._2
1043952 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1044- let eQ = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
1045- let ep = eQ._1
1046- let eI = eQ._2
953+ let ez = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
954+ let et = ez._1
955+ let eu = ez._2
1047956 let bZ = az(ax, toString(ad.caller))
1048- let eR = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + v), ea), StringEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + w), dZ)]
1049- let eS = bX(ax, aA, ep, eI, bZ, aq, bb, true)
1050- $Tuple2((((eS ++ bn(bV, bW, aq)) ++ eR) :+ DeleteEntry((dX + J))), ep)
957+ let eA = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + v), ea), StringEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + w), dZ)]
958+ let eB = bX(ax, aA, et, eu, bZ, aq, bb, true)
959+ $Tuple2((((eB ++ bn(bV, bW, aq)) ++ eA) :+ DeleteEntry((dX + J))), et)
1051960 }
1052961 }
1053962
1059968
1060969
1061970 @Callable(ad)
1062-func createUpdateStopLoss (dK,eT,af,eU) = {
1063- let eV = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
971+func createUpdateStopLoss (dK,eC,af,eD) = {
972+ let eE = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1064973 if ($isInstanceOf(an, "(Int, Int)"))
1065974 then an
1066975 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1067- if (!(isDefined(getInteger(this, (((((eT + "_") + toString(ad.caller)) + "_") + toString(dK)) + t)))))
976+ if (!(isDefined(getInteger(this, (((((eC + "_") + toString(ad.caller)) + "_") + toString(dK)) + t)))))
1068977 then throw("There are no user position")
1069- else if ((0 >= eU))
978+ else if ((0 >= eD))
1070979 then throw("Price must be greater than 0")
1071- else if ((eU > eV))
980+ else if ((eD > eE))
1072981 then throw("Price must be less than current token price")
1073- else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P), eU)]
982+ else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eC) + "_") + af) + P), eD)]
1074983 }
1075984
1076985
1077986
1078987 @Callable(ad)
1079-func deleteStopLoss (dK,eT,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P)))))
988+func deleteStopLoss (dK,eC,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eC) + "_") + af) + P)))))
1080989 then throw("No entry")
1081- else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P))]
990+ else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eC) + "_") + af) + P))]
1082991
1083992
1084993
1085994 @Callable(ad)
1086995 func createNewRequest (eg) = valueOrElse(ac(ad), {
1087- let en = (valueOrElse(getInteger(this, K), 0) + 1)
1088- $Tuple2([StringEntry((toString(en) + J), eg), IntegerEntry(K, en)], en)
996+ let eq = (valueOrElse(getInteger(this, K), 0) + 1)
997+ $Tuple2([StringEntry((toString(eq) + J), eg), IntegerEntry(K, eq)], eq)
1089998 })
1090999
10911000
10921001
10931002 @Callable(ad)
10941003 func stopLoss (aA,dK,ax,af) = {
1095- let eV = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1004+ let eE = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
10961005 if ($isInstanceOf(an, "(Int, Int)"))
10971006 then an
10981007 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
11041013
11051014
11061015 @Callable(ad)
1107-func liquidate (aA,dK,eW) = {
1016+func liquidate (aA,dK,eF) = {
11081017 let ax = valueOrErrorMessage(getString(this, (((aA + "_") + dK) + u)), "no position")
11091018 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1110- let eX = at(Address(fromBase58String(ax)), bb)
1111- let bV = eX._1
1112- let bW = eX._2
1113- let ar = eX._3
1114- let as = eX._4
1115- let aq = eX._5
1116- let ec = eb(ax, bb, aq, eW)
1019+ let eG = at(Address(fromBase58String(ax)), bb)
1020+ let bV = eG._1
1021+ let bW = eG._2
1022+ let ar = eG._3
1023+ let as = eG._4
1024+ let aq = eG._5
1025+ let ec = eb(ax, bb, aq, eF)
11171026 let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + v))
11181027 let dt = getStringValue(this, (((((ax + "_") + aA) + "_") + dK) + w))
11191028 let dr = dJ(aA, ax, dK, (dR > 0))
11201029 if ((dR > 0))
1121- then [IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - eW))]
1122- else ([IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + C)))] ++ [IntegerEntry((ax + z), (aw(ax) - eW)), IntegerEntry((((((ax + "_") + aA) + "_") + dK) + t), (dr - eW)), ScriptTransfer(ad.caller, ec, fromBase58String(aq))])
1030+ then [IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - eF))]
1031+ else ([IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + C)))] ++ [IntegerEntry((ax + z), (aw(ax) - eF)), IntegerEntry((((((ax + "_") + aA) + "_") + dK) + t), (dr - eF)), ScriptTransfer(ad.caller, ec, fromBase58String(aq))])
11231032 }
11241033
11251034
11261035
11271036 @Callable(ad)
1128-func capitalizeExKeeper (ax,au,eY,eZ,fa,co,cp,cq,cr,cs,ct,cu) = {
1129- let fb = if (fa)
1037+func capitalizeExKeeper (ax,au,eH,eI,eJ,co,cp,cq,cr,cs,ct,cu) = {
1038+ let eK = if (eJ)
11301039 then cg(au, ax)
11311040 else {
1132- let fc = if ((au == a))
1041+ let eL = if ((au == a))
11331042 then aa
11341043 else ab
1135- $Tuple2(eZ, fc)
1044+ $Tuple2(eI, eL)
11361045 }
1137- let fd = fb._1
1138- let fc = fb._2
1139- let fe = ck(eY, eZ, fc, co, cp, cq, cr, cs, ct, cu)
1140- let bB = (fd - eZ)
1141- let ff = if ((bB > 0))
1046+ let eM = eK._1
1047+ let eL = eK._2
1048+ let eN = ck(eH, eI, eL, co, cp, cq, cr, cs, ct, cu)
1049+ let bB = (eM - eI)
1050+ let eO = if ((bB > 0))
11421051 then [IntegerEntry((ax + N), (bB + valueOrElse(getInteger(this, (ax + N)), 0)))]
11431052 else nil
1144- (cG(ax, au, eY, fe) ++ ff)
1053+ (cG(ax, au, eH, eN) ++ eO)
11451054 }
11461055
11471056
11481057
11491058 @Callable(ad)
1150-func capitalizeExPuzzle (ax,au,eY,eZ,fa,cx,cy,cu) = {
1151- let fg = if (fa)
1059+func capitalizeExPuzzle (ax,au,eH,eI,eJ,cx,cy,cu) = {
1060+ let eP = if (eJ)
11521061 then cg(au, ax)
11531062 else {
1154- let fc = if ((au == a))
1063+ let eL = if ((au == a))
11551064 then aa
11561065 else ab
1157- $Tuple2(eZ, fc)
1066+ $Tuple2(eI, eL)
11581067 }
1159- let fd = fg._1
1160- let fc = fg._2
1161- let fe = cw(eY, eZ, fc, cx, cy, cu)
1162- let bB = (fd - eZ)
1163- let ff = if ((bB > 0))
1068+ let eM = eP._1
1069+ let eL = eP._2
1070+ let eN = cw(eH, eI, eL, cx, cy, cu)
1071+ let bB = (eM - eI)
1072+ let eO = if ((bB > 0))
11641073 then [IntegerEntry((ax + N), (bB + valueOrElse(getInteger(this, (ax + N)), 0)))]
11651074 else nil
1166- (cG(ax, au, eY, fe) ++ ff)
1075+ (cG(ax, au, eH, eN) ++ eO)
11671076 }
11681077
11691078
11701079
11711080 @Callable(ad)
1172-func capitalizeExSwopFi (ax,au,eY,eZ,fa,cA,cB,cC,cD,cE,cF,cu) = {
1173- let fh = if (fa)
1081+func capitalizeExSwopFi (ax,au,eH,eI,eJ,cA,cB,cC,cD,cE,cF,cu) = {
1082+ let eQ = if (eJ)
11741083 then cg(au, ax)
11751084 else {
1176- let fc = if ((au == a))
1085+ let eL = if ((au == a))
11771086 then aa
11781087 else ab
1179- $Tuple2(eZ, fc)
1088+ $Tuple2(eI, eL)
11801089 }
1181- let fd = fh._1
1182- let fc = fh._2
1183- let fe = cz(eY, eZ, fc, cA, cB, cC, cD, cE, cF, cu)
1184- let bB = (fd - eZ)
1185- let ff = if ((bB > 0))
1090+ let eM = eQ._1
1091+ let eL = eQ._2
1092+ let eN = cz(eH, eI, eL, cA, cB, cC, cD, cE, cF, cu)
1093+ let bB = (eM - eI)
1094+ let eO = if ((bB > 0))
11861095 then [IntegerEntry((ax + N), (bB + valueOrElse(getInteger(this, (ax + N)), 0)))]
11871096 else nil
1188- (cG(ax, au, eY, fe) ++ ff)
1097+ (cG(ax, au, eH, eN) ++ eO)
11891098 }
11901099
11911100
11921101
11931102 @Callable(ad)
1194-func initNewPool (au,ak,fi,fj,fk,fl,fm,fn) = if (if ((au != a))
1103+func initNewPool (au,ak,eR,eS,eT,eU,eV,eW) = if (if ((au != a))
11951104 then (au != b)
11961105 else false)
11971106 then throw("Wrong type")
11981107 else {
1199- let fo = at(Address(fromBase58String(ak)), au)
1200- let ao = fo._1
1201- let ap = fo._2
1202- let fp = fo._3
1203- let fq = fo._4
1204- let aq = fo._5
1205-[IntegerEntry((ak + D), fi), IntegerEntry((ak + E), fj), IntegerEntry((ak + F), fk), IntegerEntry((ak + G), fl), IntegerEntry((ak + H), fm), IntegerEntry((ak + I), fn), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
1108+ let eX = at(Address(fromBase58String(ak)), au)
1109+ let ao = eX._1
1110+ let ap = eX._2
1111+ let eY = eX._3
1112+ let eZ = eX._4
1113+ let aq = eX._5
1114+[IntegerEntry((ak + D), eR), IntegerEntry((ak + E), eS), IntegerEntry((ak + F), eT), IntegerEntry((ak + G), eU), IntegerEntry((ak + H), eV), IntegerEntry((ak + I), eW), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
12061115 }
12071116
12081117
12101119 @Callable(ad)
12111120 func capitalizeTest (ax,bb,cH,cI) = {
12121121 let ak = Address(fromBase58String(ax))
1213- let fr = at(ak, bb)
1214- let bV = fr._1
1215- let bW = fr._2
1216- let ar = fr._3
1217- let as = fr._4
1218- let aq = fr._5
1219- let fs = if ((cH == bV))
1122+ let fa = at(ak, bb)
1123+ let bV = fa._1
1124+ let bW = fa._2
1125+ let ar = fa._3
1126+ let as = fa._4
1127+ let aq = fa._5
1128+ let fb = if ((cH == bV))
12201129 then $Tuple2(cI, 0)
12211130 else $Tuple2(0, cI)
1222- let bq = fs._1
1223- let bs = fs._2
1224- let ft = bU(bb, ax, i, bq, bV, bs, bW, ar, as, aq)
1225- let bY = ft._1
1226- let cM = ft._2
1131+ let bq = fb._1
1132+ let bs = fb._2
1133+ let fc = bU(bb, ax, i, bq, bV, bs, bW, ar, as, aq)
1134+ let bY = fc._1
1135+ let cM = fc._2
12271136 let cN = valueOrElse(getInteger(this, (ax + B)), 0)
12281137 let cO = valueOrElse(getInteger(this, (ax + C)), 0)
12291138 let cP = aw(ax)
12741183 else throw("Wrong pool type")
12751184
12761185
1277-@Verifier(fu)
1278-func fv () = sigVerify(fu.bodyBytes, fu.proofs[0], fu.senderPublicKey)
1186+@Verifier(fd)
1187+func fe () = sigVerify(fd.bodyBytes, fd.proofs[0], fd.senderPublicKey)
12791188
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 = "capNoLoan"
1313
1414 let f = "capLoan"
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 = 1000000
2727
2828 let m = "A_asset_balance"
2929
3030 let n = "B_asset_balance"
3131
3232 let o = "A_asset_id"
3333
3434 let p = "B_asset_id"
3535
3636 let q = "share_asset_id"
3737
3838 let r = "share_asset_supply"
3939
4040 let s = "commission"
4141
4242 let t = "_user_position"
4343
4444 let u = "_user_position_pool"
4545
4646 let v = "_user_position_borrow_amount"
4747
4848 let w = "_user_position_borrow_asset_id"
4949
5050 let x = "_user_position_number"
5151
5252 let y = "_user_position_interest"
5353
5454 let z = "_pool_total"
5555
5656 let A = "_pool_total_loan"
5757
5858 let B = "_pool_interest_loan"
5959
6060 let C = "_pool_interest_no_loan"
6161
6262 let D = "_axly_fee_without_loan"
6363
6464 let E = "_axly_fee_with_loan"
6565
6666 let F = "_axly_fee_cap_with_loan"
6767
6868 let G = "_axly_fee_cap_no_loan"
6969
7070 let H = "_axly_fee_stoploss_with_loan"
7171
7272 let I = "_axly_fee_stoploss_no_loan"
7373
7474 let J = "_request_id"
7575
7676 let K = "requests_iter"
7777
7878 let L = "pool_"
7979
8080 let M = "_pool_share_id"
8181
8282 let N = "_pool_cap_change"
8383
8484 let O = "_last_price"
8585
8686 let P = "_stop_loss"
8787
8888 let Q = "axly_money_box"
8989
9090 let R = "swopfi_farming_addr"
9191
9292 let S = "lend_service_addr"
9393
9494 let T = "price_oracle"
9595
9696 let U = "exchange_contract"
9797
9898 let V = "wx_swap_contract"
9999
100100 let W = Address(fromBase58String(valueOrErrorMessage(getString(this, Q), "No axly moneyBox address")))
101101
102102 let X = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "No exchange contract address")))
103103
104104 let Y = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "No price oracle address")))
105105
106106 let Z = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "No wx swap address")))
107107
108108 let aa = base58'4W19ndijcc2CsQa9HGW2dfXKTVXhnneWWttxXrtjPmEp'
109109
110110 let ab = base58'EMAMLxDnv3xiz8RXg8Btj33jcEw3wLczL3JKYYmuubpc'
111111
112112 func ac (ad) = if ((ad.caller == this))
113113 then unit
114114 else throw("Only contract itself can call this function")
115115
116116
117117 func ae (af) = {
118118 let ag = af
119119 if ($isInstanceOf(ag, "ByteVector"))
120120 then {
121121 let ah = ag
122122 assetBalance(this, ah)
123123 }
124124 else if ($isInstanceOf(ag, "Unit"))
125125 then {
126126 let ai = ag
127127 wavesBalance(this).available
128128 }
129129 else throw("Match error")
130130 }
131131
132132
133133 func aj (ak) = $Tuple5(valueOrErrorMessage(getString(ak, o), "Can't get pool A asset id"), valueOrErrorMessage(getString(ak, p), "Can't get pool B asset id"), valueOrErrorMessage(getInteger(ak, m), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(ak, n), "Can't get pool B asset balance"), valueOrErrorMessage(getString(ak, q), "Can't get share asset id"))
134134
135135
136136 func al (ak) = {
137137 let am = {
138138 let an = invoke(ak, "getPoolConfigWrapperREADONLY", nil, nil)
139139 if ($isInstanceOf(an, "List[Any]"))
140140 then an
141141 else throw(($getType(an) + " couldn't be cast to List[Any]"))
142142 }
143143 if ((am == am))
144144 then {
145145 let ao = valueOrErrorMessage({
146146 let an = am[4]
147147 if ($isInstanceOf(an, "String"))
148148 then an
149149 else unit
150150 }, "Can't get pool A asset id")
151151 let ap = valueOrErrorMessage({
152152 let an = am[5]
153153 if ($isInstanceOf(an, "String"))
154154 then an
155155 else unit
156156 }, "Can't get pool B asset id")
157157 let aq = valueOrErrorMessage({
158158 let an = am[3]
159159 if ($isInstanceOf(an, "String"))
160160 then an
161161 else unit
162162 }, "Can't get pool LP asset id")
163163 let ar = {
164164 let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ao], nil)
165165 if ($isInstanceOf(an, "Int"))
166166 then an
167167 else throw(($getType(an) + " couldn't be cast to Int"))
168168 }
169169 if ((ar == ar))
170170 then {
171171 let as = {
172172 let an = invoke(ak, "getAccBalanceWrapperREADONLY", [ap], nil)
173173 if ($isInstanceOf(an, "Int"))
174174 then an
175175 else throw(($getType(an) + " couldn't be cast to Int"))
176176 }
177177 if ((as == as))
178178 then $Tuple5(ao, ap, ar, as, aq)
179179 else throw("Strict value is not equal to itself.")
180180 }
181181 else throw("Strict value is not equal to itself.")
182182 }
183183 else throw("Strict value is not equal to itself.")
184184 }
185185
186186
187187 func at (ak,au) = if ((au == a))
188188 then aj(ak)
189189 else if ((au == b))
190190 then al(ak)
191191 else throw("Wrong pool type")
192192
193193
194194 func av (ak,au,aq) = if ((au == a))
195195 then valueOrErrorMessage(getInteger(ak, r), "Can't get share asset supply")
196196 else if ((au == b))
197197 then valueOrErrorMessage(assetInfo(fromBase58String(aq)), "Wrong ShareId").quantity
198198 else throw("Wrong pool type")
199199
200200
201201 func aw (ax) = valueOrElse(getInteger(this, (ax + z)), 0)
202202
203203
204204 func ay (ax) = valueOrElse(getInteger(this, (ax + A)), 0)
205205
206206
207207 func az (ax,aA) = (valueOrElse(getInteger(this, (aA + x)), 0) + 1)
208208
209209
210210 func aB (ax,aC) = if ((aC == d))
211211 then getIntegerValue(this, (ax + G))
212212 else if ((aC == c))
213213 then getIntegerValue(this, (ax + F))
214214 else if ((aC == g))
215215 then getIntegerValue(this, (ax + E))
216216 else if ((aC == h))
217217 then getIntegerValue(this, (ax + D))
218218 else throw("Wrong fee type")
219219
220220
221221 func aD () = Address(fromBase58String(valueOrErrorMessage(getString(this, R), "Can't get swopfi farming addr")))
222222
223223
224224 func aE (ak) = {
225225 let aF = Address(fromBase58String(valueOrErrorMessage(getString(ak, "%s__factoryContract"), "Can't get WX factory contract addr")))
226226 let aG = split(valueOrErrorMessage(getString(aF, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
227227 Address(fromBase58String(aG[1]))
228228 }
229229
230230
231231 func aH () = Address(fromBase58String(valueOrErrorMessage(getString(this, S), "Can't get lend service addr")))
232232
233233
234234 func aI (af) = {
235235 let ag = af
236236 if ($isInstanceOf(ag, "ByteVector"))
237237 then {
238238 let ah = ag
239239 toBase58String(ah)
240240 }
241241 else if ($isInstanceOf(ag, "Unit"))
242242 then {
243243 let ai = ag
244244 "WAVES"
245245 }
246246 else throw("Match error")
247247 }
248248
249249
250250 func aJ (af) = if ((af == "WAVES"))
251251 then unit
252252 else fromBase58String(af)
253253
254254
255255 func aK (af) = if ((af == "WAVES"))
256256 then 8
257257 else {
258258 let ag = assetInfo(fromBase58String(af))
259259 if ($isInstanceOf(ag, "Asset"))
260260 then {
261261 let aL = ag
262262 aL.decimals
263263 }
264264 else throw("Can't find asset")
265265 }
266266
267267
268268 func aM (af) = pow(10, 0, aK(af), 0, 0, DOWN)
269269
270270
271271 func aN (aO) = {
272272 func aP (aQ,af) = {
273273 let aR = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
274274 if ($isInstanceOf(an, "(Int, Int)"))
275275 then an
276276 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
277277 (aQ :+ aR)
278278 }
279279
280280 let aS = aO
281281 let aT = size(aS)
282282 let aU = nil
283283 func aV (aW,aX) = if ((aX >= aT))
284284 then aW
285285 else aP(aW, aS[aX])
286286
287287 func aY (aW,aX) = if ((aX >= aT))
288288 then aW
289289 else throw("List size exceeds 100")
290290
291291 aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 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), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
292292 }
293293
294294
295295 func aZ (ba) = {
296296 func aP (aQ,aq) = {
297297 let ax = valueOrErrorMessage(getString(this, (aq + M)), "Can't find pool addr by share id")
298298 let ak = Address(fromBase58String(ax))
299299 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
300300 let bc = at(ak, bb)
301301 let ao = bc._1
302302 let ap = bc._2
303303 let bd = bc._3
304304 let be = bc._4
305305 let bf = ( let an = invoke(Y, "getTWAP60", [ao, false], nil)
306306 if ($isInstanceOf(an, "(Int, Int)"))
307307 then an
308308 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
309309 let bg = ( let an = invoke(Y, "getTWAP60", [ap, false], nil)
310310 if ($isInstanceOf(an, "(Int, Int)"))
311311 then an
312312 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
313313 let bh = av(ak, bb, aq)
314314 let bi = pow(10, 0, aK(ao), 0, 0, DOWN)
315315 let bj = pow(10, 0, aK(ap), 0, 0, DOWN)
316316 let bk = pow(10, 0, aK(aq), 0, 0, DOWN)
317317 let bl = (fraction(bd, bf, bi) + fraction(be, bg, bj))
318318 let bm = fraction(bl, bk, bh)
319319 (aQ :+ bm)
320320 }
321321
322322 let aS = ba
323323 let aT = size(aS)
324324 let aU = nil
325325 func aV (aW,aX) = if ((aX >= aT))
326326 then aW
327327 else aP(aW, aS[aX])
328328
329329 func aY (aW,aX) = if ((aX >= aT))
330330 then aW
331331 else throw("List size exceeds 50")
332332
333333 aY(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aV(aU, 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)
334334 }
335335
336336
337337 func bn (ao,ap,aq) = {
338338 let bo = aN([ao, ap])
339339 let bm = aZ([aq])
340340 [IntegerEntry((ao + O), bo[0]), IntegerEntry((ap + O), bo[1]), IntegerEntry((aq + O), bm[0])]
341341 }
342342
343343
344344 func bp (ax,aC,bq,br,bs,bt,ar,as,aq) = {
345345 let bu = ae(fromBase58String(aq))
346346 if ((bu == bu))
347347 then {
348348 let ak = Address(fromBase58String(ax))
349349 let bv = fraction(j, bq, ar)
350350 let bw = fraction(j, bs, as)
351351 let bx = if ((bw > bv))
352352 then {
353353 let by = fraction(as, bv, j, CEILING)
354354 $Tuple4(bq, by, (bs - by), bt)
355355 }
356356 else {
357357 let by = fraction(ar, bw, j, CEILING)
358358 $Tuple4(by, bs, (bq - by), br)
359359 }
360360 let bz = bx._1
361361 let bA = bx._2
362362 let bB = bx._3
363363 let bC = bx._4
364364 let bD = if (if ((bz > 0))
365365 then (bA > 0)
366366 else false)
367367 then {
368368 let bE = [AttachedPayment(aJ(br), bz), AttachedPayment(aJ(bt), bA)]
369369 invoke(ak, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bE)
370370 }
371371 else 0
372372 if ((bD == bD))
373373 then {
374374 let bF = if ((bB > 0))
375375 then {
376376 let bE = [AttachedPayment(aJ(bC), bB)]
377377 let bG = ["0", "false", "0"]
378378 invoke(ak, "callFunction", ["replenishWithOneToken", bG], bE)
379379 }
380380 else 0
381381 if ((bF == bF))
382382 then {
383383 let bH = ae(fromBase58String(aq))
384384 let bI = (bH - bu)
385385 let bJ = fraction(bI, aB(ax, aC), l)
386386 let bK = (bI - bJ)
387387 if ((0 >= bK))
388388 then throw("amount of staked sharetokens must be > 0")
389389 else {
390390 let bL = invoke(aD(), "lockShareTokens", [ax, 0], [AttachedPayment(fromBase58String(aq), bK)])
391391 if ((bL == bL))
392392 then $Tuple2(bK, bJ)
393393 else throw("Strict value is not equal to itself.")
394394 }
395395 }
396396 else throw("Strict value is not equal to itself.")
397397 }
398398 else throw("Strict value is not equal to itself.")
399399 }
400400 else throw("Strict value is not equal to itself.")
401401 }
402402
403403
404404 func bM (ax,aC,bq,br,bs,bt,aq) = {
405405 let ak = Address(fromBase58String(ax))
406406 let bN = if (if ((bq > 0))
407407 then (bs > 0)
408408 else false)
409409 then {
410410 let bO = split({
411411 let an = invoke(ak, "evaluatePutByAmountAssetREADONLY", [bq], nil)
412412 if ($isInstanceOf(an, "String"))
413413 then an
414414 else throw(($getType(an) + " couldn't be cast to String"))
415415 }, "__")
416416 if ((bO == bO))
417417 then {
418418 let bP = split({
419419 let an = invoke(ak, "evaluatePutByPriceAssetREADONLY", [bs], nil)
420420 if ($isInstanceOf(an, "String"))
421421 then an
422422 else throw(($getType(an) + " couldn't be cast to String"))
423423 }, "__")
424424 if ((bP == bP))
425425 then {
426426 let bQ = parseIntValue(bO[1])
427427 let bR = parseIntValue(bP[1])
428428 if ((bR > bQ))
429429 then {
430430 let bS = parseIntValue(bO[8])
431431 $Tuple4(bq, bS, (bs - bS), bt)
432432 }
433433 else {
434434 let bT = parseIntValue(bP[7])
435435 $Tuple4(bT, bs, (bq - bT), br)
436436 }
437437 }
438438 else throw("Strict value is not equal to itself.")
439439 }
440440 else throw("Strict value is not equal to itself.")
441441 }
442442 else if ((bq > 0))
443443 then $Tuple4(bq, bs, bq, br)
444444 else if ((bs > 0))
445445 then $Tuple4(bq, bs, bs, bt)
446446 else throw("pmts must be > 0")
447447 let bz = bN._1
448448 let bA = bN._2
449449 let bB = bN._3
450450 let bC = bN._4
451451 let bu = ae(fromBase58String(aq))
452452 if ((bu == bu))
453453 then {
454454 let bD = if (if ((bz > 0))
455455 then (bA > 0)
456456 else false)
457457 then {
458458 let bE = [AttachedPayment(aJ(br), bz), AttachedPayment(aJ(bt), bA)]
459459 invoke(ak, "put", [1000000, false], bE)
460460 }
461461 else 0
462462 if ((bD == bD))
463463 then {
464464 let bF = if ((bB > 0))
465465 then {
466466 let bE = [AttachedPayment(aJ(bC), bB)]
467467 invoke(ak, "putOneTkn", [0, false], bE)
468468 }
469469 else 0
470470 if ((bF == bF))
471471 then {
472472 let bH = ae(fromBase58String(aq))
473473 let bI = (bH - bu)
474474 let bJ = fraction(bI, aB(ax, aC), l)
475475 let bK = (bI - bJ)
476476 if ((0 >= bK))
477477 then throw("amount of staked sharetokens must be > 0")
478478 else {
479479 let bL = invoke(aE(ak), "stake", nil, [AttachedPayment(fromBase58String(aq), bK)])
480480 if ((bL == bL))
481481 then $Tuple2(bK, bJ)
482482 else throw("Strict value is not equal to itself.")
483483 }
484484 }
485485 else throw("Strict value is not equal to itself.")
486486 }
487487 else throw("Strict value is not equal to itself.")
488488 }
489489 else throw("Strict value is not equal to itself.")
490490 }
491491
492492
493493 func bU (au,ax,aC,bq,bV,bs,bW,ar,as,aq) = if ((au == a))
494494 then bp(ax, aC, bq, bV, bs, bW, ar, as, aq)
495495 else if ((au == b))
496496 then bM(ax, aC, bq, bV, bs, bW, aq)
497497 else throw("Wrong pool type")
498498
499499
500500 func bX (ax,aA,bY,bJ,bZ,aq,au,ca) = {
501501 let cb = aw(ax)
502502 let cc = ay(ax)
503503 let cd = if (ca)
504504 then $Tuple2(getIntegerValue(this, (ax + B)), (cc + bY))
505505 else $Tuple2(getIntegerValue(this, (ax + C)), cc)
506506 let ce = cd._1
507507 let cf = cd._2
508508 [IntegerEntry((ax + z), (cb + bY)), IntegerEntry((ax + A), (cc + bY)), IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + t), bY), IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + y), ce), StringEntry((((aA + "_") + toString(bZ)) + u), ax), IntegerEntry((aA + x), bZ), ScriptTransfer(W, bJ, fromBase58String(aq))]
509509 }
510510
511511
512512 func cg (au,ax) = if ((au == a))
513513 then {
514514 let ch = ae(aa)
515515 if ((ch == ch))
516516 then {
517517 let ci = invoke(aD(), "claim", [ax], nil)
518518 if ((ci == ci))
519519 then {
520520 let cj = ae(aa)
521521 $Tuple2((cj - ch), aa)
522522 }
523523 else throw("Strict value is not equal to itself.")
524524 }
525525 else throw("Strict value is not equal to itself.")
526526 }
527527 else if ((au == b))
528528 then {
529529 let ch = ae(ab)
530530 if ((ch == ch))
531531 then {
532532 let ci = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
533533 if ((ci == ci))
534534 then {
535535 let cj = ae(ab)
536536 $Tuple2((cj - ch), ab)
537537 }
538538 else throw("Strict value is not equal to itself.")
539539 }
540540 else throw("Strict value is not equal to itself.")
541541 }
542542 else throw("Wrong pool type")
543543
544544
545545 func ck (cl,cm,cn,co,cp,cq,cr,cs,ct,cu) = {
546546 let cv = ae(aJ(cl))
547547 if ((cv == cv))
548548 then {
549549 let ci = invoke(X, "swap", [co, cp, cq, cr, cs, ct, cu], [AttachedPayment(cn, cm)])
550550 if ((ci == ci))
551551 then (ae(aJ(cl)) - cv)
552552 else throw("Strict value is not equal to itself.")
553553 }
554554 else throw("Strict value is not equal to itself.")
555555 }
556556
557557
558558 func cw (cl,cm,cn,cx,cy,cu) = {
559559 let cv = ae(aJ(cl))
560560 if ((cv == cv))
561561 then {
562562 let ci = invoke(X, "puzzleSwap", [cx, cy, cu], [AttachedPayment(cn, cm)])
563563 if ((ci == ci))
564564 then (ae(aJ(cl)) - cv)
565565 else throw("Strict value is not equal to itself.")
566566 }
567567 else throw("Strict value is not equal to itself.")
568568 }
569569
570570
571571 func cz (cl,cm,cn,cA,cB,cC,cD,cE,cF,cu) = {
572572 let cv = ae(aJ(cl))
573573 if ((cv == cv))
574574 then {
575575 let ci = invoke(X, "swopfiSwap", [cA, cB, cC, cD, cE, cF, cu], [AttachedPayment(cn, cm)])
576576 if ((ci == ci))
577577 then (ae(aJ(cl)) - cv)
578578 else throw("Strict value is not equal to itself.")
579579 }
580580 else throw("Strict value is not equal to itself.")
581581 }
582582
583583
584584 func cG (ax,bb,cH,cI) = {
585585 let ak = Address(fromBase58String(ax))
586586 let cJ = at(ak, bb)
587587 let bV = cJ._1
588588 let bW = cJ._2
589589 let ar = cJ._3
590590 let as = cJ._4
591591 let aq = cJ._5
592592 let cK = if ((cH == bV))
593593 then $Tuple2(cI, 0)
594594 else $Tuple2(0, cI)
595595 let bq = cK._1
596596 let bs = cK._2
597597 let cL = bU(bb, ax, i, bq, bV, bs, bW, ar, as, aq)
598598 let bY = cL._1
599599 let cM = cL._2
600600 let cN = valueOrElse(getInteger(this, (ax + B)), 0)
601601 let cO = valueOrElse(getInteger(this, (ax + C)), 0)
602602 let cP = aw(ax)
603603 let cQ = ay(ax)
604604 let cR = fraction(cQ, j, cP)
605605 let cS = fraction(bY, cR, j)
606606 let cT = (bY - cS)
607607 let cU = (cN + fraction(cS, k, cQ))
608608 let cV = (cO + fraction(cT, k, (cP - cQ)))
609609 let cW = fraction(cS, aB(ax, d), l)
610610 let cX = fraction(cT, aB(ax, c), l)
611611 ([IntegerEntry((ax + B), cU), IntegerEntry((ax + C), cV), IntegerEntry((ax + z), (((cP + bY) - cW) - cX)), IntegerEntry((ax + A), ((cQ + cS) - cW)), ScriptTransfer(W, (cW + cX), fromBase58String(aq))] ++ bn(bV, bW, aq))
612612 }
613613
614614
615615 func cY (ax,cZ,da,ar,as,db,dc) = {
616616 let ak = Address(fromBase58String(ax))
617617 let dd = 1000000
618618 let de = getIntegerValue(ak, s)
619619 let df = fraction(db, dd, (dd - de))
620620 let dg = if ((dc == cZ))
621621 then {
622622 let dh = fraction(ar, df, (as - df))
623623 $Tuple2(dh, da)
624624 }
625625 else {
626626 let dh = fraction(as, df, (ar - df))
627627 $Tuple2(dh, cZ)
628628 }
629629 let dh = dg._1
630630 let di = dg._2
631631 invoke(ak, "callFunction", ["exchange", ["1"]], [AttachedPayment(aJ(di), dh)])
632632 }
633633
634634
635635 func dj (ax,cZ,da,ar,as,db,dc) = {
636636 let ak = Address(fromBase58String(ax))
637637 let dk = getIntegerValue(Z, "%s__protocolFee")
638638 let dl = getIntegerValue(Z, "%s__poolFee")
639639 let dm = toBigInt(100000000)
640640 let dn = if ((dc == cZ))
641641 then {
642642 let dh = fraction(ar, db, (as - db))
643643 $Tuple2(dh, da)
644644 }
645645 else {
646646 let dh = fraction(as, db, (ar - db))
647647 $Tuple2(dh, cZ)
648648 }
649649 let dh = dn._1
650650 let di = dn._2
651651 let do = toInt(fraction(toBigInt(dh), dm, (dm - toBigInt((dk + dl)))))
652652 invoke(Z, "swap", [1, dc, toString(this)], [AttachedPayment(aJ(di), do)])
653653 }
654654
655655
656656 func dp (au,ax,cZ,da,ar,as,db,dc) = if ((au == a))
657657 then cY(ax, cZ, da, ar, as, db, dc)
658658 else dj(ax, cZ, da, ar, as, db, dc)
659659
660660
661661 func dq (ax,dr,ds,dt) = {
662662 let ak = Address(fromBase58String(ax))
663663 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
664664 let du = at(ak, bb)
665665 let cZ = du._1
666666 let da = du._2
667667 let ar = du._3
668668 let as = du._4
669669 let aq = du._5
670670 let dv = ae(aJ(cZ))
671671 if ((dv == dv))
672672 then {
673673 let dw = ae(aJ(da))
674674 if ((dw == dw))
675675 then {
676676 let ci = if ((bb == a))
677677 then invoke(ak, "callFunction", ["withdraw", [toString(dr)]], nil)
678678 else if ((bb == b))
679679 then invoke(ak, "unstakeAndGet", [dr], nil)
680680 else throw("Wrong position type")
681681 if ((ci == ci))
682682 then {
683683 let dx = ae(aJ(cZ))
684684 let dy = ae(aJ(da))
685685 let dz = $Tuple2((dx - dv), (dy - dw))
686686 let dA = dz._1
687687 let dB = dz._2
688688 let dC = if ((ds > 0))
689689 then {
690690 let dD = if (if ((dt == cZ))
691691 then (ds > dA)
692692 else false)
693693 then (ds - dA)
694694 else if (if ((dt == da))
695695 then (ds > dB)
696696 else false)
697697 then (ds - dB)
698698 else 0
699699 let dE = if ((dD > 0))
700700 then dp(bb, ax, cZ, da, ar, as, dD, dt)
701701 else 0
702702 if ((dE == dE))
703703 then {
704704 let dF = ae(aJ(cZ))
705705 let dG = ae(aJ(da))
706706 $Tuple2((dF - dv), (dG - dw))
707707 }
708708 else throw("Strict value is not equal to itself.")
709709 }
710710 else $Tuple2(dA, dB)
711711 let dH = dC._1
712712 let dI = dC._2
713713 $Tuple7(dH, cZ, dI, da, dx, dy, aq)
714714 }
715715 else throw("Strict value is not equal to itself.")
716716 }
717717 else throw("Strict value is not equal to itself.")
718718 }
719719 else throw("Strict value is not equal to itself.")
720720 }
721721
722722
723723 func dJ (aA,ax,dK,dL) = {
724724 let dM = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + dK) + t)), "Unknown position")
725725 let dN = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + y))
726726 let dO = if (dL)
727727 then getIntegerValue(this, (ax + B))
728728 else getIntegerValue(this, (ax + C))
729729 (dM + fraction(dM, (dO - dN), k))
730730 }
731731
732732
733733 func dP (aA,ax,dK,dQ) = {
734734 let dM = valueOrErrorMessage(getInteger(this, (((((ax + "_") + aA) + "_") + dK) + t)), "Unknown position")
735735 let dN = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + y))
736736 let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + v))
737737 let dr = dJ(aA, ax, dK, (dR > 0))
738738 let dS = aw(ax)
739739 let dT = Address(fromBase58String(aA))
740740 let dt = getStringValue(this, (((((ax + "_") + aA) + "_") + dK) + w))
741741 let ds = if ((dR > 0))
742742 then {
743743 let an = invoke(aH(), "getAssetDebt", [false, ((((ax + "_") + aA) + "_") + dK), dt], nil)
744744 if ($isInstanceOf(an, "Int"))
745745 then an
746746 else throw(($getType(an) + " couldn't be cast to Int"))
747747 }
748748 else 0
749749 let dU = dq(ax, dr, ds, dt)
750750 if ((dU == dU))
751751 then {
752752 let aq = dU._7
753753 let dy = dU._6
754754 let dx = dU._5
755755 let da = dU._4
756756 let dI = dU._3
757757 let cZ = dU._2
758758 let dH = dU._1
759759 let dV = if ((ds > 0))
760760 then invoke(aH(), "repayFor", [((aA + "_") + dK)], [AttachedPayment(aJ(dt), ds)])
761761 else 0
762762 if ((dV == dV))
763763 then ([DeleteEntry((((((ax + "_") + aA) + "_") + dK) + t)), DeleteEntry((((((ax + "_") + aA) + "_") + dK) + y)), IntegerEntry((ax + z), (dS - dr)), ScriptTransfer(dT, dH, aJ(cZ)), ScriptTransfer(dT, dI, aJ(da))] ++ bn(cZ, da, aq))
764764 else throw("Strict value is not equal to itself.")
765765 }
766766 else throw("Strict value is not equal to itself.")
767767 }
768768
769769
770770 func dW (dX) = {
771771 let dY = split(valueOrErrorMessage(getString(this, (dX + J)), ("No request with id " + dX)), ",")
772772 let aA = dY[0]
773773 let ax = dY[1]
774774 let bq = parseIntValue(dY[2])
775775 let bV = dY[3]
776776 let bs = parseIntValue(dY[4])
777777 let bW = dY[5]
778778 let ar = parseIntValue(dY[6])
779779 let as = parseIntValue(dY[7])
780780 let aq = dY[8]
781781 let dZ = dY[9]
782782 let ea = parseIntValue(dY[10])
783783 $Tuple11(aA, ax, bq, bV, bs, bW, ar, as, aq, dZ, ea)
784784 }
785785
786786
787787 func eb (ax,bb,aq,ec) = {
788788 let ed = if ((bb == a))
789789 then $Tuple3(aD(), "withdrawShareTokens", [ax, ec])
790790 else if ((bb == b))
791791 then $Tuple3(aE(Address(fromBase58String(ax))), "unstake", [aq, ec])
792792 else throw("Wrong pool type")
793793 let ee = ed._1
794794 let ef = ed._2
795795 let eg = ed._3
796796 let ci = invoke(ee, ef, eg, nil)
797797 if ((ci == ci))
798798 then ec
799799 else throw("Strict value is not equal to itself.")
800800 }
801801
802802
803803 @Callable(ad)
804-func replenishEVALONLY (ax,eh,ei) = if (if ((100 > eh))
804+func replenishEVALONLY (ax,eh,ei,bq,bs) = if (if ((100 > eh))
805805 then true
806806 else (eh > 300))
807807 then throw("Leverage can't be <100 and >300")
808808 else {
809809 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
810810 let ej = at(Address(fromBase58String(ax)), bb)
811811 let bV = ej._1
812812 let bW = ej._2
813813 let ar = ej._3
814814 let as = ej._4
815815 let aq = ej._5
816- let ek = if ((size(ad.payments) == 2))
817- then if ((aI(ad.payments[0].assetId) != bV))
818- then throw("Wrong payment asset A")
819- else if ((aI(ad.payments[1].assetId) != bW))
820- then throw("Wrong payment asset B")
821- else $Tuple4(ad.payments[0].amount, bV, ad.payments[1].amount, bW)
822- else if ((size(ad.payments) == 1))
823- then if ((aI(ad.payments[0].assetId) == bV))
824- then $Tuple4(ad.payments[0].amount, bV, 0, bW)
825- else if ((aI(ad.payments[0].assetId) == bW))
826- then $Tuple4(0, bV, ad.payments[0].amount, bW)
827- else throw("Wrong payment")
828- else throw("One or two payments expected")
829- let bq = ek._1
830- let br = ek._2
831- let bs = ek._3
832- let bt = ek._4
833- let el = if ((eh > 100))
816+ let dR = if ((eh > 100))
834817 then {
835- let bf = ( let an = invoke(Y, "getTWAP60", [br, false], nil)
818+ let bf = ( let an = invoke(Y, "getTWAP60", [bV, false], nil)
836819 if ($isInstanceOf(an, "(Int, Int)"))
837820 then an
838821 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
839- let bg = ( let an = invoke(Y, "getTWAP60", [bt, false], nil)
822+ let bg = ( let an = invoke(Y, "getTWAP60", [bW, false], nil)
840823 if ($isInstanceOf(an, "(Int, Int)"))
841824 then an
842825 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
843- let em = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
844- let dR = fraction(em, (eh - 100), 100)
845- let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ei, toString(dR), toString(1)], ",")
846- let en = {
847- let an = invoke(this, "createNewRequest", [dY], nil)
848- if ($isInstanceOf(an, "Int"))
849- then an
850- else throw(($getType(an) + " couldn't be cast to Int"))
851- }
852- if ((en == en))
853- then {
854- let eo = [((toString(ad.caller) + "_") + toString(1)), aq, ei, dR, toString(this), "replenishFromLandEVALONLY", toString(valueOrErrorMessage(en, "Can't create new request"))]
855- let ci = reentrantInvoke(aH(), "flashPosition", eo, nil)
856- if ((ci == ci))
857- then $Tuple2(getIntegerValue(this, "EVALONLY_STAKEDAMOUNT"), dR)
858- else throw("Strict value is not equal to itself.")
859- }
860- else throw("Strict value is not equal to itself.")
826+ let ek = (fraction(bf, bq, pow(10, 0, aK(bV), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bW), 0, 0, DOWN)))
827+ fraction(ek, (eh - 100), 100)
861828 }
862829 else $Tuple2(bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)._1, 0)
863- let ep = el._1
864- let dR = el._2
865- let eq = dq(ax, ep, dR, ei)
866- if ((eq == eq))
867- then {
868- let er = eq._6
869- let es = eq._5
870- let da = eq._4
871- let dI = eq._3
872- let cZ = eq._2
873- let dH = eq._1
874- let et = at(Address(fromBase58String(ax)), bb)
875- let eu = et._1
876- let ev = et._2
877- let ew = et._3
878- let ex = et._4
879- let ey = et._5
880- let ez = fraction(as, j, ar)
881- let eA = fraction(ex, j, ew)
882- let eB = (j - fraction(ez, j, eA))
883- let eC = if ((0 > eB))
884- then (eB * -1)
885- else eB
886- $Tuple2(nil, [es, er, eC])
887- }
888- else throw("Strict value is not equal to itself.")
830+ nil
889831 }
890832
891833
892834
893835 @Callable(ad)
894-func replenishFromLandEVALONLY (dX) = {
895- let eD = dW(dX)
896- let aA = eD._1
897- let ax = eD._2
898- let bq = eD._3
899- let bV = eD._4
900- let bs = eD._5
901- let bW = eD._6
902- let ar = eD._7
903- let as = eD._8
904- let aq = eD._9
905- let dZ = eD._10
906- let ea = eD._11
907- if ((size(ad.payments) != 1))
908- then throw("Wrong payment size")
909- else if (if ((aI(ad.payments[0].assetId) != dZ))
910- then true
911- else (ad.payments[0].amount != ea))
912- then throw("Wrong payment")
913- else {
914- let eE = if ((bV == dZ))
915- then $Tuple2((bq + ad.payments[0].amount), bs)
916- else $Tuple2(bq, (bs + ad.payments[0].amount))
917- let eF = eE._1
918- let eG = eE._2
919- let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
920- let eH = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
921- let ep = eH._1
922- let eI = eH._2
923- $Tuple2([IntegerEntry("EVALONLY_STAKEDAMOUNT", ep)], ep)
924- }
925- }
926-
927-
928-
929-@Callable(ad)
930836 func getShareAssetPriceREADONLY (aq) = {
931- let eJ = aZ([aq])
932- $Tuple2(nil, eJ[0])
837+ let el = aZ([aq])
838+ $Tuple2(nil, el[0])
933839 }
934840
935841
936842
937843 @Callable(ad)
938844 func getUserPositionShareAmountREADONLY (aA,bZ) = {
939845 let ax = valueOrErrorMessage(getString(this, (((aA + "_") + bZ) + u)), "Unknown position")
940846 let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + bZ) + v))
941847 let dr = dJ(aA, ax, bZ, (dR > 0))
942848 $Tuple2(nil, dr)
943849 }
944850
945851
946852
947853 @Callable(ad)
948854 func replenish (ax,eh,ei) = if (if ((100 > eh))
949855 then true
950856 else (eh > 300))
951857 then throw("Leverage can't be <100 and >300")
952858 else {
953859 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
954- let eK = at(Address(fromBase58String(ax)), bb)
955- let bV = eK._1
956- let bW = eK._2
957- let ar = eK._3
958- let as = eK._4
959- let aq = eK._5
960- let eL = if ((size(ad.payments) == 2))
860+ let em = at(Address(fromBase58String(ax)), bb)
861+ let bV = em._1
862+ let bW = em._2
863+ let ar = em._3
864+ let as = em._4
865+ let aq = em._5
866+ let en = if ((size(ad.payments) == 2))
961867 then if ((aI(ad.payments[0].assetId) != bV))
962868 then throw("Wrong payment asset A")
963869 else if ((aI(ad.payments[1].assetId) != bW))
964870 then throw("Wrong payment asset B")
965871 else $Tuple4(ad.payments[0].amount, bV, ad.payments[1].amount, bW)
966872 else if ((size(ad.payments) == 1))
967873 then if ((aI(ad.payments[0].assetId) == bV))
968874 then $Tuple4(ad.payments[0].amount, bV, 0, bW)
969875 else if ((aI(ad.payments[0].assetId) == bW))
970876 then $Tuple4(0, bV, ad.payments[0].amount, bW)
971877 else throw("Wrong payment")
972878 else throw("One or two payments expected")
973- let bq = eL._1
974- let br = eL._2
975- let bs = eL._3
976- let bt = eL._4
977- let eM = az(ax, toString(ad.caller))
879+ let bq = en._1
880+ let br = en._2
881+ let bs = en._3
882+ let bt = en._4
883+ let eo = az(ax, toString(ad.caller))
978884 if ((eh > 100))
979885 then {
980886 let bf = ( let an = invoke(Y, "getTWAP60", [br, false], nil)
981887 if ($isInstanceOf(an, "(Int, Int)"))
982888 then an
983889 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
984890 let bg = ( let an = invoke(Y, "getTWAP60", [bt, false], nil)
985891 if ($isInstanceOf(an, "(Int, Int)"))
986892 then an
987893 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._2
988- let em = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
989- let dR = fraction(em, (eh - 100), 100)
894+ let ek = (fraction(bf, bq, pow(10, 0, aK(br), 0, 0, DOWN)) + fraction(bg, bs, pow(10, 0, aK(bt), 0, 0, DOWN)))
895+ let ep = if ((ei == bV))
896+ then bf
897+ else bg
898+ let dR = (fraction(ek, (eh - 100), 100) / ep)
990899 let dY = makeString([toString(ad.caller), ax, toString(bq), br, toString(bs), bt, toString(ar), toString(as), aq, ei, toString(dR)], ",")
991- let en = {
900+ let eq = {
992901 let an = invoke(this, "createNewRequest", [dY], nil)
993902 if ($isInstanceOf(an, "Int"))
994903 then an
995904 else throw(($getType(an) + " couldn't be cast to Int"))
996905 }
997- if ((en == en))
906+ if ((eq == eq))
998907 then {
999- let eo = [((toString(ad.caller) + "_") + toString(eM)), aq, ei, dR, toString(this), "replenishFromLand", toString(valueOrErrorMessage(en, "Can't create new request"))]
1000- let ci = reentrantInvoke(aH(), "flashPosition", eo, nil)
908+ let er = [((toString(ad.caller) + "_") + toString(eo)), aq, ei, dR, toString(this), "replenishFromLand", toString(valueOrErrorMessage(eq, "Can't create new request"))]
909+ let ci = reentrantInvoke(aH(), "flashPosition", er, nil)
1001910 if ((ci == ci))
1002911 then nil
1003912 else throw("Strict value is not equal to itself.")
1004913 }
1005914 else throw("Strict value is not equal to itself.")
1006915 }
1007916 else {
1008- let eN = bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)
1009- let ep = eN._1
1010- let eI = eN._2
1011- (bX(ax, toString(ad.caller), ep, eI, eM, aq, bb, false) ++ bn(bV, bW, aq))
917+ let es = bU(bb, ax, h, bq, bV, bs, bW, ar, as, aq)
918+ let et = es._1
919+ let eu = es._2
920+ (bX(ax, toString(ad.caller), et, eu, eo, aq, bb, false) ++ bn(bV, bW, aq))
1012921 }
1013922 }
1014923
1015924
1016925
1017926 @Callable(ad)
1018927 func replenishFromLand (dX) = {
1019- let eO = dW(dX)
1020- let aA = eO._1
1021- let ax = eO._2
1022- let bq = eO._3
1023- let bV = eO._4
1024- let bs = eO._5
1025- let bW = eO._6
1026- let ar = eO._7
1027- let as = eO._8
1028- let aq = eO._9
1029- let dZ = eO._10
1030- let ea = eO._11
928+ let ev = dW(dX)
929+ let aA = ev._1
930+ let ax = ev._2
931+ let bq = ev._3
932+ let bV = ev._4
933+ let bs = ev._5
934+ let bW = ev._6
935+ let ar = ev._7
936+ let as = ev._8
937+ let aq = ev._9
938+ let dZ = ev._10
939+ let ea = ev._11
1031940 if ((size(ad.payments) != 1))
1032941 then throw("Wrong payment size")
1033942 else if (if ((aI(ad.payments[0].assetId) != dZ))
1034943 then true
1035944 else (ad.payments[0].amount != ea))
1036945 then throw("Wrong payment")
1037946 else {
1038- let eP = if ((bV == dZ))
947+ let ew = if ((bV == dZ))
1039948 then $Tuple2((bq + ad.payments[0].amount), bs)
1040949 else $Tuple2(bq, (bs + ad.payments[0].amount))
1041- let eF = eP._1
1042- let eG = eP._2
950+ let ex = ew._1
951+ let ey = ew._2
1043952 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Unknown pool")
1044- let eQ = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
1045- let ep = eQ._1
1046- let eI = eQ._2
953+ let ez = bU(bb, ax, g, bq, bV, bs, bW, ar, as, aq)
954+ let et = ez._1
955+ let eu = ez._2
1047956 let bZ = az(ax, toString(ad.caller))
1048- let eR = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + v), ea), StringEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + w), dZ)]
1049- let eS = bX(ax, aA, ep, eI, bZ, aq, bb, true)
1050- $Tuple2((((eS ++ bn(bV, bW, aq)) ++ eR) :+ DeleteEntry((dX + J))), ep)
957+ let eA = [IntegerEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + v), ea), StringEntry((((((ax + "_") + aA) + "_") + toString(bZ)) + w), dZ)]
958+ let eB = bX(ax, aA, et, eu, bZ, aq, bb, true)
959+ $Tuple2((((eB ++ bn(bV, bW, aq)) ++ eA) :+ DeleteEntry((dX + J))), et)
1051960 }
1052961 }
1053962
1054963
1055964
1056965 @Callable(ad)
1057966 func withdraw (ax,dK) = dP(toString(ad.caller), ax, toString(dK), false)
1058967
1059968
1060969
1061970 @Callable(ad)
1062-func createUpdateStopLoss (dK,eT,af,eU) = {
1063- let eV = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
971+func createUpdateStopLoss (dK,eC,af,eD) = {
972+ let eE = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1064973 if ($isInstanceOf(an, "(Int, Int)"))
1065974 then an
1066975 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
1067- if (!(isDefined(getInteger(this, (((((eT + "_") + toString(ad.caller)) + "_") + toString(dK)) + t)))))
976+ if (!(isDefined(getInteger(this, (((((eC + "_") + toString(ad.caller)) + "_") + toString(dK)) + t)))))
1068977 then throw("There are no user position")
1069- else if ((0 >= eU))
978+ else if ((0 >= eD))
1070979 then throw("Price must be greater than 0")
1071- else if ((eU > eV))
980+ else if ((eD > eE))
1072981 then throw("Price must be less than current token price")
1073- else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P), eU)]
982+ else [IntegerEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eC) + "_") + af) + P), eD)]
1074983 }
1075984
1076985
1077986
1078987 @Callable(ad)
1079-func deleteStopLoss (dK,eT,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P)))))
988+func deleteStopLoss (dK,eC,af) = if (!(isDefined(getInteger(this, (((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eC) + "_") + af) + P)))))
1080989 then throw("No entry")
1081- else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eT) + "_") + af) + P))]
990+ else [DeleteEntry((((((((toString(ad.caller) + "_") + toString(dK)) + "_") + eC) + "_") + af) + P))]
1082991
1083992
1084993
1085994 @Callable(ad)
1086995 func createNewRequest (eg) = valueOrElse(ac(ad), {
1087- let en = (valueOrElse(getInteger(this, K), 0) + 1)
1088- $Tuple2([StringEntry((toString(en) + J), eg), IntegerEntry(K, en)], en)
996+ let eq = (valueOrElse(getInteger(this, K), 0) + 1)
997+ $Tuple2([StringEntry((toString(eq) + J), eg), IntegerEntry(K, eq)], eq)
1089998 })
1090999
10911000
10921001
10931002 @Callable(ad)
10941003 func stopLoss (aA,dK,ax,af) = {
1095- let eV = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
1004+ let eE = ( let an = invoke(Y, "getTWAP60", [af, false], nil)
10961005 if ($isInstanceOf(an, "(Int, Int)"))
10971006 then an
10981007 else throw(($getType(an) + " couldn't be cast to (Int, Int)")))._1
10991008 if (!(isDefined(getInteger(this, (((((((aA + "_") + toString(dK)) + "_") + ax) + "_") + af) + P)))))
11001009 then throw("No entry")
11011010 else (dP(toString(ad.caller), ax, toString(dK), true) :+ DeleteEntry((((((((aA + "_") + toString(dK)) + "_") + ax) + "_") + af) + P)))
11021011 }
11031012
11041013
11051014
11061015 @Callable(ad)
1107-func liquidate (aA,dK,eW) = {
1016+func liquidate (aA,dK,eF) = {
11081017 let ax = valueOrErrorMessage(getString(this, (((aA + "_") + dK) + u)), "no position")
11091018 let bb = valueOrErrorMessage(getString(this, (L + ax)), "Pool is not inited")
1110- let eX = at(Address(fromBase58String(ax)), bb)
1111- let bV = eX._1
1112- let bW = eX._2
1113- let ar = eX._3
1114- let as = eX._4
1115- let aq = eX._5
1116- let ec = eb(ax, bb, aq, eW)
1019+ let eG = at(Address(fromBase58String(ax)), bb)
1020+ let bV = eG._1
1021+ let bW = eG._2
1022+ let ar = eG._3
1023+ let as = eG._4
1024+ let aq = eG._5
1025+ let ec = eb(ax, bb, aq, eF)
11171026 let dR = getIntegerValue(this, (((((ax + "_") + aA) + "_") + dK) + v))
11181027 let dt = getStringValue(this, (((((ax + "_") + aA) + "_") + dK) + w))
11191028 let dr = dJ(aA, ax, dK, (dR > 0))
11201029 if ((dR > 0))
1121- then [IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - eW))]
1122- else ([IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + C)))] ++ [IntegerEntry((ax + z), (aw(ax) - eW)), IntegerEntry((((((ax + "_") + aA) + "_") + dK) + t), (dr - eW)), ScriptTransfer(ad.caller, ec, fromBase58String(aq))])
1030+ then [IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + B))), IntegerEntry((ax + A), (ay(ax) - eF))]
1031+ else ([IntegerEntry((((((ax + "_") + aA) + "_") + dK) + y), getIntegerValue(this, (ax + C)))] ++ [IntegerEntry((ax + z), (aw(ax) - eF)), IntegerEntry((((((ax + "_") + aA) + "_") + dK) + t), (dr - eF)), ScriptTransfer(ad.caller, ec, fromBase58String(aq))])
11231032 }
11241033
11251034
11261035
11271036 @Callable(ad)
1128-func capitalizeExKeeper (ax,au,eY,eZ,fa,co,cp,cq,cr,cs,ct,cu) = {
1129- let fb = if (fa)
1037+func capitalizeExKeeper (ax,au,eH,eI,eJ,co,cp,cq,cr,cs,ct,cu) = {
1038+ let eK = if (eJ)
11301039 then cg(au, ax)
11311040 else {
1132- let fc = if ((au == a))
1041+ let eL = if ((au == a))
11331042 then aa
11341043 else ab
1135- $Tuple2(eZ, fc)
1044+ $Tuple2(eI, eL)
11361045 }
1137- let fd = fb._1
1138- let fc = fb._2
1139- let fe = ck(eY, eZ, fc, co, cp, cq, cr, cs, ct, cu)
1140- let bB = (fd - eZ)
1141- let ff = if ((bB > 0))
1046+ let eM = eK._1
1047+ let eL = eK._2
1048+ let eN = ck(eH, eI, eL, co, cp, cq, cr, cs, ct, cu)
1049+ let bB = (eM - eI)
1050+ let eO = if ((bB > 0))
11421051 then [IntegerEntry((ax + N), (bB + valueOrElse(getInteger(this, (ax + N)), 0)))]
11431052 else nil
1144- (cG(ax, au, eY, fe) ++ ff)
1053+ (cG(ax, au, eH, eN) ++ eO)
11451054 }
11461055
11471056
11481057
11491058 @Callable(ad)
1150-func capitalizeExPuzzle (ax,au,eY,eZ,fa,cx,cy,cu) = {
1151- let fg = if (fa)
1059+func capitalizeExPuzzle (ax,au,eH,eI,eJ,cx,cy,cu) = {
1060+ let eP = if (eJ)
11521061 then cg(au, ax)
11531062 else {
1154- let fc = if ((au == a))
1063+ let eL = if ((au == a))
11551064 then aa
11561065 else ab
1157- $Tuple2(eZ, fc)
1066+ $Tuple2(eI, eL)
11581067 }
1159- let fd = fg._1
1160- let fc = fg._2
1161- let fe = cw(eY, eZ, fc, cx, cy, cu)
1162- let bB = (fd - eZ)
1163- let ff = if ((bB > 0))
1068+ let eM = eP._1
1069+ let eL = eP._2
1070+ let eN = cw(eH, eI, eL, cx, cy, cu)
1071+ let bB = (eM - eI)
1072+ let eO = if ((bB > 0))
11641073 then [IntegerEntry((ax + N), (bB + valueOrElse(getInteger(this, (ax + N)), 0)))]
11651074 else nil
1166- (cG(ax, au, eY, fe) ++ ff)
1075+ (cG(ax, au, eH, eN) ++ eO)
11671076 }
11681077
11691078
11701079
11711080 @Callable(ad)
1172-func capitalizeExSwopFi (ax,au,eY,eZ,fa,cA,cB,cC,cD,cE,cF,cu) = {
1173- let fh = if (fa)
1081+func capitalizeExSwopFi (ax,au,eH,eI,eJ,cA,cB,cC,cD,cE,cF,cu) = {
1082+ let eQ = if (eJ)
11741083 then cg(au, ax)
11751084 else {
1176- let fc = if ((au == a))
1085+ let eL = if ((au == a))
11771086 then aa
11781087 else ab
1179- $Tuple2(eZ, fc)
1088+ $Tuple2(eI, eL)
11801089 }
1181- let fd = fh._1
1182- let fc = fh._2
1183- let fe = cz(eY, eZ, fc, cA, cB, cC, cD, cE, cF, cu)
1184- let bB = (fd - eZ)
1185- let ff = if ((bB > 0))
1090+ let eM = eQ._1
1091+ let eL = eQ._2
1092+ let eN = cz(eH, eI, eL, cA, cB, cC, cD, cE, cF, cu)
1093+ let bB = (eM - eI)
1094+ let eO = if ((bB > 0))
11861095 then [IntegerEntry((ax + N), (bB + valueOrElse(getInteger(this, (ax + N)), 0)))]
11871096 else nil
1188- (cG(ax, au, eY, fe) ++ ff)
1097+ (cG(ax, au, eH, eN) ++ eO)
11891098 }
11901099
11911100
11921101
11931102 @Callable(ad)
1194-func initNewPool (au,ak,fi,fj,fk,fl,fm,fn) = if (if ((au != a))
1103+func initNewPool (au,ak,eR,eS,eT,eU,eV,eW) = if (if ((au != a))
11951104 then (au != b)
11961105 else false)
11971106 then throw("Wrong type")
11981107 else {
1199- let fo = at(Address(fromBase58String(ak)), au)
1200- let ao = fo._1
1201- let ap = fo._2
1202- let fp = fo._3
1203- let fq = fo._4
1204- let aq = fo._5
1205-[IntegerEntry((ak + D), fi), IntegerEntry((ak + E), fj), IntegerEntry((ak + F), fk), IntegerEntry((ak + G), fl), IntegerEntry((ak + H), fm), IntegerEntry((ak + I), fn), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
1108+ let eX = at(Address(fromBase58String(ak)), au)
1109+ let ao = eX._1
1110+ let ap = eX._2
1111+ let eY = eX._3
1112+ let eZ = eX._4
1113+ let aq = eX._5
1114+[IntegerEntry((ak + D), eR), IntegerEntry((ak + E), eS), IntegerEntry((ak + F), eT), IntegerEntry((ak + G), eU), IntegerEntry((ak + H), eV), IntegerEntry((ak + I), eW), IntegerEntry((ak + B), 0), IntegerEntry((ak + C), 0), StringEntry((L + ak), au), StringEntry((aq + M), ak)]
12061115 }
12071116
12081117
12091118
12101119 @Callable(ad)
12111120 func capitalizeTest (ax,bb,cH,cI) = {
12121121 let ak = Address(fromBase58String(ax))
1213- let fr = at(ak, bb)
1214- let bV = fr._1
1215- let bW = fr._2
1216- let ar = fr._3
1217- let as = fr._4
1218- let aq = fr._5
1219- let fs = if ((cH == bV))
1122+ let fa = at(ak, bb)
1123+ let bV = fa._1
1124+ let bW = fa._2
1125+ let ar = fa._3
1126+ let as = fa._4
1127+ let aq = fa._5
1128+ let fb = if ((cH == bV))
12201129 then $Tuple2(cI, 0)
12211130 else $Tuple2(0, cI)
1222- let bq = fs._1
1223- let bs = fs._2
1224- let ft = bU(bb, ax, i, bq, bV, bs, bW, ar, as, aq)
1225- let bY = ft._1
1226- let cM = ft._2
1131+ let bq = fb._1
1132+ let bs = fb._2
1133+ let fc = bU(bb, ax, i, bq, bV, bs, bW, ar, as, aq)
1134+ let bY = fc._1
1135+ let cM = fc._2
12271136 let cN = valueOrElse(getInteger(this, (ax + B)), 0)
12281137 let cO = valueOrElse(getInteger(this, (ax + C)), 0)
12291138 let cP = aw(ax)
12301139 let cQ = ay(ax)
12311140 let cR = fraction(cQ, j, cP)
12321141 let cS = fraction(bY, cR, j)
12331142 let cT = (bY - cS)
12341143 let cU = (cN + fraction(cS, k, cQ))
12351144 let cV = (cO + fraction(cT, k, (cP - cQ)))
12361145 let cW = fraction(cS, aB(ax, d), l)
12371146 let cX = fraction(cT, aB(ax, c), l)
12381147 ([IntegerEntry((ax + B), cU), IntegerEntry((ax + C), cV), IntegerEntry((ax + z), (((cP + bY) - cW) - cX)), IntegerEntry((ax + A), ((cQ + cS) - cW)), ScriptTransfer(W, (cW + cX), fromBase58String(aq))] ++ bn(bV, bW, aq))
12391148 }
12401149
12411150
12421151
12431152 @Callable(ad)
12441153 func claimFarmedTest (au,ax) = if ((au == a))
12451154 then {
12461155 let ch = ae(aa)
12471156 if ((ch == ch))
12481157 then {
12491158 let ci = invoke(aD(), "claim", [ax], nil)
12501159 if ((ci == ci))
12511160 then {
12521161 let cj = ae(aa)
12531162 $Tuple2(nil, $Tuple2((cj - ch), aa))
12541163 }
12551164 else throw("Strict value is not equal to itself.")
12561165 }
12571166 else throw("Strict value is not equal to itself.")
12581167 }
12591168 else if ((au == b))
12601169 then {
12611170 let ch = ae(ab)
12621171 if ((ch == ch))
12631172 then {
12641173 let ci = invoke(aE(Address(fromBase58String(ax))), "claimWX", [ax], nil)
12651174 if ((ci == ci))
12661175 then {
12671176 let cj = ae(ab)
12681177 $Tuple2(nil, $Tuple2((cj - ch), ab))
12691178 }
12701179 else throw("Strict value is not equal to itself.")
12711180 }
12721181 else throw("Strict value is not equal to itself.")
12731182 }
12741183 else throw("Wrong pool type")
12751184
12761185
1277-@Verifier(fu)
1278-func fv () = sigVerify(fu.bodyBytes, fu.proofs[0], fu.senderPublicKey)
1186+@Verifier(fd)
1187+func fe () = sigVerify(fd.bodyBytes, fd.proofs[0], fd.senderPublicKey)
12791188

github/deemru/w8io/169f3d6 
203.21 ms