[ { "inputs": [ { "internalType": "contract ILBFactory", "name": "factory_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "BinHelper__CompositionFactorFlawed", "type": "error" }, { "inputs": [], "name": "BinHelper__LiquidityOverflow", "type": "error" }, { "inputs": [], "name": "BinHelper__MaxLiquidityPerBinExceeded", "type": "error" }, { "inputs": [], "name": "FeeHelper__FeeTooLarge", "type": "error" }, { "inputs": [], "name": "Hooks__CallFailed", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "LBPair__AddressZero", "type": "error" }, { "inputs": [], "name": "LBPair__EmptyMarketConfigs", "type": "error" }, { "inputs": [], "name": "LBPair__FlashLoanCallbackFailed", "type": "error" }, { "inputs": [], "name": "LBPair__FlashLoanInsufficientAmount", "type": "error" }, { "inputs": [], "name": "LBPair__InsufficientAmountIn", "type": "error" }, { "inputs": [], "name": "LBPair__InsufficientAmountOut", "type": "error" }, { "inputs": [], "name": "LBPair__InvalidHooks", "type": "error" }, { "inputs": [], "name": "LBPair__InvalidInput", "type": "error" }, { "inputs": [], "name": "LBPair__InvalidStaticFeeParameters", "type": "error" }, { "inputs": [], "name": "LBPair__MaxTotalFeeExceeded", "type": "error" }, { "inputs": [], "name": "LBPair__OnlyFactory", "type": "error" }, { "inputs": [], "name": "LBPair__OnlyProtocolFeeRecipient", "type": "error" }, { "inputs": [], "name": "LBPair__OutOfLiquidity", "type": "error" }, { "inputs": [], "name": "LBPair__TokenNotSupported", "type": "error" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "LBPair__ZeroAmount", "type": "error" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "LBPair__ZeroAmountsOut", "type": "error" }, { "inputs": [], "name": "LBPair__ZeroBorrowAmount", "type": "error" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "LBPair__ZeroShares", "type": "error" }, { "inputs": [], "name": "LBToken__AddressThisOrZero", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "LBToken__BurnExceedsBalance", "type": "error" }, { "inputs": [], "name": "LBToken__InvalidLength", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "LBToken__SelfApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "LBToken__SpenderNotApproved", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "LBToken__TransferExceedsBalance", "type": "error" }, { "inputs": [], "name": "LiquidityConfigurations__InvalidConfig", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [], "name": "OracleHelper__InvalidOracleId", "type": "error" }, { "inputs": [], "name": "OracleHelper__LookUpTimestampTooOld", "type": "error" }, { "inputs": [], "name": "OracleHelper__NewLengthTooSmall", "type": "error" }, { "inputs": [], "name": "PackedUint128Math__AddOverflow", "type": "error" }, { "inputs": [], "name": "PackedUint128Math__MultiplierTooLarge", "type": "error" }, { "inputs": [], "name": "PackedUint128Math__SubUnderflow", "type": "error" }, { "inputs": [], "name": "PairParametersHelper__InvalidParameter", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "SafeCast__Exceeds128Bits", "type": "error" }, { "inputs": [], "name": "SafeCast__Exceeds24Bits", "type": "error" }, { "inputs": [], "name": "SafeCast__Exceeds40Bits", "type": "error" }, { "inputs": [], "name": "TokenHelper__TransferFailed", "type": "error" }, { "inputs": [], "name": "Uint128x128Math__LogUnderflow", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "x", "type": "uint256" }, { "internalType": "int256", "name": "y", "type": "int256" } ], "name": "Uint128x128Math__PowUnderflow", "type": "error" }, { "inputs": [], "name": "Uint256x256Math__MulDivOverflow", "type": "error" }, { "inputs": [], "name": "Uint256x256Math__MulShiftOverflow", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "feeRecipient", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "protocolFees", "type": "bytes32" } ], "name": "CollectedProtocolFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint24", "name": "id", "type": "uint24" }, { "indexed": false, "internalType": "bytes32", "name": "totalFees", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "protocolFees", "type": "bytes32" } ], "name": "CompositionFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "bytes32[]", "name": "amounts", "type": "bytes32[]" } ], "name": "DepositedToBins", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "contract ILBFlashLoanCallback", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint24", "name": "activeId", "type": "uint24" }, { "indexed": false, "internalType": "bytes32", "name": "amounts", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "totalFees", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "protocolFees", "type": "bytes32" } ], "name": "FlashLoan", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint24", "name": "idReference", "type": "uint24" }, { "indexed": false, "internalType": "uint24", "name": "volatilityReference", "type": "uint24" } ], "name": "ForcedDecay", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "hooksParameters", "type": "bytes32" } ], "name": "HooksParametersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "oracleLength", "type": "uint16" } ], "name": "OracleLengthIncreased", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "baseFactor", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "filterPeriod", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "decayPeriod", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "reductionFactor", "type": "uint16" }, { "indexed": false, "internalType": "uint24", "name": "variableFeeControl", "type": "uint24" }, { "indexed": false, "internalType": "uint16", "name": "protocolShare", "type": "uint16" }, { "indexed": false, "internalType": "uint24", "name": "maxVolatilityAccumulator", "type": "uint24" } ], "name": "StaticFeeParametersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint24", "name": "id", "type": "uint24" }, { "indexed": false, "internalType": "bytes32", "name": "amountsIn", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "amountsOut", "type": "bytes32" }, { "indexed": false, "internalType": "uint24", "name": "volatilityAccumulator", "type": "uint24" }, { "indexed": false, "internalType": "bytes32", "name": "totalFees", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "protocolFees", "type": "bytes32" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "bytes32[]", "name": "amounts", "type": "bytes32[]" } ], "name": "WithdrawnFromBins", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "approveForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "batchBalances", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" } ], "name": "batchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amountsToBurn", "type": "uint256[]" } ], "name": "burn", "outputs": [ { "internalType": "bytes32[]", "name": "amounts", "type": "bytes32[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "collectProtocolFees", "outputs": [ { "internalType": "bytes32", "name": "collectedProtocolFees", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ILBFlashLoanCallback", "name": "receiver", "type": "address" }, { "internalType": "bytes32", "name": "amounts", "type": "bytes32" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "flashLoan", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "forceDecay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getActiveId", "outputs": [ { "internalType": "uint24", "name": "activeId", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "getBin", "outputs": [ { "internalType": "uint128", "name": "binReserveX", "type": "uint128" }, { "internalType": "uint128", "name": "binReserveY", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getBinStep", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getFactory", "outputs": [ { "internalType": "contract ILBFactory", "name": "factory", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "getIdFromPrice", "outputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getLBHooksParameters", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "swapForY", "type": "bool" }, { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "getNextNonEmptyBin", "outputs": [ { "internalType": "uint24", "name": "nextId", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOracleParameters", "outputs": [ { "internalType": "uint8", "name": "sampleLifetime", "type": "uint8" }, { "internalType": "uint16", "name": "size", "type": "uint16" }, { "internalType": "uint16", "name": "activeSize", "type": "uint16" }, { "internalType": "uint40", "name": "lastUpdated", "type": "uint40" }, { "internalType": "uint40", "name": "firstTimestamp", "type": "uint40" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint40", "name": "lookupTimestamp", "type": "uint40" } ], "name": "getOracleSampleAt", "outputs": [ { "internalType": "uint64", "name": "cumulativeId", "type": "uint64" }, { "internalType": "uint64", "name": "cumulativeVolatility", "type": "uint64" }, { "internalType": "uint64", "name": "cumulativeBinCrossed", "type": "uint64" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint24", "name": "id", "type": "uint24" } ], "name": "getPriceFromId", "outputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getProtocolFees", "outputs": [ { "internalType": "uint128", "name": "protocolFeeX", "type": "uint128" }, { "internalType": "uint128", "name": "protocolFeeY", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint128", "name": "reserveX", "type": "uint128" }, { "internalType": "uint128", "name": "reserveY", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getStaticFeeParameters", "outputs": [ { "internalType": "uint16", "name": "baseFactor", "type": "uint16" }, { "internalType": "uint16", "name": "filterPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "decayPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "reductionFactor", "type": "uint16" }, { "internalType": "uint24", "name": "variableFeeControl", "type": "uint24" }, { "internalType": "uint16", "name": "protocolShare", "type": "uint16" }, { "internalType": "uint24", "name": "maxVolatilityAccumulator", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "amountOut", "type": "uint128" }, { "internalType": "bool", "name": "swapForY", "type": "bool" } ], "name": "getSwapIn", "outputs": [ { "internalType": "uint128", "name": "amountIn", "type": "uint128" }, { "internalType": "uint128", "name": "amountOutLeft", "type": "uint128" }, { "internalType": "uint128", "name": "fee", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "amountIn", "type": "uint128" }, { "internalType": "bool", "name": "swapForY", "type": "bool" } ], "name": "getSwapOut", "outputs": [ { "internalType": "uint128", "name": "amountInLeft", "type": "uint128" }, { "internalType": "uint128", "name": "amountOut", "type": "uint128" }, { "internalType": "uint128", "name": "fee", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokenX", "outputs": [ { "internalType": "contract IERC20", "name": "tokenX", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getTokenY", "outputs": [ { "internalType": "contract IERC20", "name": "tokenY", "type": "address" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getVariableFeeParameters", "outputs": [ { "internalType": "uint24", "name": "volatilityAccumulator", "type": "uint24" }, { "internalType": "uint24", "name": "volatilityReference", "type": "uint24" }, { "internalType": "uint24", "name": "idReference", "type": "uint24" }, { "internalType": "uint40", "name": "timeOfLastUpdate", "type": "uint40" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "implementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "newLength", "type": "uint16" } ], "name": "increaseOracleLength", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "baseFactor", "type": "uint16" }, { "internalType": "uint16", "name": "filterPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "decayPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "reductionFactor", "type": "uint16" }, { "internalType": "uint24", "name": "variableFeeControl", "type": "uint24" }, { "internalType": "uint16", "name": "protocolShare", "type": "uint16" }, { "internalType": "uint24", "name": "maxVolatilityAccumulator", "type": "uint24" }, { "internalType": "uint24", "name": "activeId", "type": "uint24" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes32[]", "name": "liquidityConfigs", "type": "bytes32[]" }, { "internalType": "address", "name": "refundTo", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "bytes32", "name": "amountsReceived", "type": "bytes32" }, { "internalType": "bytes32", "name": "amountsLeft", "type": "bytes32" }, { "internalType": "uint256[]", "name": "liquidityMinted", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "hooksParameters", "type": "bytes32" }, { "internalType": "bytes", "name": "onHooksSetData", "type": "bytes" } ], "name": "setHooksParameters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "baseFactor", "type": "uint16" }, { "internalType": "uint16", "name": "filterPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "decayPeriod", "type": "uint16" }, { "internalType": "uint16", "name": "reductionFactor", "type": "uint16" }, { "internalType": "uint24", "name": "variableFeeControl", "type": "uint24" }, { "internalType": "uint16", "name": "protocolShare", "type": "uint16" }, { "internalType": "uint24", "name": "maxVolatilityAccumulator", "type": "uint24" } ], "name": "setStaticFeeParameters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "swapForY", "type": "bool" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "swap", "outputs": [ { "internalType": "bytes32", "name": "amountsOut", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
60c06040523480156200001157600080fd5b506040516200614e3803806200614e83398101604081905262000034916200010a565b6001600160a01b03811660a052306080526200004f62000056565b506200013c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000a75760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001075780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156200011d57600080fd5b81516001600160a01b03811681146200013557600080fd5b9392505050565b60805160a051615fd76200017760003960008181610505015281816113ce015281816121da01526136a5015260006104720152615fd76000f3fe608060405234801561001057600080fd5b50600436106102765760003560e01c806388cc58e411610160578063c9939f5e116100d8578063e584b6541161008c578063e985e9c511610071578063e985e9c5146106c9578063ea3446bf146106ec578063f5e29329146106ff57600080fd5b8063e584b654146106a3578063e77366f8146106b657600080fd5b8063d8dfcea0116100bd578063d8dfcea01461067b578063da10610c14610683578063dbe65edc1461069b57600080fd5b8063c9939f5e14610660578063d3b9fbe41461067357600080fd5b8063a1af5b9a1161012f578063abcd783011610114578063abcd7830146105f0578063bd85b0391461062d578063c7bd65861461064d57600080fd5b8063a1af5b9a146105c1578063a41a01fb146105c957600080fd5b806388cc58e4146105035780638940a16a146105295780638d7024e51461056757806395d89b41146105a257600080fd5b806347973bff116101f357806355182894116101c25780636653851a116101a75780636653851a14610494578063781a8915146104a75780637ca0de30146104b157600080fd5b806355182894146104285780635c60da1b1461046d57600080fd5b806347973bff146103cf5780634c7cffbd146103e25780634e1273f4146103f557806353c059a01461041557600080fd5b80630abe96881161024a57806317fad7fc1161022f57806317fad7fc146103855780631b057f6d1461039a578063383d15c5146103ad57600080fd5b80630abe96881461033457806317f11ecc1461036a57600080fd5b8062fdd58e1461027b57806305e8746d146102a157806306fdde03146102ca5780630902f1ac1461030c575b600080fd5b61028e61028936600461555e565b610712565b6040519081526020015b60405180910390f35b3660011981013560f01c90033560601c5b6040516001600160a01b039091168152602001610298565b60408051808201909152601481527f4c697175696469747920426f6f6b20546f6b656e00000000000000000000000060208201525b60405161029891906155ae565b610314610740565b604080516001600160801b03938416815292909116602083015201610298565b6103146103423660046155f4565b62ffffff166000908152600660205260409020546001600160801b0381169160809190911c90565b61037261077a565b60405161ffff9091168152602001610298565b610398610393366004615654565b61079b565b005b6103986103a836600461572b565b6107f6565b6103c06103bb366004615777565b610915565b6040516102989392919061581a565b6103986103dd36600461584b565b610b9b565b61028e6103f03660046155f4565b610cf9565b6104086104033660046158e2565b610d29565b604051610298919061594e565b61028e610423366004615971565b610dff565b610430611138565b6040805160ff909616865261ffff9485166020870152939092169284019290925264ffffffffff918216606084015216608082015260a001610298565b6102b27f000000000000000000000000000000000000000000000000000000000000000081565b6103986104a23660046159a8565b6111e2565b620100095461028e565b6104b961121b565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015262ffffff9081166080850152931660a08301529190911660c082015260e001610298565b7f00000000000000000000000000000000000000000000000000000000000000006102b2565b61053c610537366004615a2e565b611283565b6040805167ffffffffffffffff94851681529284166020840152921691810191909152606001610298565b61056f611382565b6040805162ffffff95861681529385166020850152919093169082015264ffffffffff9091166060820152608001610298565b60408051808201909152600381526213109560ea1b60208201526102ff565b61028e6113c2565b6105dc6105d7366004615a55565b61157a565b60405162ffffff9091168152602001610298565b6106036105fe366004615a7f565b61158d565b604080516001600160801b0394851681529284166020840152921691810191909152606001610298565b61028e61063b366004615ab7565b60009081526001602052604090205490565b61039861065b366004615ad0565b611732565b61040861066e366004615654565b6117c8565b610398611af2565b610314611b86565b3660011981013560f01c90036014013560601c6102b2565b6105dc611ba1565b6103986106b1366004615aeb565b611bae565b6106036106c4366004615a7f565b611bbd565b6106dc6106d7366004615b09565b611d03565b6040519015158152602001610298565b6103986106fa366004615b27565b611d0f565b6105dc61070d366004615ab7565b611fed565b6001600160a01b0382166000908152602081815260408083208484529091529020545b92915050565b905090565b60008061077161075d60055460045461201890919063ffffffff16565b6001600160801b0381169160809190911c90565b90939092509050565b600061073b60003660011981013560f090811c90910360280135901c905090565b6107a3612052565b62010009546107b8813389898989898961208a565b6107c687878787878761212a565b6107dd6001600080516020615f8283398151915255565b6107ed8133898989898989612188565b50505050505050565b6107fe612052565b6108066121cf565b62010009839055604080518481529051849133917f4d24d81a1a6e09c37497747b4c9d67d858ce80438b54df0fa361a24dc742d9349181900360200190a26001600160a01b038116158015906108cf5750306001600160a01b0316816001600160a01b0316635f9c01b16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561089f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c39190615b77565b6001600160a01b031614155b156108ed57604051631b5de6eb60e01b815260040160405180910390fd5b6108f8848484612218565b506109106001600080516020615f8283398151915255565b505050565b6000806060866109248161223f565b61092c612052565b600086900361094e5760405163296db0d960e01b815260040160405180910390fd5b62010009546040805160608101909152600090808967ffffffffffffffff81111561097b5761097b615b94565b6040519080825280602002602001820160405280156109a4578160200160208202803683370190505b5081526020018967ffffffffffffffff8111156109c3576109c3615b94565b6040519080825280602002602001820160405280156109ec578160200160208202803683370190505b5081526020018967ffffffffffffffff811115610a0b57610a0b615b94565b604051908082528060200260200182016040528015610a34578160200160208202803683370190505b509052600454909150610a60813660011981013560f01c90038035606090811c9160140135901c61227b565b9650610a7083338d8d8d8c6122bb565b610a7d8a8a898e86612305565b9550610a93610a8c8888612018565b829061243a565b600455604080830151835191519096506001600160a01b038d169160009133917f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb91610ae191908b90615baa565b60405180910390a4815160208301516040516001600160a01b038e169233927f87f1f9dcf5e8089a3e00811b6a008d8f30293a3da878cb1fe8c90ca376402f8a92610b2d929190615baa565b60405180910390a38515610b5f57610b5f863660011981013560f01c90038035606090811c9160140135901c8b612474565b610b766001600080516020615f8283398151915255565b610b8d83338d8d8d610b888d8d612018565b6124d2565b505050509450945094915050565b610ba36121cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff16600081158015610bee5750825b905060008267ffffffffffffffff166001148015610c0b5750303b155b905081158015610c19575080155b15610c375760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c6b57845468ff00000000000000001916680100000000000000001785555b610c73612514565b610c9f610c93610c8e8860035461252490919063ffffffff16565b612573565b8e8e8e8e8e8e8e6125c7565b8315610cea57845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b6000610735610d1d60003660011981013560f090811c90910360280135901c905090565b62ffffff84169061274e565b60608382610d378282612785565b8567ffffffffffffffff811115610d5057610d50615b94565b604051908082528060200260200182016040528015610d79578160200160208202803683370190505b50925060005b86811015610df457610dcf888883818110610d9c57610d9c615bcf565b9050602002016020810190610db19190615be5565b878784818110610dc357610dc3615bcf565b90506020020135610712565b848281518110610de157610de1615bcf565b6020908102919091010152600101610d7f565b505050949350505050565b6000610e09612052565b6201000954600454600554600086610e3d57610e383660011981013560f01c90036014013560601c84906127a5565b610e57565b610e573660011981013560f01c90033560601c84906127da565b90506000819003610e7b57604051637df801c760e01b815260040160405180910390fd5b86610e898533898486612809565b610e93848361243a565b6003549094506000610eba60003660011981013560f090811c90910360280135901c905090565b90506000610ec78361286d565b9050610ed38342612879565b92505b62ffffff8116600090815260066020526040902054610ef68186156128ef565b61101a57610f04848361291e565b935060008080610f188488888b898e6129a6565b91945092509050821561101657610f2f8984612018565b9850610f3b8d8361243a565b9c506000610f56610f4b89612bcc565b839061ffff16612bdc565b90508015610f7757610f688b8261243a565b9a50610f748482612018565b93505b610f8b83610f85878761243a565b90612018565b62ffffff87166000908152600660205260409020556001600160a01b038f16337fad7d6f97abf51ce18e17a38f4d70e975be9c0708474987bb3e26ad21bd93ca70888787610fd88e612c52565b6040805162ffffff9586168152602081019490945283019190915290911660608201526080810186905260a0810185905260c00160405180910390a3505b5050505b60008690036110295750611073565b60006110358684612c63565b905062ffffff8116158061104d575062ffffff818116145b1561106b57604051631a6d7fb160e31b815260040160405180910390fd5b915050610ed6565b60008990036110955760405163439df85d60e11b815260040160405180910390fd5b61109f878a612018565b60045560058690556110b3600a8483612c85565b92506110bf8382612524565b60035583156110eb576110e63660011981013560f01c90036014013560601c8a908c612da0565b611106565b6111063660011981013560f01c90033560601c8a908c612de0565b61111d6001600080516020615f8283398151915255565b61112a88338c878d612df1565b505050505050505092915050565b6003546078906000908190819081908161115182612e4e565b905061ffff8116156111d957600061116a600a83612e5e565b9650905061117781612ebc565b965061118281612ec8565b94508464ffffffffff1660000361119857600095505b61ffff8616156111d7576111c98661ffff168361ffff16816111bc576111bc615c02565b600a916001910601612ee9565b90506111d481612ec8565b93505b505b50509091929394565b6111ea612052565b6111f26121cf565b611204600354888888888888886125c7565b6107ed6001600080516020615f8283398151915255565b600080600080600080600080600354905061123581612ebc565b975061124081612f19565b965061124b81612f29565b955061125681612f39565b945061126181612f49565b935061126c81612bcc565b925061127781612f5a565b91505090919293949596565b6000806000806003549050600061129982612e4e565b905061ffff811615806112b25750428664ffffffffff16115b156112c9576000806000945094509450505061137b565b60006112d7600a8389612f6b565b91985096509450905064ffffffffff80881690821610156113775761130d6112fe8461286d565b849064ffffffffff8a1661308e565b9250600061131b8289615c2e565b90508064ffffffffff1661132e8561286d565b62ffffff1661133d9190615c4c565b6113479088615c78565b96508064ffffffffff1661135a85612c52565b62ffffff166113699190615c4c565b6113739087615c78565b9550505b5050505b9193909250565b6000806000806000600354905061139881612c52565b94506113a3816130a6565b93506113ae816130b7565b92506113b9816130c8565b91505090919293565b60006113cc612052565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634ccb20c06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e9190615b77565b6001600160a01b0316336001600160a01b03161461147f57604051630f8937c560e21b815260040160405180910390fd5b6005546001600160801b038116608082901c60006114da826114a25760006114a5565b60015b60ff166000856001600160801b0316116114c05760006114c3565b60015b60ff169060801b6001600160801b03919091161790565b90506114e68482612018565b9450841561155c5760058190556004546115009086612018565b60045560405185815233907f3f41a5ddc53701cc7db577ade4f1fca9838a8ec0b5ea50b9f0f5d17bc4554e329060200160405180910390a261155c853660011981013560f01c90038035606090811c9160140135901c33612474565b505050506115776001600080516020615f8283398151915255565b90565b60006115868383612c63565b9392505050565b60035460009083908290816115b760003660011981013560f090811c90910360280135901c905090565b905060006115c48361286d565b90506115d08342612879565b92505b62ffffff81166000908152600660205260408120546115f39089156130db565b90506001600160801b038116156116d957600061161562ffffff84168561274e565b90506000876001600160801b0316836001600160801b031611611638578261163a565b875b9050611646868561291e565b955060008a611669576116646001600160801b0383168460806130fb565b61167e565b61167e6001600160801b038316608085613131565b9050600061168c8888613167565b905060006116a36001600160801b03841683613186565b90506116af8184615c99565b6116b9908d615c99565b9b506116c5848c615cb9565b9a506116d1818b615c99565b995050505050505b856001600160801b03166000036116f05750611728565b60006116fc8984612c63565b905062ffffff81161580611714575062ffffff818116145b15611720575050611728565b9150506115d3565b5050509250925092565b61173a612052565b600354600061174882612e4e565b90508061ffff166000036117675750600161176382826131cf565b6003555b611773600a828561321e565b60405161ffff8416815233907fc975541e72d695746a43ba65745d79963a23082637c8f4609354d9bcf70194d69060200160405180910390a250506117c56001600080516020615f8283398151915255565b50565b606086336117d68282613307565b61180b5760405163548f773d60e01b81526001600160a01b038084166004830152821660248201526044015b60405180910390fd5b611813612052565b8515806118205750858414155b1561183e57604051633ab7870760e01b815260040160405180910390fd5b620100095461185381338c8c8c8c8c8c613353565b898767ffffffffffffffff81111561186d5761186d615b94565b604051908082528060200260200182016040528015611896578160200160208202803683370190505b5094506000805b898110156119ea5760006118c88c8c848181106118bc576118bc615bcf565b90506020020135613399565b905060008a8a848181106118de576118de615bcf565b9050602002013590508060000361190f57604051636996a92560e01b815262ffffff83166004820152602401611802565b62ffffff8216600081815260066020908152604080832054600190925290912054909161193e908890856133c4565b600061194b838584613445565b905060008190036119765760405163fd44792960e01b815262ffffff86166004820152602401611802565b6119808382612018565b9250838203611996576119946007866134bd565b505b62ffffff851660009081526006602052604090208390558b5181908d90889081106119c3576119c3615bcf565b60209081029190910101526119d8878261243a565b9650856001019550505050505061189d565b506004546119f89082612018565b6004556040516000906001600160a01b0384169033907f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb90611a41908f908f908f908f90615d24565b60405180910390a48a6001600160a01b0316336001600160a01b03167fa32e146844d6144a22e94c586715a1317d58a8aa3581ec33d040113ddcb243508c8c8a604051611a9093929190615d4b565b60405180910390a3611abc813660011981013560f01c90038035606090811c9160140135901c8e612474565b611ad36001600080516020615f8283398151915255565b611ae38333848e8e8e8e8e61355f565b50505050509695505050505050565b611afa612052565b611b026121cf565b600354611b16611b1182612573565b6135a5565b600355337f282afaeeae84c1d85ad1424a3aa2ddbedaeefca3b1e53d889d15265fe44db7fc611b44836130b7565b611b4d846130a6565b6040805162ffffff93841681529290911660208301520160405180910390a250611b846001600080516020615f8283398151915255565b565b60055460009081906001600160801b0381169060801c610771565b600061073b60035461286d565b611bb93383836135da565b5050565b6000808080611bd56001600160801b0387168661368f565b6003549091506000611bfc60003660011981013560f090811c90910360280135901c905090565b90506000611c098361286d565b9050611c158342612879565b92505b62ffffff8116600090815260066020526040902054611c38818a156128ef565b611ca557611c46848361291e565b935060008080611c5a8488888f898d6129a6565b919450925090508215611ca157611c718884612018565b9750611c7e828d156130db565b611c88908b615c99565b9950611c94818d6130db565b611c9e908a615c99565b98505b5050505b6000859003611cb45750611cec565b6000611cc08a84612c63565b905062ffffff81161580611cd8575062ffffff818116145b15611ce4575050611cec565b915050611c18565b611cf684896130db565b9650505050509250925092565b60006115868383613307565b611d17612052565b6000839003611d395760405163727ab02160e11b815260040160405180910390fd5b62010009546004546000611d4c866136a0565b9050611d5a833389896137a8565b611d7e863660011981013560f01c90038035606090811c9160140135901c8a612474565b6000806001600160a01b038916631faa6b8760e01b333660011981013560f01c90033560601c3660011981013560f01c90036014013560601c8c888d8d604051602401611dd19796959493929190615d9a565b60408051601f198184030181529181526020820180516001600160e01b03167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611e279190615ddb565b6000604051808303816000865af19150503d8060008114611e64576040519150601f19603f3d011682016040523d82523d6000602084013e611e69565b606091505b5091509150811580611e7d57508051602014155b80611ebb57507fab5c473bce5960a8292e9c8db82f9272504caab4e9ef09553fc112f82b62a3c281806020019051810190611eb89190615df7565b14155b15611ed957604051634a57011360e01b815260040160405180910390fd5b6000611efe813660011981013560f01c90038035606090811c9160140135901c61227b565b9050611f14611f0d868661243a565b82906137fd565b15611f3257604051630e3c717160e11b815260040160405180910390fd5b6000611f3e8287612018565b6004839055600554909150611f53908261243a565b6005556003546001600160a01b038c169033907fd126bd9d94daca8e55ffd8283fac05394aec8326c6b1639e1e8a445fbe8bbc7d90611f919061286d565b6040805162ffffff9092168252602082018f905281018590526060810185905260800160405180910390a3611fd36001600080516020615f8283398151915255565b611fe087338d8885613841565b5050505050505050505050565b600061073561201160003660011981013560f090811c90910360280135901c905090565b839061389d565b8082038281118061203457506001600160801b03808416908216115b156107355760405163e599af5560e01b815260040160405180910390fd5b600080516020615f8283398151915280546001190161208457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b750100000000000000000000000000000000000000000088161561212057612120886379c8ccf760e01b898989898989896040516024016120d19796959493929190615e10565b60408051601f198184030181529190526020810180516001600160e01b03167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526138e2565b5050505050505050565b85336121368282613307565b6121665760405163548f773d60e01b81526001600160a01b03808416600483015282166024820152604401611802565b612120888888888888613946565b6001600080516020615f8283398151915255565b750200000000000000000000000000000000000000000088161561212057612120886367ddb27860e01b898989898989896040516024016120d19796959493929190615e10565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611b8457604051632486085360e01b815260040160405180910390fd5b82156109105761091083634e430b5a60e01b8585856040516024016120d193929190615e66565b6001600160a01b038116158061225d57506001600160a01b03811630145b156117c5576040516345c210e760e11b815260040160405180910390fd5b60006122b384610f8561228d85613aa9565b61229687613aa9565b6001600160801b03169060801b6001600160801b03919091161790565b949350505050565b741000000000000000000000000000000000000000008616156122fd576122fd86630d4abdb360e01b87878787876040516024016120d1959493929190615e80565b505050505050565b60008061232760003660011981013560f090811c90910360280135901c905090565b60035490915060006123388261286d565b905086935060005b8881101561242d576000806123768a8d8d8681811061236157612361615bcf565b90506020020135613b1890919063ffffffff16565b91509150600080600061238c898886888c613b61565b9194509250905061239d8a83612018565b99508362ffffff168b6000015187815181106123bb576123bb615bcf565b602002602001018181525050808b6020015187815181106123de576123de615bcf565b602002602001018181525050828b60400151878151811061240157612401615bcf565b60200260200101818152505061241d8c8562ffffff1685613d61565b8560010195505050505050612340565b5050505095945050505050565b8181018281108061245657506001600160801b03808416908216105b15610735576040516316692de960e01b815260040160405180910390fd5b6001600160801b038416608085901c81156124a6576124a66001600160a01b038616846001600160801b038516613dae565b6001600160801b038116156122fd576122fd6001600160a01b038516846001600160801b038416613dae565b742000000000000000000000000000000000000000008616156122fd576122fd86637a51a4c660e01b87878787876040516024016120d1959493929190615e80565b61251c613dff565b611b84613e4d565b60007cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83167fffffff000000000000000000000000000000000000000000000000000000000060e884901b1617611586565b60008061257f8361286d565b90507fffffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffff831675ffffff00000000000000000000000000000000000000609883901b1617611586565b61ffff87161580156125db575061ffff8616155b80156125e9575061ffff8516155b80156125f7575061ffff8416155b8015612606575062ffffff8316155b8015612614575061ffff8216155b8015612623575062ffffff8116155b15612641576040516331375e0360e11b815260040160405180910390fd5b6126518888888888888888613e55565b9750600061267460003660011981013560f090811c90910360280135901c905090565b905060006126828a84613f6e565b905060006126908284613fcc565b61269a838561400c565b6126a49190615ebf565b905067016345785d8a00008111156126cf576040516372db9c0b60e11b815260040160405180910390fd5b50505060038890556040805161ffff8981168252888116602083015287811682840152868116606083015262ffffff868116608084015290851660a0830152831660c0820152905133917fd09e5ddc721ff14c5c1e66a305cbba1fd70b82c5232bc391aad6f55e62e4b046919081900360e00190a25050505050505050565b600061271061ffff60801b608084901b1604600160801b0162ffffff8416627fffff190161277c8282614030565b95945050505050565b808214611bb9576040516340311ffd60e11b815260040160405180910390fd5b6000806127b28460801c90565b90506122b3816127c185613aa9565b6127cb9190615cb9565b6001600160801b031660801b90565b60006001600160801b0383166122b3816127f385613aa9565b6127fd9190615cb9565b6001600160801b031690565b74010000000000000000000000000000000000000000851615612866576040516001600160a01b0380861660248301528416604482015282151560648201526084810182905261286690869063feee373560e01b9060a4016120d1565b5050505050565b600060e882901c610735565b600080612885846130c8565b6128969064ffffffffff1684615ed2565b90506128a184612f19565b61ffff1681106128e5576128b484612573565b93506128bf84612f29565b61ffff1681106128d9576128d4846000614290565b6128e2565b6128e2846135a5565b93505b6122b384846142fe565b60008161290f576129008360801c90565b6001600160801b031615611586565b50506001600160801b03161590565b60008061292a846130b7565b62ffffff169050600080828562ffffff161161294d578462ffffff168303612956565b828562ffffff16035b91506127108202612966876130a6565b62ffffff16019050600061297987612f5a565b62ffffff16905080821161298d578161298f565b805b915061299b8783613f6e565b979650505050505050565b60008080806129ba62ffffff87168961274e565b905060006129c98b89156130db565b90506000886129f4576129ef6129ea6001600160801b0384168560806130fb565b614357565b612a0c565b612a0c6129ea6001600160801b038416608086613131565b90506000612a1a8c8c613167565b90506000612a316001600160801b03841683613186565b9050612a3d8184615c99565b92506000612a4b8a8d6130db565b9050600080856001600160801b0316836001600160801b031610612a76575084915082905085612aec565b612a896001600160801b03841686614381565b91506000612a978385615cb9565b6001600160801b031690508e612abb57612ab66129ea8260808c6143b8565b612aca565b612aca6129ea828b60806143e2565b9150876001600160801b0316826001600160801b03161115612aea578791505b505b8d612b2657612b04836001600160801b031660801b90565b6001600160801b038216612b21846001600160801b031660801b90565b612b4e565b6001600160801b038316612b43826001600160801b031660801b90565b6001600160801b0384165b809b50819c50829d50505050505050505050507d09745258e83de0d0f4e400fce79aca44773dd596d31a6d336ca2a775b611612ba0612b9a85610f85888f61243a90919063ffffffff16565b83614450565b1115612bbf5760405163a2d7652760e01b815260040160405180910390fd5b5096509650969350505050565b600061073582604e1c613fff1690565b6000816001600160801b0316600003612bf757506000610735565b6127106001600160801b038316811015612c2457604051631514a94960e21b815260040160405180910390fd5b6001600160801b03848116840282900490608086811c86028490049183169082901b175b9695505050505050565b60006107358260701c620fffff1690565b600082612c7a57612c7560078361446c565b611586565b6115866007836145b8565b600080612c9184612e4e565b90508061ffff16600003612ca85783915050611586565b6000612cb48683612ee9565b90506000612cc1826146e8565b90506000612cce836146f4565b612cdb9060ff1683615ee5565b90508064ffffffffff16612cee42614703565b64ffffffffff161115612d94576000806000612d338464ffffffffff164203612d168c61286d565b612d1f8d612c52565b612d298e8e61472b565b8a9392919061475b565b9250925092506000612d4487612ebc565b905064ffffffffff861642036078811115612d74575096879006600101964295506000612d718c8a6131cf565b9b505b612d8282868686858c6147c0565b97505050505050612d94888585614864565b50949695505050505050565b6000612dac8460801c90565b90506001600160801b03811615612dda57612dda6001600160a01b038416836001600160801b038416613dae565b50505050565b60006001600160801b038416612dac565b74020000000000000000000000000000000000000000851615612866576040516001600160a01b038086166024830152841660448201528215156064820152608481018290526128669086906353e8079b60e01b9060a4016120d1565b60006107358260d81c61ffff1690565b600080612e6b8484612ee9565b9150612e7682612ebc565b90508061ffff168361ffff1614612eb557612e99612e948583612ee9565b612ebc565b90508061ffff168361ffff1611612eb05780612eb2565b825b90505b9250929050565b600061ffff8216610735565b6000612ed3826146f4565b60ff16612edf836146e8565b6107359190615ee5565b600081612ef581614891565b8361ffff60001985018116908110612f0f57612f0f615bcf565b0154949350505050565b60006107358260101c610fff1690565b600061073582601c1c610fff1690565b60006107358260281c613fff1690565b60006107358260361c62ffffff1690565b600061073582605c1c620fffff1690565b600080600080600080612f7e8989612e5e565b909250905064ffffffffff8716612fb58a612f99848c615f03565b61ffff1661ffff8110612fae57612fae615bcf565b0154612ec8565b64ffffffffff161115612fdb57604051631c4e7f9560e21b815260040160405180910390fd5b612fe482612ec8565b95508664ffffffffff168664ffffffffff16116130265785613005836148b6565b61300e846148cc565b613017856148e2565b95509550955095505050613085565b8695506000806130388b8b8b866148f8565b9150915060008961304883612ec8565b6130529190615c2e565b9050600061305f84612ec8565b613069908c615c2e565b905061307784848484614a4a565b919a50985096505050505050505b93509350935093565b600061309a8483612879565b93506122b3848461291e565b60006107358260841c620fffff1690565b60006107358260981c62ffffff1690565b60006107358260b01c64ffffffffff1690565b6000816130ec57612c758360801c90565b6001600160801b038316611586565b60006131088484846143e2565b9050600160ff83161b8061311e5761311e615c02565b83850915611586576122b3600182615ebf565b600061313e8484846143b8565b9050818061314e5761314e615c02565b600160ff85161b850915611586576122b3600182615ebf565b60006115866131768484613fcc565b613180858561400c565b01614357565b60008161319281614bae565b6001600160801b03808416670de0b6b3a764000081900391829160001991881602820101816131c3576131c3615c02565b049250505b5092915050565b60007fffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff83167cffff00000000000000000000000000000000000000000000000000000060d884901b1617611586565b600061322a8484612ee9565b9050600061323782612ebc565b90508261ffff168161ffff161061326157604051632c57574160e21b815260040160405180910390fd5b60008461ffff168261ffff16146132925761ffff82161561328b576132868683612ee9565b613294565b6000613294565b825b905060006132a182612ebc565b61ffff169050808661ffff16116132b857806132be565b8561ffff165b905061ffff83165b8561ffff168110156132f05781888261ffff81106132e6576132e6615bcf565b01556001016132c6565b506107ed878761ffff868116881890891617614864565b6000816001600160a01b0316836001600160a01b031614806115865750506001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b74400000000000000000000000000000000000000000881615612120576121208863ea9db9d360e01b898989898989896040516024016120d19796959493929190615e10565b8062ffffff811681146133bf57604051639b63641560e01b815260040160405180910390fd5b919050565b6001600160a01b03831660009081526020818152604080832085845291829052909120548281101561342157604051625b387760e31b81526001600160a01b03861660048201526024810185905260448101849052606401611802565b60009384526001602090815260408086208054869003905592905292209103905550565b60006001600160801b038416608085901c82808315613478576134756129ea886001600160801b03871689614be0565b91505b6001600160801b038316156134a15761349e6129ea886001600160801b03861689614be0565b90505b608081901b6001600160801b0383161798975050505050505050565b61ffff600882901c166000818152600284016020526040812054909190600160ff85161b19811680821461355357600083815260028701602052604081208290558190036135475750600882901c6000818152600187810160205260408220805460ff87169290921b19909116908190559190829003613545578654600160ff83161b191687555b505b60019350505050610735565b50600095945050505050565b74800000000000000000000000000000000000000000881615612120576121208863fdc2725760e01b898989898989896040516024016120d19796959493929190615e10565b6000806135b183612c52565b62ffffff16905060006135c384612f39565b61ffff1690506127108282020461277c8582614290565b826135e48161223f565b826001600160a01b0316846001600160a01b0316036136215760405163782ee70760e01b81526001600160a01b0385166004820152602401611802565b6001600160a01b03848116600081815260026020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b6000816130ec57612c758360801b90565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fd90c2be6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137259190615df7565b90506001600160801b0383811690608085901c90670de0b6b3a763ffff9061375e90670de0b6b3a7640000908616850283015b04614357565b9250613790670de0b6b3a764000082866001600160801b0316856001600160801b031602018161375857613758615c02565b915050608081901b6001600160801b0383161761277c565b74040000000000000000000000000000000000000000841615612dda576040516001600160a01b0380851660248301528316604482015260648101829052612dda90859063505d903360e01b906084016120d1565b60006001600160801b0383811690608085811c9185169085901c8184108061299b5750806001600160801b0316836001600160801b03161094505050505092915050565b74080000000000000000000000000000000000000000851615612866576040516001600160a01b0380861660248301528416604482015260648101839052608481018290526128669086906360bed5f360e01b9060a4016120d1565b600061271061ffff60801b608084901b1604600160801b01816138bf82614c00565b6138c886614c00565b6138d29190615f24565b905061277c816280000001613399565b600080839050602083015160e01c602060008551602087016000865af192503d151583151615613916573d6000803e3d6000fd5b8060005160e01c14601f3d1116831692505081612dda57604051636c93cb9b60e01b815260040160405180910390fd5b82816139528282612785565b8661395c8161223f565b6001600160a01b03808a16600090815260208190526040808220928b1682528120905b88811015613a405760008a8a8381811061399b5761399b615bcf565b90506020020135905060008989848181106139b8576139b8615bcf565b600085815260208981526040909120549102929092013592505081811015613a15578e83836040516358b4690f60e01b8152600401611802939291906001600160a01b039390931683526020830191909152604082015260600190565b600092835260208681526040808520928490039092558590529091208054909101905560010161397f565b50896001600160a01b03168b6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8c8c8c8c604051613a949493929190615d24565b60405180910390a45050505050505050505050565b6040516370a0823160e01b8152306004820152600090610735906001600160a01b038416906370a0823190602401602060405180830381865afa158015613af4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ea9190615df7565b6000806000806000613b2987614d0d565b670de0b6b3a764000060808a811c90930281900490921b6001600160801b03998a169093029190910490971617979596505050505050565b62ffffff83166000818152600660205260408120549091829182918290613b88908b61274e565b90506000613ba78962ffffff1660009081526001602052604090205490565b9050613bb583898484614db0565b909650945084935062ffffff808b16908a1603613cdf57613bd7878a4261308e565b96506000613be984898e89868c614f36565b90508015613cd9576000613c0784613c018985612018565b90614450565b90506000613c158686614450565b9050613c22828583614be0565b98506000613c3d613c328c612bcc565b859061ffff16612bdc565b90508015613c6357613c4f8882612018565b600554909850613c5f908261243a565b6005555b613c6f600a8c8f612c85565b9a508a600381905550336001600160a01b03167f3f0b46725027bb418b2005f4683538eccdbcdf1de2b8649a29dbd9c507d16ff48e8684604051613ccd9392919062ffffff9390931683526020830191909152604082015260600190565b60405180910390a25050505b50613cea565b613cea858b8b61502b565b851580613cf5575083155b15613d1a57604051634c98d35760e11b815262ffffff8a166004820152602401611802565b80600003613d2f57613d2d60078a615091565b505b613d39838561243a565b62ffffff90991660009081526006602052604090209890985550929891975095509350505050565b60008281526001602052604081208054839290613d7f908490615ebf565b90915550506001600160a01b039092166000908152602081815260408083209383529290522080549091019055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612dda848261511e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611b8457604051631afcd79f60e31b815260040160405180910390fd5b612174613dff565b60008561ffff168761ffff161180613e725750610fff8661ffff16115b80613e8257506127108561ffff16115b80613e9257506109c48361ffff16115b80613ea45750620fffff8262ffffff16115b15613ec257604051631c07203f60e01b815260040160405180910390fd5b605c82901b6dfffff00000000000000000000000166dffffffffffffffffffffffffffff1991821661ffff8a1690811760108a901b630fff000016908117601c8a901b64fff00000001690811760288a901b663fff00000000001690811760368a901b693fffffc000000000000016908117604e8a901b6b0fffc000000000000000000016908117871797949095179092171717909117909117908a16175b9998505050505050505050565b6000620fffff8262ffffff161115613f9957604051631c07203f60e01b815260040160405180910390fd5b700fffff0000000000000000000000000000198316700fffff0000000000000000000000000000607084901b1617611586565b600080613fd884612f49565b62ffffff16905080156131c85760008361ffff16613ff586612c52565b62ffffff16029050606460638280028402016131c3565b60008161ffff1661401c84612ebc565b61ffff16026402540be40002905092915050565b60008060008360000361404c5750600160801b91506107359050565b5082600081121561405e579015906000035b6210000081101561424e57600160801b9250846001600160801b0381111561408857911591600019045b60018216156140995792830260801c925b800260801c60028216156140af5792830260801c925b800260801c60048216156140c55792830260801c925b800260801c60088216156140db5792830260801c925b800260801c60108216156140f15792830260801c925b800260801c60208216156141075792830260801c925b800260801c604082161561411d5792830260801c925b8002608090811c908216156141345792830260801c925b800260801c61010082161561414b5792830260801c925b800260801c6102008216156141625792830260801c925b800260801c6104008216156141795792830260801c925b800260801c6108008216156141905792830260801c925b800260801c6110008216156141a75792830260801c925b800260801c6120008216156141be5792830260801c925b800260801c6140008216156141d55792830260801c925b800260801c6180008216156141ec5792830260801c925b800260801c620100008216156142045792830260801c925b800260801c6202000082161561421c5792830260801c925b800260801c620400008216156142345792830260801c925b800260801c6208000082161561424c5792830260801c925b505b8260000361427957604051631dba598d60e11b81526004810186905260248101859052604401611802565b81614284578261277c565b61277c83600019615f52565b6000620fffff8262ffffff1611156142bb57604051631c07203f60e01b815260040160405180910390fd5b7fffffffffffffffffffffffffff00000fffffffffffffffffffffffffffffffff831672fffff000000000000000000000000000000000608484901b1617611586565b60008061430a83614703565b90507fffffffffff0000000000ffffffffffffffffffffffffffffffffffffffffffff84167affffffffff0000000000000000000000000000000000000000000060b083901b16176122b3565b806001600160801b03811681146133bf57604051632f45db3d60e21b815260040160405180910390fd5b60008161438d81614bae565b670de0b6b3a7640000670de0b6b3a763ffff6001600160801b03868116908616020104949350505050565b600060ff831684811b9061ffff6101008290031686901c90612c489087906001901b86858561518e565b60008060006143f1868661523a565b9150915081600014614407578360ff1682901c92505b801561444757600160ff85161b811061443357604051638e471a8960e01b815260040160405180910390fd5b8360ff166101000361ffff1681901b830192505b50509392505050565b60006001600160801b038316608084901c61277c828286615259565b60008061ffff600884901c1660ff8085169081146144c157600082815260028701602052604081205493506144a184836152c4565b905060001981146144bf5760089290921b9091179250610735915050565b505b5060ff80821690600883901c90821461453b57600081815260018801602052604081205494506144f185846152c4565b9050600019811461453957600882901b8117600081815260028a01602052604090205495509350614521856152d3565b60ff1660088560001c901b1795505050505050610735565b505b60ff818116925082146145ab5786549350600061455885846152c4565b905060001981146145a95760008181526001890160205260409020549450905080614582856152d3565b60ff16600883901b17600081815260028a01602052604090205495509350614521856152d3565b505b5060009695505050505050565b60008061ffff600884901c1660ff8416801561460b57600082815260028701602052604081205493506145eb848361536f565b905060001981146146095760089290921b9091179250610735915050565b505b5060ff8116600882901c811561466a5760008181526001880160205260408120549450614638858461536f565b9050600019811461466857600882901b8117600081815260028a016020526040902054955093506145218561537f565b505b60ff8116915081156146d957865493506000614686858461536f565b905060001981146146d757600081815260018901602052604090205494509050806146b08561537f565b60ff16600883901b17600081815260028a016020526040902054955093506145218561537f565b505b5062ffffff9695505050505050565b600060d882901c610735565b60006107358260d01c60ff1690565b8064ffffffffff811681146133bf576040516350dbfc8760e11b815260040160405180910390fd5b6000806147378461286d565b90508062ffffff168362ffffff1611614752578281036122b3565b90910392915050565b64ffffffffff841662ffffff84811682029184821681029184160261477f886148b6565b6147899084615c78565b9250614794886148cc565b61479e9083615c78565b91506147a9886148e2565b6147b39082615c78565b9050955095509592505050565b60d082901b7aff000000000000000000000000000000000000000000000000000016609084901b79ffffffffffffffff00000000000000000000000000000000000016605086901b71ffffffffffffffff0000000000000000000016601088901b69ffffffffffffffff00001661ffff8a161717171760d882901b7fffffffffff00000000000000000000000000000000000000000000000000000016811761299b565b8161486e81614891565b818461ffff6000198601811690811061488957614889615bcf565b015550505050565b8061ffff166000036117c55760405163944e113960e01b815260040160405180910390fd5b60006107358260101c67ffffffffffffffff1690565b60006107358260501c67ffffffffffffffff1690565b60006107358260901c67ffffffffffffffff1690565b6000808080614908600186615f66565b61ffff16905060008060008961ffff1690505b8385116149c657600060016149308688615ebf565b901c9050888183089a508b61ffff808d1690811061495057614950615bcf565b0154935061495d84612ec8565b92508964ffffffffff168364ffffffffff16111561498757614980600182615ed2565b94506149c0565b8964ffffffffff168364ffffffffff1610156149af576149a8816001615ebf565b95506149c0565b838497509750505050505050614a41565b5061491b565b8164ffffffffff168964ffffffffff161015614a17578961ffff166000036149ec578799505b8a61ffff6000198c018116908110614a0657614a06615bcf565b015483965096505050505050614a41565b8760018b089950828b61ffff808d16908110614a3557614a35615bcf565b01549650965050505050505b94509492505050565b600080600080614a59886148b6565b67ffffffffffffffff1690506000614a70896148cc565b67ffffffffffffffff1690506000614a878a6148e2565b67ffffffffffffffff1690508664ffffffffff16600003614aae5791945092509050614ba4565b6000614ab98a6148b6565b67ffffffffffffffff1690506000614ad08b6148cc565b67ffffffffffffffff1690506000614ae78c6148e2565b67ffffffffffffffff1690508a64ffffffffff16600003614b125791975095509350614ba492505050565b6000614b2864ffffffffff808d16908e16615ebf565b9050808b64ffffffffff1685028d64ffffffffff1689020181614b4d57614b4d615c02565b049950808b64ffffffffff1684028d64ffffffffff1688020181614b7357614b73615c02565b049850808b64ffffffffff1683028d64ffffffffff1687020181614b9957614b99615c02565b049750505050505050505b9450945094915050565b67016345785d8a0000816001600160801b031611156117c557604051638630bc6b60e01b815260040160405180910390fd5b6000806000614bef868661523a565b91509150612c48868686858561518e565b600081600103614c135750607f19919050565b81600003614c345760405163125946cf60e11b815260040160405180910390fd5b60019190911c9060006f800000000000000000000000000000008310614c5c57506001614c77565b5060001982600160fe1b81614c7357614c73615c02565b0492505b6000614c86607f85901c61537f565b707f80000000000000000000000000000000607f82901b16935060ff16905083811c6f800000000000000000000000000000008114614d02576f400000000000000000000000000000005b6000811315614d0057908002607f1c90600160801b8210614cf8579384019360019190911c905b60011d614cd1565b505b50500260011b919050565b60008080614d258460581c67ffffffffffffffff1690565b9250614d3b8460181c67ffffffffffffffff1690565b91505062ffffff831672ffffffffffffffffffffffffffffffffffffff841180614d765750670de0b6b3a76400008367ffffffffffffffff16115b80614d925750670de0b6b3a76400008267ffffffffffffffff16115b1561137b57604051637752557f60e11b815260040160405180910390fd5b6000806001600160801b038516608086901c82614dce838389615259565b905080600003614de8575060009350839250614a41915050565b6000614df48a89614450565b9050801580614e01575086155b15614e1d57614e0f8261541a565b899550955050505050614a41565b614e28828883614be0565b95506000614e3787838a61548c565b905080831115614ed6576000614e4d8285615ed2565b9050600160801b8110614e8e57608081901c858111614e6c5780614e6e565b855b9050614e7a8187615ed2565b9550614e8a608082901b83615ed2565b9150505b898110614ec2576000614ea18b83615f52565b9050868111614eb05780614eb2565b865b9050614ebe8188615ed2565b9650505b608085901b6001600160801b038716179a50505b7d09745258e83de0d0f4e400fce79aca44773dd596d31a6d336ca2a775b611614f08614f028d8d61243a565b8b614450565b1115614f275760405163a2d7652760e01b815260040160405180910390fd5b50949997985050505050505050565b600081600003614f4857506000612c48565b6001600160801b038416608085901c600080614f7a61075d614f6a8d8b61243a565b88614f75818c615ebf565b613445565b91509150836001600160801b0316826001600160801b03161115614fdd576000614fc0614fa78c8c613167565b614fb18487615cb9565b6001600160801b0316906154a9565b9050614fd5816001600160801b031660801b90565b95505061501d565b826001600160801b0316816001600160801b0316111561501d5760006150106150068c8c613167565b614fb18588615cb9565b6001600160801b03169550505b505050509695505050505050565b8162ffffff168162ffffff161080156150475750608083901b15155b8061506c57508162ffffff168162ffffff1611801561506c57506001600160801b0383115b156109105760405163227bd87160e21b815262ffffff82166004820152602401611802565b61ffff600882901c166000818152600284016020526040812054909190600160ff85161b8117808214613553576000838152600287016020526040812082905582900361354757600883901c6000818152600180890160205260408220805460ff88169290921b821790559350839003613545578654600160ff83161b1787555060019350505050610735565b600080600052602060008351602085016000875af1905080801561515f573d80156151525760016000511483169250615159565b843b151592505b5061516f565b3d1561516f573d6000803e3d6000fd5b50806109105760405163197138bd60e11b815260040160405180910390fd5b6000816000036151af578383816151a7576151a7615c02565b04905061277c565b8382106151cf576040516313eae71560e01b815260040160405180910390fd5b600084868809600186198101871660008190038190049091018683119095039490940294038390049390931760029290940460038102831880820284030280820284030280820284030280820284030280820284030290810290920390910292909202949350505050565b6000806000198385098385029250828110838203039150509250929050565b6000831561529457508083028184828161527557615275615c02565b0414615294576040516363f1e01f60e01b815260040160405180910390fd5b82156115865760809290921b91820182811015611586576040516363f1e01f60e01b815260040160405180910390fd5b600061158683600184016154ea565b60008160801b80156152e757608091508092505b8260401b905080156152fa579150604001815b8260201b9050801561530d579150602001815b8260101b90508015615320579150601001815b8260081b90508015615333579150600801815b8260041b90508015615346579150600401815b8260021b90508015615359579150600201815b508160011b15615367576001015b60ff03919050565b6000611586836000198401615518565b60006001600160801b038211156153985750608090811c905b67ffffffffffffffff8211156153b057604091821c91015b63ffffffff8211156153c457602091821c91015b61ffff8211156153d657601091821c91015b60ff8211156153e757600891821c91015b600f8211156153f857600491821c91015b600382111561540957600291821c91015b60018211156133bf57600101919050565b60008160000361542c57506000919050565b60006154378361537f565b600181811c607f1681811b9086901c01811c80860401811c80860401811c80860401811c80860401811c80860401811c80860401901c9384900493925060ff1690508282106154865782611586565b50919050565b6000615499848484614be0565b9050818061311e5761311e615c02565b6000816154b581614bae565b6ec097ce7bc90715b34b9f1000000000806001600160801b03868116908616908102670de0b6b3a764000091909101026131c3565b60ff81169190911c906000821561550e5781615505846152d3565b0160ff16611586565b5060001992915050565b60ff8181031691821b91600090831561553e57806155358561537f565b60ff16036122b3565b506000199392505050565b6001600160a01b03811681146117c557600080fd5b6000806040838503121561557157600080fd5b823561557c81615549565b946020939093013593505050565b60005b838110156155a557818101518382015260200161558d565b50506000910152565b60208152600082518060208401526155cd81604085016020870161558a565b601f01601f19169190910160400192915050565b803562ffffff811681146133bf57600080fd5b60006020828403121561560657600080fd5b611586826155e1565b60008083601f84011261562157600080fd5b50813567ffffffffffffffff81111561563957600080fd5b6020830191508360208260051b8501011115612eb557600080fd5b6000806000806000806080878903121561566d57600080fd5b863561567881615549565b9550602087013561568881615549565b9450604087013567ffffffffffffffff808211156156a557600080fd5b6156b18a838b0161560f565b909650945060608901359150808211156156ca57600080fd5b506156d789828a0161560f565b979a9699509497509295939492505050565b60008083601f8401126156fb57600080fd5b50813567ffffffffffffffff81111561571357600080fd5b602083019150836020828501011115612eb557600080fd5b60008060006040848603121561574057600080fd5b83359250602084013567ffffffffffffffff81111561575e57600080fd5b61576a868287016156e9565b9497909650939450505050565b6000806000806060858703121561578d57600080fd5b843561579881615549565b9350602085013567ffffffffffffffff8111156157b457600080fd5b6157c08782880161560f565b90945092505060408501356157d481615549565b939692955090935050565b600081518084526020808501945080840160005b8381101561580f578151875295820195908201906001016157f3565b509495945050505050565b83815282602082015260606040820152600061277c60608301846157df565b803561ffff811681146133bf57600080fd5b600080600080600080600080610100898b03121561586857600080fd5b61587189615839565b975061587f60208a01615839565b965061588d60408a01615839565b955061589b60608a01615839565b94506158a960808a016155e1565b93506158b760a08a01615839565b92506158c560c08a016155e1565b91506158d360e08a016155e1565b90509295985092959890939650565b600080600080604085870312156158f857600080fd5b843567ffffffffffffffff8082111561591057600080fd5b61591c8883890161560f565b9096509450602087013591508082111561593557600080fd5b506159428782880161560f565b95989497509550505050565b60208152600061158660208301846157df565b803580151581146133bf57600080fd5b6000806040838503121561598457600080fd5b61598d83615961565b9150602083013561599d81615549565b809150509250929050565b600080600080600080600060e0888a0312156159c357600080fd5b6159cc88615839565b96506159da60208901615839565b95506159e860408901615839565b94506159f660608901615839565b9350615a04608089016155e1565b9250615a1260a08901615839565b9150615a2060c089016155e1565b905092959891949750929550565b600060208284031215615a4057600080fd5b813564ffffffffff8116811461158657600080fd5b60008060408385031215615a6857600080fd5b615a7183615961565b9150612eb2602084016155e1565b60008060408385031215615a9257600080fd5b82356001600160801b0381168114615aa957600080fd5b9150612eb260208401615961565b600060208284031215615ac957600080fd5b5035919050565b600060208284031215615ae257600080fd5b61158682615839565b60008060408385031215615afe57600080fd5b8235615aa981615549565b60008060408385031215615b1c57600080fd5b823561598d81615549565b60008060008060608587031215615b3d57600080fd5b8435615b4881615549565b935060208501359250604085013567ffffffffffffffff811115615b6b57600080fd5b615942878288016156e9565b600060208284031215615b8957600080fd5b815161158681615549565b634e487b7160e01b600052604160045260246000fd5b604081526000615bbd60408301856157df565b828103602084015261277c81856157df565b634e487b7160e01b600052603260045260246000fd5b600060208284031215615bf757600080fd5b813561158681615549565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b64ffffffffff8281168282160390808211156131c8576131c8615c18565b67ffffffffffffffff818116838216028082169190828114615c7057615c70615c18565b505092915050565b67ffffffffffffffff8181168382160190808211156131c8576131c8615c18565b6001600160801b038181168382160190808211156131c8576131c8615c18565b6001600160801b038281168282160390808211156131c8576131c8615c18565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115615d0b57600080fd5b8260051b80836020870137939093016020019392505050565b604081526000615d38604083018688615cd9565b828103602084015261299b818587615cd9565b604081526000615d5f604083018587615cd9565b8281036020840152612c4881856157df565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b03808a168352808916602084015280881660408401525085606083015284608083015260c060a0830152613f6160c083018486615d71565b60008251615ded81846020870161558a565b9190910192915050565b600060208284031215615e0957600080fd5b5051919050565b60006001600160a01b03808a168352808916602084015280881660408401525060a06060830152615e4560a083018688615cd9565b8281036080840152615e58818587615cd9565b9a9950505050505050505050565b83815260406020820152600061277c604083018486615d71565b60006001600160a01b03808816835280871660208401525060806040830152615ead608083018587615cd9565b90508260608301529695505050505050565b8082018082111561073557610735615c18565b8181038181111561073557610735615c18565b64ffffffffff8181168382160190808211156131c8576131c8615c18565b600061ffff80841680615f1857615f18615c02565b92169190910692915050565b600082615f3357615f33615c02565b600160ff1b821460001984141615615f4d57615f4d615c18565b500590565b600082615f6157615f61615c02565b500490565b61ffff8281168282160390808211156131c8576131c8615c1856fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212205c46ddf7fae13b1a3ab57f51b64f40b8f553ad2c941966657664b03b6e9edb5364736f6c63430008140033000000000000000000000000b43120c4745967fa9b93e79c149e66b0f2d6fe0c
0x000000000000000000000000b43120c4745967fa9b93e79c149e66b0f2d6fe0c
----Decoded View------------Arg [0] : factory_ (address): 0xb43120c4745967fa9b93E79C149E66B0f2D6Fe0c
----Encoded View------------Arg [0] : 0x000000000000000000000000b43120c4745967fa9b93e79c149e66b0f2d6fe0c