[ { "inputs": [ { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "address", "name": "_WETH9", "type": "address" }, { "internalType": "address", "name": "_tokenDescriptor_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Collect", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "DecreaseLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "IncreaseLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "WETH9", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint128", "name": "amount0Max", "type": "uint128" }, { "internalType": "uint128", "name": "amount1Max", "type": "uint128" } ], "internalType": "struct INonfungiblePositionManager.CollectParams", "name": "params", "type": "tuple" } ], "name": "collect", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" } ], "name": "createAndInitializePoolIfNecessary", "outputs": [ { "internalType": "address", "name": "pool", "type": "address" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct INonfungiblePositionManager.DecreaseLiquidityParams", "name": "params", "type": "tuple" } ], "name": "decreaseLiquidity", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct INonfungiblePositionManager.IncreaseLiquidityParams", "name": "params", "type": "tuple" } ], "name": "increaseLiquidity", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct INonfungiblePositionManager.MintParams", "name": "params", "type": "tuple" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "positions", "outputs": [ { "internalType": "uint96", "name": "nonce", "type": "uint96" }, { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "feeGrowthInside0LastX128", "type": "uint256" }, { "internalType": "uint256", "name": "feeGrowthInside1LastX128", "type": "uint256" }, { "internalType": "uint128", "name": "tokensOwed0", "type": "uint128" }, { "internalType": "uint128", "name": "tokensOwed1", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "refundETH", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "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": "selfPermit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowed", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowedIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "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": "selfPermitIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "sweepToken", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Owed", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Owed", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3MintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "unwrapWETH9", "outputs": [], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
610120604052600d80546001600160b01b0319166001176001600160b01b0316600160b01b1790553480156200003457600080fd5b5060405162005ccb38038062005ccb8339810160408190526200005791620002db565b82826040518060400160405280601b81526020017f556e697377617020563320506f736974696f6e73204e46542d563100000000008152506040518060400160405280600a815260200169554e492d56332d504f5360b01b815250604051806040016040528060018152602001603160f81b8152508282620000e66301ffc9a760e01b6200018d60201b60201c565b8151620000fb90600690602085019062000212565b5080516200011190600790602084019062000212565b50620001246380ac58cd60e01b6200018d565b62000136635b5e139f60e01b6200018d565b6200014863780e9d6360e01b6200018d565b50508251602093840120608052805192019190912060a052506001600160601b0319606092831b811660c05290821b811660e05291901b166101005250620003249050565b6001600160e01b03198082161415620001ed576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200024a576000855562000295565b82601f106200026557805160ff191683800117855562000295565b8280016001018555821562000295579182015b828111156200029557825182559160200191906001019062000278565b50620002a3929150620002a7565b5090565b5b80821115620002a35760008155600101620002a8565b80516001600160a01b0381168114620002d657600080fd5b919050565b600080600060608486031215620002f0578283fd5b620002fb84620002be565b92506200030b60208501620002be565b91506200031b60408501620002be565b90509250925092565b60805160a05160c05160601c60e05160601c6101005160601c615922620003a96000398061279a5250806101f952806115c952806116b4528061173c5280613a055280613a4b5280613abf5250806109c55280610ce55280610dac528061274d528061283a5280612b3452806133375250806113c95250806113a852506159226000f3fe6080604052600436106101e95760003560e01c80636352211e11610103578063ac9650d81161009b578063ac9650d814610586578063b88d4fde146105a6578063c2e3140a146105c6578063c45a0155146105d9578063c87b56dd146105ee578063d34879971461060e578063df2ab5bb1461062e578063e985e9c514610641578063f3995c6714610661578063fc6f78651461067457610259565b80636352211e1461047b5780636c0360eb1461049b57806370a08231146104b05780637ac2ff7b146104d057806388316456146104e357806395d89b411461050657806399fbab881461051b578063a22cb46514610553578063a4a78f0c1461057357610259565b806323b872dd1161018157806323b872dd146103835780632f745c59146103a357806330adf81f146103c35780633644e515146103d857806342842e0e146103ed57806342966c681461040d5780634659a4941461042057806349404b7c146104335780634aa4a4fc146104465780634f6ccce71461045b57610259565b806301ffc9a71461025e57806306fdde0314610294578063081812fc146102b6578063095ea7b3146102e35780630c49ccbe1461030357806312210e8a1461032457806313ead5621461032c57806318160ddd1461033f578063219f5d171461036157610259565b3661025957336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610257576040805162461bcd60e51b81526020600482015260096024820152684e6f7420574554483960b81b604482015290519081900360640190fd5b005b600080fd5b34801561026a57600080fd5b5061027e610279366004614e0f565b610687565b60405161028b9190615350565b60405180910390f35b3480156102a057600080fd5b506102a96106aa565b60405161028b91906153a3565b3480156102c257600080fd5b506102d66102d1366004615107565b610740565b60405161028b9190615230565b3480156102ef57600080fd5b506102576102fe366004614cda565b610793565b610316610311366004614ed3565b610869565b60405161028b92919061552a565b610257610cb1565b6102d661033a366004614b6e565b610cc3565b34801561034b57600080fd5b50610354610fb7565b60405161028b919061535b565b61037461036f366004614ee4565b610fc8565b60405161028b939291906154e5565b34801561038f57600080fd5b5061025761039e366004614bc7565b6112dd565b3480156103af57600080fd5b506103546103be366004614cda565b611334565b3480156103cf57600080fd5b5061035461135f565b3480156103e457600080fd5b50610354611383565b3480156103f957600080fd5b50610257610408366004614bc7565b611441565b61025761041b366004615107565b61145c565b61025761042e366004614d46565b61152b565b61025761044136600461511f565b6115c5565b34801561045257600080fd5b506102d661173a565b34801561046757600080fd5b50610354610476366004615107565b61175e565b34801561048757600080fd5b506102d6610496366004615107565b611774565b3480156104a757600080fd5b506102a961179c565b3480156104bc57600080fd5b506103546104cb366004614b1a565b6117a1565b6102576104de366004614d46565b611809565b6104f66104f1366004614f9f565b611bfb565b60405161028b9493929190615506565b34801561051257600080fd5b506102a9612113565b34801561052757600080fd5b5061053b610536366004615107565b612174565b60405161028b9c9b9a99989796959493929190615538565b34801561055f57600080fd5b5061025761056e366004614cad565b612385565b610257610581366004614d46565b612486565b610599610594366004614da1565b61251f565b60405161028b91906152f0565b3480156105b257600080fd5b506102576105c1366004614c07565b61265e565b6102576105d4366004614d46565b6126bc565b3480156105e557600080fd5b506102d661274b565b3480156105fa57600080fd5b506102a9610609366004615107565b61276f565b34801561061a57600080fd5b50610257610629366004615166565b612825565b61025761063c366004614d05565b6128a3565b34801561064d57600080fd5b5061027e61065c366004614b36565b61297b565b61025761066f366004614d46565b6129a9565b610316610682366004614ebc565b612a1b565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b60068054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b5050505050905090565b600061074b82612ee6565b6107705760405162461bcd60e51b8152600401610767906153dc565b60405180910390fd5b506000908152600c6020526040902054600160601b90046001600160a01b031690565b600061079e82611774565b9050806001600160a01b0316836001600160a01b031614156107f15760405162461bcd60e51b81526004018080602001828103825260218152602001806158c46021913960400191505060405180910390fd5b806001600160a01b0316610803612ef3565b6001600160a01b0316148061081f575061081f8161065c612ef3565b61085a5760405162461bcd60e51b81526004018080602001828103825260388152602001806157ce6038913960400191505060405180910390fd5b6108648383612ef7565b505050565b60008082356108783382612f6d565b6108945760405162461bcd60e51b8152600401610767906153b6565b8360800135806108a2613009565b11156108eb576040805162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015290519081900360640190fd5b60006108fd6040870160208801614fb1565b6001600160801b03161161091057600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b03169161094b918901908901614fb1565b6001600160801b0316816001600160801b0316101561096957600080fd5b6001828101546001600160501b03166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff16908301526109ea7f00000000000000000000000000000000000000000000000000000000000000008361300d565b60018501549091506001600160a01b0382169063a34123a790600160501b8104600290810b91600160681b9004900b610a2960408e0160208f01614fb1565b6040518463ffffffff1660e01b8152600401610a479392919061537d565b6040805180830381600087803b158015610a6057600080fd5b505af1158015610a74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190615143565b909850965060408901358810801590610ab5575088606001358710155b610ad15760405162461bcd60e51b815260040161076790615428565b6001840154600090610afa903090600160501b8104600290810b91600160681b9004900b6130ec565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610b2b919061535b565b60a06040518083038186803b158015610b4357600080fd5b505afa158015610b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7b9190614ffb565b50509250925050610ba087600201548303876001600160801b0316600160801b613141565b6004880180546001600160801b03198116928e016001600160801b039182160181169290921790556003880154610be191908303908816600160801b613141565b6004880180546001600160801b03808216938e01600160801b9283900482160116029190911790556002870182905560038701819055610c2760408d0160208e01614fb1565b86038760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d6020016020810190610c8a9190614fb1565b8d8d604051610c9b939291906154e5565b60405180910390a2505050505050505050915091565b4715610cc157610cc133476131f0565b565b6000836001600160a01b0316856001600160a01b031610610ce357600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631698ee828686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff168152602001935050505060206040518083038186803b158015610d6e57600080fd5b505afa158015610d82573d6000803e3d6000fd5b505050506040513d6020811015610d9857600080fd5b505190506001600160a01b038116610ece577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a16712958686866040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018262ffffff1681526020019350505050602060405180830381600087803b158015610e3757600080fd5b505af1158015610e4b573d6000803e3d6000fd5b505050506040513d6020811015610e6157600080fd5b50516040805163f637731d60e01b81526001600160a01b03858116600483015291519293509083169163f637731d9160248082019260009290919082900301818387803b158015610eb157600080fd5b505af1158015610ec5573d6000803e3d6000fd5b50505050610faf565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610f0957600080fd5b505afa158015610f1d573d6000803e3d6000fd5b505050506040513d60e0811015610f3357600080fd5b505190506001600160a01b038116610fad57816001600160a01b031663f637731d846040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015610f9457600080fd5b505af1158015610fa8573d6000803e3d6000fd5b505050505b505b949350505050565b6000610fc360026132df565b905090565b60008060008360a0013580610fdb613009565b1115611024576040805162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015290519081900360640190fd5b84356000908152600c602090815260408083206001808201546001600160501b0381168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a0152925116828701523082850152600160501b8304600290810b810b608080850191909152600160681b909404810b900b60a0830152958c013560c0820152938b013560e0850152908a01356101008401528901356101208301529290611106906132ea565b6001870154939a5091985096509150600090611139903090600160501b8104600290810b91600160681b9004900b6130ec565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b815260040161116a919061535b565b60a06040518083038186803b15801561118257600080fd5b505afa158015611196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ba9190614ffb565b505092509250506111f6866002015483038760010160109054906101000a90046001600160801b03166001600160801b0316600160801b613141565b6004870180546001600160801b0380821690930183166001600160801b03199091161790556003870154600188015461123d9291840391600160801b918290041690613141565b6004870180546001600160801b03600160801b80830482169094018116840291811691909117909155600288018490556003880183905560018801805483810483168e018316909302929091169190911790556040518b35907f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f906112c7908d908d908d906154e5565b60405180910390a2505050505050509193909250565b6112ee6112e8612ef3565b82612f6d565b6113295760405162461bcd60e51b81526004018080602001828103825260318152602001806158e56031913960400191505060405180910390fd5b610864838383613525565b6001600160a01b0382166000908152600160205260408120611356908361365f565b90505b92915050565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006113f061366b565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b031681526020019550505050505060405160208183030381529060405280519060200120905090565b6108648383836040518060200160405280600081525061265e565b806114673382612f6d565b6114835760405162461bcd60e51b8152600401610767906153b6565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156114be575060048101546001600160801b0316155b80156114dc57506004810154600160801b90046001600160801b0316155b6114f85760405162461bcd60e51b815260040161076790615480565b6000838152600c60205260408120818155600181018290556002810182905560038101829055600401556108648361366f565b604080516323f2ebc360e21b815233600482015230602482015260448101879052606481018690526001608482015260ff851660a482015260c4810184905260e4810183905290516001600160a01b03881691638fcbaf0c9161010480830192600092919082900301818387803b1580156115a557600080fd5b505af11580156115b9573d6000803e3d6000fd5b50505050505050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561163457600080fd5b505afa158015611648573d6000803e3d6000fd5b505050506040513d602081101561165e57600080fd5b50519050828110156116ac576040805162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e7420574554483960701b604482015290519081900360640190fd5b8015610864577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561171857600080fd5b505af115801561172c573d6000803e3d6000fd5b5050505061086482826131f0565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008061176c60028461372a565b509392505050565b6000611359826040518060600160405280602981526020016158306029913960029190613748565b606090565b60006001600160a01b0382166117e85760405162461bcd60e51b815260040180806020018281038252602a815260200180615806602a913960400191505060405180910390fd5b6001600160a01b0382166000908152600160205260409020611359906132df565b83611812613009565b1115611856576040805162461bcd60e51b815260206004820152600e60248201526d14195c9b5a5d08195e1c1a5c995960921b604482015290519081900360640190fd5b6000611860611383565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad888861188c81613755565b604080516020808201969096526001600160a01b03909416848201526060840192909252608083015260a08083018a90528151808403909101815260c08301825280519084012061190160f01b60e084015260e28301949094526101028083019490945280518083039094018452610122909101905281519101209050600061191487611774565b9050806001600160a01b0316886001600160a01b031614156119675760405162461bcd60e51b81526004018080602001828103825260278152602001806157316027913960400191505060405180910390fd5b6119708161378a565b15611ad8576040805160208082018790528183018690526001600160f81b031960f889901b1660608301528251604181840301815260618301808552630b135d3f60e11b90526065830186815260858401948552815160a585015281516001600160a01b03871695631626ba7e958995919260c59091019185019080838360005b83811015611a095781810151838201526020016119f1565b50505050905090810190601f168015611a365780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611a5457600080fd5b505afa158015611a68573d6000803e3d6000fd5b505050506040513d6020811015611a7e57600080fd5b50516001600160e01b031916630b135d3f60e11b14611ad3576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b611be7565b600060018387878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611b34573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611b90576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b816001600160a01b0316816001600160a01b031614611be5576040805162461bcd60e51b815260206004820152600c60248201526b155b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b505b611bf18888612ef7565b5050505050505050565b60008060008084610140013580611c10613009565b1115611c59576040805162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb881d1bdbc81bdb19606a1b604482015290519081900360640190fd5b604080516101408101909152600090611d259080611c7a60208b018b614b1a565b6001600160a01b03168152602001896020016020810190611c9b9190614b1a565b6001600160a01b03168152602001611cb960608b0160408c016150ed565b62ffffff168152306020820152604001611cd960808b0160608c01614e37565b60020b8152602001611cf160a08b0160808c01614e37565b60020b81526020018960a0013581526020018960c0013581526020018960e0013581526020018961010001358152506132ea565b92975090955093509050611d72611d4461014089016101208a01614b1a565b600d80546001600160b01b0319811660016001600160b01b0392831690810190921617909155975087613790565b6000611d9d30611d8860808b0160608c01614e37565b611d9860a08c0160808d01614e37565b6130ec565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401611dce919061535b565b60a06040518083038186803b158015611de657600080fd5b505afa158015611dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1e9190614ffb565b505092509250506000611e978560405180606001604052808e6000016020810190611e499190614b1a565b6001600160a01b031681526020018e6020016020810190611e6a9190614b1a565b6001600160a01b031681526020018e6040016020810190611e8b91906150ed565b62ffffff1690526138ac565b905060405180610140016040528060006001600160601b0316815260200160006001600160a01b03168152602001826001600160501b031681526020018c6060016020810190611ee79190614e37565b60020b8152602001611eff60a08e0160808f01614e37565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816001600160601b0302191690836001600160601b03160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a8154816001600160501b0302191690836001600160501b03160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a6040516120fe939291906154e5565b60405180910390a25050505050509193509193565b60078054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107365780601f1061070b57610100808354040283529160200191610736565b6000818152600c6020908152604080832081516101408101835281546001600160601b03811682526001600160a01b03600160601b909104169381019390935260018101546001600160501b038116928401839052600160501b8104600290810b810b810b6060860152600160681b8204810b810b810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e0860152600490920154808316610100860152041661012083015282918291829182918291829182918291829182918291906122655760405162461bcd60e51b815260040161076790615456565b6000600b600083604001516001600160501b03166001600160501b031681526020019081526020016000206040518060600160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820160149054906101000a900462ffffff1662ffffff1662ffffff1681525050905081600001518260200151826000015183602001518460400151866060015187608001518860a001518960c001518a60e001518b61010001518c61012001519d509d509d509d509d509d509d509d509d509d509d509d50505091939597999b5091939597999b565b61238d612ef3565b6001600160a01b0316826001600160a01b031614156123ef576040805162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b604482015290519081900360640190fd5b80600560006123fc612ef3565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155612440612ef3565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b60408051636eb1769f60e11b81523360048201523060248201529051600019916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b1580156124d757600080fd5b505afa1580156124eb573d6000803e3d6000fd5b505050506040513d602081101561250157600080fd5b505110156125175761251786868686868661152b565b505050505050565b6060816001600160401b038111801561253757600080fd5b5060405190808252806020026020018201604052801561256b57816020015b60608152602001906001900390816125565790505b50905060005b82811015612657576000803086868581811061258957fe5b905060200281019061259b91906155d2565b6040516125a9929190615220565b600060405180830381855af49150503d80600081146125e4576040519150601f19603f3d011682016040523d82523d6000602084013e6125e9565b606091505b5091509150816126355760448151101561260257600080fd5b6004810190508080602001905181019061261c9190614e53565b60405162461bcd60e51b815260040161076791906153a3565b8084848151811061264257fe5b60209081029190910101525050600101612571565b5092915050565b61266f612669612ef3565b83612f6d565b6126aa5760405162461bcd60e51b81526004018080602001828103825260318152602001806158e56031913960400191505060405180910390fd5b6126b68484848461398e565b50505050565b60408051636eb1769f60e11b8152336004820152306024820152905186916001600160a01b0389169163dd62ed3e91604480820192602092909190829003018186803b15801561270b57600080fd5b505afa15801561271f573d6000803e3d6000fd5b505050506040513d602081101561273557600080fd5b50511015612517576125178686868686866129a9565b7f000000000000000000000000000000000000000000000000000000000000000081565b606061277a82612ee6565b61278357600080fd5b60405163e9dc637560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e9dc6375906127d19030908690600401615364565b60006040518083038186803b1580156127e957600080fd5b505afa1580156127fd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113599190810190614e53565b600061283382840184614ef5565b90506128637f000000000000000000000000000000000000000000000000000000000000000082600001516139e0565b50841561287e57805151602082015161287e91903388613a03565b831561289c5761289c81600001516020015182602001513387613a03565b5050505050565b6000836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156128f257600080fd5b505afa158015612906573d6000803e3d6000fd5b505050506040513d602081101561291c57600080fd5b505190508281101561296a576040805162461bcd60e51b815260206004820152601260248201527124b739bab33334b1b4b2b73a103a37b5b2b760711b604482015290519081900360640190fd5b80156126b6576126b6848383613b93565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6040805163d505accf60e01b8152336004820152306024820152604481018790526064810186905260ff8516608482015260a4810184905260c4810183905290516001600160a01b0388169163d505accf9160e480830192600092919082900301818387803b1580156115a557600080fd5b6000808235612a2a3382612f6d565b612a465760405162461bcd60e51b8152600401610767906153b6565b6000612a586060860160408701614fb1565b6001600160801b03161180612a8557506000612a7a6080860160608701614fb1565b6001600160801b0316115b612a8e57600080fd5b600080612aa16040870160208801614b1a565b6001600160a01b031614612ac457612abf6040860160208701614b1a565b612ac6565b305b85356000908152600c602090815260408083206001808201546001600160501b03168552600b8452828520835160608101855281546001600160a01b039081168252919092015490811694820194909452600160a01b90930462ffffff169183019190915292935090612b597f00000000000000000000000000000000000000000000000000000000000000008361300d565b600484015460018501549192506001600160801b0380821692600160801b9283900482169290041615612d4f57600185015460405163a34123a760e01b81526001600160a01b0385169163a34123a791612bd091600160501b8104600290810b92600160681b909204900b9060009060040161537d565b6040805180830381600087803b158015612be957600080fd5b505af1158015612bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c219190615143565b5050600185015460009081906001600160a01b0386169063514ea4bf90612c5f903090600160501b8104600290810b91600160681b9004900b6130ec565b6040518263ffffffff1660e01b8152600401612c7b919061535b565b60a06040518083038186803b158015612c9357600080fd5b505afa158015612ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ccb9190614ffb565b50509250925050612d07876002015483038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613141565b84019350612d40876003015482038860010160109054906101000a90046001600160801b03166001600160801b0316600160801b613141565b60028801929092556003870155015b6000806001600160801b038416612d6c60608e0160408f01614fb1565b6001600160801b031611612d8f57612d8a60608d0160408e01614fb1565b612d91565b835b836001600160801b03168d6060016020810190612dae9190614fb1565b6001600160801b031611612dd157612dcc60808e0160608f01614fb1565b612dd3565b835b60018901546040516309e3d67b60e31b81529294509092506001600160a01b03871691634f1eb3d891612e26918c91600160501b8104600290810b92600160681b909204900b9088908890600401615289565b6040805180830381600087803b158015612e3f57600080fd5b505af1158015612e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e779190614fcd565b6004890180546001600160801b03196001600160801b03918216600160801b878a0384160217168689038216179091556040519281169d50169a508c35907f40d0efd1a53d60ecbf40971b9daf7dc90178c3aadc7aab1765632738fa8b8f0190610c9b908b90869086906152c6565b6000611359600283613cda565b3390565b6000818152600c6020526040902080546001600160601b0316600160601b6001600160a01b038516908102919091179091558190612f3482611774565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612f7882612ee6565b612fb35760405162461bcd60e51b815260040180806020018281038252602c8152602001806157a2602c913960400191505060405180910390fd5b6000612fbe83611774565b9050806001600160a01b0316846001600160a01b03161480612ff95750836001600160a01b0316612fee84610740565b6001600160a01b0316145b80610faf5750610faf818561297b565b4290565b600081602001516001600160a01b031682600001516001600160a01b03161061303557600080fd5b50805160208083015160409384015184516001600160a01b0394851681850152939091168385015262ffffff166060808401919091528351808403820181526080840185528051908301206001600160f81b031960a085015294901b6001600160601b03191660a183015260b58201939093527fbdd391646be09e81c5ce0c3a0ddf4cdb6be1772c88acc7bbbd6753d25399f70460d5808301919091528251808303909101815260f5909101909152805191012090565b604080516001600160601b0319606086901b16602080830191909152600285810b60e890811b60348501529085900b901b60378301528251601a818403018152603a90920190925280519101205b9392505050565b6000808060001985870986860292508281109083900303905080613177576000841161316c57600080fd5b50829004905061313a565b80841161318357600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061323c5780518252601f19909201916020918201910161321d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461329e576040519150601f19603f3d011682016040523d82523d6000602084013e6132a3565b606091505b5050905080610864576040805162461bcd60e51b815260206004820152600360248201526253544560e81b604482015290519081900360640190fd5b600061135982613ce6565b6000806000806000604051806060016040528087600001516001600160a01b0316815260200187602001516001600160a01b03168152602001876040015162ffffff16815250905061335c7f00000000000000000000000000000000000000000000000000000000000000008261300d565b91506000826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561339957600080fd5b505afa1580156133ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d1919061505c565b505050505050905060006133e88860800151613cea565b905060006133f98960a00151613cea565b90506134108383838c60c001518d60e00151614012565b9750505050816001600160a01b0316633c8a7d8d876060015188608001518960a00151896040518060400160405280888152602001336001600160a01b031681525060405160200161346291906154a5565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401613491959493929190615244565b6040805180830381600087803b1580156134aa57600080fd5b505af11580156134be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e29190615143565b6101008801519195509350841080159061350157508561012001518310155b61351d5760405162461bcd60e51b815260040161076790615428565b509193509193565b826001600160a01b031661353882611774565b6001600160a01b03161461357d5760405162461bcd60e51b815260040180806020018281038252602981526020018061587b6029913960400191505060405180910390fd5b6001600160a01b0382166135c25760405162461bcd60e51b81526004018080602001828103825260248152602001806157586024913960400191505060405180910390fd5b6135cd838383610864565b6135d8600082612ef7565b6001600160a01b03831660009081526001602052604090206135fa90826140d6565b506001600160a01b038216600090815260016020526040902061361d90826140e2565b5061362a600282846140ee565b5080826001600160a01b0316846001600160a01b03166000805160206158a483398151915260405160405180910390a4505050565b60006113568383614104565b4690565b600061367a82611774565b905061368881600084610864565b613693600083612ef7565b60008281526008602052604090205460026000196101006001841615020190911604156136d15760008281526008602052604081206136d191614a8a565b6001600160a01b03811660009081526001602052604090206136f390836140d6565b506136ff600283614168565b5060405182906000906001600160a01b038416906000805160206158a4833981519152908390a45050565b60008080806137398686614174565b909450925050505b9250929050565b6000610faf8484846141ef565b6000908152600c6020526040902080546001600160601b0319811660016001600160601b039283169081019092161790915590565b3b151590565b6001600160a01b0382166137eb576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6137f481612ee6565b15613846576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b61385260008383610864565b6001600160a01b038216600090815260016020526040902061387490826140e2565b50613881600282846140ee565b5060405181906001600160a01b038416906000906000805160206158a4833981519152908290a45050565b6001600160a01b0382166000908152600a60205260409020546001600160501b0316806113595750600d805460016001600160501b03600160b01b8084048216838101909216026001600160b01b03909316929092179092556001600160a01b038085166000908152600a60209081526040808320805469ffffffffffffffffffff191686179055848352600b825291829020865181549085166001600160a01b031991821617825591870151950180549287015162ffffff16600160a01b0262ffffff60a01b19969094169290911691909117939093161790915592915050565b613999848484613525565b6139a5848484846142b9565b6126b65760405162461bcd60e51b81526004018080602001828103825260328152602001806156ff6032913960400191505060405180910390fd5b60006139ec838361300d565b9050336001600160a01b0382161461135957600080fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015613a445750804710155b15613b66577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613aa457600080fd5b505af1158015613ab8573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015613b3457600080fd5b505af1158015613b48573d6000803e3d6000fd5b505050506040513d6020811015613b5e57600080fd5b506126b69050565b6001600160a01b038316301415613b8757613b82848383613b93565b6126b6565b6126b684848484614421565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310613c0f5780518252601f199092019160209182019101613bf0565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c71576040519150601f19603f3d011682016040523d82523d6000602084013e613c76565b606091505b5091509150818015613ca4575080511580613ca45750808060200190516020811015613ca157600080fd5b50515b61289c576040805162461bcd60e51b815260206004820152600260248201526114d560f21b604482015290519081900360640190fd5b60006113568383614571565b5490565b60008060008360020b12613d01578260020b613d09565b8260020b6000035b9050620d89e8811115613d47576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216613d5b57600160801b613d6d565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615613d97576ffff97272373d413259a46990580e213a0260801c5b6004821615613db6576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613dd5576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613df4576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613e13576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613e32576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613e51576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613e71576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613e91576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613eb1576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613ed1576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613ef1576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613f11576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613f31576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613f51576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613f72576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613f92576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613fb1576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613fce576b048a170391f7dc42444e8fa20260801c5b60008460020b1315613fe9578060001981613fe557fe5b0490505b640100000000810615613ffd576001614000565b60005b60ff16602082901c0192505050919050565b6000836001600160a01b0316856001600160a01b03161115614032579293925b846001600160a01b0316866001600160a01b03161161405d57614056858585614589565b90506140cd565b836001600160a01b0316866001600160a01b031610156140bf576000614084878686614589565b905060006140938789866145ec565b9050806001600160801b0316826001600160801b0316106140b457806140b6565b815b925050506140cd565b6140ca8585846145ec565b90505b95945050505050565b60006113568383614629565b600061135683836146ef565b6000610faf84846001600160a01b038516614739565b815460009082106141465760405162461bcd60e51b81526004018080602001828103825260228152602001806156dd6022913960400191505060405180910390fd5b82600001828154811061415557fe5b9060005260206000200154905092915050565b600061135683836147d0565b8154600090819083106141b85760405162461bcd60e51b81526004018080602001828103825260228152602001806158596022913960400191505060405180910390fd5b60008460000184815481106141c957fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b6000828152600184016020526040812054828161428a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561424f578181015183820152602001614237565b50505050905090810190601f16801561427c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5084600001600182038154811061429d57fe5b9060005260206000209060020201600101549150509392505050565b60006142cd846001600160a01b031661378a565b6142d957506001610faf565b60006143e7630a85bd0160e11b6142ee612ef3565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561435557818101518382015260200161433d565b50505050905090810190601f1680156143825780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060600160405280603281526020016156ff603291396001600160a01b03881691906148a4565b9050600081806020019051602081101561440057600080fd5b50516001600160e01b031916630a85bd0160e11b1492505050949350505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b602083106144a55780518252601f199092019160209182019101614486565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614507576040519150601f19603f3d011682016040523d82523d6000602084013e61450c565b606091505b509150915081801561453a57508051158061453a575080806020019051602081101561453757600080fd5b50515b612517576040805162461bcd60e51b815260206004820152600360248201526229aa2360e91b604482015290519081900360640190fd5b60009081526001919091016020526040902054151590565b6000826001600160a01b0316846001600160a01b031611156145a9579192915b60006145cc856001600160a01b0316856001600160a01b0316600160601b613141565b90506140cd6145e784838888036001600160a01b0316613141565b6148b3565b6000826001600160a01b0316846001600160a01b0316111561460c579192915b610faf6145e783600160601b8787036001600160a01b0316613141565b600081815260018301602052604081205480156146e5578354600019808301919081019060009087908390811061465c57fe5b906000526020600020015490508087600001848154811061467957fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806146a957fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611359565b6000915050611359565b60006146fb8383614571565b61473157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611359565b506000611359565b60008281526001840160205260408120548061479e57505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561313a565b828560000160018303815481106147b157fe5b906000526020600020906002020160010181905550600091505061313a565b600081815260018301602052604081205480156146e5578354600019808301919081019060009087908390811061480357fe5b906000526020600020906002020190508087600001848154811061482357fe5b60009182526020808320845460029093020191825560019384015491840191909155835482528983019052604090209084019055865487908061486257fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506113599350505050565b6060610faf84846000856148c9565b806001600160801b03811681146106a557600080fd5b60608247101561490a5760405162461bcd60e51b815260040180806020018281038252602681526020018061577c6026913960400191505060405180910390fd5b6149138561378a565b614964576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106149a25780518252601f199092019160209182019101614983565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614a04576040519150601f19603f3d011682016040523d82523d6000602084013e614a09565b606091505b5091509150614a19828286614a24565b979650505050505050565b60608315614a3357508161313a565b825115614a435782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561424f578181015183820152602001614237565b50805460018160011615610100020316600290046000825580601f10614ab05750614ace565b601f016020900490600052602060002090810190614ace9190614ad1565b50565b5b80821115614ae65760008155600101614ad2565b5090565b80356106a581615686565b805161ffff811681146106a557600080fd5b803562ffffff811681146106a557600080fd5b600060208284031215614b2b578081fd5b813561313a81615686565b60008060408385031215614b48578081fd5b8235614b5381615686565b91506020830135614b6381615686565b809150509250929050565b60008060008060808587031215614b83578182fd5b8435614b8e81615686565b93506020850135614b9e81615686565b9250614bac60408601614b07565b91506060850135614bbc81615686565b939692955090935050565b600080600060608486031215614bdb578081fd5b8335614be681615686565b92506020840135614bf681615686565b929592945050506040919091013590565b60008060008060808587031215614c1c578182fd5b8435614c2781615686565b93506020850135614c3781615686565b92506040850135915060608501356001600160401b03811115614c58578182fd5b8501601f81018713614c68578182fd5b8035614c7b614c7682615639565b615616565b818152886020838501011115614c8f578384fd5b81602084016020830137908101602001929092525092959194509250565b60008060408385031215614cbf578182fd5b8235614cca81615686565b91506020830135614b638161569b565b60008060408385031215614cec578182fd5b8235614cf781615686565b946020939093013593505050565b600080600060608486031215614d19578081fd5b8335614d2481615686565b9250602084013591506040840135614d3b81615686565b809150509250925092565b60008060008060008060c08789031215614d5e578384fd5b8635614d6981615686565b955060208701359450604087013593506060870135614d87816156cd565b9598949750929560808101359460a0909101359350915050565b60008060208385031215614db3578182fd5b82356001600160401b0380821115614dc9578384fd5b818501915085601f830112614ddc578384fd5b813581811115614dea578485fd5b8660208083028501011115614dfd578485fd5b60209290920196919550909350505050565b600060208284031215614e20578081fd5b81356001600160e01b03198116811461313a578182fd5b600060208284031215614e48578081fd5b813561313a816156a9565b600060208284031215614e64578081fd5b81516001600160401b03811115614e79578182fd5b8201601f81018413614e89578182fd5b8051614e97614c7682615639565b818152856020838501011115614eab578384fd5b6140cd82602083016020860161565a565b600060808284031215614ecd578081fd5b50919050565b600060a08284031215614ecd578081fd5b600060c08284031215614ecd578081fd5b60008183036080811215614f07578182fd5b604051604081016001600160401b038282108183111715614f2457fe5b816040526060841215614f35578485fd5b60a0830193508184108185111715614f4957fe5b508260405284359250614f5b83615686565b918252602084013591614f6d83615686565b826060830152614f7f60408601614b07565b60808301528152614f9260608501614aea565b6020820152949350505050565b60006101608284031215614ecd578081fd5b600060208284031215614fc2578081fd5b813561313a816156b8565b60008060408385031215614fdf578182fd5b8251614fea816156b8565b6020840151909250614b63816156b8565b600080600080600060a08688031215615012578283fd5b855161501d816156b8565b809550506020860151935060408601519250606086015161503d816156b8565b608087015190925061504e816156b8565b809150509295509295909350565b600080600080600080600060e0888a031215615076578485fd5b875161508181615686565b6020890151909750615092816156a9565b95506150a060408901614af5565b94506150ae60608901614af5565b93506150bc60808901614af5565b925060a08801516150cc816156cd565b60c08901519092506150dd8161569b565b8091505092959891949750929550565b6000602082840312156150fe578081fd5b61135682614b07565b600060208284031215615118578081fd5b5035919050565b60008060408385031215615131578182fd5b823591506020830135614b6381615686565b60008060408385031215615155578182fd5b505080516020909101519092909150565b6000806000806060858703121561517b578182fd5b843593506020850135925060408501356001600160401b038082111561519f578384fd5b818701915087601f8301126151b2578384fd5b8135818111156151c0578485fd5b8860208285010111156151d1578485fd5b95989497505060200194505050565b600081518084526151f881602086016020860161565a565b601f01601f19169290920160200192915050565b60020b9052565b6001600160801b03169052565b6000828483379101908152919050565b6001600160a01b0391909116815260200190565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a060808201819052600090614a19908301846151e0565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6001600160a01b039390931683526001600160801b03918216602084015216604082015260600190565b6000602080830181845280855180835260408601915060408482028701019250838701855b8281101561534357603f198886030184526153318583516151e0565b94509285019290850190600101615315565b5092979650505050505050565b901515815260200190565b90815260200190565b6001600160a01b03929092168252602082015260400190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60006020825261135660208301846151e0565b6020808252600c908201526b139bdd08185c1c1c9bdd995960a21b604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b602080825260149082015273507269636520736c69707061676520636865636b60601b604082015260600190565b60208082526010908201526f125b9d985b1a59081d1bdad95b88125160821b604082015260600190565b6020808252600b908201526a139bdd0818db19585c995960aa1b604082015260600190565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160801b039390931683526020830191909152604082015260600190565b9384526001600160801b039290921660208401526040830152606082015260800190565b918252602082015260400190565b6001600160601b038d1681526001600160a01b038c811660208301528b811660408301528a16606082015262ffffff89166080820152600288900b60a0820152610180810161558a60c083018961520c565b61559760e0830188615213565b85610100830152846101208301526155b3610140830185615213565b6155c1610160830184615213565b9d9c50505050505050505050505050565b6000808335601e198436030181126155e8578283fd5b8301803591506001600160401b03821115615601578283fd5b60200191503681900382131561374157600080fd5b6040518181016001600160401b038111828210171561563157fe5b604052919050565b60006001600160401b0382111561564c57fe5b50601f01601f191660200190565b60005b8381101561567557818101518382015260200161565d565b838111156126b65750506000910152565b6001600160a01b0381168114614ace57600080fd5b8015158114614ace57600080fd5b8060020b8114614ace57600080fd5b6001600160801b0381168114614ace57600080fd5b60ff81168114614ace57600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315065726d69743a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a164736f6c6343000706000a000000000000000000000000fdc797afd72dab845c8a50821c0fe3344853b0ba00000000000000000000000078c1b0c915c4faa5fffa6cabf0219da63d7f4cb8000000000000000000000000c1b21e9eabec604fabb58c1cb0f009ac7de03d0b