[ { "inputs": [], "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": "BelowMinimumK", "type": "error" }, { "inputs": [], "name": "DepositsNotEqual", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [], "name": "FactoryAlreadySet", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InsufficientInputAmount", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidity", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidityBurned", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidityMinted", "type": "error" }, { "inputs": [], "name": "InsufficientOutputAmount", "type": "error" }, { "inputs": [], "name": "InvalidTo", "type": "error" }, { "inputs": [], "name": "IsPaused", "type": "error" }, { "inputs": [], "name": "K", "type": "error" }, { "inputs": [], "name": "NotPoolAdmin", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "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": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Claim", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Fees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Out", "type": "uint256" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "reserve0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "reserve1", "type": "uint256" } ], "name": "Sync", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "blockTimestampLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimFees", "outputs": [ { "internalType": "uint256", "name": "claimed0", "type": "uint256" }, { "internalType": "uint256", "name": "claimed1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "claimable0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "claimable1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentCumulativePrices", "outputs": [ { "internalType": "uint256", "name": "reserve0Cumulative", "type": "uint256" }, { "internalType": "uint256", "name": "reserve1Cumulative", "type": "uint256" }, { "internalType": "uint256", "name": "blockTimestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address", "name": "tokenIn", "type": "address" } ], "name": "getAmountOut", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getK", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint256", "name": "_reserve0", "type": "uint256" }, { "internalType": "uint256", "name": "_reserve1", "type": "uint256" }, { "internalType": "uint256", "name": "_blockTimestampLast", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "index0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "index1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" }, { "internalType": "bool", "name": "_stable", "type": "bool" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lastObservation", "outputs": [ { "components": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "reserve0Cumulative", "type": "uint256" }, { "internalType": "uint256", "name": "reserve1Cumulative", "type": "uint256" } ], "internalType": "struct IPool.Observation", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadata", "outputs": [ { "internalType": "uint256", "name": "dec0", "type": "uint256" }, { "internalType": "uint256", "name": "dec1", "type": "uint256" }, { "internalType": "uint256", "name": "r0", "type": "uint256" }, { "internalType": "uint256", "name": "r1", "type": "uint256" }, { "internalType": "bool", "name": "st", "type": "bool" }, { "internalType": "address", "name": "t0", "type": "address" }, { "internalType": "address", "name": "t1", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "observationLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "observations", "outputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "reserve0Cumulative", "type": "uint256" }, { "internalType": "uint256", "name": "reserve1Cumulative", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "periodSize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poolFees", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "points", "type": "uint256" } ], "name": "prices", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "granularity", "type": "uint256" } ], "name": "quote", "outputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve0CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "reserve1CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenIn", "type": "address" }, { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "uint256", "name": "points", "type": "uint256" }, { "internalType": "uint256", "name": "window", "type": "uint256" } ], "name": "sample", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "__name", "type": "string" } ], "name": "setName", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "__symbol", "type": "string" } ], "name": "setSymbol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "supplyIndex0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "supplyIndex1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokens", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b5060408051602080820183526000808352835191820190935291825290600361003983826100f2565b50600461004682826100f2565b50506001600555506101b0565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061007d57607f821691505b60208210810361009d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156100ed57806000526020600020601f840160051c810160208510156100ca5750805b601f840160051c820191505b818110156100ea57600081556001016100d6565b50505b505050565b81516001600160401b0381111561010b5761010b610053565b61011f816101198454610069565b846100a3565b6020601f821160018114610153576000831561013b5750848201515b600019600385901b1c1916600184901b1784556100ea565b600084815260208120601f198516915b828110156101835787850151825560209485019460019092019101610163565b50848210156101a15786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b614001806101bf6000396000f3fe608060405234801561001057600080fd5b50600436106102955760003560e01c80638a7b8cf211610167578063c45a0155116100ce578063e4463eb211610087578063e4463eb214610688578063e4bbb5a814610691578063ebeb31db146106a4578063ee39e7a0146106ac578063f140a35a146106b4578063fff6cae9146106c757600080fd5b8063c45a015514610605578063c47f002714610618578063c5700a021461062b578063d21220a714610634578063d294f09314610647578063dd62ed3e1461064f57600080fd5b8063a9059cbb11610120578063a9059cbb146105b1578063b84c8246146105c4578063bc25cf77146105d7578063bda39cad146105ea578063bf944dbc146105f3578063c245febc146105fc57600080fd5b80638a7b8cf21461050157806395d89b411461052b5780639d63848a146105335780639e8cc04b1461055e5780639f767c8814610571578063a1ac4d131461059157600080fd5b8063252c09d71161020b5780634d5a9f8a116101c45780634d5a9f8a146104615780635881c475146104815780635a76f25e146104945780636a6278421461049d57806370a08231146104b057806389afcb44146104d957600080fd5b8063252c09d7146103bf578063313ce567146103d257806332c0defd146103e157806333580959146103ea578063392f37e9146103fd578063443cb4bc1461045857600080fd5b806313345fe11161025d57806313345fe11461034557806318160ddd146103655780631df8c71714610377578063205aabf11461037f57806322be3de11461039f57806323b872dd146103ac57600080fd5b8063022c0d9f1461029a57806306fdde03146102af5780630902f1ac146102cd578063095ea7b3146102f25780630dfe168114610315575b600080fd5b6102ad6102a83660046131e7565b6106cf565b005b6102b7610d07565b6040516102c49190613275565b60405180910390f35b600f546010546011545b604080519384526020840192909252908201526060016102c4565b6103056103003660046132a8565b610d99565b60405190151581526020016102c4565b60085461032d9061010090046001600160a01b031681565b6040516001600160a01b0390911681526020016102c4565b6103586103533660046132d4565b610db3565b6040516102c4919061330f565b6002545b6040519081526020016102c4565b6102d7610faf565b61036961038d366004613352565b60176020526000908152604090205481565b6008546103059060ff1681565b6103056103ba36600461336f565b61101e565b6102d76103cd3660046133b0565b611044565b604051601281526020016102c4565b61036960145481565b600a5461032d906001600160a01b031681565b600d54600e54600f5460105460085460095460408051968752602087019590955293850192909252606084015260ff8116151560808401526001600160a01b03610100909104811660a08401521660c082015260e0016102c4565b610369600f5481565b61036961046f366004613352565b60186020526000908152604090205481565b61035861048f3660046133c9565b611077565b61036960105481565b6103696104ab366004613352565b611086565b6103696104be366004613352565b6001600160a01b031660009081526020819052604090205490565b6104ec6104e7366004613352565b61133f565b604080519283526020830191909152016102c4565b610509611619565b60408051825181526020808401519082015291810151908201526060016102c4565b6102b7611699565b600854600954604080516101009093046001600160a01b0390811684529091166020830152016102c4565b61036961056c3660046133c9565b6116a8565b61036961057f366004613352565b60166020526000908152604090205481565b61036961059f366004613352565b60196020526000908152604090205481565b6103056105bf3660046132a8565b61170f565b6102ad6105d23660046133fe565b61171d565b6102ad6105e5366004613352565b6117d6565b61036960155481565b61036960125481565b61036960135481565b600b5461032d906001600160a01b031681565b6102ad6106263660046133fe565b611917565b61036960115481565b60095461032d906001600160a01b031681565b6104ec6119cb565b61036961065d366004613440565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61036961070881565b6102ad61069f366004613487565b611ad5565b600c54610369565b610369611ef1565b6103696106c23660046134d2565b611f18565b6102ad611fd7565b6106d76120f8565b600b60009054906101000a90046001600160a01b03166001600160a01b031663b187bd266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e91906134f7565b1561076c57604051631309a56360e01b815260040160405180910390fd5b84158015610778575083155b15610796576040516342301c2360e01b815260040160405180910390fd5b600f5460105481871015806107ab5750808610155b156107c95760405163bb55fd2760e01b815260040160405180910390fd5b60085460095460009182916001600160a01b036101009092048216919081169089168214806108095750806001600160a01b0316896001600160a01b0316145b1561082757604051630521f43160e31b815260040160405180910390fd5b8a15610841576108416001600160a01b0383168a8d612122565b891561085b5761085b6001600160a01b0382168a8c612122565b86156108c857604051639a7bff7960e01b81526001600160a01b038a1690639a7bff79906108959033908f908f908e908e90600401613514565b600060405180830381600087803b1580156108af57600080fd5b505af11580156108c3573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa15801561090c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109309190613560565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa158015610977573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099b9190613560565b92505050600089856109ad919061358f565b83116109ba5760006109ce565b6109c48a8661358f565b6109ce908461358f565b905060006109dc8a8661358f565b83116109e95760006109fd565b6109f38a8661358f565b6109fd908461358f565b905081158015610a0b575080155b15610a295760405163098fb56160e01b815260040160405180910390fd5b6008546009546001600160a01b03610100909204821691168315610ae357600b5460085460405163cc56b2c560e01b815230600482015260ff90911615156024820152610ae391612710916001600160a01b039091169063cc56b2c590604401602060405180830381865afa158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca9190613560565b610ad490876135a2565b610ade91906135cf565b612174565b8215610b8557600b5460085460405163cc56b2c560e01b815230600482015260ff90911615156024820152610b8591612710916001600160a01b039091169063cc56b2c590604401602060405180830381865afa158015610b48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6c9190613560565b610b7690866135a2565b610b8091906135cf565b612228565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190613560565b6040516370a0823160e01b81523060048201529096506001600160a01b038216906370a0823190602401602060405180830381865afa158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c589190613560565b9450610c6488886122d0565b610c6e87876122d0565b1015610c8d5760405163a932492f60e01b815260040160405180910390fd5b5050610c9b848488886123c9565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fb3e2773606abfd36b5bd91394b3a54d1398336c65005baf7bf7a05efeffaf75b9060800160405180910390a3505050505050610d006001600555565b5050505050565b606060068054610d16906135f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d42906135f1565b8015610d8f5780601f10610d6457610100808354040283529160200191610d8f565b820191906000526020600020905b815481529060010190602001808311610d7257829003601f168201915b5050505050905090565b600033610da781858561255d565b60019150505b92915050565b606060008367ffffffffffffffff811115610dd057610dd061362b565b604051908082528060200260200182016040528015610df9578160200160208202803683370190505b50600c54909150600090610e0f9060019061358f565b90506000610e1d85876135a2565b610e27908361358f565b90506000805b83831015610f9f57610e3f8784613641565b91506000600c8481548110610e5657610e56613654565b906000526020600020906003020160000154600c8481548110610e7b57610e7b613654565b906000526020600020906003020160000154610e97919061358f565b9050600081600c8681548110610eaf57610eaf613654565b906000526020600020906003020160010154600c8681548110610ed457610ed4613654565b906000526020600020906003020160010154610ef0919061358f565b610efa91906135cf565b9050600082600c8781548110610f1257610f12613654565b906000526020600020906003020160020154600c8781548110610f3757610f37613654565b906000526020600020906003020160020154610f53919061358f565b610f5d91906135cf565b9050610f6b8c8e848461256a565b888581518110610f7d57610f7d613654565b6020908102919091010152505050600101610f988784613641565b9250610e2d565b509293505050505b949350505050565b6012546013544260008080610fcd600f546010546011549192909190565b925092509250838114611016576000610fe6828661358f565b9050610ff281856135a2565b610ffc9088613641565b965061100881846135a2565b6110129087613641565b9550505b505050909192565b60003361102c85828561271f565b6110378585856127a2565b60019150505b9392505050565b600c818154811061105457600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b6060610fa78484846001610db3565b60006110906120f8565b600f546010546008546040516370a0823160e01b815230600482015260009161010090046001600160a01b0316906370a0823190602401602060405180830381865afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111089190613560565b6009546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117a9190613560565b90506000611188858461358f565b90506000611196858461358f565b905060006111a360025490565b905080600003611275576103e86111c26111bd84866135a2565b612801565b6111cc919061358f565b97506111db60016103e86128e9565b60085460ff161561127057600e546111fb83670de0b6b3a76400006135a2565b61120591906135cf565b600d5461121a85670de0b6b3a76400006135a2565b61122491906135cf565b14611242576040516305026bfd60e11b815260040160405180910390fd5b6402540be40061125284846122d0565b11611270576040516321c69d6f60e11b815260040160405180910390fd5b6112aa565b6112a78761128383866135a2565b61128d91906135cf565b8761129884866135a2565b6112a291906135cf565b612923565b97505b6103e88810156112cd57604051633489be7560e21b815260040160405180910390fd5b6112d789896128e9565b6112e3858589896123c9565b60408051848152602081018490526001600160a01b038b169133917f2f00e3cdd69a77be7ed215ec7b2a36784dd158f921fca79ac29deffa353fe6ee910160405180910390a35050505050505061133a6001600555565b919050565b60008061134a6120f8565b600f546010546008546009546040516370a0823160e01b81523060048201526101009092046001600160a01b039081169291169060009083906370a0823190602401602060405180830381865afa1580156113a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cd9190613560565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613560565b30600090815260208190526040902054600254919250908061145d85846135a2565b61146791906135cf565b99508061147484846135a2565b61147e91906135cf565b985089158061148b575088155b156114a95760405163749383ad60e01b815260040160405180910390fd5b6114b33083612939565b6114c76001600160a01b0387168c8c612122565b6114db6001600160a01b0386168c8b612122565b6040516370a0823160e01b81523060048201526001600160a01b038716906370a0823190602401602060405180830381865afa15801561151f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115439190613560565b6040516370a0823160e01b81523060048201529094506001600160a01b038616906370a0823190602401602060405180830381865afa15801561158a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ae9190613560565b92506115bc84848a8a6123c9565b604080518b8152602081018b90526001600160a01b038d169133917f5d624aa9c148153ab3446c1b154f660ee7701e549fe9b62dab7171b1c80e6fa2910160405180910390a350505050505050506116146001600555565b915091565b61163d60405180606001604052806000815260200160008152602001600081525090565b600c805461164d9060019061358f565b8154811061165d5761165d613654565b90600052602060002090600302016040518060600160405290816000820154815260200160018201548152602001600282015481525050905090565b606060078054610d16906135f1565b6000806116b88585856001610db3565b8051909150600090815b818110156116f9578381815181106116dc576116dc613654565b6020026020010151836116ef9190613641565b92506001016116c2565b5061170485836135cf565b979650505050505050565b600033610da78185856127a2565b600b60009054906101000a90046001600160a01b03166001600160a01b031663b782cc496040518163ffffffff1660e01b8152600401602060405180830381865afa158015611770573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611794919061366a565b6001600160a01b0316336001600160a01b0316146117c45760405162b145b560e31b815260040160405180910390fd5b60076117d18284836136ce565b505050565b6117de6120f8565b600854600954600f546040516370a0823160e01b81523060048201526101009093046001600160a01b039081169392169161187c91859185906370a0823190602401602060405180830381865afa15801561183d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118619190613560565b61186b919061358f565b6001600160a01b0385169190612122565b6010546040516370a0823160e01b81523060048201526119089185916001600160a01b038516906370a0823190602401602060405180830381865afa1580156118c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ed9190613560565b6118f7919061358f565b6001600160a01b0384169190612122565b50506119146001600555565b50565b600b60009054906101000a90046001600160a01b03166001600160a01b031663b782cc496040518163ffffffff1660e01b8152600401602060405180830381865afa15801561196a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198e919061366a565b6001600160a01b0316336001600160a01b0316146119be5760405162b145b560e31b815260040160405180910390fd5b60066117d18284836136ce565b6000806119d73361296f565b50503360009081526018602090815260408083205460199092529091205481151580611a035750600081115b15611ad157336000818152601860209081526040808320839055601990915280822091909155600a54905163299e7ae760e11b8152600481019290925260248201849052604482018390526001600160a01b03169063533cf5ce90606401600060405180830381600087803b158015611a7b57600080fd5b505af1158015611a8f573d6000803e3d6000fd5b505060408051858152602081018590523393508392507f865ca08d59f5cb456e85cd2f7ef63664ea4f73327414e9d8152c4158b0e94645910160405180910390a35b9091565b600b546001600160a01b031615611aff576040516302a98a3760e31b815260040160405180910390fd5b600b80546001600160a01b0319908116331790915560088054600980546001600160a01b038781169190951617905591851661010002610100600160a81b0319841515166001600160a81b03199093169290921791909117905560405183908390611b699061317c565b6001600160a01b03928316815291166020820152604001604051809103906000f080158015611b9c573d6000803e3d6000fd5b50600a60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c03573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c2b919081019061378e565b90506000836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c6d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c95919081019061378e565b90508215611d04578181604051602001611cb092919061383a565b60405160208183030381529060405260069081611ccd9190613891565b508181604051602001611ce1929190613950565b60405160208183030381529060405260079081611cfe9190613891565b50611d67565b8181604051602001611d1792919061399f565b60405160208183030381529060405260069081611d349190613891565b508181604051602001611d489291906139f8565b60405160208183030381529060405260079081611d659190613891565b505b846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc99190613a1a565b611dd490600a613b24565b600d81905550836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c9190613a1a565b611e4790600a613b24565b600e55505060408051606081018252428152600060208201818152928201818152600c8054600181018255925291517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c760039092029182015591517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c8830155517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c990910155505050565b6000611efb6120f8565b611f09600f546010546122d0565b9050611f156001600555565b90565b600f54601054600b5460085460405163cc56b2c560e01b815230600482015260ff909116151560248201526000939291612710916001600160a01b039091169063cc56b2c590604401602060405180830381865afa158015611f7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa29190613560565b611fac90876135a2565b611fb691906135cf565b611fc0908661358f565b9450611fce8585848461256a565b95945050505050565b611fdf6120f8565b6002546000036120025760405163bb55fd2760e01b815260040160405180910390fd5b6008546040516370a0823160e01b81523060048201526120ec9161010090046001600160a01b0316906370a0823190602401602060405180830381865afa158015612051573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120759190613560565b6009546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156120bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e19190613560565b600f546010546123c9565b6120f66001600555565b565b60026005540361211b57604051633ee5aeb560e01b815260040160405180910390fd5b6002600555565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526117d1908490612acf565b8060000361217f5750565b600a546008546121a1916001600160a01b036101009092048216911683612122565b60006121ac60025490565b6121be83670de0b6b3a76400006135a2565b6121c891906135cf565b905080156121e85780601460008282546121e29190613641565b90915550505b604080518381526000602082015233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a860291015b60405180910390a25050565b806000036122335750565b600a54600954612250916001600160a01b03918216911683612122565b600061225b60025490565b61226d83670de0b6b3a76400006135a2565b61227791906135cf565b905080156122975780601560008282546122919190613641565b90915550505b60408051600081526020810184905233917f112c256902bf554b6ed882d2936687aaeb4225e8cd5b51303c90ca6cf43a8602910161221c565b60085460009060ff16156123b857600d546000906122f685670de0b6b3a76400006135a2565b61230091906135cf565b90506000600e5484670de0b6b3a764000061231b91906135a2565b61232591906135cf565b90506000670de0b6b3a764000061233c83856135a2565b61234691906135cf565b90506000670de0b6b3a764000061235d84806135a2565b61236791906135cf565b670de0b6b3a764000061237a86806135a2565b61238491906135cf565b61238e9190613641565b9050670de0b6b3a76400006123a382846135a2565b6123ad91906135cf565b945050505050610dad565b6123c282846135a2565b9050610dad565b60115442906000906123db908361358f565b90506000811180156123ec57508315155b80156123f757508215155b1561243e5761240681856135a2565b601260008282546124179190613641565b90915550612427905081846135a2565b601360008282546124389190613641565b90915550505b6000612448611619565b8051909150612457908461358f565b915061070882111561250c576040805160608101825284815260125460208201908152601354928201928352600c805460018101825560009190915291517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7600390930292830155517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c882015590517fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c9909101555b600f8790556010869055601183905560408051888152602081018890527fcf2aa50876cdfbb541206f89af0ee78d44a2abf8d328e37fa4917f982149848a910160405180910390a150505050505050565b6117d18383836001612b32565b60085460009060ff16156126ca57600061258484846122d0565b600d5490915061259c85670de0b6b3a76400006135a2565b6125a691906135cf565b600e549094506125be84670de0b6b3a76400006135a2565b6125c891906135cf565b60085490935060009081906001600160a01b0388811661010090920416146125f15784866125f4565b85855b60085491935091506001600160a01b03888116610100909204161461263757600e5461262889670de0b6b3a76400006135a2565b61263291906135cf565b612656565b600d5461264c89670de0b6b3a76400006135a2565b61265691906135cf565b9750600061266e612667848b613641565b8584612c07565b612678908361358f565b600854909150670de0b6b3a7640000906001600160a01b038a811661010090920416146126a757600d546126ab565b600e545b6126b590836135a2565b6126bf91906135cf565b945050505050610fa7565b60085460009081906001600160a01b0387811661010090920416146126f05783856126f3565b84845b90925090506127028783613641565b61270c82896135a2565b61271691906135cf565b92505050610fa7565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461279c578181101561278d57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064015b60405180910390fd5b61279c84848484036000612b32565b50505050565b6001600160a01b0383166127cc57604051634b637e8f60e11b815260006004820152602401612784565b6001600160a01b0382166127f65760405163ec442f0560e01b815260006004820152602401612784565b6117d1838383612d6e565b60008160000361281357506000919050565b6000600161282084612d8b565b901c6001901b90506001818481612839576128396135b9565b048201901c90506001818481612851576128516135b9565b048201901c90506001818481612869576128696135b9565b048201901c90506001818481612881576128816135b9565b048201901c90506001818481612899576128996135b9565b048201901c905060018184816128b1576128b16135b9565b048201901c905060018184816128c9576128c96135b9565b048201901c905061103d818285816128e3576128e36135b9565b04612923565b6001600160a01b0382166129135760405163ec442f0560e01b815260006004820152602401612784565b61291f60008383612d6e565b5050565b6000818310612932578161103d565b5090919050565b6001600160a01b03821661296357604051634b637e8f60e11b815260006004820152602401612784565b61291f82600083612d6e565b6001600160a01b0381166000908152602081905260409020548015612a9d576001600160a01b03821660009081526016602090815260408083208054601780855292852080546014546015549481905594909552829055936129d1858461358f565b905060006129df858461358f565b90508115612a3a576000670de0b6b3a76400006129fc848a6135a2565b612a0691906135cf565b6001600160a01b038a16600090815260186020526040812080549293508392909190612a33908490613641565b9091555050505b8015612a93576000670de0b6b3a7640000612a55838a6135a2565b612a5f91906135cf565b6001600160a01b038a16600090815260196020526040812080549293508392909190612a8c908490613641565b9091555050505b5050505050505050565b6014546001600160a01b0383166000908152601660209081526040808320939093556015546017909152919020555050565b6000612ae46001600160a01b03841683612e1f565b90508051600014158015612b09575080806020019051810190612b0791906134f7565b155b156117d157604051635274afe760e01b81526001600160a01b0384166004820152602401612784565b6001600160a01b038416612b5c5760405163e602df0560e01b815260006004820152602401612784565b6001600160a01b038316612b8657604051634a1406b160e11b815260006004820152602401612784565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561279c57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612bf991815260200190565b60405180910390a350505050565b6000805b60ff811015612d40576000612c208685612e2d565b905084811015612cbe576000612c368786612eb4565b612c40838861358f565b612c5290670de0b6b3a76400006135a2565b612c5c91906135cf565b905080600003612cac57858203612c785784935050505061103d565b85612c8d88612c88886001613641565b612e2d565b1115612ca857612c9e856001613641565b935050505061103d565b5060015b612cb68186613641565b945050612d37565b6000612cca8786612eb4565b612cd4878461358f565b612ce690670de0b6b3a76400006135a2565b612cf091906135cf565b905080600003612d295785821480612d15575085612d1388612c8860018961358f565b105b15612d255784935050505061103d565b5060015b612d33818661358f565b9450505b50600101612c0b565b5060405162461bcd60e51b8152602060048201526002602482015261217960f01b6044820152606401612784565b612d778361296f565b612d808261296f565b6117d1838383612f30565b600080608083901c15612da057608092831c92015b604083901c15612db257604092831c92015b602083901c15612dc457602092831c92015b601083901c15612dd657601092831c92015b600883901c15612de857600892831c92015b600483901c15612dfa57600492831c92015b600283901c15612e0c57600292831c92015b600183901c15610dad5760010192915050565b606061103d8383600061305a565b600080670de0b6b3a7640000612e4384866135a2565b612e4d91906135cf565b90506000670de0b6b3a7640000612e6485806135a2565b612e6e91906135cf565b670de0b6b3a7640000612e8187806135a2565b612e8b91906135cf565b612e959190613641565b9050670de0b6b3a7640000612eaa82846135a2565b611fce91906135cf565b6000670de0b6b3a76400008381612ecb82806135a2565b612ed591906135cf565b612edf91906135a2565b612ee991906135cf565b670de0b6b3a764000080612efd85806135a2565b612f0791906135cf565b612f128660036135a2565b612f1c91906135a2565b612f2691906135cf565b61103d9190613641565b6001600160a01b038316612f5b578060026000828254612f509190613641565b90915550612fcd9050565b6001600160a01b03831660009081526020819052604090205481811015612fae5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401612784565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216612fe957600280548290039055613008565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161304d91815260200190565b60405180910390a3505050565b60608147101561307f5760405163cd78605960e01b8152306004820152602401612784565b600080856001600160a01b0316848660405161309b9190613b33565b60006040518083038185875af1925050503d80600081146130d8576040519150601f19603f3d011682016040523d82523d6000602084013e6130dd565b606091505b50915091506130ed8683836130f7565b9695505050505050565b60608261310c5761310782613153565b61103d565b815115801561312357506001600160a01b0384163b155b1561314c57604051639996b31560e01b81526001600160a01b0385166004820152602401612784565b508061103d565b8051156131635780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b61047c80613b5083390190565b6001600160a01b038116811461191457600080fd5b60008083601f8401126131b057600080fd5b50813567ffffffffffffffff8111156131c857600080fd5b6020830191508360208285010111156131e057600080fd5b9250929050565b6000806000806000608086880312156131ff57600080fd5b8535945060208601359350604086013561321881613189565b9250606086013567ffffffffffffffff81111561323457600080fd5b6132408882890161319e565b969995985093965092949392505050565b60005b8381101561326c578181015183820152602001613254565b50506000910152565b6020815260008251806020840152613294816040850160208701613251565b601f01601f19169190910160400192915050565b600080604083850312156132bb57600080fd5b82356132c681613189565b946020939093013593505050565b600080600080608085870312156132ea57600080fd5b84356132f581613189565b966020860135965060408601359560600135945092505050565b602080825282518282018190526000918401906040840190835b81811015613347578351835260209384019390920191600101613329565b509095945050505050565b60006020828403121561336457600080fd5b813561103d81613189565b60008060006060848603121561338457600080fd5b833561338f81613189565b9250602084013561339f81613189565b929592945050506040919091013590565b6000602082840312156133c257600080fd5b5035919050565b6000806000606084860312156133de57600080fd5b83356133e981613189565b95602085013595506040909401359392505050565b6000806020838503121561341157600080fd5b823567ffffffffffffffff81111561342857600080fd5b6134348582860161319e565b90969095509350505050565b6000806040838503121561345357600080fd5b823561345e81613189565b9150602083013561346e81613189565b809150509250929050565b801515811461191457600080fd5b60008060006060848603121561349c57600080fd5b83356134a781613189565b925060208401356134b781613189565b915060408401356134c781613479565b809150509250925092565b600080604083850312156134e557600080fd5b82359150602083013561346e81613189565b60006020828403121561350957600080fd5b815161103d81613479565b60018060a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60006020828403121561357257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610dad57610dad613579565b8082028115828204841417610dad57610dad613579565b634e487b7160e01b600052601260045260246000fd5b6000826135ec57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061360557607f821691505b60208210810361362557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b80820180821115610dad57610dad613579565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561367c57600080fd5b815161103d81613189565b601f8211156117d157806000526020600020601f840160051c810160208510156136ae5750805b601f840160051c820191505b81811015610d0057600081556001016136ba565b67ffffffffffffffff8311156136e6576136e661362b565b6136fa836136f483546135f1565b83613687565b6000601f84116001811461372e57600085156137165750838201355b600019600387901b1c1916600186901b178355610d00565b600083815260209020601f19861690835b8281101561375f578685013582556020948501946001909201910161373f565b508682101561377c5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000602082840312156137a057600080fd5b815167ffffffffffffffff8111156137b757600080fd5b8201601f810184136137c857600080fd5b805167ffffffffffffffff8111156137e2576137e261362b565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156138115761381161362b565b60405281815282820160200186101561382957600080fd5b611fce826020830160208601613251565b6e029ba30b13632ab191020a6a690169608d1b81526000835161386481600f850160208801613251565b602f60f81b600f918401918201528351613885816010840160208801613251565b01601001949350505050565b815167ffffffffffffffff8111156138ab576138ab61362b565b6138bf816138b984546135f1565b84613687565b6020601f8211600181146138f357600083156138db5750848201515b600019600385901b1c1916600184901b178455610d00565b600084815260208120601f198516915b828110156139235787850151825560209485019460019092019101613903565b50848210156139415786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6673414d4d56322d60c81b815260008351613972816007850160208801613251565b602f60f81b6007918401918201528351613993816008840160208801613251565b01600801949350505050565b7002b37b630ba34b632ab191020a6a690169607d1b8152600083516139cb816011850160208801613251565b602f60f81b60119184019182015283516139ec816012840160208801613251565b01601201949350505050565b6676414d4d56322d60c81b815260008351613972816007850160208801613251565b600060208284031215613a2c57600080fd5b815160ff8116811461103d57600080fd5b6001815b6001841115613a7857808504811115613a5c57613a5c613579565b6001841615613a6a57908102905b60019390931c928002613a41565b935093915050565b600082613a8f57506001610dad565b81613a9c57506000610dad565b8160018114613ab25760028114613abc57613ad8565b6001915050610dad565b60ff841115613acd57613acd613579565b50506001821b610dad565b5060208310610133831016604e8410600b8410161715613afb575081810a610dad565b613b086000198484613a3d565b8060001904821115613b1c57613b1c613579565b029392505050565b600061103d60ff841683613a80565b60008251613b45818460208701613251565b919091019291505056fe60e060405234801561001057600080fd5b5060405161047c38038061047c83398101604081905261002f91610066565b336080526001600160a01b0391821660a0521660c052610099565b80516001600160a01b038116811461006157600080fd5b919050565b6000806040838503121561007957600080fd5b6100828361004a565b91506100906020840161004a565b90509250929050565b60805160a05160c0516103b76100c5600039600060db0152600060a101526000605001526103b76000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063533cf5ce14610030575b600080fd5b61004361003e3660046102ef565b610045565b005b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461008e57604051636f61f64160e01b815260040160405180910390fd5b81156100c8576100c86001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168484610107565b8015610102576101026001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168483610107565b505050565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092019092526020810180516001600160e01b031663a9059cbb60e01b17905261010291859190600090610165908416836101b8565b9050805160001415801561018a5750808060200190518101906101889190610330565b155b1561010257604051635274afe760e01b81526001600160a01b03841660048201526024015b60405180910390fd5b60606101c6838360006101cd565b9392505050565b6060814710156101f25760405163cd78605960e01b81523060048201526024016101af565b600080856001600160a01b0316848660405161020e9190610352565b60006040518083038185875af1925050503d806000811461024b576040519150601f19603f3d011682016040523d82523d6000602084013e610250565b606091505b509150915061026086838361026a565b9695505050505050565b60608261027f5761027a826102c6565b6101c6565b815115801561029657506001600160a01b0384163b155b156102bf57604051639996b31560e01b81526001600160a01b03851660048201526024016101af565b50806101c6565b8051156102d65780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60008060006060848603121561030457600080fd5b83356001600160a01b038116811461031b57600080fd5b95602085013595506040909401359392505050565b60006020828403121561034257600080fd5b815180151581146101c657600080fd5b6000825160005b818110156103735760208186018101518583015201610359565b50600092019182525091905056fea26469706673582212200e91c0353a89efe74cc8f83645aff7f95ff2026445f68c5aa09dba11697a484564736f6c634300081b0033a26469706673582212203b497918ca67873d74504feb85d998f0f403b9509547d7c642cfe38f8f1fa51b64736f6c634300081b0033