UNPKG

@uniswap/v4-core

Version:

🦄 Core smart contracts of Uniswap v4

1 lines • 105 kB
{"abi":[{"type":"function","name":"afterAddLiquidity","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"","type":"int256","internalType":"BalanceDelta"},{"name":"","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterAddLiquidityData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"afterDonate","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterDonateData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"afterInitialize","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"uint160","internalType":"uint160"},{"name":"","type":"int24","internalType":"int24"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterInitializeData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"afterRemoveLiquidity","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"","type":"int256","internalType":"BalanceDelta"},{"name":"","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterRemoveLiquidityData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"afterSwap","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int128","internalType":"int128"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterSwapData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"beforeAddLiquidity","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeAddLiquidityData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"beforeDonate","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeDonateData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"beforeInitialize","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"uint160","internalType":"uint160"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeInitializeData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"beforeRemoveLiquidity","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeRemoveLiquidityData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"beforeSwap","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BeforeSwapDelta"},{"name":"","type":"uint24","internalType":"uint24"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeSwapData","inputs":[],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"lpFees","inputs":[{"name":"","type":"bytes32","internalType":"PoolId"}],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"returnValues","inputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"view"},{"type":"function","name":"setReturnValue","inputs":[{"name":"key","type":"bytes4","internalType":"bytes4"},{"name":"value","type":"bytes4","internalType":"bytes4"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setlpFee","inputs":[{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"value","type":"uint16","internalType":"uint16"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x60808060405234601557612c71908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630a2d5827146127d757806317bd61231461278b57806321d0ee70146124f9578063259982e5146122675780634d081c7e146121a457806350cd07eb146120e4578063542e936914612021578063575e24b414611cc45780635941b5bb14611c04578063622e60de14611b415780636c2bbe7e146118c45780636fe7e6eb146115b057806370b28eda146114ed5780637a3385f5146113d45780637e472fb2146113115780639f063efc14611048578063a2bc94ad14610fb4578063af57c18414610ef1578063b47b2fb114610b9b578063b6a8b0fa146108fd578063b85164661461083a578063db6d76a214610724578063dc98354e146104145763e1b4af6914610121575f80fd5b346104105761012f36612bc3565b93509350505067ffffffffffffffff81116103e35761014f60095461289a565b601f8111610380575b505f601f82116001146102c85781906101a4935f926102bd575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6009555b7fe1b4af69000000000000000000000000000000000000000000000000000000005f52600a6020527f3e1cff7e09cc4cb604c0c017add856c5756522d5e4dfc08fa794b6e2e9f5c0e95460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166102695760207fe1b4af69000000000000000000000000000000000000000000000000000000005b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b7fe1b4af69000000000000000000000000000000000000000000000000000000005f52600a60209081527f3e1cff7e09cc4cb604c0c017add856c5756522d5e4dfc08fa794b6e2e9f5c0e95460e01b61023f565b013590505f80610172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af915f5b85811061036857508360019510610330575b505050811b016009556101a8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690555f8080610322565b90926020600181928686013581550194019101610310565b60095f527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af601f830160051c810191602084106103d9575b601f0160051c01905b8181106103ce5750610158565b5f81556001016103c1565b90915081906103b8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80fd5b346104105760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104105761044b612974565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126104105761047e612b90565b5060405161048d60a0826128eb565b607b81526080366020830137805167ffffffffffffffff81116103e3576104b45f5461289a565b601f81116106c2575b50602091601f821160011461060957610509925f91836105fe5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b5f555b7fdc98354e000000000000000000000000000000000000000000000000000000005f52600a6020527fe9af230b075368827a096d210a4bb5b0ba070196fed557f29cf81f034c65cada5460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166105aa576040517fdc98354e000000000000000000000000000000000000000000000000000000008152602090f35b7fdc98354e000000000000000000000000000000000000000000000000000000005f52600a60209081527fe9af230b075368827a096d210a4bb5b0ba070196fed557f29cf81f034c65cada5460e01b61023f565b015190508380610172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563915f5b8581106106aa57508360019510610673575b505050811b015f5561050c565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055828080610666565b91926020600181928685015181550194019201610654565b5f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c8101916020841061071a575b601f0160051c01905b81811061070f57506104bd565b5f8155600101610702565b90915081906106f9565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f6002546107628161289a565b80845290600181169081156107f8575060011461079a575b6107968361078a818503826128eb565b6040519182918261292c565b0390f35b60025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b8082106107de5750909150810160200161078a61077a565b9192600181602092548385880101520191019092916107c6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061078a905061077a565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f6003546108788161289a565b80845290600181169081156107f8575060011461089f576107968361078a818503826128eb565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b8082106108e35750909150810160200161078a61077a565b9192600181602092548385880101520191019092916108cb565b346104105761090b36612bc3565b93509350505067ffffffffffffffff81116103e35761092b60085461289a565b601f8111610b38575b505f601f8211600114610a8057819061097f935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6008555b7fb6a8b0fa000000000000000000000000000000000000000000000000000000005f52600a6020527fc020f4cb7a0ae9ba5c590fbb2728bbab87fc8f068a74c7042ca3f2f27cc519f75460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016610a21576040517fb6a8b0fa000000000000000000000000000000000000000000000000000000008152602090f35b7fb6a8b0fa000000000000000000000000000000000000000000000000000000005f52600a60209081527fc020f4cb7a0ae9ba5c590fbb2728bbab87fc8f068a74c7042ca3f2f27cc519f75460e01b61023f565b013590508380610172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3915f5b858110610b2057508360019510610ae8575b505050811b01600855610983565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080610ada565b90926020600181928686013581550194019101610ac8565b60085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3601f830160051c81019160208410610b91575b601f0160051c01905b818110610b865750610934565b5f8155600101610b79565b9091508190610b70565b34610410576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261041057610bd3612974565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126104105760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610410576101443567ffffffffffffffff811161041057610c49903690600401612997565b67ffffffffffffffff81116103e357610c6360075461289a565b601f8111610e8e575b505f601f8211600114610dd6578190610cb7935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6007555b7fb47b2fb1000000000000000000000000000000000000000000000000000000005f52600a6020527f2491b1a3e05eb915595dd2d17535e9dd4280b7e1dc3e97bd1382883e4c8628635460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016610d815760407fb47b2fb1000000000000000000000000000000000000000000000000000000005b7fffffffff000000000000000000000000000000000000000000000000000000008251911681525f6020820152f35b7fb47b2fb1000000000000000000000000000000000000000000000000000000005f52600a6020527f2491b1a3e05eb915595dd2d17535e9dd4280b7e1dc3e97bd1382883e4c8628635460409060e01b610d52565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688915f5b858110610e7657508360019510610e3e575b505050811b01600755610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080610e30565b90926020600181928686013581550194019101610e1e565b60075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688601f830160051c81019160208410610ee7575b601f0160051c01905b818110610edc5750610c6c565b5f8155600101610ecf565b9091508190610ec6565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f600854610f2f8161289a565b80845290600181169081156107f85750600114610f56576107968361078a818503826128eb565b60085f9081527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3939250905b808210610f9a5750909150810160200161078a61077a565b919260018160209254838588010152019101909291610f82565b346104105760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410577fffffffff0000000000000000000000000000000000000000000000000000000061100c612a90565b165f52600a602052602060405f205460e01b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346104105761105636612abf565b9450945050505067ffffffffffffffff81116103e35761107760035461289a565b601f81116112ae575b505f601f82116001146111f65781906110cb935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6003555b7f9f063efc000000000000000000000000000000000000000000000000000000005f52600a6020527fa34b77616cf9980164957428ccd599e1fe45c8cfb6fe19170f221f0880d599d25460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166111a0576107967f9f063efc000000000000000000000000000000000000000000000000000000005b604080517fffffffff0000000000000000000000000000000000000000000000000000000090921682525f602083015290918291820190565b7f9f063efc000000000000000000000000000000000000000000000000000000005f52600a6020527fa34b77616cf9980164957428ccd599e1fe45c8cfb6fe19170f221f0880d599d2546107969060e01b611167565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b8581106112965750836001951061125e575b505050811b016003556110cf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080611250565b9092602060018192868601358155019401910161123e565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c81019160208410611307575b601f0160051c01905b8181106112fc5750611080565b5f81556001016112ef565b90915081906112e6565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f60055461134f8161289a565b80845290600181169081156107f85750600114611376576107968361078a818503826128eb565b60055f9081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0939250905b8082106113ba5750909150810160200161078a61077a565b9192600181602092548385880101520191019092916113a2565b34610410577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360160c081126104105760a0136104105760a43561ffff81168091036104105760405160a0810181811067ffffffffffffffff8211176103e35760405261143f612974565b815260243573ffffffffffffffffffffffffffffffffffffffff8116810361041057602082015260443562ffffff811681036104105760408201526064358060020b81036104105760608201526084359073ffffffffffffffffffffffffffffffffffffffff821682036104105760a0916080820152205f52600b60205260405f20907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008254161790555f80f35b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f60095461152b8161289a565b80845290600181169081156107f85750600114611552576107968361078a818503826128eb565b60095f9081527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af939250905b8082106115965750909150810160200161078a61077a565b91926001816020925483858801015201910190929161157e565b34610410576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576115e8612974565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126104105761161b612b90565b50611624612bb3565b5060405161163360a0826128eb565b607b81526080366020830137805167ffffffffffffffff81116103e35761165b60015461289a565b601f8111611861575b50602091601f82116001146117a6576116b0925f91836105fe5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6001555b7f6fe7e6eb000000000000000000000000000000000000000000000000000000005f52600a6020527f60ebf593746d2e2866623a7ab8917e472a604dce3ffb917d2854c19cb1163cb85460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016611752576040517f6fe7e6eb000000000000000000000000000000000000000000000000000000008152602090f35b7f6fe7e6eb000000000000000000000000000000000000000000000000000000005f52600a60209081527f60ebf593746d2e2866623a7ab8917e472a604dce3ffb917d2854c19cb1163cb85460e01b61023f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6915f5b85811061184957508360019510611812575b505050811b016001556116b4565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055828080611804565b919260206001819286850151815501940192016117f2565b60015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f830160051c810191602084106118ba575b601f0160051c01905b8181106118af5750611664565b5f81556001016118a2565b9091508190611899565b34610410576118d236612abf565b9450945050505067ffffffffffffffff81116103e3576118f360055461289a565b601f8111611afb575b505f601f8211600114611a43578190611947935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6005555b7f6c2bbe7e000000000000000000000000000000000000000000000000000000005f52600a6020527f493715af9853ab3fd3f151791a8667a739e059bb7da693d353a4db0e7735ef025460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166119ed57604080517f6c2bbe7e0000000000000000000000000000000000000000000000000000000081525f6020820152f35b7f6c2bbe7e000000000000000000000000000000000000000000000000000000005f52600a6020527f493715af9853ab3fd3f151791a8667a739e059bb7da693d353a4db0e7735ef02546107969060e01b611167565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b858110611ae357508360019510611aab575b505050811b0160055561194b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080611a9d565b90926020600181928686013581550194019101611a8b565b60055f5260205f20601f830160051c81019160208410611b37575b601f0160051c01905b818110611b2c57506118fc565b5f8155600101611b1f565b9091508190611b16565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f600754611b7f8161289a565b80845290600181169081156107f85750600114611ba6576107968361078a818503826128eb565b60075f9081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688939250905b808210611bea5750909150810160200161078a61077a565b919260018160209254838588010152019101909291611bd2565b346104105760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261041057611c3b612a90565b602435907fffffffff0000000000000000000000000000000000000000000000000000000082168203610410577fffffffff00000000000000000000000000000000000000000000000000000000165f52600a60205260405f209060e01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790555f80f35b34610410576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261041057611cfc612974565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126104105760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610410576101243567ffffffffffffffff811161041057611d72903690600401612997565b67ffffffffffffffff81116103e357611d8c60065461289a565b601f8111611fbe575b505f601f8211600114611f06578190611de0935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6006555b7f575e24b4000000000000000000000000000000000000000000000000000000005f52600a6020527f8f4f5a3132b3286a8e7a4ddb5cd55fe3b98d5fc42a66d217eae1c84b873ebaf25460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016611eb15760607f575e24b4000000000000000000000000000000000000000000000000000000005b7fffffffff00000000000000000000000000000000000000000000000000000000604051911681525f60208201525f6040820152f35b7f575e24b4000000000000000000000000000000000000000000000000000000005f52600a6020527f8f4f5a3132b3286a8e7a4ddb5cd55fe3b98d5fc42a66d217eae1c84b873ebaf25460609060e01b611e7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b858110611fa657508360019510611f6e575b505050811b01600655611de4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080611f60565b90926020600181928686013581550194019101611f4e565b60065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f601f830160051c81019160208410612017575b601f0160051c01905b81811061200c5750611d95565b5f8155600101611fff565b9091508190611ff6565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f60065461205f8161289a565b80845290600181169081156107f85750600114612086576107968361078a818503826128eb565b60065f9081527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f939250905b8082106120ca5750909150810160200161078a61077a565b9192600181602092548385880101520191019092916120b2565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f80546121218161289a565b80845290600181169081156107f85750600114612148576107968361078a818503826128eb565b5f8080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061218a5750909150810160200161078a61077a565b919260018160209254838588010152019101909291612172565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f6004546121e28161289a565b80845290600181169081156107f85750600114612209576107968361078a818503826128eb565b60045f9081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b80821061224d5750909150810160200161078a61077a565b919260018160209254838588010152019101909291612235565b3461041057612275366129c5565b925092505067ffffffffffffffff81116103e35761229460025461289a565b601f8111612496575b505f601f82116001146123de5781906122e8935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6002555b7f259982e5000000000000000000000000000000000000000000000000000000005f52600a6020527fc3eb8857b979a39a232f594aca1feb3d3a12b1f808751651f517ed9effc532795460e01b7fffffffff000000000000000000000000000000000000000000000000000000001661238a576040517f259982e5000000000000000000000000000000000000000000000000000000008152602090f35b7f259982e5000000000000000000000000000000000000000000000000000000005f52600a60209081527fc3eb8857b979a39a232f594aca1feb3d3a12b1f808751651f517ed9effc532795460e01b61023f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace915f5b85811061247e57508360019510612446575b505050811b016002556122ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080612438565b90926020600181928686013581550194019101612426565b60025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace601f830160051c810191602084106124ef575b601f0160051c01905b8181106124e4575061229d565b5f81556001016124d7565b90915081906124ce565b3461041057612507366129c5565b925092505067ffffffffffffffff81116103e35761252660045461289a565b601f8111612728575b505f601f821160011461267057819061257a935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6004555b7f21d0ee70000000000000000000000000000000000000000000000000000000005f52600a6020527f3ca76996c4de3804eeab337bff8d944de8de2379662c8666e6ffe7bfa23a1b435460e01b7fffffffff000000000000000000000000000000000000000000000000000000001661261c576040517f21d0ee70000000000000000000000000000000000000000000000000000000008152602090f35b7f21d0ee70000000000000000000000000000000000000000000000000000000005f52600a60209081527f3ca76996c4de3804eeab337bff8d944de8de2379662c8666e6ffe7bfa23a1b435460e01b61023f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f5b858110612710575083600195106126d8575b505050811b0160045561257e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690558280806126ca565b909260206001819286860135815501940191016126b8565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c81019160208410612781575b601f0160051c01905b818110612776575061252f565b5f8155600101612769565b9091508190612760565b346104105760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576004355f52600b602052602061ffff60405f205416604051908152f35b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f6001546128158161289a565b80845290600181169081156107f8575060011461283c576107968361078a818503826128eb565b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b8082106128805750909150810160200161078a61077a565b919260018160209254838588010152019101909291612868565b90600182811c921680156128e1575b60208310146128b457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916128a9565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176103e357604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361041057565b9181601f840112156104105782359167ffffffffffffffff8311610410576020838186019501011161041057565b906101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126104105760043573ffffffffffffffffffffffffffffffffffffffff81168103610410579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8201126104105760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c8301126104105760c491610144359067ffffffffffffffff821161041057612a8c91600401612997565b9091565b600435907fffffffff000000000000000000000000000000000000000000000000000000008216820361041057565b906101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126104105760043573ffffffffffffffffffffffffffffffffffffffff81168103610410579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8201126104105760249160807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c8301126104105760c49161014435916101643591610184359067ffffffffffffffff821161041057612a8c91600401612997565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361041057565b60e435908160020b820361041057565b6101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126104105760043573ffffffffffffffffffffffffffffffffffffffff81168103610410579160a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8301126104105760249160c4359160e43591610104359067ffffffffffffffff821161041057612a8c9160040161299756fea164736f6c634300081a000a","sourceMap":"553:4663:83:-:0;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c80630a2d5827146127d757806317bd61231461278b57806321d0ee70146124f9578063259982e5146122675780634d081c7e146121a457806350cd07eb146120e4578063542e936914612021578063575e24b414611cc45780635941b5bb14611c04578063622e60de14611b415780636c2bbe7e146118c45780636fe7e6eb146115b057806370b28eda146114ed5780637a3385f5146113d45780637e472fb2146113115780639f063efc14611048578063a2bc94ad14610fb4578063af57c18414610ef1578063b47b2fb114610b9b578063b6a8b0fa146108fd578063b85164661461083a578063db6d76a214610724578063dc98354e146104145763e1b4af6914610121575f80fd5b346104105761012f36612bc3565b93509350505067ffffffffffffffff81116103e35761014f60095461289a565b601f8111610380575b505f601f82116001146102c85781906101a4935f926102bd575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6009555b7fe1b4af69000000000000000000000000000000000000000000000000000000005f52600a6020527f3e1cff7e09cc4cb604c0c017add856c5756522d5e4dfc08fa794b6e2e9f5c0e95460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166102695760207fe1b4af69000000000000000000000000000000000000000000000000000000005b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b7fe1b4af69000000000000000000000000000000000000000000000000000000005f52600a60209081527f3e1cff7e09cc4cb604c0c017add856c5756522d5e4dfc08fa794b6e2e9f5c0e95460e01b61023f565b013590505f80610172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af915f5b85811061036857508360019510610330575b505050811b016009556101a8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690555f8080610322565b90926020600181928686013581550194019101610310565b60095f527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af601f830160051c810191602084106103d9575b601f0160051c01905b8181106103ce5750610158565b5f81556001016103c1565b90915081906103b8565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80fd5b346104105760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126104105761044b612974565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126104105761047e612b90565b5060405161048d60a0826128eb565b607b81526080366020830137805167ffffffffffffffff81116103e3576104b45f5461289a565b601f81116106c2575b50602091601f821160011461060957610509925f91836105fe5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b5f555b7fdc98354e000000000000000000000000000000000000000000000000000000005f52600a6020527fe9af230b075368827a096d210a4bb5b0ba070196fed557f29cf81f034c65cada5460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166105aa576040517fdc98354e000000000000000000000000000000000000000000000000000000008152602090f35b7fdc98354e000000000000000000000000000000000000000000000000000000005f52600a60209081527fe9af230b075368827a096d210a4bb5b0ba070196fed557f29cf81f034c65cada5460e01b61023f565b015190508380610172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563915f5b8581106106aa57508360019510610673575b505050811b015f5561050c565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055828080610666565b91926020600181928685015181550194019201610654565b5f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c8101916020841061071a575b601f0160051c01905b81811061070f57506104bd565b5f8155600101610702565b90915081906106f9565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f6002546107628161289a565b80845290600181169081156107f8575060011461079a575b6107968361078a818503826128eb565b6040519182918261292c565b0390f35b60025f9081527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace939250905b8082106107de5750909150810160200161078a61077a565b9192600181602092548385880101520191019092916107c6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b8401909101915061078a905061077a565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f6003546108788161289a565b80845290600181169081156107f8575060011461089f576107968361078a818503826128eb565b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b8082106108e35750909150810160200161078a61077a565b9192600181602092548385880101520191019092916108cb565b346104105761090b36612bc3565b93509350505067ffffffffffffffff81116103e35761092b60085461289a565b601f8111610b38575b505f601f8211600114610a8057819061097f935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6008555b7fb6a8b0fa000000000000000000000000000000000000000000000000000000005f52600a6020527fc020f4cb7a0ae9ba5c590fbb2728bbab87fc8f068a74c7042ca3f2f27cc519f75460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016610a21576040517fb6a8b0fa000000000000000000000000000000000000000000000000000000008152602090f35b7fb6a8b0fa000000000000000000000000000000000000000000000000000000005f52600a60209081527fc020f4cb7a0ae9ba5c590fbb2728bbab87fc8f068a74c7042ca3f2f27cc519f75460e01b61023f565b013590508380610172565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3915f5b858110610b2057508360019510610ae8575b505050811b01600855610983565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080610ada565b90926020600181928686013581550194019101610ac8565b60085f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3601f830160051c81019160208410610b91575b601f0160051c01905b818110610b865750610934565b5f8155600101610b79565b9091508190610b70565b34610410576101607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261041057610bd3612974565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126104105760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610410576101443567ffffffffffffffff811161041057610c49903690600401612997565b67ffffffffffffffff81116103e357610c6360075461289a565b601f8111610e8e575b505f601f8211600114610dd6578190610cb7935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6007555b7fb47b2fb1000000000000000000000000000000000000000000000000000000005f52600a6020527f2491b1a3e05eb915595dd2d17535e9dd4280b7e1dc3e97bd1382883e4c8628635460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016610d815760407fb47b2fb1000000000000000000000000000000000000000000000000000000005b7fffffffff000000000000000000000000000000000000000000000000000000008251911681525f6020820152f35b7fb47b2fb1000000000000000000000000000000000000000000000000000000005f52600a6020527f2491b1a3e05eb915595dd2d17535e9dd4280b7e1dc3e97bd1382883e4c8628635460409060e01b610d52565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688915f5b858110610e7657508360019510610e3e575b505050811b01600755610cbb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080610e30565b90926020600181928686013581550194019101610e1e565b60075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688601f830160051c81019160208410610ee7575b601f0160051c01905b818110610edc5750610c6c565b5f8155600101610ecf565b9091508190610ec6565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f600854610f2f8161289a565b80845290600181169081156107f85750600114610f56576107968361078a818503826128eb565b60085f9081527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3939250905b808210610f9a5750909150810160200161078a61077a565b919260018160209254838588010152019101909291610f82565b346104105760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410577fffffffff0000000000000000000000000000000000000000000000000000000061100c612a90565b165f52600a602052602060405f205460e01b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b346104105761105636612abf565b9450945050505067ffffffffffffffff81116103e35761107760035461289a565b601f81116112ae575b505f601f82116001146111f65781906110cb935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6003555b7f9f063efc000000000000000000000000000000000000000000000000000000005f52600a6020527fa34b77616cf9980164957428ccd599e1fe45c8cfb6fe19170f221f0880d599d25460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166111a0576107967f9f063efc000000000000000000000000000000000000000000000000000000005b604080517fffffffff0000000000000000000000000000000000000000000000000000000090921682525f602083015290918291820190565b7f9f063efc000000000000000000000000000000000000000000000000000000005f52600a6020527fa34b77616cf9980164957428ccd599e1fe45c8cfb6fe19170f221f0880d599d2546107969060e01b611167565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b8581106112965750836001951061125e575b505050811b016003556110cf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080611250565b9092602060018192868601358155019401910161123e565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c81019160208410611307575b601f0160051c01905b8181106112fc5750611080565b5f81556001016112ef565b90915081906112e6565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f60055461134f8161289a565b80845290600181169081156107f85750600114611376576107968361078a818503826128eb565b60055f9081527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0939250905b8082106113ba5750909150810160200161078a61077a565b9192600181602092548385880101520191019092916113a2565b34610410577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360160c081126104105760a0136104105760a43561ffff81168091036104105760405160a0810181811067ffffffffffffffff8211176103e35760405261143f612974565b815260243573ffffffffffffffffffffffffffffffffffffffff8116810361041057602082015260443562ffffff811681036104105760408201526064358060020b81036104105760608201526084359073ffffffffffffffffffffffffffffffffffffffff821682036104105760a0916080820152205f52600b60205260405f20907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00008254161790555f80f35b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f60095461152b8161289a565b80845290600181169081156107f85750600114611552576107968361078a818503826128eb565b60095f9081527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af939250905b8082106115965750909150810160200161078a61077a565b91926001816020925483858801015201910190929161157e565b34610410576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576115e8612974565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126104105761161b612b90565b50611624612bb3565b5060405161163360a0826128eb565b607b81526080366020830137805167ffffffffffffffff81116103e35761165b60015461289a565b601f8111611861575b50602091601f82116001146117a6576116b0925f91836105fe5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6001555b7f6fe7e6eb000000000000000000000000000000000000000000000000000000005f52600a6020527f60ebf593746d2e2866623a7ab8917e472a604dce3ffb917d2854c19cb1163cb85460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016611752576040517f6fe7e6eb000000000000000000000000000000000000000000000000000000008152602090f35b7f6fe7e6eb000000000000000000000000000000000000000000000000000000005f52600a60209081527f60ebf593746d2e2866623a7ab8917e472a604dce3ffb917d2854c19cb1163cb85460e01b61023f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6915f5b85811061184957508360019510611812575b505050811b016001556116b4565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055828080611804565b919260206001819286850151815501940192016117f2565b60015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f830160051c810191602084106118ba575b601f0160051c01905b8181106118af5750611664565b5f81556001016118a2565b9091508190611899565b34610410576118d236612abf565b9450945050505067ffffffffffffffff81116103e3576118f360055461289a565b601f8111611afb575b505f601f8211600114611a43578190611947935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b6005555b7f6c2bbe7e000000000000000000000000000000000000000000000000000000005f52600a6020527f493715af9853ab3fd3f151791a8667a739e059bb7da693d353a4db0e7735ef025460e01b7fffffffff00000000000000000000000000000000000000000000000000000000166119ed57604080517f6c2bbe7e0000000000000000000000000000000000000000000000000000000081525f6020820152f35b7f6c2bbe7e000000000000000000000000000000000000000000000000000000005f52600a6020527f493715af9853ab3fd3f151791a8667a739e059bb7da693d353a4db0e7735ef02546107969060e01b611167565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216927f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f5b858110611ae357508360019510611aab575b505050811b0160055561194b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055828080611a9d565b90926020600181928686013581550194019101611a8b565b60055f5260205f20601f830160051c81019160208410611b37575b601f0160051c01905b818110611b2c57506118fc565b5f8155600101611b1f565b9091508190611b16565b34610410575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610410576040515f600754611b7f8161289a565b80845290600181169081156107f85750600114611ba6576107968361078a818503826128eb565b60075f9081527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688939250905b808210611bea5750909150810160200161078a61077a565b919260018160209254838588010152019101909291611bd2565b346104105760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261041057611c3b612a90565b602435907fffffffff0000000000000000000000000000000000000000000000000000000082168203610410577fffffffff00000000000000000000000000000000000000000000000000000000165f52600a60205260405f209060e01c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008254161790555f80f35b34610410576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261041057611cfc612974565b5060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126104105760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c360112610410576101243567ffffffffffffffff811161041057611d72903690600401612997565b67ffffffffffffffff81116103e357611d8c60065461289a565b601f8111611fbe575b505f601f8211600114611f06578190611de0935f92610a755750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826001