[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount0Earned", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Earned", "type": "uint256" } ], "name": "FeesEarned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "Snapshot", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "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": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STEER_FRACTION_OF_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOTAL_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedSteerFees0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedSteerFees1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedStrategistFees0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedStrategistFees1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "algebraMintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Wanted", "type": "int256" }, { "internalType": "int256", "name": "amount1Wanted", "type": "int256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "algebraSwapCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Used", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Used", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" } ], "name": "emergencyBurn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getPositions", "outputs": [ { "internalType": "int24[]", "name": "", "type": "int24[]" }, { "internalType": "int24[]", "name": "", "type": "int24[]" }, { "internalType": "uint16[]", "name": "", "type": "uint16[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalAmounts", "outputs": [ { "internalType": "uint256", "name": "total0", "type": "uint256" }, { "internalType": "uint256", "name": "total1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "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": [ { "internalType": "address", "name": "_vaultManager", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "_steer", "type": "address" }, { "internalType": "bytes", "name": "_params", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "maxTickChange", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poke", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "contract IAlgebraPool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "steerCollectFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "strategistCollectFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "totalWeight", "type": "uint256" }, { "components": [ { "internalType": "int24[]", "name": "lowerTick", "type": "int24[]" }, { "internalType": "int24[]", "name": "upperTick", "type": "int24[]" }, { "internalType": "uint16[]", "name": "relativeWeight", "type": "uint16[]" } ], "internalType": "struct HerculesMultiPositionLiquidityManager.LiquidityPositions", "name": "newPositions", "type": "tuple" }, { "internalType": "bytes", "name": "timeSensitiveData", "type": "bytes" } ], "name": "tend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "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": "twapInterval", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff16806200002e57506200002e620000c0565b806200003d575060005460ff16155b6200007a5760405162461bcd60e51b815260040180806020018281038252602e81526020018062005dfa602e913960400191505060405180910390fd5b600054610100900460ff16158015620000a6576000805460ff1961ff0019909116610100171660011790555b8015620000b9576000805461ff00191690555b50620000e4565b6000620000d830620000de60201b6200204d1760201c565b15905090565b3b151590565b615d0680620000f46000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80633f2218f11161015c57806395d89b41116100ce578063ca15c87311610087578063ca15c8731461053d578063d21220a714610550578063d331bef714610558578063d547741f1461056b578063dd62ed3e1461057e578063ef94c279146105915761028a565b806395d89b41146104de578063a217fddf146104e6578063a457c2d7146104ee578063a9059cbb14610501578063abbffcb914610514578063c4a7761e146105355761028a565b8063802758601161012057806380275860146104735780638456cb591461048a5780638ea234cb146104925780638f747bb8146104a55780639010d07c146104b857806391d14854146104cb5761028a565b80633f2218f1146104405780633f4ba83a146104485780635c975abb1461045057806363db7eae1461045857806370a08231146104605761028a565b8063246581f71161020057806336568abe116101b957806336568abe146103c8578063365d0ed7146103db578063366e897b146103fd57806339509351146104055780633c1d5df0146104185780633dd657c51461042d5761028a565b8063246581f714610354578063248a9ca3146103675780632b528d331461037a5780632c8958f61461038d5780632f2ff15d146103a0578063313ce567146103b35761028a565b80631053f871116102525780631053f8711461030a57806316f0115b1461031f57806318160ddd14610327578063181783581461032f5780631c1f19361461033957806323b872dd146103415761028a565b806301ffc9a71461028f57806302bcd6ca146102b857806306fdde03146102cd578063095ea7b3146102e25780630dfe1681146102f5575b600080fd5b6102a261029d3660046150f8565b610599565b6040516102af9190615815565b60405180910390f35b6102c0610622565b6040516102af9190615820565b6102d5610628565b6040516102af9190615872565b6102a26102f0366004614f47565b6106be565b6102fd6106dc565b6040516102af919061566e565b6103126106eb565b6040516102af919061583e565b6102fd6106fb565b6102c061070a565b610337610710565b005b6102c06109ba565b6102a261034f366004614f07565b6109c0565b610337610362366004614e5c565b610a48565b6102c061037536600461509b565b610dce565b6103376103883660046154df565b610de3565b61033761039b36600461518d565b610ee9565b6103376103ae3660046150b3565b610f69565b6103bb610fd0565b6040516102af9190615936565b6103376103d63660046150b3565b610fd9565b6103ee6103e9366004615579565b61103a565b6040516102af9392919061590f565b6102c0611233565b6102a2610413366004614f47565b611239565b610420611287565b6040516102af9190615925565b61033761043b36600461518d565b61129a565b6102c06112df565b6103376112e5565b6102a2611312565b6102c061131b565b6102c061046e366004614d91565b611321565b61047b61133c565b6040516102af9392919061575f565b6103376114e7565b6103376104a03660046154df565b611511565b6103376104b33660046153fa565b61159d565b6102fd6104c63660046150d7565b61192e565b6102a26104d93660046150b3565b611946565b6102d561195e565b6102c06119bf565b6102a26104fc366004614f47565b6119c4565b6102a261050f366004614f47565b611a2c565b610527610522366004615120565b611a40565b6040516102af929190615901565b610527611b89565b6102c061054b36600461509b565b611e99565b6102fd611eb0565b610527610566366004615539565b611ebf565b6103376105793660046150b3565b611fc3565b6102c061058c366004614e24565b61201c565b6102c0612047565b60c95460405163ab8b2a7360e01b81526000916001600160a01b03169063ab8b2a73906105ca908590600401615829565b60206040518083038186803b1580156105e257600080fd5b505afa1580156105f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061a9190615081565b90505b919050565b60cd5481565b60368054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b820191906000526020600020905b81548152906001019060200180831161069757829003601f168201915b5050505050905090565b60006106d26106cb612053565b8484612057565b5060015b92915050565b60ca546001600160a01b031681565b60d054600160a01b900460020b81565b60d0546001600160a01b031681565b60355490565b6040805160f7805460806020820284018101909452606083018181526000948492849184018282801561078857602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116107515790505b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561080657602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116107cf5790505b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561088657602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161084d5790505b505050919092525050815151919250600090505b8181146109b55760006108db846000015183815181106108b657fe5b6020026020010151856020015184815181106108ce57fe5b6020026020010151612143565b505050505090506000816001600160801b031611156109ac5760d054845180516001600160a01b039092169163a34123a791908590811061091857fe5b60200260200101518660200151858151811061093057fe5b602002602001015160006040518463ffffffff1660e01b81526004016109589392919061584c565b6040805180830381600087803b15801561097157600080fd5b505af1158015610985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a9919061516a565b50505b5060010161089a565b505050565b611a0b81565b60006109cd8484846121ed565b610a3d846109d9612053565b610a3885604051806060016040528060288152602001615ba1602891396001600160a01b038a16600090815260346020526040812090610a17612053565b6001600160a01b03168152602081019190915260400160002054919061234a565b612057565b5060015b9392505050565b600054610100900460ff1680610a615750610a616123e1565b80610a6f575060005460ff16155b610aaa5760405162461bcd60e51b815260040180806020018281038252602e815260200180615b52602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad5576000805460ff1961ff0019909116610100171660011790555b60008060008085806020019051810190610aef9190614dc9565b9350935093509350600960020b8260020b138015610b1257506107d1600283900b125b610b1b57600080fd5b601e63ffffffff8216118015610b38575061025863ffffffff8216105b610b4157600080fd5b826001600160a01b0316846001600160a01b031610610b5f57600080fd5b60c98054336001600160a01b03199182161790915560ca805482166001600160a01b038781169190911790915560cb805490921690851617905560405163d9a641e160e01b815260009073c5bfa92f27df36d268422ee314a1387bb5ffb06a9063d9a641e190610bd59088908890600401615682565b60206040518083038186803b158015610bed57600080fd5b505afa158015610c01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c259190614dad565b90506001600160a01b038116610c3a57600080fd5b60d080546001600160a01b0319166001600160a01b03831617905560408051633811936960e01b81529051600091610cd39133916338119369916004808301926020929190829003018186803b158015610c9357600080fd5b505afa158015610ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ccb91906153e2565b6001016123f2565b9050610d1d81604051602001610ce99190615602565b60405160208183030381529060405282604051602001610d09919061563f565b6040516020818303038152906040526124cd565b610d25612582565b610d2d612633565b610d45600080516020615c5d8339815191528a610fc2565b610d6f7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088c610fc2565b505060d0805463ffffffff909216600160b81b0263ffffffff60b81b1960029490940b62ffffff16600160a01b0262ffffff60a01b19909316929092179290921617905550508015610dc7576000805461ff00191690555b5050505050565b60009081526097602052604090206002015490565b610deb611312565b15610e30576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60c95460405163015a1d6760e31b81526001600160a01b0390911690630ad0eb3890610e6090309060040161566e565b60206040518083038186803b158015610e7857600080fd5b505afa158015610e8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb09190614dad565b6001600160a01b0316336001600160a01b031614610ecd57600080fd5b610ede8160ce5460cf5486866126d0565b60cf5560ce55505050565b60d0546001600160a01b03163314610f0057600080fd5b60d054600160e01b900460ff16610f1657600080fd5b60d0805460ff60e01b191690556000841315610f435760ca54610f43906001600160a01b03163386612742565b6000831315610f635760cb54610f63906001600160a01b03163385612742565b50505050565b600082815260976020526040902060020154610f87906104d9612053565b610fc25760405162461bcd60e51b815260040180806020018281038252602f815260200180615a63602f913960400191505060405180910390fd5b610fcc8282612794565b5050565b60385460ff1690565b610fe1612053565b6001600160a01b0316816001600160a01b0316146110305760405162461bcd60e51b815260040180806020018281038252602f815260200180615ca2602f913960400191505060405180910390fd5b610fcc82826127fd565b6000806000611047611312565b1561108c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001600160a01b03841661109f57600080fd5b60c9546040516367a44ca360e01b81526000916001600160a01b0316906367a44ca3906110d090309060040161566e565b60006040518083038186803b1580156110e857600080fd5b505afa1580156110fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261112491908101906151de565b519050600181600481111561113557fe5b148061114c5750600381600481111561114a57fe5b145b61115557600080fd5b61115d610710565b6111678989612866565b919550935091508361117857600080fd5b8683101561118557600080fd5b8582101561119257600080fd5b82156111b05760ca546111b0906001600160a01b031633308661298c565b81156111ce5760cb546111ce906001600160a01b031633308561298c565b6111d885856129e6565b846001600160a01b0316336001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f686868660405161121f9392919061590f565b60405180910390a350955095509592505050565b60cf5481565b60006106d2611246612053565b84610a388560346000611257612053565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612ad8565b60d054600160b81b900463ffffffff1681565b60d0546001600160a01b031633146112b157600080fd5b60d054600160d81b900460ff166112c757600080fd5b60d0805460ff60d81b19169055610f63338585612b32565b60ce5481565b600080516020615c5d8339815191526112fe8133611946565b61130757600080fd5b61130f612b6c565b50565b60655460ff1690565b6109c481565b6001600160a01b031660009081526033602052604090205490565b6060806060600060f7604051806060016040529081600082018054806020026020016040519081016040528092919081815260200182805480156113c557602002820191906000526020600020906000905b82829054906101000a900460020b60020b8152602001906003019060208260020104928301926001038202915080841161138e5790505b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561144357602002820191906000526020600020906000905b82829054906101000a900460020b60020b8152602001906003019060208260020104928301926001038202915080841161140c5790505b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156114c357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161148a5790505b50505091909252505081516020830151604090930151909792965094509092505050565b600080516020615c5d8339815191526115008133611946565b61150957600080fd5b61130f612c0c565b600080516020615c5d83398151915261152a8133611946565b61153357600080fd5b61153b611312565b15611580576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6115918260cc5460cd5487876126d0565b60cd5560cc5550505050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086115c88133611946565b6115d157600080fd5b6115d9611312565b1561161e576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b61271085111561162d57600080fd5b60008061163c848601866150b3565b9150915060008060d060009054906101000a90046001600160a01b03166001600160a01b031663e76c01e46040518163ffffffff1660e01b81526004016101006040518083038186803b15801561169257600080fd5b505afa1580156116a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ca919061533e565b505050505050915091506116dd81612c8f565b6116e8600180612e1a565b5050875151156117455787518051899160f79161170c9183916020909101906148d7565b50602082810151805161172592600185019201906148d7565b5060408201518051611741916002840191602090910190614986565b5050505b831561189b5760008413600160ff1b85141561176057600080fd5b60d0805460ff60e01b1916600160e01b17908190556001600160a01b031663128acb083083806117935788600003611795565b885b886040518563ffffffff1660e01b81526004016117b594939291906156e8565b6040805180830381600087803b1580156117ce57600080fd5b505af11580156117e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611806919061516a565b505060d060009054906101000a90046001600160a01b03166001600160a01b031663e76c01e46040518163ffffffff1660e01b81526004016101006040518083038186803b15801561185757600080fd5b505afa15801561186b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188f919061533e565b50959850505050505050505b60006118a56132ad565b905060006118b1613345565b90507f2fd4737bac0995700ade358ae308c92f20ee63884dfbe658bf55d2f99f60f0778483836118df61070a565b6040516118ef94939291906158db565b60405180910390a18a15611921576119218461190e848e612710613382565b61191b848f612710613382565b89613418565b5050505050505050505050565b6000828152609760205260408120610a4190836139a1565b6000828152609760205260408120610a4190836139ad565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b600081565b60006106d26119d1612053565b84610a3885604051806060016040528060258152602001615c7d60259139603460006119fb612053565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061234a565b60006106d2611a39612053565b84846121ed565b600080600080516020615c5d833981519152611a5c8133611946565b611a6557600080fd5b60d05460405163a34123a760e01b81526001600160a01b039091169063a34123a790611a999089908990899060040161584c565b6040805180830381600087803b158015611ab257600080fd5b505af1158015611ac6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aea919061516a565b60d0546040516309e3d67b60e31b81529295509093506001600160a01b031690634f1eb3d890611b2d9030908a908a906001600160801b03908190600401615722565b6040805180830381600087803b158015611b4657600080fd5b505af1158015611b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7e91906152a2565b505050935093915050565b600080611b946132ad565b9150611b9e613345565b9050600080600060f760405180606001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611c2757602002820191906000526020600020906000905b82829054906101000a900460020b60020b81526020019060030190602082600201049283019260010382029150808411611bf05790505b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611ca557602002820191906000526020600020906000905b82829054906101000a900460020b60020b81526020019060030190602082600201049283019260010382029150808411611c6e5790505b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611d2557602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611cec5790505b5050505050815250509050600060d060009054906101000a90046001600160a01b03166001600160a01b031663e76c01e46040518163ffffffff1660e01b81526004016101006040518083038186803b158015611d8157600080fd5b505afa158015611d95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db9919061533e565b505087515195965060009450505050505b818114611e5957600080600080611e108789600001518781518110611deb57fe5b60200260200101518a602001518881518110611e0357fe5b60200260200101516139c2565b92965090945092509050611e248c85612ad8565b9b50611e308b84612ad8565b9a50611e3c8a83612ad8565b9950611e488982612ad8565b985050505050806001019050611dca565b50611e73611e6c86611d4c612710613382565b8890612ad8565b9650611e8e611e8785611d4c612710613382565b8790612ad8565b955050505050509091565b600081815260976020526040812061061a90613a1b565b60cb546001600160a01b031681565b6000806001600160a01b038316611ed557600080fd5b60008611611ee257600080fd5b6000611eec61070a565b9050611ef83388613a26565b611f0a611f036132ad565b8883613382565b9250611f17611f03613345565b9150600080611f268984612e1a565b9092509050611f358583612ad8565b9450611f418482612ad8565b935087851015611f5057600080fd5b86841015611f5d57600080fd5b611f68868686612b32565b856001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8b8888604051611faf9392919061590f565b60405180910390a350505094509492505050565b600082815260976020526040902060020154611fe1906104d9612053565b6110305760405162461bcd60e51b8152600401808060200182810382526030815260200180615b226030913960400191505060405180910390fd5b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60cc5481565b3b151590565b3390565b6001600160a01b03831661209c5760405162461bcd60e51b8152600401808060200182810382526024815260200180615c0f6024913960400191505060405180910390fd5b6001600160a01b0382166120e15760405162461bcd60e51b8152600401808060200182810382526022815260200180615ab46022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60d054600090819081908190819081906001600160a01b031663514ea4bf61216c308b8b613b22565b6040518263ffffffff1660e01b81526004016121889190615820565b60c06040518083038186803b1580156121a057600080fd5b505afa1580156121b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d891906152d0565b949d939c50919a509850965090945092505050565b6001600160a01b0383166122325760405162461bcd60e51b8152600401808060200182810382526025815260200180615bea6025913960400191505060405180910390fd5b6001600160a01b0382166122775760405162461bcd60e51b8152600401808060200182810382526023815260200180615a406023913960400191505060405180910390fd5b6122828383836109b5565b6122bf81604051806060016040528060268152602001615ad6602691396001600160a01b038616600090815260336020526040902054919061234a565b6001600160a01b0380851660009081526033602052604080822093909355908416815220546122ee9082612ad8565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156123d95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561239e578181015183820152602001612386565b50505050905090810190601f1680156123cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006123ec3061204d565b15905090565b60608161241757506040805180820190915260018152600360fc1b602082015261061d565b8160005b811561242f57600101600a8204915061241b565b60008167ffffffffffffffff8111801561244857600080fd5b506040519080825280601f01601f191660200182016040528015612473576020820181803683370190505b50859350905060001982015b83156124c457600a840660300160f81b828280600190039350815181106124a257fe5b60200101906001600160f81b031916908160001a905350600a8404935061247f565b50949350505050565b600054610100900460ff16806124e657506124e66123e1565b806124f4575060005460ff16155b61252f5760405162461bcd60e51b815260040180806020018281038252602e815260200180615b52602e913960400191505060405180910390fd5b600054610100900460ff1615801561255a576000805460ff1961ff0019909116610100171660011790555b612562613b38565b61256c8383613bd8565b80156109b5576000805461ff0019169055505050565b600054610100900460ff168061259b575061259b6123e1565b806125a9575060005460ff16155b6125e45760405162461bcd60e51b815260040180806020018281038252602e815260200180615b52602e913960400191505060405180910390fd5b600054610100900460ff1615801561260f576000805460ff1961ff0019909116610100171660011790555b612617613b38565b61261f613cb0565b801561130f576000805461ff001916905550565b600054610100900460ff168061264c575061264c6123e1565b8061265a575060005460ff16155b6126955760405162461bcd60e51b815260040180806020018281038252602e815260200180615b52602e913960400191505060405180910390fd5b600054610100900460ff161580156126c0576000805460ff1961ff0019909116610100171660011790555b6126c8613b38565b61261f613b38565b6000808315612702576126e38685613d5b565b60ca549092506126fd906001600160a01b03168886612742565b612706565b8591505b8215612735576127168584613d5b565b60cb54909150612730906001600160a01b03168885612742565b612738565b50835b9550959350505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109b5908490613db8565b60008281526097602052604090206127ac9082613e69565b15610fcc576127b9612053565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526097602052604090206128159082613e7e565b15610fcc57612822612053565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60008060008061287461070a565b9050600080612881611b89565b9150915082600014806128945750600082115b8061289f5750600081115b6128a557fe5b826128d1578794508693506128ba8585613e93565b9550620f42408610156128cc57600080fd5b612982565b816128f5576128e1878483613382565b95506128ee868285613eaa565b9350612982565b8061291957612905888484613382565b9550612912868385613eaa565b9450612982565b60006129376129288a84613f1e565b6129328a86613f1e565b613f77565b90506000811161294657600080fd5b81600182038161295257fe5b04600101955082600182038161296457fe5b04600101945081612976828686613382565b8161297d57fe5b049650505b5050509250925092565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610f63908590613db8565b6001600160a01b038216612a41576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b612a4d600083836109b5565b603554612a5a9082612ad8565b6035556001600160a01b038216600090815260336020526040902054612a809082612ad8565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082820183811015610a41576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b8115612b4f5760ca54612b4f906001600160a01b03168484612742565b80156109b55760cb546109b5906001600160a01b03168483612742565b612b74611312565b612bbc576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612bef612053565b604080516001600160a01b039092168252519081900360200190a1565b612c14611312565b15612c59576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612bef612053565b60d05460408051600280825260608201835263ffffffff600160b81b85041693600160a01b9004810b9260009291906020830190803683370190505090508281600081518110612cdb57fe5b63ffffffff9092166020928302919091019091015260d054604051639d3a524160e01b81526000916001600160a01b031690639d3a524190612d219085906004016157cb565b60006040518083038186803b158015612d3957600080fd5b505afa158015612d4d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d759190810190614f72565b5050509050600060d060179054906101000a900463ffffffff1663ffffffff1682600081518110612da257fe5b602002602001015183600181518110612db757fe5b60200260200101510360060b81612dca57fe5b05905083810160020b8660020b13158015612ded575083810360020b8660020b12155b612e125760405162461bcd60e51b8152600401612e09906158c0565b60405180910390fd5b505050505050565b600080600060f760405180606001604052908160008201805480602002602001604051908101604052809291908181526020018280548015612ea157602002820191906000526020600020906000905b82829054906101000a900460020b60020b81526020019060030190602082600201049283019260010382029150808411612e6a5790505b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612f1f57602002820191906000526020600020906000905b82829054906101000a900460020b60020b81526020019060030190602082600201049283019260010382029150808411612ee85790505b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015612f9f57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411612f665790505b505050919092525050815151919250600091829150815b81811461319357600085600001518281518110612fcf57fe5b60200260200101519050600086602001518381518110612feb57fe5b602002602001015190506000806130028484612143565b5050505050905061301d816001600160801b03168e8e613382565b9150506001600160801b038116156131855760d05460405163a34123a760e01b815260009182916001600160a01b039091169063a34123a7906130689088908890889060040161584c565b6040805180830381600087803b15801561308157600080fd5b505af1158015613095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130b9919061516a565b60d0546040516309e3d67b60e31b815292945090925060009182916001600160a01b031690634f1eb3d8906131019030908b908b906001600160801b03908190600401615722565b6040805180830381600087803b15801561311a57600080fd5b505af115801561312e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315291906152a2565b6001600160801b031691506001600160801b03169150838e019d50828d019c508382038b019a508281038a019950505050505b505050806001019050612fb6565b507fc28ad1de9c0c32e5394ba60323e44d8d9536312236a47231772e448a3e49de4283836040516131c5929190615901565b60405180910390a182156132245760006131e4846109c4612710613382565b9050808403935060006131fc82611a0b612710613382565b60cc5490915061320c9082612ad8565b60cc5560ce5461321e90828403612ad8565b60ce5550505b811561327b57600061323b836109c4612710613382565b90508083039250600061325382611a0b612710613382565b60cd549091506132639082612ad8565b60cd5560cf5461327590828403612ad8565b60cf5550505b613289611e87848a8a613382565b95506132a0613299838a8a613382565b8690612ad8565b9450505050509250929050565b60ce5460cc5460ca546040516370a0823160e01b81526000936133409301916001600160a01b0316906370a08231906132ea90309060040161566e565b60206040518083038186803b15801561330257600080fd5b505afa158015613316573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061333a91906153e2565b90613d5b565b905090565b60cf5460cd5460cb546040516370a0823160e01b81526000936133409301916001600160a01b0316906370a08231906132ea90309060040161566e565b600083830281600019858709828110838203039150508084116133a457600080fd5b806133b457508290049050610a41565b8385870960008581038616958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030291819003819004600101858411909403939093029190930391909104170290509392505050565b6040805160f7805460806020820284018101909452606083018181526000948492849184018282801561349057602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116134595790505b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561350e57602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116134d75790505b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561358e57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116135555790505b5050505050815250509050606080600080600085600001515190508067ffffffffffffffff811180156135c057600080fd5b506040519080825280602002602001820160405280156135ea578160200160208202803683370190505b5094508067ffffffffffffffff8111801561360457600080fd5b5060405190808252806020026020018201604052801561362e578160200160208202803683370190505b50935060005b81811461377057600181106136c657865180518290811061365157fe5b602002602001015160020b8760000151600183038151811061366f57fe5b602002602001015160020b1280156136bd57508660200151818151811061369257fe5b602002602001015160020b876020015160018303815181106136b057fe5b602002602001015160020b125b6136c657600080fd5b60008061372b8d6136ed8b6000015186815181106136e057fe5b6020026020010151613f86565b6137008c6020015187815181106136e057fe5b8c60400151878151811061371057fe5b602002602001015161ffff16670de0b6b3a7640000026142ad565b915091508188848151811061373c57fe5b6020026020010181815250508087848151811061375557fe5b60209081029190910101529401939290920191600101613634565b5060005b8181146139255760008085156137a5576137a288848151811061379357fe5b60200260200101518d88613382565b91505b84156137cc576137c98784815181106137ba57fe5b60200260200101518c87613382565b90505b60006137ff8e6137e58c6000015187815181106136e057fe5b6137f88d6020015188815181106136e057fe5b8686614349565b90506001600160801b038116156139175760d0805460ff60d81b1916600160d81b179081905560f780546001600160a01b039092169163aafe29c09130918291908990811061384a57fe5b90600052602060002090600a91828204019190066003029054906101000a900460020b60f7600101898154811061387d57fe5b90600052602060002090600a91828204019190066003029054906101000a900460020b866040518663ffffffff1660e01b81526004016138c195949392919061569c565b606060405180830381600087803b1580156138db57600080fd5b505af11580156138ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613913919061550c565b5050505b505050806001019050613774565b506000871315613960576064600589020461393e613345565b1061395b5760405162461bcd60e51b8152600401612e09906158a5565b613995565b600087121561399557606460058a02046139786132ad565b106139955760405162461bcd60e51b8152600401612e09906158a5565b50505050505050505050565b6000610a41838361440d565b6000610a41836001600160a01b038416614471565b60008060008060006139d48787612143565b6001600160801b039182169850169550929350613a0992508a91506139fa905089613f86565b613a0389613f86565b846142ad565b80955081965050505093509350935093565b600061061a82614489565b6001600160a01b038216613a6b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615bc96021913960400191505060405180910390fd5b613a77826000836109b5565b613ab481604051806060016040528060228152602001615a92602291396001600160a01b038516600090815260336020526040902054919061234a565b6001600160a01b038316600090815260336020526040902055603554613ada9082613d5b565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b601892831b62ffffff9283161790921b91161790565b600054610100900460ff1680613b515750613b516123e1565b80613b5f575060005460ff16155b613b9a5760405162461bcd60e51b815260040180806020018281038252602e815260200180615b52602e913960400191505060405180910390fd5b600054610100900460ff1615801561261f576000805460ff1961ff001990911661010017166001179055801561130f576000805461ff001916905550565b600054610100900460ff1680613bf15750613bf16123e1565b80613bff575060005460ff16155b613c3a5760405162461bcd60e51b815260040180806020018281038252602e815260200180615b52602e913960400191505060405180910390fd5b600054610100900460ff16158015613c65576000805460ff1961ff0019909116610100171660011790555b8251613c78906036906020860190614a1d565b508151613c8c906037906020850190614a1d565b506038805460ff1916601217905580156109b5576000805461ff0019169055505050565b600054610100900460ff1680613cc95750613cc96123e1565b80613cd7575060005460ff16155b613d125760405162461bcd60e51b815260040180806020018281038252602e815260200180615b52602e913960400191505060405180910390fd5b600054610100900460ff16158015613d3d576000805460ff1961ff0019909116610100171660011790555b6065805460ff19169055801561130f576000805461ff001916905550565b600082821115613db2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000613e0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661448d9092919063ffffffff16565b8051909150156109b557808060200190516020811015613e2c57600080fd5b50516109b55760405162461bcd60e51b815260040180806020018281038252602a815260200180615c33602a913960400191505060405180910390fd5b6000610a41836001600160a01b0384166144a4565b6000610a41836001600160a01b0384166144ee565b600081831015613ea35781610a41565b5090919050565b6000831580613ec557505082820282848281613ec257fe5b04145b15613ee65760008211613ed757600080fd5b81810490829006151501610a41565b613ef1848484613382565b905060008280613efd57fe5b8486091115610a41576000198110613f1457600080fd5b6001019392505050565b600082613f2d575060006106d6565b82820282848281613f3a57fe5b0414610a415760405162461bcd60e51b8152600401808060200182810382526021815260200180615b806021913960400191505060405180910390fd5b6000818310613ea35781610a41565b6000600282900b60171d62ffffff81841882900316620d89e8811115613fd7576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216613feb57600160801b613ffd565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615614031576ffff97272373d413259a46990580e213a0260801c5b6004821615614050576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561406f576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561408e576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156140ad576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156140cc576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156140eb576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561410b576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561412b576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561414b576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561416b576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561418b576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156141ab576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156141cb576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156141eb576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561420c576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561422c576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561424b576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614268576b048a170391f7dc42444e8fa20260801c5b60008560020b131561428357806000198161427f57fe5b0490505b64010000000081061561429757600161429a565b60005b60ff16602082901c019350505050919050565b600080836001600160a01b0316856001600160a01b031611156142ce579293925b846001600160a01b0316866001600160a01b0316116142f9576142f28585856145b4565b9150614340565b836001600160a01b0316866001600160a01b031610156143325761431e8685856145b4565b915061432b85878561461d565b9050614340565b61433d85858561461d565b90505b94509492505050565b6000836001600160a01b0316856001600160a01b03161115614369579293925b846001600160a01b0316866001600160a01b0316116143945761438d858585614660565b9050614404565b836001600160a01b0316866001600160a01b031610156143f65760006143bb878686614660565b905060006143ca8789866146c3565b9050806001600160801b0316826001600160801b0316106143eb57806143ed565b815b92505050614404565b6144018585846146c3565b90505b95945050505050565b8154600090821061444f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615a1e6022913960400191505060405180910390fd5b82600001828154811061445e57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b606061449c8484600085614700565b949350505050565b60006144b08383614471565b6144e6575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106d6565b5060006106d6565b600081815260018301602052604081205480156145aa578354600019808301919081019060009087908390811061452157fe5b906000526020600020015490508087600001848154811061453e57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061456e57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506106d6565b60009150506106d6565b6000826001600160a01b0316846001600160a01b031611156145d4579192915b836001600160a01b031661460d606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316613382565b8161461457fe5b04949350505050565b6000826001600160a01b0316846001600160a01b0316111561463d579192915b61449c826001600160801b03168585036001600160a01b0316600160601b613382565b6000826001600160a01b0316846001600160a01b03161115614680579192915b60006146a3856001600160a01b0316856001600160a01b0316600160601b613382565b90506144046146be84838888036001600160a01b0316613382565b61485b565b6000826001600160a01b0316846001600160a01b031611156146e3579192915b61449c6146be83600160601b8787036001600160a01b0316613382565b6060824710156147415760405162461bcd60e51b8152600401808060200182810382526026815260200180615afc6026913960400191505060405180910390fd5b61474a8561204d565b61479b576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106147d95780518252601f1990920191602091820191016147ba565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461483b576040519150601f19603f3d011682016040523d82523d6000602084013e614840565b606091505b5091509150614850828286614871565b979650505050505050565b806001600160801b038116811461061d57600080fd5b60608315614880575081610a41565b8251156148905782518084602001fd5b60405162461bcd60e51b815260206004820181815284516024840152845185939192839260440191908501908083836000831561239e578181015183820152602001612386565b82805482825590600052602060002090600901600a900481019282156149765791602002820160005b8382111561494557835183826101000a81548162ffffff021916908360020b62ffffff1602179055509260200192600301602081600201049283019260010302614900565b80156149745782816101000a81549062ffffff0219169055600301602081600201049283019260010302614945565b505b50614982929150614a99565b5090565b82805482825590600052602060002090600f016010900481019282156149765791602002820160005b838211156149ef57835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026149af565b80156149745782816101000a81549061ffff02191690556002016020816001010492830192600103026149ef565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614a535760008555614976565b82601f10614a6c57805160ff1916838001178555614976565b82800160010185558215614976579182015b82811115614976578251825591602001919060010190614a7e565b5b808211156149825760008155600101614a9a565b805161061d816159d4565b600082601f830112614ac9578081fd5b81356020614ade614ad983615968565b615944565b8281528181019085830183850287018401881015614afa578586fd5b855b85811015614b21578135614b0f816159e9565b84529284019290840190600101614afc565b5090979650505050505050565b600082601f830112614b3e578081fd5b81516020614b4e614ad983615968565b8281528181019085830183850287018401881015614b6a578586fd5b855b85811015614b215781516dffffffffffffffffffffffffffff81168114614b91578788fd5b84529284019290840190600101614b6c565b600082601f830112614bb3578081fd5b81516020614bc3614ad983615968565b8281528181019085830183850287018401881015614bdf578586fd5b855b85811015614b21578151614bf4816159d4565b84529284019290840190600101614be1565b600082601f830112614c16578081fd5b81356020614c26614ad983615968565b8281528181019085830183850287018401881015614c42578586fd5b855b85811015614b21578135614c5781615a0d565b84529284019290840190600101614c44565b600082601f830112614c79578081fd5b81516020614c89614ad983615968565b8281528181019085830183850287018401881015614ca5578586fd5b855b85811015614b2157815184529284019290840190600101614ca7565b8051801515811461061d57600080fd5b60008083601f840112614ce4578182fd5b50813567ffffffffffffffff811115614cfb578182fd5b602083019150836020828501011115614d1357600080fd5b9250929050565b80516005811061061d57600080fd5b600082601f830112614d39578081fd5b8151614d47614ad982615986565b818152846020838601011115614d5b578283fd5b61449c8260208301602087016159a8565b805163ffffffff8116811461061d57600080fd5b805160ff8116811461061d57600080fd5b600060208284031215614da2578081fd5b8135610a41816159d4565b600060208284031215614dbe578081fd5b8151610a41816159d4565b60008060008060808587031215614dde578283fd5b8451614de9816159d4565b6020860151909450614dfa816159d4565b6040860151909350614e0b816159e9565b9150614e1960608601614d6c565b905092959194509250565b60008060408385031215614e36578182fd5b8235614e41816159d4565b91506020830135614e51816159d4565b809150509250929050565b60008060008060808587031215614e71578182fd5b8435614e7c816159d4565b93506020850135614e8c816159d4565b92506040850135614e9c816159d4565b9150606085013567ffffffffffffffff811115614eb7578182fd5b8501601f81018713614ec7578182fd5b8035614ed5614ad982615986565b818152886020838501011115614ee9578384fd5b81602084016020830137908101602001929092525092959194509250565b600080600060608486031215614f1b578081fd5b8335614f26816159d4565b92506020840135614f36816159d4565b929592945050506040919091013590565b60008060408385031215614f59578182fd5b8235614f64816159d4565b946020939093013593505050565b60008060008060808587031215614f87578182fd5b845167ffffffffffffffff80821115614f9e578384fd5b818701915087601f830112614fb1578384fd5b81516020614fc1614ad983615968565b82815281810190858301838502870184018d1015614fdd578889fd5b8896505b8487101561500d5780518060060b8114614ff957898afd5b835260019690960195918301918301614fe1565b50918a0151919850909350505080821115615026578384fd5b61503288838901614ba3565b94506040870151915080821115615047578384fd5b61505388838901614b2e565b93506060870151915080821115615068578283fd5b5061507587828801614c69565b91505092959194509250565b600060208284031215615092578081fd5b610a4182614cc3565b6000602082840312156150ac578081fd5b5035919050565b600080604083850312156150c5578182fd5b823591506020830135614e51816159d4565b600080604083850312156150e9578182fd5b50508035926020909101359150565b600060208284031215615109578081fd5b81356001600160e01b031981168114610a41578182fd5b600080600060608486031215615134578081fd5b833561513f816159e9565b9250602084013561514f816159e9565b9150604084013561515f816159f8565b809150509250925092565b6000806040838503121561517c578182fd5b505080516020909101519092909150565b600080600080606085870312156151a2578182fd5b8435935060208501359250604085013567ffffffffffffffff8111156151c6578283fd5b6151d287828801614cd3565b95989497509550505050565b6000602082840312156151ef578081fd5b815167ffffffffffffffff80821115615206578283fd5b9083019060c08286031215615219578283fd5b61522360c0615944565b61522c83614d1a565b81526020830151602082015260408301516040820152606083015182811115615253578485fd5b61525f87828601614d29565b60608301525061527160808401614aae565b608082015260a083015182811115615287578485fd5b61529387828601614d29565b60a08301525095945050505050565b600080604083850312156152b4578182fd5b82516152bf816159f8565b6020840151909250614e51816159f8565b60008060008060008060c087890312156152e8578384fd5b86516152f3816159f8565b955061530160208801614d6c565b94506040870151935060608701519250608087015161531f816159f8565b60a0880151909250615330816159f8565b809150509295509295509295565b600080600080600080600080610100898b03121561535a578586fd5b8851615365816159d4565b60208a0151909850615376816159e9565b60408a015190975061538781615a0d565b60608a015190965061539881615a0d565b60808a01519095506153a981615a0d565b93506153b760a08a01614d80565b92506153c560c08a01614d80565b91506153d360e08a01614cc3565b90509295985092959890939650565b6000602082840312156153f3578081fd5b5051919050565b6000806000806060858703121561540f578182fd5b84359350602085013567ffffffffffffffff8082111561542d578384fd5b9086019060608289031215615440578384fd5b60405160608101818110838211171561545557fe5b604052823582811115615466578586fd5b6154728a828601614ab9565b825250602083013582811115615486578586fd5b6154928a828601614ab9565b6020830152506040830135828111156154a9578586fd5b6154b58a828601614c06565b6040830152508095505060408701359150808211156154d2578384fd5b506151d287828801614cd3565b6000806000606084860312156154f3578081fd5b8335925060208401359150604084013561515f816159d4565b600080600060608486031215615520578081fd5b8351925060208401519150604084015161515f816159f8565b6000806000806080858703121561554e578182fd5b843593506020850135925060408501359150606085013561556e816159d4565b939692955090935050565b600080600080600060a08688031215615590578283fd5b8535945060208601359350604086013592506060860135915060808601356155b7816159d4565b809150509295509295909350565b6000815180845260208085019450808401835b838110156155f757815160020b875295820195908201906001016155d8565b509495945050505050565b60007453544545525f48455243554c45535f5641554c545f60581b825282516156328160158501602087016159a8565b9190910160150192915050565b60006629aa22a2a9242b60c91b825282516156618160078501602087016159a8565b9190910160070192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039586168152939094166020840152600291820b6040840152900b60608201526001600160801b03909116608082015260c060a0820181905260009082015260e00190565b6001600160a01b03948516815292151560208401526040830191909152909116606082015260a06080820181905260009082015260c00190565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b60006060825261577260608301866155c5565b60208382038185015261578582876155c5565b84810360408601528551808252828701935090820190845b818110156157bd57845161ffff168352938301939183019160010161579d565b509098975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561580957835163ffffffff16835292840192918401916001016157e7565b50909695505050505050565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b60029190910b815260200190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60006020825282518060208401526158918160408501602087016159a8565b601f01601f19169190910160400192915050565b6020808252600190820152605360f81b604082015260600190565b6020808252600190820152602b60f91b604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b918252602082015260400190565b9283526020830191909152604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561596057fe5b604052919050565b600067ffffffffffffffff82111561597c57fe5b5060209081020190565b600067ffffffffffffffff82111561599a57fe5b50601f01601f191660200190565b60005b838110156159c35781810151838201526020016159ab565b83811115610f635750506000910152565b6001600160a01b038116811461130f57600080fd5b8060020b811461130f57600080fd5b6001600160801b038116811461130f57600080fd5b61ffff8116811461130f57600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7445524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564c62a261ff212893ed0a2ac422d821462bb04a4b5c153a746ad6a15108fb4f95145524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a264697066735822122027a738ff61d31b95e542fba0dcc6f40d789038f5c3a4239f28b5db1002daeb0064736f6c63430007060033496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564