UNPKG

@mimicry/sdk

Version:

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

653 lines 77.8 kB
{ "_format": "hh-sol-artifact-1", "contractName": "Mimicry", "sourceName": "contracts/Mimicry.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "CurrencyAlreadyAdded", "type": "error" }, { "inputs": [], "name": "CurrencyLimitReached", "type": "error" }, { "inputs": [], "name": "InvalidCurrency", "type": "error" }, { "inputs": [], "name": "InvalidMarket", "type": "error" }, { "inputs": [], "name": "InvalidSender", "type": "error" }, { "inputs": [], "name": "MarketAlreadyAdded", "type": "error" }, { "inputs": [], "name": "OnlyAdmin", "type": "error" }, { "inputs": [], "name": "OnlyMarket", "type": "error" }, { "inputs": [], "name": "PositionTokenExists", "type": "error" }, { "inputs": [], "name": "PositionTokenNotSet", "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": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": false, "internalType": "address", "name": "currencyProviderAddress", "type": "address" } ], "name": "CurrencyAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": false, "internalType": "address", "name": "currencyProviderAddress", "type": "address" } ], "name": "CurrencyProviderUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "isActive", "type": "bool" } ], "name": "EmergencyBrakeChanged", "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": "marketAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "name", "type": "string" }, { "indexed": false, "internalType": "string", "name": "metadataURI", "type": "string" } ], "name": "MarketAdded", "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": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" } ], "name": "addAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "address", "name": "_currencyProviderAddress", "type": "address" } ], "name": "addCurrency", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IMarket", "name": "_market", "type": "address" } ], "name": "addMarket", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "admins", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "market", "type": "address" }, { "internalType": "uint256[]", "name": "positionIds", "type": "uint256[]" } ], "internalType": "struct IMimicry.BatchPositions[]", "name": "batchPositions", "type": "tuple[]" } ], "name": "batchClosePositions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_sender", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "burnMimic", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "convertCurrencyToUSD", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "createMimic", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "currencyProvidersMap", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "existingMarketsMap", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMarkets", "outputs": [ { "internalType": "contract IMarket[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getValidCurrenciesList", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isEmergencyBrakeActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenAddress", "type": "address" } ], "name": "isValidCurrency", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "marketsList", "outputs": [ { "internalType": "contract IMarket", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "positionToken", "outputs": [ { "internalType": "contract PositionToken", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" } ], "name": "removeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_isEmergencyBrakeActive", "type": "bool" } ], "name": "setIsEmergencyBrakeActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract PositionToken", "name": "_positionToken", "type": "address" } ], "name": "setPositionToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "address", "name": "_newProvider", "type": "address" } ], "name": "updateCurrencyProvider", "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": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "validCurrenciesList", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ], "bytecode": "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000556200005b60201b60201c565b62000206565b600060019054906101000a900460ff1615620000ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a590620001a9565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001205760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001179190620001e9565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200019160278362000122565b91506200019e8262000133565b604082019050919050565b60006020820190508181036000830152620001c48162000182565b9050919050565b600060ff82169050919050565b620001e381620001cb565b82525050565b6000602082019050620002006000830184620001d8565b92915050565b608051613d816200023e600039600081816109ad01528181610a3c01528181610ce601528181610d750152610f710152613d816000f3fe6080604052600436106101b75760003560e01c806358bcf426116100ec57806393e306331161008a578063e1ccbd8811610064578063e1ccbd881461060b578063e46b1daa14610636578063ec2c90161461065f578063f2fde38b1461068a576101b7565b806393e306331461057c5780639e2839dc146105a5578063c43879d5146105ce576101b7565b806370480275116100c657806370480275146104fa578063715018a6146105235780638129fc1c1461053a5780638da5cb5b14610551576101b7565b806358bcf4261461047f5780635c3cb6b8146104a857806362cdaf8a146104d1576101b7565b8063429b62e5116101595780634fb92558116101335780634fb92558146103c15780635037b7e9146103fe57806351e33df61461042957806352d1902d14610454576101b7565b8063429b62e51461032b578063446f7175146103685780634f1ef286146103a5576101b7565b806330e1becc1161019557806330e1becc1461024b5780633659cfe61461028857806337366102146102b15780633bb88458146102ee576101b7565b8063067bba6e146101bc57806307cec00b146101e55780631785f53c14610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612943565b6106b3565b005b3480156101f157600080fd5b5061020c60048036038101906102079190612983565b6108d6565b6040516102199190612a0f565b60405180910390f35b34801561022e57600080fd5b5061024960048036038101906102449190612a2a565b610915565b005b34801561025757600080fd5b50610272600480360381019061026d9190612a2a565b610978565b60405161027f9190612a66565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190612a2a565b6109ab565b005b3480156102bd57600080fd5b506102d860048036038101906102d39190612983565b610b34565b6040516102e59190612a66565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190612943565b610b73565b6040516103229190612a90565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190612a2a565b610ca4565b60405161035f9190612ac6565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190612a2a565b610cc4565b60405161039c9190612ac6565b60405180910390f35b6103bf60048036038101906103ba9190612c27565b610ce4565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612a2a565b610e21565b6040516103f59190612ac6565b60405180910390f35b34801561040a57600080fd5b50610413610eb9565b6040516104209190612ca4565b60405180910390f35b34801561043557600080fd5b5061043e610edf565b60405161044b9190612d7d565b60405180910390f35b34801561046057600080fd5b50610469610f6d565b6040516104769190612db8565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190612e11565b611026565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190612e6a565b6110fa565b005b3480156104dd57600080fd5b506104f860048036038101906104f39190612e97565b611177565b005b34801561050657600080fd5b50610521600480360381019061051c9190612a2a565b611490565b005b34801561052f57600080fd5b506105386114f3565b005b34801561054657600080fd5b5061054f611507565b005b34801561055d57600080fd5b5061056661164d565b6040516105739190612a66565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612f15565b611677565b005b3480156105b157600080fd5b506105cc60048036038101906105c79190612fa2565b611b23565b005b3480156105da57600080fd5b506105f560048036038101906105f09190612a2a565b611cd9565b6040516106029190612a90565b60405180910390f35b34801561061757600080fd5b50610620611e14565b60405161062d9190612ac6565b60405180910390f35b34801561064257600080fd5b5061065d60048036038101906106589190612e97565b611e27565b005b34801561066b57600080fd5b5061067461209d565b604051610681919061309c565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190612a2a565b61212b565b005b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610736576040517f9e0125a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016107a89190612a90565b60206040518083038186803b1580156107c057600080fd5b505afa1580156107d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f891906130d3565b73ffffffffffffffffffffffffffffffffffffffff1614610845576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342966c68826040518263ffffffff1660e01b81526004016108a09190612a90565b600060405180830381600087803b1580156108ba57600080fd5b505af11580156108ce573d6000803e3d6000fd5b505050505050565b60c981815481106108e657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61091d6121af565b600060cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60ce6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3190613183565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610a7961222d565b73ffffffffffffffffffffffffffffffffffffffff1614610acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac690613215565b60405180910390fd5b610ad881612284565b610b3181600067ffffffffffffffff811115610af757610af6612afc565b5b6040519080825280601f01601f191660200182016040528015610b295781602001600182028036833780820191505090505b50600061228f565b50565b60cc8181548110610b4457600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b7e83610e21565b610bb4576040517ff599342800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166389da7df8836040518263ffffffff1660e01b8152600401610c4c9190612a90565b60206040518083038186803b158015610c6457600080fd5b505afa158015610c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9c919061324a565b905092915050565b60cf6020528060005260406000206000915054906101000a900460ff1681565b60ca6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a90613183565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610db261222d565b73ffffffffffffffffffffffffffffffffffffffff1614610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff90613215565b60405180910390fd5b610e1182612284565b610e1d8282600161228f565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff1660ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060cc805480602002602001604051908101604052809291908181526020018280548015610f6357602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610f19575b5050505050905090565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff4906132e9565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b61102e6121af565b600073ffffffffffffffffffffffffffffffffffffffff1660cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b6576040517f1395754000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111026121af565b80151560cd60009054906101000a900460ff161515141561112257611174565b8060cd60006101000a81548160ff0219169083151502179055507f979e9759689bc12d5e45253b3c87766c6edc4ce50ba45ad6e04b9a1f8888427c8160405161116b9190612ac6565b60405180910390a15b50565b61117f6121af565b61118882610e21565b156111bf576040517fa89093b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460cc80549050106111fe576040517f9ab9ffcc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ad3677026040518163ffffffff1660e01b815260040160206040518083038186803b15801561124657600080fd5b505afa15801561125a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127e919061324a565b905060008273ffffffffffffffffffffffffffffffffffffffff166389da7df8670de0b6b3a76400006040518263ffffffff1660e01b81526004016112c39190613344565b60206040518083038186803b1580156112db57600080fd5b505afa1580156112ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611313919061324a565b905060008214806113245750600081145b1561135b576040517ff599342800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cc849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260ce60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167fab35821bbd28c56e6dae71b4a4c73548cf0acef8a8241eae997d467cf2ba5e01846040516114829190612a66565b60405180910390a250505050565b6114986121af565b600160cf60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6114fb6121af565b611505600061240c565b565b60008060019054906101000a900460ff161590508080156115385750600160008054906101000a900460ff1660ff16105b806115655750611547306124d2565b1580156115645750600160008054906101000a900460ff1660ff16145b5b6115a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159b906133d1565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156115e1576001600060016101000a81548160ff0219169083151502179055505b6115e96124f5565b6115f161254e565b801561164a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516116419190613439565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61167f61164d565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611701575060cf60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611737576040517f4755657900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ca60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117bb576040517f8e3e108100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611844576040517f8546691300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663a2a1079f6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118a157600080fd5b505afa1580156118b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d99190613492565b73ffffffffffffffffffffffffffffffffffffffff1614611926576040517f9db8d5b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160ca60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060c9819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f6205056e413f49b95096708fc4b08cde79e028b389a1c65b2c6523214765944b818273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b158015611a4957600080fd5b505afa158015611a5d573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611a869190613593565b8373ffffffffffffffffffffffffffffffffffffffff166303ee438c6040518163ffffffff1660e01b815260040160006040518083038186803b158015611acc57600080fd5b505afa158015611ae0573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611b099190613593565b604051611b1893929190613620565b60405180910390a150565b60005b82829050811015611cd45760ca6000848484818110611b4857611b47613665565b5b9050602002810190611b5a91906136a3565b6000016020810190611b6c9190612a2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611bea576040517f9db8d5b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b828282818110611bfd57611bfc613665565b5b9050602002810190611c0f91906136a3565b6000016020810190611c219190612a2a565b73ffffffffffffffffffffffffffffffffffffffff16638d32189633858585818110611c5057611c4f613665565b5b9050602002810190611c6291906136a3565b8060200190611c7191906136cb565b6040518463ffffffff1660e01b8152600401611c8f939291906137a0565b600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b505050508080611ccc90613801565b915050611b26565b505050565b600060ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611d5e576040517f9e0125a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee1fe2ad83336040518363ffffffff1660e01b8152600401611dbb92919061384a565b602060405180830381600087803b158015611dd557600080fd5b505af1158015611de9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0d919061324a565b9050919050565b60cd60009054906101000a900460ff1681565b611e2f6121af565b611e3882610e21565b611e6e576040517ff599342800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663ad3677026040518163ffffffff1660e01b815260040160206040518083038186803b158015611eb657600080fd5b505afa158015611eca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eee919061324a565b905060008273ffffffffffffffffffffffffffffffffffffffff166389da7df8670de0b6b3a76400006040518263ffffffff1660e01b8152600401611f339190613344565b60206040518083038186803b158015611f4b57600080fd5b505afa158015611f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f83919061324a565b90506000821480611f945750600081145b15611fcb576040517ff599342800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ce60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff167f49cd8230877f9b72117976ca27f6fc94760827dc532052c32cee031012209bb78460405161208f9190612a66565b60405180910390a250505050565b606060c980548060200260200160405190810160405280929190818152602001828054801561212157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116120d7575b5050505050905090565b6121336121af565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a906138e5565b60405180910390fd5b6121ac8161240c565b50565b6121b761259f565b73ffffffffffffffffffffffffffffffffffffffff166121d561164d565b73ffffffffffffffffffffffffffffffffffffffff161461222b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222290613951565b60405180910390fd5b565b600061225b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6125a7565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61228c6121af565b50565b6122bb7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b6125b1565b60000160009054906101000a900460ff16156122df576122da836125bb565b612407565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561232557600080fd5b505afa92505050801561235657506040513d601f19601f82011682018060405250810190612353919061399d565b60015b612395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238c90613a3c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f190613ace565b60405180910390fd5b50612406838383612674565b5b505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253b90613b60565b60405180910390fd5b61254c6126a0565b565b600060019054906101000a900460ff1661259d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259490613b60565b60405180910390fd5b565b600033905090565b6000819050919050565b6000819050919050565b6125c4816124d2565b612603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fa90613bf2565b60405180910390fd5b806126307f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6125a7565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61267d83612701565b60008251118061268a5750805b1561269b576126998383612750565b505b505050565b600060019054906101000a900460ff166126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e690613b60565b60405180910390fd5b6126ff6126fa61259f565b61240c565b565b61270a816125bb565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b606061275b836124d2565b61279a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279190613c84565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516127c29190613ceb565b600060405180830381855af49150503d80600081146127fd576040519150601f19603f3d011682016040523d82523d6000602084013e612802565b606091505b509150915061282a8282604051806060016040528060278152602001613d2560279139612834565b9250505092915050565b6060831561284457829050612894565b6000835111156128575782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288b9190613d02565b60405180910390fd5b9392505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006128da826128af565b9050919050565b6128ea816128cf565b81146128f557600080fd5b50565b600081359050612907816128e1565b92915050565b6000819050919050565b6129208161290d565b811461292b57600080fd5b50565b60008135905061293d81612917565b92915050565b6000806040838503121561295a576129596128a5565b5b6000612968858286016128f8565b92505060206129798582860161292e565b9150509250929050565b600060208284031215612999576129986128a5565b5b60006129a78482850161292e565b91505092915050565b6000819050919050565b60006129d56129d06129cb846128af565b6129b0565b6128af565b9050919050565b60006129e7826129ba565b9050919050565b60006129f9826129dc565b9050919050565b612a09816129ee565b82525050565b6000602082019050612a246000830184612a00565b92915050565b600060208284031215612a4057612a3f6128a5565b5b6000612a4e848285016128f8565b91505092915050565b612a60816128cf565b82525050565b6000602082019050612a7b6000830184612a57565b92915050565b612a8a8161290d565b82525050565b6000602082019050612aa56000830184612a81565b92915050565b60008115159050919050565b612ac081612aab565b82525050565b6000602082019050612adb6000830184612ab7565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b3482612aeb565b810181811067ffffffffffffffff82111715612b5357612b52612afc565b5b80604052505050565b6000612b6661289b565b9050612b728282612b2b565b919050565b600067ffffffffffffffff821115612b9257612b91612afc565b5b612b9b82612aeb565b9050602081019050919050565b82818337600083830152505050565b6000612bca612bc584612b77565b612b5c565b905082815260208101848484011115612be657612be5612ae6565b5b612bf1848285612ba8565b509392505050565b600082601f830112612c0e57612c0d612ae1565b5b8135612c1e848260208601612bb7565b91505092915050565b60008060408385031215612c3e57612c3d6128a5565b5b6000612c4c858286016128f8565b925050602083013567ffffffffffffffff811115612c6d57612c6c6128aa565b5b612c7985828601612bf9565b9150509250929050565b6000612c8e826129dc565b9050919050565b612c9e81612c83565b82525050565b6000602082019050612cb96000830184612c95565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612cf4816128cf565b82525050565b6000612d068383612ceb565b60208301905092915050565b6000602082019050919050565b6000612d2a82612cbf565b612d348185612cca565b9350612d3f83612cdb565b8060005b83811015612d70578151612d578882612cfa565b9750612d6283612d12565b925050600181019050612d43565b5085935050505092915050565b60006020820190508181036000830152612d978184612d1f565b905092915050565b6000819050919050565b612db281612d9f565b82525050565b6000602082019050612dcd6000830184612da9565b92915050565b6000612dde826128cf565b9050919050565b612dee81612dd3565b8114612df957600080fd5b50565b600081359050612e0b81612de5565b92915050565b600060208284031215612e2757612e266128a5565b5b6000612e3584828501612dfc565b91505092915050565b612e4781612aab565b8114612e5257600080fd5b50565b600081359050612e6481612e3e565b92915050565b600060208284031215612e8057612e7f6128a5565b5b6000612e8e84828501612e55565b91505092915050565b60008060408385031215612eae57612ead6128a5565b5b6000612ebc858286016128f8565b9250506020612ecd858286016128f8565b9150509250929050565b6000612ee2826128cf565b9050919050565b612ef281612ed7565b8114612efd57600080fd5b50565b600081359050612f0f81612ee9565b92915050565b600060208284031215612f2b57612f2a6128a5565b5b6000612f3984828501612f00565b91505092915050565b600080fd5b600080fd5b60008083601f840112612f6257612f61612ae1565b5b8235905067ffffffffffffffff811115612f7f57612f7e612f42565b5b602083019150836020820283011115612f9b57612f9a612f47565b5b9250929050565b60008060208385031215612fb957612fb86128a5565b5b600083013567ffffffffffffffff811115612fd757612fd66128aa565b5b612fe385828601612f4c565b92509250509250929050565b600081519050919050565b6000819050602082019050919050565b613013816129ee565b82525050565b6000613025838361300a565b60208301905092915050565b6000602082019050919050565b600061304982612fef565b6130538185612cca565b935061305e83612ffa565b8060005b8381101561308f5781516130768882613019565b975061308183613031565b925050600181019050613062565b5085935050505092915050565b600060208201905081810360008301526130b6818461303e565b905092915050565b6000815190506130cd816128e1565b92915050565b6000602082840312156130e9576130e86128a5565b5b60006130f7848285016130be565b91505092915050565b600082825260208201905092915050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600061316d602c83613100565b915061317882613111565b604082019050919050565b6000602082019050818103600083015261319c81613160565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006131ff602c83613100565b915061320a826131a3565b604082019050919050565b6000602082019050818103600083015261322e816131f2565b9050919050565b60008151905061324481612917565b92915050565b6000602082840312156132605761325f6128a5565b5b600061326e84828501613235565b91505092915050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006132d3603883613100565b91506132de82613277565b604082019050919050565b60006020820190508181036000830152613302816132c6565b9050919050565b6000819050919050565b600061332e61332961332484613309565b6129b0565b61290d565b9050919050565b61333e81613313565b82525050565b60006020820190506133596000830184613335565b92915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006133bb602e83613100565b91506133c68261335f565b604082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b6000819050919050565b600060ff82169050919050565b600061342361341e613419846133f1565b6129b0565b6133fb565b9050919050565b61343381613408565b82525050565b600060208201905061344e600083018461342a565b92915050565b600061345f826128cf565b9050919050565b61346f81613454565b811461347a57600080fd5b50565b60008151905061348c81613466565b92915050565b6000602082840312156134a8576134a76128a5565b5b60006134b68482850161347d565b91505092915050565b600067ffffffffffffffff8211156134da576134d9612afc565b5b6134e382612aeb565b9050602081019050919050565b60005b8381101561350e5780820151818401526020810190506134f3565b8381111561351d576000848401525b50505050565b6000613536613531846134bf565b612b5c565b90508281526020810184848401111561355257613551612ae6565b5b61355d8482856134f0565b509392505050565b600082601f83011261357a57613579612ae1565b5b815161358a848260208601613523565b91505092915050565b6000602082840312156135a9576135a86128a5565b5b600082015167ffffffffffffffff8111156135c7576135c66128aa565b5b6135d384828501613565565b91505092915050565b600081519050919050565b60006135f2826135dc565b6135fc8185613100565b935061360c8185602086016134f0565b61361581612aeb565b840191505092915050565b60006060820190506136356000830186612a57565b818103602083015261364781856135e7565b9050818103604083015261365b81846135e7565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126136bf576136be613694565b5b80830191505092915050565b600080833560016020038436030381126136e8576136e7613694565b5b80840192508235915067ffffffffffffffff82111561370a57613709613699565b5b6020830192506020820236038313156137265761372561369e565b5b509250929050565b600082825260208201905092915050565b600080fd5b6000613750838561372e565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156137835761378261373f565b5b602083029250613794838584612ba8565b82840190509392505050565b60006040820190506137b56000830186612a57565b81810360208301526137c8818486613744565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061380c8261290d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561383f5761383e6137d2565b5b600182019050919050565b600060408201905061385f6000830185612a57565b61386c6020830184612a57565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006138cf602683613100565b91506138da82613873565b604082019050919050565b600060208201905081810360008301526138fe816138c2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061393b602083613100565b915061394682613905565b602082019050919050565b6000602082019050818103600083015261396a8161392e565b9050919050565b61397a81612d9f565b811461398557600080fd5b50565b60008151905061399781613971565b92915050565b6000602082840312156139b3576139b26128a5565b5b60006139c184828501613988565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000613a26602e83613100565b9150613a31826139ca565b604082019050919050565b60006020820190508181036000830152613a5581613a19565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b6000613ab8602983613100565b9150613ac382613a5c565b604082019050919050565b60006020820190508181036000830152613ae781613aab565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000613b4a602b83613100565b9150613b5582613aee565b604082019050919050565b60006020820190508181036000830152613b7981613b3d565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613bdc602d83613100565b9150613be782613b80565b604082019050919050565b60006020820190508181036000830152613c0b81613bcf565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000613c6e602683613100565b9150613c7982613c12565b604082019050919050565b60006020820190508181036000830152613c9d81613c61565b9050919050565b600081519050919050565b600081905092915050565b6000613cc582613ca4565b613ccf8185613caf565b9350613cdf8185602086016134f0565b80840191505092915050565b6000613cf78284613cba565b915081905092915050565b60006020820190508181036000830152613d1c81846135e7565b90509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b9e0cf342f40be1ef42b7a8b6bec7182bcf7d2b3e92b443a2bcc6235bf58a7ae64736f6c63430008090033", "deployedBytecode": "0x6080604052600436106101b75760003560e01c806358bcf426116100ec57806393e306331161008a578063e1ccbd8811610064578063e1ccbd881461060b578063e46b1daa14610636578063ec2c90161461065f578063f2fde38b1461068a576101b7565b806393e306331461057c5780639e2839dc146105a5578063c43879d5146105ce576101b7565b806370480275116100c657806370480275146104fa578063715018a6146105235780638129fc1c1461053a5780638da5cb5b14610551576101b7565b806358bcf4261461047f5780635c3cb6b8146104a857806362cdaf8a146104d1576101b7565b8063429b62e5116101595780634fb92558116101335780634fb92558146103c15780635037b7e9146103fe57806351e33df61461042957806352d1902d14610454576101b7565b8063429b62e51461032b578063446f7175146103685780634f1ef286146103a5576101b7565b806330e1becc1161019557806330e1becc1461024b5780633659cfe61461028857806337366102146102b15780633bb88458146102ee576101b7565b8063067bba6e146101bc57806307cec00b146101e55780631785f53c14610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612943565b6106b3565b005b3480156101f157600080fd5b5061020c60048036038101906102079190612983565b6108d6565b6040516102199190612a0f565b60405180910390f35b34801561022e57600080fd5b5061024960048036038101906102449190612a2a565b610915565b005b34801561025757600080fd5b50610272600480360381019061026d9190612a2a565b610978565b60405161027f9190612a66565b60405180910390f35b34801561029457600080fd5b506102af60048036038101906102aa9190612a2a565b6109ab565b005b3480156102bd57600080fd5b506102d860048036038101906102d39190612983565b610b34565b6040516102e59190612a66565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190612943565b610b73565b6040516103229190612a90565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190612a2a565b610ca4565b60405161035f9190612ac6565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a9190612a2a565b610cc4565b60405161039c9190612ac6565b60405180910390f35b6103bf60048036038101906103ba9190612c27565b610ce4565b005b3480156103cd57600080fd5b506103e860048036038101906103e39190612a2a565b610e21565b6040516103f59190612ac6565b60405180910390f35b34801561040a57600080fd5b50610413610eb9565b6040516104209190612ca4565b60405180910390f35b34801561043557600080fd5b5061043e610edf565b60405161044b9190612d7d565b60405180910390f35b34801561046057600080fd5b50610469610f6d565b6040516104769190612db8565b60405180910390f35b34801561048b57600080fd5b506104a660048036038101906104a19190612e11565b611026565b005b3480156104b457600080fd5b506104cf60048036038101906104ca9190612e6a565b6110fa565b005b3480156104dd57600080fd5b506104f860048036038101906104f39190612e97565b611177565b005b34801561050657600080fd5b50610521600480360381019061051c9190612a2a565b611490565b005b34801561052f57600080fd5b506105386114f3565b005b34801561054657600080fd5b5061054f611507565b005b34801561055d57600080fd5b5061056661164d565b6040516105739190612a66565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612f15565b611677565b005b3480156105b157600080fd5b506105cc60048036038101906105c79190612fa2565b611b23565b005b3480156105da57600080fd5b506105f560048036038101906105f09190612a2a565b611cd9565b6040516106029190612a90565b60405180910390f35b34801561061757600080fd5b50610620611e14565b60405161062d9190612ac6565b60405180910390f35b34801561064257600080fd5b5061065d60048036038101906106589190612e97565b611e27565b005b34801561066b57600080fd5b5061067461209d565b604051610681919061309c565b60405180910390f35b34801561069657600080fd5b506106b160048036038101906106ac9190612a2a565b61212b565b005b60ca60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610736576040517f9e0125a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660cb60009054906101000a900473fffffffffffffffffff