@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 561 kB
JSON
{"abi":[{"type":"receive","stateMutability":"payable"},{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"REMOVE_LIQUIDITY_PARAMS","inputs":[],"outputs":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"SWAP_PARAMS","inputs":[],"outputs":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSelectors","inputs":[],"outputs":[{"name":"excludedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzArtifactSelector[]","components":[{"name":"artifact","type":"string","internalType":"string"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetInterfaces","inputs":[],"outputs":[{"name":"targetedInterfaces_","type":"tuple[]","internalType":"struct StdInvariant.FuzzInterface[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"artifacts","type":"string[]","internalType":"string[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"test_dynamicReturnSwapFee_initializeZeroSwapFee","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_dynamicReturnSwapFee_notStored","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_dynamicReturnSwapFee_notUsedIfPoolIsStaticFee","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_dynamicReturnSwapFee_revertIfLPFeeTooLarge","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_dynamicReturnSwapFee","inputs":[{"name":"fee","type":"uint24","internalType":"uint24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_returnDynamicSwapFee_beforeSwap_succeeds_gas","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Swap","inputs":[{"name":"poolId","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":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60806040523461017657600160ff19600c541617600c55600160ff19601f541617601f555f606061002e61017a565b607719815260786020820152670de0b6b3a7640000604082015201526378ffff8865ffffffffffff196020541617602055670de0b6b3a76400006021555f6022555f606061007a61017a565b607719815260786020820152670de0b6b3a763ffff19604082015201526378ffff8865ffffffffffff196023541617602355670de0b6b3a763ffff196024555f6025556040516060810181811060018060401b038211176101625760409081526001808352606319602084018190526bb504f333f9de6484597d89b39383018490526026805460ff1916909217909155602755602880546001600160a01b03199081169093179055604280548316600e179055604380548316614000600160a01b0317905560448054909216613f80600160a01b0317909155516201b52990816200019a8239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b60405190608082016001600160401b038111838210176101625760405256fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c9081630a9254e414611df8575080631ed7831c14611d4f5780632ade388014611b2357806339cd201314611ac25780633e5e3c2314611a195780633f7286f414611970578063542524dd146119215780635a6e5cc7146114b857806366d9a9a01461135d57806385226c81146112b5578063916a17c6146111e057806393ad73ed1461117b5780639dbf1e6e14610cdf578063ae8706e614610842578063b0464fdc1461076d578063b1a73b8a14610705578063b5508aa91461065d578063ba414fa61461061a578063be50bb601461048b578063c7b8e15d1461044b578063d436ca74146103fc578063e20c9f7114610343578063e7b2b1a61461016f5763fa7626d40361000f573461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57602060ff601f54166040519015158152f35b80fd5b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c576101b66101b16101ac6130c8565b61377a565b6138bf565b8073ffffffffffffffffffffffffffffffffffffffff60445416803b1561032b578180916024604051809481937feabb5622000000000000000000000000000000000000000000000000000000008352620f424160048401525af180156103205761032e575b506040517f14002113000000000000000000000000000000000000000000000000000000006020820152620f424160248201526024815261025e604482612f44565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561032b57816102b991604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190612d53565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af180156103205761030b575b506103076040516102f0602082612f44565b8281525f3660208301376103026130c8565b613935565b5080f35b8161031591612f44565b61016c57805f6102de565b6040513d84823e3d90fd5b50fd5b8161033891612f44565b61016c57805f61021c565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106103d0576103cc856103c081870382612f44565b60405191829182612d04565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016103a9565b503461016c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5760043562ffffff8116810361044757610444906134c6565b80f35b5080fd5b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c575060206401000276a4604051908152f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57771e00000000000000000000000000000000000000000000007fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff603754161760375580602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe0000000000000000000000000000000000000000000000000000000083526105be6004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b6c0100000000000000000000000060a48401525af18015610320576105ed575b506104446101b16101ac6130c8565b61060e9060203d602011610613575b6106068183612f44565b8101906130a0565b6105de565b503d6105fc565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5760206106536133ed565b6040519015158152f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5760195461069881612f85565b916106a66040519384612f44565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b8383106106e857604051806103cc8782612deb565b6001602081926106f785612f9d565b8152019201920191906106d3565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57606060ff6026541660275473ffffffffffffffffffffffffffffffffffffffff6028541690604051921515835260208301526040820152f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57601c546107a881612f85565b916107b66040519384612f44565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b8383106107f857604051806103cc8782612e68565b6002602060019260405161080b81612f0c565b73ffffffffffffffffffffffffffffffffffffffff8654168152610830858701613149565b838201528152019201920191906107e3565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57750bb800000000000000000000000000000000000000007fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff60375416176037558073ffffffffffffffffffffffffffffffffffffffff60445416803b1561032b578180916024604051809481937feabb56220000000000000000000000000000000000000000000000000000000083526103e860048401525af1801561032057610cca575b505073ffffffffffffffffffffffffffffffffffffffff6029541673ffffffffffffffffffffffffffffffffffffffff602a541673ffffffffffffffffffffffffffffffffffffffff604454169061096c613750565b50610975613750565b506040519261098384612f28565b83526020830152610bb86040830152603c6060830152608082015260a0812082602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe000000000000000000000000000000000000000000000000000000008352610a41600484018a73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6c0100000000000000000000000060a48401525af18015610ca057610cab575b505073ffffffffffffffffffffffffffffffffffffffff602c541690610b856020809360405190610a928383612f44565b868252610b445f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0850196873687870137604051968795869485937f5a6bcfda000000000000000000000000000000000000000000000000000000008552600485019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b610b7160a484016020548060020b825260181c60020b602082015260215460408201526060602254910152565b610140610124840152610144830190612d53565b03925af18015610ca057610c73575b5082610ba16101ac6130c8565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561044757604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152610bb860248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561032057610c5a575b50610444610c3e848460405191610c2e8184612f44565b85835236908301376103026130c8565b610c4d8160801d600f0b613c0d565b6126f25b90600f0b613b90565b81610c6491612f44565b610c6f57825f610c17565b8280fd5b610c9290833d8511610c99575b610c8a8183612f44565b8101906130b9565b505f610b94565b503d610c80565b6040513d86823e3d90fd5b610cc39060203d602011610613576106068183612f44565b505f610a61565b81610cd491612f44565b61016c57805f610916565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57610d1c6101b16101ac6130c8565b8073ffffffffffffffffffffffffffffffffffffffff60445416803b1561032b578180916024604051809481937feabb5622000000000000000000000000000000000000000000000000000000008352607b60048401525af1801561032057611166575b5050604051610d8e81612f0c565b8181528160208201528173ffffffffffffffffffffffffffffffffffffffff602b5416737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561044757604051907f81bad6f3000000000000000000000000000000000000000000000000000000008252600160048301526001602483015260016044830152600160648301526084820152818160a48183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561032057611151575b505061104d60a0610e4b6130c8565b2073ffffffffffffffffffffffffffffffffffffffff602f541680917f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f60c06040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c8152606260208201526bfffffffffffff8ddc5b7dbb06040820152670de0b6b3a764000060608201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6080820152607b60a0820152a360209283916110398660405193610f1c8686612f44565b8185527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086013687870137604051968795869485937f2229d0b4000000000000000000000000000000000000000000000000000000008552610fee6004860173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b60265460ff16151560a486015260275460c486015260285473ffffffffffffffffffffffffffffffffffffffff1660e486015280511515610104860152602001511515610124850152565b610160610144840152610164830190612d53565b03925af1801561111857611123575b50604051907fdd9fca12000000000000000000000000000000000000000000000000000000008252806004830152601c60248301527f7377617020776974682072657475726e2064796e616d696320666565000000006044830152808260648186737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015611118576110ee575b826104446101b16101ac6130c8565b81813d8311611111575b6111028183612f44565b8101031261044757515f6110df565b503d6110f8565b6040513d85823e3d90fd5b8181813d831161114a575b6111388183612f44565b81010312611146575161105c565b5f80fd5b503d61112e565b8161115b91612f44565b61044757815f610e3c565b8161117091612f44565b61016c57805f610d80565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c576020805460215460225460408051600285810b825260189590951c90940b94840194909452928201526060810191909152608090f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57601d5461121b81612f85565b916112296040519384612f44565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b83831061126b57604051806103cc8782612e68565b6002602060019260405161127e81612f0c565b73ffffffffffffffffffffffffffffffffffffffff86541681526112a3858701613149565b83820152815201920192019190611256565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57601a546112f081612f85565b916112fe6040519384612f44565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061134057604051806103cc8782612deb565b60016020819261134f85612f9d565b81520192019201919061132b565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57601b5461139881612f85565b6113a56040519182612f44565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b83831061147d57868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061141257505050500390f35b9193602061146d827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc060019597998495030186528851908361145d8351604084526040840190612d53565b9201519084818403910152612d96565b9601920192018594939192611403565b6002602060019260405161149081612f0c565b61149986612f9d565b81526114a6858701613149565b838201528152019201920191906113d5565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57771e00000000000000000000000000000000000000000000007fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff603754161760375580602073ffffffffffffffffffffffffffffffffffffffff602b541660c4604051809481937f6276cbbe0000000000000000000000000000000000000000000000000000000083526115eb6004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b6c0100000000000000000000000060a48401525af1801561032057611904575b5073ffffffffffffffffffffffffffffffffffffffff602c5416602090828261170e6040519361163b8386612f44565b8385527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301948536858301376040519485809481937f5a6bcfda000000000000000000000000000000000000000000000000000000008352610b446004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b03925af18015610ca0576118da575b508273ffffffffffffffffffffffffffffffffffffffff60445416803b156104475781809160c4604051809481937f2abcd1b10000000000000000000000000000000000000000000000000000000083526117e86004840173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b607b60a48401525af18015610320576118c5575b505061181161180c6101ac6130c8565b61383e565b8273ffffffffffffffffffffffffffffffffffffffff60445416803b15610447578180916024604051809481937feabb5622000000000000000000000000000000000000000000000000000000008352610bb860048401525af18015610320576118b0575b506118a261188d848460405191610c2e8184612f44565b600f0b61189c620f3688613b02565b90613b90565b61044461180c6101ac6130c8565b816118ba91612f44565b610c6f57825f611876565b816118cf91612f44565b610c6f57825f6117fc565b8281813d83116118fd575b6118ef8183612f44565b81010312611146575161171d565b503d6118e5565b61191c9060203d602011610613576106068183612f44565b61160b565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5750602073fffd8963efd1fc6a506488495d951d5263988d25604051908152f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b8181106119ed576103cc856103c081870382612f44565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016119d6565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b818110611a96576103cc856103c081870382612f44565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611a7f565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5760235460245460255460408051600285810b825260189590951c90940b60208501528301919091526060820152608090f35b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c57601e54611b5e81612f85565b611b6b6040519182612f44565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b838310611cb95786858760405192839260208401906020855251809152604084019160408260051b8601019392815b838310611bd75786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b828110611c7057505050505060208060019297019301930190928695949293611bca565b9091929394602080611cac837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951612d53565b9701950193929101611c4c565b604051611cc581612f0c565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054611cee81612f85565b91611cfc6040519384612f44565b8183528a526020808b20908b9084015b838210611d32575050505060019282602092836002950152815201920192019190611b9b565b600160208192611d4186612f9d565b815201930191019091611d0c565b503461016c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016c5760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110611dcc576103cc856103c081870382612f44565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611db5565b905034611146575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126111465761092f80820182811067ffffffffffffffff821117612cd75782916200db7c833903905ff08015612ccc5773ffffffffffffffffffffffffffffffffffffffff8060445416911690813b67ffffffffffffffff8111612cd7575f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160193611eb96040519586612f44565b82855260208501903c737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561114657611f24915f9160405193849283927fb4d6c7820000000000000000000000000000000000000000000000000000000084526004840152604060248401526044830190612d53565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612ccc57612cb9575b50604051615e828082019082821067ffffffffffffffff831117612c8c576020918391620054af833930815203019082f08015612c525773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff0000000000000000000000000000000000000000602b541617602b5560405190611bb9908183019183831067ffffffffffffffff841117612c5f5791839160209362017cd38439815203019082f08015612c525773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602f541617602f5573ffffffffffffffffffffffffffffffffffffffff602b541660405190610d6f908183019183831067ffffffffffffffff841117612c5f579183916020936201a7ae8439815203019082f08015612c525773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602e541617602e5573ffffffffffffffffffffffffffffffffffffffff602b541660405190611835908183019183831067ffffffffffffffff841117612c5f57918391602093620103b58439815203019082f08015612c525773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602c541617602c5573ffffffffffffffffffffffffffffffffffffffff602b541660405190611315908183019183831067ffffffffffffffff841117612c5f5791839160209362011bea8439815203019082f08015612c525773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000602d541617602d5573ffffffffffffffffffffffffffffffffffffffff602b5416604051906112d2908183019183831067ffffffffffffffff841117612c5f579183916020936200f0e38439815203019082f08015612c525773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603054161760305573ffffffffffffffffffffffffffffffffffffffff602b541660405190610f22908183019183831067ffffffffffffffff841117612c5f579183916020936201988c8439815203019082f08015612c525773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603154161760315573ffffffffffffffffffffffffffffffffffffffff602b541660405190610c38908183019183831067ffffffffffffffff841117612c5f579183916020936200e4ab8439815203019082f08015612c525773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000603354161760335573ffffffffffffffffffffffffffffffffffffffff602b541660405190614dd4908183019183831067ffffffffffffffff841117612c5f5791839160209362012eff8439815203019082f08015612c525773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000006034541617603455604080516124358282612f44565b600d815282602082017f666565436f6e74726f6c6c65720000000000000000000000000000000000000081528351600d6020820192835e82602d820152600d8152612481602d82612f44565b5190208351907fffa186490000000000000000000000000000000000000000000000000000000082526004820152602081602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115612bf9578291612c03575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610447578173ffffffffffffffffffffffffffffffffffffffff61255292865193849283927fc657c71800000000000000000000000000000000000000000000000000000000845216968760048401528860248401526044830190612d53565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015612bf957612be4575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000603554161760355573ffffffffffffffffffffffffffffffffffffffff602b541681519061284b908183019183831067ffffffffffffffff841117612bb7579183916020936200b3318439815203019083f08015612bac5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff000000000000000000000000000000000000000060325416176032558173ffffffffffffffffffffffffffffffffffffffff602b541673ffffffffffffffffffffffffffffffffffffffff60355416813b15610c6f57829160248392865194859384927f2d77138900000000000000000000000000000000000000000000000000000000845260048401525af18015612b8a57612b97575b5073ffffffffffffffffffffffffffffffffffffffff6044541673ffffffffffffffffffffffffffffffffffffffff602b5416813b15610c6f57829160248392865194859384927fd0ebdbe700000000000000000000000000000000000000000000000000000000845260048401525af18015612b8a57612b75575b5050612733613ce4565b73ffffffffffffffffffffffffffffffffffffffff80612751613ce4565b9216911680821015612b585773ffffffffffffffffffffffffffffffffffffffff80915b1691827fffffffffffffffffffffffff0000000000000000000000000000000000000000602a541617602a5516807fffffffffffffffffffffffff0000000000000000000000000000000000000000602954161760295573ffffffffffffffffffffffffffffffffffffffff60445416916127ee613750565b506127f7613750565b5083519161280483612f28565b825260208201908152838201906280000082526060830192603c84526080810194855260a0812087602073ffffffffffffffffffffffffffffffffffffffff602b541660c48a51809481937f6276cbbe0000000000000000000000000000000000000000000000000000000083526128c9600484018a73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b6c0100000000000000000000000060a48401525af18015612b2f57612b39575b50506129c65f73ffffffffffffffffffffffffffffffffffffffff602c541660209283918a516129198482612f44565b8c81527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840136858301378b519485809481937f5a6bcfda000000000000000000000000000000000000000000000000000000008352610b44600484018c73ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b03925af18015612b2f5773ffffffffffffffffffffffffffffffffffffffff985091889493918593612b11575b505051167fffffffffffffffffffffffff0000000000000000000000000000000000000000603654161760365551167fffffffffffffffffffffffff00000000000000000000000000000000000000006037541617603755517fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff76ffffff0000000000000000000000000000000000000000806037549360a01b1616911617603755517fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff6037549160b81b60190b79ffffff00000000000000000000000000000000000000000000001691161760375551167fffffffffffffffffffffffff0000000000000000000000000000000000000000603854161760385580f35b81612b2792903d10610c9957610c8a8183612f44565b505f806129f3565b88513d8b823e3d90fd5b612b519060203d602011610613576106068183612f44565b505f6128e9565b9073ffffffffffffffffffffffffffffffffffffffff8091612775565b81612b7f91612f44565b61044757815f612729565b50505051903d90823e3d90fd5b81612ba191612f44565b61044757815f6126ad565b5051903d90823e3d90fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b81612bee91612f44565b610c6f57825f612577565b84513d84823e3d90fd5b90506020813d602011612c4a575b81612c1e60209383612f44565b81010312610447575173ffffffffffffffffffffffffffffffffffffffff81168103610447575f6124da565b3d9150612c11565b50604051903d90823e3d90fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b612cc591505f90612f44565b5f80611f49565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60206040818301928281528451809452019201905f5b818110612d275750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101612d1a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602080835192838152019201905f5b818110612db35750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101612da6565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310612e1d57505050505090565b9091929394602080612e59837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951612d53565b97019301930191939290612e0e565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310612e9a57505050505090565b9091929394602080612efd837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190612d96565b97019301930191939290612e8b565b6040810190811067ffffffffffffffff821117612cd757604052565b60a0810190811067ffffffffffffffff821117612cd757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612cd757604052565b67ffffffffffffffff8111612cd75760051b60200190565b90604051915f8154908160011c9260018316928315613096575b6020851084146130695784875286939081156130295750600114612fe5575b50612fe392500383612f44565b565b90505f9291925260205f20905f915b81831061300d575050906020612fe3928201015f612fd6565b6020919350806001915483858901015201910190918492612ff4565b60209350612fe39592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f612fd6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f1693612fb7565b9081602091031261114657518060020b81036111465790565b90816020910312611146575190565b604051906130d582612f28565b8173ffffffffffffffffffffffffffffffffffffffff60365416815260375473ffffffffffffffffffffffffffffffffffffffff8116602083015262ffffff8160a01c16604083015260b81c60020b6060820152608073ffffffffffffffffffffffffffffffffffffffff60385416910152565b90604051918281549182825260208201905f5260205f20925f905b80600783011061336057612fe394549181811061332a575b8181106132f4575b8181106132be575b818110613288575b818110613252575b81811061321c575b8181106131e7575b106131ba575b500383612f44565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020015f6131b2565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b1681520193016131ac565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b1681520193016131a4565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b16815201930161319c565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301613194565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b16815201930161318c565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301613184565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b16815201930161317c565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391613164565b60085460ff1680156133fc5790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115612ccc575f91613494575b50151590565b90506020813d6020116134be575b816134af60209383612f44565b8101031261114657515f61348e565b3d91506134a2565b6044549073ffffffffffffffffffffffffffffffffffffffff5f9216803b15611146575f80916024604051809481937feabb562200000000000000000000000000000000000000000000000000000000835262ffffff881660048401525af18015612ccc57613738575b5062bfffff16620f42408111801561363d5750604051907f14002113000000000000000000000000000000000000000000000000000000006020830152602482015260248152613581604482612f44565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561044757816135dc91604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190612d53565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561032057613628575b5060405161362591613614602083612f44565b81525f3660208301376103026130c8565b50565b613633828092612f44565b61016c575f613601565b60405192939261366490613652602082612f44565b8581525f3660208301376103026130c8565b918260801d600f0b9161367683613c0d565b156136e257507fffffffffffffffffffffffffffffffff8000000000000000000000000000000081146136b557612fe3929303600f0b90600f0b613b90565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b92939192620f42400391905062ffffff821161370b575090610c5162ffffff612fe39316613b02565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526011600452fd5b6137459192505f90612f44565b5f9062bfffff613530565b6040519061375d82612f28565b5f6080838281528260208201528260408201528260608201520152565b60a09020602073ffffffffffffffffffffffffffffffffffffffff602b54169160405182810191825260066040820152604081526137b9606082612f44565b5190206024604051809481937f1e2eaeaf00000000000000000000000000000000000000000000000000000000835260048301525afa8015612ccc575f90613809575b62ffffff915060d01c1690565b506020813d602011613836575b8161382360209383612f44565b810103126111465762ffffff90516137fc565b3d9150613816565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561114657604051907f98296c540000000000000000000000000000000000000000000000000000000082526004820152607b60248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612ccc576138b55750565b5f612fe391612f44565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561114657604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201525f60248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612ccc576138b55750565b73ffffffffffffffffffffffffffffffffffffffff8151161580613afd575b15613af7576127105b73ffffffffffffffffffffffffffffffffffffffff602f54166401000276a49360405192606084019484861067ffffffffffffffff871117612cd757613ab3613a869360209760405260018752611039888801997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f08b526040890190815273ffffffffffffffffffffffffffffffffffffffff604051916139fd83612f0c565b5f83525f8c8401526040519c8d9b8c9a8b997f2229d0b4000000000000000000000000000000000000000000000000000000008b5260048b019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b51151560a48901525160c4880152511660e486015280511515610104860152602001511515610124850152565b03925af1908115612ccc575f91613ac8575090565b90506020813d602011613aef575b81613ae360209383612f44565b81010312611146575190565b3d9150613ad6565b5f61395d565b613954565b80612710027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261271009818082109103908082039182620f424011156111465714613b8557620f42407fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c26139936127100990828211900360fa1b910360061c170290565b50620f424091500490565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561114657604051917f16d207c600000000000000000000000000000000000000000000000000000000835260048301526024820152600160448201525f81606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612ccc576138b55750565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561114657604051907ffe74f05b00000000000000000000000000000000000000000000000000000000825260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f060248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa8015612ccc576138b55750565b8051821015613cb75760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b60408051613cf28282612f44565b6001815260208101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe083013683376113256200418a5f5b60ff81166001811015613e9e57865184810181811067ffffffffffffffff821117612cd75781908686833960608082526004908201527f5445535400000000000000000000000000000000000000000000000000000000608082015260128a613dc960a084018481036020860152604090600481527f544553540000000000000000000000000000000000000000000000000000000060208201520190565b92015203905ff08015613e945781613e059173ffffffffffffffffffffffffffffffffffffffff613dfb81958a613ca3565b9116905286613ca3565b5116803b15611146575f809160448951809481937f40c10f190000000000000000000000000000000000000000000000000000000083523060048401527f800000000000000000000000000000000000000000000000000000000000000060248401525af18015613e94579160019160ff93613e84575b500116613d2a565b5f613e8e91612f44565b5f613e7c565b87513d5f823e3d90fd5b505050505115613cb7578073ffffffffffffffffffffffffffffffffffffffff915051168151610120810181811067ffffffffffffffff821117612cd757835273ffffffffffffffffffffffffffffffffffffffff602f5416815273ffffffffffffffffffffffffffffffffffffffff602e5416602082015273ffffffffffffffffffffffffffffffffffffffff602c54168382015273ffffffffffffffffffffffffffffffffffffffff602d5416606082015273ffffffffffffffffffffffffffffffffffffffff60305416608082015273ffffffffffffffffffffffffffffffffffffffff6031541660a082015273ffffffffffffffffffffffffffffffffffffffff6033541660c08201526004602073ffffffffffffffffffffffffffffffffffffffff603454168551928380927fc34c08e50000000000000000000000000000000000000000000000000000000082525afa801561417f575f9061411c575b73ffffffffffffffffffffffffffffffffffffffff91501660e082015273ffffffffffffffffffffffffffffffffffffffff603254166101008201525f5b60098110156141155773ffffffffffffffffffffffffffffffffffffffff8160051b830151168451907f095ea7b300000000000000000000000000000000000000000000000000000000825260048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201526020816044815f885af1801561410b576140d4575b5060010161403f565b6020813d8211614103575b816140ec60209383612f44565b81010312611146575180151503611146575f6140cb565b3d91506140df565b85513d5f823e3d90fd5b5050905090565b506020813d602011614177575b8161413660209383612f44565b81010312611146575173ffffffffffffffffffffffffffffffffffffffff811681036111465773ffffffffffffffffffffffffffffffffffffffff90614001565b3d9150614129565b84513d5f823e3d90fdfe60e0806040523461040657611325803803809161001c828561040a565b83398101906060818303126104065780516001600160401b038111610406578261004791830161042d565b60208201519092906001600160401b0381116104065760409161006b91840161042d565b91015160ff811681036104065782516001600160401b038111610337576100925f54610482565b601f81116103b7575b506020601f821160011461035657819293945f9261034b575b50508160011b915f199060031b1c1916175f555b81516001600160401b038111610337576100e3600154610482565b601f81116102d4575b50602092601f821160011461027357928192935f92610268575b50508160011b915f199060031b1c1916176001555b6080524660a0526040515f905f54918161013484610482565b9182825260208201946001811690815f1461024c5750600114610202575b61015e9250038261040a565b51902060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a081526101d260c08261040a565b51902060c052604051610e4a90816104bb823960805181610865015260a05181610ca8015260c05181610cce0152f35b505f80805290915f805160206113058339815191525b81831061023057505090602061015e92820101610152565b6020919350806001915483858801015201910190918392610218565b60ff191686525061015e92151560051b82016020019050610152565b015190505f80610106565b601f1982169360015f52805f20915f5b8681106102bc57508360019596106102a4575b505050811b0160015561011b565b01515f1960f88460031b161c191690555f8080610296565b91926020600181928685015181550194019201610283565b60015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f830160051c8101916020841061032d575b601f0160051c01905b81811061032257506100ec565b5f8155600101610315565b909150819061030c565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b4565b601f198216905f8052805f20915f5b81811061039f57509583600195969710610387575b505050811b015f556100c8565b01515f1960f88460031b161c191690555f808061037a565b9192602060018192868b015181550194019201610365565b5f80525f80516020611305833981519152601f830160051c810191602084106103fc575b601f0160051c01905b8181106103f1575061009b565b5f81556001016103e4565b90915081906103db565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761033757604052565b81601f82011215610406578051906001600160401b0382116103375760405192610461601f8401601f19166020018561040a565b8284526020838301011161040657815f9260208093018386015e8301015290565b90600182811c921680156104b0575b602083101461049c57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161049156fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde0314610a8b578063095ea7b3146109e857806318160ddd146109ad57806323b872dd14610889578063313ce5671461082e5780633644e515146107ee57806340c10f191461071f57806370a08231146106bc5780637ecebe001461065957806395d89b41146105435780639dc29fac146104a4578063a9059cbb146103f0578063d505accf146101435763dd62ed3e146100b3575f80fd5b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576100ea610c52565b73ffffffffffffffffffffffffffffffffffffffff610107610c75565b91165f52600460205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060405f2054604051908152f35b5f80fd5b3461013f5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5761017a610c52565b610182610c75565b6044356064359260843560ff811680910361013f574285106103925760805f9160209373ffffffffffffffffffffffffffffffffffffffff6101c2610ca5565b91169687855260058652604085209889549960018b0190556040519073ffffffffffffffffffffffffffffffffffffffff888301937f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c985528b6040850152169a8b6060840152898784015260a083015260c082015260c0815261024660e082610b9c565b51902060405190868201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815261028d606282610b9c565b519020906040519182528482015260a435604082015260c435606082015282805260015afa156103875773ffffffffffffffffffffffffffffffffffffffff5f51168015158061037e575b15610320577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916020915f526004825260405f20855f5282528060405f2055604051908152a3005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152fd5b508281146102d8565b6040513d5f823e3d90fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152fd5b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57610427610c52565b73ffffffffffffffffffffffffffffffffffffffff60243591335f52600360205260405f20610457848254610c98565b90551690815f52600360205260405f208181540190556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3602060405160018152f35b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f575f6104dc610c52565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff6024359316928385526003825260408520610530828254610c98565b90558060025403600255604051908152a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576040515f60015461058181610b4b565b808452906001811690811561061757506001146105b9575b6105b5836105a981850382610b9c565b60405191829182610c0a565b0390f35b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b8082106105fd575090915081016020016105a9610599565b9192600181602092548385880101520191019092916105e5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506105a99050610599565b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5773ffffffffffffffffffffffffffffffffffffffff6106a5610c52565b165f526005602052602060405f2054604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5773ffffffffffffffffffffffffffffffffffffffff610708610c52565b165f526003602052602060405f20