[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "Forbidden", "type": "error" }, { "inputs": [], "name": "InsufficientInputAmount", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidity", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidityAdded", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidityBurned", "type": "error" }, { "inputs": [], "name": "InsufficientLiquidityMinted", "type": "error" }, { "inputs": [], "name": "InsufficientOutputAmount", "type": "error" }, { "inputs": [], "name": "InsufficientReservoir", "type": "error" }, { "inputs": [], "name": "InvalidFinalPrice", "type": "error" }, { "inputs": [], "name": "InvalidRecipient", "type": "error" }, { "inputs": [], "name": "KInvariant", "type": "error" }, { "inputs": [], "name": "Locked", "type": "error" }, { "inputs": [], "name": "Overflow", "type": "error" }, { "inputs": [], "name": "Paused", "type": "error" }, { "inputs": [], "name": "PermitExpired", "type": "error" }, { "inputs": [], "name": "PermitInvalidSignature", "type": "error" }, { "inputs": [], "name": "SingleSidedTimelock", "type": "error" }, { "inputs": [], "name": "SwappableReservoirExceeded", "type": "error" }, { "inputs": [], "name": "Uninitialized", "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": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "newMaxSwappableReservoirLimitBps", "type": "uint16" } ], "name": "MaxSwappableReservoirLimitBpsUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "newMaxTimelockDuration", "type": "uint32" } ], "name": "MaxTimelockDurationUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "newMaxVolatilityBps", "type": "uint16" } ], "name": "MaxVolatilityBpsUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "newMinTimelockDuration", "type": "uint32" } ], "name": "MinTimelockDurationUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "newMovingAverageWindow", "type": "uint32" } ], "name": "MovingAverageWindowUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "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" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint32", "name": "newSwappableReservoirGrowthWindow", "type": "uint32" } ], "name": "SwappableReservoirGrowthWindowUpdated", "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": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "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": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "liquidityIn", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "amountOut0", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "liquidityIn", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "burnFromReservoir", "outputs": [ { "internalType": "uint256", "name": "amountOut0", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut1", "type": "uint256" } ], "stateMutability": "nonpayable", "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": [], "name": "getIsPaused", "outputs": [ { "internalType": "bool", "name": "_isPaused", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLiquidityBalances", "outputs": [ { "internalType": "uint112", "name": "_pool0", "type": "uint112" }, { "internalType": "uint112", "name": "_pool1", "type": "uint112" }, { "internalType": "uint112", "name": "_reservoir0", "type": "uint112" }, { "internalType": "uint112", "name": "_reservoir1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSwappableReservoirLimit", "outputs": [ { "internalType": "uint256", "name": "swappableReservoirLimit", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSwappableReservoirLimitBps", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTimelockDuration", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxVolatilityBps", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minTimelockDuration", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn0", "type": "uint256" }, { "internalType": "uint256", "name": "amountIn1", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "liquidityOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintWithReservoir", "outputs": [ { "internalType": "uint256", "name": "liquidityOut", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "movingAveragePrice0", "outputs": [ { "internalType": "uint256", "name": "_movingAveragePrice0", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "movingAverageWindow", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "_name", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "isPausedNew", "type": "bool" } ], "name": "setIsPaused", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "newMaxSwappableReservoirLimitBps", "type": "uint16" } ], "name": "setMaxSwappableReservoirLimitBps", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newMaxTimelockDuration", "type": "uint32" } ], "name": "setMaxTimelockDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "newMaxVolatilityBps", "type": "uint16" } ], "name": "setMaxVolatilityBps", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newMinTimelockDuration", "type": "uint32" } ], "name": "setMinTimelockDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newMovingAverageWindow", "type": "uint32" } ], "name": "setMovingAverageWindow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newSwappableReservoirGrowthWindow", "type": "uint32" } ], "name": "setSwappableReservoirGrowthWindow", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "singleSidedTimelockDeadline", "outputs": [ { "internalType": "uint120", "name": "", "type": "uint120" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn0", "type": "uint256" }, { "internalType": "uint256", "name": "amountIn1", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut0", "type": "uint256" }, { "internalType": "uint256", "name": "amountOut1", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "swap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "swappableReservoirGrowthWindow", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swappableReservoirLimitReachesMaxDeadline", "outputs": [ { "internalType": "uint120", "name": "", "type": "uint120" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "_symbol", "type": "string" } ], "stateMutability": "view", "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": "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": "success", "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": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
610100604052600980546001600160f81b0316600160f81b1790553480156200002757600080fd5b50604080518082018252600a8152690427574746f6e737761760b41b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f3410c89869cea2edd8d127839826a19c8dfa48f3496e84bc0e7070ad9bdb521d818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66060820152466080808301919091523060a08084019190915284518084038201815260c0840180875281519190950120909152339081905263340b2ca160e01b9092529151909163340b2ca19160c48083019261010092919082900301816000875af11580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000165919062000261565b6004805465ffffffffffff60701b1916600160801b63ffffffff9384160261ffff60701b191617600160701b61ffff9485160217600160301b600160701b0319166a01000000000000000000009483169490940263ffffffff60301b1916939093176601000000000000948216949094029390931765ffffffffffff1916640100000000949091169390930263ffffffff19169290921792169190911790556001600160a01b0390811660e0521660c05262000309565b80516001600160a01b03811681146200023457600080fd5b919050565b805163ffffffff811681146200023457600080fd5b805161ffff811681146200023457600080fd5b600080600080600080600080610100898b0312156200027f57600080fd5b6200028a896200021c565b97506200029a60208a016200021c565b9650620002aa60408a0162000239565b9550620002ba60608a016200024e565b9450620002ca60808a0162000239565b9350620002da60a08a0162000239565b9250620002ea60c08a016200024e565b9150620002fa60e08a0162000239565b90509295985092959890939650565b60805160a05160c05160e0516141ab620004936000396000818161061d01528181610e91015281816110ae015281816110ec015281816113cb015281816114cb015281816115b601528181611619015281816116df01528181611ad001528181611f47015281816121500152818161266f0152818161270d015281816127ea01528181612a6401528181612d0b0152612dc30152600081816102b401528181610dfb01528181610f4c01528181610f8a015281816113900152818161143501528181611584015281816115e80152818161165401528181611a4201528181611eb10152818161211a015281816125d9015281816126e10152818161274b015281816129d601528181612c750152612d980152600081816105e3015281816106db015281816107850152818161096b01528181610a2601528181610b0701528181610ccf015281816119bc01528181611b9701528181611c3201528181611dc70152818161220a015281816124ef0152612b6a0152600081816103dd01526122cd01526141ab6000f3fe608060405234801561001057600080fd5b50600436106102695760003560e01c806370a0823111610151578063bd3a5c2d116100c3578063dd62ed3e11610087578063dd62ed3e14610652578063e7d3fe6b1461067d578063f2a6f21514610690578063f69bd428146106a5578063f75bc6b5146106bc578063fcd3533c146106c457600080fd5b8063bd3a5c2d146105b6578063c45a0155146105de578063cbbcd1cc14610605578063d21220a714610618578063d505accf1461063f57600080fd5b806395d89b411161011557806395d89b4114610524578063976bf4161461052c578063a9059cbb14610574578063b0c94e9914610587578063b25200ce1461059a578063ba9a7a56146105ad57600080fd5b806370a08231146104a5578063751f66ba146104c55780637d5eea90146104da5780637ecebe00146104f1578063914e6dfb1461051157600080fd5b806326d18b5a116101ea57806343b6b289116101ae57806343b6b289146104285780634ac93bd51461045a578063501ca4881461046d578063562e19df146104805780635909c0d5146104935780635a3d54931461049c57600080fd5b806326d18b5a1461038057806330adf81f14610397578063313ce567146103be5780633644e515146103d857806340a0b2bc146103ff57600080fd5b8063187fba5511610231578063187fba551461031a5780632025070a1461033f57806323b872dd14610347578063240976bf1461035a578063249d13a11461036d57600080fd5b806306fdde031461026e578063095ea7b31461028c5780630dfe1681146102af578063134e8577146102ee57806318160ddd14610303575b600080fd5b6102766106d7565b6040516102839190613cbc565b60405180910390f35b61029f61029a366004613d04565b610764565b6040519015158152602001610283565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610283565b6103016102fc366004613d30565b61077a565b005b61030c60005481565b604051908152602001610283565b60045461032a9063ffffffff1681565b60405163ffffffff9091168152602001610283565b61030c61081a565b61029f610355366004613d54565b610909565b610301610368366004613da3565b610960565b61030161037b366004613dc0565b610a1b565b60045461032a90600160801b900463ffffffff1681565b61030c7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b6103c6601281565b60405160ff9091168152602001610283565b61030c7f000000000000000000000000000000000000000000000000000000000000000081565b60045461041590640100000000900461ffff1681565b60405161ffff9091168152602001610283565b60095461044290600160781b90046001600160781b031681565b6040516001600160781b039091168152602001610283565b610301610468366004613dc0565b610afc565b61030c61047b366004613de6565b610c20565b61030161048e366004613e16565b6112fc565b61030c60065481565b61030c60075481565b61030c6104b3366004613e63565b60016020526000908152604090205481565b60045461041590600160701b900461ffff1681565b60045461032a90600160301b900463ffffffff1681565b61030c6104ff366004613e63565b60036020526000908152604090205481565b600954610442906001600160781b031681565b6102766119b8565b610534611a18565b604080516001600160701b039687168152948616602086015292851692840192909252909216606082015263ffffffff909116608082015260a001610283565b61029f610582366004613d04565b611b7f565b610301610595366004613d30565b611b8c565b6103016105a8366004613dc0565b611c27565b61030c6103e881565b6105c96105c4366004613de6565b611d16565b60408051928352602083019190915201610283565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b610301610613366004613dc0565b6121ff565b6102d67f000000000000000000000000000000000000000000000000000000000000000081565b61030161064d366004613e80565b612290565b61030c610660366004613ef7565b600260209081526000928352604080842090915290825290205481565b61030c61068b366004613f25565b61246c565b600954600160f01b900460ff1660011461029f565b60045461032a90600160501b900463ffffffff1681565b61030c6129b4565b6105c96106d2366004613de6565b612b11565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636c02a9316040518163ffffffff1660e01b8152600401600060405180830381865afa158015610737573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261075f9190810190613f74565b905090565b6000610771338484612e58565b50600192915050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107c357604051631dd2188d60e31b815260040160405180910390fd5b6004805461ffff60701b1916600160701b61ffff8416908102919091179091556040519081527f5132865a5f3289cd175a05a50735aafb1a7e1bbbfb0c269dae3985c1eb93c893906020015b60405180910390a150565b60008061082c6401000000004261402c565b60055490915063ffffffff600160e01b820416820390600090610876906001600160701b038082169161086791600160701b90910416612eba565b6001600160e01b031690612ed9565b6001600160e01b031690508163ffffffff16600003610899576008549350610903565b60045463ffffffff908116908316106108b457809350610903565b60045463ffffffff9081169081906108ce90851684614056565b6108d8858461406d565b63ffffffff166008546108eb9190614056565b6108f59190614091565b6108ff91906140a4565b9450505b50505090565b6001600160a01b0383166000908152600260209081526040808320338452909152812054600019811461094a5761094a853361094586856140b8565b612e58565b610955858585612ef5565b506001949350505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109a957604051631dd2188d60e31b815260040160405180910390fd5b80156109c5576009805460ff60f01b1916600160f01b17905550565b6004546109df90600160501b900463ffffffff1642614091565b600980547fff00ffffffffffffffffffffffffffffff000000000000000000000000000000166001600160781b03929092169190911790555b50565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a6457604051631dd2188d60e31b815260040160405180910390fd5b610a88610a7763ffffffff831642614091565b6009546001600160781b0316612f9d565b600980546001600160781b0319166001600160781b03929092169190911790556004805463ffffffff60501b1916600160501b63ffffffff8416908102919091179091556040519081527fb40c7a0f3fe456f123e9206acea9eb8b229f25ef0b7c28dcde5683f75a1f70659060200161080f565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b4557604051631dd2188d60e31b815260040160405180910390fd5b600954600160781b90046001600160781b031642811115610bc557600454600160801b900463ffffffff16610b7a42836140b8565b610b8a9063ffffffff8516614056565b610b9491906140a4565b610b9e9042614091565b6009600f6101000a8154816001600160781b0302191690836001600160781b031602179055505b6004805463ffffffff60801b1916600160801b63ffffffff8516908102919091179091556040519081527f35c743ab7de62a674476813485ff91b6930daf72ea8c37e41fe2f747d36298cb9060200160405180910390a15050565b600954600090600160f81b900460ff168103610c4f576040516303cb96db60e21b815260040160405180910390fd5b600980546001600160f81b031690819055600160f01b900460ff16600103610c8a576040516313d0ff5960e31b815260040160405180910390fd5b6009546001600160781b0316421015610cb6576040516303a6c09960e11b815260040160405180910390fd5b3060009081526001602052604090205415610d9d5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f91906140cb565b90506001600160a01b03811615610d815730600081815260016020526040902054610d7c91908390612ef5565b610d9b565b30600081815260016020526040902054610d9b9190612fb3565b505b82600003610dbe576040516347c3655560e01b815260040160405180910390fd5b6000805490819003610de35760405163071cbeb560e21b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6e91906140e8565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015610ed8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efc91906140e8565b90506000610f0a8383613047565b80519091501580610f1d57506020810151155b15610f3b5760405163bb55fd2760e01b815260040160405180910390fd5b80604001516000036110a957610f737f000000000000000000000000000000000000000000000000000000000000000033308a613192565b6040516370a0823160e01b815230600482015283907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd91906140e8565b61100791906140b8565b9650600061101e6110188986614091565b84613047565b60408101519091501561104457604051630e7a760760e41b815260040160405180910390fd5b600061105a868a878761105561081a565b613203565b602085015191985091506000906110709061329c565b9050808211156110935760405163bacea60f60e01b815260040160405180910390fd5b6110a1846020015183613342565b505050611202565b6110d57f000000000000000000000000000000000000000000000000000000000000000033308a613192565b6040516370a0823160e01b815230600482015282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561113b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115f91906140e8565b61116991906140b8565b965060006111808461117b8a86614091565b613047565b6060810151909150156111a657604051630e7a760760e41b815260040160405180910390fd5b60006111bc868a87876111b761081a565b61343d565b845191985091506000906111cf9061329c565b9050808211156111f25760405163bacea60f60e01b815260040160405180910390fd5b83516111fe9083613342565b5050505b8460000361122357604051633489be7560e21b815260040160405180910390fd5b61122d86866134d3565b806040015160000361128c5760408051888152600060208201529081018690526001600160a01b0387169033907fa8137fff86647d8a402117b9c5dbda627f721d3773338fb9678c83e54ed390809060600160405180910390a36112dc565b6040805160008152602081018990529081018690526001600160a01b0387169033907fa8137fff86647d8a402117b9c5dbda627f721d3773338fb9678c83e54ed390809060600160405180910390a35b5050600980546001600160f81b0316600160f81b17905550909392505050565b600954600160f81b900460ff16600003611329576040516303cb96db60e21b815260040160405180910390fd5b600980546001600160f81b031690819055600160f01b900460ff16600103611364576040516313d0ff5960e31b815260040160405180910390fd5b82158015611370575081155b1561138e576040516342301c2360e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614806113ff57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316145b1561141d57604051634e46966960e11b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a891906140e8565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611512573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153691906140e8565b905060006115448383613047565b80519091508610158061155b575080602001518510155b156115795760405163bb55fd2760e01b815260040160405180910390fd5b87156115ab576115ab7f000000000000000000000000000000000000000000000000000000000000000033308b613192565b86156115dd576115dd7f000000000000000000000000000000000000000000000000000000000000000033308a613192565b851561160e5761160e7f00000000000000000000000000000000000000000000000000000000000000008588613558565b841561163f5761163f7f00000000000000000000000000000000000000000000000000000000000000008587613558565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156116a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c791906140e8565b6040516370a0823160e01b81523060048201529093507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561172e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175291906140e8565b9150600081604001518461176691906140b8565b9050600082606001518461177a91906140b8565b9050811580611787575080155b156117a5576040516323da237d60e01b815260040160405180910390fd5b82518211156117c55782516117ba90836140b8565b9950600097506117d9565b825160009a506117d69083906140b8565b97505b82602001518111156117ff5760208301516117f490826140b8565b985060009650611816565b6000985080836020015161181391906140b8565b96505b89158015611822575088155b156118405760405163098fb56160e01b815260040160405180910390fd5b600061184d8b6003614056565b611859846103e8614056565b61186391906140b8565b905060006118728b6003614056565b61187e846103e8614056565b61188891906140b8565b6020860151865191925061189b91614056565b6118a890620f4240614056565b6118b28284614056565b10156118d15760405163bf6056e760e01b815260040160405180910390fd5b60006118db61081a565b6008819055865160208801519192506118f591878761358d565b611907866000015187602001516135c0565b611912818686613692565b5050600580546001600160701b039485166001600160e01b031990911617600160701b939094169290920292909217905550506040805188815260208101889052908101869052606081018590526001600160a01b03841692503391507fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a35050600980546001600160f81b0316600160f81b179055505050565b60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b61c3206040518163ffffffff1660e01b8152600401600060405180830381865afa158015610737573d6000803e3d6000fd5b6040516370a0823160e01b8152306004820152600090819081908190819081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611a89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aad91906140e8565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3b91906140e8565b90506000611b498383613047565b805160208201516040830151606090930151600554929c919b50929950919750600160e01b900463ffffffff1695509350505050565b6000610771338484612ef5565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611bd557604051631dd2188d60e31b815260040160405180910390fd5b6004805465ffff00000000191664010000000061ffff8416908102919091179091556040519081527fc9e0eeef32bc2c2d7bf9a6830def15f44953dd73a3229bd87a87b12bed187b8d9060200161080f565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c7057604051631dd2188d60e31b815260040160405180910390fd5b600454611c9f90611c8e90600160301b900463ffffffff1642614091565b6009546001600160781b03166137ab565b600980546001600160781b0319166001600160781b03929092169190911790556004805469ffffffff0000000000001916600160301b63ffffffff8416908102919091179091556040519081527ffdc6d94bf7b4eaa8656351b49ed4d2aa06e1d903bf053c9a8e17b8c8cff415469060200161080f565b6009546000908190600160f81b900460ff168103611d47576040516303cb96db60e21b815260040160405180910390fd5b600980546001600160f81b031690819055600160f01b900460ff16600103611d82576040516313d0ff5960e31b815260040160405180910390fd5b6009546001600160781b0316421015611dae576040516303a6c09960e11b815260040160405180910390fd5b3060009081526001602052604090205415611e955760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4791906140cb565b90506001600160a01b03811615611e795730600081815260016020526040902054611e7491908390612ef5565b611e93565b30600081815260016020526040902054611e939190612fb3565b505b600080546040516370a0823160e01b81523060048201529091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2491906140e8565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb291906140e8565b90506000611fc08383613047565b80519091501580611fd357506020810151155b15611ff15760405163bb55fd2760e01b815260040160405180910390fd5b8060400151600003612084576000612013858a868661200e61081a565b6137ba565b6060840151919750915086111561203d57604051630e7a760760e41b815260040160405180910390fd5b600061204c836020015161329c565b90508082111561206f5760405163bacea60f60e01b815260040160405180910390fd5b61207d836020015183613342565b5050612105565b600061209a858a868661209561081a565b613801565b604084015191985091508711156120c457604051630e7a760760e41b815260040160405180910390fd5b60006120d3836000015161329c565b9050808211156120f65760405163bacea60f60e01b815260040160405180910390fd5b82516121029083613342565b50505b61210f3389612fb3565b8515612145576121407f00000000000000000000000000000000000000000000000000000000000000008888613558565b61218f565b8415612176576121407f00000000000000000000000000000000000000000000000000000000000000008887613558565b60405163749383ad60e01b815260040160405180910390fd5b60408051898152602081018890529081018690526001600160a01b0388169033907fd175a80c109434bb89948928ab2475a6647c94244cb70002197896423c8833639060600160405180910390a35050600980546001600160f81b0316600160f81b179055509194909350915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461224857604051631dd2188d60e31b815260040160405180910390fd5b6004805463ffffffff191663ffffffff83169081179091556040519081527ff905287cbb43751efa1a33cb1f6b357b3b5c574bc270934153d2c96ff5dfb7ef9060200161080f565b834211156122b15760405163068568f360e21b815260040160405180910390fd5b6001600160a01b038716600090815260036020526040812080547f0000000000000000000000000000000000000000000000000000000000000000917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b918761231f83614101565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161239892919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612403573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615806124385750886001600160a01b0316816001600160a01b031614155b156124565760405163b6ea5e6160e01b815260040160405180910390fd5b612461898989612e58565b505050505050505050565b600954600090600160f81b900460ff16810361249b576040516303cb96db60e21b815260040160405180910390fd5b600980546001600160f81b031690819055600160f01b900460ff166001036124d6576040516313d0ff5960e31b815260040160405180910390fd5b30600090815260016020526040902054156125bd5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561254b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256f91906140cb565b90506001600160a01b038116156125a1573060008181526001602052604090205461259c91908390612ef5565b6125bb565b306000818152600160205260409020546125bb9190612fb3565b505b600080546040516370a0823160e01b81523060048201529091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264c91906140e8565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da91906140e8565b90506127087f000000000000000000000000000000000000000000000000000000000000000033308a613192565b6127347f0000000000000000000000000000000000000000000000000000000000000000333089613192565b6040516370a0823160e01b815230600482015282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561279a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127be91906140e8565b6127c891906140b8565b6040516370a0823160e01b815230600482015290975081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612831573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285591906140e8565b61285f91906140b8565b95508260000361290c576103e861287e612879888a614056565b613826565b61288891906140b8565b935061289760006103e86134d3565b600580546001600160701b03888116600160701b026001600160e01b0319909216908a16171790556128ce6401000000004261402c565b6005601c6101000a81548163ffffffff021916908363ffffffff1602179055506128fb8761086788612eba565b6001600160e01b031660085561291c565b61291983888885856138ca565b93505b8360000361293d57604051633489be7560e21b815260040160405180910390fd5b61294785856134d3565b60408051888152602081018890529081018590526001600160a01b0386169033907fa8137fff86647d8a402117b9c5dbda627f721d3773338fb9678c83e54ed390809060600160405180910390a35050600980546001600160f81b0316600160f81b179055509392505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4191906140e8565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612acf91906140e8565b90506000612add8383613047565b604081015190915015612afc578051612af59061329c565b9350610903565b612b09816020015161329c565b935050505090565b6009546000908190600160f81b900460ff168103612b42576040516303cb96db60e21b815260040160405180910390fd5b600980546001600160f81b031690553060009081526001602052604090205415612c385760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bea91906140cb565b90506001600160a01b03811615612c1c5730600081815260016020526040902054612c1791908390612ef5565b612c36565b30600081815260016020526040902054612c369190612fb3565b505b83600003612c595760405163749383ad60e01b815260040160405180910390fd5b600080546040516370a0823160e01b81523060048201529091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ce891906140e8565b6040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015612d52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7691906140e8565b9050612d8483888484613908565b9095509350612d933388612fb3565b612dbe7f00000000000000000000000000000000000000000000000000000000000000008787613558565b612de97f00000000000000000000000000000000000000000000000000000000000000008786613558565b60408051888152602081018790529081018590526001600160a01b0387169033907fd175a80c109434bb89948928ab2475a6647c94244cb70002197896423c8833639060600160405180910390a35050600980546001600160f81b0316600160f81b1790555090939092509050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000612ed3600160701b6001600160701b03841661411a565b92915050565b6000612eee6001600160701b0383168461414c565b9392505050565b6001600160a01b038316600090815260016020526040902054612f199082906140b8565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612f49908290614091565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ead9085815260200190565b6000818310612fac5781612eee565b5090919050565b6001600160a01b038216600090815260016020526040902054612fd79082906140b8565b6001600160a01b03831660009081526001602052604081209190915554612fff9082906140b8565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050565b6130726040518060800160405280600081526020016000815260200160008152602001600081525090565b6005546001600160701b0380821691600160701b900416811580613094575080155b61318a578415806130a3575083155b61318a576130b18285614056565b6130bb8287614056565b101561310957848352816130cf8287614056565b6130d991906140a4565b6020840181905283516130ee91908385613942565b602084018190526130ff90856140b8565b606084015261314c565b602083018490528061311b8386614056565b61312591906140a4565b808452602084015161313991908484613942565b80845261314690866140b8565b60408401525b82516001600160701b03108061316c575060208301516001600160701b03105b1561318a57604051631a93c68960e11b815260040160405180910390fd5b505092915050565b6040516001600160a01b03808516602483015283166044820152606481018290526131fd9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261399e565b50505050565b6000808084613220856132168a8a614091565b600160701b613a78565b61322a9190614091565b6132348689614056565b61323e91906140a4565b9050600160701b61324f8583614056565b61325991906140a4565b91506132658187614091565b955061327182866140b8565b9450600061327f82896140b8565b905061328e8982858a8a6138ca565b935050509550959350505050565b6004546000908190612710906132bd90600160701b900461ffff1685614056565b6132c791906140a4565b600954909150600160781b90046001600160781b03164281111561333757600454600160801b900463ffffffff16600061330142846140b8565b6133119063ffffffff84166140b8565b905063ffffffff82166133248286614056565b61332e91906140a4565b9450505061333b565b8192505b5050919050565b6004546000906127109061336190600160701b900461ffff1685614056565b61336b91906140a4565b9050600081156133a3576004548290613392908590600160801b900463ffffffff16614056565b61339c91906140a4565b90506133b5565b50600454600160801b900463ffffffff165b600954600160781b90046001600160781b031642811115613405576133da8282614091565b6009600f6101000a8154816001600160781b0302191690836001600160781b03160217905550613436565b61340f8242614091565b6009600f6101000a8154816001600160781b0302191690836001600160781b031602179055505b5050505050565b60008080858461344d8988614091565b61345b90600160701b614056565b61346591906140a4565b61346f9190614091565b6134798789614056565b61348391906140a4565b90508361349482600160701b614056565b61349e91906140a4565b91506134aa82876140b8565b95506134b68186614091565b945060006134c482896140b8565b905061328e8984838a8a6138ca565b806000546134e19190614091565b60009081556001600160a01b038316815260016020526040902054613507908290614091565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061303b9085815260200190565b6040516001600160a01b03831660248201526044810182905261358890849063a9059cbb60e01b906064016131c6565b505050565b600080546135ae9061359f8688614056565b6135a98587614056565b613b26565b905080156134365761343630826134d3565b818160006135d36401000000004261402c565b60055490915063ffffffff600160e01b90910481168203908116158015906135fa57508515155b801561360557508415155b1561368a57836001600160701b03168163ffffffff16607087901b028161362e5761362e614016565b600680549290910490910190556001600160701b03831663ffffffff8216607088901b028161365f5761365f614016565b60078054929091049091019055600580546001600160e01b0316600160e01b63ffffffff8516021790555b505050505050565b60006136a18361086784612eba565b6001600160e01b031690506000848211156136c7576136c085836140b8565b90506136d4565b6136d182866140b8565b90505b60045463ffffffff600160301b8204811691600160501b81049091169060009061375b9061370f9061ffff640100000000909104168a614056565b613719858561406d565b63ffffffff1661372b61271088614056565b6137359190614056565b61373f91906140a4565b61374f9063ffffffff8616614091565b8363ffffffff16612f9d565b905060006137698242614091565b6009549091506001600160781b03908116908216111561246157600980546001600160781b0383166001600160781b0319909116179055505050505050505050565b6000818311612fac5781612eee565b60008060006137cb88888888613908565b93509050600160701b6137de8583614056565b6137e891906140a4565b91506137f48284614091565b9250509550959350505050565b600080600061381288888888613908565b9093509050836137de82600160701b614056565b60b581600160881b811061383f5760409190911b9060801c5b6901000000000000000000811061385b5760209190911b9060401c5b6501000000000081106138735760109190911b9060201c5b630100000081106138895760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b60006138fe836138da8789614056565b6138e491906140a4565b836138ef878a614056565b6138f991906140a4565b612f9d565b9695505050505050565b600080856139168686614056565b61392091906140a4565b91508561392d8685614056565b61393791906140a4565b905094509492505050565b600083613950846002614056565b61395a9190614056565b8280613967886002614056565b6139719190614056565b61397b9190614091565b10156139935761398c856001614091565b9050613996565b50835b949350505050565b60006139f3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613b759092919063ffffffff16565b9050805160001480613a14575080806020019051810190613a149190614172565b6135885760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084015b60405180910390fd5b6000808060001985870985870292508281108382030391505080600003613ab257838281613aa857613aa8614016565b0492505050612eee565b808411613abe57600080fd5b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b600080613b3284613826565b90506000613b3f84613826565b905081613b4d826005614056565b613b579190614091565b613b6183836140b8565b613b6b9088614056565b6138fe91906140a4565b6060613996848460008585600080866001600160a01b03168587604051613b9c919061418f565b60006040518083038185875af1925050503d8060008114613bd9576040519150601f19603f3d011682016040523d82523d6000602084013e613bde565b606091505b5091509150613bef87838387613bfa565b979650505050505050565b60608315613c69578251600003613c62576001600160a01b0385163b613c625760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401613a6f565b5081613996565b6139968383815115613c7e5781518083602001fd5b8060405162461bcd60e51b8152600401613a6f9190613cbc565b60005b83811015613cb3578181015183820152602001613c9b565b50506000910152565b6020815260008251806020840152613cdb816040850160208701613c98565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610a1857600080fd5b60008060408385031215613d1757600080fd5b8235613d2281613cef565b946020939093013593505050565b600060208284031215613d4257600080fd5b813561ffff81168114612eee57600080fd5b600080600060608486031215613d6957600080fd5b8335613d7481613cef565b92506020840135613d8481613cef565b929592945050506040919091013590565b8015158114610a1857600080fd5b600060208284031215613db557600080fd5b8135612eee81613d95565b600060208284031215613dd257600080fd5b813563ffffffff81168114612eee57600080fd5b60008060408385031215613df957600080fd5b823591506020830135613e0b81613cef565b809150509250929050565b600080600080600060a08688031215613e2e57600080fd5b853594506020860135935060408601359250606086013591506080860135613e5581613cef565b809150509295509295909350565b600060208284031215613e7557600080fd5b8135612eee81613cef565b600080600080600080600060e0888a031215613e9b57600080fd5b8735613ea681613cef565b96506020880135613eb681613cef565b95506040880135945060608801359350608088013560ff81168114613eda57600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215613f0a57600080fd5b8235613f1581613cef565b91506020830135613e0b81613cef565b600080600060608486031215613f3a57600080fd5b83359250602084013591506040840135613f5381613cef565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613f8657600080fd5b815167ffffffffffffffff80821115613f9e57600080fd5b818401915084601f830112613fb257600080fd5b815181811115613fc457613fc4613f5e565b604051601f8201601f19908116603f01168101908382118183101715613fec57613fec613f5e565b8160405282815287602084870101111561400557600080fd5b613bef836020830160208801613c98565b634e487b7160e01b600052601260045260246000fd5b60008261403b5761403b614016565b500690565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417612ed357612ed3614040565b63ffffffff82811682821603908082111561408a5761408a614040565b5092915050565b80820180821115612ed357612ed3614040565b6000826140b3576140b3614016565b500490565b81810381811115612ed357612ed3614040565b6000602082840312156140dd57600080fd5b8151612eee81613cef565b6000602082840312156140fa57600080fd5b5051919050565b60006001820161411357614113614040565b5060010190565b6001600160e01b0382811682821681810283169291811582850482141761414357614143614040565b50505092915050565b60006001600160e01b038381168061416657614166614016565b92169190910492915050565b60006020828403121561418457600080fd5b8151612eee81613d95565b600082516141a1818460208701613c98565b919091019291505056