UNPKG

@mimicry/sdk

Version:

A node SDK designed to simplify interaction with the Mimicry Protocol smart contracts.

832 lines 110 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Market", "sourceName": "contracts/Market.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InsufficientOpeningValue", "type": "error" }, { "inputs": [], "name": "InvalidAdjustmentAmount", "type": "error" }, { "inputs": [], "name": "InvalidSender", "type": "error" }, { "inputs": [], "name": "InvalidTokenId", "type": "error" }, { "inputs": [], "name": "NativeTokenIncorrectAmount", "type": "error" }, { "inputs": [], "name": "NativeTokenTransferFailed", "type": "error" }, { "inputs": [], "name": "OnlyAccountant", "type": "error" }, { "inputs": [], "name": "PositionEditDurationLimit", "type": "error" }, { "inputs": [], "name": "PositionIsLiquidated", "type": "error" }, { "inputs": [], "name": "UnsupportedCurrency", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "previousAdmin", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newAdmin", "type": "address" } ], "name": "AdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "beacon", "type": "address" } ], "name": "BeaconUpgraded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "valueProvider", "type": "address" }, { "indexed": false, "internalType": "address", "name": "accountantAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "metadataURI", "type": "string" } ], "name": "MarketInitialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newMetadataURI", "type": "string" } ], "name": "MetadataURIUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "enum Direction", "name": "direction", "type": "uint8" }, { "indexed": false, "internalType": "uint256", "name": "closingUsdValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "closingSpotPrice", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "isLiquidated", "type": "bool" } ], "name": "PositionClosed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "enum Direction", "name": "direction", "type": "uint8" }, { "indexed": false, "internalType": "address", "name": "currency", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "openingTokenAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "openingUsdValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "openingSpotPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "multiplier", "type": "uint256" } ], "name": "PositionOpened", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "int256", "name": "adjustmentAmountUsd", "type": "int256" } ], "name": "PositionUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "_currency", "type": "address" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "uint256", "name": "_fee", "type": "uint256" } ], "name": "_handlePayout", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "accountant", "outputs": [ { "internalType": "contract Accountant", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256[]", "name": "positionIds", "type": "uint256[]" } ], "name": "batchClosePositions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "calculatePositionValues", "outputs": [ { "internalType": "uint256", "name": "longsValue", "type": "uint256" }, { "internalType": "uint256", "name": "shortsValue", "type": "uint256" }, { "internalType": "uint256", "name": "transferAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "closePosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "commitValueTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feeDividend", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum Direction", "name": "_direction", "type": "uint8" }, { "internalType": "address", "name": "_tokenAddress", "type": "address" } ], "name": "getCurrencyPoolUSDValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum Direction", "name": "_direction", "type": "uint8" } ], "name": "getDirectionUSDValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getIndexValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum Direction", "name": "_direction", "type": "uint8" } ], "name": "getLastLiquidationTimestamp", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getPositionValue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "increasePosition", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "contract IValueProvider", "name": "_valueProvider", "type": "address" }, { "internalType": "contract IMimicry", "name": "_mimicryAddress", "type": "address" }, { "internalType": "contract Accountant", "name": "_accountantAddress", "type": "address" }, { "internalType": "contract IERC721Upgradeable", "name": "_positionToken", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_metadataURI", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "isPositionEditable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "isPositionLiquidated", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadataURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mimicry", "outputs": [ { "internalType": "contract IMimicry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minPositionEditDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "enum Direction", "name": "_direction", "type": "uint8" }, { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_openingValue", "type": "uint256" } ], "name": "openPosition", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "positionToken", "outputs": [ { "internalType": "contract IERC721Upgradeable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "positionsMap", "outputs": [ { "internalType": "enum Direction", "name": "direction", "type": "uint8" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint256", "name": "multiplier", "type": "uint256" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "createdAt", "type": "uint256" }, { "internalType": "uint256", "name": "editedAt", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_metadataURI", "type": "string" } ], "name": "setMetadataURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" } ], "name": "upgradeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "valueProvider", "outputs": [ { "internalType": "contract IValueProvider", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000556200005b60201b60201c565b62000206565b600060019054906101000a900460ff1615620000ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a590620001a9565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001205760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001179190620001e9565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200019160278362000122565b91506200019e8262000133565b604082019050919050565b60006020820190508181036000830152620001c48162000182565b9050919050565b600060ff82169050919050565b620001e381620001cb565b82525050565b6000602082019050620002006000830184620001d8565b92915050565b6080516157a56200023e60003960008181610a9b01528181610b2a01528181610ccb01528181610d5a0152610f0a01526157a56000f3fe6080604052600436106101d85760003560e01c806371488c9611610102578063a2a1079f11610095578063ef5ae54611610064578063ef5ae54614610678578063f2fde38b146106b5578063f39e321f146106de578063f86d054514610709576101d8565b8063a2a1079f146105aa578063b86a0aaa146105d5578063daecdff614610612578063e253433e1461064f576101d8565b80638d321896116100d15780638d321896146105045780638da5cb5b1461052d5780639317c20014610558578063a126d60114610581576101d8565b806371488c961461045a578063715018a614610497578063750521f5146104ae5780637f78c3be146104d7576101d8565b806344add44b1161017a5780635148bbcb116101495780635148bbcb146103ba57806352d1902d146103f7578063538fe6af146104225780636fe5452c1461043e576101d8565b806344add44b1461031d5780634f1ef286146103485780634fb3ccc5146103645780635037b7e91461038f576101d8565b80630ba6a356116101b65780630ba6a35614610270578063223c41ac14610287578063260cca61146102b25780633659cfe6146102f4576101d8565b806303ee438c146101dd57806306fdde03146102085780630a91881414610233575b600080fd5b3480156101e957600080fd5b506101f2610734565b6040516101ff9190613c72565b60405180910390f35b34801561021457600080fd5b5061021d6107c2565b60405161022a9190613c72565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190613cde565b610850565b6040516102679190613d26565b60405180910390f35b34801561027c57600080fd5b50610285610986565b005b34801561029357600080fd5b5061029c610a0a565b6040516102a99190613dc0565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613cde565b610a30565b6040516102eb96959493929190613e82565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190613f0f565b610a99565b005b34801561032957600080fd5b50610332610c22565b60405161033f9190613f3c565b60405180910390f35b610362600480360381019061035d919061408c565b610cc9565b005b34801561037057600080fd5b50610379610e06565b6040516103869190614109565b60405180910390f35b34801561039b57600080fd5b506103a4610e2c565b6040516103b19190614145565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190614185565b610e52565b6040516103ee9190613f3c565b60405180910390f35b34801561040357600080fd5b5061040c610f06565b60405161041991906141cb565b60405180910390f35b61043c600480360381019061043791906141e6565b610fbf565b005b61045860048036038101906104539190614239565b61172f565b005b34801561046657600080fd5b50610481600480360381019061047c9190614279565b611de6565b60405161048e9190613f3c565b60405180910390f35b3480156104a357600080fd5b506104ac611e9d565b005b3480156104ba57600080fd5b506104d560048036038101906104d09190614319565b611eb1565b005b3480156104e357600080fd5b506104ec611f08565b6040516104fb93929190614366565b60405180910390f35b34801561051057600080fd5b5061052b600480360381019061052691906143f3565b611fb8565b005b34801561053957600080fd5b50610542612089565b60405161054f9190614453565b60405180910390f35b34801561056457600080fd5b5061057f600480360381019061057a9190614566565b6120b3565b005b34801561058d57600080fd5b506105a860048036038101906105a39190613cde565b612377565b005b3480156105b657600080fd5b506105bf612384565b6040516105cc9190614656565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613cde565b6123aa565b6040516106099190613f3c565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190613cde565b61260d565b6040516106469190613d26565b60405180910390f35b34801561065b57600080fd5b5061067660048036038101906106719190614671565b61263c565b005b34801561068457600080fd5b5061069f600480360381019061069a9190614185565b6128c4565b6040516106ac9190613f3c565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613f0f565b612978565b005b3480156106ea57600080fd5b506106f36129fc565b6040516107009190613f3c565b60405180910390f35b34801561071557600080fd5b5061071e612a02565b60405161072b9190613f3c565b60405180910390f35b60d1805461074190614707565b80601f016020809104026020016040519081016040528092919081815260200182805461076d90614707565b80156107ba5780601f1061078f576101008083540402835291602001916107ba565b820191906000526020600020905b81548152906001019060200180831161079d57829003601f168201915b505050505081565b60d080546107cf90614707565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90614707565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b505050505081565b600081600160cd60008381526020019081526020016000206002015410156108a4576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060cd60008581526020019081526020016000209050806003015460cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635148bbcb8360000160009054906101000a900460ff166040518263ffffffff1660e01b815260040161092c9190614739565b60206040518083038186803b15801561094457600080fd5b505afa158015610958573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097c9190614769565b1192505050919050565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ba6a3566040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156109f057600080fd5b505af1158015610a04573d6000803e3d6000fd5b50505050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60cd6020528060005260406000206000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154905086565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f90614808565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610b67612a08565b73ffffffffffffffffffffffffffffffffffffffff1614610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb49061489a565b60405180910390fd5b610bc681612a5f565b610c1f81600067ffffffffffffffff811115610be557610be4613f61565b5b6040519080825280601f01601f191660200182016040528015610c175781602001600182028036833780820191505090505b506000612a6a565b50565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344add44b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c8c57600080fd5b505afa158015610ca0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc49190614769565b905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f90614808565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610d97612a08565b73ffffffffffffffffffffffffffffffffffffffff1614610ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de49061489a565b60405180910390fd5b610df682612a5f565b610e0282826001612a6a565b5050565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635148bbcb836040518263ffffffff1660e01b8152600401610eaf9190614739565b60206040518083038186803b158015610ec757600080fd5b505afa158015610edb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eff9190614769565b9050919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d9061492c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60d260009054906101000a900460ff161561100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690614998565b60405180910390fd5b600160d260006101000a81548160ff021916908315150217905550611032612be7565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634fb92558836040518263ffffffff1660e01b815260040161108d9190614453565b60206040518083038186803b1580156110a557600080fd5b505afa1580156110b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dd91906149e4565b611113576040517f2263f4e200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633bb8845884846040518363ffffffff1660e01b8152600401611172929190614a11565b60206040518083038186803b15801561118a57600080fd5b505afa15801561119e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c29190614769565b90506305f5e100811015611202576040517fdacd896000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561123e5750348214155b806112825750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112815750600034115b5b156112b9576040517fdd944ae300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ba6a3566040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561132357600080fd5b505af1158015611337573d6000803e3d6000fd5b50505050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461139d5761139c3330848673ffffffffffffffffffffffffffffffffffffffff16612cc9909392919063ffffffff16565b5b60006113a7612d52565b9050600060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663df4ca65d8787876040518463ffffffff1660e01b815260040161140a93929190614a3a565b602060405180830381600087803b15801561142457600080fd5b505af1158015611438573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145c9190614769565b90506040518060c0016040528087600181111561147c5761147b613ddb565b5b81526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020018381526020014281526020014281525060cd600084815260200190815260200160002060008201518160000160006101000a81548160ff021916908360018111156114f1576114f0613ddb565b5b021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010155606082015181600201556080820151816003015560a082015181600401559050503373ffffffffffffffffffffffffffffffffffffffff16827ffe48a5a755ff0884e318d222d6178d5a66cdfade75ce40f5c9d8cc43bafeffe488888860ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633bb884588c8c6040518363ffffffff1660e01b8152600401611601929190614a11565b60206040518083038186803b15801561161957600080fd5b505afa15801561162d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116519190614769565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344add44b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b957600080fd5b505afa1580156116cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f19190614769565b8860405161170496959493929190613e82565b60405180910390a3505050600060d260006101000a81548160ff021916908315150217905550505050565b813373ffffffffffffffffffffffffffffffffffffffff1660cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016117a29190613f3c565b60206040518083038186803b1580156117ba57600080fd5b505afa1580156117ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f29190614a86565b73ffffffffffffffffffffffffffffffffffffffff161461183f576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60d260009054906101000a900460ff161561188f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188690614998565b60405180910390fd5b600160d260006101000a81548160ff0219169083151502179055506118b2612be7565b6118bb8361260d565b6118f1576040517f0ad455e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082141561192c576040517f698669ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060cd60008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156119a35750348314155b80611a0b5750600073ffffffffffffffffffffffffffffffffffffffff168160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015611a0a5750600034115b5b15611a42576040517fdd944ae300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ba6a3566040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611aac57600080fd5b505af1158015611ac0573d6000803e3d6000fd5b50505050611acd84610850565b15611b04576040517f8b947e6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637997ef768360000160009054906101000a900460ff168460000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876040518463ffffffff1660e01b8152600401611b9a93929190614a3a565b602060405180830381600087803b158015611bb457600080fd5b505af1158015611bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bec9190614769565b905080826001016000828254611c029190614ae2565b92505081905550428260040181905550600073ffffffffffffffffffffffffffffffffffffffff168260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cbc57611cbb3330868560000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612cc9909392919063ffffffff16565b5b847f9d7414472f717282fd60ccd0c0dcb25649a9185c68ca5a73309264fe66d1d69760ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633bb884588560000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b8152600401611d5f929190614a11565b60206040518083038186803b158015611d7757600080fd5b505afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190614769565b604051611dbc9190614b51565b60405180910390a25050600060d260006101000a81548160ff021916908315150217905550505050565b600060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371488c9684846040518363ffffffff1660e01b8152600401611e45929190614b6c565b60206040518083038186803b158015611e5d57600080fd5b505afa158015611e71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e959190614769565b905092915050565b611ea5612e06565b611eaf6000612e84565b565b611eb9612e06565b818160d19190611eca929190613b36565b507fefafb90526da1636e1335eac0151301742fb755d986954c613b90e891778ba398282604051611efc929190614bc2565b60405180910390a15050565b600080600060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637f78c3be6040518163ffffffff1660e01b815260040160606040518083038186803b158015611f7557600080fd5b505afa158015611f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fad9190614be6565b925092509250909192565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461203f576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82829050811015612083576120708484848481811061206457612063614c39565b5b90506020020135612f4a565b808061207b90614c68565b915050612042565b50505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060019054906101000a900460ff161590508080156120e45750600160008054906101000a900460ff1660ff16105b8061211157506120f330613418565b1580156121105750600160008054906101000a900460ff1660ff16145b5b612150576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214790614d23565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561218d576001600060016101000a81548160ff0219169083151502179055505b61219561343b565b61219d613494565b8860c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508760ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508560cc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848460d091906122b2929190613b36565b50828260d191906122c4929190613b36565b50611c2060cf81905550601e60ce819055507f9b7f72f0f14a7902f022b31f141744d17e6858e0827096e4b7b944528ca8bd9c8988858560405161230b9493929190614d43565b60405180910390a1801561236c5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516123639190614dcb565b60405180910390a15b505050505050505050565b6123813382612f4a565b50565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600081600160cd60008381526020019081526020016000206002015410156123fe576040517f3f6cc76800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61240783610850565b156124155760009150612607565b600060cd60008581526020019081526020016000209050600060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371488c968360000160009054906101000a900460ff168460000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016124c0929190614b6c565b60206040518083038186803b1580156124d857600080fd5b505afa1580156124ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125109190614769565b905061260281836001015460cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663edb89f7e8660000160009054906101000a900460ff168760000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016125ad929190614b6c565b60206040518083038186803b1580156125c557600080fd5b505afa1580156125d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fd9190614769565b6134e5565b935050505b50919050565b600060cf5460cd6000848152602001908152602001600020600401546126339190614ae2565b42119050919050565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146126c3576040517fbaf4cbdd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156128565760008373ffffffffffffffffffffffffffffffffffffffff168360405161271e90614e17565b60006040518083038185875af1925050503d806000811461275b576040519150601f19603f3d011682016040523d82523d6000602084013e612760565b606091505b505090508061279b576040517f3022f2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008211156128505760006127ae612089565b73ffffffffffffffffffffffffffffffffffffffff16836040516127d190614e17565b60006040518083038185875af1925050503d806000811461280e576040519150601f19603f3d011682016040523d82523d6000602084013e612813565b606091505b505090508061284e576040517f3022f2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b506128be565b61288183838673ffffffffffffffffffffffffffffffffffffffff166135c19092919063ffffffff16565b60008111156128bd576128bc612895612089565b828673ffffffffffffffffffffffffffffffffffffffff166135c19092919063ffffffff16565b5b5b50505050565b600060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ef5ae546836040518263ffffffff1660e01b81526004016129219190614739565b60206040518083038186803b15801561293957600080fd5b505afa15801561294d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129719190614769565b9050919050565b612980612e06565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e790614e9e565b60405180910390fd5b6129f981612e84565b50565b60cf5481565b60ce5481565b6000612a367f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613647565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612a67612e06565b50565b612a967f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b613651565b60000160009054906101000a900460ff1615612aba57612ab58361365b565b612be2565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0057600080fd5b505afa925050508015612b3157506040513d601f19601f82011682018060405250810190612b2e9190614eea565b60015b612b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6790614f89565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc9061501b565b60405180910390fd5b50612be1838383613714565b5b505050565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1ccbd886040518163ffffffff1660e01b815260040160206040518083038186803b158015612c4f57600080fd5b505afa158015612c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8791906149e4565b15612cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cbe906150ad565b60405180910390fd5b565b612d4c846323b872dd60e01b858585604051602401612cea939291906150cd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613740565b50505050565b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c43879d5336040518263ffffffff1660e01b8152600401612daf9190614453565b602060405180830381600087803b158015612dc957600080fd5b505af1158015612ddd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e019190614769565b905090565b612e0e613807565b73ffffffffffffffffffffffffffffffffffffffff16612e2c612089565b73ffffffffffffffffffffffffffffffffffffffff1614612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7990615150565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60d260009054906101000a900460ff1615612f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9190614998565b60405180910390fd5b600160d260006101000a81548160ff02191690831515021790555060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e1ccbd886040518163ffffffff1660e01b815260040160206040518083038186803b15801561301d57600080fd5b505afa158015613031573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305591906149e4565b15801561306857506130668161260d565b155b1561309f576040517f0ad455e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060cd6000838152602001908152602001600020905060cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ba6a3566040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561312057600080fd5b505af1158015613134573d6000803e3d6000fd5b5050505060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663067bba6e84846040518363ffffffff1660e01b8152600401613195929190614a11565b600060405180830381600087803b1580156131af57600080fd5b505af11580156131c3573d6000803e3d6000fd5b5050505060006131d2836123aa565b90506131dd83610850565b6132795760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631b5cfc46838660ce546127106040518563ffffffff1660e01b815260040161324694939291906152f4565b600060405180830381600087803b15801561326057600080fd5b505af1158015613274573d6000803e3d6000fd5b505050505b8373ffffffffffffffffffffffffffffffffffffffff16837f0c604c8c6e0078dad58f340a712904ca423c20dcd5e2468836a33322befdf5cd8460000160009054906101000a900460ff168460c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344add44b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561332d57600080fd5b505afa158015613341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133659190614769565b61336e89610850565b60405161337e949392919061533b565b60405180910390a360cd6000848152602001908152602001600020600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000905560028201600090556003820160009055600482016000905550505050600060d260006101000a81548160ff0219169083151502179055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661348a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613481906153f2565b60405180910390fd5b61349261380f565b565b600060019054906101000a900460ff166134e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134da906153f2565b60405180910390fd5b565b6000806000801985870985870292508281108382030391505060008114156135215783828161351757613516615412565b5b04925050506135ba565b80841161352d57600080fd5b60008486880990508281118203915080830392506000600186190186169050808604955080840493506001818260000304019050808302841793506000600287600302189050808702600203810290508087026002038102905080870260020381029050808702600203810290508087026002038102905080870260020381029050808502955050505050505b9392505050565b6136428363a9059cbb60e01b84846040516024016135e0929190614a11565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613740565b505050565b6000819050919050565b6000819050919050565b61366481613418565b6136a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161369a906154b3565b60405180910390fd5b806136d07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b613647565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61371d83613870565b60008251118061372a5750805b1561373b5761373983836138bf565b505b505050565b60006137a2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166139a39092919063ffffffff16565b905060008151111561380257808060200190518101906137c291906149e4565b613801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f890615545565b60405180910390fd5b5b505050565b600033905090565b600060019054906101000a900460ff1661385e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613855906153f2565b60405180910390fd5b61386e613869613807565b612e84565b565b6138798161365b565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606138ca83613418565b613909576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613900906155d7565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516139319190615633565b600060405180830381855af49150503d806000811461396c576040519150601f19603f3d011682016040523d82523d6000602084013e613971565b606091505b509150915061399982826040