{"abi":[{"type":"constructor","inputs":[{"name":"initialOwner","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"balance","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"clear","inputs":[{"name":"currency","type":"address","internalType":"Currency"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"collectProtocolFees","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"currency","type":"address","internalType":"Currency"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amountCollected","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"donate","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":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"delta","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"extsload","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"extsload","inputs":[{"name":"startSlot","type":"bytes32","internalType":"bytes32"},{"name":"nSlots","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"extsload","inputs":[{"name":"slots","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"exttload","inputs":[{"name":"slots","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"exttload","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","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":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[{"name":"tick","type":"int24","internalType":"int24"}],"stateMutability":"nonpayable"},{"type":"function","name":"isOperator","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"isOperator","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"modifyLiquidity","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":"params","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":"callerDelta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"protocolFeeController","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"protocolFeesAccrued","inputs":[{"name":"currency","type":"address","internalType":"Currency"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setOperator","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"setProtocolFee","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":"newProtocolFee","type":"uint24","internalType":"uint24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setProtocolFeeController","inputs":[{"name":"controller","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"settle","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"settleFor","inputs":[{"name":"recipient","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"swap","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":"params","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":"swapDelta","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"sync","inputs":[{"name":"currency","type":"address","internalType":"Currency"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"take","inputs":[{"name":"currency","type":"address","internalType":"Currency"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transfer","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"receiver","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unlock","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"result","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"updateDynamicLPFee","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":"newDynamicLPFee","type":"uint24","internalType":"uint24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Donate","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialize","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"currency0","type":"address","indexed":true,"internalType":"Currency"},{"name":"currency1","type":"address","indexed":true,"internalType":"Currency"},{"name":"fee","type":"uint24","indexed":false,"internalType":"uint24"},{"name":"tickSpacing","type":"int24","indexed":false,"internalType":"int24"},{"name":"hooks","type":"address","indexed":false,"internalType":"contract IHooks"},{"name":"sqrtPriceX96","type":"uint160","indexed":false,"internalType":"uint160"},{"name":"tick","type":"int24","indexed":false,"internalType":"int24"}],"anonymous":false},{"type":"event","name":"ModifyLiquidity","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"tickLower","type":"int24","indexed":false,"internalType":"int24"},{"name":"tickUpper","type":"int24","indexed":false,"internalType":"int24"},{"name":"liquidityDelta","type":"int256","indexed":false,"internalType":"int256"},{"name":"salt","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"OperatorSet","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProtocolFeeControllerUpdated","inputs":[{"name":"protocolFeeController","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProtocolFeeUpdated","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"protocolFee","type":"uint24","indexed":false,"internalType":"uint24"}],"anonymous":false},{"type":"event","name":"Swap","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"int128","indexed":false,"internalType":"int128"},{"name":"amount1","type":"int128","indexed":false,"internalType":"int128"},{"name":"sqrtPriceX96","type":"uint160","indexed":false,"internalType":"uint160"},{"name":"liquidity","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"tick","type":"int24","indexed":false,"internalType":"int24"},{"name":"fee","type":"uint24","indexed":false,"internalType":"uint24"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"caller","type":"address","indexed":false,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AlreadyUnlocked","inputs":[]},{"type":"error","name":"CurrenciesOutOfOrderOrEqual","inputs":[{"name":"currency0","type":"address","internalType":"address"},{"name":"currency1","type":"address","internalType":"address"}]},{"type":"error","name":"CurrencyNotSettled","inputs":[]},{"type":"error","name":"DelegateCallNotAllowed","inputs":[]},{"type":"error","name":"InvalidCaller","inputs":[]},{"type":"error","name":"ManagerLocked","inputs":[]},{"type":"error","name":"MustClearExactPositiveDelta","inputs":[]},{"type":"error","name":"NonzeroNativeValue","inputs":[]},{"type":"error","name":"PoolNotInitialized","inputs":[]},{"type":"error","name":"ProtocolFeeCurrencySynced","inputs":[]},{"type":"error","name":"ProtocolFeeTooLarge","inputs":[{"name":"fee","type":"uint24","internalType":"uint24"}]},{"type":"error","name":"SwapAmountCannotBeZero","inputs":[]},{"type":"error","name":"TickSpacingTooLarge","inputs":[{"name":"tickSpacing","type":"int24","internalType":"int24"}]},{"type":"error","name":"TickSpacingTooSmall","inputs":[{"name":"tickSpacing","type":"int24","internalType":"int24"}]},{"type":"error","name":"UnauthorizedDynamicLPFeeUpdate","inputs":[]}],"bytecode":{"object":"0x60a0604052348015600e575f80fd5b50604051616a05380380616a05833981016040819052602b91607f565b5f80546001600160a01b0319166001600160a01b038316908117825560405183928392917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050306080525060aa565b5f60208284031215608e575f80fd5b81516001600160a01b038116811460a3575f80fd5b9392505050565b6080516169436100c25f395f61205f01526169435ff3fe6080604052600436106101f4575f3560e01c80635a6bcfda11610117578063a5841194116100ac578063f135baaa1161007c578063f3cd914c11610062578063f3cd914c14610676578063f5298aca14610695578063fe99049a146106b4575f80fd5b8063f135baaa14610638578063f2fde38b14610657575f80fd5b8063a584119414610595578063b6363cf2146105b4578063dbd035ff146105ed578063f02de3b21461060c575f80fd5b80638161b874116100e75780638161b874146104dc5780638da5cb5b146104fb57806397e8cd4e1461054b5780639bf6645f14610576575f80fd5b80635a6bcfda146104385780636276cbbe1461046c5780637e87ce7d1461049e57806380f0b44c146104bd575f80fd5b80632d7713891161018d57806348c894911161015d57806348c894911461039257806352759651146103be578063558a7297146103dd578063598af9e7146103fc575f80fd5b80632d7713891461031557806335fd631a146103345780633dd45adb14610360578063426a849314610373575f80fd5b806311da60b4116101c857806311da60b4146102b0578063156e29f6146102b85780631e2eaeaf146102d7578063234266d7146102f6575f80fd5b8062fdd58e146101f857806301ffc9a714610241578063095bcdb6146102705780630b0d9c091461028f575b5f80fd5b348015610203575f80fd5b5061022e610212366004615908565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561024c575f80fd5b5061026061025b366004615932565b6106d3565b6040519015158152602001610238565b34801561027b575f80fd5b5061026061028a366004615971565b61076b565b34801561029a575f80fd5b506102ae6102a93660046159a3565b61083f565b005b61022e6108c9565b3480156102c3575f80fd5b506102ae6102d2366004615971565b610927565b3480156102e2575f80fd5b5061022e6102f13660046159e1565b6109ab565b348015610301575f80fd5b5061022e610310366004615b9b565b6109b5565b348015610320575f80fd5b506102ae61032f366004615c00565b610ad9565b34801561033f575f80fd5b5061035361034e366004615c1b565b610bcc565b6040516102389190615c3b565b61022e61036e366004615c00565b610c09565b34801561037e575f80fd5b5061026061038d366004615971565b610c67565b34801561039d575f80fd5b506103b16103ac366004615c7d565b610cd8565b6040516102389190615cbc565b3480156103c9575f80fd5b506102ae6103d8366004615d0f565b610e2a565b3480156103e8575f80fd5b506102606103f7366004615d50565b610ecc565b348015610407575f80fd5b5061022e6104163660046159a3565b600560209081525f938452604080852082529284528284209052825290205481565b348015610443575f80fd5b50610457610452366004615d7a565b610f66565b60408051928352602083019190915201610238565b348015610477575f80fd5b5061048b610486366004615e3b565b611165565b60405160029190910b8152602001610238565b3480156104a9575f80fd5b506102ae6104b8366004615d0f565b6113fc565b3480156104c8575f80fd5b506102ae6104d7366004615908565b6114ed565b3480156104e7575f80fd5b5061022e6104f63660046159a3565b6115ac565b348015610506575f80fd5b505f546105269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610238565b348015610556575f80fd5b5061022e610565366004615c00565b60016020525f908152604090205481565b348015610581575f80fd5b50610353610590366004615e71565b611714565b3480156105a0575f80fd5b506102ae6105af366004615c00565b61174d565b3480156105bf575f80fd5b506102606105ce366004615ee2565b600360209081525f928352604080842090915290825290205460ff1681565b3480156105f8575f80fd5b50610353610607366004615e71565b6117a3565b348015610617575f80fd5b506002546105269073ffffffffffffffffffffffffffffffffffffffff1681565b348015610643575f80fd5b5061022e6106523660046159e1565b6117da565b348015610662575f80fd5b506102ae610671366004615c00565b6117e4565b348015610681575f80fd5b5061022e610690366004615f0e565b6118d3565b3480156106a0575f80fd5b506102ae6106af366004615971565b611a85565b3480156106bf575f80fd5b506102606106ce366004615fcc565b611b09565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061076557507f0f632fb3000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f90815260046020908152604080832085845290915281208054839190839061079690849061603c565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f908152600460209081526040808320868452909152812080548492906107da90849061604f565b9091555050604080513380825260208201859052859273ffffffffffffffffffffffffffffffffffffffff8816927f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885991015b60405180910390a45060015b9392505050565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c61088e5761088e7f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b6108a38361089b83611cfd565b5f0333611d42565b6108c473ffffffffffffffffffffffffffffffffffffffff84168383611da2565b505050565b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610919576109197f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b61092233611ebf565b905090565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610976576109767f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b816109848161089b84611cfd565b6109a58473ffffffffffffffffffffffffffffffffffffffff831684611fa8565b50505050565b5f81545f5260205ff35b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610a0557610a057f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b610a0d612047565b60a086205f818152600660205260409020610a27816120af565b6080880151610a509073ffffffffffffffffffffffffffffffffffffffff1689898989896120f6565b610a5b8188886121d9565b9250610a688884336122d3565b6040805188815260208101889052339184917f29ef05caaff9404b7cb6d1c0e9bbae9eaa7ab2541feba1a9c4248594c08156cb910160405180910390a36080880151610ace9073ffffffffffffffffffffffffffffffffffffffff1689898989896122fb565b505095945050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b85548352602083019250600186019550808310610bec5781810382f35b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610c5957610c597f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b61076582611ebf565b919050565b335f81815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a79061082c9087815260200190565b60607fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c15610d2a57610d2a7f5090d6c600000000000000000000000000000000000000000000000000000000611cf5565b610d326123d3565b6040517f91dd734600000000000000000000000000000000000000000000000000000000815233906391dd734690610d7090869086906004016160a9565b5f604051808303815f875af1158015610d8b573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610dd091908101906160bc565b90507f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c15610e2257610e227f5212cba100000000000000000000000000000000000000000000000000000000611cf5565b6107656123f9565b604082015162ffffff1662800000141580610e755750816080015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610ea357610ea37f30d2164100000000000000000000000000000000000000000000000000000000611cf5565b610eb18162ffffff1661241e565b60a082205f8181526006602052604090206108c4908361245d565b335f81815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff871680855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f807fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610fb757610fb77f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b610fbf612047565b60a086205f818152600660205260409020610fd9816120af565b60808801516110019073ffffffffffffffffffffffffffffffffffffffff16898989896124b6565b5f6110756040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018a5f015160020b81526020018a6020015160020b81526020016110528b60400151612677565b600f0b81526060808d015160020b60208301528b015160409091015283906126ac565b945090506110838185612af1565b945050503373ffffffffffffffffffffffffffffffffffffffff16817ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec885f015189602001518a604001518b606001516040516111019493929190600294850b81529290930b60208301526040820152606081019190915260800190565b60405180910390a360808701515f906111359073ffffffffffffffffffffffffffffffffffffffff16898987878b8b612b24565b9094509050801561114f5761114f88828a608001516122d3565b61115a8885336122d3565b505094509492505050565b5f61116e612047565b6060830151617fff60029190910b13156111b25760608301516111b2907fb70024f80000000000000000000000000000000000000000000000000000000090612cfb565b600160020b836060015160020b12156111f55760608301516111f5907fe9e905880000000000000000000000000000000000000000000000000000000090612cfb565b8251602084015173ffffffffffffffffffffffffffffffffffffffff90811691161061124d578251602084015161124d917f6e6c98300000000000000000000000000000000000000000000000000000000091612d0a565b61127e8360400151846080015173ffffffffffffffffffffffffffffffffffffffff16612d4d90919063ffffffff16565b6112b25760808301516112b2907fe65af6a00000000000000000000000000000000000000000000000000000000090612e1b565b5f6112c5846040015162ffffff16612e3d565b60808501519091506112ee9073ffffffffffffffffffffffffffffffffffffffff168585612e62565b60a084205f81815260066020526040902061130a908584612f35565b9250846020015173ffffffffffffffffffffffffffffffffffffffff16855f015173ffffffffffffffffffffffffffffffffffffffff16827fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438886040015189606001518a608001518a8a6040516113c595949392919062ffffff959095168552600293840b602086015273ffffffffffffffffffffffffffffffffffffffff928316604086015291166060840152900b608082015260a00190565b60405180910390a460808501516113f49073ffffffffffffffffffffffffffffffffffffffff16868686612fed565b505092915050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611444576114447f48f5c3ed00000000000000000000000000000000000000000000000000000000611cf5565b6103e9610fff821610623e900062fff0008316101661148c5761148c7fa7abe2f70000000000000000000000000000000000000000000000000000000062ffffff8316612e1b565b60a082206114ae826114a8835f90815260066020526040902090565b906130c2565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c61153c5761153c7f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b335f90815273ffffffffffffffffffffffffffffffffffffffff8316602052604081205c9061156a83611cfd565b90508181600f0b1461159f5761159f7fbda73abf00000000000000000000000000000000000000000000000000000000611cf5565b6109a584825f0333611d42565b6002545f9073ffffffffffffffffffffffffffffffffffffffff1633146115f6576115f67f48f5c3ed00000000000000000000000000000000000000000000000000000000611cf5565b73ffffffffffffffffffffffffffffffffffffffff831615158015611654575073ffffffffffffffffffffffffffffffffffffffff7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c8116908416145b15611682576116827fc79e594800000000000000000000000000000000000000000000000000000000611cf5565b811561168e57816116b4565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600160205260409020545b73ffffffffffffffffffffffffffffffffffffffff84165f908152600160205260408120805492935083929091906116ed90849061603c565b90915550610838905073ffffffffffffffffffffffffffffffffffffffff84168583611da2565b606060405180602082528360208301526040820191508360051b8201855b80355c845260209384019301818410611732575b5081810382f35b73ffffffffffffffffffffffffffffffffffffffff811661177357611770613116565b50565b5f6117938273ffffffffffffffffffffffffffffffffffffffff1661313b565b905061179f82826131ea565b5050565b606060405180602082528360208301526040820191508360051b8201855b80355484526020938401930181841015611746576117c1565b5f815c5f5260205ff35b5f5473ffffffffffffffffffffffffffffffffffffffff163314611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610b55565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c611923576119237f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b61192b612047565b83602001515f0361195f5761195f7fbe8b850700000000000000000000000000000000000000000000000000000000611cf5565b60a085205f818152600660205260409020611979816120af565b60808701515f90819081906119a79073ffffffffffffffffffffffffffffffffffffffff168b8b8b8b61324a565b809350819550829450505050611a2384866040518060a001604052808681526020018e6060015160020b81526020018d5f0151151581526020018d6040015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152508c5f0151611a1c578d602001516133f1565b8d516133f1565b60808b01519096505f9250611a54915073ffffffffffffffffffffffffffffffffffffffff168a8a888b8b886134f2565b90955090508015611a6e57611a6e89828b608001516122d3565b611a798986336122d3565b50505050949350505050565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c611ad457611ad47f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b81611ae881611ae284611cfd565b33611d42565b6109a58473ffffffffffffffffffffffffffffffffffffffff83168461368b565b5f3373ffffffffffffffffffffffffffffffffffffffff861614801590611b60575073ffffffffffffffffffffffffffffffffffffffff85165f90815260036020908152604080832033845290915290205460ff16155b15611c095773ffffffffffffffffffffffffffffffffffffffff85165f90815260056020908152604080832033845282528083208684529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c0757611bce838261603c565b73ffffffffffffffffffffffffffffffffffffffff87165f90815260056020908152604080832033845282528083208884529091529020555b505b73ffffffffffffffffffffffffffffffffffffffff85165f90815260046020908152604080832086845290915281208054849290611c4890849061603c565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260046020908152604080832086845290915281208054849290611c8c90849061604f565b90915550506040805133815260208101849052849173ffffffffffffffffffffffffffffffffffffffff80881692908916917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859910160405180910390a45060015b949350505050565b805f5260045ffd5b5f6f800000000000000000000000000000008210611d3e57611d3e7f93dafdf100000000000000000000000000000000000000000000000000000000611cf5565b5090565b81600f0b5f03611d5157505050565b5f80611d7473ffffffffffffffffffffffffffffffffffffffff8616848661379c565b91509150805f03611d8c57611d876137e2565b611d9b565b815f03611d9b57611d9b613830565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff8416611dfd575f805f8085875af1905080611df857611df8835f7ff4b3b1bc0000000000000000000000000000000000000000000000000000000061387e565b6109a5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806109a5576109a5847fa9059cbb000000000000000000000000000000000000000000000000000000007ff27f64e40000000000000000000000000000000000000000000000000000000061387e565b5f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c73ffffffffffffffffffffffffffffffffffffffff8116611f0557349150611f8f565b3415611f3457611f347fb0ec849e00000000000000000000000000000000000000000000000000000000611cf5565b7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c5f611f7673ffffffffffffffffffffffffffffffffffffffff841661313b565b9050611f82828261603c565b9350611f8c613116565b50505b611fa281611f9c84611cfd565b85611d42565b50919050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260046020908152604080832085845290915281208054839290611fe790849061604f565b90915550506040805133815260208101839052839173ffffffffffffffffffffffffffffffffffffffff8616915f917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885991015b60405180910390a4505050565b3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146120ad576120ad7f0d89438e00000000000000000000000000000000000000000000000000000000611cf5565b565b805473ffffffffffffffffffffffffffffffffffffffff165f03611770576117707f486aa30700000000000000000000000000000000000000000000000000000000611cf5565b853373ffffffffffffffffffffffffffffffffffffffff8216146121d05760208716156121d0576121ce33878787878760405160240161213b9695949392919061616e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb6a8b0fa0000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff89169061394c565b505b50505050505050565b60038301545f906fffffffffffffffffffffffffffffffff16808203612222576122227fa74f97ab00000000000000000000000000000000000000000000000000000000611cf5565b61225961222e85611cfd565b5f0361223985611cfd565b5f0360809190911b6fffffffffffffffffffffffffffffffff9091161790565b91508315612293576001850180546fffffffffffffffffffffffffffffffff83167001000000000000000000000000000000008702040190555b82156122cb576002850180546fffffffffffffffffffffffffffffffff83167001000000000000000000000000000000008602040190555b509392505050565b82516122e9906122e38460801d90565b83611d42565b6108c483602001516122e384600f0b90565b853373ffffffffffffffffffffffffffffffffffffffff8216146121d05760108716156121d0576121ce3387878787876040516024016123409695949392919061616e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1b4af690000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff89169061394c565b60017fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d565b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d565b620f424062ffffff82161115611770576117707f140021130000000000000000000000000000000000000000000000000000000062ffffff8316612e1b565b612466826120af565b81547fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff167cffffff000000000000000000000000000000000000000000000000000060d083901b16175b90915550565b843373ffffffffffffffffffffffffffffffffffffffff82161461266f575f84604001511380156124ea5750610800861615155b156125a45761259e338686868660405160240161250b95949392919061623a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f259982e50000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff88169061394c565b5061266f565b5f8460400151131580156125bb5750610200861615155b1561266f576121d033868686866040516024016125dc95949392919061623a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f21d0ee700000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff88169061394c565b505050505050565b80600f81900b8114610c6257610c627f93dafdf100000000000000000000000000000000000000000000000000000000611cf5565b6060810151602082015160408301515f92839290916126cb8282613a48565b604080516080810182525f80825260208201819052918101829052606081019190915283600f0b5f1461289b576127048884865f613b0f565b6fffffffffffffffffffffffffffffffff1660208301521515815261272c8883866001613b0f565b6fffffffffffffffffffffffffffffffff166060830152151560408201525f600f85900b126128605760808701515f9060020b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761881810783139082900503620d89e891909105036001016fffffffffffffffffffffffffffffffff049050806fffffffffffffffffffffffffffffffff1682602001516fffffffffffffffffffffffffffffffff161115612804576128047fb8e3c3850000000000000000000000000000000000000000000000000000000085612cfb565b806fffffffffffffffffffffffffffffffff1682606001516fffffffffffffffffffffffffffffffff16111561285e5761285e7fb8e3c3850000000000000000000000000000000000000000000000000000000084612cfb565b505b80511561287c57608087015161287c9060058a01908590613bf8565b80604001511561289b57608087015161289b9060058a01908490613bf8565b5f806128a88a8686613c4a565b8a5160a08c015160408051602681019290925260068083018a9052600383018b9052928252603a600c8301205f838301819052602080850182905293819052908152928f01909152812092945090925080612905838a8787613cfe565b9150915061293a61291583611cfd565b61291e83611cfd565b6fffffffffffffffffffffffffffffffff1660809190911b1790565b995050505050505f84600f0b12156129a35780511561297657600283810b5f90815260048a016020526040812081815560018101829055909101555b8060400151156129a357600282810b5f90815260048a016020526040812081815560018101829055909101555b5082600f0b5f14612ae75786545f806129bf8360a01c60020b90565b73ffffffffffffffffffffffffffffffffffffffff8416915091508460020b8260020b1215612a1b57612a14612a0e612a096129fa88613e2f565b612a0388613e2f565b8a61412c565b612677565b60801b90565b9750612ae3565b8360020b8260020b1215612abe57612a52612a3c612a0983612a0388613e2f565b61291e612a09612a4b89613e2f565b858b614164565b60038b0154909850612a76906fffffffffffffffffffffffffffffffff1687614190565b60038b0180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055612ae3565b612ae05f61291e612a09612ad189613e2f565b612ada89613e2f565b8b614164565b97505b5050505b5050509250929050565b5f608082811d9084901d01600f83810b9085900b01612b1b612b1283612677565b61291e83612677565b95945050505050565b5f8073ffffffffffffffffffffffffffffffffffffffff89163303612b4d57508490505f612cef565b8591505f87604001511315612c3557610400891615612c3057612c2133898989898989604051602401612b86979695949392919061631c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9f063efc0000000000000000000000000000000000000000000000000000000017905260028b1615155b73ffffffffffffffffffffffffffffffffffffffff8c1691906141c0565b9050612c2d828261421a565b91505b612cef565b610100891615612cef57612ce033898989898989604051602401612c5f979695949392919061631c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6c2bbe7e0000000000000000000000000000000000000000000000000000000017905260018b161515612c03565b9050612cec828261421a565b91505b97509795505050505050565b815f528060020b60045260245ffd5b60405183815273ffffffffffffffffffffffffffffffffffffffff8316600482015273ffffffffffffffffffffffffffffffffffffffff82166024820152604481fd5b5f60808316158015612d6157506008831615155b15612d6d57505f610765565b60408316158015612d8057506004831615155b15612d8c57505f610765565b6104008316158015612da057506002831615155b15612dac57505f610765565b6101008316158015612dc057506001831615155b15612dcc57505f610765565b73ffffffffffffffffffffffffffffffffffffffff831615612e0a57613fff8316151580612e0557506280000062ffffff831614610838565b610838565b5062ffffff16628000001415919050565b815f5273ffffffffffffffffffffffffffffffffffffffff811660045260245ffd5b5f6280000062ffffff831603612e5457505f919050565b611d3e8262ffffff1661241e565b823373ffffffffffffffffffffffffffffffffffffffff8216146109a5576120008416156109a557611d9b338484604051602401612ea29392919061640c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fdc98354e0000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff86169061394c565b82545f9073ffffffffffffffffffffffffffffffffffffffff1615612f7d57612f7d7f7983c05100000000000000000000000000000000000000000000000000000000611cf5565b612f868361423b565b90507cffffff000000000000000000000000000000000000000000000000000060d083901b1673ffffffffffffffffffffffffffffffffffffffff841660a083901b76ffffff00000000000000000000000000000000000000001617179093555090919050565b833373ffffffffffffffffffffffffffffffffffffffff821614611d9b57611000851615611d9b5761266f3385858560405160240161302f94939291906164cf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6fe7e6eb0000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff87169061394c565b6130cb826120af565b81547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff1679ffffff000000000000000000000000000000000000000000000060b883901b16176124b0565b5f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d565b5f73ffffffffffffffffffffffffffffffffffffffff821661315e575047919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156131c6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610765919061659d565b73ffffffffffffffffffffffffffffffffffffffff82167f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d807f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d5050565b60208301515f8073ffffffffffffffffffffffffffffffffffffffff88163303613276575f91506133e6565b60808816156133e6575f61331889338a8a8a8a60405160240161329d9594939291906165b4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f575e24b40000000000000000000000000000000000000000000000000000000017905261394c565b9050805160601461334c5761334c7f1e048e1d00000000000000000000000000000000000000000000000000000000611cf5565b604088015162ffffff16628000000361336757606081015191505b60088916156133e457604081015192505f6133828460801d90565b905080600f0b5f146133e2575f851261339f600f83900b8761669c565b9550806133ae575f86126133b2565b5f86135b156133e0576133e07ffa0b71d600000000000000000000000000000000000000000000000000000000611cf5565b505b505b505b955095509592505050565b5f80808080613400898861455f565b93509350935093505f83111561343b5773ffffffffffffffffffffffffffffffffffffffff86165f9081526001602052604090208054840190555b33887f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f6134688760801d90565b61347288600f0b90565b85516040808801516020808a01518351600f97880b81529590960b9085015273ffffffffffffffffffffffffffffffffffffffff909216908301526fffffffffffffffffffffffffffffffff16606082015260029190910b608082015262ffffff861660a082015260c00160405180910390a35091979650505050505050565b5f8073ffffffffffffffffffffffffffffffffffffffff8916330361351b57508490505f612cef565b5f6135268460801d90565b90505f61353385600f0b90565b905060408b1615613606576135f9612a09338c8c8c8c8c60405160240161355f969594939291906166bb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb47b2fb10000000000000000000000000000000000000000000000000000000017905260048e16151573ffffffffffffffffffffffffffffffffffffffff8f1691906141c0565b61360390826167aa565b90505b5f81600f0b5f14158061361c575082600f0b5f14155b1561367957895160208b01515f1390151514613650576fffffffffffffffffffffffffffffffff8316608083901b1761366a565b6fffffffffffffffffffffffffffffffff8216608084901b175b9050613676898261421a565b98505b979b979a509698505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff841681148015906136e4575073ffffffffffffffffffffffffffffffffffffffff8085165f9081526003602090815260408083209385168352929052205460ff16155b156137915773ffffffffffffffffffffffffffffffffffffffff8085165f9081526005602090815260408083209385168352928152828220868352905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461378f57613754838261603c565b73ffffffffffffffffffffffffffffffffffffffff8087165f9081526005602090815260408083209387168352928152828220888352905220555b505b6109a5848484614dfc565b73ffffffffffffffffffffffffffffffffffffffff8281165f90815290841660205260408120805c91906137d4600f85900b8461669c565b915081815d50935093915050565b7f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c600181039050807f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d50565b7f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c600181019050807f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d50565b6040517f90bfb8650000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff851660048301527fffffffff0000000000000000000000000000000000000000000000000000000084166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201527fffffffff0000000000000000000000000000000000000000000000000000000084168260c4018201528160e40181fd5b60605f805f8451602086015f885af1905080613995576139958461396f856167f8565b7fa9e35b2f0000000000000000000000000000000000000000000000000000000061387e565b6040519150601f19603f3d011682016040523d82523d5f602084013e602082511080613a13575060208301517fffffffff00000000000000000000000000000000000000000000000000000000166139ee836020015190565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b15613a4157613a417f1e048e1d00000000000000000000000000000000000000000000000000000000611cf5565b5092915050565b8060020b8260020b12613a8057613a807fc4433ed5000000000000000000000000000000000000000000000000000000008383614e92565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618600283900b1215613ad657613ad67fd5e2f7ab0000000000000000000000000000000000000000000000000000000083612cfb565b620d89e8600282900b131561179f5761179f7f1ad777f80000000000000000000000000000000000000000000000000000000082612cfb565b600283900b5f908152600485016020526040812080548291906fffffffffffffffffffffffffffffffff8116907001000000000000000000000000000000009004600f0b613b5d8288614190565b6fffffffffffffffffffffffffffffffff808216159084168015919091141596509094505f03613bb057885460a01c60020b60020b8860020b13613bb0576001808a0154908401556002808a0154908401555b5f86613bc557613bc088836167aa565b613bcf565b613bcf8883616864565b90508060801b6fffffffffffffffffffffffffffffffff86161784555050505094509492505050565b600291820b910b80820715613c255760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b600282810b5f81815260048601602052604080822085850b83529082208754929485949293919260a09290921c900b90811215613ca0578160010154836001015403945081600201548360020154039350613cf3565b8560020b8160020b12613ccc578260010154826001015403945082600201548260020154039350613cf3565b81600101548360010154896001015403039450816002015483600201548960020154030393505b505050935093915050565b83545f9081906fffffffffffffffffffffffffffffffff16600f86900b8203613d6857806fffffffffffffffffffffffffffffffff165f03613d6357613d637faefeb92400000000000000000000000000000000000000000000000000000000611cf5565b613daf565b613d728187614190565b87547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161787555b613de387600101548603826fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000614eaf565b9250613e1987600201548503826fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000614eaf565b6001880195909555505060029094015591929050565b60020b5f60ff82901d80830118620d89e8811115613e7157613e717f8b86327a0000000000000000000000000000000000000000000000000000000084612cfb565b7001fffcb933bd6fad37aa2d162d1a5940016001821602700100000000000000000000000000000000186002821615613eba576ffff97272373d413259a46990580e213a0260801c5b6004821615613ed9576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613ef8576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613f17576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613f36576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613f55576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613f74576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613f94576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613fb4576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613fd4576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613ff4576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614014576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614034576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615614054576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614074576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614095576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156140b5576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156140d4576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156140f1576b048a170391f7dc42444e8fa20260801c5b5f84131561411c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff045b63ffffffff0160201c9392505050565b5f8082600f0b126141535761414c6141478585856001614f6a565b6150a7565b5f03611ced565b611ced6141478585855f035f614f6a565b5f8082600f0b1261417f5761414c61414785858560016150d9565b611ced6141478585855f035f6150d9565b6fffffffffffffffffffffffffffffffff8216600f82900b01608081901c15610765576393dafdf15f526004601cfd5b5f806141cc858561394c565b9050826141dc575f915050610838565b805160401461420e5761420e7f1e048e1d00000000000000000000000000000000000000000000000000000000611cf5565b60400151949350505050565b5f608082811d9084901d03600f83810b9085900b03612b1b612b1283612677565b5f73fffd8963efd1fc6a506488495d951d51639616827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffd895d830173ffffffffffffffffffffffffffffffffffffffff1611156142ba576142ba7f614875240000000000000000000000000000000000000000000000000000000083612e1b565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b16805f6142e482615144565b60ff169050608081106142ff57607f810383901c9150614309565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581027ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc5568101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14614550578873ffffffffffffffffffffffffffffffffffffffff1661452882613e2f565b73ffffffffffffffffffffffffffffffffffffffff16111561454a5781614552565b80614552565b815b9998505050505050505050565b604080516060810182525f8082526020820181905291810182905281908190855460408601515f8161459957610fff60c484901c166145a3565b610fff60b884901c165b885173ffffffffffffffffffffffffffffffffffffffff8516865261ffff9190911691505f60a085901c60020b60020b602087015260038b01546fffffffffffffffffffffffffffffffff16604087015260808a01515f9062400000166146135760d086901c62ffffff16614625565b6146258b6080015162ffffff166151d8565b9050831561464b57620f4240610fff851662ffffff83168181029290920491010361464d565b805b975050620f42408762ffffff16106146915789515f1215614691576146917f9620624600000000000000000000000000000000000000000000000000000000611cf5565b89515f036146a9575f80985098505050505050614df3565b831561478c5760608a015173ffffffffffffffffffffffffffffffffffffffff86811691161061471b5761471b73ffffffffffffffffffffffffffffffffffffffff86165b60608c01517f7c9c6e8f000000000000000000000000000000000000000000000000000000009190612d0a565b6401000276a373ffffffffffffffffffffffffffffffffffffffff168a6060015173ffffffffffffffffffffffffffffffffffffffff16116147875760608a0151614787907f9e4d7cc70000000000000000000000000000000000000000000000000000000090612e1b565b61484a565b60608a015173ffffffffffffffffffffffffffffffffffffffff8681169116116147cf576147cf73ffffffffffffffffffffffffffffffffffffffff86166146ee565b73fffd8963efd1fc6a506488495d951d5263988d2673ffffffffffffffffffffffffffffffffffffffff168a6060015173ffffffffffffffffffffffffffffffffffffffff161061484a5760608a015161484a907f9e4d7cc70000000000000000000000000000000000000000000000000000000090612e1b565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915284614899578b6002015461489f565b8b600101545b60e08201525b8215806148e457508a6060015173ffffffffffffffffffffffffffffffffffffffff16875f015173ffffffffffffffffffffffffffffffffffffffff16145b614c7f57865173ffffffffffffffffffffffffffffffffffffffff168152602080880151908c015161491b9160058f0191886151e7565b1515604083015260020b602082018190527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761812614979577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761860208201525b620d89e860020b816020015160020b1261499757620d89e860208201525b6149a48160200151613e2f565b73ffffffffffffffffffffffffffffffffffffffff90811660608381018290528951908e01516149ee939192911680821891811160018a161891909102188960400151868c615312565b60c085015260a0840152608083015273ffffffffffffffffffffffffffffffffffffffff1687528a515f1215614a5757614a2b8160a001516150a7565b83039250614a468160c001518260800151614147919061604f565b614a5090836168b2565b9150614a88565b614a6a8160c001518260800151016150a7565b83019250614a7b8160a001516150a7565b614a85908361669c565b91505b8315614ad7575f848962ffffff1614614abf57620f4240858360c001518460800151010281614ab957614ab96168d1565b04614ac5565b8160c001515b60c08301805182900390529990990198505b60408701516fffffffffffffffffffffffffffffffff1615614b3657614b2a8160c0015170010000000000000000000000000000000089604001516fffffffffffffffffffffffffffffffff1691020490565b60e08201805190910190525b806060015173ffffffffffffffffffffffffffffffffffffffff16875f015173ffffffffffffffffffffffffffffffffffffffff1603614c4c57806040015115614c27575f8086614b90578d600101548360e00151614b9b565b8260e001518e600201545b915091505f614bf38f85602001518585600292830b5f908152600490940160205260409093206001810180549092039091559081018054909203909155547001000000000000000000000000000000009004600f0b90565b90508715614bfe575f035b614c0c8a6040015182614190565b6fffffffffffffffffffffffffffffffff1660408b01525050505b84614c36578060200151614c3f565b60018160200151035b60020b60208801526148a5565b8051875173ffffffffffffffffffffffffffffffffffffffff908116911614614c7a578651614c3f9061423b565b6148a5565b86516020880151614d149190614cd690899060a01b76ffffff0000000000000000000000000000000000000000167fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff919091161790565b7fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161790565b8c55604087015160038d01546fffffffffffffffffffffffffffffffff908116911614614d8357604087015160038d0180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9092169190911790555b84614d975760e081015160028d0155614da2565b60e081015160018d01555b8a515f1385151514614dcf57614dc8614dba83612677565b61291e858e5f015103612677565b9950614dec565b614de9614de0848d5f015103612677565b61291e84612677565b99505b5050505050505b92959194509250565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260046020908152604080832085845290915281208054839290614e3b90849061603c565b9091555050604080513381526020810183905283915f9173ffffffffffffffffffffffffffffffffffffffff8716917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859910161203a565b6040518381528260020b60048201528160020b6024820152604481fd5b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050808411614eed575f80fd5b805f03614eff57508290049050610838565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161115614fa3579293925b73ffffffffffffffffffffffffffffffffffffffff8516614fca5762bfc9215f526004601cfd5b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b1673ffffffffffffffffffffffffffffffffffffffff8686031683615056578673ffffffffffffffffffffffffffffffffffffffff1661504383838973ffffffffffffffffffffffffffffffffffffffff16614eaf565b81615050576150506168d1565b0461509c565b61509c61507a83838973ffffffffffffffffffffffffffffffffffffffff16615482565b8873ffffffffffffffffffffffffffffffffffffffff16808204910615150190565b979650505050505050565b805f811215610c6257610c627f93dafdf100000000000000000000000000000000000000000000000000000000611cf5565b5f73ffffffffffffffffffffffffffffffffffffffff8481169086160360ff81901d908101186c010000000000000000000000006fffffffffffffffffffffffffffffffff851661512b818484614eaf565b9350845f83858409111684019350505050949350505050565b5f808211615150575f80fd5b507f0706060506020500060203020504000106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be6fffffffffffffffffffffffffffffffff841160071b84811c67ffffffffffffffff1060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b62bfffff8116610c628161241e565b5f80600284810b9086900b818107831391900503831561528557600281900b60081d600181900b5f908152602089905260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff808516908190039190911c91821680151595509091908561526757888360ff1686030261527a565b8861527182615144565b840360ff168603025b965050505050615308565b6001908101600281900b60081d80830b5f90815260208a905260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff841694851b0119908116801515955092939192856152ee57888360ff0360ff16860102615301565b88836152f9836154b2565b0360ff168601025b9650505050505b5094509492505050565b5f80808062ffffff851673ffffffffffffffffffffffffffffffffffffffff808a16908b16101582881280156153f5575f6153588a5f0385620f424003620f4240614eaf565b9050826153715761536c8d8d8d60016150d9565b61537e565b61537e8c8e8d6001614f6a565b96508681106153b2578b9750620f424084146153a9576153a4878586620f424003615482565b6153ab565b865b94506153cb565b8096506153c18d8c838661554c565b9750868a5f030394505b826153e1576153dc8d898d5f614f6a565b6153ed565b6153ed888e8d5f6150d9565b955050615473565b8161540b576154068c8c8c5f614f6a565b615417565b6154178b8d8c5f6150d9565b9450848910615428578a965061543a565b8894506154378c8b87856155b0565b96505b816154515761544c8c888c60016150d9565b61545e565b61545e878d8c6001614f6a565b9550615470868485620f424003615482565b93505b50505095509550955095915050565b5f61548e848484614eaf565b9050818061549e5761549e6168d1565b838509156108385760010180610838575f80fd5b5f8082116154be575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b15031604055f8290039091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f6fffffffffffffffffffffffffffffffff84161573ffffffffffffffffffffffffffffffffffffffff861615171561558c57634f2461b85f526004601cfd5b816155a35761559e8585856001615609565b612b1b565b612b1b858585600161576b565b5f6fffffffffffffffffffffffffffffffff84161573ffffffffffffffffffffffffffffffffffffffff86161517156155f057634f2461b85f526004601cfd5b816156015761559e8585855f61576b565b612b1b8585855f5b5f81156156ae575f73ffffffffffffffffffffffffffffffffffffffff84111561565c57615657846c01000000000000000000000000876fffffffffffffffffffffffffffffffff16614eaf565b61567c565b61567c6fffffffffffffffffffffffffffffffff8616606086901b6168fe565b90506156a66156a18273ffffffffffffffffffffffffffffffffffffffff891661604f565b6158a0565b915050611ced565b5f73ffffffffffffffffffffffffffffffffffffffff8411156156fa576156f5846c01000000000000000000000000876fffffffffffffffffffffffffffffffff16615482565b615720565b615720606085901b6fffffffffffffffffffffffffffffffff8716808204910615150190565b90508073ffffffffffffffffffffffffffffffffffffffff87161161574c57634323a5555f526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff8616039050611ced565b5f825f0361577a575083611ced565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b1682156158455773ffffffffffffffffffffffffffffffffffffffff8616848102908582816157cd576157cd6168d1565b040361580a57818101828110615808576157fe838973ffffffffffffffffffffffffffffffffffffffff1683615482565b9350505050611ced565b505b506156a6818561583073ffffffffffffffffffffffffffffffffffffffff8a16836168fe565b61583a919061604f565b808204910615150190565b73ffffffffffffffffffffffffffffffffffffffff86168481029085820414818311166158795763f5c787f15f526004601cfd5b8082036157fe6156a18473ffffffffffffffffffffffffffffffffffffffff8b1684615482565b8073ffffffffffffffffffffffffffffffffffffffff81168114610c6257610c627f93dafdf100000000000000000000000000000000000000000000000000000000611cf5565b73ffffffffffffffffffffffffffffffffffffffff81168114611770575f80fd5b5f8060408385031215615919575f80fd5b8235615924816158e7565b946020939093013593505050565b5f60208284031215615942575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610838575f80fd5b5f805f60608486031215615983575f80fd5b833561598e816158e7565b95602085013595506040909401359392505050565b5f805f606084860312156159b5575f80fd5b83356159c0816158e7565b925060208401356159d0816158e7565b929592945050506040919091013590565b5f602082840312156159f1575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff81118282101715615a4857615a486159f8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715615a9557615a956159f8565b604052919050565b803562ffffff81168114610c62575f80fd5b8035600281900b8114610c62575f80fd5b5f60a08284031215615ad0575f80fd5b60405160a0810167ffffffffffffffff81118282101715615af357615af36159f8565b6040529050808235615b04816158e7565b81526020830135615b14816158e7565b6020820152615b2560408401615a9d565b6040820152615b3660608401615aaf565b60608201526080830135615b49816158e7565b6080919091015292915050565b5f8083601f840112615b66575f80fd5b50813567ffffffffffffffff811115615b7d575f80fd5b602083019150836020828501011115615b94575f80fd5b9250929050565b5f805f805f6101008688031215615bb0575f80fd5b615bba8787615ac0565b945060a0860135935060c0860135925060e086013567ffffffffffffffff811115615be3575f80fd5b615bef88828901615b56565b969995985093965092949392505050565b5f60208284031215615c10575f80fd5b8135610838816158e7565b5f8060408385031215615c2c575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015615c72578351835260209384019390920191600101615c54565b509095945050505050565b5f8060208385031215615c8e575f80fd5b823567ffffffffffffffff811115615ca4575f80fd5b615cb085828601615b56565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060c08385031215615d20575f80fd5b615d2a8484615ac0565b9150615d3860a08401615a9d565b90509250929050565b80358015158114610c62575f80fd5b5f8060408385031215615d61575f80fd5b8235615d6c816158e7565b9150615d3860208401615d41565b5f805f80848603610140811215615d8f575f80fd5b615d998787615ac0565b945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6082011215615dca575f80fd5b50615dd3615a25565b615ddf60a08701615aaf565b8152615ded60c08701615aaf565b602082015260e086013560408201526101008601356060820152925061012085013567ffffffffffffffff811115615e23575f80fd5b615e2f87828801615b56565b95989497509550505050565b5f8060c08385031215615e4c575f80fd5b615e568484615ac0565b915060a0830135615e66816158e7565b809150509250929050565b5f8060208385031215615e82575f80fd5b823567ffffffffffffffff811115615e98575f80fd5b8301601f81018513615ea8575f80fd5b803567ffffffffffffffff811115615ebe575f80fd5b8560208260051b8401011115615ed2575f80fd5b6020919091019590945092505050565b5f8060408385031215615ef3575f80fd5b8235615efe816158e7565b91506020830135615e66816158e7565b5f805f80848603610120811215615f23575f80fd5b615f2d8787615ac0565b945060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6082011215615f5e575f80fd5b506040516060810167ffffffffffffffff81118282101715615f8257615f826159f8565b604052615f9160a08701615d41565b815260c0860135602082015260e0860135615fab816158e7565b6040820152925061010085013567ffffffffffffffff811115615e23575f80fd5b5f805f8060808587031215615fdf575f80fd5b8435615fea816158e7565b93506020850135615ffa816158e7565b93969395505050506040820135916060013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156107655761076561600f565b808201808211156107655761076561600f565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f611ced602083018486616062565b5f602082840312156160cc575f80fd5b815167ffffffffffffffff8111156160e2575f80fd5b8201601f810184136160f2575f80fd5b805167ffffffffffffffff81111561610c5761610c6159f8565b61613d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615a4e565b818152856020838501011115616151575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b73ffffffffffffffffffffffffffffffffffffffff87168152616209602082018773ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8460c08201528360e08201526101206101008201525f61622e61012083018486616062565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526162d5602082018673ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8351600290810b60c08301526020850151900b60e0820152604084015161010082015260608401516101208201526101606101408201525f61509c61016083018486616062565b73ffffffffffffffffffffffffffffffffffffffff881681526163b7602082018873ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8551600290810b60c08301526020870151900b60e08201526040860151610100820152606086015161012082015284610140820152836101608201526101a06101808201525f6145526101a083018486616062565b73ffffffffffffffffffffffffffffffffffffffff8416815260e081016164ab602083018573ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b73ffffffffffffffffffffffffffffffffffffffff831660c0830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff85168152610100810161656f602083018673ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b73ffffffffffffffffffffffffffffffffffffffff841660c08301528260020b60e083015295945050505050565b5f602082840312156165ad575f80fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8616815261664f602082018673ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8351151560c0820152602084015160e0820152604084015173ffffffffffffffffffffffffffffffffffffffff166101008201526101406101208201525f61509c61014083018486616062565b8082018281125f8312801582168215821617156113f4576113f461600f565b73ffffffffffffffffffffffffffffffffffffffff87168152616756602082018773ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8451151560c0820152602085015160e0820152604085015173ffffffffffffffffffffffffffffffffffffffff16610100820152836101208201526101606101408201525f61622e61016083018486616062565b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81137fffffffffffffffffffffffffffffffff80000000000000000000000000000000821217156107655761076561600f565b805160208201517fffffffff0000000000000000000000000000000000000000000000000000000081169190600482101561685d577fffffffff00000000000000000000000000000000000000000000000000000000808360040360031b1b82161692505b5050919050565b600f82810b9082900b037fffffffffffffffffffffffffffffffff8000000000000000000000000000000081126f7fffffffffffffffffffffffffffffff821317156107655761076561600f565b8181035f831280158383131683831282161715613a4157613a4161600f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82616931577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea164736f6c634300081a000a","sourceMap":"4791:12821:72:-:0;;;5508:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1045:5:60;:14;;-1:-1:-1;;;;;;1045:14:60;-1:-1:-1;;;;;1045:14:60;;;;;;;1075:40;;1045:14;;;;;1075:40;;1045:5;;1075:40;-1:-1:-1;;719:4:71;700:24;;-1:-1:-1;4791:12821:72;;14:290:262;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:262;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:262:o;:::-;4791:12821:72;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106101f4575f3560e01c80635a6bcfda11610117578063a5841194116100ac578063f135baaa1161007c578063f3cd914c11610062578063f3cd914c14610676578063f5298aca14610695578063fe99049a146106b4575f80fd5b8063f135baaa14610638578063f2fde38b14610657575f80fd5b8063a584119414610595578063b6363cf2146105b4578063dbd035ff146105ed578063f02de3b21461060c575f80fd5b80638161b874116100e75780638161b874146104dc5780638da5cb5b146104fb57806397e8cd4e1461054b5780639bf6645f14610576575f80fd5b80635a6bcfda146104385780636276cbbe1461046c5780637e87ce7d1461049e57806380f0b44c146104bd575f80fd5b80632d7713891161018d57806348c894911161015d57806348c894911461039257806352759651146103be578063558a7297146103dd578063598af9e7146103fc575f80fd5b80632d7713891461031557806335fd631a146103345780633dd45adb14610360578063426a849314610373575f80fd5b806311da60b4116101c857806311da60b4146102b0578063156e29f6146102b85780631e2eaeaf146102d7578063234266d7146102f6575f80fd5b8062fdd58e146101f857806301ffc9a714610241578063095bcdb6146102705780630b0d9c091461028f575b5f80fd5b348015610203575f80fd5b5061022e610212366004615908565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561024c575f80fd5b5061026061025b366004615932565b6106d3565b6040519015158152602001610238565b34801561027b575f80fd5b5061026061028a366004615971565b61076b565b34801561029a575f80fd5b506102ae6102a93660046159a3565b61083f565b005b61022e6108c9565b3480156102c3575f80fd5b506102ae6102d2366004615971565b610927565b3480156102e2575f80fd5b5061022e6102f13660046159e1565b6109ab565b348015610301575f80fd5b5061022e610310366004615b9b565b6109b5565b348015610320575f80fd5b506102ae61032f366004615c00565b610ad9565b34801561033f575f80fd5b5061035361034e366004615c1b565b610bcc565b6040516102389190615c3b565b61022e61036e366004615c00565b610c09565b34801561037e575f80fd5b5061026061038d366004615971565b610c67565b34801561039d575f80fd5b506103b16103ac366004615c7d565b610cd8565b6040516102389190615cbc565b3480156103c9575f80fd5b506102ae6103d8366004615d0f565b610e2a565b3480156103e8575f80fd5b506102606103f7366004615d50565b610ecc565b348015610407575f80fd5b5061022e6104163660046159a3565b600560209081525f938452604080852082529284528284209052825290205481565b348015610443575f80fd5b50610457610452366004615d7a565b610f66565b60408051928352602083019190915201610238565b348015610477575f80fd5b5061048b610486366004615e3b565b611165565b60405160029190910b8152602001610238565b3480156104a9575f80fd5b506102ae6104b8366004615d0f565b6113fc565b3480156104c8575f80fd5b506102ae6104d7366004615908565b6114ed565b3480156104e7575f80fd5b5061022e6104f63660046159a3565b6115ac565b348015610506575f80fd5b505f546105269073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610238565b348015610556575f80fd5b5061022e610565366004615c00565b60016020525f908152604090205481565b348015610581575f80fd5b50610353610590366004615e71565b611714565b3480156105a0575f80fd5b506102ae6105af366004615c00565b61174d565b3480156105bf575f80fd5b506102606105ce366004615ee2565b600360209081525f928352604080842090915290825290205460ff1681565b3480156105f8575f80fd5b50610353610607366004615e71565b6117a3565b348015610617575f80fd5b506002546105269073ffffffffffffffffffffffffffffffffffffffff1681565b348015610643575f80fd5b5061022e6106523660046159e1565b6117da565b348015610662575f80fd5b506102ae610671366004615c00565b6117e4565b348015610681575f80fd5b5061022e610690366004615f0e565b6118d3565b3480156106a0575f80fd5b506102ae6106af366004615971565b611a85565b3480156106bf575f80fd5b506102606106ce366004615fcc565b611b09565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061076557507f0f632fb3000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f90815260046020908152604080832085845290915281208054839190839061079690849061603c565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f908152600460209081526040808320868452909152812080548492906107da90849061604f565b9091555050604080513380825260208201859052859273ffffffffffffffffffffffffffffffffffffffff8816927f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885991015b60405180910390a45060015b9392505050565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c61088e5761088e7f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b6108a38361089b83611cfd565b5f0333611d42565b6108c473ffffffffffffffffffffffffffffffffffffffff84168383611da2565b505050565b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610919576109197f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b61092233611ebf565b905090565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610976576109767f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b816109848161089b84611cfd565b6109a58473ffffffffffffffffffffffffffffffffffffffff831684611fa8565b50505050565b5f81545f5260205ff35b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610a0557610a057f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b610a0d612047565b60a086205f818152600660205260409020610a27816120af565b6080880151610a509073ffffffffffffffffffffffffffffffffffffffff1689898989896120f6565b610a5b8188886121d9565b9250610a688884336122d3565b6040805188815260208101889052339184917f29ef05caaff9404b7cb6d1c0e9bbae9eaa7ab2541feba1a9c4248594c08156cb910160405180910390a36080880151610ace9073ffffffffffffffffffffffffffffffffffffffff1689898989896122fb565b505095945050505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b85548352602083019250600186019550808310610bec5781810382f35b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610c5957610c597f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b61076582611ebf565b919050565b335f81815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a79061082c9087815260200190565b60607fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c15610d2a57610d2a7f5090d6c600000000000000000000000000000000000000000000000000000000611cf5565b610d326123d3565b6040517f91dd734600000000000000000000000000000000000000000000000000000000815233906391dd734690610d7090869086906004016160a9565b5f604051808303815f875af1158015610d8b573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610dd091908101906160bc565b90507f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c15610e2257610e227f5212cba100000000000000000000000000000000000000000000000000000000611cf5565b6107656123f9565b604082015162ffffff1662800000141580610e755750816080015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610ea357610ea37f30d2164100000000000000000000000000000000000000000000000000000000611cf5565b610eb18162ffffff1661241e565b60a082205f8181526006602052604090206108c4908361245d565b335f81815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff871680855290835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f807fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610fb757610fb77f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b610fbf612047565b60a086205f818152600660205260409020610fd9816120af565b60808801516110019073ffffffffffffffffffffffffffffffffffffffff16898989896124b6565b5f6110756040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018a5f015160020b81526020018a6020015160020b81526020016110528b60400151612677565b600f0b81526060808d015160020b60208301528b015160409091015283906126ac565b945090506110838185612af1565b945050503373ffffffffffffffffffffffffffffffffffffffff16817ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec885f015189602001518a604001518b606001516040516111019493929190600294850b81529290930b60208301526040820152606081019190915260800190565b60405180910390a360808701515f906111359073ffffffffffffffffffffffffffffffffffffffff16898987878b8b612b24565b9094509050801561114f5761114f88828a608001516122d3565b61115a8885336122d3565b505094509492505050565b5f61116e612047565b6060830151617fff60029190910b13156111b25760608301516111b2907fb70024f80000000000000000000000000000000000000000000000000000000090612cfb565b600160020b836060015160020b12156111f55760608301516111f5907fe9e905880000000000000000000000000000000000000000000000000000000090612cfb565b8251602084015173ffffffffffffffffffffffffffffffffffffffff90811691161061124d578251602084015161124d917f6e6c98300000000000000000000000000000000000000000000000000000000091612d0a565b61127e8360400151846080015173ffffffffffffffffffffffffffffffffffffffff16612d4d90919063ffffffff16565b6112b25760808301516112b2907fe65af6a00000000000000000000000000000000000000000000000000000000090612e1b565b5f6112c5846040015162ffffff16612e3d565b60808501519091506112ee9073ffffffffffffffffffffffffffffffffffffffff168585612e62565b60a084205f81815260066020526040902061130a908584612f35565b9250846020015173ffffffffffffffffffffffffffffffffffffffff16855f015173ffffffffffffffffffffffffffffffffffffffff16827fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438886040015189606001518a608001518a8a6040516113c595949392919062ffffff959095168552600293840b602086015273ffffffffffffffffffffffffffffffffffffffff928316604086015291166060840152900b608082015260a00190565b60405180910390a460808501516113f49073ffffffffffffffffffffffffffffffffffffffff16868686612fed565b505092915050565b60025473ffffffffffffffffffffffffffffffffffffffff163314611444576114447f48f5c3ed00000000000000000000000000000000000000000000000000000000611cf5565b6103e9610fff821610623e900062fff0008316101661148c5761148c7fa7abe2f70000000000000000000000000000000000000000000000000000000062ffffff8316612e1b565b60a082206114ae826114a8835f90815260066020526040902090565b906130c2565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c61153c5761153c7f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b335f90815273ffffffffffffffffffffffffffffffffffffffff8316602052604081205c9061156a83611cfd565b90508181600f0b1461159f5761159f7fbda73abf00000000000000000000000000000000000000000000000000000000611cf5565b6109a584825f0333611d42565b6002545f9073ffffffffffffffffffffffffffffffffffffffff1633146115f6576115f67f48f5c3ed00000000000000000000000000000000000000000000000000000000611cf5565b73ffffffffffffffffffffffffffffffffffffffff831615158015611654575073ffffffffffffffffffffffffffffffffffffffff7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c8116908416145b15611682576116827fc79e594800000000000000000000000000000000000000000000000000000000611cf5565b811561168e57816116b4565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600160205260409020545b73ffffffffffffffffffffffffffffffffffffffff84165f908152600160205260408120805492935083929091906116ed90849061603c565b90915550610838905073ffffffffffffffffffffffffffffffffffffffff84168583611da2565b606060405180602082528360208301526040820191508360051b8201855b80355c845260209384019301818410611732575b5081810382f35b73ffffffffffffffffffffffffffffffffffffffff811661177357611770613116565b50565b5f6117938273ffffffffffffffffffffffffffffffffffffffff1661313b565b905061179f82826131ea565b5050565b606060405180602082528360208301526040820191508360051b8201855b80355484526020938401930181841015611746576117c1565b5f815c5f5260205ff35b5f5473ffffffffffffffffffffffffffffffffffffffff163314611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152606401610b55565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c611923576119237f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b61192b612047565b83602001515f0361195f5761195f7fbe8b850700000000000000000000000000000000000000000000000000000000611cf5565b60a085205f818152600660205260409020611979816120af565b60808701515f90819081906119a79073ffffffffffffffffffffffffffffffffffffffff168b8b8b8b61324a565b809350819550829450505050611a2384866040518060a001604052808681526020018e6060015160020b81526020018d5f0151151581526020018d6040015173ffffffffffffffffffffffffffffffffffffffff1681526020018562ffffff168152508c5f0151611a1c578d602001516133f1565b8d516133f1565b60808b01519096505f9250611a54915073ffffffffffffffffffffffffffffffffffffffff168a8a888b8b886134f2565b90955090508015611a6e57611a6e89828b608001516122d3565b611a798986336122d3565b50505050949350505050565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c611ad457611ad47f54e3ca0d00000000000000000000000000000000000000000000000000000000611cf5565b81611ae881611ae284611cfd565b33611d42565b6109a58473ffffffffffffffffffffffffffffffffffffffff83168461368b565b5f3373ffffffffffffffffffffffffffffffffffffffff861614801590611b60575073ffffffffffffffffffffffffffffffffffffffff85165f90815260036020908152604080832033845290915290205460ff16155b15611c095773ffffffffffffffffffffffffffffffffffffffff85165f90815260056020908152604080832033845282528083208684529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c0757611bce838261603c565b73ffffffffffffffffffffffffffffffffffffffff87165f90815260056020908152604080832033845282528083208884529091529020555b505b73ffffffffffffffffffffffffffffffffffffffff85165f90815260046020908152604080832086845290915281208054849290611c4890849061603c565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260046020908152604080832086845290915281208054849290611c8c90849061604f565b90915550506040805133815260208101849052849173ffffffffffffffffffffffffffffffffffffffff80881692908916917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859910160405180910390a45060015b949350505050565b805f5260045ffd5b5f6f800000000000000000000000000000008210611d3e57611d3e7f93dafdf100000000000000000000000000000000000000000000000000000000611cf5565b5090565b81600f0b5f03611d5157505050565b5f80611d7473ffffffffffffffffffffffffffffffffffffffff8616848661379c565b91509150805f03611d8c57611d876137e2565b611d9b565b815f03611d9b57611d9b613830565b5050505050565b5f73ffffffffffffffffffffffffffffffffffffffff8416611dfd575f805f8085875af1905080611df857611df8835f7ff4b3b1bc0000000000000000000000000000000000000000000000000000000061387e565b6109a5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806109a5576109a5847fa9059cbb000000000000000000000000000000000000000000000000000000007ff27f64e40000000000000000000000000000000000000000000000000000000061387e565b5f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c73ffffffffffffffffffffffffffffffffffffffff8116611f0557349150611f8f565b3415611f3457611f347fb0ec849e00000000000000000000000000000000000000000000000000000000611cf5565b7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c5f611f7673ffffffffffffffffffffffffffffffffffffffff841661313b565b9050611f82828261603c565b9350611f8c613116565b50505b611fa281611f9c84611cfd565b85611d42565b50919050565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260046020908152604080832085845290915281208054839290611fe790849061604f565b90915550506040805133815260208101839052839173ffffffffffffffffffffffffffffffffffffffff8616915f917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885991015b60405180910390a4505050565b3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146120ad576120ad7f0d89438e00000000000000000000000000000000000000000000000000000000611cf5565b565b805473ffffffffffffffffffffffffffffffffffffffff165f03611770576117707f486aa30700000000000000000000000000000000000000000000000000000000611cf5565b853373ffffffffffffffffffffffffffffffffffffffff8216146121d05760208716156121d0576121ce33878787878760405160240161213b9695949392919061616e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb6a8b0fa0000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff89169061394c565b505b50505050505050565b60038301545f906fffffffffffffffffffffffffffffffff16808203612222576122227fa74f97ab00000000000000000000000000000000000000000000000000000000611cf5565b61225961222e85611cfd565b5f0361223985611cfd565b5f0360809190911b6fffffffffffffffffffffffffffffffff9091161790565b91508315612293576001850180546fffffffffffffffffffffffffffffffff83167001000000000000000000000000000000008702040190555b82156122cb576002850180546fffffffffffffffffffffffffffffffff83167001000000000000000000000000000000008602040190555b509392505050565b82516122e9906122e38460801d90565b83611d42565b6108c483602001516122e384600f0b90565b853373ffffffffffffffffffffffffffffffffffffffff8216146121d05760108716156121d0576121ce3387878787876040516024016123409695949392919061616e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe1b4af690000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff89169061394c565b60017fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d565b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d565b620f424062ffffff82161115611770576117707f140021130000000000000000000000000000000000000000000000000000000062ffffff8316612e1b565b612466826120af565b81547fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff167cffffff000000000000000000000000000000000000000000000000000060d083901b16175b90915550565b843373ffffffffffffffffffffffffffffffffffffffff82161461266f575f84604001511380156124ea5750610800861615155b156125a45761259e338686868660405160240161250b95949392919061623a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f259982e50000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff88169061394c565b5061266f565b5f8460400151131580156125bb5750610200861615155b1561266f576121d033868686866040516024016125dc95949392919061623a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f21d0ee700000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff88169061394c565b505050505050565b80600f81900b8114610c6257610c627f93dafdf100000000000000000000000000000000000000000000000000000000611cf5565b6060810151602082015160408301515f92839290916126cb8282613a48565b604080516080810182525f80825260208201819052918101829052606081019190915283600f0b5f1461289b576127048884865f613b0f565b6fffffffffffffffffffffffffffffffff1660208301521515815261272c8883866001613b0f565b6fffffffffffffffffffffffffffffffff166060830152151560408201525f600f85900b126128605760808701515f9060020b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761881810783139082900503620d89e891909105036001016fffffffffffffffffffffffffffffffff049050806fffffffffffffffffffffffffffffffff1682602001516fffffffffffffffffffffffffffffffff161115612804576128047fb8e3c3850000000000000000000000000000000000000000000000000000000085612cfb565b806fffffffffffffffffffffffffffffffff1682606001516fffffffffffffffffffffffffffffffff16111561285e5761285e7fb8e3c3850000000000000000000000000000000000000000000000000000000084612cfb565b505b80511561287c57608087015161287c9060058a01908590613bf8565b80604001511561289b57608087015161289b9060058a01908490613bf8565b5f806128a88a8686613c4a565b8a5160a08c015160408051602681019290925260068083018a9052600383018b9052928252603a600c8301205f838301819052602080850182905293819052908152928f01909152812092945090925080612905838a8787613cfe565b9150915061293a61291583611cfd565b61291e83611cfd565b6fffffffffffffffffffffffffffffffff1660809190911b1790565b995050505050505f84600f0b12156129a35780511561297657600283810b5f90815260048a016020526040812081815560018101829055909101555b8060400151156129a357600282810b5f90815260048a016020526040812081815560018101829055909101555b5082600f0b5f14612ae75786545f806129bf8360a01c60020b90565b73ffffffffffffffffffffffffffffffffffffffff8416915091508460020b8260020b1215612a1b57612a14612a0e612a096129fa88613e2f565b612a0388613e2f565b8a61412c565b612677565b60801b90565b9750612ae3565b8360020b8260020b1215612abe57612a52612a3c612a0983612a0388613e2f565b61291e612a09612a4b89613e2f565b858b614164565b60038b0154909850612a76906fffffffffffffffffffffffffffffffff1687614190565b60038b0180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055612ae3565b612ae05f61291e612a09612ad189613e2f565b612ada89613e2f565b8b614164565b97505b5050505b5050509250929050565b5f608082811d9084901d01600f83810b9085900b01612b1b612b1283612677565b61291e83612677565b95945050505050565b5f8073ffffffffffffffffffffffffffffffffffffffff89163303612b4d57508490505f612cef565b8591505f87604001511315612c3557610400891615612c3057612c2133898989898989604051602401612b86979695949392919061631c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9f063efc0000000000000000000000000000000000000000000000000000000017905260028b1615155b73ffffffffffffffffffffffffffffffffffffffff8c1691906141c0565b9050612c2d828261421a565b91505b612cef565b610100891615612cef57612ce033898989898989604051602401612c5f979695949392919061631c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6c2bbe7e0000000000000000000000000000000000000000000000000000000017905260018b161515612c03565b9050612cec828261421a565b91505b97509795505050505050565b815f528060020b60045260245ffd5b60405183815273ffffffffffffffffffffffffffffffffffffffff8316600482015273ffffffffffffffffffffffffffffffffffffffff82166024820152604481fd5b5f60808316158015612d6157506008831615155b15612d6d57505f610765565b60408316158015612d8057506004831615155b15612d8c57505f610765565b6104008316158015612da057506002831615155b15612dac57505f610765565b6101008316158015612dc057506001831615155b15612dcc57505f610765565b73ffffffffffffffffffffffffffffffffffffffff831615612e0a57613fff8316151580612e0557506280000062ffffff831614610838565b610838565b5062ffffff16628000001415919050565b815f5273ffffffffffffffffffffffffffffffffffffffff811660045260245ffd5b5f6280000062ffffff831603612e5457505f919050565b611d3e8262ffffff1661241e565b823373ffffffffffffffffffffffffffffffffffffffff8216146109a5576120008416156109a557611d9b338484604051602401612ea29392919061640c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fdc98354e0000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff86169061394c565b82545f9073ffffffffffffffffffffffffffffffffffffffff1615612f7d57612f7d7f7983c05100000000000000000000000000000000000000000000000000000000611cf5565b612f868361423b565b90507cffffff000000000000000000000000000000000000000000000000000060d083901b1673ffffffffffffffffffffffffffffffffffffffff841660a083901b76ffffff00000000000000000000000000000000000000001617179093555090919050565b833373ffffffffffffffffffffffffffffffffffffffff821614611d9b57611000851615611d9b5761266f3385858560405160240161302f94939291906164cf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f6fe7e6eb0000000000000000000000000000000000000000000000000000000017905273ffffffffffffffffffffffffffffffffffffffff87169061394c565b6130cb826120af565b81547fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff1679ffffff000000000000000000000000000000000000000000000060b883901b16176124b0565b5f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d565b5f73ffffffffffffffffffffffffffffffffffffffff821661315e575047919050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa1580156131c6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610765919061659d565b73ffffffffffffffffffffffffffffffffffffffff82167f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d807f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d5050565b60208301515f8073ffffffffffffffffffffffffffffffffffffffff88163303613276575f91506133e6565b60808816156133e6575f61331889338a8a8a8a60405160240161329d9594939291906165b4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f575e24b40000000000000000000000000000000000000000000000000000000017905261394c565b9050805160601461334c5761334c7f1e048e1d00000000000000000000000000000000000000000000000000000000611cf5565b604088015162ffffff16628000000361336757606081015191505b60088916156133e457604081015192505f6133828460801d90565b905080600f0b5f146133e2575f851261339f600f83900b8761669c565b9550806133ae575f86126133b2565b5f86135b156133e0576133e07ffa0b71d600000000000000000000000000000000000000000000000000000000611cf5565b505b505b505b955095509592505050565b5f80808080613400898861455f565b93509350935093505f83111561343b5773ffffffffffffffffffffffffffffffffffffffff86165f9081526001602052604090208054840190555b33887f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f6134688760801d90565b61347288600f0b90565b85516040808801516020808a01518351600f97880b81529590960b9085015273ffffffffffffffffffffffffffffffffffffffff909216908301526fffffffffffffffffffffffffffffffff16606082015260029190910b608082015262ffffff861660a082015260c00160405180910390a35091979650505050505050565b5f8073ffffffffffffffffffffffffffffffffffffffff8916330361351b57508490505f612cef565b5f6135268460801d90565b90505f61353385600f0b90565b905060408b1615613606576135f9612a09338c8c8c8c8c60405160240161355f969594939291906166bb565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb47b2fb10000000000000000000000000000000000000000000000000000000017905260048e16151573ffffffffffffffffffffffffffffffffffffffff8f1691906141c0565b61360390826167aa565b90505b5f81600f0b5f14158061361c575082600f0b5f14155b1561367957895160208b01515f1390151514613650576fffffffffffffffffffffffffffffffff8316608083901b1761366a565b6fffffffffffffffffffffffffffffffff8216608084901b175b9050613676898261421a565b98505b979b979a509698505050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff841681148015906136e4575073ffffffffffffffffffffffffffffffffffffffff8085165f9081526003602090815260408083209385168352929052205460ff16155b156137915773ffffffffffffffffffffffffffffffffffffffff8085165f9081526005602090815260408083209385168352928152828220868352905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461378f57613754838261603c565b73ffffffffffffffffffffffffffffffffffffffff8087165f9081526005602090815260408083209387168352928152828220888352905220555b505b6109a5848484614dfc565b73ffffffffffffffffffffffffffffffffffffffff8281165f90815290841660205260408120805c91906137d4600f85900b8461669c565b915081815d50935093915050565b7f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c600181039050807f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d50565b7f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c600181019050807f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5d50565b6040517f90bfb8650000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff851660048301527fffffffff0000000000000000000000000000000000000000000000000000000084166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201527fffffffff0000000000000000000000000000000000000000000000000000000084168260c4018201528160e40181fd5b60605f805f8451602086015f885af1905080613995576139958461396f856167f8565b7fa9e35b2f0000000000000000000000000000000000000000000000000000000061387e565b6040519150601f19603f3d011682016040523d82523d5f602084013e602082511080613a13575060208301517fffffffff00000000000000000000000000000000000000000000000000000000166139ee836020015190565b7fffffffff000000000000000000000000000000000000000000000000000000001614155b15613a4157613a417f1e048e1d00000000000000000000000000000000000000000000000000000000611cf5565b5092915050565b8060020b8260020b12613a8057613a807fc4433ed5000000000000000000000000000000000000000000000000000000008383614e92565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618600283900b1215613ad657613ad67fd5e2f7ab0000000000000000000000000000000000000000000000000000000083612cfb565b620d89e8600282900b131561179f5761179f7f1ad777f80000000000000000000000000000000000000000000000000000000082612cfb565b600283900b5f908152600485016020526040812080548291906fffffffffffffffffffffffffffffffff8116907001000000000000000000000000000000009004600f0b613b5d8288614190565b6fffffffffffffffffffffffffffffffff808216159084168015919091141596509094505f03613bb057885460a01c60020b60020b8860020b13613bb0576001808a0154908401556002808a0154908401555b5f86613bc557613bc088836167aa565b613bcf565b613bcf8883616864565b90508060801b6fffffffffffffffffffffffffffffffff86161784555050505094509492505050565b600291820b910b80820715613c255760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b600282810b5f81815260048601602052604080822085850b83529082208754929485949293919260a09290921c900b90811215613ca0578160010154836001015403945081600201548360020154039350613cf3565b8560020b8160020b12613ccc578260010154826001015403945082600201548260020154039350613cf3565b81600101548360010154896001015403039450816002015483600201548960020154030393505b505050935093915050565b83545f9081906fffffffffffffffffffffffffffffffff16600f86900b8203613d6857806fffffffffffffffffffffffffffffffff165f03613d6357613d637faefeb92400000000000000000000000000000000000000000000000000000000611cf5565b613daf565b613d728187614190565b87547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161787555b613de387600101548603826fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000614eaf565b9250613e1987600201548503826fffffffffffffffffffffffffffffffff16700100000000000000000000000000000000614eaf565b6001880195909555505060029094015591929050565b60020b5f60ff82901d80830118620d89e8811115613e7157613e717f8b86327a0000000000000000000000000000000000000000000000000000000084612cfb565b7001fffcb933bd6fad37aa2d162d1a5940016001821602700100000000000000000000000000000000186002821615613eba576ffff97272373d413259a46990580e213a0260801c5b6004821615613ed9576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613ef8576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613f17576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615613f36576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615613f55576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613f74576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613f94576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613fb4576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613fd4576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613ff4576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614014576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615614034576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615614054576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615614074576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614095576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b620200008216156140b5576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156140d4576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156140f1576b048a170391f7dc42444e8fa20260801c5b5f84131561411c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff045b63ffffffff0160201c9392505050565b5f8082600f0b126141535761414c6141478585856001614f6a565b6150a7565b5f03611ced565b611ced6141478585855f035f614f6a565b5f8082600f0b1261417f5761414c61414785858560016150d9565b611ced6141478585855f035f6150d9565b6fffffffffffffffffffffffffffffffff8216600f82900b01608081901c15610765576393dafdf15f526004601cfd5b5f806141cc858561394c565b9050826141dc575f915050610838565b805160401461420e5761420e7f1e048e1d00000000000000000000000000000000000000000000000000000000611cf5565b60400151949350505050565b5f608082811d9084901d03600f83810b9085900b03612b1b612b1283612677565b5f73fffd8963efd1fc6a506488495d951d51639616827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffd895d830173ffffffffffffffffffffffffffffffffffffffff1611156142ba576142ba7f614875240000000000000000000000000000000000000000000000000000000083612e1b565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b16805f6142e482615144565b60ff169050608081106142ff57607f810383901c9150614309565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581027ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc5568101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14614550578873ffffffffffffffffffffffffffffffffffffffff1661452882613e2f565b73ffffffffffffffffffffffffffffffffffffffff16111561454a5781614552565b80614552565b815b9998505050505050505050565b604080516060810182525f8082526020820181905291810182905281908190855460408601515f8161459957610fff60c484901c166145a3565b610fff60b884901c165b885173ffffffffffffffffffffffffffffffffffffffff8516865261ffff9190911691505f60a085901c60020b60020b602087015260038b01546fffffffffffffffffffffffffffffffff16604087015260808a01515f9062400000166146135760d086901c62ffffff16614625565b6146258b6080015162ffffff166151d8565b9050831561464b57620f4240610fff851662ffffff83168181029290920491010361464d565b805b975050620f42408762ffffff16106146915789515f1215614691576146917f9620624600000000000000000000000000000000000000000000000000000000611cf5565b89515f036146a9575f80985098505050505050614df3565b831561478c5760608a015173ffffffffffffffffffffffffffffffffffffffff86811691161061471b5761471b73ffffffffffffffffffffffffffffffffffffffff86165b60608c01517f7c9c6e8f000000000000000000000000000000000000000000000000000000009190612d0a565b6401000276a373ffffffffffffffffffffffffffffffffffffffff168a6060015173ffffffffffffffffffffffffffffffffffffffff16116147875760608a0151614787907f9e4d7cc70000000000000000000000000000000000000000000000000000000090612e1b565b61484a565b60608a015173ffffffffffffffffffffffffffffffffffffffff8681169116116147cf576147cf73ffffffffffffffffffffffffffffffffffffffff86166146ee565b73fffd8963efd1fc6a506488495d951d5263988d2673ffffffffffffffffffffffffffffffffffffffff168a6060015173ffffffffffffffffffffffffffffffffffffffff161061484a5760608a015161484a907f9e4d7cc70000000000000000000000000000000000000000000000000000000090612e1b565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915284614899578b6002015461489f565b8b600101545b60e08201525b8215806148e457508a6060015173ffffffffffffffffffffffffffffffffffffffff16875f015173ffffffffffffffffffffffffffffffffffffffff16145b614c7f57865173ffffffffffffffffffffffffffffffffffffffff168152602080880151908c015161491b9160058f0191886151e7565b1515604083015260020b602082018190527ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761812614979577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761860208201525b620d89e860020b816020015160020b1261499757620d89e860208201525b6149a48160200151613e2f565b73ffffffffffffffffffffffffffffffffffffffff90811660608381018290528951908e01516149ee939192911680821891811160018a161891909102188960400151868c615312565b60c085015260a0840152608083015273ffffffffffffffffffffffffffffffffffffffff1687528a515f1215614a5757614a2b8160a001516150a7565b83039250614a468160c001518260800151614147919061604f565b614a5090836168b2565b9150614a88565b614a6a8160c001518260800151016150a7565b83019250614a7b8160a001516150a7565b614a85908361669c565b91505b8315614ad7575f848962ffffff1614614abf57620f4240858360c001518460800151010281614ab957614ab96168d1565b04614ac5565b8160c001515b60c08301805182900390529990990198505b60408701516fffffffffffffffffffffffffffffffff1615614b3657614b2a8160c0015170010000000000000000000000000000000089604001516fffffffffffffffffffffffffffffffff1691020490565b60e08201805190910190525b806060015173ffffffffffffffffffffffffffffffffffffffff16875f015173ffffffffffffffffffffffffffffffffffffffff1603614c4c57806040015115614c27575f8086614b90578d600101548360e00151614b9b565b8260e001518e600201545b915091505f614bf38f85602001518585600292830b5f908152600490940160205260409093206001810180549092039091559081018054909203909155547001000000000000000000000000000000009004600f0b90565b90508715614bfe575f035b614c0c8a6040015182614190565b6fffffffffffffffffffffffffffffffff1660408b01525050505b84614c36578060200151614c3f565b60018160200151035b60020b60208801526148a5565b8051875173ffffffffffffffffffffffffffffffffffffffff908116911614614c7a578651614c3f9061423b565b6148a5565b86516020880151614d149190614cd690899060a01b76ffffff0000000000000000000000000000000000000000167fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff919091161790565b7fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9091161790565b8c55604087015160038d01546fffffffffffffffffffffffffffffffff908116911614614d8357604087015160038d0180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff9092169190911790555b84614d975760e081015160028d0155614da2565b60e081015160018d01555b8a515f1385151514614dcf57614dc8614dba83612677565b61291e858e5f015103612677565b9950614dec565b614de9614de0848d5f015103612677565b61291e84612677565b99505b5050505050505b92959194509250565b73ffffffffffffffffffffffffffffffffffffffff83165f90815260046020908152604080832085845290915281208054839290614e3b90849061603c565b9091555050604080513381526020810183905283915f9173ffffffffffffffffffffffffffffffffffffffff8716917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859910161203a565b6040518381528260020b60048201528160020b6024820152604481fd5b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050808411614eed575f80fd5b805f03614eff57508290049050610838565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161115614fa3579293925b73ffffffffffffffffffffffffffffffffffffffff8516614fca5762bfc9215f526004601cfd5b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b1673ffffffffffffffffffffffffffffffffffffffff8686031683615056578673ffffffffffffffffffffffffffffffffffffffff1661504383838973ffffffffffffffffffffffffffffffffffffffff16614eaf565b81615050576150506168d1565b0461509c565b61509c61507a83838973ffffffffffffffffffffffffffffffffffffffff16615482565b8873ffffffffffffffffffffffffffffffffffffffff16808204910615150190565b979650505050505050565b805f811215610c6257610c627f93dafdf100000000000000000000000000000000000000000000000000000000611cf5565b5f73ffffffffffffffffffffffffffffffffffffffff8481169086160360ff81901d908101186c010000000000000000000000006fffffffffffffffffffffffffffffffff851661512b818484614eaf565b9350845f83858409111684019350505050949350505050565b5f808211615150575f80fd5b507f0706060506020500060203020504000106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be6fffffffffffffffffffffffffffffffff841160071b84811c67ffffffffffffffff1060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b62bfffff8116610c628161241e565b5f80600284810b9086900b818107831391900503831561528557600281900b60081d600181900b5f908152602089905260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff808516908190039190911c91821680151595509091908561526757888360ff1686030261527a565b8861527182615144565b840360ff168603025b965050505050615308565b6001908101600281900b60081d80830b5f90815260208a905260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff841694851b0119908116801515955092939192856152ee57888360ff0360ff16860102615301565b88836152f9836154b2565b0360ff168601025b9650505050505b5094509492505050565b5f80808062ffffff851673ffffffffffffffffffffffffffffffffffffffff808a16908b16101582881280156153f5575f6153588a5f0385620f424003620f4240614eaf565b9050826153715761536c8d8d8d60016150d9565b61537e565b61537e8c8e8d6001614f6a565b96508681106153b2578b9750620f424084146153a9576153a4878586620f424003615482565b6153ab565b865b94506153cb565b8096506153c18d8c838661554c565b9750868a5f030394505b826153e1576153dc8d898d5f614f6a565b6153ed565b6153ed888e8d5f6150d9565b955050615473565b8161540b576154068c8c8c5f614f6a565b615417565b6154178b8d8c5f6150d9565b9450848910615428578a965061543a565b8894506154378c8b87856155b0565b96505b816154515761544c8c888c60016150d9565b61545e565b61545e878d8c6001614f6a565b9550615470868485620f424003615482565b93505b50505095509550955095915050565b5f61548e848484614eaf565b9050818061549e5761549e6168d1565b838509156108385760010180610838575f80fd5b5f8082116154be575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b15031604055f8290039091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f6fffffffffffffffffffffffffffffffff84161573ffffffffffffffffffffffffffffffffffffffff861615171561558c57634f2461b85f526004601cfd5b816155a35761559e8585856001615609565b612b1b565b612b1b858585600161576b565b5f6fffffffffffffffffffffffffffffffff84161573ffffffffffffffffffffffffffffffffffffffff86161517156155f057634f2461b85f526004601cfd5b816156015761559e8585855f61576b565b612b1b8585855f5b5f81156156ae575f73ffffffffffffffffffffffffffffffffffffffff84111561565c57615657846c01000000000000000000000000876fffffffffffffffffffffffffffffffff16614eaf565b61567c565b61567c6fffffffffffffffffffffffffffffffff8616606086901b6168fe565b90506156a66156a18273ffffffffffffffffffffffffffffffffffffffff891661604f565b6158a0565b915050611ced565b5f73ffffffffffffffffffffffffffffffffffffffff8411156156fa576156f5846c01000000000000000000000000876fffffffffffffffffffffffffffffffff16615482565b615720565b615720606085901b6fffffffffffffffffffffffffffffffff8716808204910615150190565b90508073ffffffffffffffffffffffffffffffffffffffff87161161574c57634323a5555f526004601cfd5b73ffffffffffffffffffffffffffffffffffffffff8616039050611ced565b5f825f0361577a575083611ced565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b1682156158455773ffffffffffffffffffffffffffffffffffffffff8616848102908582816157cd576157cd6168d1565b040361580a57818101828110615808576157fe838973ffffffffffffffffffffffffffffffffffffffff1683615482565b9350505050611ced565b505b506156a6818561583073ffffffffffffffffffffffffffffffffffffffff8a16836168fe565b61583a919061604f565b808204910615150190565b73ffffffffffffffffffffffffffffffffffffffff86168481029085820414818311166158795763f5c787f15f526004601cfd5b8082036157fe6156a18473ffffffffffffffffffffffffffffffffffffffff8b1684615482565b8073ffffffffffffffffffffffffffffffffffffffff81168114610c6257610c627f93dafdf100000000000000000000000000000000000000000000000000000000611cf5565b73ffffffffffffffffffffffffffffffffffffffff81168114611770575f80fd5b5f8060408385031215615919575f80fd5b8235615924816158e7565b946020939093013593505050565b5f60208284031215615942575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610838575f80fd5b5f805f60608486031215615983575f80fd5b833561598e816158e7565b95602085013595506040909401359392505050565b5f805f606084860312156159b5575f80fd5b83356159c0816158e7565b925060208401356159d0816158e7565b929592945050506040919091013590565b5f602082840312156159f1575f80fd5b5035919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff81118282101715615a4857615a486159f8565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715615a9557615a956159f8565b604052919050565b803562ffffff81168114610c62575f80fd5b8035600281900b8114610c62575f80fd5b5f60a08284031215615ad0575f80fd5b60405160a0810167ffffffffffffffff81118282101715615af357615af36159f8565b6040529050808235615b04816158e7565b81526020830135615b14816158e7565b6020820152615b2560408401615a9d565b6040820152615b3660608401615aaf565b60608201526080830135615b49816158e7565b6080919091015292915050565b5f8083601f840112615b66575f80fd5b50813567ffffffffffffffff811115615b7d575f80fd5b602083019150836020828501011115615b94575f80fd5b9250929050565b5f805f805f6101008688031215615bb0575f80fd5b615bba8787615ac0565b945060a0860135935060c0860135925060e086013567ffffffffffffffff811115615be3575f80fd5b615bef88828901615b56565b969995985093965092949392505050565b5f60208284031215615c10575f80fd5b8135610838816158e7565b5f8060408385031215615c2c575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015615c72578351835260209384019390920191600101615c54565b509095945050505050565b5f8060208385031215615c8e575f80fd5b823567ffffffffffffffff811115615ca4575f80fd5b615cb085828601615b56565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f8060c08385031215615d20575f80fd5b615d2a8484615ac0565b9150615d3860a08401615a9d565b90509250929050565b80358015158114610c62575f80fd5b5f8060408385031215615d61575f80fd5b8235615d6c816158e7565b9150615d3860208401615d41565b5f805f80848603610140811215615d8f575f80fd5b615d998787615ac0565b945060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6082011215615dca575f80fd5b50615dd3615a25565b615ddf60a08701615aaf565b8152615ded60c08701615aaf565b602082015260e086013560408201526101008601356060820152925061012085013567ffffffffffffffff811115615e23575f80fd5b615e2f87828801615b56565b95989497509550505050565b5f8060c08385031215615e4c575f80fd5b615e568484615ac0565b915060a0830135615e66816158e7565b809150509250929050565b5f8060208385031215615e82575f80fd5b823567ffffffffffffffff811115615e98575f80fd5b8301601f81018513615ea8575f80fd5b803567ffffffffffffffff811115615ebe575f80fd5b8560208260051b8401011115615ed2575f80fd5b6020919091019590945092505050565b5f8060408385031215615ef3575f80fd5b8235615efe816158e7565b91506020830135615e66816158e7565b5f805f80848603610120811215615f23575f80fd5b615f2d8787615ac0565b945060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6082011215615f5e575f80fd5b506040516060810167ffffffffffffffff81118282101715615f8257615f826159f8565b604052615f9160a08701615d41565b815260c0860135602082015260e0860135615fab816158e7565b6040820152925061010085013567ffffffffffffffff811115615e23575f80fd5b5f805f8060808587031215615fdf575f80fd5b8435615fea816158e7565b93506020850135615ffa816158e7565b93969395505050506040820135916060013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156107655761076561600f565b808201808211156107655761076561600f565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081525f611ced602083018486616062565b5f602082840312156160cc575f80fd5b815167ffffffffffffffff8111156160e2575f80fd5b8201601f810184136160f2575f80fd5b805167ffffffffffffffff81111561610c5761610c6159f8565b61613d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615a4e565b818152856020838501011115616151575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b73ffffffffffffffffffffffffffffffffffffffff87168152616209602082018773ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8460c08201528360e08201526101206101008201525f61622e61012083018486616062565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526162d5602082018673ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8351600290810b60c08301526020850151900b60e0820152604084015161010082015260608401516101208201526101606101408201525f61509c61016083018486616062565b73ffffffffffffffffffffffffffffffffffffffff881681526163b7602082018873ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8551600290810b60c08301526020870151900b60e08201526040860151610100820152606086015161012082015284610140820152836101608201526101a06101808201525f6145526101a083018486616062565b73ffffffffffffffffffffffffffffffffffffffff8416815260e081016164ab602083018573ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b73ffffffffffffffffffffffffffffffffffffffff831660c0830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff85168152610100810161656f602083018673ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b73ffffffffffffffffffffffffffffffffffffffff841660c08301528260020b60e083015295945050505050565b5f602082840312156165ad575f80fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8616815261664f602082018673ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8351151560c0820152602084015160e0820152604084015173ffffffffffffffffffffffffffffffffffffffff166101008201526101406101208201525f61509c61014083018486616062565b8082018281125f8312801582168215821617156113f4576113f461600f565b73ffffffffffffffffffffffffffffffffffffffff87168152616756602082018773ffffffffffffffffffffffffffffffffffffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015262ffffff6040820151166040830152606081015160020b606083015273ffffffffffffffffffffffffffffffffffffffff60808201511660808301525050565b8451151560c0820152602085015160e0820152604085015173ffffffffffffffffffffffffffffffffffffffff16610100820152836101208201526101606101408201525f61622e61016083018486616062565b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81137fffffffffffffffffffffffffffffffff80000000000000000000000000000000821217156107655761076561600f565b805160208201517fffffffff0000000000000000000000000000000000000000000000000000000081169190600482101561685d577fffffffff00000000000000000000000000000000000000000000000000000000808360040360031b1b82161692505b5050919050565b600f82810b9082900b037fffffffffffffffffffffffffffffffff8000000000000000000000000000000081126f7fffffffffffffffffffffffffffffff821317156107655761076561600f565b8181035f831280158383131683831282161715613a4157613a4161600f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82616931577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50049056fea164736f6c634300081a000a","sourceMap":"4791:12821:72:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;792:81:67;;;;;;;;;;-1:-1:-1;792:81:67;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;691:25:262;;;679:2;664:18;792:81:67;;;;;;;;2663:241;;;;;;;;;;-1:-1:-1;2663:241:67;;;;;:::i;:::-;;:::i;:::-;;;1229:14:262;;1222:22;1204:41;;1192:2;1177:18;2663:241:67;1064:187:262;1178:282:67;;;;;;;;;;-1:-1:-1;1178:282:67;;;;;:::i;:::-;;:::i;13288:301:72:-;;;;;;;;;;-1:-1:-1;13288:301:72;;;;;:::i;:::-;;:::i;:::-;;13628:113;;;:::i;14496:359::-;;;;;;;;;;-1:-1:-1;14496:359:72;;;;;:::i;:::-;;:::i;337:179:69:-;;;;;;;;;;-1:-1:-1;337:179:69;;;;;:::i;:::-;;:::i;12025:732:72:-;;;;;;;;;;-1:-1:-1;12025:732:72;;;;;:::i;:::-;;:::i;1070:179:73:-;;;;;;;;;;-1:-1:-1;1070:179:73;;;;;:::i;:::-;;:::i;552:981:69:-;;;;;;;;;;-1:-1:-1;552:981:69;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13780:132:72:-;;;;;;:::i;:::-;;:::i;2013:231:67:-;;;;;;;;;;-1:-1:-1;2013:231:67;;;;;:::i;:::-;;:::i;5610:468:72:-;;;;;;;;;;-1:-1:-1;5610:468:72;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15192:353::-;;;;;;;;;;-1:-1:-1;15192:353:72;;;;;:::i;:::-;;:::i;2250:225:67:-;;;;;;;;;;-1:-1:-1;2250:225:67;;;;;:::i;:::-;;:::i;880:108::-;;;;;;;;;;-1:-1:-1;880:108:67;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7601:1745:72;;;;;;;;;;-1:-1:-1;7601:1745:72;;;;;:::i;:::-;;:::i;:::-;;;;10899:25:262;;;10955:2;10940:18;;10933:34;;;;10872:18;7601:1745:72;10659:314:262;6117:1445:72;;;;;;;;;;-1:-1:-1;6117:1445:72;;;;;:::i;:::-;;:::i;:::-;;;11519:1:262;11508:21;;;;11490:40;;11478:2;11463:18;6117:1445:72;11348:188:262;1289:414:73;;;;;;;;;;-1:-1:-1;1289:414:73;;;;;:::i;:::-;;:::i;13951:506:72:-;;;;;;;;;;-1:-1:-1;13951:506:72;;;;;:::i;:::-;;:::i;1743:701:73:-;;;;;;;;;;-1:-1:-1;1743:701:73;;;;;:::i;:::-;;:::i;690:20:60:-;;;;;;;;;;-1:-1:-1;690:20:60;;;;;;;;;;;12662:42:262;12650:55;;;12632:74;;12620:2;12605:18;690:20:60;12486:226:262;819:71:73;;;;;;;;;;-1:-1:-1;819:71:73;;;;;:::i;:::-;;;;;;;;;;;;;;563:1037:70;;;;;;;;;;-1:-1:-1;563:1037:70;;;;;:::i;:::-;;:::i;12796:453:72:-;;;;;;;;;;-1:-1:-1;12796:453:72;;;;;:::i;:::-;;:::i;697:88:67:-;;;;;;;;;;-1:-1:-1;697:88:67;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;1569:1037:69;;;;;;;;;;-1:-1:-1;1569:1037:69;;;;;:::i;:::-;;:::i;931:36:73:-;;;;;;;;;;-1:-1:-1;931:36:73;;;;;;;;348:179:70;;;;;;;;;;-1:-1:-1;348:179:70;;;;;:::i;:::-;;:::i;1312:161:60:-;;;;;;;;;;-1:-1:-1;1312:161:60;;;;;:::i;:::-;;:::i;9385:1686:72:-;;;;;;;;;;-1:-1:-1;9385:1686:72;;;;;:::i;:::-;;:::i;14894:259::-;;;;;;;;;;-1:-1:-1;14894:259:72;;;;;:::i;:::-;;:::i;1466:541:67:-;;;;;;;;;;-1:-1:-1;1466:541:67;;;;;:::i;:::-;;:::i;2663:241::-;2739:4;2762:25;;;;;;:100;;-1:-1:-1;2837:25:67;;;;;2762:100;2755:107;2663:241;-1:-1:-1;;2663:241:67:o;1178:282::-;1292:10;1266:4;1282:21;;;:9;:21;;;;;;;;:25;;;;;;;;:35;;1311:6;;1282:25;1266:4;;1282:35;;1311:6;;1282:35;:::i;:::-;;;;-1:-1:-1;;1328:19:67;;;;;;;:9;:19;;;;;;;;:23;;;;;;;;:33;;1355:6;;1328:19;:33;;1355:6;;1328:33;:::i;:::-;;;;-1:-1:-1;;1377:54:67;;;1398:10;16544:74:262;;;16649:2;16634:18;;16627:34;;;1420:2:67;;1377:54;;;;;;16517:18:262;1377:54:67;;;;;;;;-1:-1:-1;1449:4:67;1178:282;;;;;;:::o;13288:301:72:-;894:16:92;888:23;5425:59:72;;5449:35;:22;:33;:35::i;:::-;13472:57:::1;13486:8;13498:17;:6;:15;:17::i;:::-;13496:20;;13518:10;13472:13;:57::i;:::-;13543:29;:17;::::0;::::1;13561:2:::0;13565:6;13543:17:::1;:29::i;:::-;13288:301:::0;;;:::o;13628:113::-;13689:7;894:16:92;888:23;5425:59:72;;5449:35;:22;:33;:35::i;:::-;13715:19:::1;13723:10;13715:7;:19::i;:::-;13708:26;;13628:113:::0;:::o;14496:359::-;894:16:92;888:23;5425:59:72;;5449:35;:22;:33;:35::i;:::-;14653:2;14733:57:::1;14653:2:::0;14759:17:::1;:6:::0;:15:::1;:17::i;14733:57::-;14804:34;14810:2:::0;14814:13:::1;::::0;::::1;14831:6;14804:5;:34::i;:::-;14586:263;14496:359:::0;;;:::o;337:179:69:-;392:7;466:4;460:11;457:1;450:22;495:4;492:1;485:15;12025:732:72;12202:18;894:16:92;888:23;5425:59:72;;5449:35;:22;:33;:35::i;:::-;1205:22:71::1;:20;:22::i;:::-;515:4:121::0;496:24;;12236:13:72::2;17402:10:::0;;;:6;:10;;;;;12324:27:::2;17402:10:::0;12324:25:::2;:27::i;:::-;12362:9;::::0;::::2;::::0;:55:::2;::::0;:22:::2;;12385:3:::0;12390:7;12399;12408:8;;12362:22:::2;:55::i;:::-;12436:29;:4:::0;12448:7;12457;12436:11:::2;:29::i;:::-;12428:37;;12476:48;12501:3;12506:5;12513:10;12476:24;:48::i;:::-;12641:44;::::0;;10899:25:262;;;10955:2;10940:18;;10933:34;;;12656:10:72::2;::::0;12648:6;;12641:44:::2;::::0;10872:18:262;12641:44:72::2;;;;;;;12696:9;::::0;::::2;::::0;:54:::2;::::0;:21:::2;;12718:3:::0;12723:7;12732;12741:8;;12696:21:::2;:54::i;:::-;12226:531;;12025:732:::0;;;;;;;:::o;1070:179:73:-;778:5:60;;;;764:10;:19;756:44;;;;;;;17127:2:262;756:44:60;;;17109:21:262;17166:2;17146:18;;;17139:30;17205:14;17185:18;;;17178:42;17237:18;;756:44:60;;;;;;;;;1153:21:73::1;:34:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1202:40:::1;::::0;::::1;::::0;-1:-1:-1;;1202:40:73::1;1070:179:::0;:::o;552:981:69:-;628:16;715:4;709:11;746:6;878;875:1;871:14;985:4;977:6;970:20;1083:6;1076:4;1068:6;1064:17;1057:33;1193:4;1185:6;1181:17;1171:27;;1234:6;1226;1222:19;1211:30;;1254:220;1305:9;1299:16;1291:6;1284:32;1355:4;1347:6;1343:17;1333:27;;1405:1;1394:9;1390:17;1377:30;;1445:3;1437:6;1434:15;1254:220;1424:36;1510:5;1505:3;1501:15;1494:5;1487:30;13780:132:72;13861:7;894:16:92;888:23;5425:59:72;;5449:35;:22;:33;:35::i;:::-;13887:18:::1;13895:9;13887:7;:18::i;5494:1::-;13780:132:::0;;;:::o;2013:231:67:-;2125:10;2099:4;2115:21;;;:9;:21;;;;;;;;;:30;;;;;;;;;;;:34;;;;;;;;;:43;;;2174:41;2099:4;;2146:2;;2174:41;;;;2152:6;691:25:262;;679:2;664:18;;545:177;5610:468:72;5674:19;894:16:92;888:23;5705:60:72;;;5728:37;:24;:35;:37::i;:::-;5776:13;:11;:13::i;:::-;5916:48;;;;;5932:10;;5916:42;;:48;;5959:4;;;;5916:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5907:57;-1:-1:-1;676:24:93;670:31;5979:29:72;5975:75;;6010:40;:27;:38;:40::i;:::-;6060:11;:9;:11::i;15192:353::-;15288:7;;;;:20;;552:8:90;1379:24;15287:23:72;:59;;;;15336:3;:9;;;15314:32;;:10;:32;;;;15287:59;15283:142;;;15362:52;:39;:50;:52::i;:::-;15434:26;:15;:24;;;:26::i;:::-;515:4:121;496:24;;15470:9:72;15502:10;;;:6;:10;;;;;:36;;15522:15;15502:19;:36::i;2250:225:67:-;2355:10;2328:4;2344:22;;;:10;:22;;;;;;;;;:32;;;;;;;;;;;:43;;;;;;;;;;;;;2403;;1204:41:262;;;2328:4:67;;2355:10;2403:43;;1177:18:262;2403:43:67;;;;;;;-1:-1:-1;2464:4:67;2250:225;;;;:::o;7601:1745:72:-;7790:24;;894:16:92;888:23;5425:59:72;;5449:35;:22;:33;:35::i;:::-;1205:22:71::1;:20;:22::i;:::-;515:4:121::0;496:24;;7856:9:72::2;17402:10:::0;;;:6;:10;;;;;7954:27:::2;17402:10:::0;7954:25:::2;:27::i;:::-;7996:9;::::0;::::2;::::0;:54:::2;::::0;:31:::2;;8028:3:::0;8033:6;8041:8;;7996:31:::2;:54::i;:::-;8065:27;8138:394;8176:342;;;;;;;;8232:10;8176:342;;;;;;8275:6;:16;;;8176:342;;;;;;8324:6;:16;;;8176:342;;;;;;8378:32;:6;:21;;;:30;:32::i;:::-;8176:342;;::::0;;8445:15:::2;::::0;;::::2;::::0;8176:342:::2;;;::::0;::::2;::::0;8488:11;::::2;::::0;-1:-1:-1;8176:342:72;;;;8138:4;;:20:::2;:394::i;:::-;8106:426:::0;-1:-1:-1;8106:426:72;-1:-1:-1;8637:28:72::2;8106:426:::0;;8637:28:::2;:::i;:::-;8623:42;;7888:788;;8821:10;8801:103;;8817:2;8801:103;8833:6;:16;;;8851:6;:16;;;8869:6;:21;;;8892:6;:11;;;8801:103;;;;;;;;18914:1:262::0;18903:21;;;18885:40;;18961:21;;;;18956:2;18941:18;;18934:49;19014:2;18999:18;;18992:34;19057:2;19042:18;;19035:34;;;;18872:3;18857:19;;18664:411;8801:103:72::2;;;;;;;;8974:9;::::0;::::2;::::0;8915:22:::2;::::0;8974:79:::2;::::0;:30:::2;;9005:3:::0;9010:6;9018:11;9031;9044:8;;8974:30:::2;:79::i;:::-;8947:106:::0;;-1:-1:-1;8947:106:72;-1:-1:-1;1676:48:118;;9165:109:72::2;;9214:60;9239:3;9244:9;9263:3;:9;;;9214:24;:60::i;:::-;9285:54;9310:3;9315:11;9328:10;9285:24;:54::i;:::-;7846:1500;;7601:1745:::0;;;;;;;:::o;6117:1445::-;6212:10;1205:22:71;:20;:22::i;:::-;6341:15:72::1;::::0;::::1;::::0;1676::103::1;6341:34:72;::::0;;;::::1;;6337:96;;;6417:15;::::0;::::1;::::0;6377:56:::1;::::0;:28;;:39:::1;:56::i;:::-;1511:1:103;6447:34:72;;:3;:15;;;:34;;;6443:96;;;6523:15;::::0;::::1;::::0;6483:56:::1;::::0;:28;;:39:::1;:56::i;:::-;6553:13:::0;;6570::::1;::::0;::::1;::::0;887:51:120;;;;;;;6549:202:72::1;;6680:13:::0;;6712::::1;::::0;::::1;::::0;6599:141:::1;::::0;:36;;:47:::1;:141::i;:::-;6765:37;6794:3;:7;;;6765:3;:9;;;:28;;;;:37;;;;:::i;:::-;6760:109;;6858:9;::::0;::::1;::::0;6804:65:::1;::::0;:34;;:45:::1;:65::i;:::-;6880:12;6895:25;:3;:7;;;:23;;;:25::i;:::-;6931:9;::::0;::::1;::::0;6880:40;;-1:-1:-1;6931:45:72::1;::::0;:26:::1;;6958:3:::0;6963:12;6931:26:::1;:45::i;:::-;515:4:121::0;496:24;;6987:9:72::1;7027:10:::0;;;:6:::1;:10;::::0;;;;:42:::1;::::0;7049:12;7063:5;7027:21:::1;:42::i;:::-;7020:49;;7423:3;:13;;;7393:101;;7408:3;:13;;;7393:101;;7404:2;7393:101;7438:3;:7;;;7447:3;:15;;;7464:3;:9;;;7475:12;7489:4;7393:101;;;;;;;;;19375:8:262::0;19363:21;;;;19345:40;;19432:1;19421:21;;;19416:2;19401:18;;19394:49;19491:42;19479:55;;;19474:2;19459:18;;19452:83;19571:55;;19566:2;19551:18;;19544:83;19664:21;;19658:3;19643:19;;19636:50;19332:3;19317:19;;19080:612;7393:101:72::1;;;;;;;;7505:9;::::0;::::1;::::0;:50:::1;::::0;:25:::1;;7531:3:::0;7536:12;7550:4;7505:25:::1;:50::i;:::-;6224:1338;;6117:1445:::0;;;;:::o;1289:414:73:-;1393:21;;;;1379:10;:35;1375:76;;1416:35;:22;:33;:35::i;:::-;1173:15:97;1165:5;1155:16;;1152:37;1251:15;1240:8;1230:19;;1227:40;1289:41;1461:97:73;;1503:55;:28;:55;;;:39;:55::i;:::-;515:4:121;496:24;;1600:43:73;1628:14;1600:12;1609:2;17365:18:72;17402:10;;;:6;:10;;;;;;17304:115;1600:12:73;:27;;:43::i;:::-;1658:38;;19871:8:262;19859:21;;19841:40;;1677:2:73;;1658:38;;19829:2:262;19814:18;1658:38:73;;;;;;;1365:338;1289:414;;:::o;13951:506:72:-;894:16:92;888:23;5425:59:72;;5449:35;:22;:33;:35::i;:::-;14072:10:::1;14037:14;586:66:83::0;;;14054:17:72::1;::::0;::::1;672:2:83::0;665:69;772:2;759:16;;1004:15;;14191:17:72::1;:6:::0;:15:::1;:17::i;:::-;14170:38;;14237:7;14222:11;:22;;;14218:77;;14246:49;:36:::0;:47:::1;:49::i;:::-;14389:51;14403:8;14415:11;14413:14;;14429:10;14389:13;:51::i;1743:701:73:-:0;1917:21;;1860:23;;1917:21;;1903:10;:35;1899:76;;1940:35;:22;:33;:35::i;:::-;1990:22;;;4998:58:120;1989:25:73;:77;;;;-1:-1:-1;448:51:120;686:13:84;680:20;448:51:120;;;;;;2018:48:73;1985:257;;;2184:47;:34;:45;:47::i;:::-;2271:11;;2270:54;;2318:6;2270:54;;;2286:29;;;;;;;:19;:29;;;;;;2270:54;2334:29;;;;;;;:19;:29;;;;;:48;;2252:72;;-1:-1:-1;2252:72:73;;2334:29;;;:48;;2252:72;;2334:48;:::i;:::-;;;;-1:-1:-1;2392:45:73;;-1:-1:-1;2392:17:73;;;2410:9;2421:15;2392:17;:45::i;563:1037:70:-;630:16;717:4;711:11;748:6;861:4;853:6;846:20;965:12;958:4;950:6;946:17;939:39;1087:4;1079:6;1075:17;1065:27;;1227:12;1224:1;1220:20;1212:6;1208:33;1273:12;1298:243;1349:25;;1343:32;1328:48;;1415:4;1403:17;;;;1452:22;1501:15;;;1298:243;1491:36;1298:243;1302:2;1577:5;1572:3;1568:15;1561:5;1554:30;12796:453:72;12906:22;;;12902:341;;13054:32;:30;:32::i;:::-;12796:453;:::o;12902:341::-;13117:15;13135:24;:8;:22;;;:24::i;:::-;13117:42;;13173:59;13214:8;13224:7;13173:40;:59::i;:::-;13103:140;12796:453;:::o;1569:1037:69:-;1636:16;1723:4;1717:11;1754:6;1867:4;1859:6;1852:20;1971:12;1964:4;1956:6;1952:17;1945:39;2093:4;2085:6;2081:17;2071:27;;2233:12;2230:1;2226:20;2218:6;2214:33;2279:12;2304:243;2355:25;;2349:32;2334:48;;2421:4;2409:17;;;;2458:22;2507:15;;;2497:36;2526:5;2497:36;2304:243;;348:179:70;403:7;477:4;471:11;468:1;461:22;506:4;503:1;496:15;1312:161:60;778:5;;;;764:10;:19;756:44;;;;;;;17127:2:262;756:44:60;;;17109:21:262;17166:2;17146:18;;;17139:30;17205:14;17185:18;;;17178:42;17237:18;;756:44:60;16925:336:262;756:44:60;1392:5:::1;:16:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;1424:42:::1;::::0;1392:16;;1445:10:::1;::::0;1424:42:::1;::::0;1392:5;1424:42:::1;1312:161:::0;:::o;9385:1686:72:-;9552:22;894:16:92;888:23;5425:59:72;;5449:35;:22;:33;:35::i;:::-;1205:22:71::1;:20;:22::i;:::-;9594:6:72::2;:22;;;9620:1;9594:27:::0;9590:77:::2;;9623:44;:31:::0;:42:::2;:44::i;:::-;515:4:121::0;496:24;;9677:9:72::2;17402:10:::0;;;:6;:10;;;;;9757:27:::2;17402:10:::0;9757:25:::2;:27::i;:::-;9966:9;::::0;::::2;::::0;9795:31:::2;::::0;;;;;9966:43:::2;::::0;:20:::2;;9987:3:::0;9992:6;10000:8;;9966:20:::2;:43::i;:::-;9917:92;;;;;;;;;;;;10169:463;10192:4;10214:2;10234:302;;;;;;;;10390:12;10234:302;;;;10285:3;:15;;;10234:302;;;;;;10334:6;:17;;;10234:302;;;;;;10443:6;:24;;;10234:302;;;;;;10504:13;10234:302;;;;::::0;10554:6:::2;:17;;;:49;;10590:3;:13;;;10169:5;:463::i;10554:49::-;10574:13:::0;;10169:5:::2;:463::i;:::-;10710:9;::::0;::::2;::::0;10157:475;;-1:-1:-1;10653:22:72::2;::::0;-1:-1:-1;10710:70:72::2;::::0;-1:-1:-1;10710:19:72::2;;10730:3:::0;10735:6;10157:475;10754:8;;10764:15;10710:19:::2;:70::i;:::-;10685:95:::0;;-1:-1:-1;10685:95:72;-1:-1:-1;1676:48:118;;10892:109:72::2;;10941:60;10966:3;10971:9;10990:3;:9;;;10941:24;:60::i;:::-;11012:52;11037:3;11042:9;11053:10;11012:24;:52::i;:::-;9580:1491;;;;9385:1686:::0;;;;;;:::o;14894:259::-;894:16:92;888:23;5425:59:72;;5449:35;:22;:33;:35::i;:::-;15029:2;15042:54:::1;15029:2:::0;15066:17:::1;:6:::0;:15:::1;:17::i;:::-;15085:10;15042:13;:54::i;:::-;15106:40;15116:4:::0;15122:13:::1;::::0;::::1;15139:6;15106:9;:40::i;1466:541:67:-:0;1574:4;1594:10;:20;;;;;;;:55;;-1:-1:-1;1619:18:67;;;;;;;:10;:18;;;;;;;;1638:10;1619:30;;;;;;;;;;1618:31;1594:55;1590:237;;;1683:17;;;1665:15;1683:17;;;:9;:17;;;;;;;;1701:10;1683:29;;;;;;;:33;;;;;;;;;1745:17;1734:28;;1730:86;;1800:16;1810:6;1800:7;:16;:::i;:::-;1764:17;;;;;;;:9;:17;;;;;;;;1782:10;1764:29;;;;;;;:33;;;;;;;;:52;1730:86;1651:176;1590:237;1837:17;;;;;;;:9;:17;;;;;;;;:21;;;;;;;;:31;;1862:6;;1837:17;:31;;1862:6;;1837:31;:::i;:::-;;;;-1:-1:-1;;1879:19:67;;;;;;;:9;:19;;;;;;;;:23;;;;;;;;:33;;1906:6;;1879:19;:33;;1906:6;;1879:33;:::i;:::-;;;;-1:-1:-1;;1928:50:67;;;1937:10;16544:74:262;;16649:2;16634:18;;16627:34;;;1967:2:67;;1928:50;;;;;;;;;;;16517:18:262;1928:50:67;;;;;;;-1:-1:-1;1996:4:67;1466:541;;;;;;;:::o;753:163:85:-;863:8;860:1;853:19;895:4;892:1;885:15;2098:168:98;2150:6;2177:8;2172:1;:13;2168:57;;2187:38;:25;:36;:38::i;:::-;-1:-1:-1;2256:1:98;2098:168::o;16552:356:72:-;16647:5;:10;;16656:1;16647:10;16643:23;;16552:356;;;:::o;16643:23::-;16677:15;;16709:34;:19;;;16729:6;16737:5;16709:19;:34::i;:::-;16676:67;;;;16758:4;16766:1;16758:9;16754:148;;16783:29;:27;:29::i;:::-;16754:148;;;16833:8;16845:1;16833:13;16829:73;;16862:29;:27;:29::i;:::-;16633:275;;16552:356;;;:::o;1472:2873:120:-;1743:12;1769:22;;;1765:2574;;1956:1;1953;1950;1947;1939:6;1935:2;1928:5;1923:35;1912:46;;2086:7;2081:127;;2113:80;2148:2;2159:1;2163:29;2113:34;:80::i;:::-;1765:2574;;;2352:4;2346:11;2488:66;2483:3;2476:79;2600:42;2596:2;2592:51;2588:1;2583:3;2579:11;2572:72;2720:6;2715:2;2710:3;2706:12;2699:28;3649:2;3646:1;3642:2;3637:3;3634:1;3624:8;3617:5;3612:40;3141:16;3134:24;3128:2;3110:16;3107:24;3103:1;3099;3093:8;3090:15;3086:46;3083:76;2859:815;2828:846;;3752:1;3747:3;3740:14;3853:1;3846:4;3841:3;3837:14;3830:25;3956:1;3949:4;3944:3;3940:14;3933:25;;4125:7;4120:209;;4152:162;4224:8;4235:31;4268:28;4152:34;:162::i;15649:825:72:-;15703:12;686:13:84;680:20;15916:22:72;;;15912:494;;15963:9;15956:16;;15912:494;;;16007:9;:13;16003:59;;16022:40;:27;:38;:40::i;:::-;1253:16:84;1247:23;16179:22:72;16276:24;:22;;;;:24::i;:::-;16254:46;-1:-1:-1;16321:28:72;16335:14;16254:46;16321:28;:::i;:::-;16314:35;;16363:32;:30;:32::i;:::-;15989:417;;15912:494;16416:51;16430:8;16440:15;:4;:13;:15::i;:::-;16457:9;16416:13;:51::i;:::-;15717:757;15649:825;;;:::o;3098:198:67:-;3186:19;;;;;;;:9;:19;;;;;;;;:23;;;;;;;;:33;;3213:6;;3186:19;:33;;3213:6;;3186:33;:::i;:::-;;;;-1:-1:-1;;3235:54:67;;;3244:10;16544:74:262;;16649:2;16634:18;;16627:34;;;3278:2:67;;3235:54;;;;3264:1;;3235:54;;16517:18:262;3235:54:67;;;;;;;;3098:198;;;:::o;963:137:71:-;1030:4;1022:25;1039:8;1022:25;;1018:75;;1049:44;:31;:42;:44::i;:::-;963:137::o;28591:157:95:-;28669:10;;5144:41:120;;28698:1:95;28669:30;28665:76;;28701:40;:27;:38;:40::i;15596:342:89:-;15746:4;8814:10;:27;;;;8810:59;;1907:6:::1;16467:29:::0;;:34;15766:166:::1;;15824:97;15875:10;15887:3;15892:7;15901;15910:8;;15838:82;;;;;;;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;::::1;::::0;;15824:13:::1;::::0;::::1;::::0;::::1;:97::i;:::-;;15766:166;15596:342:::0;;;;;;;:::o;21937:877:95:-;22076:15;;;;22026:18;;22076:15;;22105:14;;;22101:66;;22121:46;:33;:44;:46::i;:::-;22281:60;22298:18;:7;:16;:18::i;:::-;22296:21;;22321:18;:7;:16;:18::i;:::-;22319:21;;639:3:118;607:18;;;;631:19;627:34;;;604:58;;448:222;22281:60:95;22273:68;-1:-1:-1;22503:11:95;;22499:143;;22534:26;;;:93;;22564:63;;;258:35:86;1123:9:105;;1119:27;22534:93:95;;;22499:143;22659:11;;22655:143;;22690:26;;;:93;;22720:63;;;258:35:86;1123:9:105;;1119:27;22690:93:95;;;22655:143;22046:768;21937:877;;;;;:::o;16986:232:72:-;17109:13;;17095:53;;17124:15;:5;2107:3:118;2103:22;;1958:183;17124:15:72;17141:6;17095:13;:53::i;:::-;17158;17172:3;:13;;;17187:15;:5;2303:2:118;2292:28;;2147:189;16026:339:89;16175:4;8814:10;:27;;;;8810:59;;1965:6:::1;16467:29:::0;;:34;16195:164:::1;;16252:96;16302:10;16314:3;16319:7;16328;16337:8;;16266:81;;;;;;;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;::::1;::::0;;16252:13:::1;::::0;::::1;::::0;::::1;:96::i;490:144:92:-:0;613:4;595:16;588:30;490:144::o;640:121::-;739:5;721:16;714:31;640:121::o;1833:122:90:-;1111:7;1893:12;;;1667:18;;1888:60;;1909:39;:22;:39;;;:33;:39::i;5235:154:95:-;5306:27;:4;:25;:27::i;:::-;5356:10;;3290:37:124;3286:51;3339:45;3343:13;3339:45;;;;3283:102;5356:26:95;5343:39;;;-1:-1:-1;5235:154:95:o;9759:615:89:-;9943:4;8814:10;:27;;;;8810:59;;9987:1:::1;9963:6;:21;;;:25;:74;;;;-1:-1:-1::0;1528:7:89::1;16467:29:::0;;:34;;9992:45:::1;9959:409;;;10053:93;10110:10;10122:3;10127:6;10135:8;;10067:78;;;;;;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;::::1;::::0;;10053:13:::1;::::0;::::1;::::0;::::1;:93::i;:::-;;9959:409;;;10192:1;10167:6;:21;;;:26;;:78;;;;-1:-1:-1::0;1665:6:89::1;16467:29:::0;;:34;;10197:48:::1;10163:205;;;10261:96;10321:10;10333:3;10338:6;10346:8;;10275:81;;;;;;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;::::1;::::0;;10261:13:::1;::::0;::::1;::::0;::::1;:96::i;10163:205::-;9759:615:::0;;;;;;:::o;1460:151:98:-;1542:1;1558:6;;;;;;1554:50;;1566:38;:25;:36;:38::i;6410:4400:95:-;6607:21;;;;6656:16;;;;6700;;;;6526:18;;;;6607:21;;6726:32;6656:16;6700;6726:10;:32::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6888:14:95;:19;;6906:1;6888:19;6884:1188;;7002:50;7013:4;7019:9;7030:14;7046:5;7002:10;:50::i;:::-;6927:125;;6948:30;;;6927:125;;;;;7125:49;7136:4;7142:9;7153:14;7169:4;7125:10;:49::i;:::-;7070:104;;7091:30;;;7070:104;;;7071:18;;;7070:104;-1:-1:-1;7279:19:95;;;;;7275:508;;7385:18;;;;7322:27;;28220:1;28209:26;1032:7:103;28300:27:95;;;-1:-1:-1;;28267:27:95;;;;28263:69;1317:6:103;28360:27:95;;;;28420:21;28443:1;28416:29;28472:19;28468:34;7322:82;;7463:19;7430:52;;:5;:30;;;:52;;;7426:159;;;7510:52;:30;7552:9;7510:41;:52::i;:::-;7643:19;7610:52;;:5;:30;;;:52;;;7606:159;;;7690:52;:30;7732:9;7690:41;:52::i;:::-;7300:483;7275:508;7805:18;;7801:120;;;7883:18;;;;7847:55;;:15;;;;7872:9;;7847:24;:55::i;:::-;7942:5;:18;;;7938:120;;;8020:18;;;;7984:55;;:15;;;;8009:9;;7984:24;:55::i;:::-;8105:28;8135;8187:46;8206:4;8212:9;8223;8187:18;:46::i;:::-;8305:12;;8341:11;;;;2503:4:96;2497:11;;2537:4;2528:14;;2521:28;;;;8286:14:95;2585::96;;;2578:33;;;2656:4;2647:14;;2640:33;;;2702:18;;;2790:4;2783;2774:14;;2764:31;-1:-1:-1;2879:14:96;;;2872:25;;;-1:-1:-1;2939:14:96;;;2932:25;;;3014:14;;;;1763:17;;;8286:14:95;;;1763:17:96;;;;;8104:129:95;;-1:-1:-1;8104:129:95;;-1:-1:-1;;8432:75:95;1763:17:96;8448:14:95;8104:129;;8432:15;:75::i;:::-;8371:136;;;;8608:58;8623:20;:9;:18;:20::i;:::-;8645;:9;:18;:20::i;:::-;631:19:118;627:34;639:3;607:18;;;;604:58;;448:222;8608:58:95;8597:69;;8086:595;;;;;8776:1;8759:14;:18;;;8755:255;;;8801:18;;8797:91;;;29012:16;;;;;;;;:10;;;:16;;;;;29005:23;;;;;;;;;;;;;8843:26;8909:5;:18;;;8905:91;;;29012:16;;;;;;;;:10;;;:16;;;;;29005:23;;;;;;;;;;;;;8951:26;6769:2251;9034:14;:19;;9052:1;9034:19;9030:1774;;9084:10;;9069:12;;9146:13;9084:10;1748:11:124;1744:25;1741:1;1730:40;;1607:179;9146:13:95;5144:41:120;;;9108:75:95;;;;9208:9;9201:16;;:4;:16;;;9197:1597;;;9477:259;9513:182;:171;9568:38;9596:9;9568:27;:38::i;:::-;9608;9636:9;9608:27;:38::i;:::-;9648:14;9513:29;:171::i;:::-;:180;:182::i;:::-;639:3:118;607:18;;448:222;9477:259:95;9469:267;;9197:1597;;;9768:9;9761:16;;:4;:16;;;9757:1037;;;9805:346;9841:135;:99;9871:12;9885:38;9913:9;9885:27;:38::i;9841:135::-;9998;:99;10028:38;10056:9;10028:27;:38::i;:::-;10068:12;10082:14;9998:29;:99::i;9805:346::-;10210:14;;;;9797:354;;-1:-1:-1;10187:54:95;;10210:14;;10226;10187:22;:54::i;:::-;10170:14;;;:71;;;;;;;;;;;;;;;9757:1037;;;10520:259;10556:1;10579:182;:171;10634:38;10662:9;10634:27;:38::i;:::-;10674;10702:9;10674:27;:38::i;:::-;10714:14;10579:29;:171::i;10520:259::-;10512:267;;9757:1037;9055:1749;;;9030:1774;6573:4237;;;6410:4400;;;;;:::o;672:396:118:-;731:12;834:3;896:11;;;830;;;;960;871:2;926:17;;;860;;;;988:11;1017:48;1032:15;960:11;1032:13;:15::i;:::-;1049;:4;:13;:15::i;1017:48::-;1010:55;672:396;-1:-1:-1;;;;;672:396:118:o;10471:1558:89:-;10714:24;;10778:27;;;:10;:27;10774:79;;-1:-1:-1;10815:5:89;;-1:-1:-1;1949:1:118;10807:46:89;;10774:79;10878:5;10864:19;;10921:1;10897:6;:21;;;:25;10893:1130;;;1594:7;16467:29;;:34;10938:518;;11057:311;11182:10;11194:3;11199:6;11207:5;11214:11;11227:8;;11111:151;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2186:6;16467:29;;:34;;11288:58;11057:28;;;;:311;:28;:311::i;:::-;11006:380;;11418:23;:11;11432:9;11418:23;:::i;:::-;11404:37;;10938:518;10893:1130;;;1733:6;16467:29;;:34;11486:527;;11608:317;11736:10;11748:3;11753:6;11761:5;11768:11;11781:8;;11662:154;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2268:6;16467:29;;:34;;11842:61;16371:137;11608:317;11557:386;;11975:23;:11;11989:9;11975:23;:::i;:::-;11961:37;;11486:527;10471:1558;;;;;;;;;;:::o;1357:223:85:-;1480:8;1477:1;1470:19;1529:5;1526:1;1515:20;1509:4;1502:34;1559:4;1556:1;1549:15;2915:418;3064:4;3058:11;3094:8;3089:3;3082:21;3151:42;3143:6;3139:55;3132:4;3127:3;3123:14;3116:79;3243:42;3235:6;3231:55;3224:4;3219:3;3215:14;3208:79;3312:4;3307:3;3300:17;5485:1119:89;5561:4;1791:6;16467:29;;:34;;;5703:91;;-1:-1:-1;2037:6:89;16467:29;;:34;;5744:50;5699:109;;;-1:-1:-1;5803:5:89;5796:12;;5699:109;1847:6;16467:29;;:34;;;5822:89;;-1:-1:-1;2107:6:89;16467:29;;:34;;5862:49;5818:107;;;-1:-1:-1;5920:5:89;5913:12;;5818:107;1594:7;16467:29;;:34;;;5939:107;;-1:-1:-1;2186:6:89;16467:29;;:34;;5988:58;5935:158;;;-1:-1:-1;6077:5:89;6070:12;;5935:158;1733:6;16467:29;;:34;;;6119:129;;-1:-1:-1;2268:6:89;16467:29;;:34;;6187:61;6102:169;;;-1:-1:-1;6266:5:89;6259:12;;6102:169;6455:27;;;;:142;;1325:13;6532:38;;:42;;;:64;;-1:-1:-1;552:8:90;6578:16:89;;;1379:24:90;6455:142:89;;6578:18;6455:142;;;-1:-1:-1;6498:16:89;;552:8:90;1379:24;6497:19:89;;6448:149;-1:-1:-1;5485:1119:89:o;1009:257:85:-;1133:8;1130:1;1123:19;1178:42;1172:4;1168:53;1162:4;1155:67;1245:4;1242:1;1235:15;2333:220:90;2394:6;552:8;2471:17;;;1379:24;2467:33;;-1:-1:-1;2499:1:90;;2333:220;-1:-1:-1;2333:220:90:o;2467:33::-;2510:15;:4;:13;;;:15::i;8968:283:89:-;9069:4;8814:10;:27;;;;8810:59;;1397:7:::1;16467:29:::0;;:34;9085:160:::1;;9147:87;9202:10;9214:3;9219:12;9161:72;;;;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;::::1;::::0;;9147:13:::1;::::0;::::1;::::0;::::1;:87::i;4549:434:95:-:0;4669:10;;4643;;5144:41:120;;4669:30:95;4665:80;;4701:44;:31;:42;:44::i;:::-;4763:41;4791:12;4763:27;:41::i;:::-;4756:48;-1:-1:-1;3339:45:124;3343:13;3339:45;;;;2433:13;2429:33;;2686:11;2682:42;;;;;2628:97;3283:102;4881:95:95;;;-1:-1:-1;4549:434:95;;;-1:-1:-1;4549:434:95:o;9343:318:89:-;9471:4;8814:10;:27;;;;8810:59;;1460:7:::1;16467:29:::0;;:34;9491:164:::1;;9552:92;9606:10;9618:3;9623:12;9637:4;9566:77;;;;;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;::::1;;::::0;::::1;::::0;;9552:13:::1;::::0;::::1;::::0;::::1;:92::i;4989:178:95:-:0;5072:27;:4;:25;:27::i;:::-;5122:10;;2949:43:124;2945:57;3024;3028:19;3024:57;;;;2921:178;5122:38:95;2747:368:124;722:123:84;827:1;812:13;805:24;722:123::o;4351:276:120:-;4416:7;4439:22;;;4435:186;;-1:-1:-1;4486:21:120;;4351:276;-1:-1:-1;4351:276:120:o;4435:186::-;4545:65;;;;;4604:4;4545:65;;;12632:74:262;4545:50:120;;;;;;12605:18:262;;4545:65:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;851:265:84:-;1012:42;1002:8;998:57;983:13;976:80;1094:5;1076:16;1069:31;851:265;;:::o;12116:1967:89:-;12354:22;;;;12254:19;;12390:27;;;:10;:27;12386:104;;830:1:119;;-1:-1:-1;12419:71:89;;12386:104;1791:6;16467:29;;:34;12501:1576;;12557:19;12579:86;12588:4;12629:10;12641:3;12646:6;12654:8;;12594:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;12579:8;:86::i;:::-;12557:108;;12783:6;:13;12800:2;12783:19;12779:66;;12804:41;:28;:39;:41::i;:::-;13119:7;;;;:20;;552:8:90;1379:24;13115:61:89;;894:4:94;882:17;;876:24;13143:33:89;;13115:61;2037:6;16467:29;;:34;13262:805;;1175:4:94;1163:17;;1157:24;13336:60:89;;13505:25;13533:30;:10;2107:3:118;2103:22;;1958:183;13533:30:89;13505:58;;13725:18;:23;;13747:1;13725:23;13721:332;;13772:15;13790:16;;13828:34;;;;;13790:12;13828:34;:::i;:::-;;;13888:10;:48;;13935:1;13920:12;:16;13888:48;;;13916:1;13901:12;:16;13888:48;13884:151;;;13964:48;:35;:46;:48::i;:::-;13750:303;13721:332;13318:749;13262:805;12543:1534;12501:1576;12116:1967;;;;;;;;;:::o;11194:792:72:-;11334:12;;;;;11470:17;:4;11480:6;11470:9;:17::i;:::-;11362:125;;;;;;;;11565:1;11546:16;:20;11542:78;;;2977:29:73;;;;;;;:19;:29;;;;;:39;;;;;;11568:52:72;11769:10;11753:2;11735:221;11793:15;:5;2107:3:118;2103:22;;1958:183;11793:15:72;11822;:5;2303:2:118;2292:28;;2147:189;11822:15:72;11851:19;;11884:16;;;;;11914:11;;;;;11735:221;;25697:2:262;25686:22;;;25668:41;;25745:22;;;;25725:18;;;25718:50;25816:42;25804:55;;;25784:18;;;25777:83;25908:34;25896:47;25891:2;25876:18;;25869:75;25992:1;25981:21;;;;25975:3;25960:19;;25953:50;26052:8;26040:21;;26034:3;26019:19;;26012:50;25655:3;25640:19;11735:221:72;;;;;;;-1:-1:-1;11974:5:72;;11194:792;-1:-1:-1;;;;;;;11194:792:72:o;14169:1338:89:-;14406:12;;14448:27;;;:10;:27;14444:83;;-1:-1:-1;14485:9:89;;-1:-1:-1;1949:1:118;14477:50:89;;14444:83;14538:25;14566:40;:20;2107:3:118;2103:22;;1958:183;14566:40:89;14538:68;;14616:27;14646:42;:20;2303:2:118;2292:28;;2147:189;14646:42:89;14616:72;-1:-1:-1;1847:6:89;16467:29;;:34;14699:308;;14778:218;:207;14858:10;14870:3;14875:6;14883:9;14894:8;;14824:80;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2107:6;16467:29;;:34;;14778:28;;;;:207;:28;:207::i;:218::-;14754:242;;;;:::i;:::-;;;14699:308;15017:22;15053:20;:25;;15077:1;15053:25;;:52;;;;15082:18;:23;;15104:1;15082:23;;15053:52;15049:413;;;15164:17;;15134:22;;;;15164:17;-1:-1:-1;15134:47:89;;;;15133:199;;631:19:118;627:34;;639:3;607:18;;;604:58;15133:199:89;;;631:19:118;627:34;;639:3;607:18;;;604:58;15201:56:89;15121:211;;15430:21;:9;15442;15430:21;:::i;:::-;15418:33;;15049:413;15479:9;;15490;;-1:-1:-1;14169:1338:89;;-1:-1:-1;;;;;;;;;14169:1338:89:o;530:425:68:-;627:10;651:14;;;;;;;;:43;;-1:-1:-1;670:16:68;;;;;;;;:10;:16;;;;;;;;:24;;;;;;;;;;;;669:25;651:43;647:269;;;736:15;;;;710:23;736:15;;;:9;:15;;;;;;;;:23;;;;;;;;;;;:27;;;;;;;800:17;781:36;;777:129;;867:24;885:6;867:15;:24;:::i;:::-;837:15;;;;;;;;:9;:15;;;;;;;;:23;;;;;;;;;;;:27;;;;;;:54;777:129;696:220;647:269;925:23;931:4;937:2;941:6;925:5;:23::i;1201:402:83:-;608:42;596:55;;;1304:15;586:66;;;676:57;;;672:2;665:69;772:2;759:16;;1459:15;;;1304;1500:16;;;;;1459:15;1500:16;:::i;:::-;1493:23;;1582:4;1572:8;1565:22;1551:46;1201:402;;;;;;:::o;1231:226:93:-;1329:24;1323:31;1387:1;1380:5;1376:13;1367:22;;1435:5;1409:24;1402:39;;1231:226::o;723:::-;821:24;815:31;879:1;872:5;868:13;859:22;;927:5;901:24;894:39;;723:226::o;3508:1663:85:-;3953:4;3947:11;3710:21;4094:33;;;4186:42;4163:66;;4156:4;4147:14;;4140:90;4330:66;4299:98;;4276:4;4267:14;;4243:168;4483:4;4476;4467:14;;4460:28;3919:2;3909;3891:16;3887:25;3883:34;;;3879:43;4569:4;4565:26;;4558:4;4549:14;;4542:50;4662:16;4655:4;4646:14;;4639:40;3710:21;;4755:16;-1:-1:-1;4745:4:85;4736:14;;4721:51;4869:4;4850:15;4844:4;4840:26;4835:3;4831:36;4824:50;5022:66;5003:17;4999:90;4964:15;4958:4;4954:26;4949:3;4945:36;4921:182;5138:15;5132:4;5128:26;5123:3;5116:39;6780:1276:89;6848:19;6879:12;7005:1;7002;6995:4;6989:11;6982:4;6976;6972:15;6969:1;6963:4;6956:5;6951:56;6940:67;;7112:7;7107:102;;7121:88;7164:4;7171:12;7178:4;7171:12;:::i;:::-;7185:23;7121:34;:88::i;:::-;7406:4;7400:11;7390:21;;7574:4;7570:9;7563:4;7545:16;7541:27;7537:43;7529:6;7525:56;7519:4;7512:70;7648:16;7640:6;7633:32;7757:16;7754:1;7747:4;7739:6;7735:17;7720:54;7930:2;7914:6;:13;:18;:68;;;-1:-1:-1;632:4:94;620:17;;614:24;7936:46:89;;:22;:6;632:4:94;620:17;614:24;;394:260;7936:22:89;:46;;;;7914:68;7910:140;;;7998:41;:28;:39;:41::i;:::-;6869:1187;6780:1276;;;;:::o;4182:361:95:-;4276:9;4263:22;;:9;:22;;;4259:85;;4287:57;:24;4323:9;4334;4287:35;:57::i;:::-;1032:7:103;4358:29:95;;;;;4354:86;;;4389:51;:29;4430:9;4389:40;:51::i;:::-;1317:6:103;4454:29:95;;;;;4450:86;;;4485:51;:29;4526:9;4485:40;:51::i;25241:1930::-;25443:16;;;;25362:12;25443:16;;;:10;;;:16;;;;;25501:19;;25362:12;;25443:16;25501:19;;;;25558:17;;;;;25608:60;25501:19;25653:14;25608:22;:60::i;:::-;25720:25;25690:24;;;;25720:25;;;;;25689:57;;;;;;-1:-1:-1;25586:82:95;;-1:-1:-1;25744:1:95;25761:25;25757:357;;25926:10;;1748:11:124;1744:25;1741:1;1730:40;25918:25:95;;:4;:25;;;25914:190;;25992:25;;;;;25963:26;;;:54;26064:25;;;;;26035:26;;;:54;25914:190;26322:19;26344:5;:81;;26390:35;26411:14;26390:18;:35;:::i;:::-;26344:81;;;26352:35;26373:14;26352:18;:35;:::i;:::-;26322:103;;27110:12;27105:3;27101:22;26923:34;26902:19;26898:60;26780:361;26678:9;26654:501;26460:705;;;;25241:1930;;;;;;;:::o;2108:1410:102:-;2567:1;2556:19;;;;2603:26;2691:23;;;2688:307;;;2750:4;2744:11;2784:10;2779:3;2772:23;2879:4;2872;2867:3;2863:14;2856:28;2924:11;2917:4;2912:3;2908:14;2901:35;2976:4;2969;2964:3;2960:14;2953:28;2688:307;3027:11;3021:4;3016:23;3008:31;;3172:4;3169:1;3165:12;3162:1;3155:23;3204:9;3198:4;3191:23;3338:4;3335:1;3325:18;3498:1;3491:4;3485;3481:15;3477:23;3470:4;3464:11;3460:41;3454:4;3447:55;;2108:1410;;;:::o;23300:1203:95:-;23528:21;;;;23429:28;23528:21;;;:10;;;:21;;;;;;23584;;;;;;;;23635:10;;23429:28;;;;23528:21;;23584;;1748:11:124;1744:25;;;;1730:40;;;23691:23:95;;23687:800;;;23787:5;:27;;;23757:5;:27;;;:57;23734:80;;23885:5;:27;;;23855:5;:27;;;:57;23832:80;;23687:800;;;23952:9;23937:24;;:11;:24;;;23933:554;;24034:5;:27;;;24004:5;:27;;;:57;23981:80;;24132:5;:27;;;24102:5;:27;;;:57;24079:80;;23933:554;;;24299:5;:27;;;24269:5;:27;;;24241:4;:25;;;:55;:85;24198:128;;24445:5;:27;;;24415:5;:27;;;24387:4;:25;;;:55;:85;24344:128;;23933:554;23493:1010;;;23300:1203;;;;;;:::o;3702:1108:96:-;3945:14;;3877:17;;;;3945:14;;3974:19;;;;;;3970:270;;4069:9;:14;;4082:1;4069:14;4065:67;;4085:47;:34;:45;:47::i;:::-;3970:270;;;4180:49;4203:9;4214:14;4180:22;:49::i;:::-;4163:66;;;;;;;;;;;;3970:270;4395:100;4434:4;:29;;;4411:20;:52;4465:9;4395:100;;258:35:86;4395:15:96;:100::i;:::-;4367:128;;4537:100;4576:4;:29;;;4553:20;:52;4607:9;4537:100;;258:35:86;4537:15:96;:100::i;:::-;4689:29;;;:52;;;;-1:-1:-1;;4751:29:96;;;;:52;3702:1108;;;-1:-1:-1;3702:1108:96:o;3149:4018:103:-;3359:1;3348:19;3212:20;3458:3;3454:14;;;3726:15;;;3716:26;1317:6;3774:35;;3770:78;;;3811:37;:20;3843:4;3811:31;:37::i;:::-;4456:52;4523:3;4510:17;;4452:76;4460:11;4435:94;4570:3;4560:13;;:18;4556:83;;4597:34;4589:42;4636:3;4588:51;4556:83;4667:3;4657:13;;:18;4653:83;;4694:34;4686:42;4733:3;4685:51;4653:83;4764:3;4754:13;;:18;4750:83;;4791:34;4783:42;4830:3;4782:51;4750:83;4861:4;4851:14;;:19;4847:84;;4889:34;4881:42;4928:3;4880:51;4847:84;4959:4;4949:14;;:19;4945:84;;4987:34;4979:42;5026:3;4978:51;4945:84;5057:4;5047:14;;:19;5043:84;;5085:34;5077:42;5124:3;5076:51;5043:84;5155:4;5145:14;;:19;5141:84;;5183:34;5175:42;5222:3;5174:51;5141:84;5253:5;5243:15;;:20;5239:85;;5282:34;5274:42;5321:3;5273:51;5239:85;5352:5;5342:15;;:20;5338:85;;5381:34;5373:42;5420:3;5372:51;5338:85;5451:5;5441:15;;:20;5437:85;;5480:34;5472:42;5519:3;5471:51;5437:85;5550:5;5540:15;;:20;5536:85;;5579:34;5571:42;5618:3;5570:51;5536:85;5649:6;5639:16;;:21;5635:86;;5679:34;5671:42;5718:3;5670:51;5635:86;5749:6;5739:16;;:21;5735:86;;5779:34;5771:42;5818:3;5770:51;5735:86;5849:6;5839:16;;:21;5835:86;;5879:34;5871:42;5918:3;5870:51;5835:86;5949:6;5939:16;;:21;5935:86;;5979:34;5971:42;6018:3;5970:51;5935:86;6049:7;6039:17;;:22;6035:86;;6080:33;6072:41;6118:3;6071:50;6035:86;6149:7;6139:17;;:22;6135:85;;6180:32;6172:40;6217:3;6171:49;6135:85;6248:7;6238:17;;:22;6234:83;;6279:30;6271:38;6314:3;6270:47;6234:83;6345:7;6335:17;;:22;6331:78;;6376:25;6368:33;6406:3;6367:42;6331:78;6548:1;6542:4;6538:12;6535:47;;;6566:6;6562:18;6535:47;7117:18;7106:30;7125:2;7098:39;;3149:4018;-1:-1:-1;;;3149:4018:103:o;12876:424:99:-;13012:6;13077:1;13065:9;:13;;;:218;;13201:82;:71;13217:13;13232;13255:9;13267:4;13201:15;:71::i;:::-;:80;:82::i;:::-;13200:83;;13065:218;;;13097:84;:73;13113:13;13128;13152:9;13151:10;;13164:5;13097:15;:73::i;13649:424::-;13785:6;13850:1;13838:9;:13;;;:218;;13974:82;:71;13990:13;14005;14028:9;14040:4;13974:15;:71::i;13838:218::-;13870:84;:73;13886:13;13901;13925:9;13924:10;;13937:5;13870:15;:73::i;369:370:91:-;507:34;500:42;;555:2;544:17;;;496:66;582:3;578:11;;;575:148;;;663:10;660:1;653:21;704:4;698;691:18;8196:485:89;8297:6;8315:19;8337:20;8346:4;8352;8337:8;:20::i;:::-;8315:42;;8450:11;8445:26;;8470:1;8463:8;;;;;8445:26;8570:6;:13;8587:2;8570:19;8566:66;;8591:41;:28;:39;:41::i;:::-;1175:4:94;1163:17;1157:24;;8642:32:89;-1:-1:-1;;;;8196:485:89:o;1070:396:118:-;1129:12;1232:3;1294:11;;;1228;;;;1358;1269:2;1324:17;;;1258;;;;1386:11;1415:48;1430:15;1358:11;1430:13;:15::i;7627:4752:103:-;7700:10;2282:66;8183:29;;;8182:79;;;8178:168;;;8281:50;:25;8318:12;8281:36;:50::i;:::-;8376:27;8401:2;8376:27;;;;;8360:13;8463:29;8376:27;8463:26;:29::i;:::-;8449:43;;;;8518:3;8511;:10;8507:83;;8543:3;8537;:9;8527:5;:20;;8523:24;;8507:83;;;8586:3;8580;:9;8570:5;:20;;8566:24;;8507:83;8717:9;;;8712:3;8708:19;;;8753:11;;;;8833:9;;;;8926;;8917:19;;;8962:11;;;9042:9;9135;;9126:19;;;9171:11;;;9251:9;9344;;9335:19;;;9380:11;;;9460:9;9553;;9544:19;;;9589:11;;;9669:9;9762;;9753:19;;;9798:11;;;9878:9;9971;;9962:19;;;10007:11;;;10087:9;10180;;10171:19;;;10216:11;;;10296:9;10389;;10380:19;;;10425:11;;;10505:9;10598;;10589:19;;;10634:11;;;10714:9;10807;;10798:19;;;10843:11;;;10923:9;11016;;11007:19;;;11052:11;;;11132:9;11225;;11216:19;;;11261:11;;;;11341:9;;;;11434;;11425:19;;;;;8717:9;8621:17;;;8643:2;8620:25;8800:10;;;;;;;8790:21;9009:10;;;;;;;8999:21;;;;9218:10;;;;;;;9208:21;;;;9427:10;;;;;;;9417:21;;;;9636:10;;;;;;;9626:21;;;;9845:10;;;;;;;9835:21;;;;10054:10;;;;;;;10044:21;10263:10;;;;;;;10253:21;10472:10;;;;;;;10462:21;10681:10;;;;;;;10671:21;10890:10;;;;;;;10880:21;11099:10;;;;;;;11089:21;11308:10;;;;;;;11298:21;11517:10;;;;;;;11507:21;11587:24;11579:32;;11788:53;;;8635:3;11787:62;;;;12201:39;12185:55;;12184:64;;12271:17;;;;;;;;;:91;;12331:12;12301:42;;:26;12320:6;12301:18;:26::i;:::-;:42;;;;:61;;12355:7;12271:91;;12301:61;12346:6;12271:91;;;12291:7;12271:91;12264:98;7627:4752;-1:-1:-1;;;;;;;;;7627:4752:103:o;12231:9620:95:-;-1:-1:-1;;;;;;;;12325:22:95;-1:-1:-1;;;;;;;;;;;;;;;12325:22:95;;;;12450:10;;12488:17;;;;12431:16;12488:17;12550:102;;863:10:97;;;;;;12550:102:95;;;750:5:97;1959:19:124;1955:33;;;743:12:97;12563:43:95;12814:22;;5144:41:120;;;13015:47:95;;12516:136;;;;;;-1:-1:-1;12780:31:95;1748:11:124;1744:25;;;1741:1;1730:40;13114:31:95;;:11;;;:31;13221:14;;;;;;13202:16;;;:33;13451:20;;;;-1:-1:-1;;819:8:90;2836:24;13451:141:95;;2160:13:124;2156:27;;;2142:12;2138:46;13451:141:95;;;13503:52;:6;:20;;;:50;;;:52::i;:::-;13436:156;-1:-1:-1;13617:16:95;;:70;;2076:16:97;1921:5;1911:16;;1960:8;1949:20;;1999:16;;;2061:32;;;;2043:16;;2039:55;13617:70:95;;;13636:5;13617:70;13607:80;;13422:276;563:3:101;13847:7:95;:32;;;13843:200;;13929:22;;13954:1;-1:-1:-1;13925:108:95;;;13975:43;:30;:41;:43::i;:::-;14251:22;;;:27;14247:92;;1949:1:118;14320::95;14280:59;;;;;;;;;;;14247:92;14354:10;14350:1021;;;14384:24;;;;5144:41:120;;;;14384:53:95;;;14380:190;;14457:98;5144:41:120;;;14503:25:95;14530:24;;;;14457:34;;:98;:45;:98::i;:::-;1862:10:103;14818:51:95;;:6;:24;;;:51;;;14814:157;;14931:24;;;;14889:67;;:30;;:41;:67::i;:::-;14350:1021;;;15005:24;;;;5144:41:120;;;;15005:53:95;;;15001:190;;15078:98;5144:41:120;;;15124:25:95;5069:123:120;15078:98:95;2042:49:103;15208:51:95;;:6;:24;;;:51;;;15204:157;;15321:24;;;;15279:67;;:30;;:41;:67::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15446:10:95;:66;;15487:4;:25;;;15446:66;;;15459:4;:25;;;15446:66;15419:24;;;:93;15639:5244;15648:29;;;:80;;;15704:6;:24;;;15681:47;;:6;:19;;;:47;;;15648:80;15639:5244;;15770:19;;15745:44;;;;15905:11;;;;;15918:18;;;;15856:93;;:15;;;;15938:10;15856:48;:93::i;:::-;15804:145;;15820:16;;;15804:145;;;15805:13;;;15804:145;;;1032:7:103;-1:-1:-1;16077:106:95;;1032:7:103;16135:13:95;;;:33;16077:106;1317:6:103;16200:34:95;;:4;:13;;;:34;;;16196:106;;1317:6:103;16254:13:95;;;:33;16196:106;16387:42;16415:4;:13;;;16387:27;:42::i;:::-;16363:66;;;;:21;;;;:66;;;16676:19;;16776:24;;;;16634:282;;16676:19;;1921:66:101;;2113:40;;;-1:-1:-1;;;2080:3:101;2064:20;;2019:66;2211:25;;;;2188:49;16819:6:95;:16;;;16853:24;16895:7;16634:24;:282::i;:::-;16616:14;;;16563:353;16600:14;;;16563:353;16585:13;;;16563:353;;;;;16965:22;;16564:19;-1:-1:-1;16961:568:95;;;17071:25;:4;:14;;;:23;:25::i;:::-;17043:53;;;;17152:43;17169:4;:14;;;17153:4;:13;;;:30;;;;:::i;17152:43::-;17132:63;;;;:::i;:::-;;;16961:568;;;17390:43;17407:4;:14;;;17391:4;:13;;;:30;17390:41;:43::i;:::-;17362:71;;;;17489:25;:4;:14;;;:23;:25::i;:::-;17469:45;;;;:::i;:::-;;;16961:568;17664:15;;17660:951;;18143:13;18171:11;18160:7;:22;;;18159:242;;633:9:97;18352:11:95;18334:4;:14;;;18318:4;:13;;;:30;18317:46;:84;;;;;:::i;:::-;;18159:242;;;18210:4;:14;;;18159:242;18508:14;;;:23;;;;;;;18553:25;;;;;-1:-1:-1;17660:951:95;18670:16;;;;:20;;;18666:382;;18938:77;18962:4;:14;;;258:35:86;18998:6:95;:16;;;18938:77;;1123:9:105;;1119:27;;956:206;18938:77:95;18886:24;;;:129;;;;;;;18666:382;19511:4;:21;;;19488:44;;:6;:19;;;:44;;;19484:1389;;19627:4;:16;;;19623:835;;;19668:28;19698;19730:10;:170;;19848:4;:25;;;19875:4;:24;;;19730:170;;;19768:4;:24;;;19794:4;:25;;;19730:170;19667:233;;;;19922:19;19968:79;19983:4;19989;:13;;;20004:20;20026;29769:16;;;;29686:19;29769:16;;;:10;;;;:16;;;;;;29851:26;;;;;29828:49;;;29799:78;;;29943:26;;;;;29920:49;;;29891:78;;;29998:17;;;;;;;29541:491;19968:79;19922:125;;20281:10;20277:44;;;20308:13;;20277:44;20385:54;20408:6;:16;;;20426:12;20385:22;:54::i;:::-;20366:73;;:16;;;:73;-1:-1:-1;;;19623:835:95;20522:10;:46;;20555:4;:13;;;20522:46;;;20551:1;20535:4;:13;;;:17;20522:46;20508:60;;:11;;;:60;15639:5244;;19484:1389;20634:22;;20611:19;;:45;;;;;;;20607:266;;20838:19;;20810:48;;:27;:48::i;20607:266::-;15639:5244;;;20954:19;;20925:11;;;;20906:68;;20954:19;20906:31;;:10;;2686:11:124;2682:42;;;2635:35;2631:49;;;;2628:97;;2485:256;20906:31:95;2399:18:124;2395:32;2433:13;2429:33;;;2392:71;;2231:248;20906:68:95;20893:81;;21049:16;;;;21031:14;;;;:34;:14;;;:34;;;21027:73;;21084:16;;;;21067:14;;;:33;;;;;;;;;;;;;;21027:73;21152:10;21147:177;;21206:24;;;;21178:25;;;:52;21147:177;;;21289:24;;;;21261:25;;;:52;21147:177;21420:22;;21445:1;-1:-1:-1;21405:42:95;;;;21401:434;;21479:145;21515:27;:16;:25;:27::i;:::-;21544:62;21570:24;21545:6;:22;;;:49;21544:60;:62::i;21479:145::-;21467:157;;21401:434;;;21675:145;21711:62;21737:24;21712:6;:22;;;:49;21711:60;:62::i;:::-;21775:27;:16;:25;:27::i;21675:145::-;21663:157;;21401:434;12421:9430;;;;;;12231:9620;;;;;;;;:::o;3302:192:67:-;3388:17;;;;;;;:9;:17;;;;;;;;:21;;;;;;;;:31;;3413:6;;3388:17;:31;;3413:6;;3388:31;:::i;:::-;;;;-1:-1:-1;;3435:52:67;;;3444:10;16544:74:262;;16649:2;16634:18;;16627:34;;;3476:2:67;;3472:1;;3435:52;;;;;;16517:18:262;3435:52:67;16370:297:262;2003:346:85;2148:4;2142:11;2178:8;2173:3;2166:21;2237:6;2234:1;2223:21;2216:4;2211:3;2207:14;2200:45;2295:6;2292:1;2281:21;2274:4;2269:3;2265:14;2258:45;2328:4;2323:3;2316:17;741:4141:88;823:14;1212:5;;;823:14;1413:6;1216:1;1212;1400:20;1473:5;1469:2;1466:13;1458:5;1454:2;1450:14;1446:34;1437:43;;;1633:5;1619:11;:19;1611:28;;;;;;1720:5;1729:1;1720:10;1716:177;;-1:-1:-1;1807:23:88;;;;-1:-1:-1;1865:13:88;;1716:177;2193:17;2293:11;2290:1;2287;2280:25;2701:12;2717:15;;;2716:31;;2869:22;;;;;3776:1;3757;:15;;3756:21;;4019:17;;;4015:21;;4008:28;4081:17;;;4077:21;;4070:28;4144:17;;;4140:21;;4133:28;4207:17;;;4203:21;;4196:28;4270:17;;;4266:21;;4259:28;4334:17;;;4330:21;;;4323:28;3313:12;;;;3309:23;;;3334:1;3305:31;2454:20;;;2443:32;;;3372:12;;;;2501:21;;;;3029:16;;;;3363:21;;;;4827:11;;;;;-1:-1:-1;;741:4141:88;;;;;:::o;9398:1050:99:-;9549:7;9616:13;9600:29;;:13;:29;;;9596:98;;;9665:13;;9680;9596:98;9855:42;9840:13;9836:62;9826:205;;9932:10;9929:1;9922:21;10008:4;10002;9995:18;9826:205;10080:45;295:2:87;10080:45:99;;;;10139:50;10160:29;;;10139:50;10211:7;:220;;10418:13;10361:70;;:54;10377:10;10389;10401:13;10361:54;;:15;:54::i;:::-;:70;;;;;:::i;:::-;;10211:220;;;10237:105;10262:64;10288:10;10300;10312:13;10262:64;;:25;:64::i;:::-;10328:13;10237:105;;606:9:105;;;620;;617:16;;602:32;;469:181;10237:105:99;10204:227;9398:1050;-1:-1:-1;;;;;;;9398:1050:99:o;1776:151:98:-;1859:1;1828:8;1875:5;;1871:49;;;1882:38;:25;:36;:38::i;11589:938:99:-;11740:15;10725:42;10718:50;;;10666;;;10662:107;10849:3;10845:14;;;11099:15;;;11089:26;335:27:87;11907:18:99;;;12323:51;11907:18;11089:26;335:27:87;12323:15:99;:51::i;:::-;12313:61;;12502:7;12498:1;12484:11;12473:9;12461:10;12454:42;12451:49;12447:63;12438:7;12434:77;12423:88;;12409:112;;;11589:938;;;;;;:::o;653:664:82:-;715:7;746:1;742;:5;734:14;;;;;;-1:-1:-1;1233:66:82;1158:4;1179:34;813;810:41;-1:-1:-1;807:1:82;803:49;906:9;;;886:18;883:33;880:1;876:41;870:48;964:9;;;952:10;949:25;946:1;942:33;936:40;1018:9;;;1010:6;1007:21;1004:1;1000:29;994:36;1070:9;;;1064:4;1061:19;1058:1;1054:27;1048:34;1168:9;;;1164:50;1154:61;1149:151;1143:158;;653:664::o;3434:159:90:-;975:8;3147:27;;3572:14;3147:27;3572:12;:14::i;4256:2007:102:-;4440:10;;904:1;940:26;;;893:19;;;;1187:23;;;-1:-1:-1;;1034:23:102;;;1009:223;4565:1682;;;;1789:1;1778:19;;;1775:1;1771:27;4839:13;;;;4593;4839;;;;;;;;;;;4748:17;1831:4;1821:15;;;4770:33;;;;4748:56;;;;4839:20;;;5014:11;;;;-1:-1:-1;1821:15:102;;4748:56;5014:11;5164:194;;5347:11;5335:6;5328:14;;5309:10;:34;5308:50;5164:194;;;5274:11;5234:34;5261:6;5234:26;:34::i;:::-;5225:6;:43;5218:51;;5199:10;:71;5198:87;5164:194;5157:201;;4574:799;;;;4565:1682;;;5539:12;;;;1789:1;1778:19;;;1775:1;1771:27;5702:13;;;5499;5702;;;;;;;;;;;5649:17;1831:4;1821:15;;5650:11;;;5649:17;5647:20;5702;;;5869:11;;;;-1:-1:-1;5539:12:102;;1771:27;;5869:11;6019:213;;6221:11;6209:6;6191:15;:24;6184:32;;6165:10;:52;6164:68;6019:213;;;6130:11;6118:6;6080:35;6108:6;6080:27;:35::i;:::-;:44;6073:52;;6054:10;:72;6053:88;6019:213;6012:220;;5379:868;;;;4565:1682;4480:1777;4256:2007;;;;;;;:::o;3514:3451:101:-;3724:24;;;;3840:26;;;3923:41;;;;;;;;;3993:19;;;4027:2922;;;;4058:30;4111:81;4136:15;4135:16;;4169:8;563:3;4154:23;563:3;4111:15;:81::i;:::-;4058:134;;4221:10;:230;;4364:87;4394:19;4415:18;4435:9;4446:4;4364:29;:87::i;:::-;4221:230;;;4254:87;4284:18;4304:19;4325:9;4336:4;4254:29;:87::i;:::-;4210:241;;4499:8;4473:22;:34;4469:969;;4614:18;4595:37;;563:3;4666:8;:24;:256;;4852:70;4878:8;4888;4913;563:3;4898:23;4852:25;:70::i;:::-;4666:256;;;4717:8;4666:256;4654:268;;4469:969;;;5032:22;5021:33;;5095:153;5160:19;5181:9;5192:22;5216:10;5095:39;:153::i;:::-;5076:172;;5411:8;5392:15;5391:16;;5383:36;5371:48;;4469:969;5467:10;:228;;5609:86;5639:19;5660:16;5678:9;5689:5;5609:29;:86::i;:::-;5467:228;;;5500:86;5530:16;5548:19;5569:9;5580:5;5500:29;:86::i;:::-;5455:240;;4040:1670;4027:2922;;;5746:10;:232;;5890:88;5920:19;5941:18;5961:9;5972:5;5890:29;:88::i;:::-;5746:232;;;5779:88;5809:18;5829:19;5850:9;5861:5;5779:29;:88::i;:::-;5734:244;;6028:9;6008:15;6000:37;5996:516;;6145:18;6126:37;;5996:516;;;6317:15;6297:36;;6398:95;6439:19;6460:9;6471;6482:10;6398:40;:95::i;:::-;6355:138;;5996:516;6540:10;:226;;6681:85;6711:19;6732:16;6750:9;6761:4;6681:29;:85::i;:::-;6540:226;;;6573:85;6603:16;6621:19;6642:9;6653:4;6573:29;:85::i;:::-;6529:237;;6864:70;6890:8;6900;6925;563:3;6910:23;6864:25;:70::i;:::-;6852:82;;4027:2922;3816:3143;;;3514:3451;;;;;;;;;;:::o;5164:296:88:-;5256:14;5315:25;5322:1;5325;5328:11;5315:6;:25::i;:::-;5306:34;;5371:11;5358:25;;;;;:::i;:::-;5368:1;5365;5358:25;:30;5354:90;;5416:8;;:12;5408:21;;;;;1659:947:82;1722:7;1753:1;1749;:5;1741:14;;;;;;-1:-1:-1;2522:66:82;1871:1;1867:9;;;1860:17;;;2105:215;2251:66;2125:108;2164:66;2141:90;;2125:108;;;2121:197;2105:215;;;2487:9;;;2475:10;2471:26;2499:4;2467:37;2462:127;;;;2456:134;;1659:947::o;6460:909:99:-;6614:7;6898:34;6887:9;6883:50;6876:58;6814:42;6804:8;6800:57;6793:65;6773:175;6770:309;;;6977:10;6974:1;6967:21;7060:4;7054;7047:18;6770:309;7172:10;:190;;7286:76;7326:8;7336:9;7347:8;7357:4;7286:39;:76::i;:::-;7172:190;;;7197:74;7235:8;7245:9;7256:8;7266:4;7197:37;:74::i;7938:909::-;8094:7;8378:34;8367:9;8363:50;8356:58;8294:42;8284:8;8280:57;8273:65;8253:175;8250:309;;;8457:10;8454:1;8447:21;8540:4;8534;8527:18;8250:309;8646:10;:194;;8764:76;8802:8;8812:9;8823;8834:5;8764:37;:76::i;8646:194::-;8671:78;8711:8;8721:9;8732;8743:5;4438:1450;4597:7;4778:3;4774:1108;;;4797:16;4844:17;4834:27;;;:172;;4954:52;4970:6;335:27:87;4996:9:99;4954:52;;:15;:52::i;:::-;4834:172;;;4884:47;;;;295:2:87;4885:33:99;;;4884:47;:::i;:::-;4797:223;-1:-1:-1;5042:42:99;5043:28;4797:223;5043:17;;;:28;:::i;:::-;5042:40;:42::i;:::-;5035:49;;;;;4774:1108;5115:16;5162:17;5152:27;;;:205;;5295:62;5321:6;335:27:87;5347:9:99;5295:62;;:25;:62::i;:::-;5152:205;;;5202:70;295:2:87;5227:33:99;;;5202:70;;;606:9:105;;;620;;617:16;;602:32;;469:181;5202:70:99;5115:256;;5583:8;5538:42;5528:8;5524:57;5521:71;5511:220;;5626:10;5623:1;5616:21;5708:4;5702;5695:18;5511:220;5837:19;;;;;-1:-1:-1;5822:35:99;;1535:2065;1692:7;1831:6;1841:1;1831:11;1827:32;;-1:-1:-1;1851:8:99;1844:15;;1827:32;1890:45;295:2:87;1890:45:99;;;;1946:1648;;;;2015:17;;;;;;;:6;:17;:6;2054:16;;;;:::i;:::-;;:28;2050:345;;2128:20;;;2174:25;;;2170:207;;2293:60;2319:10;2331:8;2293:60;;2341:11;2293:25;:60::i;:::-;2278:76;;;;;;;2170:207;2084:311;2050:345;-1:-1:-1;2488:70:99;2513:10;2551:6;2526:21;;;;2513:10;2526:21;:::i;:::-;2525:32;;;;:::i;:::-;606:9:105;;;620;;617:16;;602:32;;469:181;1946:1648:99;2636:17;;;;;;;3069:20;;;3066:83;3179:23;;;3033:195;2998:397;;3287:10;3284:1;3277:21;3368:4;3362;3355:18;2998:397;3452:20;;;3497:72;:60;3452:10;3497:60;;;3452:20;3497:25;:60::i;460:155:98:-;546:1;562:6;;;;;558:50;;570:38;:25;:36;:38::i;14:154:262:-;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:367;241:6;249;302:2;290:9;281:7;277:23;273:32;270:52;;;318:1;315;308:12;270:52;357:9;344:23;376:31;401:5;376:31;:::i;:::-;426:5;504:2;489:18;;;;476:32;;-1:-1:-1;;;173:367:262:o;727:332::-;785:6;838:2;826:9;817:7;813:23;809:32;806:52;;;854:1;851;844:12;806:52;893:9;880:23;943:66;936:5;932:78;925:5;922:89;912:117;;1025:1;1022;1015:12;1256:487;1333:6;1341;1349;1402:2;1390:9;1381:7;1377:23;1373:32;1370:52;;;1418:1;1415;1408:12;1370:52;1457:9;1444:23;1476:31;1501:5;1476:31;:::i;:::-;1526:5;1604:2;1589:18;;1576:32;;-1:-1:-1;1707:2:262;1692:18;;;1679:32;;1256:487;-1:-1:-1;;;1256:487:262:o;1748:538::-;1855:6;1863;1871;1924:2;1912:9;1903:7;1899:23;1895:32;1892:52;;;1940:1;1937;1930:12;1892:52;1979:9;1966:23;1998:31;2023:5;1998:31;:::i;:::-;2048:5;-1:-1:-1;2105:2:262;2090:18;;2077:32;2118:33;2077:32;2118:33;:::i;:::-;1748:538;;2170:7;;-1:-1:-1;;;2250:2:262;2235:18;;;;2222:32;;1748:538::o;2291:226::-;2350:6;2403:2;2391:9;2382:7;2378:23;2374:32;2371:52;;;2419:1;2416;2409:12;2371:52;-1:-1:-1;2464:23:262;;2291:226;-1:-1:-1;2291:226:262:o;2704:184::-;2756:77;2753:1;2746:88;2853:4;2850:1;2843:15;2877:4;2874:1;2867:15;2893:253;2965:2;2959:9;3007:4;2995:17;;3042:18;3027:34;;3063:22;;;3024:62;3021:88;;;3089:18;;:::i;:::-;3125:2;3118:22;2893:253;:::o;3151:334::-;3222:2;3216:9;3278:2;3268:13;;3283:66;3264:86;3252:99;;3381:18;3366:34;;3402:22;;;3363:62;3360:88;;;3428:18;;:::i;:::-;3464:2;3457:22;3151:334;;-1:-1:-1;3151:334:262:o;3490:161::-;3557:20;;3617:8;3606:20;;3596:31;;3586:59;;3641:1;3638;3631:12;3656:160;3722:20;;3782:1;3771:20;;;3761:31;;3751:59;;3806:1;3803;3796:12;3821:920;3875:5;3923:4;3911:9;3906:3;3902:19;3898:30;3895:50;;;3941:1;3938;3931:12;3895:50;3994:2;3988:9;4036:4;4024:17;;4071:18;4056:34;;4092:22;;;4053:62;4050:88;;;4118:18;;:::i;:::-;4154:2;4147:22;4187:6;-1:-1:-1;4187:6:262;4217:23;;4249:33;4217:23;4249:33;:::i;:::-;4291:23;;4366:2;4351:18;;4338:32;4379:33;4338:32;4379:33;:::i;:::-;4440:2;4428:15;;4421:32;4486:37;4519:2;4504:18;;4486:37;:::i;:::-;4481:2;4473:6;4469:15;4462:62;4557:36;4589:2;4578:9;4574:18;4557:36;:::i;:::-;4552:2;4544:6;4540:15;4533:61;4646:3;4635:9;4631:19;4618:33;4660;4685:7;4660:33;:::i;:::-;4721:3;4709:16;;;;4702:33;3821:920;;-1:-1:-1;;3821:920:262:o;4746:347::-;4797:8;4807:6;4861:3;4854:4;4846:6;4842:17;4838:27;4828:55;;4879:1;4876;4869:12;4828:55;-1:-1:-1;4902:20:262;;4945:18;4934:30;;4931:50;;;4977:1;4974;4967:12;4931:50;5014:4;5006:6;5002:17;4990:29;;5066:3;5059:4;5050:6;5042;5038:19;5034:30;5031:39;5028:59;;;5083:1;5080;5073:12;5028:59;4746:347;;;;;:::o;5098:763::-;5221:6;5229;5237;5245;5253;5306:3;5294:9;5285:7;5281:23;5277:33;5274:53;;;5323:1;5320;5313:12;5274:53;5346:45;5383:7;5372:9;5346:45;:::i;:::-;5336:55;-1:-1:-1;5460:3:262;5445:19;;5432:33;;-1:-1:-1;5562:3:262;5547:19;;5534:33;;-1:-1:-1;5644:3:262;5629:19;;5616:33;5672:18;5661:30;;5658:50;;;5704:1;5701;5694:12;5658:50;5743:58;5793:7;5784:6;5773:9;5769:22;5743:58;:::i;:::-;5098:763;;;;-1:-1:-1;5098:763:262;;-1:-1:-1;5820:8:262;;5717:84;5098:763;-1:-1:-1;;;5098:763:262:o;6081:247::-;6140:6;6193:2;6181:9;6172:7;6168:23;6164:32;6161:52;;;6209:1;6206;6199:12;6161:52;6248:9;6235:23;6267:31;6292:5;6267:31;:::i;6333:346::-;6401:6;6409;6462:2;6450:9;6441:7;6437:23;6433:32;6430:52;;;6478:1;6475;6468:12;6430:52;-1:-1:-1;;6523:23:262;;;6643:2;6628:18;;;6615:32;;-1:-1:-1;6333:346:262:o;6684:611::-;6874:2;6886:21;;;6956:13;;6859:18;;;6978:22;;;6826:4;;7057:15;;;7031:2;7016:18;;;6826:4;7100:169;7114:6;7111:1;7108:13;7100:169;;;7175:13;;7163:26;;7218:2;7244:15;;;;7209:12;;;;7136:1;7129:9;7100:169;;;-1:-1:-1;7286:3:262;;6684:611;-1:-1:-1;;;;;6684:611:262:o;7300:409::-;7370:6;7378;7431:2;7419:9;7410:7;7406:23;7402:32;7399:52;;;7447:1;7444;7437:12;7399:52;7487:9;7474:23;7520:18;7512:6;7509:30;7506:50;;;7552:1;7549;7542:12;7506:50;7591:58;7641:7;7632:6;7621:9;7617:22;7591:58;:::i;:::-;7668:8;;7565:84;;-1:-1:-1;7300:409:262;-1:-1:-1;;;;7300:409:262:o;7714:475::-;7861:2;7850:9;7843:21;7824:4;7893:6;7887:13;7936:6;7931:2;7920:9;7916:18;7909:34;7995:6;7990:2;7982:6;7978:15;7973:2;7962:9;7958:18;7952:50;8051:1;8046:2;8037:6;8026:9;8022:22;8018:31;8011:42;8180:2;8110:66;8105:2;8097:6;8093:15;8089:88;8078:9;8074:104;8070:113;8062:121;;;7714:475;;;;:::o;8194:302::-;8287:6;8295;8348:3;8336:9;8327:7;8323:23;8319:33;8316:53;;;8365:1;8362;8355:12;8316:53;8388:45;8425:7;8414:9;8388:45;:::i;:::-;8378:55;;8452:38;8485:3;8474:9;8470:19;8452:38;:::i;:::-;8442:48;;8194:302;;;;;:::o;8501:160::-;8566:20;;8622:13;;8615:21;8605:32;;8595:60;;8651:1;8648;8641:12;8666:315;8731:6;8739;8792:2;8780:9;8771:7;8767:23;8763:32;8760:52;;;8808:1;8805;8798:12;8760:52;8847:9;8834:23;8866:31;8891:5;8866:31;:::i;:::-;8916:5;-1:-1:-1;8940:35:262;8971:2;8956:18;;8940:35;:::i;9499:1155::-;9653:6;9661;9669;9677;9721:9;9712:7;9708:23;9751:3;9747:2;9743:12;9740:32;;;9768:1;9765;9758:12;9740:32;9791:45;9828:7;9817:9;9791:45;:::i;:::-;9781:55;;9929:4;9860:66;9856:2;9852:75;9848:86;9845:106;;;9947:1;9944;9937:12;9845:106;;9973:22;;:::i;:::-;10018:37;10050:3;10039:9;10035:19;10018:37;:::i;:::-;10011:5;10004:52;10088:37;10120:3;10109:9;10105:19;10088:37;:::i;:::-;10083:2;10072:14;;10065:61;10199:3;10184:19;;10171:33;10231:2;10220:14;;10213:31;10317:3;10302:19;;10289:33;10349:2;10338:14;;10331:31;10076:5;-1:-1:-1;10437:3:262;10422:19;;10409:33;10465:18;10454:30;;10451:50;;;10497:1;10494;10487:12;10451:50;10536:58;10586:7;10577:6;10566:9;10562:22;10536:58;:::i;:::-;9499:1155;;;;-1:-1:-1;10613:8:262;-1:-1:-1;;;;9499:1155:262:o;10978:365::-;11072:6;11080;11133:3;11121:9;11112:7;11108:23;11104:33;11101:53;;;11150:1;11147;11140:12;11101:53;11173:45;11210:7;11199:9;11173:45;:::i;:::-;11163:55;;11268:3;11257:9;11253:19;11240:33;11282:31;11307:5;11282:31;:::i;:::-;11332:5;11322:15;;;10978:365;;;;;:::o;12999:610::-;13085:6;13093;13146:2;13134:9;13125:7;13121:23;13117:32;13114:52;;;13162:1;13159;13152:12;13114:52;13202:9;13189:23;13235:18;13227:6;13224:30;13221:50;;;13267:1;13264;13257:12;13221:50;13290:22;;13343:4;13335:13;;13331:27;-1:-1:-1;13321:55:262;;13372:1;13369;13362:12;13321:55;13412:2;13399:16;13438:18;13430:6;13427:30;13424:50;;;13470:1;13467;13460:12;13424:50;13523:7;13518:2;13508:6;13505:1;13501:14;13497:2;13493:23;13489:32;13486:45;13483:65;;;13544:1;13541;13534:12;13483:65;13575:2;13567:11;;;;;13597:6;;-1:-1:-1;12999:610:262;-1:-1:-1;;;12999:610:262:o;13614:388::-;13682:6;13690;13743:2;13731:9;13722:7;13718:23;13714:32;13711:52;;;13759:1;13756;13749:12;13711:52;13798:9;13785:23;13817:31;13842:5;13817:31;:::i;:::-;13867:5;-1:-1:-1;13924:2:262;13909:18;;13896:32;13937:33;13896:32;13937:33;:::i;14007:1272::-;14150:6;14158;14166;14174;14218:9;14209:7;14205:23;14248:3;14244:2;14240:12;14237:32;;;14265:1;14262;14255:12;14237:32;14288:45;14325:7;14314:9;14288:45;:::i;:::-;14278:55;;14426:4;14357:66;14353:2;14349:75;14345:86;14342:106;;;14444:1;14441;14434:12;14342:106;-1:-1:-1;14497:2:262;14491:9;14539:4;14527:17;;14574:18;14559:34;;14595:22;;;14556:62;14553:88;;;14621:18;;:::i;:::-;14657:2;14650:22;14696:36;14727:3;14712:19;;14696:36;:::i;:::-;14681:52;;14802:3;14787:19;;14774:33;14835:2;14823:15;;14816:30;14898:3;14883:19;;14870:33;14912;14870;14912;:::i;:::-;14973:2;14961:15;;14954:32;14965:6;-1:-1:-1;15062:3:262;15047:19;;15034:33;15090:18;15079:30;;15076:50;;;15122:1;15119;15112:12;15284:629;15370:6;15378;15386;15394;15447:3;15435:9;15426:7;15422:23;15418:33;15415:53;;;15464:1;15461;15454:12;15415:53;15503:9;15490:23;15522:31;15547:5;15522:31;:::i;:::-;15572:5;-1:-1:-1;15629:2:262;15614:18;;15601:32;15642:33;15601:32;15642:33;:::i;:::-;15284:629;;15694:7;;-1:-1:-1;;;;15774:2:262;15759:18;;15746:32;;15877:2;15862:18;15849:32;;15284:629::o;15918:184::-;15970:77;15967:1;15960:88;16067:4;16064:1;16057:15;16091:4;16088:1;16081:15;16107:128;16174:9;;;16195:11;;;16192:37;;;16209:18;;:::i;16240:125::-;16305:9;;;16326:10;;;16323:36;;;16339:18;;:::i;17266:325::-;17354:6;17349:3;17342:19;17406:6;17399:5;17392:4;17387:3;17383:14;17370:43;;17458:1;17451:4;17442:6;17437:3;17433:16;17429:27;17422:38;17324:3;17580:4;17510:66;17505:2;17497:6;17493:15;17489:88;17484:3;17480:98;17476:109;17469:116;;17266:325;;;;:::o;17596:244::-;17753:2;17742:9;17735:21;17716:4;17773:61;17830:2;17819:9;17815:18;17807:6;17799;17773:61;:::i;17845:814::-;17924:6;17977:2;17965:9;17956:7;17952:23;17948:32;17945:52;;;17993:1;17990;17983:12;17945:52;18026:9;18020:16;18059:18;18051:6;18048:30;18045:50;;;18091:1;18088;18081:12;18045:50;18114:22;;18167:4;18159:13;;18155:27;-1:-1:-1;18145:55:262;;18196:1;18193;18186:12;18145:55;18229:2;18223:9;18255:18;18247:6;18244:30;18241:56;;;18277:18;;:::i;:::-;18319:116;18431:2;18362:66;18355:4;18347:6;18343:17;18339:90;18335:99;18319:116;:::i;:::-;18458:6;18451:5;18444:21;18506:7;18501:2;18492:6;18488:2;18484:15;18480:24;18477:37;18474:57;;;18527:1;18524;18517:12;18474:57;18575:6;18570:2;18566;18562:11;18557:2;18550:5;18546:14;18540:42;18627:1;18602:18;;;18622:2;18598:27;18591:38;;;;18606:5;17845:814;-1:-1:-1;;;;17845:814:262:o;20390:653::-;20723:42;20715:6;20711:55;20700:9;20693:74;20776:53;20825:2;20814:9;20810:18;20802:6;19983:42;19975:5;19969:12;19965:61;19960:3;19953:74;20088:42;20080:4;20073:5;20069:16;20063:23;20059:72;20052:4;20047:3;20043:14;20036:96;20193:8;20185:4;20178:5;20174:16;20168:23;20164:38;20157:4;20152:3;20148:14;20141:62;20266:4;20259:5;20255:16;20249:23;20246:1;20235:38;20228:4;20223:3;20219:14;20212:62;20335:42;20327:4;20320:5;20316:16;20310:23;20306:72;20299:4;20294:3;20290:14;20283:96;;;19892:493;20776:53;20866:6;20860:3;20849:9;20845:19;20838:35;20910:6;20904:3;20893:9;20889:19;20882:35;20954:3;20948;20937:9;20933:19;20926:32;20674:4;20975:62;21032:3;21021:9;21017:19;21009:6;21001;20975:62;:::i;:::-;20967:70;20390:653;-1:-1:-1;;;;;;;;20390:653:262:o;21357:694::-;21742:42;21734:6;21730:55;21719:9;21712:74;21795:53;21844:2;21833:9;21829:18;21821:6;19983:42;19975:5;19969:12;19965:61;19960:3;19953:74;20088:42;20080:4;20073:5;20069:16;20063:23;20059:72;20052:4;20047:3;20043:14;20036:96;20193:8;20185:4;20178:5;20174:16;20168:23;20164:38;20157:4;20152:3;20148:14;20141:62;20266:4;20259:5;20255:16;20249:23;20246:1;20235:38;20228:4;20223:3;20219:14;20212:62;20335:42;20327:4;20320:5;20316:16;20310:23;20306:72;20299:4;20294:3;20290:14;20283:96;;;19892:493;21795:53;21149:12;;21146:1;21135:27;;;21920:3;21905:19;;21123:40;21226:4;21215:16;;21209:23;21195:38;;21179:14;;;21172:62;21283:4;21272:16;;21266:23;21250:14;;;21243:47;21339:4;21328:16;;21322:23;21306:14;;;21299:47;21962:3;21956;21945:9;21941:19;21934:32;21693:4;21983:62;22040:3;22029:9;22025:19;22017:6;22009;21983:62;:::i;22056:904::-;22563:42;22555:6;22551:55;22540:9;22533:74;22616:53;22665:2;22654:9;22650:18;22642:6;19983:42;19975:5;19969:12;19965:61;19960:3;19953:74;20088:42;20080:4;20073:5;20069:16;20063:23;20059:72;20052:4;20047:3;20043:14;20036:96;20193:8;20185:4;20178:5;20174:16;20168:23;20164:38;20157:4;20152:3;20148:14;20141:62;20266:4;20259:5;20255:16;20249:23;20246:1;20235:38;20228:4;20223:3;20219:14;20212:62;20335:42;20327:4;20320:5;20316:16;20310:23;20306:72;20299:4;20294:3;20290:14;20283:96;;;19892:493;22616:53;21149:12;;21146:1;21135:27;;;22741:3;22726:19;;21123:40;21226:4;21215:16;;21209:23;21195:38;;21179:14;;;21172:62;21283:4;21272:16;;21266:23;21250:14;;;21243:47;21339:4;21328:16;;21322:23;21306:14;;;21299:47;22783:6;22777:3;22766:9;22762:19;22755:35;22827:6;22821:3;22810:9;22806:19;22799:35;22871:3;22865;22854:9;22850:19;22843:32;22514:4;22892:62;22949:3;22938:9;22934:19;22926:6;22918;22892:62;:::i;22965:490::-;23250:42;23238:55;;23220:74;;23207:3;23192:19;;23303:53;23352:2;23337:18;;23329:6;19983:42;19975:5;19969:12;19965:61;19960:3;19953:74;20088:42;20080:4;20073:5;20069:16;20063:23;20059:72;20052:4;20047:3;20043:14;20036:96;20193:8;20185:4;20178:5;20174:16;20168:23;20164:38;20157:4;20152:3;20148:14;20141:62;20266:4;20259:5;20255:16;20249:23;20246:1;20235:38;20228:4;20223:3;20219:14;20212:62;20335:42;20327:4;20320:5;20316:16;20310:23;20306:72;20299:4;20294:3;20290:14;20283:96;;;19892:493;23303:53;23405:42;23397:6;23393:55;23387:3;23376:9;23372:19;23365:84;22965:490;;;;;;:::o;23460:573::-;23769:42;23757:55;;23739:74;;23726:3;23711:19;;23822:53;23871:2;23856:18;;23848:6;19983:42;19975:5;19969:12;19965:61;19960:3;19953:74;20088:42;20080:4;20073:5;20069:16;20063:23;20059:72;20052:4;20047:3;20043:14;20036:96;20193:8;20185:4;20178:5;20174:16;20168:23;20164:38;20157:4;20152:3;20148:14;20141:62;20266:4;20259:5;20255:16;20249:23;20246:1;20235:38;20228:4;20223:3;20219:14;20212:62;20335:42;20327:4;20320:5;20316:16;20310:23;20306:72;20299:4;20294:3;20290:14;20283:96;;;19892:493;23822:53;23924:42;23916:6;23912:55;23906:3;23895:9;23891:19;23884:84;24019:6;24016:1;24005:21;23999:3;23988:9;23984:19;23977:50;23460:573;;;;;;;:::o;24038:184::-;24108:6;24161:2;24149:9;24140:7;24136:23;24132:32;24129:52;;;24177:1;24174;24167:12;24129:52;-1:-1:-1;24200:16:262;;24038:184;-1:-1:-1;24038:184:262:o;24504:661::-;24867:42;24859:6;24855:55;24844:9;24837:74;24920:53;24969:2;24958:9;24954:18;24946:6;19983:42;19975:5;19969:12;19965:61;19960:3;19953:74;20088:42;20080:4;20073:5;20069:16;20063:23;20059:72;20052:4;20047:3;20043:14;20036:96;20193:8;20185:4;20178:5;20174:16;20168:23;20164:38;20157:4;20152:3;20148:14;20141:62;20266:4;20259:5;20255:16;20249:23;20246:1;20235:38;20228:4;20223:3;20219:14;20212:62;20335:42;20327:4;20320:5;20316:16;20310:23;20306:72;20299:4;20294:3;20290:14;20283:96;;;19892:493;24920:53;24317:12;;24310:20;24303:28;25034:3;25019:19;;24291:41;24381:4;24370:16;;24364:23;24348:14;;;24341:47;24441:4;24430:16;;24424:23;24449:42;24420:72;24404:14;;;24397:96;25076:3;25070;25059:9;25055:19;25048:32;24818:4;25097:62;25154:3;25143:9;25139:19;25131:6;25123;25097:62;:::i;25170:216::-;25234:9;;;25262:11;;;25209:3;25292:9;;25320:10;;25316:19;;25345:10;;25337:19;;25313:44;25310:70;;;25360:18;;:::i;26073:766::-;26497:42;26489:6;26485:55;26474:9;26467:74;26550:53;26599:2;26588:9;26584:18;26576:6;19983:42;19975:5;19969:12;19965:61;19960:3;19953:74;20088:42;20080:4;20073:5;20069:16;20063:23;20059:72;20052:4;20047:3;20043:14;20036:96;20193:8;20185:4;20178:5;20174:16;20168:23;20164:38;20157:4;20152:3;20148:14;20141:62;20266:4;20259:5;20255:16;20249:23;20246:1;20235:38;20228:4;20223:3;20219:14;20212:62;20335:42;20327:4;20320:5;20316:16;20310:23;20306:72;20299:4;20294:3;20290:14;20283:96;;;19892:493;26550:53;24317:12;;24310:20;24303:28;26664:3;26649:19;;24291:41;24381:4;24370:16;;24364:23;24348:14;;;24341:47;24441:4;24430:16;;24424:23;24449:42;24420:72;24404:14;;;24397:96;26706:6;26700:3;26689:9;26685:19;26678:35;26750:3;26744;26733:9;26729:19;26722:32;26448:4;26771:62;26828:3;26817:9;26813:19;26805:6;26797;26771:62;:::i;26844:272::-;26942:2;26912:17;;;26931;;;;26908:41;26973:34;26964:44;;27019:66;27010:76;;26961:126;26958:152;;;27090:18;;:::i;27121:514::-;27238:12;;27286:4;27275:16;;27269:23;27318:66;27310:75;;;27238:12;27408:1;27397:13;;27394:235;;;27552:66;27482;27472:6;27469:1;27465:14;27462:1;27458:22;27454:95;27450:2;27446:104;27442:177;27433:186;;27394:235;;;27121:514;;;:::o;27640:276::-;27740:2;27729:17;;;27710;;;;27706:41;27772:66;27762:77;;27851:34;27841:45;;27759:128;27756:154;;;27890:18;;:::i;27921:200::-;27987:9;;;27960:4;28015:9;;28043:10;;28055:12;;;28039:29;28078:12;;;28070:21;;28036:56;28033:82;;;28095:18;;:::i;28126:184::-;28178:77;28175:1;28168:88;28275:4;28272:1;28265:15;28299:4;28296:1;28289:15;28315:274;28355:1;28381;28371:189;;28416:77;28413:1;28406:88;28517:4;28514:1;28507:15;28545:4;28542:1;28535:15;28371:189;-1:-1:-1;28574:9:262;;28315:274::o","linkReferences":{},"immutableReferences":{"47589":[{"start":8287,"length":32}]}},"methodIdentifiers":{"allowance(address,address,uint256)":"598af9e7","approve(address,uint256,uint256)":"426a8493","balanceOf(address,uint256)":"00fdd58e","burn(address,uint256,uint256)":"f5298aca","clear(address,uint256)":"80f0b44c","collectProtocolFees(address,address,uint256)":"8161b874","donate((address,address,uint24,int24,address),uint256,uint256,bytes)":"234266d7","extsload(bytes32)":"1e2eaeaf","extsload(bytes32,uint256)":"35fd631a","extsload(bytes32[])":"dbd035ff","exttload(bytes32)":"f135baaa","exttload(bytes32[])":"9bf6645f","initialize((address,address,uint24,int24,address),uint160)":"6276cbbe","isOperator(address,address)":"b6363cf2","mint(address,uint256,uint256)":"156e29f6","modifyLiquidity((address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":"5a6bcfda","owner()":"8da5cb5b","protocolFeeController()":"f02de3b2","protocolFeesAccrued(address)":"97e8cd4e","setOperator(address,bool)":"558a7297","setProtocolFee((address,address,uint24,int24,address),uint24)":"7e87ce7d","setProtocolFeeController(address)":"2d771389","settle()":"11da60b4","settleFor(address)":"3dd45adb","supportsInterface(bytes4)":"01ffc9a7","swap((address,address,uint24,int24,address),(bool,int256,uint160),bytes)":"f3cd914c","sync(address)":"a5841194","take(address,address,uint256)":"0b0d9c09","transfer(address,uint256,uint256)":"095bcdb6","transferFrom(address,address,uint256,uint256)":"fe99049a","transferOwnership(address)":"f2fde38b","unlock(bytes)":"48c89491","updateDynamicLPFee((address,address,uint24,int24,address),uint24)":"52759651"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyUnlocked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"currency1\",\"type\":\"address\"}],\"name\":\"CurrenciesOutOfOrderOrEqual\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CurrencyNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DelegateCallNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManagerLocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustClearExactPositiveDelta\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonzeroNativeValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeeCurrencySynced\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"ProtocolFeeTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapAmountCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"}],\"name\":\"TickSpacingTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"}],\"name\":\"TickSpacingTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedDynamicLPFeeUpdate\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"PoolId\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"}],\"name\":\"Donate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"PoolId\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"Initialize\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"PoolId\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"ModifyLiquidity\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"OperatorSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"PoolId\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"protocolFee\",\"type\":\"uint24\"}],\"name\":\"ProtocolFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"PoolId\",\"name\":\"id\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"int128\",\"name\":\"amount0\",\"type\":\"int128\"},{\"indexed\":false,\"internalType\":\"int128\",\"name\":\"amount1\",\"type\":\"int128\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"liquidity\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"},{\"indexed\":false,\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Currency\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"clear\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"collectProtocolFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCollected\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[{\"internalType\":\"BalanceDelta\",\"name\":\"delta\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"extsload\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"startSlot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"nSlots\",\"type\":\"uint256\"}],\"name\":\"extsload\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"slots\",\"type\":\"bytes32[]\"}],\"name\":\"extsload\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"slots\",\"type\":\"bytes32[]\"}],\"name\":\"exttload\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"exttload\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isOperator\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"internalType\":\"struct ModifyLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"modifyLiquidity\",\"outputs\":[{\"internalType\":\"BalanceDelta\",\"name\":\"callerDelta\",\"type\":\"int256\"},{\"internalType\":\"BalanceDelta\",\"name\":\"feesAccrued\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFeeController\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Currency\",\"name\":\"currency\",\"type\":\"address\"}],\"name\":\"protocolFeesAccrued\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setOperator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint24\",\"name\":\"newProtocolFee\",\"type\":\"uint24\"}],\"name\":\"setProtocolFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"controller\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"settleFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct SwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"BalanceDelta\",\"name\":\"swapDelta\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Currency\",\"name\":\"currency\",\"type\":\"address\"}],\"name\":\"sync\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"Currency\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"take\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint24\",\"name\":\"newDynamicLPFee\",\"type\":\"uint24\"}],\"name\":\"updateDynamicLPFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Donate(bytes32,address,uint256,uint256)\":{\"params\":{\"amount0\":\"The amount donated in currency0\",\"amount1\":\"The amount donated in currency1\",\"id\":\"The abi encoded hash of the pool key struct for the pool that was donated to\",\"sender\":\"The address that initiated the donate call\"}},\"Initialize(bytes32,address,address,uint24,int24,address,uint160,int24)\":{\"params\":{\"currency0\":\"The first currency of the pool by address sort order\",\"currency1\":\"The second currency of the pool by address sort order\",\"fee\":\"The fee collected upon every swap in the pool, denominated in hundredths of a bip\",\"hooks\":\"The hooks contract address for the pool, or address(0) if none\",\"id\":\"The abi encoded hash of the pool key struct for the new pool\",\"sqrtPriceX96\":\"The price of the pool on initialization\",\"tick\":\"The initial tick of the pool corresponding to the initialized price\",\"tickSpacing\":\"The minimum number of ticks between initialized ticks\"}},\"ModifyLiquidity(bytes32,address,int24,int24,int256,bytes32)\":{\"params\":{\"id\":\"The abi encoded hash of the pool key struct for the pool that was modified\",\"liquidityDelta\":\"The amount of liquidity that was added or removed\",\"salt\":\"The extra data to make positions unique\",\"sender\":\"The address that modified the pool\",\"tickLower\":\"The lower tick of the position\",\"tickUpper\":\"The upper tick of the position\"}},\"Swap(bytes32,address,int128,int128,uint160,uint128,int24,uint24)\":{\"params\":{\"amount0\":\"The delta of the currency0 balance of the pool\",\"amount1\":\"The delta of the currency1 balance of the pool\",\"fee\":\"The swap fee in hundredths of a bip\",\"id\":\"The abi encoded hash of the pool key struct for the pool that was modified\",\"liquidity\":\"The liquidity of the pool after the swap\",\"sender\":\"The address that initiated the swap call, and that received the callback\",\"sqrtPriceX96\":\"The sqrt(price) of the pool after the swap, as a Q64.96\",\"tick\":\"The log base 1.0001 of the price of the pool after the swap\"}}},\"kind\":\"dev\",\"methods\":{\"approve(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of the token.\",\"id\":\"The id of the token.\",\"spender\":\"The address of the spender.\"},\"returns\":{\"_0\":\"bool True, always\"}},\"burn(address,uint256,uint256)\":{\"details\":\"The id is converted to a uint160 to correspond to a currency address If the upper 12 bytes are not 0, they will be 0-ed out\",\"params\":{\"amount\":\"The amount of currency to burn\",\"from\":\"The address to burn the tokens from\",\"id\":\"The currency address to burn from ERC6909s, as a uint256\"}},\"clear(address,uint256)\":{\"details\":\"This could be used to clear a balance that is considered dust. Additionally, the amount must be the exact positive balance. This is to enforce that the caller is aware of the amount being cleared.\"},\"collectProtocolFees(address,address,uint256)\":{\"details\":\"This will revert if the contract is unlocked\",\"params\":{\"amount\":\"The amount of currency to withdraw\",\"currency\":\"The currency to withdraw\",\"recipient\":\"The address to receive the protocol fees\"},\"returns\":{\"amountCollected\":\"The amount of currency successfully withdrawn\"}},\"donate((address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"details\":\"Calls to donate can be frontrun adding just-in-time liquidity, with the aim of receiving a portion donated funds. Donors should keep this in mind when designing donation mechanisms.This function donates to in-range LPs at slot0.tick. In certain edge-cases of the swap algorithm, the `sqrtPrice` of a pool can be at the lower boundary of tick `n`, but the `slot0.tick` of the pool is already `n - 1`. In this case a call to `donate` would donate to tick `n - 1` (slot0.tick) not tick `n` (getTickAtSqrtPrice(slot0.sqrtPriceX96)). Read the comments in `Pool.swap()` for more information about this.\",\"params\":{\"amount0\":\"The amount of currency0 to donate\",\"amount1\":\"The amount of currency1 to donate\",\"hookData\":\"The data to pass through to the donate hooks\",\"key\":\"The key of the pool to donate to\"},\"returns\":{\"delta\":\"BalanceDelta The delta of the caller after the donate\"}},\"extsload(bytes32)\":{\"params\":{\"slot\":\"Key of slot to sload\"},\"returns\":{\"_0\":\"The value of the slot as bytes32\"}},\"extsload(bytes32,uint256)\":{\"params\":{\"nSlots\":\"Number of slots to load into return value\",\"startSlot\":\"Key of slot to start sloading from\"},\"returns\":{\"_0\":\"List of loaded values.\"}},\"extsload(bytes32[])\":{\"params\":{\"slots\":\"List of slots to SLOAD from.\"},\"returns\":{\"_0\":\"List of loaded values.\"}},\"exttload(bytes32)\":{\"params\":{\"slot\":\"Key of slot to tload\"},\"returns\":{\"_0\":\"The value of the slot as bytes32\"}},\"exttload(bytes32[])\":{\"params\":{\"slots\":\"List of slots to tload\"},\"returns\":{\"_0\":\"List of loaded values\"}},\"initialize((address,address,uint24,int24,address),uint160)\":{\"details\":\"A swap fee totaling MAX_SWAP_FEE (100%) makes exact output swaps impossible since the input is entirely consumed by the fee\",\"params\":{\"key\":\"The pool key for the pool to initialize\",\"sqrtPriceX96\":\"The initial square root price\"},\"returns\":{\"tick\":\"The initial tick of the pool\"}},\"mint(address,uint256,uint256)\":{\"details\":\"The id is converted to a uint160 to correspond to a currency address If the upper 12 bytes are not 0, they will be 0-ed out\",\"params\":{\"amount\":\"The amount of currency to mint\",\"id\":\"The currency address to mint to ERC6909s, as a uint256\",\"to\":\"The address to mint the tokens to\"}},\"modifyLiquidity((address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"details\":\"Poke by calling with a zero liquidityDeltaNote that feesAccrued can be artificially inflated by a malicious actor and integrators should be careful using the value For pools with a single liquidity position, actors can donate to themselves to inflate feeGrowthGlobal (and consequently feesAccrued) atomically donating and collecting fees in the same unlockCallback may make the inflated value more extreme\",\"params\":{\"hookData\":\"The data to pass through to the add/removeLiquidity hooks\",\"key\":\"The pool to modify liquidity in\",\"params\":\"The parameters for modifying the liquidity\"},\"returns\":{\"callerDelta\":\"The balance delta of the caller of modifyLiquidity. This is the total of both principal, fee deltas, and hook deltas if applicable\",\"feesAccrued\":\"The balance delta of the fees generated in the liquidity range. Returned for informational purposes\"}},\"setOperator(address,bool)\":{\"params\":{\"approved\":\"The approval status.\",\"operator\":\"The address of the operator.\"},\"returns\":{\"_0\":\"bool True, always\"}},\"setProtocolFee((address,address,uint24,int24,address),uint24)\":{\"params\":{\"key\":\"The key of the pool to set a protocol fee for\",\"newProtocolFee\":\"The fee to set\"}},\"setProtocolFeeController(address)\":{\"params\":{\"controller\":\"The new protocol fee controller\"}},\"settle()\":{\"returns\":{\"_0\":\"The amount of currency settled\"}},\"settleFor(address)\":{\"params\":{\"recipient\":\"The address to credit for the payment\"},\"returns\":{\"_0\":\"The amount of currency settled\"}},\"swap((address,address,uint24,int24,address),(bool,int256,uint160),bytes)\":{\"details\":\"Swapping on low liquidity pools may cause unexpected swap amounts when liquidity available is less than amountSpecified. Additionally note that if interacting with hooks that have the BEFORE_SWAP_RETURNS_DELTA_FLAG or AFTER_SWAP_RETURNS_DELTA_FLAG the hook may alter the swap input/output. Integrators should perform checks on the returned swapDelta.\",\"params\":{\"hookData\":\"The data to pass through to the swap hooks\",\"key\":\"The pool to swap in\",\"params\":\"The parameters for swapping\"},\"returns\":{\"swapDelta\":\"The balance delta of the address swapping\"}},\"sync(address)\":{\"details\":\"This MUST be called before any ERC20 tokens are sent into the contract, but can be skipped for native tokens because the amount to settle is determined by the sent value. However, if an ERC20 token has been synced and not settled, and the caller instead wants to settle native funds, this function can be called with the native currency to then be able to settle the native currency\"},\"take(address,address,uint256)\":{\"details\":\"Will revert if the requested amount is not available, consider using `mint` insteadCan also be used as a mechanism for free flash loans\",\"params\":{\"amount\":\"The amount of currency to withdraw\",\"currency\":\"The currency to withdraw from the pool manager\",\"to\":\"The address to withdraw to\"}},\"transfer(address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of the token.\",\"id\":\"The id of the token.\",\"receiver\":\"The address of the receiver.\"},\"returns\":{\"_0\":\"bool True, always, unless the function reverts\"}},\"transferFrom(address,address,uint256,uint256)\":{\"params\":{\"amount\":\"The amount of the token.\",\"id\":\"The id of the token.\",\"receiver\":\"The address of the receiver.\",\"sender\":\"The address of the sender.\"},\"returns\":{\"_0\":\"bool True, always, unless the function reverts\"}},\"unlock(bytes)\":{\"details\":\"The only functions callable without an unlocking are `initialize` and `updateDynamicLPFee`\",\"params\":{\"data\":\"Any data to pass to the callback, via `IUnlockCallback(msg.sender).unlockCallback(data)`\"},\"returns\":{\"result\":\"The data returned by the call to `IUnlockCallback(msg.sender).unlockCallback(data)`\"}},\"updateDynamicLPFee((address,address,uint24,int24,address),uint24)\":{\"details\":\"A swap fee totaling MAX_SWAP_FEE (100%) makes exact output swaps impossible since the input is entirely consumed by the fee\",\"params\":{\"key\":\"The key of the pool to update dynamic LP fees for\",\"newDynamicLPFee\":\"The new dynamic pool LP fee\"}}},\"title\":\"PoolManager\",\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyUnlocked()\":[{\"notice\":\"Thrown when unlock is called, but the contract is already unlocked\"}],\"CurrenciesOutOfOrderOrEqual(address,address)\":[{\"notice\":\"PoolKey must have currencies where address(currency0) < address(currency1)\"}],\"CurrencyNotSettled()\":[{\"notice\":\"Thrown when a currency is not netted out after the contract is unlocked\"}],\"InvalidCaller()\":[{\"notice\":\"Thrown when collectProtocolFees or setProtocolFee is not called by the controller.\"}],\"ManagerLocked()\":[{\"notice\":\"Thrown when a function is called that requires the contract to be unlocked, but it is not\"}],\"MustClearExactPositiveDelta()\":[{\"notice\":\"Thrown when `clear` is called with an amount that is not exactly equal to the open currency delta.\"}],\"NonzeroNativeValue()\":[{\"notice\":\"Thrown when native currency is passed to a non native settlement\"}],\"PoolNotInitialized()\":[{\"notice\":\"Thrown when trying to interact with a non-initialized pool\"}],\"ProtocolFeeCurrencySynced()\":[{\"notice\":\"Thrown when collectProtocolFees is attempted on a token that is synced.\"}],\"ProtocolFeeTooLarge(uint24)\":[{\"notice\":\"Thrown when protocol fee is set too high\"}],\"SwapAmountCannotBeZero()\":[{\"notice\":\"Thrown when trying to swap amount of 0\"}],\"TickSpacingTooLarge(int24)\":[{\"notice\":\"Pools are limited to type(int16).max tickSpacing in #initialize, to prevent overflow\"}],\"TickSpacingTooSmall(int24)\":[{\"notice\":\"Pools must have a positive non-zero tickSpacing passed to #initialize\"}],\"UnauthorizedDynamicLPFeeUpdate()\":[{\"notice\":\"Thrown when a call to updateDynamicLPFee is made by an address that is not the hook, or on a pool that does not have a dynamic swap fee.\"}]},\"events\":{\"Donate(bytes32,address,uint256,uint256)\":{\"notice\":\"Emitted for donations\"},\"Initialize(bytes32,address,address,uint24,int24,address,uint160,int24)\":{\"notice\":\"Emitted when a new pool is initialized\"},\"ModifyLiquidity(bytes32,address,int24,int24,int256,bytes32)\":{\"notice\":\"Emitted when a liquidity position is modified\"},\"ProtocolFeeControllerUpdated(address)\":{\"notice\":\"Emitted when the protocol fee controller address is updated in setProtocolFeeController.\"},\"ProtocolFeeUpdated(bytes32,uint24)\":{\"notice\":\"Emitted when the protocol fee is updated for a pool.\"},\"Swap(bytes32,address,int128,int128,uint160,uint128,int24,uint24)\":{\"notice\":\"Emitted for swaps between currency0 and currency1\"}},\"kind\":\"user\",\"methods\":{\"allowance(address,address,uint256)\":{\"notice\":\"Spender allowance of an id.\"},\"approve(address,uint256,uint256)\":{\"notice\":\"Approves an amount of an id to a spender.\"},\"balanceOf(address,uint256)\":{\"notice\":\"Owner balance of an id.\"},\"burn(address,uint256,uint256)\":{\"notice\":\"Called by the user to move value from ERC6909 balance\"},\"clear(address,uint256)\":{\"notice\":\"WARNING - Any currency that is cleared, will be non-retrievable, and locked in the contract permanently. A call to clear will zero out a positive balance WITHOUT a corresponding transfer.\"},\"collectProtocolFees(address,address,uint256)\":{\"notice\":\"Collects the protocol fees for a given recipient and currency, returning the amount collected\"},\"donate((address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"notice\":\"Donate the given currency amounts to the in-range liquidity providers of a pool\"},\"extsload(bytes32)\":{\"notice\":\"Called by external contracts to access granular pool state\"},\"extsload(bytes32,uint256)\":{\"notice\":\"Called by external contracts to access granular pool state\"},\"extsload(bytes32[])\":{\"notice\":\"Called by external contracts to access sparse pool state\"},\"exttload(bytes32)\":{\"notice\":\"Called by external contracts to access transient storage of the contract\"},\"exttload(bytes32[])\":{\"notice\":\"Called by external contracts to access sparse transient pool state\"},\"initialize((address,address,uint24,int24,address),uint160)\":{\"notice\":\"Initialize the state for a given pool ID\"},\"isOperator(address,address)\":{\"notice\":\"Checks if a spender is approved by an owner as an operator\"},\"mint(address,uint256,uint256)\":{\"notice\":\"Called by the user to move value into ERC6909 balance\"},\"modifyLiquidity((address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"notice\":\"Modify the liquidity for the given pool\"},\"protocolFeeController()\":{\"notice\":\"Returns the current protocol fee controller address\"},\"protocolFeesAccrued(address)\":{\"notice\":\"Given a currency address, returns the protocol fees accrued in that currency\"},\"setOperator(address,bool)\":{\"notice\":\"Sets or removes an operator for the caller.\"},\"setProtocolFee((address,address,uint24,int24,address),uint24)\":{\"notice\":\"Sets the protocol fee for the given pool\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets the protocol fee controller\"},\"settle()\":{\"notice\":\"Called by the user to pay what is owed\"},\"settleFor(address)\":{\"notice\":\"Called by the user to pay on behalf of another address\"},\"swap((address,address,uint24,int24,address),(bool,int256,uint160),bytes)\":{\"notice\":\"Swap against the given pool\"},\"sync(address)\":{\"notice\":\"Writes the current ERC20 balance of the specified currency to transient storage This is used to checkpoint balances for the manager and derive deltas for the caller.\"},\"take(address,address,uint256)\":{\"notice\":\"Called by the user to net out some value owed to the user\"},\"transfer(address,uint256,uint256)\":{\"notice\":\"Transfers an amount of an id from the caller to a receiver.\"},\"transferFrom(address,address,uint256,uint256)\":{\"notice\":\"Transfers an amount of an id from a sender to a receiver.\"},\"unlock(bytes)\":{\"notice\":\"All interactions on the contract that account deltas require unlocking. A caller that calls `unlock` must implement `IUnlockCallback(msg.sender).unlockCallback(data)`, where they interact with the remaining functions on this contract.\"},\"updateDynamicLPFee((address,address,uint24,int24,address),uint24)\":{\"notice\":\"Updates the pools lp fees for the a pool that has enabled dynamic lp fees.\"}},\"notice\":\"Holds the state for all pools\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"lib/v4-core/src/PoolManager.sol\":\"PoolManager\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":44444444},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/\",\":@uniswap/v4-core/=lib/v4-core/\",\":ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/v4-core/lib/forge-std/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/\",\":permit2/=lib/permit2/\",\":solmate/=lib/v4-core/lib/solmate/\",\":v4-core/=lib/v4-core/src/\"]},\"sources\":{\"lib/v4-core/lib/solmate/src/auth/Owned.sol\":{\"keccak256\":\"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\",\"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\"]},\"lib/v4-core/src/ERC6909.sol\":{\"keccak256\":\"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6\",\"dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q\"]},\"lib/v4-core/src/ERC6909Claims.sol\":{\"keccak256\":\"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c\",\"dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i\"]},\"lib/v4-core/src/Extsload.sol\":{\"keccak256\":\"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51\",\"dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU\"]},\"lib/v4-core/src/Exttload.sol\":{\"keccak256\":\"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c\",\"dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG\"]},\"lib/v4-core/src/NoDelegateCall.sol\":{\"keccak256\":\"0xacb81aecb7c74c86650a035462dae38c313b4b7b5842e14b645f864f61da2b51\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://363a0e15fc30ea68a5d52a78772facecde6433ea156e3ec2ce25068c97cd5ad6\",\"dweb:/ipfs/QmYhWaF3wH71SDx5TZr9qEXXQf5FYQvdjoo3B2qWiAbm18\"]},\"lib/v4-core/src/PoolManager.sol\":{\"keccak256\":\"0xf9ff5d5e261a21a5e72a01c5badd988beeff437e0f6b82fd56f80be42d727c07\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://4a92a25102c73245e1343f0dbc8400b8bac3c464ba064aa5574b9584a12e6c72\",\"dweb:/ipfs/QmfCcvspZ8XzDeQjEd2FfM76wzkfE9KDgBoqAcqhf3nsnu\"]},\"lib/v4-core/src/ProtocolFees.sol\":{\"keccak256\":\"0x81362ef1d19670b41cefc2b6f2dc0333b6743fe39a1929edd36bd9b6a1111755\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://de483bbd8bf9a53b9644d7f9a6a6fe77ae527b755cf29e1db8725de89e70c7aa\",\"dweb:/ipfs/Qmex3PcgJGbYsuDNaMXc8mg5fW1DNaPGiNToPpAAzz6GEq\"]},\"lib/v4-core/src/interfaces/IExtsload.sol\":{\"keccak256\":\"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1\",\"dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN\"]},\"lib/v4-core/src/interfaces/IExttload.sol\":{\"keccak256\":\"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8\",\"dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY\"]},\"lib/v4-core/src/interfaces/IHooks.sol\":{\"keccak256\":\"0xc131ffa2d04c10a012fe715fe2c115811526b7ea34285cf0a04ce7ce8320da8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b212358897db5d99c21244d88f97b2e788527552cb430629b472a8cc6289aec\",\"dweb:/ipfs/QmQtwV4dDe2RYk2ErLpaAX7U82jWh1L6Lw2HRuKDvBi84G\"]},\"lib/v4-core/src/interfaces/IPoolManager.sol\":{\"keccak256\":\"0xbdab3544da3d32dfdf7457baa94e17d5a3012952428559e013ffac45d067038e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce95ff864468e37c76adf71df061d4f3d6f3a5ec1f9bc3aea090463bc72798f4\",\"dweb:/ipfs/QmSbWh1pLbz51yQF4HEu5NRhr8XVv9JYGEw1hq1HudAnCi\"]},\"lib/v4-core/src/interfaces/IProtocolFees.sol\":{\"keccak256\":\"0x32a666e588a2f66334430357bb1e2424fe7eebeb98a3364b1dd16eb6ccca9848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85751d302125881f72e5f8af051c2d5d9b1f606ebaea8ca7d04fccdd27cc252d\",\"dweb:/ipfs/QmeRwomeh9NWm6A6fgNA4KZPQZHPpdKsPQyYsHSFmvud7J\"]},\"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol\":{\"keccak256\":\"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b\",\"dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK\"]},\"lib/v4-core/src/interfaces/external/IERC20Minimal.sol\":{\"keccak256\":\"0xeccadf1bf69ba2eb51f2fe4fa511bc7bb05bbd6b9f9a3cb8e5d83d9582613e0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://118757369892687b99ef46ce28d6861f62c098285bd7687a4f17f7e44e5f81de\",\"dweb:/ipfs/QmUxqbYqQtcEwwFbb9e6BBMePEaSgN8C45v6RKubD4ib8d\"]},\"lib/v4-core/src/interfaces/external/IERC6909Claims.sol\":{\"keccak256\":\"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f\",\"dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK\"]},\"lib/v4-core/src/libraries/BitMath.sol\":{\"keccak256\":\"0x51b9be4f5c4fd3e80cbc9631a65244a2eb2be250b6b7f128a2035080e18aee8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fe98bbd5498e912146b9319827fc63621eb66ff55d5baae0fa02a7a972ab8d1e\",\"dweb:/ipfs/QmY5hCuyrtgsJtk4AavrxcvBkRrChfr4N6ZnhdC8roPpNi\"]},\"lib/v4-core/src/libraries/CurrencyDelta.sol\":{\"keccak256\":\"0x80dbd898cf0f90c5c27192689b16c34edc765d6ab21b8358e3bb792c7fef238c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://107698da024313f132d9fe28deb920b5c03d14624889c3ce5720e588f03635bb\",\"dweb:/ipfs/QmQteUbhj5SsWbvSF6U8niBUSrETqVbEwULc8E7vS4Kbnn\"]},\"lib/v4-core/src/libraries/CurrencyReserves.sol\":{\"keccak256\":\"0x1576616129933fcdf3b684cea33cffd9c95e18fafbd2832a8c48ac3d8526d4c3\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://33b050efb9b81803b18f562271e7cca2ec5362c4d505860d6419b4a345636725\",\"dweb:/ipfs/QmQtFtTwKZ5pFVGD2ENDUXvp7ECFvzqeCuJ1miJcUHdmiX\"]},\"lib/v4-core/src/libraries/CustomRevert.sol\":{\"keccak256\":\"0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd\",\"dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt\"]},\"lib/v4-core/src/libraries/FixedPoint128.sol\":{\"keccak256\":\"0xad236e10853f4b4b20a35a9bb52b857c4fc79874846b7e444e06ead7f2630542\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0de1f9a06520b1a689660943faa14fc0b8344ab41fab9e6012ea34bff4b9b3eb\",\"dweb:/ipfs/QmRNMPTyko7W6d6KxuTsnDBa9oZgDK4xiwRRq3H9ASTbwy\"]},\"lib/v4-core/src/libraries/FixedPoint96.sol\":{\"keccak256\":\"0xef5c3fd41aee26bb12aa1c32873cfee88e67eddfe7c2b32283786265ac669741\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4de298d02f662a1c36c7be0a150f18c2a161408a5d3e48432e707efd01fac9a4\",\"dweb:/ipfs/QmSiM4oeMmLVKmAtJXz2feYkv4R9ZcyBpkTRW5Nhw5KDyJ\"]},\"lib/v4-core/src/libraries/FullMath.sol\":{\"keccak256\":\"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52\",\"dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC\"]},\"lib/v4-core/src/libraries/Hooks.sol\":{\"keccak256\":\"0xd679b4b2d429689bc44f136050ebc958fb2d7d0d3a3c7b3e48c08ab4fba09aaa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287190cb72840e5eb63cc7a8a1d0b9150af17d8e4ea0323f47c7e7928f2033cb\",\"dweb:/ipfs/QmVfqWBnAQM2jUcuREDdvjcP21gNuLU35CoL3NG5CEhNcx\"]},\"lib/v4-core/src/libraries/LPFeeLibrary.sol\":{\"keccak256\":\"0xbf6914e01014e7c1044111feb7df7a3d96bb503b3da827ad8464b1955580d13b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33823c20a91882c9aacdcbb02f0558c05209f4d5954aa6dd4fa17c95664db475\",\"dweb:/ipfs/QmR7owkFgpfztpp1QUg3ut3nw9iPVQqLGP4hzgmZtRUQ2J\"]},\"lib/v4-core/src/libraries/LiquidityMath.sol\":{\"keccak256\":\"0x000ef2eadcc1eb7b2c18a77655f94e76e0e860f605783484657ef65fd6eda353\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a766b620a7a22798b43c6c1f23b5c6cff0ebf588deb89842bad05208d448cd99\",\"dweb:/ipfs/QmVKjaFJdzkqA3ey2Byum8iTCMssWVD8MmVC8rw62Tj5WD\"]},\"lib/v4-core/src/libraries/Lock.sol\":{\"keccak256\":\"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c\",\"dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF\"]},\"lib/v4-core/src/libraries/NonzeroDeltaCount.sol\":{\"keccak256\":\"0x0666ebd5d3528d7d52c48538296367a4cff97a578cf13365c51983fae3219b87\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://d27f1be3bd09d85c53d3e6a539dd6529ddd8b2b764ccb47fd7765fc81f9add59\",\"dweb:/ipfs/QmQdZujNXhKEXQBkKtF5jbdvo1yXMqPDUoBBaF9S5u3Kpm\"]},\"lib/v4-core/src/libraries/ParseBytes.sol\":{\"keccak256\":\"0x7533b13f53ee2c2c55500100b22ffd6e37e7523c27874edc98663d53a8672b15\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82449058634fde28a085f3c59a6a5f412550c02181590593fd84c3e8b329aa17\",\"dweb:/ipfs/Qmev4E9Au6SsE4wsArChCwfg94KhHc5gYsEsZUnjF5sRLa\"]},\"lib/v4-core/src/libraries/Pool.sol\":{\"keccak256\":\"0xb8191707c5913f5e2f589cec5167e3fac4a5b86bd84f61fdba0fbe6a8ce8a3a0\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://a609f9c365f05becf61877d9dc767e7825bce8c34607dbfc0f0437a71f6ff407\",\"dweb:/ipfs/QmThDUzLePs2Hbp6XTpRSHT67rdsjQLhdmS6krm8cpKSey\"]},\"lib/v4-core/src/libraries/Position.sol\":{\"keccak256\":\"0xddab2a831f1befb6abf5567e77c4582169ca8156cf69eb4f22d8e87f7226a3f9\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://c79fe61b50f3b70cff503abfa6f5643fcbefb9b794855bee1019b1e6d9c083b2\",\"dweb:/ipfs/QmbKmYNQesaMz8bo1b7TMHQcAwaDd3eDPrE5pAdPPZTtk5\"]},\"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol\":{\"keccak256\":\"0xf483001899229ab10f5a626fe1c5866134d9e965b48ce6cf55ce0d7f74f7d8ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ba9211a7f69bbb44649c35211eb29d193c09032ec600064ef9d04b4625dd8ba\",\"dweb:/ipfs/QmQSjQvtguYgMJSkkKRhHjxasfX9xfTbrbcZ1QmjUVb787\"]},\"lib/v4-core/src/libraries/SafeCast.sol\":{\"keccak256\":\"0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59\",\"dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj\"]},\"lib/v4-core/src/libraries/SqrtPriceMath.sol\":{\"keccak256\":\"0xf8079fe6e3460db495451d06b1705e18f1c4075c1af96a31ad313545f7082982\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://582fc51546723a0a8acccf782f69b530bacf9b3ef929458e82569b7121f0b138\",\"dweb:/ipfs/QmSBXcmqZdFsM7M4sRaiyQAxykCeMNFKyKgBcwSMTw1bcF\"]},\"lib/v4-core/src/libraries/SwapMath.sol\":{\"keccak256\":\"0x6baa782ae523269c079cc763639a9b91a25fcfa1743c049c76e43741ef494bd9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://035c337e62e05262a5bd5d3bc85bc9a383c1013001216b429f49cf1e129a0812\",\"dweb:/ipfs/QmU7s4h58Fh2A6mM8yeorZ2ygwEJMQw8zdZLLkHeDoSWxD\"]},\"lib/v4-core/src/libraries/TickBitmap.sol\":{\"keccak256\":\"0x6779f89e28a0b4af6e09d518caf014b7e8fc627400f5561f86fed11635b1458a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a64dee983106de3be3f968be94368c1e37592f5418aa2a39e8dd358d5a962b0d\",\"dweb:/ipfs/QmYuECZTiEeQVxDLYx6pBSSnVrg56Apw75bugQiM3FmGwy\"]},\"lib/v4-core/src/libraries/TickMath.sol\":{\"keccak256\":\"0x4e1a11e154eb06106cb1c4598f06cca5f5ca16eaa33494ba2f0e74981123eca8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a79a57f7b240783b045168d1c4f774ac1812caf8f9a83cb6959a86b0b07b6c70\",\"dweb:/ipfs/QmTb5kvxwDNW8jDuQaqdJ445cCFejNkUqEB17Bjo8UBiva\"]},\"lib/v4-core/src/libraries/UnsafeMath.sol\":{\"keccak256\":\"0xa6e55e0a43a15df2df471d9972cd48f613d07c663ecb8bbeaf7623f6f99bcce4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02ea6e13879fc5a5f35149a2f1cd8af3a1f0877ff69101dad53841d16f515572\",\"dweb:/ipfs/QmcpL4gdG6hL2w1wqs2Vw4J1EFCwBs9T1Qd4p16CtECQkn\"]},\"lib/v4-core/src/types/BalanceDelta.sol\":{\"keccak256\":\"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9\",\"dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H\"]},\"lib/v4-core/src/types/BeforeSwapDelta.sol\":{\"keccak256\":\"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782\",\"dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K\"]},\"lib/v4-core/src/types/Currency.sol\":{\"keccak256\":\"0x4a0b84b282577ff6f8acf13ec9f4d32dbb9348748b49611d00e68bee96609c93\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45f9d62ab3d51b52957279e353853ba1547c3182c9a1e3d1846ada4a90263b01\",\"dweb:/ipfs/QmS8NG84ccQS1yXVD8cv3eKX7J1UKxuJhbUfHTQR2opKF5\"]},\"lib/v4-core/src/types/PoolId.sol\":{\"keccak256\":\"0x308311916ea0f5c2fd878b6a2751eb223d170a69e33f601fae56dfe3c5d392af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669c2cd7ac17690b5d8831e0bda72822376c3a04b36afed6d31df4d75fe60918\",\"dweb:/ipfs/QmT6EpkxqU8VF3WsgrZ66F3s1cCQRffR95z1HDYZz7ph6y\"]},\"lib/v4-core/src/types/PoolKey.sol\":{\"keccak256\":\"0xf89856e0580d7a4856d3187a76858377ccee9d59702d230c338d84388221b786\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f3118fa189025695c37fdf0bdd1190f085ad097484d3c88cf4c56d1db65f639\",\"dweb:/ipfs/QmamXpgtB8GV1CaFLvqefPWSoikLDhMk1yU4heBnVzU8gi\"]},\"lib/v4-core/src/types/PoolOperation.sol\":{\"keccak256\":\"0x7a1a107fc1f2208abb2c9364c8c54e56e98dca27673e9441bed2b949b6382162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ad2470383bc5595d5af17840c64971f457adac68895a4db41ba5c71a4478e07\",\"dweb:/ipfs/QmdwKhBHDZFuqXrR2BfDBD9r7rB2ULGQBznsajRTkTmL4c\"]},\"lib/v4-core/src/types/Slot0.sol\":{\"keccak256\":\"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8\",\"dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AlreadyUnlocked"},{"inputs":[{"internalType":"address","name":"currency0","type":"address"},{"internalType":"address","name":"currency1","type":"address"}],"type":"error","name":"CurrenciesOutOfOrderOrEqual"},{"inputs":[],"type":"error","name":"CurrencyNotSettled"},{"inputs":[],"type":"error","name":"DelegateCallNotAllowed"},{"inputs":[],"type":"error","name":"InvalidCaller"},{"inputs":[],"type":"error","name":"ManagerLocked"},{"inputs":[],"type":"error","name":"MustClearExactPositiveDelta"},{"inputs":[],"type":"error","name":"NonzeroNativeValue"},{"inputs":[],"type":"error","name":"PoolNotInitialized"},{"inputs":[],"type":"error","name":"ProtocolFeeCurrencySynced"},{"inputs":[{"internalType":"uint24","name":"fee","type":"uint24"}],"type":"error","name":"ProtocolFeeTooLarge"},{"inputs":[],"type":"error","name":"SwapAmountCannotBeZero"},{"inputs":[{"internalType":"int24","name":"tickSpacing","type":"int24"}],"type":"error","name":"TickSpacingTooLarge"},{"inputs":[{"internalType":"int24","name":"tickSpacing","type":"int24"}],"type":"error","name":"TickSpacingTooSmall"},{"inputs":[],"type":"error","name":"UnauthorizedDynamicLPFeeUpdate"},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"spender","type":"address","indexed":true},{"internalType":"uint256","name":"id","type":"uint256","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"Approval","anonymous":false},{"inputs":[{"internalType":"PoolId","name":"id","type":"bytes32","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"uint256","name":"amount0","type":"uint256","indexed":false},{"internalType":"uint256","name":"amount1","type":"uint256","indexed":false}],"type":"event","name":"Donate","anonymous":false},{"inputs":[{"internalType":"PoolId","name":"id","type":"bytes32","indexed":true},{"internalType":"Currency","name":"currency0","type":"address","indexed":true},{"internalType":"Currency","name":"currency1","type":"address","indexed":true},{"internalType":"uint24","name":"fee","type":"uint24","indexed":false},{"internalType":"int24","name":"tickSpacing","type":"int24","indexed":false},{"internalType":"contract IHooks","name":"hooks","type":"address","indexed":false},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160","indexed":false},{"internalType":"int24","name":"tick","type":"int24","indexed":false}],"type":"event","name":"Initialize","anonymous":false},{"inputs":[{"internalType":"PoolId","name":"id","type":"bytes32","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"int24","name":"tickLower","type":"int24","indexed":false},{"internalType":"int24","name":"tickUpper","type":"int24","indexed":false},{"internalType":"int256","name":"liquidityDelta","type":"int256","indexed":false},{"internalType":"bytes32","name":"salt","type":"bytes32","indexed":false}],"type":"event","name":"ModifyLiquidity","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address","indexed":true},{"internalType":"address","name":"operator","type":"address","indexed":true},{"internalType":"bool","name":"approved","type":"bool","indexed":false}],"type":"event","name":"OperatorSet","anonymous":false},{"inputs":[{"internalType":"address","name":"user","type":"address","indexed":true},{"internalType":"address","name":"newOwner","type":"address","indexed":true}],"type":"event","name":"OwnershipTransferred","anonymous":false},{"inputs":[{"internalType":"address","name":"protocolFeeController","type":"address","indexed":true}],"type":"event","name":"ProtocolFeeControllerUpdated","anonymous":false},{"inputs":[{"internalType":"PoolId","name":"id","type":"bytes32","indexed":true},{"internalType":"uint24","name":"protocolFee","type":"uint24","indexed":false}],"type":"event","name":"ProtocolFeeUpdated","anonymous":false},{"inputs":[{"internalType":"PoolId","name":"id","type":"bytes32","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true},{"internalType":"int128","name":"amount0","type":"int128","indexed":false},{"internalType":"int128","name":"amount1","type":"int128","indexed":false},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160","indexed":false},{"internalType":"uint128","name":"liquidity","type":"uint128","indexed":false},{"internalType":"int24","name":"tick","type":"int24","indexed":false},{"internalType":"uint24","name":"fee","type":"uint24","indexed":false}],"type":"event","name":"Swap","anonymous":false},{"inputs":[{"internalType":"address","name":"caller","type":"address","indexed":false},{"internalType":"address","name":"from","type":"address","indexed":true},{"internalType":"address","name":"to","type":"address","indexed":true},{"internalType":"uint256","name":"id","type":"uint256","indexed":true},{"internalType":"uint256","name":"amount","type":"uint256","indexed":false}],"type":"event","name":"Transfer","anonymous":false},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"allowance","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function","name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"burn"},{"inputs":[{"internalType":"Currency","name":"currency","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"clear"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"Currency","name":"currency","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"collectProtocolFees","outputs":[{"internalType":"uint256","name":"amountCollected","type":"uint256"}]},{"inputs":[{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"donate","outputs":[{"internalType":"BalanceDelta","name":"delta","type":"int256"}]},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"stateMutability":"view","type":"function","name":"extsload","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"startSlot","type":"bytes32"},{"internalType":"uint256","name":"nSlots","type":"uint256"}],"stateMutability":"view","type":"function","name":"extsload","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[{"internalType":"bytes32[]","name":"slots","type":"bytes32[]"}],"stateMutability":"view","type":"function","name":"extsload","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[{"internalType":"bytes32[]","name":"slots","type":"bytes32[]"}],"stateMutability":"view","type":"function","name":"exttload","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"}]},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"stateMutability":"view","type":"function","name":"exttload","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"}],"stateMutability":"nonpayable","type":"function","name":"initialize","outputs":[{"internalType":"int24","name":"tick","type":"int24"}]},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function","name":"isOperator","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}]},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"mint"},{"inputs":[{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct ModifyLiquidityParams","name":"params","type":"tuple","components":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}]},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"modifyLiquidity","outputs":[{"internalType":"BalanceDelta","name":"callerDelta","type":"int256"},{"internalType":"BalanceDelta","name":"feesAccrued","type":"int256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"protocolFeeController","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"Currency","name":"currency","type":"address"}],"stateMutability":"view","type":"function","name":"protocolFeesAccrued","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint24","name":"newProtocolFee","type":"uint24"}],"stateMutability":"nonpayable","type":"function","name":"setProtocolFee"},{"inputs":[{"internalType":"address","name":"controller","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"setProtocolFeeController"},{"inputs":[],"stateMutability":"payable","type":"function","name":"settle","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"stateMutability":"payable","type":"function","name":"settleFor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct SwapParams","name":"params","type":"tuple","components":[{"internalType":"bool","name":"zeroForOne","type":"bool"},{"internalType":"int256","name":"amountSpecified","type":"int256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}]},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"swap","outputs":[{"internalType":"BalanceDelta","name":"swapDelta","type":"int256"}]},{"inputs":[{"internalType":"Currency","name":"currency","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"sync"},{"inputs":[{"internalType":"Currency","name":"currency","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"take"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"transferOwnership"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}]},{"inputs":[{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint24","name":"newDynamicLPFee","type":"uint24"}],"stateMutability":"nonpayable","type":"function","name":"updateDynamicLPFee"}],"devdoc":{"kind":"dev","methods":{"approve(address,uint256,uint256)":{"params":{"amount":"The amount of the token.","id":"The id of the token.","spender":"The address of the spender."},"returns":{"_0":"bool True, always"}},"burn(address,uint256,uint256)":{"details":"The id is converted to a uint160 to correspond to a currency address If the upper 12 bytes are not 0, they will be 0-ed out","params":{"amount":"The amount of currency to burn","from":"The address to burn the tokens from","id":"The currency address to burn from ERC6909s, as a uint256"}},"clear(address,uint256)":{"details":"This could be used to clear a balance that is considered dust. Additionally, the amount must be the exact positive balance. This is to enforce that the caller is aware of the amount being cleared."},"collectProtocolFees(address,address,uint256)":{"details":"This will revert if the contract is unlocked","params":{"amount":"The amount of currency to withdraw","currency":"The currency to withdraw","recipient":"The address to receive the protocol fees"},"returns":{"amountCollected":"The amount of currency successfully withdrawn"}},"donate((address,address,uint24,int24,address),uint256,uint256,bytes)":{"details":"Calls to donate can be frontrun adding just-in-time liquidity, with the aim of receiving a portion donated funds. Donors should keep this in mind when designing donation mechanisms.This function donates to in-range LPs at slot0.tick. In certain edge-cases of the swap algorithm, the `sqrtPrice` of a pool can be at the lower boundary of tick `n`, but the `slot0.tick` of the pool is already `n - 1`. In this case a call to `donate` would donate to tick `n - 1` (slot0.tick) not tick `n` (getTickAtSqrtPrice(slot0.sqrtPriceX96)). Read the comments in `Pool.swap()` for more information about this.","params":{"amount0":"The amount of currency0 to donate","amount1":"The amount of currency1 to donate","hookData":"The data to pass through to the donate hooks","key":"The key of the pool to donate to"},"returns":{"delta":"BalanceDelta The delta of the caller after the donate"}},"extsload(bytes32)":{"params":{"slot":"Key of slot to sload"},"returns":{"_0":"The value of the slot as bytes32"}},"extsload(bytes32,uint256)":{"params":{"nSlots":"Number of slots to load into return value","startSlot":"Key of slot to start sloading from"},"returns":{"_0":"List of loaded values."}},"extsload(bytes32[])":{"params":{"slots":"List of slots to SLOAD from."},"returns":{"_0":"List of loaded values."}},"exttload(bytes32)":{"params":{"slot":"Key of slot to tload"},"returns":{"_0":"The value of the slot as bytes32"}},"exttload(bytes32[])":{"params":{"slots":"List of slots to tload"},"returns":{"_0":"List of loaded values"}},"initialize((address,address,uint24,int24,address),uint160)":{"details":"A swap fee totaling MAX_SWAP_FEE (100%) makes exact output swaps impossible since the input is entirely consumed by the fee","params":{"key":"The pool key for the pool to initialize","sqrtPriceX96":"The initial square root price"},"returns":{"tick":"The initial tick of the pool"}},"mint(address,uint256,uint256)":{"details":"The id is converted to a uint160 to correspond to a currency address If the upper 12 bytes are not 0, they will be 0-ed out","params":{"amount":"The amount of currency to mint","id":"The currency address to mint to ERC6909s, as a uint256","to":"The address to mint the tokens to"}},"modifyLiquidity((address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"details":"Poke by calling with a zero liquidityDeltaNote that feesAccrued can be artificially inflated by a malicious actor and integrators should be careful using the value For pools with a single liquidity position, actors can donate to themselves to inflate feeGrowthGlobal (and consequently feesAccrued) atomically donating and collecting fees in the same unlockCallback may make the inflated value more extreme","params":{"hookData":"The data to pass through to the add/removeLiquidity hooks","key":"The pool to modify liquidity in","params":"The parameters for modifying the liquidity"},"returns":{"callerDelta":"The balance delta of the caller of modifyLiquidity. This is the total of both principal, fee deltas, and hook deltas if applicable","feesAccrued":"The balance delta of the fees generated in the liquidity range. Returned for informational purposes"}},"setOperator(address,bool)":{"params":{"approved":"The approval status.","operator":"The address of the operator."},"returns":{"_0":"bool True, always"}},"setProtocolFee((address,address,uint24,int24,address),uint24)":{"params":{"key":"The key of the pool to set a protocol fee for","newProtocolFee":"The fee to set"}},"setProtocolFeeController(address)":{"params":{"controller":"The new protocol fee controller"}},"settle()":{"returns":{"_0":"The amount of currency settled"}},"settleFor(address)":{"params":{"recipient":"The address to credit for the payment"},"returns":{"_0":"The amount of currency settled"}},"swap((address,address,uint24,int24,address),(bool,int256,uint160),bytes)":{"details":"Swapping on low liquidity pools may cause unexpected swap amounts when liquidity available is less than amountSpecified. Additionally note that if interacting with hooks that have the BEFORE_SWAP_RETURNS_DELTA_FLAG or AFTER_SWAP_RETURNS_DELTA_FLAG the hook may alter the swap input/output. Integrators should perform checks on the returned swapDelta.","params":{"hookData":"The data to pass through to the swap hooks","key":"The pool to swap in","params":"The parameters for swapping"},"returns":{"swapDelta":"The balance delta of the address swapping"}},"sync(address)":{"details":"This MUST be called before any ERC20 tokens are sent into the contract, but can be skipped for native tokens because the amount to settle is determined by the sent value. However, if an ERC20 token has been synced and not settled, and the caller instead wants to settle native funds, this function can be called with the native currency to then be able to settle the native currency"},"take(address,address,uint256)":{"details":"Will revert if the requested amount is not available, consider using `mint` insteadCan also be used as a mechanism for free flash loans","params":{"amount":"The amount of currency to withdraw","currency":"The currency to withdraw from the pool manager","to":"The address to withdraw to"}},"transfer(address,uint256,uint256)":{"params":{"amount":"The amount of the token.","id":"The id of the token.","receiver":"The address of the receiver."},"returns":{"_0":"bool True, always, unless the function reverts"}},"transferFrom(address,address,uint256,uint256)":{"params":{"amount":"The amount of the token.","id":"The id of the token.","receiver":"The address of the receiver.","sender":"The address of the sender."},"returns":{"_0":"bool True, always, unless the function reverts"}},"unlock(bytes)":{"details":"The only functions callable without an unlocking are `initialize` and `updateDynamicLPFee`","params":{"data":"Any data to pass to the callback, via `IUnlockCallback(msg.sender).unlockCallback(data)`"},"returns":{"result":"The data returned by the call to `IUnlockCallback(msg.sender).unlockCallback(data)`"}},"updateDynamicLPFee((address,address,uint24,int24,address),uint24)":{"details":"A swap fee totaling MAX_SWAP_FEE (100%) makes exact output swaps impossible since the input is entirely consumed by the fee","params":{"key":"The key of the pool to update dynamic LP fees for","newDynamicLPFee":"The new dynamic pool LP fee"}}},"version":1},"userdoc":{"kind":"user","methods":{"allowance(address,address,uint256)":{"notice":"Spender allowance of an id."},"approve(address,uint256,uint256)":{"notice":"Approves an amount of an id to a spender."},"balanceOf(address,uint256)":{"notice":"Owner balance of an id."},"burn(address,uint256,uint256)":{"notice":"Called by the user to move value from ERC6909 balance"},"clear(address,uint256)":{"notice":"WARNING - Any currency that is cleared, will be non-retrievable, and locked in the contract permanently. A call to clear will zero out a positive balance WITHOUT a corresponding transfer."},"collectProtocolFees(address,address,uint256)":{"notice":"Collects the protocol fees for a given recipient and currency, returning the amount collected"},"donate((address,address,uint24,int24,address),uint256,uint256,bytes)":{"notice":"Donate the given currency amounts to the in-range liquidity providers of a pool"},"extsload(bytes32)":{"notice":"Called by external contracts to access granular pool state"},"extsload(bytes32,uint256)":{"notice":"Called by external contracts to access granular pool state"},"extsload(bytes32[])":{"notice":"Called by external contracts to access sparse pool state"},"exttload(bytes32)":{"notice":"Called by external contracts to access transient storage of the contract"},"exttload(bytes32[])":{"notice":"Called by external contracts to access sparse transient pool state"},"initialize((address,address,uint24,int24,address),uint160)":{"notice":"Initialize the state for a given pool ID"},"isOperator(address,address)":{"notice":"Checks if a spender is approved by an owner as an operator"},"mint(address,uint256,uint256)":{"notice":"Called by the user to move value into ERC6909 balance"},"modifyLiquidity((address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"notice":"Modify the liquidity for the given pool"},"protocolFeeController()":{"notice":"Returns the current protocol fee controller address"},"protocolFeesAccrued(address)":{"notice":"Given a currency address, returns the protocol fees accrued in that currency"},"setOperator(address,bool)":{"notice":"Sets or removes an operator for the caller."},"setProtocolFee((address,address,uint24,int24,address),uint24)":{"notice":"Sets the protocol fee for the given pool"},"setProtocolFeeController(address)":{"notice":"Sets the protocol fee controller"},"settle()":{"notice":"Called by the user to pay what is owed"},"settleFor(address)":{"notice":"Called by the user to pay on behalf of another address"},"swap((address,address,uint24,int24,address),(bool,int256,uint160),bytes)":{"notice":"Swap against the given pool"},"sync(address)":{"notice":"Writes the current ERC20 balance of the specified currency to transient storage This is used to checkpoint balances for the manager and derive deltas for the caller."},"take(address,address,uint256)":{"notice":"Called by the user to net out some value owed to the user"},"transfer(address,uint256,uint256)":{"notice":"Transfers an amount of an id from the caller to a receiver."},"transferFrom(address,address,uint256,uint256)":{"notice":"Transfers an amount of an id from a sender to a receiver."},"unlock(bytes)":{"notice":"All interactions on the contract that account deltas require unlocking. A caller that calls `unlock` must implement `IUnlockCallback(msg.sender).unlockCallback(data)`, where they interact with the remaining functions on this contract."},"updateDynamicLPFee((address,address,uint24,int24,address),uint24)":{"notice":"Updates the pools lp fees for the a pool that has enabled dynamic lp fees."}},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/","@uniswap/v4-core/=lib/v4-core/","ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=lib/v4-core/lib/forge-std/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/","permit2/=lib/permit2/","solmate/=lib/v4-core/lib/solmate/","v4-core/=lib/v4-core/src/"],"optimizer":{"enabled":true,"runs":44444444},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"lib/v4-core/src/PoolManager.sol":"PoolManager"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/v4-core/lib/solmate/src/auth/Owned.sol":{"keccak256":"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea","urls":["bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4","dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx"],"license":"AGPL-3.0-only"},"lib/v4-core/src/ERC6909.sol":{"keccak256":"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f","urls":["bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6","dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q"],"license":"MIT"},"lib/v4-core/src/ERC6909Claims.sol":{"keccak256":"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49","urls":["bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c","dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i"],"license":"MIT"},"lib/v4-core/src/Extsload.sol":{"keccak256":"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce","urls":["bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51","dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU"],"license":"MIT"},"lib/v4-core/src/Exttload.sol":{"keccak256":"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54","urls":["bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c","dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG"],"license":"MIT"},"lib/v4-core/src/NoDelegateCall.sol":{"keccak256":"0xacb81aecb7c74c86650a035462dae38c313b4b7b5842e14b645f864f61da2b51","urls":["bzz-raw://363a0e15fc30ea68a5d52a78772facecde6433ea156e3ec2ce25068c97cd5ad6","dweb:/ipfs/QmYhWaF3wH71SDx5TZr9qEXXQf5FYQvdjoo3B2qWiAbm18"],"license":"MIT"},"lib/v4-core/src/PoolManager.sol":{"keccak256":"0xf9ff5d5e261a21a5e72a01c5badd988beeff437e0f6b82fd56f80be42d727c07","urls":["bzz-raw://4a92a25102c73245e1343f0dbc8400b8bac3c464ba064aa5574b9584a12e6c72","dweb:/ipfs/QmfCcvspZ8XzDeQjEd2FfM76wzkfE9KDgBoqAcqhf3nsnu"],"license":"BUSL-1.1"},"lib/v4-core/src/ProtocolFees.sol":{"keccak256":"0x81362ef1d19670b41cefc2b6f2dc0333b6743fe39a1929edd36bd9b6a1111755","urls":["bzz-raw://de483bbd8bf9a53b9644d7f9a6a6fe77ae527b755cf29e1db8725de89e70c7aa","dweb:/ipfs/Qmex3PcgJGbYsuDNaMXc8mg5fW1DNaPGiNToPpAAzz6GEq"],"license":"MIT"},"lib/v4-core/src/interfaces/IExtsload.sol":{"keccak256":"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43","urls":["bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1","dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"],"license":"MIT"},"lib/v4-core/src/interfaces/IExttload.sol":{"keccak256":"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937","urls":["bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8","dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"],"license":"MIT"},"lib/v4-core/src/interfaces/IHooks.sol":{"keccak256":"0xc131ffa2d04c10a012fe715fe2c115811526b7ea34285cf0a04ce7ce8320da8d","urls":["bzz-raw://3b212358897db5d99c21244d88f97b2e788527552cb430629b472a8cc6289aec","dweb:/ipfs/QmQtwV4dDe2RYk2ErLpaAX7U82jWh1L6Lw2HRuKDvBi84G"],"license":"MIT"},"lib/v4-core/src/interfaces/IPoolManager.sol":{"keccak256":"0xbdab3544da3d32dfdf7457baa94e17d5a3012952428559e013ffac45d067038e","urls":["bzz-raw://ce95ff864468e37c76adf71df061d4f3d6f3a5ec1f9bc3aea090463bc72798f4","dweb:/ipfs/QmSbWh1pLbz51yQF4HEu5NRhr8XVv9JYGEw1hq1HudAnCi"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFees.sol":{"keccak256":"0x32a666e588a2f66334430357bb1e2424fe7eebeb98a3364b1dd16eb6ccca9848","urls":["bzz-raw://85751d302125881f72e5f8af051c2d5d9b1f606ebaea8ca7d04fccdd27cc252d","dweb:/ipfs/QmeRwomeh9NWm6A6fgNA4KZPQZHPpdKsPQyYsHSFmvud7J"],"license":"MIT"},"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol":{"keccak256":"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719","urls":["bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b","dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC20Minimal.sol":{"keccak256":"0xeccadf1bf69ba2eb51f2fe4fa511bc7bb05bbd6b9f9a3cb8e5d83d9582613e0f","urls":["bzz-raw://118757369892687b99ef46ce28d6861f62c098285bd7687a4f17f7e44e5f81de","dweb:/ipfs/QmUxqbYqQtcEwwFbb9e6BBMePEaSgN8C45v6RKubD4ib8d"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC6909Claims.sol":{"keccak256":"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48","urls":["bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f","dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"],"license":"MIT"},"lib/v4-core/src/libraries/BitMath.sol":{"keccak256":"0x51b9be4f5c4fd3e80cbc9631a65244a2eb2be250b6b7f128a2035080e18aee8d","urls":["bzz-raw://fe98bbd5498e912146b9319827fc63621eb66ff55d5baae0fa02a7a972ab8d1e","dweb:/ipfs/QmY5hCuyrtgsJtk4AavrxcvBkRrChfr4N6ZnhdC8roPpNi"],"license":"MIT"},"lib/v4-core/src/libraries/CurrencyDelta.sol":{"keccak256":"0x80dbd898cf0f90c5c27192689b16c34edc765d6ab21b8358e3bb792c7fef238c","urls":["bzz-raw://107698da024313f132d9fe28deb920b5c03d14624889c3ce5720e588f03635bb","dweb:/ipfs/QmQteUbhj5SsWbvSF6U8niBUSrETqVbEwULc8E7vS4Kbnn"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CurrencyReserves.sol":{"keccak256":"0x1576616129933fcdf3b684cea33cffd9c95e18fafbd2832a8c48ac3d8526d4c3","urls":["bzz-raw://33b050efb9b81803b18f562271e7cca2ec5362c4d505860d6419b4a345636725","dweb:/ipfs/QmQtFtTwKZ5pFVGD2ENDUXvp7ECFvzqeCuJ1miJcUHdmiX"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CustomRevert.sol":{"keccak256":"0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de","urls":["bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd","dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt"],"license":"MIT"},"lib/v4-core/src/libraries/FixedPoint128.sol":{"keccak256":"0xad236e10853f4b4b20a35a9bb52b857c4fc79874846b7e444e06ead7f2630542","urls":["bzz-raw://0de1f9a06520b1a689660943faa14fc0b8344ab41fab9e6012ea34bff4b9b3eb","dweb:/ipfs/QmRNMPTyko7W6d6KxuTsnDBa9oZgDK4xiwRRq3H9ASTbwy"],"license":"MIT"},"lib/v4-core/src/libraries/FixedPoint96.sol":{"keccak256":"0xef5c3fd41aee26bb12aa1c32873cfee88e67eddfe7c2b32283786265ac669741","urls":["bzz-raw://4de298d02f662a1c36c7be0a150f18c2a161408a5d3e48432e707efd01fac9a4","dweb:/ipfs/QmSiM4oeMmLVKmAtJXz2feYkv4R9ZcyBpkTRW5Nhw5KDyJ"],"license":"MIT"},"lib/v4-core/src/libraries/FullMath.sol":{"keccak256":"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2","urls":["bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52","dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC"],"license":"MIT"},"lib/v4-core/src/libraries/Hooks.sol":{"keccak256":"0xd679b4b2d429689bc44f136050ebc958fb2d7d0d3a3c7b3e48c08ab4fba09aaa","urls":["bzz-raw://287190cb72840e5eb63cc7a8a1d0b9150af17d8e4ea0323f47c7e7928f2033cb","dweb:/ipfs/QmVfqWBnAQM2jUcuREDdvjcP21gNuLU35CoL3NG5CEhNcx"],"license":"MIT"},"lib/v4-core/src/libraries/LPFeeLibrary.sol":{"keccak256":"0xbf6914e01014e7c1044111feb7df7a3d96bb503b3da827ad8464b1955580d13b","urls":["bzz-raw://33823c20a91882c9aacdcbb02f0558c05209f4d5954aa6dd4fa17c95664db475","dweb:/ipfs/QmR7owkFgpfztpp1QUg3ut3nw9iPVQqLGP4hzgmZtRUQ2J"],"license":"MIT"},"lib/v4-core/src/libraries/LiquidityMath.sol":{"keccak256":"0x000ef2eadcc1eb7b2c18a77655f94e76e0e860f605783484657ef65fd6eda353","urls":["bzz-raw://a766b620a7a22798b43c6c1f23b5c6cff0ebf588deb89842bad05208d448cd99","dweb:/ipfs/QmVKjaFJdzkqA3ey2Byum8iTCMssWVD8MmVC8rw62Tj5WD"],"license":"MIT"},"lib/v4-core/src/libraries/Lock.sol":{"keccak256":"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5","urls":["bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c","dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/NonzeroDeltaCount.sol":{"keccak256":"0x0666ebd5d3528d7d52c48538296367a4cff97a578cf13365c51983fae3219b87","urls":["bzz-raw://d27f1be3bd09d85c53d3e6a539dd6529ddd8b2b764ccb47fd7765fc81f9add59","dweb:/ipfs/QmQdZujNXhKEXQBkKtF5jbdvo1yXMqPDUoBBaF9S5u3Kpm"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ParseBytes.sol":{"keccak256":"0x7533b13f53ee2c2c55500100b22ffd6e37e7523c27874edc98663d53a8672b15","urls":["bzz-raw://82449058634fde28a085f3c59a6a5f412550c02181590593fd84c3e8b329aa17","dweb:/ipfs/Qmev4E9Au6SsE4wsArChCwfg94KhHc5gYsEsZUnjF5sRLa"],"license":"MIT"},"lib/v4-core/src/libraries/Pool.sol":{"keccak256":"0xb8191707c5913f5e2f589cec5167e3fac4a5b86bd84f61fdba0fbe6a8ce8a3a0","urls":["bzz-raw://a609f9c365f05becf61877d9dc767e7825bce8c34607dbfc0f0437a71f6ff407","dweb:/ipfs/QmThDUzLePs2Hbp6XTpRSHT67rdsjQLhdmS6krm8cpKSey"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/Position.sol":{"keccak256":"0xddab2a831f1befb6abf5567e77c4582169ca8156cf69eb4f22d8e87f7226a3f9","urls":["bzz-raw://c79fe61b50f3b70cff503abfa6f5643fcbefb9b794855bee1019b1e6d9c083b2","dweb:/ipfs/QmbKmYNQesaMz8bo1b7TMHQcAwaDd3eDPrE5pAdPPZTtk5"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol":{"keccak256":"0xf483001899229ab10f5a626fe1c5866134d9e965b48ce6cf55ce0d7f74f7d8ec","urls":["bzz-raw://6ba9211a7f69bbb44649c35211eb29d193c09032ec600064ef9d04b4625dd8ba","dweb:/ipfs/QmQSjQvtguYgMJSkkKRhHjxasfX9xfTbrbcZ1QmjUVb787"],"license":"MIT"},"lib/v4-core/src/libraries/SafeCast.sol":{"keccak256":"0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86","urls":["bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59","dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj"],"license":"MIT"},"lib/v4-core/src/libraries/SqrtPriceMath.sol":{"keccak256":"0xf8079fe6e3460db495451d06b1705e18f1c4075c1af96a31ad313545f7082982","urls":["bzz-raw://582fc51546723a0a8acccf782f69b530bacf9b3ef929458e82569b7121f0b138","dweb:/ipfs/QmSBXcmqZdFsM7M4sRaiyQAxykCeMNFKyKgBcwSMTw1bcF"],"license":"MIT"},"lib/v4-core/src/libraries/SwapMath.sol":{"keccak256":"0x6baa782ae523269c079cc763639a9b91a25fcfa1743c049c76e43741ef494bd9","urls":["bzz-raw://035c337e62e05262a5bd5d3bc85bc9a383c1013001216b429f49cf1e129a0812","dweb:/ipfs/QmU7s4h58Fh2A6mM8yeorZ2ygwEJMQw8zdZLLkHeDoSWxD"],"license":"MIT"},"lib/v4-core/src/libraries/TickBitmap.sol":{"keccak256":"0x6779f89e28a0b4af6e09d518caf014b7e8fc627400f5561f86fed11635b1458a","urls":["bzz-raw://a64dee983106de3be3f968be94368c1e37592f5418aa2a39e8dd358d5a962b0d","dweb:/ipfs/QmYuECZTiEeQVxDLYx6pBSSnVrg56Apw75bugQiM3FmGwy"],"license":"MIT"},"lib/v4-core/src/libraries/TickMath.sol":{"keccak256":"0x4e1a11e154eb06106cb1c4598f06cca5f5ca16eaa33494ba2f0e74981123eca8","urls":["bzz-raw://a79a57f7b240783b045168d1c4f774ac1812caf8f9a83cb6959a86b0b07b6c70","dweb:/ipfs/QmTb5kvxwDNW8jDuQaqdJ445cCFejNkUqEB17Bjo8UBiva"],"license":"MIT"},"lib/v4-core/src/libraries/UnsafeMath.sol":{"keccak256":"0xa6e55e0a43a15df2df471d9972cd48f613d07c663ecb8bbeaf7623f6f99bcce4","urls":["bzz-raw://02ea6e13879fc5a5f35149a2f1cd8af3a1f0877ff69101dad53841d16f515572","dweb:/ipfs/QmcpL4gdG6hL2w1wqs2Vw4J1EFCwBs9T1Qd4p16CtECQkn"],"license":"MIT"},"lib/v4-core/src/types/BalanceDelta.sol":{"keccak256":"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f","urls":["bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9","dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"],"license":"MIT"},"lib/v4-core/src/types/BeforeSwapDelta.sol":{"keccak256":"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78","urls":["bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782","dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"],"license":"MIT"},"lib/v4-core/src/types/Currency.sol":{"keccak256":"0x4a0b84b282577ff6f8acf13ec9f4d32dbb9348748b49611d00e68bee96609c93","urls":["bzz-raw://45f9d62ab3d51b52957279e353853ba1547c3182c9a1e3d1846ada4a90263b01","dweb:/ipfs/QmS8NG84ccQS1yXVD8cv3eKX7J1UKxuJhbUfHTQR2opKF5"],"license":"MIT"},"lib/v4-core/src/types/PoolId.sol":{"keccak256":"0x308311916ea0f5c2fd878b6a2751eb223d170a69e33f601fae56dfe3c5d392af","urls":["bzz-raw://669c2cd7ac17690b5d8831e0bda72822376c3a04b36afed6d31df4d75fe60918","dweb:/ipfs/QmT6EpkxqU8VF3WsgrZ66F3s1cCQRffR95z1HDYZz7ph6y"],"license":"MIT"},"lib/v4-core/src/types/PoolKey.sol":{"keccak256":"0xf89856e0580d7a4856d3187a76858377ccee9d59702d230c338d84388221b786","urls":["bzz-raw://6f3118fa189025695c37fdf0bdd1190f085ad097484d3c88cf4c56d1db65f639","dweb:/ipfs/QmamXpgtB8GV1CaFLvqefPWSoikLDhMk1yU4heBnVzU8gi"],"license":"MIT"},"lib/v4-core/src/types/PoolOperation.sol":{"keccak256":"0x7a1a107fc1f2208abb2c9364c8c54e56e98dca27673e9441bed2b949b6382162","urls":["bzz-raw://4ad2470383bc5595d5af17840c64971f457adac68895a4db41ba5c71a4478e07","dweb:/ipfs/QmdwKhBHDZFuqXrR2BfDBD9r7rB2ULGQBznsajRTkTmL4c"],"license":"MIT"},"lib/v4-core/src/types/Slot0.sol":{"keccak256":"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b","urls":["bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8","dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C"],"license":"MIT"}},"version":1},"id":41}