@uniswap/v4-periphery
Version:
🦄 Peripheral smart contracts for interacting with Uniswap v4
1 lines • 711 kB
JSON
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_SCRIPT","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"_PERMIT_BATCH_TYPEHASH","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"_PERMIT_DETAILS_TYPEHASH","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"_PERMIT_SINGLE_TYPEHASH","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"_WETH9","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IWETH9"}],"stateMutability":"view"},{"type":"function","name":"deployAndApprovePosm","inputs":[{"name":"poolManager","type":"address","internalType":"contract IPoolManager"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deployPermit2","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"deployPosmHookModifyLiquidities","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"deployPosmHookSavesDelta","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"positionDescriptor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPositionDescriptor"}],"stateMutability":"view"},{"type":"function","name":"run","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_permit_batch_succeeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_permit_single_succeeds","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x600c805460ff199081166001908117909255601f80548216831790556077196080819052607860a0819052670de0b6b3a764000060c08190525f60e0819052602080546378ffff8865ffffffffffff19918216811790925560219390935560228290556101009490945261012092909252670de0b6b3a763ffff196101408190526101608390526023805490921690931790556024919091556025556101e06040526101808290526063196101a08190526bb504f333f9de6484597d89b36101c0819052602680549093168417909255602755602880546001600160a01b0319908116909217905560428054909116600e17905560438054614000600160a11b036001600160a81b031990911617905561011a9042906101fe565b604555604b80546001600160a01b03191661050017905560405161013d906101f0565b604051809103905ff080158015610156573d5f803e3d5ffd5b50604c80546001600160a01b03929092166001600160a01b0319928316179055604e8054821661abcd179055605080548216610f8017905560558054909116678ac7230489e800009081179091556101af9042906101fe565b605580546001600160a01b0316600160a01b65ffffffffffff93909316929092026001600160d01b03169190911790553480156101ea575f80fd5b50610223565b61121e80620219a183390190565b8082018082111561021d57634e487b7160e01b5f52601160045260245ffd5b92915050565b6202176f80620002325f395ff3fe6080604052600436106101d3575f3560e01c806385226c81116100fd578063c5df4f0311610092578063cfb3f0a811610062578063cfb3f0a8146105cd578063e20c9f71146105e1578063f8ccbf47146105f5578063fa7626d414610626575f80fd5b8063c5df4f031461055e578063c7b8e15d14610591578063c9ec1872146105a5578063cb695390146105b9575f80fd5b8063b1a73b8a116100cd578063b1a73b8a146104a8578063b5508aa914610512578063ba414fa614610526578063c04062261461054a575f80fd5b806385226c8114610425578063916a17c61461044657806393ad73ed14610467578063b0464fdc14610494575f80fd5b80633f7286f41161017357806366d9a9a01161014357806366d9a9a0146103a957806367382c05146103ca5780636e4f2775146103de578063735c56b114610411575f80fd5b80633f7286f414610314578063542524dd146103285780636302c3cf1461033c57806363e8f7281461037d575f80fd5b80631ed7831c116101ae5780631ed7831c146102695780632ade38801461028a57806339cd2013146102ab5780633e5e3c2314610300575f80fd5b806303ef31f6146101de5780630a9254e4146101ff578063106d023114610213575f80fd5b366101da57005b5f80fd5b3480156101e9575f80fd5b506101fd6101f83660046138f4565b61063f565b005b34801561020a575f80fd5b506101fd610653565b34801561021e575f80fd5b5060475461023f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610274575f80fd5b5061027d6108c2565b604051610260919061390f565b348015610295575f80fd5b5061029e61092f565b60405161026091906139b3565b3480156102b6575f80fd5b506023546024546025546102d892600281810b936301000000909204900b9184565b60408051600295860b81529390940b6020840152928201526060810191909152608001610260565b34801561030b575f80fd5b5061027d610a78565b34801561031f575f80fd5b5061027d610ae3565b348015610333575f80fd5b5061023f610b4e565b348015610347575f80fd5b5061036f7faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f7944086381565b604051908152602001610260565b348015610388575f80fd5b50604d5461023f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b4575f80fd5b506103bd610b70565b6040516102609190613b21565b3480156103d5575f80fd5b506101fd610ce9565b3480156103e9575f80fd5b5061036f7f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b367881565b34801561041c575f80fd5b506101fd610dfd565b348015610430575f80fd5b50610439611098565b6040516102609190613bbd565b348015610451575f80fd5b5061045a611163565b6040516102609190613c32565b348015610472575f80fd5b506020546021546022546102d892600281810b936301000000909204900b9184565b34801561049f575f80fd5b5061045a611266565b3480156104b3575f80fd5b506026546027546028546104df9260ff16919073ffffffffffffffffffffffffffffffffffffffff1683565b604080519315158452602084019290925273ffffffffffffffffffffffffffffffffffffffff1690820152606001610260565b34801561051d575f80fd5b50610439611369565b348015610531575f80fd5b5061053a611434565b6040519015158152602001610260565b348015610555575f80fd5b5061023f611504565b348015610569575f80fd5b5061036f7ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d081565b34801561059c575f80fd5b5061023f6115ca565b3480156105b0575f80fd5b5061023f6115da565b3480156105c4575f80fd5b506101fd6115e8565b3480156105d8575f80fd5b506101fd611769565b3480156105ec575f80fd5b5061027d611bd2565b348015610600575f80fd5b5060435461053a9074010000000000000000000000000000000000000000900460ff1681565b348015610631575f80fd5b50601f5461053a9060ff1681565b61064881611c3d565b610650611de0565b50565b61065b611e26565b61066361240f565b602a80547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff938416179091556029805490911692821692909217909155602b546106c59116611c3d565b60465460405173ffffffffffffffffffffffffffffffffffffffff909116906106ed9061380f565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015610723573d5f803e3d5ffd5b50605480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055604654604080517f3644e51500000000000000000000000000000000000000000000000000000000815290519190921691633644e5159160048083019260209291908290030181865afa1580156107be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e29190613cd4565b605655631234123460578190556040517fffa186490000000000000000000000000000000000000000000000000000000081526004810191909152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015610857573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061087b9190613ceb565b605880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6060601680548060200260200160405190810160405280929190818152602001828054801561092557602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108fa575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015610a6f575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610a58578382905f5260205f200180546109cd90613d06565b80601f01602080910402602001604051908101604052809291908181526020018280546109f990613d06565b8015610a445780601f10610a1b57610100808354040283529160200191610a44565b820191905f5260205f20905b815481529060010190602001808311610a2757829003601f168201915b5050505050815260200190600101906109b0565b505050508152505081526020019060010190610952565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561092557602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108fa575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561092557602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108fa575050505050905090565b610b6d600173fffd8963efd1fc6a506488495d951d5263988d26613d84565b81565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015610a6f578382905f5260205f2090600202016040518060400160405290815f82018054610bc390613d06565b80601f0160208091040260200160405190810160405280929190818152602001828054610bef90613d06565b8015610c3a5780601f10610c1157610100808354040283529160200191610c3a565b820191905f5260205f20905b815481529060010190602001808311610c1d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610cd157602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610c7e5790505b50505050508152505081526020019060010190610b93565b5f604051610cf69061381d565b604051809103905ff080158015610d0f573d5f803e3d5ffd5b50604b546040805173ffffffffffffffffffffffffffffffffffffffff808516803b8381016020908101909552808452959650737109709ecfa91a80626ff3989d68f67f5b1dd12d9563b4d6c78295909216935f91908401903c6040518363ffffffff1660e01b8152600401610d86929190613db0565b5f604051808303815f87803b158015610d9d575f80fd5b505af1158015610daf573d5f803e3d5ffd5b5050604b54604a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055505050565b6029546055545f91610e6b9173ffffffffffffffffffffffffffffffffffffffff9182169181169065ffffffffffff7401000000000000000000000000000000000000000082048116917a010000000000000000000000000000000000000000000000000000900416612485565b90505f610e7d82605754605654612562565b6054546058546040517f2b67b57000000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff91821692632b67b57092610edd92169086908690600401613de6565b5f604051808303815f875af1158015610ef8573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610f3d9190810190613ee1565b506046546058546029546040517f927da10500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015290821660248201523060448201525f928392839291169063927da10590606401606060405180830381865afa158015610fc5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe99190613feb565b60555492955090935091506110179073ffffffffffffffffffffffffffffffffffffffff80861691166125d1565b6055546110479065ffffffffffff80851691740100000000000000000000000000000000000000009004166125d1565b6055546110919065ffffffffffff80841691611084917a01000000000000000000000000000000000000000000000000000090910416600161402d565b65ffffffffffff166125d1565b5050505050565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015610a6f578382905f5260205f200180546110d890613d06565b80601f016020809104026020016040519081016040528092919081815260200182805461110490613d06565b801561114f5780601f106111265761010080835404028352916020019161114f565b820191905f5260205f20905b81548152906001019060200180831161113257829003601f168201915b5050505050815260200190600101906110bb565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015610a6f575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561124e57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116111fb5790505b50505050508152505081526020019060010190611186565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015610a6f575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561135157602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116112fe5790505b50505050508152505081526020019060010190611289565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015610a6f578382905f5260205f200180546113a990613d06565b80601f01602080910402602001604051908101604052809291908181526020018280546113d590613d06565b80156114205780601f106113f757610100808354040283529160200191611420565b820191905f5260205f20905b81548152906001019060200180831161140357829003601f168201915b50505050508152602001906001019061138c565b6008545f9060ff161561144b575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa1580156114d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114fd9190613cd4565b1415905090565b5f80604051806123e001604052806123c081526020016201f3a36123c091396040517fb4d6c782000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063b4d6c78290611587906e22d473030f116ddee9f6b43ac78ba3908590600401613db0565b5f604051808303815f87803b15801561159e575f80fd5b505af11580156115b0573d5f803e3d5ffd5b505050506e22d473030f116ddee9f6b43ac78ba391505090565b610b6d6401000276a3600161404b565b5f6115e3611504565b905090565b5f6040516115f59061382b565b604051809103905ff08015801561160e573d5f803e3d5ffd5b506050546040805173ffffffffffffffffffffffffffffffffffffffff808516803b8381016020908101909552808452959650737109709ecfa91a80626ff3989d68f67f5b1dd12d9563b4d6c78295909216935f91908401903c6040518363ffffffff1660e01b8152600401611685929190613db0565b5f604051808303815f87803b15801561169c575f80fd5b505af11580156116ae573d5f803e3d5ffd5b5050605054604f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155604480546046546040517f90107afe000000000000000000000000000000000000000000000000000000008152918516600483015290931660248401529093506390107afe9250015b5f604051808303815f87803b158015611757575f80fd5b505af1158015611091573d5f803e3d5ffd5b6040805160028082526060820183525f926020830190803683375050602954825192935073ffffffffffffffffffffffffffffffffffffffff16918391505f906117b5576117b5614077565b73ffffffffffffffffffffffffffffffffffffffff9283166020918202929092010152602a548251911690829060019081106117f3576117f3614077565b73ffffffffffffffffffffffffffffffffffffffff92831660209182029290920101526055545f9161186a91849181169065ffffffffffff7401000000000000000000000000000000000000000082048116917a010000000000000000000000000000000000000000000000000000900416612654565b90505f61187c826057546056546127e1565b6054546058546040517e2a3e3a00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff91821692622a3e3a926118da921690869086906004016140a4565b5f604051808303815f875af11580156118f5573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261193a9190810190613ee1565b506046546058546029546040517f927da10500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015290821660248201523060448201525f928392839291169063927da10590606401606060405180830381865afa1580156119c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e69190613feb565b6055549295509093509150611a149073ffffffffffffffffffffffffffffffffffffffff80861691166125d1565b605554611a449065ffffffffffff80851691740100000000000000000000000000000000000000009004166125d1565b605554611a819065ffffffffffff80841691611084917a01000000000000000000000000000000000000000000000000000090910416600161402d565b604654605854602a546040517f927da10500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015290821660248201523060448201525f928392839291169063927da10590606401606060405180830381865afa158015611b08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b2c9190613feb565b6055549295509093509150611b5a9073ffffffffffffffffffffffffffffffffffffffff80861691166125d1565b605554611b8a9065ffffffffffff80851691740100000000000000000000000000000000000000009004166125d1565b605554611bc79065ffffffffffff80841691611084917a01000000000000000000000000000000000000000000000000000090910416600161402d565b505050505050505050565b6060601580548060200260200160405190810160405280929190818152602001828054801561092557602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116108fa575050505050905090565b611c456115da565b604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055611c92612adc565b604d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055611d01817f4554480000000000000000000000000000000000000000000000000000000000612bc2565b604980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155604654604d5460408051808201909152600181527f03000000000000000000000000000000000000000000000000000000000000006020820152611d9894869493811693620186a0939092911690612ce2565b604480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b602954611e029073ffffffffffffffffffffffffffffffffffffffff16612e92565b602a54611e249073ffffffffffffffffffffffffffffffffffffffff16612e92565b565b611e2e612fc2565b602b5460405173ffffffffffffffffffffffffffffffffffffffff90911690611e5690613839565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611e8c573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611ee090613847565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611f16573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611f6a90613855565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015611fa0573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690611ff490613863565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff08015801561202a573d5f803e3d5ffd5b50602d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b5460405191169061207e90613871565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156120b4573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b546040519116906121089061387f565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff08015801561213e573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b546040519116906121929061388d565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff0801580156121c8573d5f803e3d5ffd5b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b5460405191169061221c9061389b565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015612252573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560408051808201909152600d81527f666565436f6e74726f6c6c65720000000000000000000000000000000000000060208201526122d59061304d565b603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690612328906138a9565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff08015801561235e573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b546035546040517f2d7713890000000000000000000000000000000000000000000000000000000081529083166004820152911690632d771389906024015f604051808303815f87803b1580156123f7575f80fd5b505af1158015612409573d5f803e3d5ffd5b50505050565b5f805f61243d60027f800000000000000000000000000000000000000000000000000000000000000061305e565b905061247c815f8151811061245457612454614077565b60200260200101518260018151811061246f5761246f614077565b60200260200101516131e7565b92509250509091565b6040805160e0810182525f606082018181526080830182905260a0830182905260c08301829052825260208201819052918101919091525f60405180608001604052808773ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018565ffffffffffff1681526020018465ffffffffffff16815250905060405180606001604052808281526020013073ffffffffffffffffffffffffffffffffffffffff16815260200142606461255691906141b7565b90529695505050505050565b60605f805f612572878787613234565b6040805160208101939093528281019190915260f89290921b7fff0000000000000000000000000000000000000000000000000000000000000016606082015281516041818303018152606190910190915293505050505b9392505050565b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044015f6040518083038186803b15801561263a575f80fd5b505afa15801561264c573d5f803e3d5ffd5b505050505050565b61268c6040518060600160405280606081526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81525090565b5f855167ffffffffffffffff8111156126a7576126a7613eb4565b60405190808252806020026020018201604052801561271657816020015b604080516080810182525f8082526020808301829052928201819052606082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816126c55790505b5090505f5b86518110156127bf57604051806080016040528088838151811061274157612741614077565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018665ffffffffffff1681526020018565ffffffffffff168152508282815181106127ac576127ac614077565b602090810291909101015260010161271b565b50604080516060810182528281523060208201529081016125564260646141b7565b60605f845f01515167ffffffffffffffff81111561280157612801613eb4565b60405190808252806020026020018201604052801561282a578160200160208202803683370190505b5090505f5b8551518110156128c3577f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678865f0151828151811061286f5761286f614077565b60200260200101516040516020016128889291906141ca565b604051602081830303815290604052805190602001208282815181106128b0576128b0614077565b602090810291909101015260010161282f565b505f837faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f79440863836040516020016128f8919061423b565b60405160208183030381529060405280519060200120886020015189604001516040516020016129579493929190938452602084019290925273ffffffffffffffffffffffffffffffffffffffff166040830152606082015260800190565b604051602081830303815290604052805190602001206040516020016129af9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020909101207fe341eaa4000000000000000000000000000000000000000000000000000000008252600482018790526024820181905291505f9081908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa158015612a59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a7d9190614270565b6040805160208101939093528281019190915260f89290921b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260619091019091529998505050505050505050565b5f80612b1c6040518060400160405280600481526020017f574554480000000000000000000000000000000000000000000000000000000081525061304d565b604c5460408051602073ffffffffffffffffffffffffffffffffffffffff909316803b8083018501909352828252939450737109709ecfa91a80626ff3989d68f67f5b1dd12d9363b4d6c782938693915f918401903c6040518363ffffffff1660e01b8152600401612b8f929190613db0565b5f604051808303815f87803b158015612ba6575f80fd5b505af1158015612bb8573d5f803e3d5ffd5b5092949350505050565b604d5460408051808201909152600181525f6020820181905291612c0091859173ffffffffffffffffffffffffffffffffffffffff1690859061342b565b604780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155604e5460408051602080820183525f82528251808401909352600183527f030000000000000000000000000000000000000000000000000000000000000090830152612c95949290921691906135c9565b604880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216918217905590505b92915050565b6040805173ffffffffffffffffffffffffffffffffffffffff80891660208301528088169282019290925260608101869052818516608082015290831660a08201525f90819060c001604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152908290527f8d1cc92500000000000000000000000000000000000000000000000000000000825260206004830152602360248301527f506f736974696f6e4d616e616765722e736f6c3a506f736974696f6e4d616e6160448301527f6765720000000000000000000000000000000000000000000000000000000000606483015291505f90737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906084015f60405180830381865afa158015612e14573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612e599190810190613ee1565b82604051602001612e6b9291906142c0565b6040516020818303038152906040529050838151602083015ff59998505050505050505050565b6046546040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201529082169063095ea7b3906044016020604051808303815f875af1158015612f27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f4b91906142d4565b50604654604480546040517f87517c4500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152918216602482015291820181905265ffffffffffff6064830152909116906387517c4590608401611740565b30604051612fcf906138b7565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613005573d5f803e3d5ffd5b50602b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b5f613057826136b4565b5092915050565b60608260ff1667ffffffffffffffff81111561307c5761307c613eb4565b6040519080825280602002602001820160405280156130a5578160200160208202803683370190505b5090505f5b8360ff168160ff1610156130575760126040516130c6906138c5565b6130d091906142f3565b604051809103905ff0801580156130e9573d5f803e3d5ffd5b50828260ff16815181106130ff576130ff614077565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160ff168151811061314e5761314e614077565b60209081029190910101516040517f40c10f190000000000000000000000000000000000000000000000000000000081523060048201526024810185905273ffffffffffffffffffffffffffffffffffffffff909116906340c10f19906044015f604051808303815f87803b1580156131c5575f80fd5b505af11580156131d7573d5f803e3d5ffd5b5050600190920191506130aa9050565b5f808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16101561322757508290508161322d565b50819050825b9250929050565b5f805f807f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678875f015160405160200161326e9291906141ca565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201208a8201518b8401517ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d08487015285850183905273ffffffffffffffffffffffffffffffffffffffff90911660608601526080808601919091528351808603909101815260a08501909352825192909101919091207f190100000000000000000000000000000000000000000000000000000000000060c084015260c2830188905260e283015291505f9061010201604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020909101207fe341eaa400000000000000000000000000000000000000000000000000000000825260048201899052602482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063e341eaa490604401606060405180830381865afa1580156133f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061341a9190614270565b919a90995090975095505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8087166020830152851691810191909152606081018390525f908190608001604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152908290527f8d1cc92500000000000000000000000000000000000000000000000000000000825260206004830152602960248301527f506f736974696f6e44657363726970746f722e736f6c3a506f736974696f6e4460448301527f657363726970746f720000000000000000000000000000000000000000000000606483015291505f90737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc925906084015b5f60405180830381865afa15801561354d573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526135929190810190613ee1565b826040516020016135a49291906142c0565b6040516020818303038152906040529050838151602083015ff5979650505050505050565b5f808585856040516020016135e09392919061437d565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152908290527f8d1cc92500000000000000000000000000000000000000000000000000000000825260206004830152603b60248301527f5472616e73706172656e745570677261646561626c6550726f78792e736f6c3a60448301527f5472616e73706172656e745570677261646561626c6550726f78790000000000606483015291505f90737109709ecfa91a80626ff3989d68f67f5b1dd12d90638d1cc92590608401613533565b5f80826040516020016136c791906143c7565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529082905280516020909101207fffa18649000000000000000000000000000000000000000000000000000000008252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa158015613764573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137889190613ceb565b6040517fc657c718000000000000000000000000000000000000000000000000000000008152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c718906137dd9085908790600401613db0565b5f604051808303815f87803b1580156137f4575f80fd5b505af1158015613806573d5f803e3d5ffd5b50505050915091565b6106e680620043d383390190565b6108048062004ab983390190565b610f9080620052bd83390190565b611fad806200624d83390190565b6110af80620081fa83390190565b611c3d80620092a983390190565b611508806200aee683390190565b611793806200c3ee83390190565b61128f806200db8183390190565b610da4806200ee1083390190565b615387806200fbb483390190565b6128fb8062014f3b83390190565b616a05806201783683390190565b611168806201e23b83390190565b73ffffffffffffffffffffffffffffffffffffffff81168114610650575f80fd5b5f60208284031215613904575f80fd5b81356125ca816138d3565b602080825282518282018190525f918401906040840190835b8181101561395c57835173ffffffffffffffffffffffffffffffffffffffff16835260209384019390920191600101613928565b509095945050505050565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613ab9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805173ffffffffffffffffffffffffffffffffffffffff168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b81811015613a9f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352613a89848651613967565b6020958601959094509290920191600101613a4f565b5091975050506020948501949290920191506001016139d9565b50929695505050505050565b5f8151808452602084019350602083015f5b82811015613b175781517fffffffff0000000000000000000000000000000000000000000000000000000016865260209586019590910190600101613ad7565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613ab9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160408752613b8b6040880182613967565b9050602082015191508681036020880152613ba68183613ac5565b965050506020938401939190910190600101613b47565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613ab9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452613c1d858351613967565b94506020938401939190910190600101613be3565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613ab9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815173ffffffffffffffffffffffffffffffffffffffff81511686526020810151905060406020870152613cbe6040870182613ac5565b9550506020938401939190910190600101613c58565b5f60208284031215613ce4575f80fd5b5051919050565b5f60208284031215613cfb575f80fd5b81516125ca816138d3565b600181811c90821680613d1a57607f821691505b602082108103613d51577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff8281168282160390811115612cdc57612cdc613d57565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201525f613dde6040830184613967565b949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152613e6a60208201845173ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015265ffffffffffff604082015116604083015265ffffffffffff60608201511660608301525050565b73ffffffffffffffffffffffffffffffffffffffff60208401511660a0820152604083015160c082015261010060e08201525f613eab610100830184613967565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60208284031215613ef1575f80fd5b815167ffffffffffffffff811115613f07575f80fd5b8201601f81018413613f17575f80fd5b805167ffffffffffffffff811115613f3157613f31613eb4565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715613f9d57613f9d613eb4565b604052818152828201602001861015613fb4575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b805165ffffffffffff81168114613fe6575f80fd5b919050565b5f805f60608486031215613ffd575f80fd5b8351614008816138d3565b925061401660208501613fd1565b915061402460408501613fd1565b90509250925092565b65ffffffffffff8181168382160190811115612cdc57612cdc613d57565b73ffffffffffffffffffffffffffffffffffffffff8181168382160190811115612cdc57612cdc613d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f60c08201845160608085015281815180845260e0860191506020830193505f92505b8083101561416e5761415782855173ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015265ffffffffffff604082015116604083015265ffffffffffff60608201511660608301525050565b6080820191506020840193506001830192506140e7565b5073ffffffffffffffffffffffffffffffffffffffff6020880151166080860152604087015160a086015284810360408601526141ab8187613967565b98975050505050505050565b80820180821115612cdc57612cdc613d57565b82815260a081016125ca602083018473ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015265ffffffffffff604082015116604083015265ffffffffffff60608201511660608301525050565b81515f90829060208501835b82811015614265578151845260209384019390910190600101614247565b509195945050505050565b5f805f60608486031215614282575f80fd5b835160ff81168114614292575f80fd5b602085015160409095015190969495509392505050565b5f81518060208401855e5f93019283525090919050565b5f613dde6142ce83866142a9565b846142a9565b5f602082840312156142e4575f80fd5b815180151581146125ca575f80fd5b606081525f61432f60608301600481527f5445535400000000000000000000000000000000000000000000000000000000602082015260400190565b828103602084015261436b81600481527f5445535400000000000000000000000000000000000000000000000000000000602082015260400190565b91505060ff8316604083015292915050565b73ffffffffffffffffffffffffffffffffffffffff8416815273ffffffffffffffffffffffffffffffffffffffff83166020820152606060408201525f613eab6060830184613967565b5f6125ca82846142a956fe60a0604052348015600e575f80fd5b506040516106e63803806106e6833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b60805161065b61008b5f395f818160700152818161010a01526101eb015261065b5ff3fe608060405260043610610032575f3560e01c80622a3e3a1461003657806312261ee71461005f5780632b67b570146100b7575b5f80fd5b61004961004436600461029f565b6100ca565b604051610056919061031c565b60405180910390f35b34801561006a575f80fd5b506100927f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610056565b6100496100c536600461036f565b6101ab565b6040517f2a2d80d100000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632a2d80d1906101459088908890889088906004016104be565b5f604051808303815f87803b15801561015c575f80fd5b505af192505050801561016d575060015b6101a3573d80801561019a576040519150601f19603f3d011682016040523d82523d5f602084013e61019f565b606091505b5090505b949350505050565b6040517f2b67b57000000000000000000000000000000000000000000000000000000000815260609073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632b67b570906101459088908890889088906004016105d1565b73ffffffffffffffffffffffffffffffffffffffff81168114610247575f80fd5b50565b803561025581610226565b919050565b5f8083601f84011261026a575f80fd5b50813567ffffffffffffffff811115610281575f80fd5b602083019150836020828501011115610298575f80fd5b9250929050565b5f805f80606085870312156102b2575f80fd5b84356102bd81610226565b9350602085013567ffffffffffffffff8111156102d8575f80fd5b8501606081880312156102e9575f80fd5b9250604085013567ffffffffffffffff811115610304575f80fd5b6103108782880161025a565b95989497509550505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f805f80848603610100811215610384575f80fd5b853561038f81610226565b945060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820112156103c0575f80fd5b5060208501925060e085013567ffffffffffffffff811115610304575f80fd5b803565ffffffffffff81168114610255575f80fd5b803561040081610226565b73ffffffffffffffffffffffffffffffffffffffff168252602081013561042681610226565b73ffffffffffffffffffffffffffffffffffffffff16602083015265ffffffffffff610454604083016103e0565b16604083015265ffffffffffff61046d606083016103e0565b1660608301525050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152606060208201525f60c0820185357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1873603018112610514575f80fd5b860160208101903567ffffffffffffffff811115610530575f80fd5b8060071b3603821315610541575f80fd5b60608581015291829052905f9060e085015b818310156105785761056581856103f5565b6080938401936001939093019201610553565b61058460208a0161024a565b73ffffffffffffffffffffffffffffffffffffffff16608087015260408981013560a088018190528783039188019190915293506105c381888a610477565b9a9950505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff851681526105f760208201856103f5565b5f608085013561060681610226565b73ffffffffffffffffffffffffffffffffffffffff1660a08381019190915285013560c083015261010060e083018190526106449083018486610477565b969550505050505056fea164736f6c634300081a000a6080604052348015600e575f80fd5b506107e88061001c5f395ff3fe608060405234801561000f575f80fd5b50600436106100da575f3560e01c80636fe7e6eb11610088578063b6a8b0fa11610063578063b6a8b0fa14610252578063d934d2f714610260578063dc98354e14610273578063e1b4af6914610252575f80fd5b80636fe7e6eb146101e35780639f063efc146101f1578063b47b2fb114610204575f80fd5b806357c5b148116100b857806357c5b1481461017d578063623ea21a1461018e5780636c2bbe7e14610198575f80fd5b806321d0ee70146100de578063259982e5146100de578063575e24b414610127575b5f80fd5b6100f16100ec3660046104d7565b610281565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b61013a61013536600461055e565b6102b4