[ { "inputs": [ { "internalType": "address", "name": "_feeTo", "type": "address" }, { "internalType": "uint256", "name": "_feeToRate", "type": "uint256" }, { "internalType": "address", "name": "_positionManager", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "lpToken", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "profit0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "profit1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" } ], "name": "ClaimProfit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "lpToken", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountOrId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "unlockBlock", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" } ], "name": "Lock", "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": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "lpToken", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountOrId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" } ], "name": "Unlock", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_id", "type": "uint256" } ], "name": "claimProfit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feeTo", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeToRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "lpToken", "type": "address" }, { "internalType": "uint256", "name": "amountOrId", "type": "uint256" }, { "internalType": "uint256", "name": "unlockBlock", "type": "uint256" } ], "name": "lock", "outputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "lockItem", "outputs": [ { "components": [ { "internalType": "address", "name": "lpToken", "type": "address" }, { "internalType": "uint256", "name": "amountOrId", "type": "uint256" }, { "internalType": "uint256", "name": "unlockBlock", "type": "uint256" } ], "internalType": "struct IUniswapLocker.LockItem", "name": "item", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "lockItems", "outputs": [ { "internalType": "address", "name": "lpToken", "type": "address" }, { "internalType": "uint256", "name": "amountOrId", "type": "uint256" }, { "internalType": "uint256", "name": "unlockBlock", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "positionManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_feeTo", "type": "address" } ], "name": "setFeeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60c06040523480156200001157600080fd5b5060405162002ea938038062002ea9833981016040819052620000349162000186565b6040518060400160405280600d81526020016c0556e694c6f636b657256334c5609c1b815250604051806040016040528060078152602001660554c2d56334c560cc1b8152503380838381600090816200008f91906200026e565b5060016200009e82826200026e565b5050506001600160a01b038116620000d057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000db8162000117565b5050600b80546001600c556001600160a01b031990811633909116176001600160a01b0396871617905550506080919091521660a0526200033a565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200018157600080fd5b919050565b6000806000606084860312156200019c57600080fd5b620001a78462000169565b925060208401519150620001be6040850162000169565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001f257607f821691505b6020821081036200021357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000269576000816000526020600020601f850160051c81016020861015620002445750805b601f850160051c820191505b81811015620002655782815560010162000250565b5050505b505050565b81516001600160401b038111156200028a576200028a620001c7565b620002a2816200029b8454620001dd565b8462000219565b602080601f831160018114620002da5760008415620002c15750858301515b600019600386901b1c1916600185901b17855562000265565b600085815260208120601f198616915b828110156200030b57888601518255948401946001909101908401620002ea565b50858210156200032a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051612b3462000375600039600081816102f9015261187401526000818161040a01528181610c1b0152610c560152612b346000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c8063791b98bc116100f9578063d22dee4811610097578063e985e9c511610071578063e985e9c51461043f578063f2fde38b14610488578063f46901ed1461049b578063f626e971146104ae57600080fd5b8063d22dee48146103f2578063deba86e314610405578063e2ab691d1461042c57600080fd5b8063a22cb465116100d3578063a22cb46514610341578063abdda26914610354578063b88d4fde146103cc578063c87b56dd146103df57600080fd5b8063791b98bc146102f45780638da5cb5b1461031b57806395d89b411461033957600080fd5b806323b872dd116101665780634f6ccce7116101405780634f6ccce7146102b35780636352211e146102c657806370a08231146102d9578063715018a6146102ec57600080fd5b806323b872dd1461027a5780632f745c591461028d57806342842e0e146102a057600080fd5b8063081812fc11610197578063081812fc14610240578063095ea7b31461025357806318160ddd1461026857600080fd5b8063017e7e58146101be57806301ffc9a71461020857806306fdde031461022b575b600080fd5b600b546101de9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61021b610216366004612429565b6104f9565b60405190151581526020016101ff565b610233610555565b6040516101ff91906124b4565b6101de61024e3660046124c7565b6105e7565b610266610261366004612502565b61061d565b005b6009545b6040519081526020016101ff565b61026661028836600461252e565b61062c565b61026c61029b366004612502565b610722565b6102666102ae36600461252e565b6107ba565b61026c6102c13660046124c7565b6107da565b6101de6102d43660046124c7565b61084c565b61026c6102e736600461256f565b610857565b6102666108d2565b6101de7f000000000000000000000000000000000000000000000000000000000000000081565b60065473ffffffffffffffffffffffffffffffffffffffff166101de565b6102336108e6565b61026661034f36600461259a565b6108f5565b61039a6103623660046124c7565b600d6020526000908152604090208054600182015460029092015473ffffffffffffffffffffffffffffffffffffffff909116919083565b6040805173ffffffffffffffffffffffffffffffffffffffff90941684526020840192909252908201526060016101ff565b6102666103da366004612602565b610900565b6102336103ed3660046124c7565b610917565b6102666104003660046124c7565b61098c565b61026c7f000000000000000000000000000000000000000000000000000000000000000081565b61026c61043a366004612700565b610dac565b61021b61044d366004612735565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b61026661049636600461256f565b610fbb565b6102666104a936600461256f565b61101f565b6104c16104bc3660046124c7565b61106e565b60408051825173ffffffffffffffffffffffffffffffffffffffff1681526020808401519082015291810151908201526060016101ff565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000148061054f575061054f826110f7565b92915050565b60606000805461056490612763565b80601f016020809104026020016040519081016040528092919081815260200182805461059090612763565b80156105dd5780601f106105b2576101008083540402835291602001916105dd565b820191906000526020600020905b8154815290600101906020018083116105c057829003601f168201915b5050505050905090565b60006105f2826111da565b5060008281526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1661054f565b610628828233611239565b5050565b73ffffffffffffffffffffffffffffffffffffffff8216610681576040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b600061068e838333611246565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461071c576040517f64283d7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80861660048301526024820184905282166044820152606401610678565b50505050565b600061072d83610857565b8210610784576040517fa57d13dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610678565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152600760209081526040808320938352929052205490565b6107d583838360405180602001604052806000815250610900565b505050565b60006107e560095490565b8210610827576040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526000600482015260248101839052604401610678565b6009828154811061083a5761083a6127b6565b90600052602060002001549050919050565b600061054f826111da565b600073ffffffffffffffffffffffffffffffffffffffff82166108a9576040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152602401610678565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b6108da611369565b6108e460006113bc565b565b60606001805461056490612763565b610628338383611433565b61090b84848461062c565b61071c84848484611530565b6060610922826111da565b50600061093a60408051602081019091526000815290565b9050600081511161095a5760405180602001604052806000815250610985565b8061096484611727565b6040516020016109759291906127e5565b6040516020818303038152906040525b9392505050565b6000818152600d60205260409020336109a48361084c565b73ffffffffffffffffffffffffffffffffffffffff1614806109dd5750600b5473ffffffffffffffffffffffffffffffffffffffff1633145b610a68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f556e694c6f636b65723a206e6f7420746865204c50206f776e6572206f72206660448201527f6565546f000000000000000000000000000000000000000000000000000000006064820152608401610678565b805460018201546040517f99fbab88000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff90911690600090819083906399fbab889060240161018060405180830381865afa158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b089190612869565b50505050505050509350935050506000610b218661084c565b604080516080810182526001880154815230602082019081526fffffffffffffffffffffffffffffffff8284018181526060840182815294517ffc6f786500000000000000000000000000000000000000000000000000000000815284516004820152925173ffffffffffffffffffffffffffffffffffffffff908116602485015290518216604484015293511660648201529293509160009182919088169063fc6f78659060840160408051808303816000875af1158015610be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0c919061294a565b90925090506000612710610c407f00000000000000000000000000000000000000000000000000000000000000008561299d565b610c4a91906129b4565b90506000612710610c7b7f00000000000000000000000000000000000000000000000000000000000000008561299d565b610c8591906129b4565b9050610c9182856129ef565b9350610c9d81846129ef565b92508315610cc657610cc673ffffffffffffffffffffffffffffffffffffffff891687866117e5565b8215610ced57610ced73ffffffffffffffffffffffffffffffffffffffff881687856117e5565b8115610d1a57600b54610d1a9073ffffffffffffffffffffffffffffffffffffffff8a81169116846117e5565b8015610d4757600b54610d479073ffffffffffffffffffffffffffffffffffffffff8981169116836117e5565b8954604080518681526020810186905233928e9273ffffffffffffffffffffffffffffffffffffffff909116917fac3f2bbb27deaf13cdf62f5a77cb57975c6753a0aebe27b2ad51cf04dbac633c910160405180910390a45050505050505050505050565b6000438211610e3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f556e694c6f636b65723a20756e6c6f636b426c6f636b206d757374206265206960448201527f6e207468652066757475726500000000000000000000000000000000000000006064820152608401610678565b60008311610ecd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f556e694c6f636b65723a20616d6f756e744f724964206d75737420626520677260448201527f6561746572207468616e203000000000000000000000000000000000000000006064820152608401610678565b610ed984333086611872565b600c805460009182610eea83612a02565b919050559050610efa33826119bd565b6040805160608101825273ffffffffffffffffffffffffffffffffffffffff87811680835260208084018981528486018981526000888152600d8452879020955186547fffffffffffffffffffffffff00000000000000000000000000000000000000001695169490941785555160018501559151600290930192909255825187815290810186905233928492917f39d60c234f0766f6ba0a913031909662325014ebaea4139b8d5eb9131700e81f910160405180910390a4949350505050565b610fc3611369565b73ffffffffffffffffffffffffffffffffffffffff8116611013576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610678565b61101c816113bc565b50565b611027611369565b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6110a86040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b506000908152600d60209081526040918290208251606081018452815473ffffffffffffffffffffffffffffffffffffffff168152600182015492810192909252600201549181019190915290565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061118a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061054f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461054f565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff168061054f576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101849052602401610678565b6107d58383836001611a6e565b600080611254858585611c39565b905073ffffffffffffffffffffffffffffffffffffffff81166112be576112b984600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b6112fb565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112fb576112fb8185611db6565b73ffffffffffffffffffffffffffffffffffffffff85166113245761131f84611e61565b611361565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611361576113618585611f10565b949350505050565b60065473ffffffffffffffffffffffffffffffffffffffff1633146108e4576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610678565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b73ffffffffffffffffffffffffffffffffffffffff8216611498576040517f5b08ba1800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610678565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83163b1561071c576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84169063150b7a02906115a5903390889087908790600401612a3a565b6020604051808303816000875af19250505080156115fe575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526115fb91810190612a79565b60015b61168d573d80801561162c576040519150601f19603f3d011682016040523d82523d6000602084013e611631565b606091505b508051600003611685576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610678565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a020000000000000000000000000000000000000000000000000000000014611720576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610678565b5050505050565b6060600061173483611f6d565b600101905060008167ffffffffffffffff811115611754576117546125d3565b6040519080825280601f01601f19166020018201604052801561177e576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461178857509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526107d590849061204f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614611927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f556e694c6f636b657256334c503a20696e76616c6964206c7020746f6b656e006044820152606401610678565b6040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390528516906323b872dd90606401600060405180830381600087803b15801561199f57600080fd5b505af11580156119b3573d6000803e3d6000fd5b5050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611a0d576040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152602401610678565b6000611a1b83836000611246565b905073ffffffffffffffffffffffffffffffffffffffff8116156107d5576040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260006004820152602401610678565b8080611a8f575073ffffffffffffffffffffffffffffffffffffffff821615155b15611be4576000611a9f846111da565b905073ffffffffffffffffffffffffffffffffffffffff831615801590611af257508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015611b31575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209387168352929052205460ff16155b15611b80576040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610678565b8115611be257838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008281526002602052604081205473ffffffffffffffffffffffffffffffffffffffff90811690831615611c7357611c738184866120e5565b73ffffffffffffffffffffffffffffffffffffffff811615611ce957611c9d600085600080611a6e565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190555b73ffffffffffffffffffffffffffffffffffffffff851615611d325773ffffffffffffffffffffffffffffffffffffffff85166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff89811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b6000611dc183610857565b600083815260086020526040902054909150808214611e215773ffffffffffffffffffffffffffffffffffffffff841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b50600091825260086020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352600781528383209183525290812055565b600954600090611e73906001906129ef565b6000838152600a602052604081205460098054939450909284908110611e9b57611e9b6127b6565b906000526020600020015490508060098381548110611ebc57611ebc6127b6565b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480611ef457611ef4612a96565b6001900381819060005260206000200160009055905550505050565b60006001611f1d84610857565b611f2791906129ef565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611fb6577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611fe2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061200057662386f26fc10000830492506010015b6305f5e1008310612018576305f5e100830492506008015b612710831061202c57612710830492506004015b6064831061203e576064830492506002015b600a831061054f5760010192915050565b600061207173ffffffffffffffffffffffffffffffffffffffff841683612195565b905080516000141580156120965750808060200190518101906120949190612ac5565b155b156107d5576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610678565b6120f08383836121a3565b6107d55773ffffffffffffffffffffffffffffffffffffffff8316612144576040517f7e27328900000000000000000000000000000000000000000000000000000000815260048101829052602401610678565b6040517f177e802f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610678565b606061098583836000612267565b600073ffffffffffffffffffffffffffffffffffffffff83161580159061136157508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612231575073ffffffffffffffffffffffffffffffffffffffff80851660009081526005602090815260408083209387168352929052205460ff165b8061136157505060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff908116911614919050565b6060814710156122a5576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610678565b6000808573ffffffffffffffffffffffffffffffffffffffff1684866040516122ce9190612ae2565b60006040518083038185875af1925050503d806000811461230b576040519150601f19603f3d011682016040523d82523d6000602084013e612310565b606091505b509150915061232086838361232a565b9695505050505050565b60608261233f5761233a826123b9565b610985565b8151158015612363575073ffffffffffffffffffffffffffffffffffffffff84163b155b156123b2576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610678565b5080610985565b8051156123c95780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461101c57600080fd5b60006020828403121561243b57600080fd5b8135610985816123fb565b60005b83811015612461578181015183820152602001612449565b50506000910152565b60008151808452612482816020860160208601612446565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610985602083018461246a565b6000602082840312156124d957600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461101c57600080fd5b6000806040838503121561251557600080fd5b8235612520816124e0565b946020939093013593505050565b60008060006060848603121561254357600080fd5b833561254e816124e0565b9250602084013561255e816124e0565b929592945050506040919091013590565b60006020828403121561258157600080fd5b8135610985816124e0565b801515811461101c57600080fd5b600080604083850312156125ad57600080fd5b82356125b8816124e0565b915060208301356125c88161258c565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561261857600080fd5b8435612623816124e0565b93506020850135612633816124e0565b925060408501359150606085013567ffffffffffffffff8082111561265757600080fd5b818701915087601f83011261266b57600080fd5b81358181111561267d5761267d6125d3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156126c3576126c36125d3565b816040528281528a60208487010111156126dc57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b60008060006060848603121561271557600080fd5b8335612720816124e0565b95602085013595506040909401359392505050565b6000806040838503121561274857600080fd5b8235612753816124e0565b915060208301356125c8816124e0565b600181811c9082168061277757607f821691505b6020821081036127b0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600083516127f7818460208801612446565b83519083019061280b818360208801612446565b01949350505050565b805161281f816124e0565b919050565b805162ffffff8116811461281f57600080fd5b8051600281900b811461281f57600080fd5b80516fffffffffffffffffffffffffffffffff8116811461281f57600080fd5b6000806000806000806000806000806000806101808d8f03121561288c57600080fd5b8c516bffffffffffffffffffffffff811681146128a857600080fd5b9b506128b660208e01612814565b9a506128c460408e01612814565b99506128d260608e01612814565b98506128e060808e01612824565b97506128ee60a08e01612837565b96506128fc60c08e01612837565b955061290a60e08e01612849565b94506101008d015193506101208d015192506129296101408e01612849565b91506129386101608e01612849565b90509295989b509295989b509295989b565b6000806040838503121561295d57600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761054f5761054f61296e565b6000826129ea577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8181038181111561054f5761054f61296e565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a3357612a3361296e565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612320608083018461246a565b600060208284031215612a8b57600080fd5b8151610985816123fb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215612ad757600080fd5b81516109858161258c565b60008251612af4818460208701612446565b919091019291505056fea2646970667358221220c5e3e1a6f7dd605029a3fd0cfac240c316b7b11bbf198e7aed353dee5abaf53a64736f6c6343000818003300000000000000000000000069691ce612c244b0829b9e124cca063816da14480000000000000000000000000000000000000000000000000000000000000384000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe88