[ { "inputs": [ { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" }, { "internalType": "uint24", "name": "_maintenance", "type": "uint24" }, { "internalType": "address", "name": "_oracle", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "Amount0ExceedsReserve0", "type": "error" }, { "inputs": [], "name": "Amount0LessThanMin", "type": "error" }, { "inputs": [], "name": "Amount1ExceedsReserve1", "type": "error" }, { "inputs": [], "name": "Amount1LessThanMin", "type": "error" }, { "inputs": [], "name": "InvalidAmountSpecified", "type": "error" }, { "inputs": [], "name": "InvalidFeeProtocol", "type": "error" }, { "inputs": [], "name": "InvalidLiquidityDelta", "type": "error" }, { "inputs": [], "name": "InvalidPosition", "type": "error" }, { "inputs": [], "name": "InvalidSqrtPriceLimitX96", "type": "error" }, { "inputs": [], "name": "InvalidSqrtPriceX96", "type": "error" }, { "inputs": [], "name": "Locked", "type": "error" }, { "inputs": [], "name": "MarginLessThanMin", "type": "error" }, { "inputs": [], "name": "PositionSafe", "type": "error" }, { "inputs": [], "name": "R", "type": "error" }, { "inputs": [], "name": "RewardsLessThanMin", "type": "error" }, { "inputs": [], "name": "SqrtPriceX96ExceedsLimit", "type": "error" }, { "inputs": [], "name": "T", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "marginAfter", "type": "uint256" } ], "name": "Adjust", "type": "event" }, { "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": "owner", "type": "address" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint128", "name": "liquidityDelta", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint128", "name": "amount0", "type": "uint128" }, { "indexed": false, "internalType": "uint128", "name": "amount1", "type": "uint128" } ], "name": "CollectProtocol", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" }, { "indexed": false, "internalType": "int24", "name": "tick", "type": "int24" } ], "name": "Initialize", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint128", "name": "liquidityAfter", "type": "uint128" }, { "indexed": false, "internalType": "uint160", "name": "sqrtPriceX96After", "type": "uint160" }, { "indexed": false, "internalType": "uint256", "name": "rewards", "type": "uint256" } ], "name": "Liquidate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint128", "name": "liquidityDelta", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidityAfter", "type": "uint128" }, { "indexed": false, "internalType": "uint160", "name": "sqrtPriceX96After", "type": "uint160" }, { "indexed": false, "internalType": "uint128", "name": "margin", "type": "uint128" } ], "name": "Open", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "oldFeeProtocol", "type": "uint8" }, { "indexed": false, "internalType": "uint8", "name": "newFeeProtocol", "type": "uint8" } ], "name": "SetFeeProtocol", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint128", "name": "liquidityAfter", "type": "uint128" }, { "indexed": false, "internalType": "uint160", "name": "sqrtPriceX96After", "type": "uint160" }, { "indexed": false, "internalType": "int256", "name": "amount0", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "amount1", "type": "int256" }, { "indexed": false, "internalType": "uint256", "name": "rewards", "type": "uint256" } ], "name": "Settle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "int256", "name": "amount0", "type": "int256" }, { "indexed": false, "internalType": "int256", "name": "amount1", "type": "int256" }, { "indexed": false, "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "int24", "name": "tick", "type": "int24" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint96", "name": "id", "type": "uint96" }, { "internalType": "int128", "name": "marginDelta", "type": "int128" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "adjust", "outputs": [ { "internalType": "uint256", "name": "margin0", "type": "uint256" }, { "internalType": "uint256", "name": "margin1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "burn", "outputs": [ { "internalType": "uint128", "name": "liquidityDelta", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "collectProtocol", "outputs": [ { "internalType": "uint128", "name": "amount0", "type": "uint128" }, { "internalType": "uint128", "name": "amount1", "type": "uint128" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fundingPeriod", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint96", "name": "id", "type": "uint96" } ], "name": "liquidate", "outputs": [ { "internalType": "uint256", "name": "rewards", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "liquidityLocked", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maintenance", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint128", "name": "liquidityDelta", "type": "uint128" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "bool", "name": "zeroForOne", "type": "bool" }, { "internalType": "uint128", "name": "liquidityDelta", "type": "uint128" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" }, { "internalType": "uint128", "name": "margin", "type": "uint128" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "open", "outputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "size", "type": "uint256" }, { "internalType": "uint256", "name": "debt", "type": "uint256" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "oracle", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "positions", "outputs": [ { "internalType": "uint128", "name": "size", "type": "uint128" }, { "internalType": "uint128", "name": "debt0", "type": "uint128" }, { "internalType": "uint128", "name": "debt1", "type": "uint128" }, { "internalType": "uint128", "name": "insurance0", "type": "uint128" }, { "internalType": "uint128", "name": "insurance1", "type": "uint128" }, { "internalType": "bool", "name": "zeroForOne", "type": "bool" }, { "internalType": "bool", "name": "liquidated", "type": "bool" }, { "internalType": "int24", "name": "tick", "type": "int24" }, { "internalType": "uint32", "name": "blockTimestamp", "type": "uint32" }, { "internalType": "int56", "name": "tickCumulativeDelta", "type": "int56" }, { "internalType": "uint128", "name": "margin", "type": "uint128" }, { "internalType": "uint128", "name": "liquidityLocked", "type": "uint128" }, { "internalType": "uint256", "name": "rewards", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "protocolFees", "outputs": [ { "internalType": "uint128", "name": "token0", "type": "uint128" }, { "internalType": "uint128", "name": "token1", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardPremium", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "secondsAgo", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "feeProtocol", "type": "uint8" } ], "name": "setFeeProtocol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint96", "name": "id", "type": "uint96" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "settle", "outputs": [ { "internalType": "int256", "name": "amount0", "type": "int256" }, { "internalType": "int256", "name": "amount1", "type": "int256" }, { "internalType": "uint256", "name": "rewards", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "state", "outputs": [ { "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" }, { "internalType": "uint96", "name": "totalPositions", "type": "uint96" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "int24", "name": "tick", "type": "int24" }, { "internalType": "uint32", "name": "blockTimestamp", "type": "uint32" }, { "internalType": "int56", "name": "tickCumulative", "type": "int56" }, { "internalType": "uint8", "name": "feeProtocol", "type": "uint8" }, { "internalType": "bool", "name": "initialized", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "bool", "name": "zeroForOne", "type": "bool" }, { "internalType": "int256", "name": "amountSpecified", "type": "int256" }, { "internalType": "uint160", "name": "sqrtPriceLimitX96", "type": "uint160" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swap", "outputs": [ { "internalType": "int256", "name": "amount0", "type": "int256" }, { "internalType": "int256", "name": "amount1", "type": "int256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tickCumulativeRateMax", "outputs": [ { "internalType": "uint24", "name": "", "type": "uint24" } ], "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": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
610120346200045657601f6001600160401b03601f1962005d5a38819003848101831686019190848311878410176200035a5780879260a094604052833981010312620004565762000051846200047b565b6020620000608187016200047b565b926200006f604088016200047b565b9460608801519762ffffff89168903620004565760806200009191016200047b565b966200009c6200045b565b601481527f4d617267696e616c205631204c5020546f6b656e00000000000000000000000085820152620000cf6200045b565b91600983526804d41524756312d4c560bc1b868401528151928484116200035a5760039384546001948582811c921680156200044b575b8a83101462000435578185849311620003df575b5089908583116001146200037c5760009262000370575b505060001982871b1c191690841b1784555b80519485116200035a5760049687548481811c911680156200034f575b828210146200033a57838111620002ef575b50809286116001146200028357508495509084929160009562000277575b50501b92600019911b1c19161790555b6002600a5560805260c05260e05261010091825260a0526040516158c99182620004918339608051828181610fe90152818161165a0152612d2f015260a05182818161227901526144b1015260c05182818161149601528181611b44015281816128a901528181612dcd0152818161336801528181613730015261439c015260e051828181610fa4015281816115e201528181611b1401528181612ab001528181612e08015281816134f7015261442d0152518181816102ab015281816105740152818161231a0152818161244f01526128460152f35b01519350388062000190565b939295859081168860005285600020956000905b89838310620002d45750505010620002b9575b50505050811b019055620001a0565b01519060f884600019921b161c1916905538808080620002aa565b85870151895590970196948501948893509081019062000297565b88600052816000208480890160051c820192848a1062000330575b0160051c019085905b8281106200032357505062000172565b6000815501859062000313565b925081926200030a565b602289634e487b7160e01b6000525260246000fd5b90607f169062000160565b634e487b7160e01b600052604160045260246000fd5b01519050388062000131565b908987941691886000528b6000209260005b8d828210620003c85750508411620003af575b505050811b01845562000143565b015160001983891b60f8161c19169055388080620003a1565b8385015186558a979095019493840193016200038e565b90915086600052896000208580850160051c8201928c86106200042b575b918891869594930160051c01915b8281106200041b5750506200011a565b600081558594508891016200040b565b92508192620003fd565b634e487b7160e01b600052602260045260246000fd5b91607f169162000106565b600080fd5b60408051919082016001600160401b038111838210176200035a57604052565b51906001600160a01b0382168203620004565756fe60a080604052600436101561001357600080fd5b60008091813560e01c90816306fdde031461378657508063095ea7b31461375f5780630dfe16811461371a578063128acb0814612edc57806318160ddd14612ebe5780631ad8b03b14612e8c5780631d76982814612ce757806323b872dd14612c2a578063313ce56714612c0e5780633950935114612bbe5780634003d58114612ba1578063426ccdea14612b83578063462278df146127b5578063514ea4bf146126ea57806357976fb4146126c35780635b1a9a271461235b578063633dd1451461233e5780636c376cc5146122fe57806370a08231146122c657806374d7c62b146122a85780637dc0d1d01461226357806392f026ad14611c6f57806395d89b4114611b6d5780639dc29fac14611846578063a457c2d7146117a4578063a9059cbb14611772578063b613a1411461160c578063bf25901d14611097578063c19d93fb14611018578063c45a015514610fd3578063d21220a714610f8e578063dd62ed3e14610f42578063ddca3f4314610f225763f6b9a6011461019857600080fd5b60c0366003190112610aa4576101ac613888565b906101b56138b9565b916001600160801b036044351660443503610aa4576101d26138c8565b92608435936001600160801b0385168503610f1e5760a4356001600160401b038111610f1a576102069036906004016138de565b9490936001600a5414610f08576001600a5587918896610224614613565b936001600160801b0360443516158015610eb6575b610ea4578615610e655784516001600160a01b039081169087169081109081610e56575b50155b610e44576001600160801b0360408601511660018060a01b038651166102a56001600160801b0361029360443585613cd8565b166001600160801b0360443516614c6c565b62ffffff7f000000000000000000000000000000000000000000000000000000000000000016620f4240019081620f424011610e3057906102e59161488a565b6102ee83615520565b906001600160fe1b0381168103610e3057610315916103109160021b90613d4e565b614c7f565b89610dfc57906002600160811b0361033c610332859489966139d9565b9360443590613cd8565b60011b1692610de857906103509291614ad3565b955b6401000276a387101580610dcb575b156109a7578715610db7576001600160a01b03908116908716105b610da55786956103a96103a46040516103948161399d565b6001815260203681830137614469565b613c8c565b516001600160801b036040880151169060018060a01b0388511690606089015160020b63ffffffff60808b01511660a08b01519160e06103e7614dbd565b9e8f90151560a082015201526101008d0152667fffffffffffff8160060b8360060b0313667fffffffffffff198260060b8460060b031217610d90578f6104c26001600160801b038e96818f6104c2896104cd8d859c6104d2958f9b6105049c61051c9f6104c29f60060b9060060b0360060b610120820152896044351661016082015289610481848d8760018060a01b038a16916151f4565b16905250610d6f576104a9916001600160a01b0316876104a36044358b613cd8565b16614ad3565b6104c76104c2846104ba848b613d4e565b60601b613d2e565b61470c565b96613d4e565b6147bb565b16978860808201526060838316910152166104ff60018060a01b0389168760601b60443560601b16613d2e565b613d4e565b936104ff6001600160a01b03871660443586166147bb565b168060408b01526001600160801b03821660208b015261271090816001600160801b038c511610928315610d5c575b508215610d51575b508115610d39575b8115610d22575b50610d10576001600160801b036105997f00000000000000000000000000000000000000000000000000000000000000008a61528f565b168015908115610cfd575b50610cec576001600160801b038b166101408901526409502f9000804811600014610ce75750485b620249f090818102918183041481151715610cd3576445d964b8000290808204621e84801490151715610cbf57620f424090043410610cad57346101808901526001600160801b036106266044358260408a015116613cd8565b1660408701526001600160a01b031685526007546001600160801b03610650604435828416613c5a565b16906001600160801b031916176007558515600014610aa8575061067d6001600160801b03875116615269565b90610691826001600160801b038c166139d9565b978b61069b614381565b92333b15610aa45781908b6106d7604051958693849363010f40c760e51b85526004850152856024850152606060448501526064840191613d0d565b038183335af1918215610a97578a92610a7c575b50506106f6916139d9565b6106fe614381565b10610a6a5760ff60c08501511680610a26575b506107336001600160801b0360408601511660018060a01b0386511690614b68565b91838112918280610a14575b610a025784926109ea5790610753916139d9565b925b6109d6575061076d6104c26103106107849385614c6c565b91606083901b600160601b600160e01b0316613d2e565b906401000276a3821015806109b9575b156109a7576001600160801b031660408401526001600160a01b03168083526107bc90613d5b565b60020b60608301525b6001600160601b03602083015116966001600160801b0385511693600014610990576108016001600160801b03602087015116955b8984614f36565b6001600160601b036020840151166001600160601b03811461097c57608089936001600160801b03809897969460a09d60017f89bcac1da4b278a0db5d1d3519fe8a1da3da85526eb45ea0fec4194867d0146d96016001600160601b03811660208901528f600180911b0388511680926005549260a06001600160601b03901b9060a01b169216171760055560e083604089015116976108a089613cf1565b606081015160065463ffffffff60981b8984015160981b169060a084015160b81b66ffffffffffffff60b81b169262ffffff8b1b908b1b16906001600160701b038b1b191617171760065561091260ff60c0830151166006549060ff60f01b9060f01b169060ff60f01b191617600655565b0151600680546001600160f81b031691151560f81b6001600160f81b03191691909117905560408051338152602081019890985287015216606085015260001960018d1b011692a36002600a55604051958652602086015216604084015260608301526080820152f35b634e487b7160e01b8a52601160045260248afd5b6108016001600160801b03604087015116956107fa565b6040516312c2cab560e11b8152600490fd5b5073fffd8963efd1fc6a506488495d951d5263988d268210610794565b634e487b7160e01b81526011600452602490fd5b6109f66109fc92614775565b90613d4e565b92610755565b6040516315f919ff60e11b8152600490fd5b5080610a1f83614775565b101561073f565b610a33610a3a9183613d2e565b8092613d4e565b906001600160801b03610a54816008549316828416613c5a565b16906001600160801b0319161760085538610711565b6040516314e6bc3960e21b8152600490fd5b610a87919250613921565b610a9357878b386106eb565b8a80fd5b50604051903d90823e3d90fd5b5080fd5b969750610abe6001600160801b03875116615269565b90610ad2826001600160801b038c166139d9565b988b610adc614412565b92333b15610aa45781908c610b18604051958693849363010f40c760e51b85528660048601526024850152606060448501526064840191613d0d565b038183335af1918215610a97578b92610c96575b5050610b37916139d9565b610b3f614412565b10610c845760ff60c08501511680610c49575b50610b746001600160801b0360408601511660018060a01b0386511690614b68565b9092808312908180610c37575b610c2557806109d65750610310610bb29361076d936104c29315600014610c145790610bac916139d9565b85614c6c565b906401000276a382101580610bf7575b156109a7576001600160801b031660408401526001600160a01b0316808352610bea90613d5b565b60020b60608301526107c5565b5073fffd8963efd1fc6a506488495d951d5263988d268210610bc2565b6109f6610c2092614775565b610bac565b604051631c6656d960e21b8152600490fd5b5082610c4285614775565b1015610b81565b610a33610c569183613d2e565b906001600160801b0360085491610c7482801992168460801c613c5a565b60801b1691161760085538610b52565b604051631eaaddbf60e21b8152600490fd5b610ca1919250613921565b610a9357888b38610b2c565b604051630c7cef8f60e31b8152600490fd5b634e487b7160e01b85526011600452602485fd5b634e487b7160e01b86526011600452602486fd5b6105cc565b604051626f995960e41b8152600490fd5b90506001600160801b038c1610386105a4565b60405163673f032f60e11b8152600490fd5b90506001600160801b0360808a0151161038610562565b8091506001600160801b0360608b015116109061055b565b819250109038610553565b6001600160801b0316821192503861054b565b50610d8b906001600160a01b031683876104a36044358b613cd8565b6104a9565b50634e487b7160e01b8f52601160045260248ffd5b60405163168ee7dd60e31b8152600490fd5b6001600160a01b039081169087161161037c565b5073fffd8963efd1fc6a506488495d951d5263988d268710610361565b634e487b7160e01b8e52601160045260248efd5b94610e24610e2a93966002600160811b03610e196044358a613cd8565b60011b1692976139d9565b91614ad3565b95610352565b634e487b7160e01b8f52601160045260248ffd5b604051638582dc3d60e01b8152600490fd5b6401000276a39150113861025d565b84516001600160a01b039081169087169081119081610e86575b5015610260565b73fffd8963efd1fc6a506488495d951d5263988d2691501038610e7f565b604051633145587f60e01b8152600490fd5b506001600160801b0361271081604435160111610ef4576001600160801b036040860151166001600160801b03612710816044351601161015610239565b634e487b7160e01b83526011600452602483fd5b6040516303cb96db60e21b8152600490fd5b8680fd5b8380fd5b8234610f3f5780600319360112610f3f5760206040516103e88152f35b80fd5b5034610aa4576040366003190112610aa457604090602092610f62613888565b83610f6b6138a3565b6001600160a01b0392831684526001875292209116825283522054604051908152f35b8234610f3f5780600319360112610f3f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b8234610f3f5780600319360112610f3f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b8234610f3f5780600319360112610f3f576101006005546006546040519160018060a01b038116835260a01c60208301526001600160801b03811660408301528060801c60020b606083015263ffffffff8160981c1660808301528060b81c60060b60a083015260ff8160f01c1660c083015260f81c151560e0820152f35b8234610f3f576060366003190112610f3f576110b1613888565b6110b961390b565b916044356001600160401b038111610aa4576110d99036906004016138de565b926001600a5414610f08576001600a55826080526110f5614613565b946111008133614e1e565b6001600160801b0381511615610d1057611146906111266103a46040516103948161399d565b519063ffffffff60808a0151169160060b9160a08a015160060b91615086565b936001600160801b03610160860151166001600160801b0361116d60075492828416613cd8565b16906001600160801b031916176007556111868561539e565b9490966101808701519561119a878761582f565b8960a0890151156000146114c1579088999189979899516001600160801b03166101408901516001600160801b03166111d2916139d9565b6111db90614775565b91826080528960408a01516001600160801b03169c8d92898612966001600160801b03966112519461125e99611487575b505061124b604087019561124589885116958a61014061123b60018060a01b03809d5116978385511690613d4e565b9201511690613d4e565b936146f0565b92614ba0565b9316905281168b52613d5b565b60020b60608a015261126e614412565b91333b15610f1e5761129b918491604051938492839263512727bd60e11b84528d60805160048601614786565b038183335af1801561147c5788918491611465575b50506112bb916139d9565b6112c3614412565b10610c845760609661132c6001600160601b03945b6112e0614dbd565b9060a0810151151560a083015260c0810151151560c083015260e081015160020b60e083015261010063ffffffff8183015116908301526101208091015160060b908201528433614f36565b60018060a01b03808251169283600554918760a01b602086015160a01b169216171760055560e06001600160801b036040840151169261136b84613cf1565b8a81015160065463ffffffff60981b608084015160981b169060a084015160b81b66ffffffffffffff60b81b169262ffffff60801b9060801b16906001600160701b0360801b19161717176006556113e060ff60c0830151166006549060ff60f01b9060f01b169060ff60f01b191617600655565b015115156006549060ff60f81b9060f81b169060018060f81b0316176006556040519516855260208501526040840152608051868401528460808401528360a084015216907f7fde555340816f34d18fff6958410123881fba3c912007f90d0260ff5f7e829860c03392a36002600a5560405191608051835260208301526040820152f35b611470919250613921565b610aa45786828a6112b0565b6040513d85823e3d90fd5b6114936114ba92614775565b907f00000000000000000000000000000000000000000000000000000000000000006155d7565b388e61120c565b6001600160801b039061153f928260208c9a9b9c0151166080526112516114fc6114f78b866101408183511692015116906139d9565b614775565b9c8d8981126115d3575b506040840192858451169161124b8d8861014061123b61153460018060a01b03809c511696608051906146f0565b968385511690613d4e565b60020b60608a015261154f614381565b91333b15610f1e5761157c918491604051938492839263512727bd60e11b84528d60805160048601614786565b038183335af1801561147c579083916115bf575b505060805161159e916139d9565b6115a6614381565b10610a6a5760609661132c6001600160601b03946112d8565b6115c890613921565b610aa4578189611590565b6115df61160691614775565b8d7f00000000000000000000000000000000000000000000000000000000000000006155d7565b8d611506565b8234610f3f576020366003190112610f3f5760043560ff81169081810361176e576001600a5414610f08576001600a55604051638da5cb5b60e01b81526001600160a01b03906020816004817f000000000000000000000000000000000000000000000000000000000000000086165afa908115611763578591611735575b50163303611724578115801561170d575b156116fb577f7a8f5b6a3fe6312faf94330e829a331301dbd2ce6947e915be63bf67b473ed5f60406006549381519060ff8660f01c1682526020820152a160ff60f01b1990911660f09190911b60ff60f01b16176006556002600a5580f35b6040516301f0799b60e31b8152600490fd5b506004821015801561169c5750600a82111561169c565b6040516282b42960e81b8152600490fd5b611756915060203d811161175c575b61174e81836139b8565b810190614b49565b8561168b565b503d611744565b6040513d87823e3d90fd5b8280fd5b8234610f3f576040366003190112610f3f5761179961178f613888565b60243590336139fc565b602060405160018152f35b5034610aa4576040366003190112610aa45760406117c0613888565b91816024359433815260016020522060018060a01b03841682526020522054918083106117f35761179992039033613b58565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b8234610f3f576040366003190112610f3f57611860613888565b90602435916001600a5414610f08576118a9906001600a55611880614613565b906002549060408301916001600160801b0394859188836104a381885116826007541690613c5a565b1694848351168611610ea45783516001600160a01b039460e09161191f906118d39088168a614b68565b989097816118e48c828b5116613cd8565b16885288611b3d575b89611b0d575b83511696600554602098876001600160601b0360a01b8b88015160a01b16921617176005555116613cf1565b606081015160065463ffffffff60981b608084015160981b169060a084015160b81b66ffffffffffffff60b81b169262ffffff60801b9060801b16906001600160701b0360801b191617171760065561199560ff60c0830151166006549060ff60f01b9060f01b169060ff60f01b191617600655565b0151600680546001600160f81b031691151560f81b6001600160f81b0319169190911790553315611abe57338152808352604081205496808810611a6e57806060983384528386520360408320558060025403600255604051908152600080516020615874833981519152843392a3604080516001600160a01b039290921682526001600160801b038616602083015281018390526060810184905233907f39f142b439851b17eca4e40ba0dce1431af85e536a869a8585bc2298fdb8b77490608090a26002600a556040519384528301526040820152f35b60405162461bcd60e51b815260048101859052602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608490fd5b60405162461bcd60e51b815260048101849052602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608490fd5b611b388a887f00000000000000000000000000000000000000000000000000000000000000006155d7565b6118f3565b611b6889887f00000000000000000000000000000000000000000000000000000000000000006155d7565b6118ed565b8234610f3f5780600319360112610f3f576040518160045490600182811c91818416938415611c65575b6020948585108114611c5157848752908115611c2f5750600114611bd6575b611bd285611bc6818903826139b8565b6040519182918261383f565b0390f35b929450600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410611c1c5750505081611bd293611bc6928201019385611bb6565b8054858501870152928501928101611bff565b60ff191686860152505050151560051b8201019150611bc681611bd285611bb6565b634e487b7160e01b83526022600452602483fd5b92607f1692611b97565b5034610aa4576060366003190112610aa457611c89613888565b6001600160801b036024351660243503610aa4576044356001600160401b038111610f1e57611cbc9036906004016138de565b926001600a5414610f08576001600a55600254928315612109575b611cdf614613565b92846120fb576001600160801b036127105b166001600160801b03602435161115610ea4578351611d1b906001600160a01b0316602435614b68565b9590946001860186116120e7576001870187116120e757611d616001600160801b03604083015116611d5c602435916001600160801b036007541690613c5a565b613c5a565b826120b6576001600160801b0316925b83986001600160801b03611d8d60243582604087015116613c5a565b1660408401528a611d9c614381565b91611da5614412565b93333b1561176e57604051632aa35ecb60e01b815260018c810160048301528d0160248201526060604482015291839183918291611de7916064840191613d0d565b038183335af180156120ab57612097575b5050611e089060018901906139d9565b611e10614381565b10610a6a57611e239060018901906139d9565b611e2b614412565b10610c845760e09060018060a01b038151166005549060209b6001600160601b0360a01b8d85015160a01b1692161717600555611e746001600160801b03604083015116613cf1565b606081015160065463ffffffff60981b608084015160981b169060a084015160b81b66ffffffffffffff60b81b169262ffffff60801b9060801b16906001600160701b0360801b1916171717600655611eea60ff60c0830151166006549060ff60f01b9060f01b169060ff60f01b191617600655565b0151600680546001600160f81b031691151560f81b6001600160f81b03191691909117905515612014575b506001600160a01b0316908115611fcf576001939282606097938693611f3d896002546139d9565b60025581815280865260408120898154019055600080516020615874833981519152866040518b8152a3604080513381526024356001600160801b031660208201528484019181019190915285840160608201527f011d4be6213866bff035f68967364cf69c5c01ff5bc23ff0a275f08a04381e6a90608090a26002600a556040519586520190840152016040820152f35b60405162461bcd60e51b815260048101879052601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b90945061270f19810190811161208357933015611fcf576002546127109081810180911161206f576002553083528287526040832081815401905560405190815282600080516020615874833981519152883093a338611f15565b634e487b7160e01b84526011600452602484fd5b634e487b7160e01b82526011600452602482fd5b6120a090613921565b610a93578a38611df8565b6040513d84823e3d90fd5b6001600160801b036120ce6120e19260243590613cd8565b166001600160801b036024351684614ad3565b92611d71565b634e487b7160e01b89526011600452602489fd5b6001600160801b0387611cf1565b7f98636036cb66a9c19a37435efc1e90142190214e8abeb821bdba3f2990dd4c956040805161213781613982565b60028152813660208301378861218661215d61a8c0938461215782613c8c565b52614469565b9261216784613c8c565b5193612177600695860b91613caf565b51850b03840b0560020b614010565b9161219083613d5b565b600160e08651956121a08761394a565b828060a01b03169586815285602082015285888201528360020b9586606083015263ffffffff421660808301528060a083015260c08201520152838c60055416176005556121ed8c613cf1565b81544260981b63ffffffff60981b166dffffffffffffffffffffffffffff60801b1990911660809290921b62ffffff60801b16919091171781556006805460ff60f01b191660f08d901b60ff60f01b1617905580546001600160f81b0316600160f81b17905582519182526020820152a1611cd7565b8234610f3f5780600319360112610f3f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b8234610f3f5780600319360112610f3f57602060405162093a808152f35b8234610f3f576020366003190112610f3f576020906040906001600160a01b036122ee613888565b1681528083522054604051908152f35b8234610f3f5780600319360112610f3f57602060405162ffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8234610f3f5780600319360112610f3f57602060405161a8c08152f35b509034610f3f576060366003190112610f3f57612376613888565b9161237f6138a3565b906001600160601b036044351660443503610f3f57506001600a5414610f08576001600a556123ac614613565b926123b960443583614e1e565b926001600160801b0384511615610d105761247561244c604051956123dd87613982565b6002875260403660208901376124256123fd61a8c0988961215782613c8c565b9761240789613c8c565b5160060b6124148a613caf565b5160060b0360060b0560020b614010565b9663ffffffff60808a01511661244260a08b015160060b92613caf565b5160060b92615086565b947f0000000000000000000000000000000000000000000000000000000000000000908661544f565b6126b1576020946001600160801b03610160860151166001600160801b036124a260075492828416613cd8565b16906001600160801b031916176007556124fc6001600160801b036124e46124c98861539e565b604086015186519192916001600160a01b0316908516614ba0565b6001600160a01b031680855291166040840152613d5b565b60020b606082015261256961018086015195612518878661582f565b612520614dbd565b9060a0810151151560a0830152600160c083015260e081015160020b60e083015261010063ffffffff8183015116908301526101208091015160060b9082015260443586614f36565b60018060a01b038151169182600554916001600160601b0360a01b8985015160a01b169216171760055560e06001600160801b03604083015116916125ad83613cf1565b606081015160065463ffffffff60981b608084015160981b169060a084015160b81b66ffffffffffffff60b81b169262ffffff60801b9060801b16906001600160701b0360801b191617171760065561262360ff60c0830151166006549060ff60f01b9060f01b169060ff60f01b191617600655565b0151600680546001600160f81b031691151560f81b6001600160f81b031916919091179055604080516001600160a01b03948516815287810192909252810191909152606081018490526044356001600160601b031692909116907fe79231b2121f3b0a34317face6f7754ddee5144ce7d0700b3bb67f796a5d776090608090a36002600a55604051908152f35b60405163ac1724fb60e01b8152600490fd5b8234610f3f5780600319360112610f3f5760206001600160801b0360075416604051908152f35b8234610f3f576020366003190112610f3f5760406101a091600435815260096020522080546001820154916002810154916004600383015492015492604051946001600160801b0392838116875260801c6020870152828116604087015260801c6060860152818116608086015260ff8160801c16151560a086015260ff8160881c16151560c08601528060901c60020b60e086015263ffffffff8160a81c1661010086015260c81d60060b610120850152811661014084015260801c610160830152610180820152f35b8234610f3f576080366003190112610f3f576127cf613888565b6127d761390b565b906044359081600f0b809203610f1e576064356001600160401b038111612b7f576128069036906004016138de565b9490936001600a5414610f08576001600a55818094612823614613565b9361282e8433614e1e565b986001600160801b0392838b511615610d105761286b7f00000000000000000000000000000000000000000000000000000000000000008c61528f565b926101408c01938561288084828851166146f0565b911613610cec5760a08c0151612a95575061289e90848451166146f0565b986128cd84845116897f00000000000000000000000000000000000000000000000000000000000000006155d7565b6128d5614381565b91333b15612a915785908b61291160405194859384936317c713f760e21b85526004850152856024850152606060448501526064840191613d0d565b038183335af18015611763578a918691612a7a575b5050612931916139d9565b612939614381565b10610a6a5760e06001600160601b039561296460409b856129598d61470c565b1685525b8733614f36565b60018060a01b039485825116600554918960a01b602085015160a01b1692161717600555612996848c83015116613cf1565b606081015160065463ffffffff60981b608084015160981b169060a084015160b81b66ffffffffffffff60b81b169262ffffff60801b9060801b16906001600160701b0360801b1916171717600655612a0c60ff60c0830151166006549060ff60f01b9060f01b169060ff60f01b191617600655565b0151600680546001600160f81b031691151560f81b6001600160f81b031916919091179055518851959092168552166020840152169033907fa703a2c22bbc13b44c069d15db2894529fae4779b607bcd82003e78c7aaf6c19908690a36002600a5582519182526020820152f35b612a85919250613921565b610f1e5788848c612926565b8580fd5b999850612aa590848451166146f0565b97612ad484845116897f00000000000000000000000000000000000000000000000000000000000000006155d7565b612adc614412565b91333b15612a915785908a612b1860405194859384936317c713f760e21b85528660048601526024850152606060448501526064840191613d0d565b038183335af180156117635789918691612b68575b5050612b38916139d9565b612b40614412565b10610c845760e06001600160601b039561296460409b85612b608c61470c565b16855261295d565b612b73919250613921565b610f1e5787848c612b2d565b8480fd5b8234610f3f5780600319360112610f3f576020604051621e84808152f35b8234610f3f5780600319360112610f3f5760206040516103988152f35b5034610aa4576040366003190112610aa45790612c07611799926040612be2613888565b9333815260016020522060018060a01b038416825260205260406024359120546139d9565b9033613b58565b8234610f3f5780600319360112610f3f57602060405160128152f35b509034610f3f576060366003190112610f3f57612c45613888565b916040612c506138a3565b6001600160a01b0385168452600160208181529483902033855290945291205492604435928401612c86575b61179993506139fc565b828410612ca257612c9d8361179995033383613b58565b612c7c565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b8234610f3f576020366003190112610f3f57612d01613888565b6001600a5414610f08576001600a55604051638da5cb5b60e01b81526001600160a01b0392906020816004817f000000000000000000000000000000000000000000000000000000000000000088165afa918215612e8057908492612e62575b5016330361172457600854917f596b573906218d3411850b26a6b437d6c4522fdb43d2d2386263f86d50b8b15160606001600160801b0392612da4848716613cbf565b946001612db38860801c613cbf565b976001600160801b0319161760085584861694612df186837f00000000000000000000000000000000000000000000000000000000000000006155d7565b600880548216600160801b1790558716612e2c81837f00000000000000000000000000000000000000000000000000000000000000006155d7565b60405195338752602087015260408601521692a26002600a55604080516001600160801b03928316815292909116602083015290f35b612e7a915060203d811161175c5761174e81836139b8565b84612d61565b604051903d90823e3d90fd5b8234610f3f5780600319360112610f3f57600854604080516001600160801b038316815260809290921c602083015290f35b8234610f3f5780600319360112610f3f576020600254604051908152f35b509034610aa45760a0366003190112610aa457612ef7613888565b91612f006138b9565b9160443593612f0d6138c8565b936084356001600160401b038111612b7f57612f2d9036906004016138de565b6001600a9692965414610f08576001600a55612f47614613565b9288156137085780156136c95783516001600160a01b0390811690891690811090816136ba575b50155b610e44578289139788156136b4576103e88a026103e7198b820401610cbf57620f4240612f9f91048b6147a2565b6040860151865190916001600160a01b03909116906001600160801b038316878213156135d8578561357957612ff093506001600160a01b03821161357057612fea9160601b613d2e565b906139d9565b6401000276a381101580613553575b156109a7576001600160a01b0316908215613543576001600160a01b031681105b610da557604085015185516001600160a01b0316906001600160801b0381169061306d9060601b600160601b600160e01b0316613067846130618784613d2e565b92613d2e565b906147a2565b928281101561352657613099926114f792916001600160a01b039161309291906151db565b16906147bb565b935b8482931560001461339757505050829088156000146133915750885b8998878b12613359575b1561334c576130da916130d391613d4e565b80936146f0565b956130e3614412565b91333b15610f1a57604051633a69946960e11b81529187918391829161310e918c8f60048601614786565b038183335af180156133415790869161332d575b5050858015918215613313575b5050610c84576001600160801b0361318560409861319c9360ff60c08701511680151560001461330a5761316291613d2e565b905b816132e6575b838b870151169161124b60018060a01b03885116918b6147a2565b9116838901526001600160a01b0381168352613d5b565b60020b60608201525b60018060a01b038151169283600554916001600160601b0360a01b602085015160a01b16921617176005556001600160801b0386820151166131e681613cf1565b60608201516006805460808086015160a087015160c08801516effffffffffffffffffffffffffffff60801b199094169286901b62ffffff60801b169290921760989190911b63ffffffff60981b161766ffffffffffffff60b81b60b89290921b919091161760f09190911b60ff60f01b161790559160e00151600680546001600160f81b031691151560f81b6001600160f81b03191691909117905586518681526020810186905280880194909452606084015260020b60808301526001600160a01b03169033907fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca679060a090a36002600a5582519182526020820152f35b6008548480196132fb8286168460801c613c5a565b60801b1691161760085561316a565b50508690613164565b61331d92506139d9565b613325614412565b10853861312f565b61333690613921565b612b7f578438613122565b6040513d88823e3d90fd5b506130d36130da916155ba565b61338c6133658c614775565b887f00000000000000000000000000000000000000000000000000000000000000006155d7565b6130c1565b986130b7565b98999891945091508390886135205750895b8a98838c126134e8575b156134db576133cc916133c591613d4e565b80946146f0565b976133d5614381565b92333b1561176e57604051633a69946960e11b815291839183918291613400918f8f60048601614786565b038183335af180156120ab576134c7575b50508680159182156134ad575b5050610a6a576001600160801b036131856040986134789360ff60c0870151168015156000146134a55761345191613d2e565b80613485575b838b870151169061347260018060a01b03885116918c6147a2565b91614ba0565b60020b60608201526131a5565b60085484613497818416828416613c5a565b169085191617600855613457565b505086613451565b6134b792506139d9565b6134bf614381565b10863861341e565b6134d391929650613921565b933880613411565b506133c56133cc916155ba565b61351b6134f48d614775565b897f00000000000000000000000000000000000000000000000000000000000000006155d7565b6133b3565b996133a9565b61353d926001600160a01b039161309291906151db565b9361309b565b6001600160a01b03168111613020565b5073fffd8963efd1fc6a506488495d951d5263988d268110612fff565b612fea91614800565b506135c69261359890839060601b600160601b600160e01b0316613d2e565b90826001600160601b0382116135cb57816135ba6135c0926109f69594614c6c565b926139d9565b90613d2e565b612ff0565b610e24826109f6946139d9565b9092908561366157506135fb90829060601b600160601b600160e01b0316613d2e565b61360483614775565b811115610a025782826001600160601b036136216135c696614775565b1161364857612fea926109f66136426135c09361363d86614775565b614c6c565b93614775565b610e24612fea936109f661365b85614775565b94614775565b92905061366e82846147bb565b61367782614775565b1015610c25576135c6926001600160a01b0361369283614775565b116136a3576104ba6109f692614775565b6136af6109f692614775565b614800565b89612f9f565b6401000276a391501138612f6e565b83516001600160a01b0390811690891690811190816136ea575b5015612f71565b73fffd8963efd1fc6a506488495d951d5263988d26915010386136e3565b604051638713cd5760e01b8152600490fd5b5034610f3f5780600319360112610f3f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5034610f3f576040366003190112610f3f5761179961377c613888565b6024359033613b58565b905034610aa45781600319360112610aa4578160035490600182811c91818416938415613835575b6020948585108114611c5157848752908115611c2f57506001146137dc57611bd285611bc6818903826139b8565b929450600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8284106138225750505081611bd293611bc6928201019385611bb6565b8054858501870152928501928101613805565b92607f16926137ae565b6020808252825181830181905290939260005b82811061387457505060409293506000838284010152601f8019910116010190565b818101860151848201604001528501613852565b600435906001600160a01b038216820361389e57565b600080fd5b602435906001600160a01b038216820361389e57565b60243590811515820361389e57565b606435906001600160a01b038216820361389e57565b9181601f8401121561389e578235916001600160401b03831161389e576020838186019501011161389e57565b602435906001600160601b038216820361389e57565b6001600160401b03811161393457604052565b634e487b7160e01b600052604160045260246000fd5b61010081019081106001600160401b0382111761393457604052565b6101a081019081106001600160401b0382111761393457604052565b606081019081106001600160401b0382111761393457604052565b604081019081106001600160401b0382111761393457604052565b90601f801991011681019081106001600160401b0382111761393457604052565b919082018092116139e657565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03908116918215613b055716918215613ab457600082815280602052604081205491808310613a605760408282600080516020615874833981519152958760209652828652038282205586815220818154019055604051908152a3565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b6001600160a01b03908116918215613c095716918215613bb95760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260018252604060002085600052825280604060002055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b9190916001600160801b03808094169116019182116139e657565b6001600160401b0381116139345760051b60200190565b805115613c995760200190565b634e487b7160e01b600052603260045260246000fd5b805160011015613c995760400190565b6001600160801b0390811660001901919082116139e657565b6001600160801b0391821690821603919082116139e657565b6001600160801b03166001600160801b03196006541617600655565b908060209392818452848401376000828201840152601f01601f1916010190565b8115613d38570490565b634e487b7160e01b600052601260045260246000fd5b919082039182116139e657565b6001600160a01b03818116916401000276a383101580613ff3575b15613fe157640100000000600160c01b039060201b16806001600160801b03811160071b9181831c926001600160401b03841160061b93841c9363ffffffff851160051b94851c9461ffff861160041b95861c60ff9687821160031b91821c92600f841160021b93841c94600160038711811b96871c119617171717171717916080831015600014613fd55750607e1982011c5b8002607f928392828493841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c80029081881c82881c1c80029283891c84891c1c800294858a1c868a1c1c800296878b1c888b1c1c800298898c1c8a8c1c1c80029a8b8d1c8c821c1c8002809d1c8d821c1c8002809e81901c90821c1c80029e8f80911c911c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c670100000000000000169760c61c670200000000000000169660c51c670400000000000000169560c41c670800000000000000169460c31c671000000000000000169360c21c672000000000000000169260c11c674000000000000000169160c01c6780000000000000001690607f190160401b1717171717171717171717171717693627a301d71055774c8502906f028f6481ab7f045a5af012a19d003aa919820160801d60020b916fdb2df09e81959a81455e260799a0632f0160801d60020b92600091848414600014613fbb5750505090505b90565b613fc485614010565b16119050613fd0575090565b905090565b905081607f031b613e0a565b6040516324c070df60e11b8152600490fd5b5073fffd8963efd1fc6a506488495d951d5263988d268310613d76565b60020b600081121561437b5780600003905b620d89e88211614369576001821615614357576001600160881b036ffffcb933bd6fad37aa2d162d1a5940015b16916002811661433b575b6004811661431f575b60088116614303575b601081166142e7575b602081166142cb575b604081166142af575b608090818116614294575b6101008116614279575b610200811661425e575b6104008116614243575b6108008116614228575b611000811661420d575b61200081166141f2575b61400081166141d7575b61800081166141bc575b6201000081166141a1575b620200008116614187575b62040000811661416d575b6208000016614152575b50600012614143575b63ffffffff811661413b576000905b60201c60ff91909116016001600160a01b031690565b600190614125565b8015613d385760001904614116565b6b048a170391f7dc42444e8fa26000929302901c919061410d565b6d2216e584f5fa1ea926041bedfe98909302811c92614103565b926e5d6af8dedb81196699c329225ee60402811c926140f8565b926f09aa508b5b7a84e1c677de54f3e99bc902811c926140ed565b926f31be135f97d08fd981231505542fcfa602811c926140e2565b926f70d869a156d2a1b890bb3df62baf32f702811c926140d8565b926fa9f746462d870fdf8a65dc1f90e061e502811c926140ce565b926fd097f3bdfd2022b8845ad8f792aa582502811c926140c4565b926fe7159475a2c29b7443b29c7fa6e889d902811c926140ba565b926ff3392b0822b70005940c7a398e4b70f302811c926140b0565b926ff987a7253ac413176f2b074cf7815e5402811c926140a6565b926ffcbe86c7900a88aedcffc83b479aa3a402811c9261409c565b926ffe5dee046a99a2a811c461f1969c305302811c92614092565b916fff2ea16466c96a3843ec78b326b528610260801c91614087565b916fff973b41fa98c081472e6896dfb254c00260801c9161407e565b916fffcb9843d60f6159c9db58835c9266440260801c91614075565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c9161406c565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91614063565b916ffff97272373d413259a46990580e213a0260801c9161405a565b6001600160881b03600160801b61404f565b6040516315e4079d60e11b8152600490fd5b80614022565b6040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115614406576000916143d8575090565b906020823d82116143fe575b816143f1602093836139b8565b81010312610f3f57505190565b3d91506143e4565b6040513d6000823e3d90fd5b6040516370a0823160e01b81523060048201526020816024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115614406576000916143d8575090565b60405163883bdbfd60e01b8152602060048201819052825160248301819052604483019382019060005b8181106145f957506001600160a01b039460009250849150819003817f000000000000000000000000000000000000000000000000000000000000000087165afa928315614406576000936144e9575b50505090565b9091923d8082863e6144fb81866139b8565b840191604085840312610aa45784516001600160401b0390818111610f1e5786019584601f88011215610f1e5786519661453488613c75565b97614542604051998a6139b8565b80895287808a019160051b83010191878311610f1a578801905b8282106145dc5750505085810151918211610f1e57019183601f84011215610f3f57825192858061458c86613c75565b61459960405191826139b8565b868152019460051b820101948511610aa4578501925b8484106145c4575050505050503880806144e3565b8351838116810361176e5781529285019285016145af565b81518060060b81036145f557815290880190880161455c565b8780fd5b825163ffffffff1686529483019491830191600101614493565b60405161461f8161394a565b60e06000918281528260208201528260408201528260608201528260808201528260a08201528260c082015201526040516146598161394a565b60055460018060a01b038116825260a01c60208201526006546001600160801b03811660408301528060801c60020b80606084015263ffffffff91828160981c169260808501928484528260b81c60060b9160a087019383855260ff8160f01c1660c089015260f81c151560e08801528042169586031680156146e75760060b0260060b0160060b90525290565b50505050505090565b919091600083820193841291129080158216911516176139e657565b6001600160801b0390818111614720571690565b60405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608490fd5b600160ff1b81146139e65760000390565b613fb89492606092825260208201528160408201520191613d0d565b818103929160001380158285131691841216176139e657565b60001982820990828102928380841093039280840393146147f757600160601b918383111561389e570990828211900360a01b910360601c1790565b50505060601c90565b90600160601b90600019828409928060601b9283808610950394808603951461487d578483111561389e578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b505090613fb89250613d2e565b90620f424090600019828409928281029283808610950394808603951461487d578483111561389e578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b60001982820990828102928380841093039280840393146149465768010000000000000000918383111561389e570990828211900360c01b910360401c1790565b50505060401c90565b600019828209908281029283808410930392808403931461498b57600160801b918383111561389e570990828211900360801b910360801c1790565b50505060801c90565b60001982820990828102928380841093039280840393146149d057600160c01b918383111561389e570990828211900360401b910360c01c1790565b50505060c01c90565b90600160801b90600019828409928060801b9283808610950394808603951461487d578483111561389e578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b90600160c01b90600019828409928060c01b9283808610950394808603951461487d578483111561389e578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b91600019828409928281029283808610950394808603951461487d578483111561389e578291096001821901821680920460028082600302188083028203028083028203028083028203028083028203028083028203028092029003029360018380600003040190848311900302920304170290565b9081602091031261389e57516001600160a01b038116810361389e5790565b9190613fb8906001600160a01b03166001600160801b03614b9982606087901b600160601b600160e01b0316613d2e565b94166147bb565b90614baa91614b68565b9190600082128080614c5a575b610a025760008512948580614c48575b610c2557614bf99461076d946104c29461031094614c365790614be9916139d9565b965b610c145790610bac916139d9565b6401000276a381101580614c19575b156109a75760018060a01b03169091565b5073fffd8963efd1fc6a506488495d951d5263988d268110614c08565b6109f6614c4292614775565b96614beb565b5084614c5382614775565b1015614bc7565b5081614c6584614775565b1015614bb7565b818102929181159184041417156139e657565b8015614db757614d4a816000908360801c80614dab575b508060401c80614d9e575b508060201c80614d91575b508060101c80614d84575b508060081c80614d77575b508060041c80614d6a575b508060021c80614d5d575b50600191828092811c614d56575b1c1b614cf28185613d2e565b01811c614cff8185613d2e565b01811c614d0c8185613d2e565b01811c614d198185613d2e565b01811c614d268185613d2e565b01811c614d338185613d2e565b01811c614d408185613d2e565b01901c8092613d2e565b80821015613fd0575090565b0181614ce6565b6002915091019038614cd8565b6004915091019038614ccd565b6008915091019038614cc2565b6010915091019038614cb7565b6020915091019038614cac565b6040915091019038614ca1565b91505060809038614c96565b50600090565b60405190614dca82613966565b816101806000918281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201528261012082015282610140820152826101608201520152565b90614e77614e6991614e2e614dbd565b5060405192839160208301958690916020926001600160601b03199060601b1682526001600160601b0360a01b9060a01b1660148201520190565b03601f1981018352826139b8565b51902060005260096020526040600020600460405191614e9683613966565b80546001600160801b0390818116855260801c60208501526001820154818116604086015260801c60608501526002820154818116608086015260ff8160801c16151560a086015260ff8160881c16151560c08601528060901c60020b60e086015263ffffffff8160a81c1661010086015260c81d60060b610120850152600382015490811661014085015260801c610160840152015461018082015290565b6040805160609290921b6bffffffffffffffffffffffff19166020830190815260a09390931b6001600160a01b0319166034830152614f789082908101614e69565b519020600090815260096020908152604091829020835191840151608090811b6fffffffffffffffffffffffffffffffff199081166001600160801b03948516178355938501516060860151908416911b8416176001820155926004926101809261507f91908060808501511660ff60801b60a0860151151560801b169060ff60881b60c0870151151560881b1660e087015160901b9063ffffffff60a81b61010089015160a81b169266ffffffffffffff60c81b6101208a015160c81b169417179062ffffff60901b1617171760028801556003870191816101408601511690835416178255610160840151166001600160801b0382549181199060801b169116179055565b0151910155565b92919091615092614dbd565b5061010084019063ffffffff80835116818616948186146151d15760069303830b950316810b61039802810b60a086015115600014615173576150f79162049d409186610120890151830b03820b8181136000146151475750905b0b0560020b614010565b602085015160408601516001600160801b0391821692615127926104c2926001600160a01b0390921691166147bb565b6001600160801b0380921660208701521660408501525261012082015290565b919061515281615437565b820b8312615161575b506150ed565b61516c919250615437565b903861515b565b61519e9162049d4091610120880151820b8703820b8181136000146151475750900b0560020b614010565b60208501516001600160801b03916151c5916104c2916001600160a01b03169084166147bb565b90604086015116615127565b5050505050505090565b6001600160a01b0391821690821603919082116139e657565b9091921560001461523d57613fb8926104c29290916109f69160609190911b600160601b600160e01b0316906001600160a01b039061523590821683613d2e565b931690613d2e565b613fb8926104c2926001600160801b03916001600160a01b039161526191906151db565b1691166147bb565b6001600160801b03166103e8908181029181830414901517156139e657620f4240900490565b906152a060e083015160020b614010565b60a0830151615338576001600160801b03918260408501511662ffffff620f4240921682018083116139e6576152d591614c6c565b6001600160a01b03909216910482821161531f576152f6826152fc93614c6c565b90614a56565b915b5116906000828211156153195750613fb8916104c291613d4e565b91505090565b61532c8261533293614905565b906149d9565b916152fe565b6001600160801b03918260208501511662ffffff620f4240921682018083116139e65761536491614c6c565b6001600160a01b03909216910482821161538b57615385826152fc93614c6c565b90614994565b6153988261533293614905565b9061494f565b9060a0820151156000146153f2576001600160801b0360806153eb6153de6153d1848751168561014089015116906139d9565b84602088015116906139d9565b83606087015116906139d9565b9301511690565b613fb86001600160801b03928360608201511693608061542d615420838551168461014087015116906139d9565b83604086015116906139d9565b92015116906139d9565b60060b667fffffffffffff1981146139e65760000390565b919060a0830151156000146154cb576001600160801b0392836040820151169062ffffff620f424094168401908185116139e6576154c6946154976154aa936154bd95614c6c565b04958061014083015116915116906139d9565b6001600160a01b039092169182906147bb565b9260601b613d2e565b111590565b6001600160801b0392836020820151169062ffffff620f424094168401908185116139e6576154c6946154976155049361551a95614c6c565b6001600160a01b0390921691829060601b613d2e565b926147bb565b60009080156155b65780806001146155ae576002146155a6576001918261013383101683600b841016176155965760028392935b80821161556d575050826000190482116109d657500290565b909380600019048111610ef45781851661558d575b800293811c90615554565b80930292615582565b929150600283910a926109d65750565b509060049150565b505050600190565b5090565b6103e8908181029181830414901517156139e657620f3e58900490565b6040516370a0823160e01b81523060048201526020936001600160a01b0393928416918581602481865afa9081156144065760009161572e575b5080821161572757505b604051938585019363a9059cbb60e01b855216602485015260448401526044835260808301918383106001600160401b0384111761393457600080916156a595856040526156688661399d565b8786527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460a0820152519082855af161569f61575b565b9161579a565b8051806156b157505050565b8183918101031261389e5781015180159081150361389e576156d05750565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b905061561b565b908682813d8311615754575b61574481836139b8565b81010312610f3f57505138615611565b503d61573a565b3d15615795573d906001600160401b0382116139345760405191615789601f8201601f1916602001846139b8565b82523d6000602084013e565b606090565b919290156157fc57508151156157ae575090565b3b156157b75790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b82519091501561580f5750805190602001fd5b60405162461bcd60e51b815290819061582b906004830161383f565b0390fd5b600080809381935af161584061575b565b501561584857565b60405162461bcd60e51b815260206004820152600360248201526253544560e81b6044820152606490fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122082ba88c317067c02e9de94b32a09683cc78a8a4895fe99de0b150608ed761c9664736f6c6343000811003300000000000000000000000095d95c41436c15b50217bf1c0f810536ad181c13000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000e0f63a424a4439cbe457d80e4f4b51ad25b2c56c000000000000000000000000000000000000000000000000000000000003d0900000000000000000000000007c706586679af2ba6d1a9fc2da9c6af59883fdd3