UNPKG

@uniswap/v4-periphery

Version:

🦄 Peripheral smart contracts for interacting with Uniswap v4

1 lines • 764 kB
{"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":"_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_execute_coalesce","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_crossCoalesce","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_crossFeed","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_crossShard","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_crossShift","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_crossSplit","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_feed","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_rebalance_perfect","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_shard","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_shift","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_split","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_execute_transplant","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_execute_increaseLiquidity_once","inputs":[{"name":"initialLiquidity","type":"uint256","internalType":"uint256"},{"name":"liquidityToAdd","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_execute_increaseLiquidity_twice_withClose","inputs":[{"name":"initialLiquidity","type":"uint256","internalType":"uint256"},{"name":"liquidityToAdd","type":"uint256","internalType":"uint256"},{"name":"liquidityToAdd2","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_execute_increaseLiquidity_twice_withSettlePair","inputs":[{"name":"initialLiquidity","type":"uint256","internalType":"uint256"},{"name":"liquidityToAdd","type":"uint256","internalType":"uint256"},{"name":"liquidityToAdd2","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_execute_mintAndIncrease","inputs":[{"name":"initialLiquidity","type":"uint256","internalType":"uint256"},{"name":"liquidityToAdd","type":"uint256","internalType":"uint256"}],"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":"0x600c805460ff199081166001908117909255601f80548216831790556077196080819052607860a0819052670de0b6b3a764000060c08190525f60e0819052602080546378ffff8865ffffffffffff19918216811790925560219390935560228290556101009490945261012092909252670de0b6b3a763ffff196101408190526101608390526023805490921690931790556024919091556025556101e06040526101808290526063196101a08190526bb504f333f9de6484597d89b36101c0819052602680549093168417909255602755602880546001600160a01b0319908116909217905560428054909116600e17905560438054614000600160a11b036001600160a81b031990911617905561011a904290610355565b604555604b80546001600160a01b03191661050017905560405161013d90610347565b604051809103905ff080158015610156573d5f803e3d5ffd5b50604c80546001600160a01b03929092166001600160a01b0319928316179055604e8054821661abcd17905560508054909116610f80179055604080518082019091526005815264414c49434560d81b60208201526101b490610228565b605580546001600160a01b0319166001600160a01b03929092169190911790556040805180820190915260038152622127a160e91b60208201526101f790610228565b605680546001600160a01b0319166001600160a01b0392909216919091179055348015610222575f80fd5b50610401565b5f61023282610239565b5092915050565b5f808260405160200161024c919061037a565b60408051808303601f190181529082905280516020909101206001625e79b760e01b03198252600482018190529150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa1580156102b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d99190610390565b6040516318caf8e360e31b8152909250737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c657c7189061031590859087906004016103bd565b5f604051808303815f87803b15801561032c575f80fd5b505af115801561033e573d5f803e3d5ffd5b50505050915091565b61121e8062023b4c83390190565b8082018082111561037457634e487b7160e01b5f52601160045260245ffd5b92915050565b5f82518060208501845e5f920191825250919050565b5f602082840312156103a0575f80fd5b81516001600160a01b03811681146103b6575f80fd5b9392505050565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b6202373c80620004105f395ff3fe6080604052600436106102c4575f3560e01c806376ea94b811610170578063b1a73b8a116100d1578063c7b8e15d11610087578063e20c9f7111610062578063e20c9f711461069e578063f8ccbf47146106b2578063fa7626d4146106e3575f80fd5b8063c7b8e15d14610662578063c9ec187214610676578063cb6953901461068a575f80fd5b8063b5eae9dc116100b7578063b5eae9dc14610318578063ba414fa61461062a578063c04062261461064e575f80fd5b8063b1a73b8a146105ac578063b5508aa914610616575f80fd5b806390b123551161012657806393ad73ed1161010c57806393ad73ed1461056b578063aa7f8a5414610318578063b0464fdc14610598575f80fd5b806390b1235514610318578063916a17c61461054a575f80fd5b80637f8644b1116101565780637f8644b11461031857806380e654cd1461031857806385226c8114610529575f80fd5b806376ea94b8146103185780637995f4f014610318575f80fd5b806339cd2013116102255780635ea3389d116101db57806366d9a9a0116101b657806366d9a9a0146104f457806367382c05146105155780637540db3c14610318575f80fd5b80635ea3389d1461031857806360140ef31461031857806363e8f728146104c8575f80fd5b80633f7286f41161020b5780633f7286f414610481578063542524dd14610495578063551d929b146104a9575f80fd5b806339cd2013146104185780633e5e3c231461046d575f80fd5b80631d26573e1161027a578063212b957911610260578063212b9579146103b95780632ade3880146103d857806333f79bd4146103f9575f80fd5b80631d26573e146103795780631ed7831c14610398575f80fd5b80630a9254e4116102aa5780630a9254e4146103045780630e0cdc5314610318578063106d023114610323575f80fd5b806301534e85146102cf57806303ef31f6146102e5575f80fd5b366102cb57005b5f80fd5b3480156102da575f80fd5b506102e36106fc565b005b3480156102f0575f80fd5b506102e36102ff366004615c29565b611117565b34801561030f575f80fd5b506102e361112b565b3480156102e3575f80fd5b34801561032e575f80fd5b5060475461034f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610384575f80fd5b506102e3610393366004615c44565b6114ac565b3480156103a3575f80fd5b506103ac6118b9565b6040516103709190615c6d565b3480156103c4575f80fd5b506102e36103d3366004615c44565b611926565b3480156103e3575f80fd5b506103ec611ba1565b6040516103709190615d11565b348015610404575f80fd5b506102e3610413366004615e23565b611cea565b348015610423575f80fd5b5060235460245460255461044592600281810b936301000000909204900b9184565b60408051600295860b81529390940b6020840152928201526060810191909152608001610370565b348015610478575f80fd5b506103ac611fe8565b34801561048c575f80fd5b506103ac612053565b3480156104a0575f80fd5b5061034f6120be565b3480156104b4575f80fd5b506102e36104c3366004615e23565b6120e0565b3480156104d3575f80fd5b50604d5461034f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104ff575f80fd5b506105086123fe565b6040516103709190615e9f565b348015610520575f80fd5b506102e3612577565b348015610534575f80fd5b5061053d61268b565b6040516103709190615f3b565b348015610555575f80fd5b5061055e612756565b6040516103709190615fb0565b348015610576575f80fd5b5060205460215460225461044592600281810b936301000000909204900b9184565b3480156105a3575f80fd5b5061055e612859565b3480156105b7575f80fd5b506026546027546028546105e39260ff16919073ffffffffffffffffffffffffffffffffffffffff1683565b604080519315158452602084019290925273ffffffffffffffffffffffffffffffffffffffff1690820152606001610370565b348015610621575f80fd5b5061053d61295c565b348015610635575f80fd5b5061063e612a27565b6040519015158152602001610370565b348015610659575f80fd5b5061034f612af7565b34801561066d575f80fd5b5061034f612bbd565b348015610681575f80fd5b5061034f612bcd565b348015610695575f80fd5b506102e3612bdb565b3480156106a9575f80fd5b506103ac612d63565b3480156106bd575f80fd5b5060435461063e9074010000000000000000000000000000000000000000900460ff1681565b3480156106ee575f80fd5b50601f5461063e9060ff1681565b604454604080517f75794a3c000000000000000000000000000000000000000000000000000000008152905168056bc75e2d63100000925f9273ffffffffffffffffffffffffffffffffffffffff909116916375794a3c916004808201926020929091908290030181865afa158015610777573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079b9190616052565b604080516101008101825260575473ffffffffffffffffffffffffffffffffffffffff90811660608301908152605854808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c085015260595490921660e08401528252605a5480820b602084015263010000009004900b9181019190915290915061087e908360015f5b6040519080825280601f01601f191660200182016040528015610878576020820181803683370190505b50612dce565b5f610887612e6c565b604080516101008101825260575473ffffffffffffffffffffffffffffffffffffffff90811660608301908152605854808316608085015262ffffff7401000000000000000000000000000000000000000082041660a085015277010000000000000000000000000000000000000000000000900460020b60c084015260595490911660e083015281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc460208201819052603c928201929092529192505f906109bf906c010000000000000000000000009061096390612f70565b6109708560400151612f70565b61097a8760801d90565b610983906160c3565b6fffffffffffffffffffffffffffffffff1661099f88600f0b90565b6109a8906160c3565b6fffffffffffffffffffffffffffffffff1661326d565b6029549091505f906109e69073ffffffffffffffffffffffffffffffffffffffff1661338e565b602a549091505f90610a0d9073ffffffffffffffffffffffffffffffffffffffff1661338e565b9050604a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663623ea21a6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610a75575f80fd5b505af1158015610a87573d5f803e3d5ffd5b505050505f610a94613448565b9050610b2b6003886001610aa88a60801d90565b610ab1906160c3565b610abb91906160ff565b6001610ac78b600f0b90565b610ad0906160c3565b610ada91906160ff565b604080515f8152602081018252610af5949392918101616127565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528391906134a4565b50845160208087015160408089015181515f81529384018252610b7494600294610af59491939192918b916fffffffffffffffffffffffffffffffff918291600191810161616f565b506040805160a08101825260575473ffffffffffffffffffffffffffffffffffffffff9081168252605854808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b606082015260595490911660808201525f90610c079083906136ba565b6044546045546040517fdd46508f00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff9091169163dd46508f91610c649185919060040161628d565b5f604051808303815f87803b158015610c7b575f80fd5b505af1158015610c8d573d5f803e3d5ffd5b505050505f610c9a613760565b6029549091505f90610cc19073ffffffffffffffffffffffffffffffffffffffff1661338e565b602a549091505f90610ce89073ffffffffffffffffffffffffffffffffffffffff1661338e565b9050610d20610cf78460801d90565b600f0b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6138a7565b610d2d610cf784600f0b90565b610d42610d3a83896162ae565b5f6001613923565b610d4f610d3a82886162ae565b5050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610db9575f80fd5b505af1158015610dcb573d5f803e3d5ffd5b50506044546040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018c905273ffffffffffffffffffffffffffffffffffffffff9091169250636352211e9150602401602060405180830381865afa158015610e3c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e6091906162c1565b506044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018a90525f9173ffffffffffffffffffffffffffffffffffffffff1690631efeed3390602401602060405180830381865afa158015610ece573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef291906162dc565b9050610f10816fffffffffffffffffffffffffffffffff165f6139a5565b5f600160445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa19190616052565b610fab91906162ae565b6044546040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018390529192506110499173ffffffffffffffffffffffffffffffffffffffff90911690636352211e90602401602060405180830381865afa15801561101f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061104391906162c1565b306139fd565b6044546040517f1efeed330000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff90911690631efeed3390602401602060405180830381865afa1580156110b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110da91906162dc565b915061110a826fffffffffffffffffffffffffffffffff16886fffffffffffffffffffffffffffffffff166139a5565b5050505050505050505050565b61112081613a6b565b611128613c0e565b50565b611133613c52565b61113b614235565b5050611145612577565b602954602a54604a546111859273ffffffffffffffffffffffffffffffffffffffff9081169281169116610bb86c010000000000000000000000006142b6565b6054558051603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff93841617909155602083015160378054604086015160608701519386167fffffffffffffffffff0000000000000000000000000000000000000000000000909216919091177401000000000000000000000000000000000000000062ffffff92831602177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff167701000000000000000000000000000000000000000000000091909316029190911790556080909201516038805490931690821617909155602b546112929116611117565b6055546112b49073ffffffffffffffffffffffffffffffffffffffff16614412565b6056546112d69073ffffffffffffffffffffffffffffffffffffffff16614412565b6055546112f89073ffffffffffffffffffffffffffffffffffffffff1661455f565b60565461131a9073ffffffffffffffffffffffffffffffffffffffff1661455f565b604080516101008101825260365473ffffffffffffffffffffffffffffffffffffffff90811660608301818152603754808416608086018190527401000000000000000000000000000000000000000080830462ffffff90811660a089018190527701000000000000000000000000000000000000000000000094859004600281900b60c08b015260385490981660e08a018190529589527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed460208a015261012c9890990197909752605780547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169096179055605880547fffffffffffffffffff0000000000000000000000000000000000000000000000169092179702969096177fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16939094169093029190911790925560598054909216179055605a80547fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001664012cfffed4179055565b565b6114c883670de0b6b3a7640000683635c9adc5dea0000061465c565b92506114e682670de0b6b3a7640000683635c9adc5dea0000061465c565b915061150481670de0b6b3a7640000683635c9adc5dea0000061465c565b90505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611571573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115959190616052565b604080516101008101825260575473ffffffffffffffffffffffffffffffffffffffff90811660608301908152605854808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c085015260595490921660e08401528252605a5480820b602084015263010000009004900b9181019190915290915061164b9085305f61084e565b5f611654613448565b90506116af5f83866fffffffffffffffffffffffffffffffff80845b6040519080825280601f01601f19166020018201604052801561169a576020820181803683370190505b50604051602001610af595949392919061630b565b506116ce5f83856fffffffffffffffffffffffffffffffff8084611670565b506040805160a08101825260575473ffffffffffffffffffffffffffffffffffffffff9081168252605854808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b606082015260595490911660808201525f906117619083906146a9565b6044546045546040517fdd46508f00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff9091169163dd46508f916117be9185919060040161628d565b5f604051808303815f87803b1580156117d5575f80fd5b505af11580156117e7573d5f803e3d5ffd5b50506044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018790525f935073ffffffffffffffffffffffffffffffffffffffff9091169150631efeed3390602401602060405180830381865afa15801561185a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187e91906162dc565b6fffffffffffffffffffffffffffffffff1690506118b081866118a1898b616364565b6118ab9190616364565b6139a5565b50505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561191c57602002820191905f5260205f20905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116118f1575b5050505050905090565b61194283670de0b6b3a7640000683635c9adc5dea0000061465c565b925061196082670de0b6b3a7640000683635c9adc5dea0000061465c565b915061197e81670de0b6b3a7640000683635c9adc5dea0000061465c565b90505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119eb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0f9190616052565b604080516101008101825260575473ffffffffffffffffffffffffffffffffffffffff90811660608301908152605854808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c085015260595490921660e08401528252605a5480820b602084015263010000009004900b91810191909152909150611ac6908560015f61084e565b5f611acf613448565b9050611aef5f83866fffffffffffffffffffffffffffffffff8084611670565b50611b0e5f83856fffffffffffffffffffffffffffffffff8084611670565b506040805160a08101825260575473ffffffffffffffffffffffffffffffffffffffff9081168252605854808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b606082015260595490911660808201525f906117619083906136ba565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015611ce1575f848152602080822060408051808201825260028702909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611cca578382905f5260205f20018054611c3f90616377565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6b90616377565b8015611cb65780601f10611c8d57610100808354040283529160200191611cb6565b820191905f5260205f20905b815481529060010190602001808311611c9957829003601f168201915b505050505081526020019060010190611c22565b505050508152505081526020019060010190611bc4565b50505050905090565b611d0682670de0b6b3a7640000683635c9adc5dea0000061465c565b9150611d2481670de0b6b3a7640000683635c9adc5dea0000061465c565b90505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db59190616052565b604080516101008101825260575473ffffffffffffffffffffffffffffffffffffffff90811660608301908152605854808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c085015260595490921660e08401528252605a5480820b602084015263010000009004900b91810191909152909150611e6c908460015f61084e565b604080516101008101825260575473ffffffffffffffffffffffffffffffffffffffff90811660608301908152605854808316608085015262ffffff7401000000000000000000000000000000000000000082041660a0850152770100000000000000000000000000000000000000000000009004600290810b60c085015260595490921660e08401528252605a5480820b602080850191909152630100000090910490910b8284015282515f8152908101909252611f2f9183919085906146ec565b6044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018390525f9173ffffffffffffffffffffffffffffffffffffffff1690631efeed3390602401602060405180830381865afa158015611f9c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc091906162dc565b6fffffffffffffffffffffffffffffffff169050611fe2816118ab8587616364565b50505050565b6060601880548060200260200160405190810160405280929190818152602001828054801561191c57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116118f1575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561191c57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116118f1575050505050905090565b6120dd600173fffd8963efd1fc6a506488495d951d5263988d266163c8565b81565b6120fc82670de0b6b3a7640000683635c9adc5dea0000061465c565b915061211a81670de0b6b3a7640000683635c9adc5dea0000061465c565b90505f60445f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612187573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121ab9190616052565b90505f6121b6613448565b605a54604080515f815260208101825292935061220592600292610af59260579282860b9263010000009004860b918b916fffffffffffffffffffffffffffffffff91829160019181016163f4565b506122245f83856fffffffffffffffffffffffffffffffff8084611670565b506040805160a08101825260575473ffffffffffffffffffffffffffffffffffffffff9081168252605854808216602084015262ffffff74010000000000000000000000000000000000000000820416938301939093527701000000000000000000000000000000000000000000000090920460020b606082015260595490911660808201525f906122b79083906136ba565b6044546045546040517fdd46508f00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff9091169163dd46508f916123149185919060040161628d565b5f604051808303815f87803b15801561232b575f80fd5b505af115801561233d573d5f803e3d5ffd5b50506044546040517f1efeed33000000000000000000000000000000000000000000000000000000008152600481018790525f935073ffffffffffffffffffffffffffffffffffffffff9091169150631efeed3390602401602060405180830381865afa1580156123b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d491906162dc565b6fffffffffffffffffffffffffffffffff1690506123f6816118ab8789616364565b505050505050565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015611ce1578382905f5260205f2090600202016040518060400160405290815f8201805461245190616377565b80601f016020809104026020016040519081016040528092919081815260200182805461247d90616377565b80156124c85780601f1061249f576101008083540402835291602001916124c8565b820191905f5260205f20905b8154815290600101906020018083116124ab57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561255f57602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001906004019060208260030104928301926001038202915080841161250c5790505b50505050508152505081526020019060010190612421565b5f60405161258490615b52565b604051809103905ff08015801561259d573d5f803e3d5ffd5b50604b546040805173ffffffffffffffffffffffffffffffffffffffff808516803b8381016020908101909552808452959650737109709ecfa91a80626ff3989d68f67f5b1dd12d9563b4d6c78295909216935f91908401903c6040518363ffffffff1660e01b815260040161261492919061650b565b5f604051808303815f87803b15801561262b575f80fd5b505af115801561263d573d5f803e3d5ffd5b5050604b54604a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055505050565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015611ce1578382905f5260205f200180546126cb90616377565b80601f01602080910402602001604051908101604052809291908181526020018280546126f790616377565b80156127425780601f1061271957610100808354040283529160200191612742565b820191905f5260205f20905b81548152906001019060200180831161272557829003601f168201915b5050505050815260200190600101906126ae565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015611ce1575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561284157602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116127ee5790505b50505050508152505081526020019060010190612779565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015611ce1575f84815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561294457602002820191905f5260205f20905f905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116128f15790505b5050505050815250508152602001906001019061287c565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015611ce1578382905f5260205f2001805461299c90616377565b80601f01602080910402602001604051908101604052809291908181526020018280546129c890616377565b8015612a135780601f106129ea57610100808354040283529160200191612a13565b820191905f5260205f20905b8154815290600101906020018083116129f657829003601f168201915b50505050508152602001906001019061297f565b6008545f9060ff1615612a3e575060085460ff1690565b6040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190527f6661696c6564000000000000000000000000000000000000000000000000000060248301525f9163667f9d7090604401602060405180830381865afa158015612acc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af09190616052565b1415905090565b5f80604051806123e001604052806123c08152602001620213706123c091396040517fb4d6c782000000000000000000000000000000000000000000000000000000008152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063b4d6c78290612b7a906e22d473030f116ddee9f6b43ac78ba390859060040161650b565b5f604051808303815f87803b158015612b91575f80fd5b505af1158015612ba3573d5f803e3d5ffd5b505050506e22d473030f116ddee9f6b43ac78ba391505090565b6120dd6401000276a36001616539565b5f612bd6612af7565b905090565b5f604051612be890615b60565b604051809103905ff080158015612c01573d5f803e3d5ffd5b506050546040805173ffffffffffffffffffffffffffffffffffffffff808516803b8381016020908101909552808452959650737109709ecfa91a80626ff3989d68f67f5b1dd12d9563b4d6c78295909216935f91908401903c6040518363ffffffff1660e01b8152600401612c7892919061650b565b5f604051808303815f87803b158015612c8f575f80fd5b505af1158015612ca1573d5f803e3d5ffd5b5050605054604f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155604480546046546040517f90107afe000000000000000000000000000000000000000000000000000000008152918516600483015290931660248401529093506390107afe9250015b5f604051808303815f87803b158015612d4a575f80fd5b505af1158015612d5c573d5f803e3d5ffd5b5050505050565b6060601580548060200260200160405190810160405280929190818152602001828054801561191c57602002820191905f5260205f2090815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116118f1575050505050905090565b5f612ddb858585856146f9565b6044546045546040517fdd46508f00000000000000000000000000000000000000000000000000000000815292935073ffffffffffffffffffffffffffffffffffffffff9091169163dd46508f91612e389185919060040161628d565b5f604051808303815f87803b158015612e4f575f80fd5b505af1158015612e61573d5f803e3d5ffd5b505050505050505050565b604a54604080517f57c5b14800000000000000000000000000000000000000000000000000000000815290515f9273ffffffffffffffffffffffffffffffffffffffff169163d934d2f79160019184916357c5b148916004808201926020929091908290030181865afa158015612ee5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f099190616052565b612f1391906162ae565b6040518263ffffffff1660e01b8152600401612f3191815260200190565b602060405180830381865afa158015612f4c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bd69190616052565b60020b5f60ff82901d80830118620d89e8811115612fb257612fb27f8b86327a0000000000000000000000000000000000000000000000000000000084614719565b7001fffcb933bd6fad37aa2d162d1a5940016001821602700100000000000000000000000000000000186002821615612ffb576ffff97272373d413259a46990580e213a0260801c5b600482161561301a576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613039576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613058576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613077576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613096576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156130b5576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156130d5576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156130f5576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613115576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613135576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613155576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615613175576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615613195576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156131b5576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156131d6576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156131f6576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613215576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613232576b048a170391f7dc42444e8fa20260801c5b5f84131561325d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff045b63ffffffff0160201c9392505050565b5f8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1611156132a6579293925b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16116132eb576132e4858585614728565b9050613385565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161015613377575f61332b878686614728565b90505f6133398789866147da565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161061336c578061336e565b815b92505050613385565b6133828585846147da565b90505b95945050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82166133b1575047919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015613419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061343d9190616052565b92915050565b919050565b60408051808201825260608082526020808301829052835191820184525f8285018181528352845181815280830190955292939192908301919061349c565b60608152602001906001900390816134875790505b509052919050565b60408051808201909152606080825260208201525f84602001515160016134cb9190616364565b67ffffffffffffffff8111156134e3576134e3616069565b6040519080825280601f01601f19166020018201604052801561350d576020820181803683370190505b5090505f85602001515160016135239190616364565b67ffffffffffffffff81111561353b5761353b616069565b60405190808252806020026020018201604052801561356e57816020015b60608152602001906001900390816135595790505b5090505f5b6001825161358191906162ae565b81101561362b578660200151818151811061359e5761359e616565565b60200260200101518282815181106135b8576135b8616565565b6020026020010181905250865f015181815181106135d8576135d8616565565b602001015160f81c60f81b8382815181106135f5576135f5616565565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600101613573565b5083816001835161363c91906162ae565b8151811061364c5761364c616565565b60200260200101819052508460f81b826001835161366a91906162ae565b8151811061367a5761367a616565565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350908552602085015250825b9392505050565b80516040805173ffffffffffffffffffffffffffffffffffffffff909216602083015260609161371f91601291015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528591906134a4565b50613756601283602001516040516020016136e9919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b506136b38361483a565b5f80604a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166357c5b1486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137cc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137f09190616052565b90505f5b818110156138a257604a546040517fd934d2f70000000000000000000000000000000000000000000000000000000081526004810183905261389891859173ffffffffffffffffffffffffffffffffffffffff9091169063d934d2f790602401602060405180830381865afa15801561386f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138939190616052565b61486c565b92506001016137f4565b505090565b6040517ffe74f05b0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d9063fe74f05b906044015b5f6040518083038186803b158015613911575f80fd5b505afa1580156123f6573d5f803e3d5ffd5b6040517f16d207c6000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906316d207c6906064015f6040518083038186803b158015613993575f80fd5b505afa1580156118b0573d5f803e3d5ffd5b6040517f98296c540000000000000000000000000000000000000000000000000000000081526004810183905260248101829052737109709ecfa91a80626ff3989d68f67f5b1dd12d906398296c54906044016138fb565b6040517f515361f600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808416600483015282166024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063515361f6906044016138fb565b613a73612bcd565b604680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055613ac06148b2565b604d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055613b2f817f4554480000000000000000000000000000000000000000000000000000000000614998565b604980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316908117909155604654604d5460408051808201909152600181527f03000000000000000000000000000000000000000000000000000000000000006020820152613bc694869493811693620186a0939092911690614ab6565b604480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b602954613c309073ffffffffffffffffffffffffffffffffffffffff16614c66565b602a546114aa9073ffffffffffffffffffffffffffffffffffffffff16614c66565b613c5a614d96565b602b5460405173ffffffffffffffffffffffffffffffffffffffff90911690613c8290615b6e565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613cb8573d5f803e3d5ffd5b50602f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613d0c90615b7c565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613d42573d5f803e3d5ffd5b50602e80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613d9690615b8a565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613dcc573d5f803e3d5ffd5b50602c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613e2090615b98565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613e56573d5f803e3d5ffd5b50602d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613eaa90615ba6565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613ee0573d5f803e3d5ffd5b50603080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613f3490615bb4565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613f6a573d5f803e3d5ffd5b50603180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b54604051911690613fbe90615bc2565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff080158015613ff4573d5f803e3d5ffd5b50603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b5460405191169061404890615bd0565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff08015801561407e573d5f803e3d5ffd5b50603480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560408051808201909152600d81527f666565436f6e74726f6c6c657200000000000000000000000000000000000000602082015261410190614e21565b603580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b5460405191169061415490615bde565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103905ff08015801561418a573d5f803e3d5ffd5b50603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055602b546035546040517f2d7713890000000000000000000000000000000000000000000000000000000081529083166004820152911690632d771389906024015f604051808303815f87803b158015614223575f80fd5b505af1158015611fe2573d5f803e3d5ffd5b5f805f614240614e32565b90505f61424b614e32565b90506142578282615087565b602a805473ffffffffffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117909255602980549490931693168317909155909590945092505050565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091526040805160a08101825273ffffffffffffffffffffffffffffffffffffffff80891682528716602082015262ffffff85169181018290525f9160608201906280000014614342576143326064876165bf565b61433d9060026165e4565b614345565b603c5b60020b815273ffffffffffffffffffffffffffffffffffffffff871660209091015260a08120909250602b546040517f6276cbbe00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff1690636276cbbe906143c79085908790600401616602565b6020604051808303815f875af11580156143e3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061440791906166a8565b509550959350505050565b6029546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526a084595161401484a00000060248301529091169063a9059cbb906044016020604051808303815f875af1158015614492573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144b691906166c8565b50602a546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526a084595161401484a00000060248301529091169063a9059cbb906044016020604051808303815f875af1158015614537573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061455b91906166c8565b5050565b6040517f06447d5600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d906306447d56906024015f604051808303815f87803b1580156145d7575f80fd5b505af11580156145e9573d5f803e3d5ffd5b505050506145f5613c0e565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d5f1c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612d4a575f80fd5b5f6146688484846150d4565b90506136b36040518060400160405280600c81526020017f426f756e6420726573756c74000000000000000000000000000000000000000081525082615