[ { "inputs": [ { "components": [ { "internalType": "contract IVault", "name": "vault", "type": "address" }, { "internalType": "contract IProtocolFeePercentagesProvider", "name": "protocolFeeProvider", "type": "address" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "contract IERC20[]", "name": "tokens", "type": "address[]" }, { "internalType": "contract IRateProvider[]", "name": "rateProviders", "type": "address[]" }, { "internalType": "uint256[]", "name": "tokenRateCacheDurations", "type": "uint256[]" }, { "internalType": "bool", "name": "exemptFromYieldProtocolFeeFlag", "type": "bool" }, { "internalType": "uint256", "name": "amplificationParameter", "type": "uint256" }, { "internalType": "uint256", "name": "swapFeePercentage", "type": "uint256" }, { "internalType": "uint256", "name": "pauseWindowDuration", "type": "uint256" }, { "internalType": "uint256", "name": "bufferPeriodDuration", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "string", "name": "version", "type": "string" } ], "internalType": "struct ComposableStablePool.NewPoolParams", "name": "params", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "startValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "startTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "AmpUpdateStarted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "currentValue", "type": "uint256" } ], "name": "AmpUpdateStopped", "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": false, "internalType": "bool", "name": "paused", "type": "bool" } ], "name": "PausedStateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "feeType", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "protocolFeePercentage", "type": "uint256" } ], "name": "ProtocolFeePercentageCacheUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "RecoveryModeStateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "swapFeePercentage", "type": "uint256" } ], "name": "SwapFeePercentageChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenIndex", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "rate", "type": "uint256" } ], "name": "TokenRateCacheUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenIndex", "type": "uint256" }, { "indexed": true, "internalType": "contract IRateProvider", "name": "provider", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "cacheDuration", "type": "uint256" } ], "name": "TokenRateProviderSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DELEGATE_PROTOCOL_SWAP_FEES_SENTINEL", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "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": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "disableRecoveryMode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "enableRecoveryMode", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "selector", "type": "bytes4" } ], "name": "getActionId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getActualSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAmplificationParameter", "outputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bool", "name": "isUpdating", "type": "bool" }, { "internalType": "uint256", "name": "precision", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getAuthorizer", "outputs": [ { "internalType": "contract IAuthorizer", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getBptIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDomainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getLastJoinExitData", "outputs": [ { "internalType": "uint256", "name": "lastJoinExitAmplification", "type": "uint256" }, { "internalType": "uint256", "name": "lastPostJoinExitInvariant", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMinimumBpt", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getNextNonce", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPausedState", "outputs": [ { "internalType": "bool", "name": "paused", "type": "bool" }, { "internalType": "uint256", "name": "pauseWindowEndTime", "type": "uint256" }, { "internalType": "uint256", "name": "bufferPeriodEndTime", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPoolId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "feeType", "type": "uint256" } ], "name": "getProtocolFeePercentageCache", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getProtocolFeesCollector", "outputs": [ { "internalType": "contract IProtocolFeesCollector", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getProtocolSwapFeeDelegation", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getRateProviders", "outputs": [ { "internalType": "contract IRateProvider[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getScalingFactors", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getSwapFeePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" } ], "name": "getTokenRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" } ], "name": "getTokenRateCache", "outputs": [ { "internalType": "uint256", "name": "rate", "type": "uint256" }, { "internalType": "uint256", "name": "oldRate", "type": "uint256" }, { "internalType": "uint256", "name": "duration", "type": "uint256" }, { "internalType": "uint256", "name": "expires", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getVault", "outputs": [ { "internalType": "contract IVault", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "inRecoveryMode", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [], "name": "isExemptFromYieldProtocolFee", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" } ], "name": "isTokenExemptFromYieldProtocolFee", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "uint256", "name": "protocolSwapFeePercentage", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "name": "onExitPool", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "uint256", "name": "protocolSwapFeePercentage", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "name": "onJoinPool", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "enum IVault.SwapKind", "name": "kind", "type": "uint8" }, { "internalType": "contract IERC20", "name": "tokenIn", "type": "address" }, { "internalType": "contract IERC20", "name": "tokenOut", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "internalType": "struct IPoolSwapStructs.SwapRequest", "name": "swapRequest", "type": "tuple" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "indexIn", "type": "uint256" }, { "internalType": "uint256", "name": "indexOut", "type": "uint256" } ], "name": "onSwap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "uint256", "name": "protocolSwapFeePercentage", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "name": "queryExit", "outputs": [ { "internalType": "uint256", "name": "bptIn", "type": "uint256" }, { "internalType": "uint256[]", "name": "amountsOut", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "poolId", "type": "bytes32" }, { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "balances", "type": "uint256[]" }, { "internalType": "uint256", "name": "lastChangeBlock", "type": "uint256" }, { "internalType": "uint256", "name": "protocolSwapFeePercentage", "type": "uint256" }, { "internalType": "bytes", "name": "userData", "type": "bytes" } ], "name": "queryJoin", "outputs": [ { "internalType": "uint256", "name": "bptOut", "type": "uint256" }, { "internalType": "uint256[]", "name": "amountsIn", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "bytes", "name": "poolConfig", "type": "bytes" } ], "name": "setAssetManagerPoolConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "swapFeePercentage", "type": "uint256" } ], "name": "setSwapFeePercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "duration", "type": "uint256" } ], "name": "setTokenRateCacheDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "rawEndValue", "type": "uint256" }, { "internalType": "uint256", "name": "endTime", "type": "uint256" } ], "name": "startAmplificationParameterUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stopAmplificationParameterUpdate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updateProtocolFeePercentageCache", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" } ], "name": "updateTokenRateCache", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "version", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" } ]
6104e06040523480156200001257600080fd5b5060405162007dcc38038062007dcc833981016040819052620000359162001a28565b6020810151600019620000488362000ca1565b620000538462000cda565b8461010001518560000151600087604001518860600151620000808a608001513062000d2560201b60201c565b8a60800151516001016001600160401b03811180156200009f57600080fd5b50604051908082528060200260200182016040528015620000ca578160200160208202803683370190505b508b61012001518c61014001518d61016001518e6101800151828289898d85336001600160a01b031660001b8480604051806040016040528060018152602001603160f81b815250878781600390805190602001906200012c92919062001711565b5080516200014290600490602084019062001711565b50506005805460ff19166012179055508151602092830120608052805191012060a052507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60c05260e0526001600160601b0319606091821b81166101005291901b166101205250620001c19050630966018083111561019462000ebf565b620001d66301e1338082111561019562000ebf565b4290910161014081905201610160528551620001f8906002111560c862000ebf565b620002126200020662000ed4565b8751111560c962000ebf565b620002288662000ed960201b620015b01760201c565b620002338462000ee5565b6040516309b2760f60e01b81526000906001600160a01b038c16906309b2760f9062000264908d9060040162001c9c565b602060405180830381600087803b1580156200027f57600080fd5b505af115801562000294573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ba9190620019f0565b604051633354e3e960e11b81529091506001600160a01b038c16906366a9c7d290620002ef9084908b908b9060040162001c00565b600060405180830381600087803b1580156200030a57600080fd5b505af11580156200031f573d6000803e3d6000fd5b505050508061018081815250508a6001600160a01b031663d2946c2b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200036657600080fd5b505afa1580156200037b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a1919062001a09565b60601b6001600160601b0319166101a05250620003d3995050506001891015965061012c955062000ebf945050505050565b620003e661138882111561012d62000ebf565b600062000401826103e862000f7960201b620015ba1760201c565b90506200040e8162000fa8565b5050805151620004236002821160c862000ebf565b620004426001820383602001515162000fe760201b620015e51760201c565b6101c0819052815180516000906200045657fe5b60200260200101516001600160a01b0316610200816001600160a01b031660601b8152505081600001516001815181106200048d57fe5b60200260200101516001600160a01b0316610220816001600160a01b031660601b815250508160000151600281518110620004c457fe5b60200260200101516001600160a01b0316610240816001600160a01b031660601b8152505060038111620004fa57600062000513565b8151805160039081106200050a57fe5b60200260200101515b60601b6001600160601b0319166102605260048111620005355760006200054e565b8151805160049081106200054557fe5b60200260200101515b60601b6001600160601b03191661028052600581116200057057600062000589565b8151805160059081106200058057fe5b60200260200101515b60601b6001600160601b0319166102a05281518051620005c29190600090620005ae57fe5b602002602001015162000ff660201b60201c565b6102c05281518051620005dc91906001908110620005ae57fe5b6102e05281518051620005f691906002908110620005ae57fe5b61030052600381116200060b57600062000621565b620006218260000151600381518110620005ae57fe5b6103205260048111620006365760006200064c565b6200064c8260000151600481518110620005ae57fe5b61034052600581116200066157600062000677565b620006778260000151600581518110620005ae57fe5b61036052815151600019015b600081118015620006b457508251805130919083908110620006a157fe5b60200260200101516001600160a01b0316115b15620006c4576000190162000683565b6101e08190528251516060906001600160401b0381118015620006e657600080fd5b5060405190808252806020026020018201604052801562000711578160200160208202803683370190505b5090506000805b8551518110156200084d57838110156200077857856020015181815181106200073d57fe5b60200260200101518382815181106200075257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506200079a565b8381146200079457856020015160018203815181106200073d57fe5b62000844565b620007e360006001600160a01b0316848381518110620007b657fe5b60200260200101516001600160a01b031614158260060184620010c560201b620015f2179092919060201c565b9150856040015180156200081e575060006001600160a01b03168382815181106200080a57fe5b60200260200101516001600160a01b031614155b1562000844576200084160018284620010c560201b620015f2179092919060201c565b91505b60010162000718565b506040850151151560f81b61046052815182906000906200086a57fe5b60200260200101516001600160a01b0316610380816001600160a01b031660601b81525050816001815181106200089d57fe5b60200260200101516001600160a01b03166103a0816001600160a01b031660601b8152505081600281518110620008d057fe5b60200260200101516001600160a01b03166103c0816001600160a01b031660601b815250506003825111620009075760006200091e565b816003815181106200091557fe5b60200260200101515b60601b6001600160601b0319166103e05281516004106200094157600062000958565b816004815181106200094f57fe5b60200260200101515b60601b6001600160601b0319166104005281516005106200097b57600062000992565b816005815181106200098957fe5b60200260200101515b60601b6001600160601b0319166104205261044052505082515160208085015151604086015151620009d395509293509190620010ee811b6200161917901c565b8051606090620009e4903062000d25565b8051909150600019015b60008111801562000a245750306001600160a01b031682828151811062000a1157fe5b60200260200101516001600160a01b0316115b1562000a345760001901620009ee565b6000805b84515181101562000b4d578281141562000a5157600191505b60208501518051828401916000918490811062000a6a57fe5b60200260200101516001600160a01b03161462000b435762000ac4818760200151848151811062000a9757fe5b60200260200101518860400151858151811062000ab057fe5b60200260200101516200110e60201b60201c565b8560200151828151811062000ad557fe5b60200260200101516001600160a01b0316817fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec48860400151858151811062000b1957fe5b602002602001015160405162000b30919062001cb1565b60405180910390a362000b438162001209565b5060010162000a38565b5050505050600019811460f881901b6104a0526001600160601b0319606084901b166104805262000b8083600262001248565b62000b8d83600362001248565b801562000ba75762000ba183600062001248565b62000c66565b60405163178b2b9360e21b815262000c3b906001600160a01b03851690635e2cae4c9062000bdb9060009060040162001cb1565b60206040518083038186803b15801562000bf457600080fd5b505afa15801562000c09573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c2f9190620019f0565b83111561025862000ebf565b600060008051602062007dac8339815191528360405162000c5d919062001cb1565b60405180910390a25b8062000c73578162000c76565b60005b6104c0525050506101a0810151805162000c9991600d9160209091019062001711565b505062001d23565b62000cab62001792565b6040518060600160405280836080015181526020018360a0015181526020018360c0015181525090505b919050565b62000ce4620017b3565b604051806060016040528062000d0584608001513062000d2560201b60201c565b81526020018360a0015181526020018360e0015115158152509050919050565b606082516001016001600160401b038111801562000d4257600080fd5b5060405190808252806020026020018201604052801562000d6d578160200160208202803683370190505b50905082516000141562000db057818160008151811062000d8a57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505062000eb9565b82515b60008111801562000dec5750826001600160a01b031684600183038151811062000dd957fe5b60200260200101516001600160a01b0316115b1562000e395783600182038151811062000e0257fe5b602002602001015182828151811062000e1757fe5b6001600160a01b03909216602092830291909101909101526000190162000db3565b60005b8181101562000e885784818151811062000e5257fe5b602002602001015183828151811062000e6757fe5b6001600160a01b039092166020928302919091019091015260010162000e3c565b508282828151811062000e9757fe5b60200260200101906001600160a01b031690816001600160a01b031681525050505b92915050565b8162000ed05762000ed081620013f3565b5050565b600690565b8062000ed08162001408565b62000efe62000ef36200148f565b82101560cb62000ebf565b62000f1762000f0c62001498565b82111560ca62000ebf565b62000f398160c0603f600854620014a460201b6200163617909392919060201c565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc9062000f6e90839062001cb1565b60405180910390a150565b600082820262000fa184158062000f9957508385838162000f9657fe5b04145b600362000ebf565b9392505050565b62000fb681804280620014c9565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a02338160405162000f6e919062001cb1565b62000ed0828214606762000ebf565b60006001600160a01b0382163014156200101a5750670de0b6b3a764000062000cd5565b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156200105657600080fd5b505afa1580156200106b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001091919062001bdd565b60ff1690506000620010b06012836200153c60201b6200165e1760201c565b600a0a670de0b6b3a764000002949350505050565b60006001821b1984168284620010dd576000620010e0565b60015b60ff16901b17949350505050565b6200110982841480156200110157508183145b606762000ebf565b505050565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200114a57600080fd5b505afa1580156200115f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011859190620019f0565b6000858152600a6020908152604090912054919250620011b4908290849086906200167462001554821b17901c565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac90620011fa90859062001cb1565b60405180910390a25050505050565b6000818152600a60209081526040909120549062001232908290620016ac620015b0821b17901c565b6000928352600a60205260409092209190915550565b604051631a7c326360e01b81526000906001600160a01b03841690631a7c3263906200127990859060040162001cb1565b60206040518083038186803b1580156200129257600080fd5b505afa158015620012a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012cd9190620019f0565b9050816200131157620012eb81620015db60201b620016c41760201c565b600b80546001600160401b0319166001600160401b0392909216919091179055620013c5565b600282141562001367576200133181620015db60201b620016c41760201c565b600b80546001600160401b03929092166801000000000000000002600160401b600160801b0319909216919091179055620013c5565b6003821415620013b8576200138781620015db60201b620016c41760201c565b600b80546001600160401b0392909216600160801b02600160801b600160c01b0319909216919091179055620013c5565b620013c56101bb620013f3565b8160008051602062007dac83398151915282604051620013e6919062001cb1565b60405180910390a2505050565b62001405816210905360ea1b620015f9565b50565b600281511015620014195762001405565b6000816000815181106200142957fe5b602002602001015190506000600190505b8251811015620011095760008382815181106200145357fe5b6020026020010151905062001484816001600160a01b0316846001600160a01b031610606562000ebf60201b60201c565b91506001016200143a565b64e8d4a5100090565b67016345785d8a000090565b6000620014b38484846200165a565b506001901b60001901811b1992909216911b1790565b620014e38160c06040620016b560201b620016e11760201c565b620014fd8360806040620016b560201b620016e11760201c565b6200151685604080620016b560201b620016e11760201c565b620015308760006040620016b560201b620016e11760201c565b17171760095550505050565b60006200154e83831115600162000ebf565b50900390565b600062001569606084901c1561014962000ebf565b620015a842830160e06020620015928660c083838c8c6000606062001636620014a4871b17861c565b620014a460201b6200163617909392919060201c565b949350505050565b600062000eb9620015c183620016ca565b60608085620014a460201b6200163617909392919060201c565b6000620015f56001600160401b038311156101ba62000ebf565b5090565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b6200166b6101008310606462000ebf565b620016a4600182101580156200169c57506200169860ff8461010003620016ea60201b620016f41760201c565b8211155b606462000ebf565b6200110983821c156101b462000ebf565b6000620016c48484846200165a565b50501b90565b600062000eb960006060846200170260201b6200170a179092919060201c565b6000818310620016fb578162000fa1565b5090919050565b6001901b6000190191901c1690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200175457805160ff191683800117855562001784565b8280016001018555821562001784579182015b828111156200178457825182559160200191906001019062001767565b50620015f5929150620017d6565b60405180606001604052806060815260200160608152602001606081525090565b604051806060016040528060608152602001606081526020016000151581525090565b5b80821115620015f55760008155600101620017d7565b805162000eb98162001d0d565b600082601f8301126200180b578081fd5b8151620018226200181c8262001ce1565b62001cba565b8181529150602080830190848101818402860182018710156200184457600080fd5b60005b84811015620018705781516200185d8162001d0d565b8452928201929082019060010162001847565b505050505092915050565b600082601f8301126200188c578081fd5b81516200189d6200181c8262001ce1565b818152915060208083019084810181840286018201871015620018bf57600080fd5b60005b8481101562001870578151620018d88162001d0d565b84529282019290820190600101620018c2565b600082601f830112620018fc578081fd5b81516200190d6200181c8262001ce1565b8181529150602080830190848101818402860182018710156200192f57600080fd5b60005b84811015620018705781518452928201929082019060010162001932565b8051801515811462000eb957600080fd5b600082601f83011262001972578081fd5b81516001600160401b0381111562001988578182fd5b60206200199e601f8301601f1916820162001cba565b92508183528481838601011115620019b557600080fd5b60005b82811015620019d5578481018201518482018301528101620019b8565b82811115620019e75760008284860101525b50505092915050565b60006020828403121562001a02578081fd5b5051919050565b60006020828403121562001a1b578081fd5b815162000fa18162001d0d565b60006020828403121562001a3a578081fd5b81516001600160401b038082111562001a51578283fd5b81840191506101c080838703121562001a68578384fd5b62001a738162001cba565b905062001a818684620017ed565b815262001a928660208501620017ed565b602082015260408301518281111562001aa9578485fd5b62001ab78782860162001961565b60408301525060608301518281111562001acf578485fd5b62001add8782860162001961565b60608301525060808301518281111562001af5578485fd5b62001b0387828601620017fa565b60808301525060a08301518281111562001b1b578485fd5b62001b29878286016200187b565b60a08301525060c08301518281111562001b41578485fd5b62001b4f87828601620018eb565b60c08301525062001b648660e0850162001950565b60e0820152610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018062001ba687828601620017ed565b908201526101a0838101518381111562001bbe578586fd5b62001bcc8882870162001961565b918301919091525095945050505050565b60006020828403121562001bef578081fd5b815160ff8116811462000fa1578182fd5b60006060820185835260206060818501528186518084526080860191508288019350845b8181101562001c4c5762001c39855162001d01565b8352938301939183019160010162001c24565b505084810360408601528551808252908201925081860190845b8181101562001c8e5762001c7b835162001d01565b8552938301939183019160010162001c66565b509298975050505050505050565b602081016003831062001cab57fe5b91905290565b90815260200190565b6040518181016001600160401b038111828210171562001cd957600080fd5b604052919050565b60006001600160401b0382111562001cf7578081fd5b5060209081020190565b6001600160a01b031690565b6001600160a01b03811681146200140557600080fd5b60805160a05160c05160e0516101005160601c6101205160601c6101405161016051610180516101a05160601c6101c0516101e0516102005160601c6102205160601c6102405160601c6102605160601c6102805160601c6102a05160601c6102c0516102e051610300516103205161034051610360516103805160601c6103a05160601c6103c05160601c6103e05160601c6104005160601c6104205160601c610440516104605160f81c6104805160601c6104a05160f81c6104c051615ed862001ed460003980610e4052508061091d52508061089d52806108c852806108f3525080610fef5280611277525080612b23525080611c87525080611c57525080611c27525080611bf7525080611bc7525080611b97525080612fb6525080612f86525080612f56525080612f26525080612ef6525080612ec6525080611f82525080611f40525080611efe525080611ebc525080611e7a525080611e385250806110805250806117395250806112d3525080610bff525080611b6b525080611b4752508061118052508061115c5250806110b8525080612d34525080612d76525080612d555250615ed86000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c806370464016116101de57806395d89b411161010f578063d2946c2b116100ad578063ddf4627b1161007c578063ddf4627b146106f6578063eb0f24d6146106fe578063ed24911d14610706578063f4b7964d1461070e57610383565b8063d2946c2b146106b5578063d505accf146106bd578063d5c096c4146106d0578063dd62ed3e146106e357610383565b8063aaabadc5116100e9578063aaabadc51461068a578063ab7759f114610692578063b35056b8146106a5578063b7b814fc146106ad57610383565b806395d89b411461065c578063a457c2d714610664578063a9059cbb1461067757610383565b80638456cb591161017c57806387ec68171161015657806387ec681714610619578063893d20e81461062c5780638d928af81461064157806390193b7c1461064957610383565b80638456cb59146105f6578063851c1bb3146105fe578063876f303b1461061157610383565b806377151bee116101b857806377151bee146105b05780637ecebe00146105b85780637f1260d1146105cb57806382687a56146105ee57610383565b8063704640161461056957806370a082311461057c57806374f3b0091461058f57610383565b80633644e515116102b857806354a844ba1161025657806355c676281161023057806355c67628146105215780636028bfd414610529578063679aefce1461054a5780636daccffa1461055257610383565b806354a844ba146104fe57806354dea00a1461050657806354fd4d501461051957610383565b8063395093511161029257806339509351146104ba5780633c975d51146104cd5780633f4ba83a146104e357806350dd6ed9146104eb57610383565b80633644e5151461049757806338e9922e1461049f57806338fff2d0146104b257610383565b80631c0de0511161032557806323b872dd116102ff57806323b872dd146104495780632df2c7c01461045c5780632f1a0bc91461046f578063313ce5671461048257610383565b80631c0de051146104085780631dd746ea1461041f578063238a2d591461043457610383565b8063095ea7b311610361578063095ea7b3146103ce5780630da0669c146103ee57806315b0015b146103f857806318160ddd1461040057610383565b806301ec954a1461038857806304842d4c146103b157806306fdde03146103b9575b600080fd5b61039b6103963660046158c7565b610721565b6040516103a89190615ce8565b60405180910390f35b61039b6107c7565b6103c16107d6565b6040516103a89190615dbe565b6103e16103dc366004615504565b61086c565b6040516103a89190615cc5565b6103f6610883565b005b6103e161091b565b61039b61093f565b610410610945565b6040516103a893929190615cd0565b61042761096e565b6040516103a89190615c8d565b61043c610978565b6040516103a89190615ba9565b6103e1610457366004615454565b610a13565b6103f661046a366004615400565b610a87565b6103f661047d366004615a16565b610aeb565b61048a610bce565b6040516103a89190615e29565b61039b610bd7565b6103f66104ad3660046159e6565b610be1565b61039b610bfd565b6103e16104c8366004615504565b610c21565b6104d5610c5c565b6040516103a8929190615e00565b6103f6610c87565b6103f66104f9366004615702565b610c99565b6103f6610cb7565b61039b610514366004615400565b610cc9565b6103c1610ce4565b61039b610d45565b61053c61053736600461561b565b610d58565b6040516103a8929190615dd1565b61039b610d8f565b61055a610dfb565b6040516103a893929190615dea565b61039b6105773660046159e6565b610e16565b61039b61058a366004615400565b610ecf565b6105a261059d36600461561b565b610eea565b6040516103a8929190615ca0565b6103e1610fed565b61039b6105c6366004615400565b611011565b6105de6105d9366004615400565b61101c565b6040516103a89493929190615e0e565b61039b61107e565b6103f66110a2565b61039b61060c3660046156be565b6110b4565b61039b611106565b61053c61062736600461561b565b611134565b61063461115a565b6040516103a89190615b95565b61063461117e565b61039b610657366004615400565b6111a2565b6103c16111bd565b6103e1610672366004615504565b61121e565b6103e1610685366004615504565b61125c565b610634611269565b6103e16106a0366004615400565b611273565b6103e16112ae565b6103f66112bf565b6106346112d1565b6103f66106cb366004615494565b6112f5565b6105a26106de36600461561b565b611380565b61039b6106f136600461541c565b6114a3565b61039b6114e0565b6103f66114e6565b61039b611512565b6103f661071c366004615504565b61151c565b6000846080015161074e61073361117e565b6001600160a01b0316336001600160a01b03161460cd611719565b610763610759610bfd565b82146101f4611719565b61076b611727565b61077d8484610778611737565b61175b565b6060610787611773565b905060008751600181111561079857fe5b146107af576107aa878787878561180c565b6107bc565b6107bc8787878785611865565b979650505050505050565b60006107d16118a0565b905090565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b60006108793384846118a7565b5060015b92915050565b61088b61190f565b61089361091b565b156108c3576108c37f00000000000000000000000000000000000000000000000000000000000000006000611984565b6108ee7f00000000000000000000000000000000000000000000000000000000000000006002611984565b6109197f00000000000000000000000000000000000000000000000000000000000000006003611984565b565b7f000000000000000000000000000000000000000000000000000000000000000090565b60025490565b6000806000610952611b28565b15925061095d611b45565b9150610967611b69565b9050909192565b60606107d1611773565b60606000610984611737565b905060608167ffffffffffffffff8111801561099f57600080fd5b506040519080825280602002602001820160405280156109c9578160200160208202803683370190505b50905060005b82811015610a0c576109e081611b8d565b8282815181106109ec57fe5b6001600160a01b03909216602092830291909101909101526001016109cf565b5091505090565b600080610a2085336114a3565b9050610a44336001600160a01b0387161480610a3c5750838210155b61019e611719565b610a4f858585611cb6565b336001600160a01b03861614801590610a6a57506000198114155b15610a7c57610a7c85338584036118a7565b506001949350505050565b610a8f611d96565b6000610a9a82611e34565b90506000610aa782611b8d565b9050610ac06001600160a01b0382161515610155611719565b6000828152600a6020526040812054610ad890611fc2565b9050610ae5838383611fd1565b50505050565b610af36120b4565b610b03600183101561012c611719565b610b1461138883111561012d611719565b6000610b20824261165e565b9050610b346201518082101561013d611719565b600080610b3f6120e2565b91509150610b50811561013e611719565b6000610b5e866103e86115ba565b90506000838211610b8d57610b88610b7962015180866115ba565b610b8384886115ba565b612156565b610ba7565b610ba7610b9d62015180846115ba565b610b8386886115ba565b9050610bb9600282111561013f611719565b610bc584834289612189565b50505050505050565b60055460ff1690565b60006107d1611512565b610be96120b4565b610bf16121d8565b610bfa816121eb565b50565b7f000000000000000000000000000000000000000000000000000000000000000090565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610879918590610c579086612264565b6118a7565b600c546000908190610c718160e9601761170a565b9250610c8081600060e961170a565b9150509091565b610c8f6120b4565b6109196000612276565b610ca16120b4565b610ca96121d8565b610cb382826122e9565b5050565b610cbf6120b4565b61091960016123de565b6000610cdc610cd783611e34565b612435565b90505b919050565b600d8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108625780601f1061083757610100808354040283529160200191610862565b6008546000906107d19060c0603f61170a565b60006060610d6e8651610d69611737565b6115e5565b610d83898989898989896124886124aa612513565b97509795505050505050565b60006060600080600080610da161263d565b9398509196509450925090506000610db98585612264565b90506000610dc56120e2565b5090506000848214610de057610ddb828961272d565b610de2565b835b9050610dee818461288f565b9850505050505050505090565b6000806000610e086120e2565b90949093506103e892509050565b6000610e206112ae565b15610e2d57506000610cdf565b81610e7957610e3a61091b565b610e64577f0000000000000000000000000000000000000000000000000000000000000000610e72565b600b5467ffffffffffffffff165b9050610cdf565b6002821415610ea15750600b5468010000000000000000900467ffffffffffffffff16610cdf565b6003821415610ec45750600b54600160801b900467ffffffffffffffff16610cdf565b610cdf6101bb6128e0565b6001600160a01b031660009081526020819052604090205490565b60608088610ef961073361117e565b610f04610759610bfd565b60606000610f11866128f0565b15610f3957610f1e61291f565b610f3089610f2a61093f565b88612932565b92509050610f8b565b610f41611727565b6060610f4b611773565b9050610f578a82612977565b610f7b8d8d8d8d8d610f676112ae565b610f71578d610f74565b60005b878e612488565b93509150610f8983826124aa565b505b610f958b826129e0565b81895167ffffffffffffffff81118015610fae57600080fd5b50604051908082528060200260200182016040528015610fd8578160200160208202803683370190505b509450945050505b5097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6000610cdc826111a2565b6000806000806000600a600061103188611e34565b81526020810191909152604001600020549050611052811515610155611719565b61105b816129ea565b9450611066816129f8565b935061107181612a06565b9597949650949392505050565b7f000000000000000000000000000000000000000000000000000000000000000090565b6110aa6120b4565b6109196001612276565b60007f0000000000000000000000000000000000000000000000000000000000000000826040516020016110e9929190615b52565b604051602081830303815290604052805190602001209050919050565b600080600061111361263d565b5050925092505061112d818361226490919063ffffffff16565b9250505090565b600060606111458651610d69611737565b610d8389898989898989612a28612a39612513565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b6001600160a01b031660009081526006602052604090205490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156108625780601f1061083757610100808354040283529160200191610862565b60008061122b33856114a3565b905080831061124557611240338560006118a7565b611252565b61125233858584036118a7565b5060019392505050565b6000610879338484611cb6565b60006107d1612aa2565b60007f00000000000000000000000000000000000000000000000000000000000000008015610cdc5750610cdc6112a983611e34565b612b1c565b6008546000906107d19060ff612b47565b6112c76120b4565b61091960006123de565b7f000000000000000000000000000000000000000000000000000000000000000090565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886113248c6111a2565b8960405160200161133a96959493929190615d10565b60405160208183030381529060405280519060200120905061136b8882611362878787612b51565b886101f8612b90565b6113768888886118a7565b5050505050505050565b6060808861138f61073361117e565b61139a610759610bfd565b6113a2611727565b60606113ac611773565b90506113b661093f565b61146357600060606113cb8d8d8d868b612be7565b915091506113e46113da6118a0565b83101560cc611719565b6113f660006113f16118a0565b612cc0565b6114098b6114026118a0565b8403612cc0565b6114138184612a39565b808a5167ffffffffffffffff8111801561142c57600080fd5b50604051908082528060200260200182016040528015611456578160200160208202803683370190505b5095509550505050610fe0565b61146d8882612977565b600060606114958d8d8d8d8d6114816112ae565b61148b578d61148e565b60005b898e612a28565b915091506114098b83612cc0565b60006114ad61117e565b6001600160a01b0316826001600160a01b031614156114cf575060001961087d565b6114d98383612cca565b905061087d565b60001981565b6114ee6120b4565b6000806114f96120e2565b9150915061150981610140611719565b610cb382612cf5565b60006107d1612d30565b6115246120b4565b61152c611d96565b600061153783611e34565b9050600061154482611b8d565b905061155d6001600160a01b0382161515610155611719565b611568828285611fd1565b806001600160a01b0316827fdd6d1c9badb346de6925b358a472c937b41698d2632696759e43fd6527feeec4856040516115a29190615ce8565b60405180910390a350505050565b80610cb381612dcd565b60008282026115de8415806115d75750838583816115d457fe5b04145b6003611719565b9392505050565b610cb38183146067611719565b60006001821b198416828461160857600061160b565b60015b60ff16901b17949350505050565b611631828414801561162a57508183145b6067611719565b505050565b6000611643848484612e46565b5082821b6000196001831b01831b198516175b949350505050565b600061166e838311156001611719565b50900390565b6000611687606084901c15610149611719565b61165642830160e060206116a48660c083838c8c60006060611636565b929190611636565b6000610cdc6116ba836129ea565b8390606080611636565b60006116dd67ffffffffffffffff8311156101ba611719565b5090565b60006116ee848484612e46565b50501b90565b600081831061170357816115de565b5090919050565b6001901b6000190191901c1690565b81610cb357610cb3816128e0565b61172f612e8c565b610919612e94565b7f000000000000000000000000000000000000000000000000000000000000000090565b611631818410801561176c57508183105b6064611719565b6060600061177f611737565b905060608167ffffffffffffffff8111801561179a57600080fd5b506040519080825280602002602001820160405280156117c4578160200160208202803683370190505b50905060005b82811015610a0c576117ed6117de82612435565b6117e783612ebc565b90612fda565b8282815181106117f957fe5b60209081029190910101526001016117ca565b60208501516000906001600160a01b0316301480611836575060408601516001600160a01b031630145b61184c576118478686868686613006565b611859565b6118598686868686613070565b90505b95945050505050565b60208501516000906001600160a01b031630148061188f575060408601516001600160a01b031630145b61184c576118478686868686613174565b620f424090565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611902908590615ce8565b60405180910390a3505050565b611917611d96565b61191f6121d8565b6060600080600061192e61263d565b945094509450509350600083111561194957611949836131cb565b60006119536120e2565b509050600083821461196e57611969828761272d565b611970565b825b905061197c82826131dc565b505050505050565b604051631a7c326360e01b81526000906001600160a01b03841690631a7c3263906119b3908590600401615ce8565b60206040518083038186803b1580156119cb57600080fd5b505afa1580156119df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0391906159fe565b905081611a3a57611a13816116c4565b600b805467ffffffffffffffff191667ffffffffffffffff92909216919091179055611aeb565b6002821415611a8857611a4c816116c4565b600b805467ffffffffffffffff9290921668010000000000000000026fffffffffffffffff000000000000000019909216919091179055611aeb565b6003821415611ae057611a9a816116c4565b600b805467ffffffffffffffff92909216600160801b027fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff909216919091179055611aeb565b611aeb6101bb6128e0565b817f6bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a82604051611b1b9190615ce8565b60405180910390a2505050565b6000611b32611b69565b4211806107d157505060075460ff161590565b7f000000000000000000000000000000000000000000000000000000000000000090565b7f000000000000000000000000000000000000000000000000000000000000000090565b600081611bbb57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160011415611beb57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160021415611c1b57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160031415611c4b57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160041415611c7b57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160051415611cab57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b610cdf6101356128e0565b611ccd6001600160a01b0384161515610198611719565b611ce46001600160a01b0383161515610199611719565b611cef838383611631565b6001600160a01b038316600090815260208190526040902054611d1590826101a0613202565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611d449082612264565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611902908590615ce8565b60408051600080825260208201909252606091611dc9565b611db661526c565b815260200190600190039081611dae5790505b509050611dd461117e565b6001600160a01b0316630e8e3e84826040518263ffffffff1660e01b8152600401611dff9190615bf6565b600060405180830381600087803b158015611e1957600080fd5b505af1158015611e2d573d6000803e3d6000fd5b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611e7857506000610cdf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611eba57506001610cdf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611efc57506002610cdf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611f3e57506003610cdf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611f8057506004610cdf565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415611cab57506005610cdf565b6000610cdc8260c0602061170a565b6000826001600160a01b031663679aefce6040518163ffffffff1660e01b815260040160206040518083038186803b15801561200c57600080fd5b505afa158015612020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061204491906159fe565b6000858152600a6020526040902054909150612061818385611674565b6000868152600a602052604090819020919091555185907fb77a83204ca282e08dc3a65b0a1ca32ea4e6875c38ef0bf5bf75e52a67354fac906120a5908590615ce8565b60405180910390a25050505050565b60006120cb6000356001600160e01b0319166110b4565b9050610bfa6120da8233613218565b610191611719565b6000806000806000806120f3613301565b93509350935093508042101561214657600194508383111561212a57818103824203858503028161212057fe5b0484019550612141565b818103824203848603028161213b57fe5b04840395505b61214e565b600094508295505b505050509091565b60006121658215156004611719565b826121725750600061087d565b81600184038161217e57fe5b04600101905061087d565b61219584848484613360565b7f1835882ee7a34ac194f717a35e09bb1d24c82a3b9d854ab6c9749525b714cdf2848484846040516121ca9493929190615e0e565b60405180910390a150505050565b6109196121e3611b28565b610192611719565b6122006121f661339f565b82101560cb611719565b61221561220b6133a8565b82111560ca611719565b600854612226908260c0603f611636565b6008556040517fa9ba3ffe0b6c366b81232caab38605a0699ad5398d6cce76f91ee809e322dafc90612259908390615ce8565b60405180910390a150565b60008282016115de8482101583611719565b801561229657612291612287611b45565b4210610193611719565b6122ab565b6122ab6122a1611b69565b42106101a9611719565b6007805460ff19168215151790556040517f9e3a5e37224532dea67b89face185703738a228a6e8a23dee546960180d3be6490612259908390615cc5565b60006122f3610bfd565b905060006122ff61117e565b6001600160a01b031663b05f8e4883866040518363ffffffff1660e01b815260040161232c929190615d89565b60806040518083038186803b15801561234457600080fd5b505afa158015612358573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237c9190615a37565b604051630639cdb560e21b81529094506001600160a01b03851693506318e736d492506123b0915085908790600401615d70565b600060405180830381600087803b1580156123ca57600080fd5b505af1158015611376573d6000803e3d6000fd5b6008546123ed908260ff6115f2565b6008556040517feff3d4d215b42bf0960be9c6d5e05c22cba4df6627a3a523e2acee733b5854c890612420908390615cc5565b60405180910390a180610bfa57610bfa6133b4565b600061243f61107e565b8214156124555750670de0b6b3a7640000610cdf565b6000828152600a6020526040902054801561247857612473816129ea565b6115de565b670de0b6b3a76400009392505050565b60006060612499600088868661348e565b915091509850989650505050505050565b815181516124b99082906115e5565b60005b81811015610ae5576124f48482815181106124d357fe5b60200260200101518483815181106124e757fe5b602002602001015161288f565b84828151811061250057fe5b60209081029190910101526001016124bc565b3330146125d1576000306001600160a01b0316600036604051612537929190615b6a565b6000604051808303816000865af19150503d8060008114612574576040519150601f19603f3d011682016040523d82523d6000602084013e612579565b606091505b50509050806000811461258857fe5b60046000803e6000516001600160e01b0319166343adbafb60e01b81146125b3573d6000803e3d6000fd5b506020600460003e604060205260243d03602460403e601c3d016000f35b6125d9611727565b60606125e3611773565b90506125ef8782612977565b600060606126078c8c8c8c8c8c898d8d63ffffffff16565b9150915061261981848663ffffffff16565b8051601f1982018390526343adbafb603f1983015260200260231982016044820181fd5b6060600080600080606061264f61117e565b6001600160a01b031663f94d4668612665610bfd565b6040518263ffffffff1660e01b81526004016126819190615ce8565b60006040518083038186803b15801561269957600080fd5b505afa1580156126ad573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126d5919081019061552f565b509150506126ea816126e5611773565b612977565b6126f38161353c565b965094506000612701610c5c565b90945090506000612713888684613575565b9450905061272187826135f1565b95505050509091929394565b80516000908190815b8181101561276e5761276485828151811061274d57fe5b60200260200101518461226490919063ffffffff16565b9250600101612736565b508161277f5760009250505061087d565b600082868302825b60ff811015612878578260005b868110156127d5576127cb6127a983876115ba565b6127c68c84815181106127b857fe5b60200260200101518a6115ba565b613609565b9150600101612794565b5083945061282e61280d6128076127ec848a6115ba565b6128016127f9888d6115ba565b6103e8613609565b90612264565b866115ba565b6127c661281d89600101856115ba565b6128016127f96103e889038a6115ba565b93508484111561285657600185850311612851578397505050505050505061087d565b61286f565b60018486031161286f578397505050505050505061087d565b50600101612787565b506128846101416128e0565b505050505092915050565b600061289e8215156004611719565b826128ab5750600061087d565b670de0b6b3a7640000838102906128ce908583816128c557fe5b04146005611719565b8281816128d757fe5b0491505061087d565b610bfa816210905360ea1b613629565b6000808251118015610cdc575060ff8016828060200190518101906129159190615a77565b60ff161492915050565b61091961292a6112ae565b6101b6611719565b60006060600060606129438761353c565b915091506000606061295683858961368a565b91509150816129668260006136b6565b95509550505050505b935093915050565b815181516129869082906115e5565b60005b81811015610ae5576129c18482815181106129a057fe5b60200260200101518483815181106129b457fe5b6020026020010151612fda565b8482815181106129cd57fe5b6020908102919091010152600101612989565b610cb38282613773565b6000610cdc8282606061170a565b6000610cdc8260608061170a565b600080612a1283611fc2565b9150612a218360e0602061170a565b9050915091565b60006060612499600188868661348e565b81518151612a489082906115e5565b60005b81811015610ae557612a83848281518110612a6257fe5b6020026020010151848381518110612a7657fe5b602002602001015161383f565b848281518110612a8f57fe5b6020908102919091010152600101612a4b565b6000612aac61117e565b6001600160a01b031663aaabadc56040518163ffffffff1660e01b815260040160206040518083038186803b158015612ae457600080fd5b505afa158015612af8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d191906156e6565b6000610cdc7f0000000000000000000000000000000000000000000000000000000000000000600684015b1c60019081161490565b60408051604180825260808201909252606091829190602082018180368337019050509050836020820152826040820152846060820153949350505050565b6000612b9b8561388d565b9050612bb1612bab8783876138a9565b83611719565b612bc0428410156101b8611719565b5050506001600160a01b039092166000908152600660205260409020805460010190555050565b600060606000612bf684613958565b9050612c116000826003811115612c0957fe5b1460ce611719565b6060612c1c8561396e565b9050612c2a815187516115e5565b612c348187612977565b6000612c3e6120e2565b5090506060612c4c83613984565b90506000612c5a838361272d565b9050806000612c776d80000000000000000000000000008361165e565b9050612c838d82612cc0565b8086612c8d61107e565b81518110612c9757fe5b602002602001018181525050612cad85846131dc565b509c939b50929950505050505050505050565b610cb38282613a26565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b612d0181824242613360565b7fa0d01593e47e69d07e0ccd87bece09411e07dd1ed40ca8f2e7af2976542a0233816040516122599190615ce8565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612d9d613ab3565b30604051602001612db2959493929190615d44565b60405160208183030381529060405280519060200120905090565b600281511015612ddc57610bfa565b600081600081518110612deb57fe5b602002602001015190506000600190505b8251811015611631576000838281518110612e1357fe5b60200260200101519050612e3c816001600160a01b0316846001600160a01b0316106065611719565b9150600101612dfc565b612e5561010083106064611719565b612e7d6001821015801561176c5750612e7360ff84610100036116f4565b8211156064611719565b61163183821c156101b4611719565b6109196121d8565b6000612e9e611737565b905060005b81811015610cb357612eb481613ab7565b600101612ea3565b600081612eea57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160011415612f1a57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160021415612f4a57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160031415612f7a57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160041415612faa57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b8160051415611cab57507f0000000000000000000000000000000000000000000000000000000000000000610cdf565b6000828202612ff48415806115d75750838583816115d457fe5b670de0b6b3a764000090049392505050565b60006130128583612977565b613033866060015183858151811061302657fe5b6020026020010151613b0b565b6060870152600061304687878787613b17565b90506130658184878151811061305857fe5b6020026020010151613b2b565b90506107bc81613b37565b600080808751600181111561308157fe5b14905061308e8684612977565b6130ae876060015184836130a257866130a4565b875b8151811061302657fe5b876060018181525050600060606000806130c78a613b53565b93509350935093506000806130da61107e565b8a14613100576130fb878e60600151876130f38e613bbc565b888b89613bf1565b61311b565b61311b878e60600151876131138f613bbc565b888b89613c2a565b9150915061312c8486858985613c4e565b8661314657613141828a8d8151811061305857fe5b613163565b613163828a8c8151811061315657fe5b6020026020010151613cce565b9d9c50505050505050505050505050565b60006131838660600151613cda565b60608701526131928583612977565b6131a6866060015183868151811061302657fe5b606087015260006131b987878787613cfb565b90506107bc8184868151811061315657fe5b610bfa6131d66112d1565b82612cc0565b6131e981600060e96116e1565b6131f68360e960176116e1565b17600c55610cb3613d0f565b60006132118484111583611719565b5050900390565b600073ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b61323761115a565b6001600160a01b031614158015613252575061325283613d45565b1561327a5761325f61115a565b6001600160a01b0316336001600160a01b031614905061087d565b613282612aa2565b6001600160a01b0316639be2a8848484306040518463ffffffff1660e01b81526004016132b193929190615cf1565b60206040518083038186803b1580156132c957600080fd5b505afa1580156132dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d991906155fb565b6000806000806133206000604060095461170a9092919063ffffffff16565b6009549094506133329060408061170a565b600954909350613345906080604061170a565b6009549092506133589060c0604061170a565b905090919293565b61336d8160c060406116e1565b61337a83608060406116e1565b613386856040806116e1565b61339387600060406116e1565b17171760095550505050565b64e8d4a5100090565b67016345785d8a000090565b6133bc611d96565b60606133c661117e565b6001600160a01b031663f94d46686133dc610bfd565b6040518263ffffffff1660e01b81526004016133f89190615ce8565b60006040518083038186803b15801561341057600080fd5b505afa158015613424573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261344c919081019061552f565b5091505061345c816126e5611773565b606061346782613984565b905060006134736120e2565b5090506000613482828461272d565b9050610ae582826131dc565b60006060600060606000806134a289613b53565b935093509350935061529c8a6134ba57613d506134be565b613de55b9050600060606134d6868689878f8f8963ffffffff16565b9150915061529c8d6134ea5761165e6134ee565b6122645b90506134fb878383613e63565b600061350b89858463ffffffff16565b905061351a8789888c85613c4e565b836135268460006136b6565b9a509a5050505050505050505094509492505050565b600060606135638361354c61107e565b8151811061355657fe5b6020026020010151613ed0565b61356c84613984565b91509150915091565b6000806000806000613588888888613ee4565b9250925092508581116135a35760009450925061296f915050565b85830383830360006135c16135b782610e16565b6117e7858761288f565b905060006135dc6135d26002610e16565b6117e7858861288f565b919091019b939a509298505050505050505050565b60006115de61360084846115ba565b6127c684613f55565b60006136188215156004611719565b81838161362157fe5b049392505050565b62461bcd60e51b600090815260206004526007602452600a808404818106603090810160081b958390069590950190829004918206850160101b01602363ffffff0060e086901c160160181b0190930160c81b60445260e882901c90606490fd5b60006060600061369984613f7b565b905060606136a8878784613f91565b919791965090945050505050565b6060825160010167ffffffffffffffff811180156136d357600080fd5b506040519080825280602002602001820160405280156136fd578160200160208202803683370190505b50905060005b815181101561376c5761371461107e565b811461374b578361372361107e565b82106137325760018203613734565b815b8151811061373e57fe5b602002602001015161374d565b825b82828151811061375957fe5b6020908102919091010152600101613703565b5092915050565b61378a6001600160a01b038316151561019b611719565b61379682600083611631565b6001600160a01b0382166000908152602081905260409020546137bc90826101b2613202565b6001600160a01b0383166000908152602081905260409020556137ef6137ea826137e461093f565b90614040565b61404e565b60006001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138339190615ce8565b60405180910390a35050565b600061384e8215156004611719565b8261385b5750600061087d565b670de0b6b3a764000083810290613875908583816128c557fe5b82600182038161388157fe5b0460010191505061087d565b6000613897612d30565b826040516020016110e9929190615b7a565b60006138bb82516041146101b9611719565b60208281015160408085015160608601518251600080825295019283905292939092811a916001906138f4908990859088908890615da0565b6020604051602081039080840390855afa158015613916573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061394c5750876001600160a01b0316816001600160a01b0316145b98975050505050505050565b600081806020019051810190610cdc9190615811565b6060818060200190518101906115de919061582c565b606080600183510367ffffffffffffffff811180156139a257600080fd5b506040519080825280602002602001820160405280156139cc578160200160208202803683370190505b50905060005b815181101561376c57836139e461107e565b82106139f357816001016139f5565b815b815181106139ff57fe5b6020026020010151828281518110613a1357fe5b60209081029190910101526001016139d2565b613a3260008383611631565b613a416137ea8261280161093f565b6001600160a01b038216600090815260208190526040902054613a649082612264565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613833908590615ce8565b4690565b613abf61107e565b811415613acb57610bfa565b6000818152600a60205260409020548015610cb357600080613aec83612a06565b9150915080421115610ae557610ae584613b0586611b8d565b84611fd1565b60006115de8383612fda565b600061185c60008660600151868686614053565b60006115de838361383f565b6000610cdc613b4c613b47610d45565b613f55565b839061383f565b60006060600080600080613b65610c5c565b91509150600060606000613b7a8a86866140c5565b9250925092506000613b8a6120e2565b5090506000868214613ba557613ba0828561272d565b613ba7565b825b949c939b509099509297509095505050505050565b6000613bd3613bc961107e565b8314156064611719565b613bdb61107e565b82106116dd57613bec82600161165e565b610cdc565b60008088613c0c57613c0788888888888861411d565b613c1a565b613c1a8888888888886141f4565b9150915097509795505050505050565b60008088613c4057613c07888888888888614255565b613c1a8888888888886142bb565b6000613c5a868661272d565b90506000613c68838561288f565b90506000613c768683612fda565b905080831115613cc4578083036000613ca0613c9a83613c9584610e16565b6115ba565b86613609565b90508015613cc1576000613cb487836135f1565b9050613cbf816131cb565b505b50505b61137688846131dc565b60006115de838361288f565b600080613cef613ce8610d45565b849061436a565b90506115de838261165e565b600061185c60018660600151868686614053565b6000613d19611737565b905060005b81811015610cb357613d2f81612b1c565b15613d3d57613d3d816143a6565b600101613d1e565b6000610cdc826143d4565b600060606000613d5f846143df565b90506001816002811115613d6f57fe5b1415613d8d57613d8387878a8c89896143f5565b9250925050613dda565b6002816002811115613d9b57fe5b1415613dac57613d83878a86614454565b6000816002811115613dba57fe5b1415613dcd57613d8387878a8c88614472565b613dd86101506128e0565b505b965096945050505050565b600060606000613df484613958565b90506001816003811115613e0457fe5b1415613e1857613d8387878a8c8989614513565b6003816003811115613e2657fe5b1415613e3757613d83878a86614562565b6002816003811115613e4557fe5b1415613e5857613d8387878a8c88614580565b613dd86101366128e0565b82518251613e729082906115e5565b60005b81811015611e2d57613eb1858281518110613e8c57fe5b6020026020010151858381518110613ea057fe5b60200260200101518563ffffffff16565b858281518110613ebd57fe5b6020908102919091010152600101613e75565b6000610cdc82613ede61093f565b9061165e565b6000806000613ef3858761272d565b9050838111613f0757808192509250613f4c565b613f1985613f14886145fa565b61272d565b9250613f2581846116f4565b9250613f3184846146eb565b9250613f3b610fed565b15613f4857829150613f4c565b8091505b93509350939050565b6000670de0b6b3a76400008210613f6d576000610cdc565b50670de0b6b3a76400000390565b6000818060200190518101906115de9190615a93565b60606000613f9f838561288f565b9050845167ffffffffffffffff81118015613fb957600080fd5b50604051908082528060200260200182016040528015613fe3578160200160208202803683370190505b50915060005b8551811015614037576140188287838151811061400257fe5b6020026020010151612fda90919063ffffffff16565b83828151811061402457fe5b6020908102919091010152600101613fe9565b50509392505050565b60006115de83836001613202565b600255565b6000606061406085613984565b9050600061406d85613bbc565b9050600061407a85613bbc565b905060006140866120e2565b5090506000614095828661272d565b90508a156140b7576140ab828686868e866146fb565b9550505050505061185c565b6140ab828686868e86614786565b6000606060008060606140d78861353c565b915091506000806140e9838a8a613575565b9150915060006140f985846135f1565b9050801561410a5761410a816131cb565b9390930199919850919650945050505050565b6000806060875167ffffffffffffffff8111801561413a57600080fd5b50604051908082528060200260200182016040528015614164578160200160208202803683370190505b5090508881888151811061417457fe5b6020026020010181815250506000614197878a848989614192610d45565b614819565b90506141bf8a8a8a815181106141a957fe5b602002602001015161165e90919063ffffffff16565b8989815181106141cb57fe5b602090810291909101015260006141e2878361165e565b919b919a509098505050505050505050565b600080600061420f8689898c898961420a610d45565b614aa9565b9050614221818989815181106141a957fe5b88888151811061422d57fe5b60209081029190910101526000614244868b61165e565b919a91995090975050505050505050565b60008060006142708689898c898961426b610d45565b614b98565b90506142988189898151811061428257fe5b602002602001015161226490919063ffffffff16565b8888815181106142a457fe5b60209081029190910101526000614244868b612264565b6000806060875167ffffffffffffffff811180156142d857600080fd5b50604051908082528060200260200182016040528015614302578160200160208202803683370190505b5090508881888151811061431257fe5b6020026020010181815250506000614335878a848989614330610d45565b614c65565b90506143478a8a8a8151811061428257fe5b89898151811061435357fe5b602090810291909101015260006141e28783612264565b60008282026143848415806115d75750838583816115d457fe5b8061439357600091505061087d565b670de0b6b3a76400006000198201613881565b6000818152600a60205260409020546143be816116ac565b6000928352600a60205260409092209190915550565b6000610cdc82614ecf565b600081806020019051810190610cdc9190615750565b6000606080600061440585614ef2565b91509150614415825188516115e5565b614422826126e588613984565b60006144348989858e8e614192610d45565b90506144448282111560cf611719565b9a91995090975050505050505050565b60006060600061446384614f15565b905060606136a8868884613f91565b6000606060008061448285614f2b565b91509150614494865182106064611719565b6060865167ffffffffffffffff811180156144ae57600080fd5b506040519080825280602002602001820160405280156144d8578160200160208202803683370190505b5090506144ec888884868e8e61420a610d45565b8183815181106144f857fe5b60209081029190910101529199919850909650505050505050565b6000606080600061452385614f42565b91509150614533875183516115e5565b614540826126e588613984565b60006145528989858e8e614330610d45565b90506144448282101560d0611719565b60006060600061457184614f5a565b905060606136a8868389614f70565b600060606000806145908561500c565b915091506145a2865182106064611719565b6060865167ffffffffffffffff811180156145bc57600080fd5b506040519080825280602002602001820160405280156145e6578160200160208202803683370190505b5090506144ec888884868e8e61426b610d45565b8051606090818167ffffffffffffffff8111801561461757600080fd5b50604051908082528060200260200182016040528015614641578160200160208202803683370190505b50905060005b828110156146e357600061465961107e565b821015614666578161466b565b816001015b905061467681612b1c565b6146935785828151811061468657fe5b60200260200101516146c3565b6146c38683815181106146a257fe5b6020026020010151600a600084815260200190815260200160002054615023565b8383815181106146cf57fe5b602090810291909101015250600101614647565b509392505050565b60008183101561170357816115de565b600061470d8387878151811061428257fe5b86868151811061471957fe5b60200260200101818152505060006147338888858861503e565b90508387878151811061474257fe5b60200260200101510387878151811061475757fe5b6020026020010181815250506147786001613ede838a89815181106141a957fe5b9150505b9695505050505050565b6000614798838786815181106141a957fe5b8685815181106147a457fe5b60200260200101818152505060006147be8888858961503e565b9050838786815181106147cd57fe5b6020026020010151018786815181106147e257fe5b602002602001018181525050614778600161280189898151811061480257fe5b60200260200101518461165e90919063ffffffff16565b600080805b87518110156148575761484d88828151811061483657fe5b60200260200101518361226490919063ffffffff16565b915060010161481e565b506060865167ffffffffffffffff8111801561487257600080fd5b5060405190808252806020026020018201604052801561489c578160200160208202803683370190505b5090506000805b89518110156149695760006148d4858c84815181106148be57fe5b602002602001015161383f90919063ffffffff16565b90506149168b83815181106148e557fe5b60200260200101516149108c85815181106148fc57fe5b60200260200101518e86815181106141a957fe5b9061383f565b84838151811061492257fe5b60200260200101818152505061495e6149578286858151811061494157fe5b602002602001015161436a90919063ffffffff16565b8490612264565b9250506001016148a3565b506060895167ffffffffffffffff8111801561498457600080fd5b506040519080825280602002602001820160405280156149ae578160200160208202803683370190505b50905060005b8a51811015614a795760008482815181106149cb57fe5b6020026020010151841115614a325760006149f46149e886613f55565b8e858151811061400257fe5b90506000614a08828e86815181106141a957fe5b9050614a29614a2282670de0b6b3a76400008d900361383f565b8390612264565b92505050614a49565b8a8281518110614a3e57fe5b602002602001015190505b614a59818d84815181106141a957fe5b838381518110614a6557fe5b6020908102919091010152506001016149b4565b506000614a868c8361272d565b90506000614a94828a61288f565b9050613163614aa282613f55565b8b9061436a565b600080614ac484614abe87614910818b61165e565b9061436a565b90506000614ad48a8a848b61503e565b90506000614ae8828b8b815181106141a957fe5b90506000805b8b51811015614b1057614b068c828151811061483657fe5b9150600101614aee565b506000614b39828d8d81518110614b2357fe5b602002602001015161288f90919063ffffffff16565b90506000614b4682613f55565b90506000614b54858361436a565b90506000614b62868361165e565b9050614b83614b7c83670de0b6b3a76400008d9003612fda565b8290612264565b98505050505050505050979650505050505050565b600080614bad84614abe87614910818b612264565b90506000614bbd8a8a848b61503e565b90506000614be78a8a81518110614bd057fe5b60200260200101518361165e90919063ffffffff16565b90506000805b8b51811015614c0f57614c058c828151811061483657fe5b9150600101614bed565b506000614c22828d8d81518110614b2357fe5b90506000614c2f82613f55565b90506000614c3d858361436a565b90506000614c4b868361165e565b9050614b83614b7c83670de0b6b3a76400008d900361383f565b600080805b8751811015614c8c57614c8288828151811061483657fe5b9150600101614c6a565b506060865167ffffffffffffffff81118015614ca757600080fd5b50604051908082528060200260200182016040528015614cd1578160200160208202803683370190505b5090506000805b8951811015614d6b576000614cf3858c8481518110614b2357fe5b9050614d358b8381518110614d0457fe5b6020026020010151614d2f8c8581518110614d1b57fe5b60200260200101518e868151811061428257fe5b9061288f565b848381518110614d4157fe5b602002602001018181525050614d606149578286858151811061400257fe5b925050600101614cd8565b506060895167ffffffffffffffff81118015614d8657600080fd5b50604051908082528060200260200182016040528015614db0578160200160208202803683370190505b50905060005b8a51811015614e7157600083858381518110614dce57fe5b60200260200101511115614e2a576000614df36149e886670de0b6b3a764000061165e565b90506000614e07828e86815181106141a957fe5b9050614e21614a2282670de0b6b3a76400008d9003612fda565b92505050614e41565b8a8281518110614e3657fe5b602002602001015190505b614e51818d848151811061428257fe5b838381518110614e5d57fe5b602090810291909101015250600101614db6565b506000614e7e8c8361272d565b90506000614e8c828a61288f565b9050670de0b6b3a7640000811115614ec057614eb38a670de0b6b3a763ffff198301612fda565b965050505050505061477c565b6000965050505050505061477c565b6000614ee163f4b7964d60e01b6110b4565b821480610cdc5750610cdc826151fb565b6060600082806020019051810190614f0a919061576b565b909590945092505050565b6000818060200190518101906115de91906157b0565b60008082806020019051810190614f0a91906157dc565b6060600082806020019051810190614f0a919061586f565b6000818060200190518101906115de919061588d565b60606000614f7e848461383f565b90506060855167ffffffffffffffff81118015614f9a57600080fd5b50604051908082528060200260200182016040528015614fc4578160200160208202803683370190505b50905060005b865181101561500257614fe38388838151811061494157fe5b828281518110614fef57fe5b6020908102919091010152600101614fca565b5095945050505050565b60008082806020019051810190614f0a91906158a9565b60006115de61503584613c95856129f8565b6127c6846129ea565b60008084518602905060008560008151811061505657fe5b60200260200101519050600086518760008151811061507157fe5b60200260200101510290506000600190505b87518110156150d7576150bc6150b66150af848b85815181106150a257fe5b60200260200101516115ba565b8a516115ba565b88613609565b91506150cd88828151811061274d57fe5b9250600101615083565b508685815181106150e457fe5b60200260200101518203915060006150fc87886115ba565b9050600061512861511c61511484610b8389886115ba565b6103e86115ba565b8a89815181106150a257fe5b9050600061514361513c6151148b89613609565b8690612264565b905060008061515f6151558686612264565b610b838d86612264565b905060005b60ff8110156151df578192506151946151818661280185866115ba565b610b838e613ede886128018860026115ba565b9150828211156151bd576001838303116151b8575097506116569650505050505050565b6151d7565b6001828403116151d7575097506116569650505050505050565b600101615164565b506151eb6101426128e0565b5050505050505050949350505050565b600061520d632f1a0bc960e01b6110b4565b8214806152285750615225637587926b60e11b6110b4565b82145b80610cdc5750610cdc826000615244631c74c91760e11b6110b4565b82148061525f575061525c6350dd6ed960e01b6110b4565b82145b80610cdc57506000610cdc565b6040805160a081019091528060008152600060208201819052604082018190526060820181905260809091015290565bfe5b803561087d81615e7e565b600082601f8301126152b9578081fd5b81356152cc6152c782615e5e565b615e37565b8181529150602080830190848101818402860182018710156152ed57600080fd5b60005b84811015612884578135845292820192908201906001016152f0565b600082601f83011261531c578081fd5b815161532a6152c782615e5e565b81815291506020808301908481018184028601820187101561534b57600080fd5b60005b848110156128845781518452928201929082019060010161534e565b600082601f83011261537a578081fd5b813567ffffffffffffffff811115615390578182fd5b6153a3601f8201601f1916602001615e37565b91508082528360208285010111156153ba57600080fd5b8060208401602084013760009082016020015292915050565b80516003811061087d57600080fd5b80516004811061087d57600080fd5b80356002811061087d57600080fd5b600060208284031215615411578081fd5b81356115de81615e7e565b6000806040838503121561542e578081fd5b823561543981615e7e565b9150602083013561544981615e7e565b809150509250929050565b600080600060608486031215615468578081fd5b833561547381615e7e565b9250602084013561548381615e7e565b929592945050506040919091013590565b600080600080600080600060e0888a0312156154ae578283fd5b87356154b981615e7e565b965060208801356154c981615e7e565b9550604088013594506060880135935060808801356154e781615e93565b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215615516578182fd5b823561552181615e7e565b946020939093013593505050565b600080600060608486031215615543578081fd5b835167ffffffffffffffff8082111561555a578283fd5b818601915086601f83011261556d578283fd5b815161557b6152c782615e5e565b80828252602080830192508086018b82838702890101111561559b578788fd5b8796505b848710156155c65780516155b281615e7e565b84526001969096019592810192810161559f565b5089015190975093505050808211156155dd578283fd5b506155ea8682870161530c565b925050604084015190509250925092565b60006020828403121561560c578081fd5b815180151581146115de578182fd5b600080600080600080600060e0888a031215615635578081fd5b87359650602088013561564781615e7e565b9550604088013561565781615e7e565b9450606088013567ffffffffffffffff80821115615673578283fd5b61567f8b838c016152a9565b955060808a0135945060a08a0135935060c08a01359150808211156156a2578283fd5b506156af8a828b0161536a565b91505092959891949750929550565b6000602082840312156156cf578081fd5b81356001600160e01b0319811681146115de578182fd5b6000602082840312156156f7578081fd5b81516115de81615e7e565b60008060408385031215615714578182fd5b823561571f81615e7e565b9150602083013567ffffffffffffffff81111561573a578182fd5b6157468582860161536a565b9150509250929050565b600060208284031215615761578081fd5b6115de83836153d3565b60008060006060848603121561577f578081fd5b61578985856153d3565b9250602084015167ffffffffffffffff8111156157a4578182fd5b6155ea8682870161530c565b600080604083850312156157c2578182fd5b6157cc84846153d3565b9150602083015190509250929050565b6000806000606084860312156157f0578081fd5b6157fa85856153d3565b925060208401519150604084015190509250925092565b600060208284031215615822578081fd5b6115de83836153e2565b6000806040838503121561583e578182fd5b61584884846153e2565b9150602083015167ffffffffffffffff811115615863578182fd5b6157468582860161530c565b600080600060608486031215615883578081fd5b61578985856153e2565b6000806040838503121561589f578182fd5b6157cc84846153e2565b6000806000606084860312156158bd578081fd5b6157fa85856153e2565b600080600080608085870312156158dc578182fd5b843567ffffffffffffffff808211156158f3578384fd5b818701915061012080838a031215615909578485fd5b61591281615e37565b905061591e89846153f1565b815261592d896020850161529e565b602082015261593f896040850161529e565b6040820152606083013560608201526080830135608082015260a083013560a082015261596f8960c0850161529e565b60c08201526159818960e0850161529e565b60e08201526101008084013583811115615999578687fd5b6159a58b82870161536a565b8284015250508096505060208701359150808211156159c2578384fd5b506159cf878288016152a9565b949794965050505060408301359260600135919050565b6000602082840312156159f7578081fd5b5035919050565b600060208284031215615a0f578081fd5b5051919050565b60008060408385031215615a28578182fd5b50508035926020909101359150565b60008060008060808587031215615a4c578182fd5b8451935060208501519250604085015191506060850151615a6c81615e7e565b939692955090935050565b600060208284031215615a88578081fd5b81516115de81615e93565b60008060408385031215615aa5578182fd5b8251615ab081615e93565b6020939093015192949293505050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015615afc57815187529582019590820190600101615ae0565b509495945050505050565b60008151808452815b81811015615b2c57602081850181015186830182015201615b10565b81811115615b3d5782602083870101525b50601f01601f19169290920160200192915050565b9182526001600160e01b031916602082015260240190565b6000828483379101908152919050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6020808252825182820181905260009190848201906040850190845b81811015615bea5783516001600160a01b031683529284019291840191600101615bc5565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015615c80578151805160048110615c2957fe5b855280870151615c3b88870182615ac0565b508581015186860152606080820151615c5682880182615ac0565b505060809081015190615c6b86820183615ac0565b505060a0939093019290850190600101615c13565b5091979650505050505050565b6000602082526115de6020830184615acd565b600060408252615cb36040830185615acd565b828103602084015261185c8185615acd565b901515815260200190565b92151583526020830191909152604082015260600190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b6000838252604060208301526116566040830184615b07565b9182526001600160a01b0316602082015260400190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526115de6020830184615b07565b6000838252604060208301526116566040830184615acd565b9283529015156020830152604082015260600190565b918252602082015260400190565b93845260208401929092526040830152606082015260800190565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715615e5657600080fd5b604052919050565b600067ffffffffffffffff821115615e74578081fd5b5060209081020190565b6001600160a01b0381168114610bfa57600080fd5b60ff81168114610bfa57600080fdfea26469706673582212203b5b656ee3e573b26e590f7b9c281c1eadb4e8c6727d83219cd25a216280131b64736f6c634300070100336bfb689528fa96ec1ad670ad6d6064be1ae96bfd5d2ee35c837fd0fe0c11959a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c8000000000000000000000000f23b4db826dba14c0e857029dff076b1c026484300000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002a00000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000000000000000000000000000075fa6160000000000000000000000000000000000000000000000000000000000ed4e00000000000000000000000000ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1ba1b0000000000000000000000000000000000000000000000000000000000000360000000000000000000000000000000000000000000000000000000000000001242616c616e63657220465241582f5553446500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009465241582f55534465000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000005d3a1ff2b6bab83b63cd9ad0787074081a52ef34000000000000000000000000fc00000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000b400000000000000000000000000000000000000000000000000000000000000b4000000000000000000000000000000000000000000000000000000000000005d7b226e616d65223a22436f6d706f7361626c65537461626c65506f6f6c222c2276657273696f6e223a362c226465706c6f796d656e74223a2232303234303232332d636f6d706f7361626c652d737461626c652d706f6f6c2d7636227d000000