UNPKG

@uniswap/universal-router

Version:

Smart contracts for Universal Router

1 lines 353 kB
{"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"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":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"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":"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":"testExactInput0For1","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testExactInput0For1FromRouter","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testExactInput1For0","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testExactInput1For0FromRouter","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testExactOutput0For1","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testExactOutput0For1FromRouter","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testExactOutput1For0","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testExactOutput1For0FromRouter","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"SlotFound","inputs":[{"name":"who","type":"address","indexed":false,"internalType":"address"},{"name":"fsig","type":"bytes4","indexed":false,"internalType":"bytes4"},{"name":"keysHash","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"slot","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"WARNING_UninitedSlot","inputs":[{"name":"who","type":"address","indexed":false,"internalType":"address"},{"name":"slot","type":"uint256","indexed":false,"internalType":"uint256"}],"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":"0x60808060405234602d57600160ff195f5416175f55600160ff19600454161760045561cb1d90816100328239f35b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c9081630a9254e41461301e5750806317b2038d146129ee5780631e461fa7146127875780631ed7831c146126de5780633e5e3c23146126355780633f7286f41461258c57806366d9a9a0146123cb57806385226c81146122685780638b0c757414611c7b578063916a17c61461191c57806396b973ab146112ea57806397d7583e146110735780639e8749d314610e0c578063b496473814610b60578063b5508aa9146109d0578063ba414fa61461098d578063c3689a14146101f2578063e20c9f71146101315763fa7626d4146100ef575f80fd5b3461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e5760ff60209154166040519015158152f35b80fd5b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e5760405180916020600c54928381520191600c82527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915b8181106101c6576101c2856101ae81870382614e4f565b604051918291602083526020830190614c34565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201610197565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e576040517f0900000000000000000000000000000000000000000000000000000000000000602082015260018152610259602182614e4f565b73ffffffffffffffffffffffffffffffffffffffff601c541661033473ffffffffffffffffffffffffffffffffffffffff601b541691848060405160208101907f70a08231000000000000000000000000000000000000000000000000000000008252866024820152602481526102d1604482614e4f565b519082855af1506102f26102e3615197565b60208082518301019101614eca565b5073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a55565b6370a082317fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000600854161760085560075468010000000000000000811015610960576001810180600755811015610933576007845260208420015573ffffffffffffffffffffffffffffffffffffffff600a54169060085460e01b60095484806103bc61595d565b6103c581615afa565b9060405195610409876103dd6020820195848761515b565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101895288614e4f565b7fffffffff000000000000000000000000000000000000000000000000000000006104528a73ffffffffffffffffffffffffffffffffffffffff165f52600660205260405f2090565b9116908185526020526040842060405160208101906104a2816104768b88866159a5565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282614e4f565b519020855260205260ff60408520541615610925575b6104e08973ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b908452602052604083209060405161050181610476896020830195866159a5565b51902083526020526040822054945190875afa5061051d615197565b907f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681036108f857906105559160051b90615b88565b6040517f667f9d7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810183905290602082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156108ed5786926108b9575b50036108b4578392737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561088c576040517f70ca10bb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602481019190915269152d02c7e14af68000006044820152828160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156108a9578391610891575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a5416600a557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000600854166008556106ce615aab565b81600955604051906106e1606083614e4f565b60028252604036602084013773ffffffffffffffffffffffffffffffffffffffff601c541661070f83614f35565b5273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261072e83614f42565b5261047661074d61073d614f66565b9360405192839160208301615109565b61075683614f35565b5261076082614f35565b5073ffffffffffffffffffffffffffffffffffffffff601b541691823b1561088c576107be928492836040518096819582947f24856bc300000000000000000000000000000000000000000000000000000000845260048401615027565b03925af1801561086c57610877575b50506040517f70a082310000000000000000000000000000000000000000000000000000000081526104d2600482015260208160248173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25afa801561086c578290610834575b6108319150615570565b80f35b506020813d602011610864575b8161084e60209383614e4f565b81010312610860576108319051610827565b5f80fd5b3d9150610841565b6040513d84823e3d90fd5b8161088191614e4f565b61012e57805f6107cd565b505050fd5b8161089b91614e4f565b6108a657815f610674565b50fd5b6040513d85823e3d90fd5b6159db565b9091506020813d6020116108e5575b816108d560209383614e4f565b810103126108605751905f6105ca565b3d91506108c8565b6040513d88823e3d90fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b61092d615c72565b506104b8565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e5760206109c66151c6565b6040519015158152f35b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e57601054610a0b81614f1d565b90610a196040519283614e4f565b808252601083527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6729280602084015b838310610a5d57604051806101c28782614db6565b6040518287548060011c90600181168015610b56575b602083108114610b2957828552908115610ae85750600114610ab2575b5060019282610aa485946020940382614e4f565b815201960192019194610a48565b888552602085208592505b818310610ad257505081016020016001610a90565b6001816020925483868801015201920191610abd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b8401909101915060019050610a90565b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b91607f1691610a73565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e57806040517f0800000000000000000000000000000000000000000000000000000000000000602082015260018152610bc8602182614e4f565b60405190610bd7606083614e4f565b60028252604036602084013773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2610c0183614f35565b5273ffffffffffffffffffffffffffffffffffffffff601c5416610c2483614f42565b52610476610c43610c33614f66565b9360405192839160208301614ff5565b610c4c83614f35565b52610c5682614f35565b5073ffffffffffffffffffffffffffffffffffffffff601b541691823b1561088c57610cb4928492836040518096819582947f24856bc300000000000000000000000000000000000000000000000000000000845260048401615027565b03925af1801561086c57610df7575b50506040517f70a082310000000000000000000000000000000000000000000000000000000081526104d2600482015260208160248173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25afa801561086c578290610dc3575b610d2791506156e4565b6024602073ffffffffffffffffffffffffffffffffffffffff601c5416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082526104d260048301525afa801561086c578290610d8f575b61083191506152fc565b506020813d602011610dbb575b81610da960209383614e4f565b81010312610860576108319051610d85565b3d9150610d9c565b506020813d602011610def575b81610ddd60209383614e4f565b8101031261086057610d279051610d1d565b3d9150610dd0565b81610e0191614e4f565b61012e57805f610cc3565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e57806040517f0800000000000000000000000000000000000000000000000000000000000000602082015260018152610e74602182614e4f565b60405190610e83606083614e4f565b60028252604036602084013773ffffffffffffffffffffffffffffffffffffffff601c5416610eb183614f35565b5273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2610ed083614f42565b52610476610edf610c33614f66565b610ee883614f35565b52610ef282614f35565b5073ffffffffffffffffffffffffffffffffffffffff601b541691823b1561088c57610f50928492836040518096819582947f24856bc300000000000000000000000000000000000000000000000000000000845260048401615027565b03925af1801561086c5761105e575b50506024602073ffffffffffffffffffffffffffffffffffffffff601c5416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082526104d260048301525afa801561086c57829061102a575b610fc991506156e4565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526104d2600482015260208160248173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25afa801561086c578290610d8f5761083191506152fc565b506020813d602011611056575b8161104460209383614e4f565b8101031261086057610fc99051610fbf565b3d9150611037565b8161106891614e4f565b61012e57805f610f5f565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e57806040517f09000000000000000000000000000000000000000000000000000000000000006020820152600181526110db602182614e4f565b604051906110ea606083614e4f565b60028252604036602084013773ffffffffffffffffffffffffffffffffffffffff601c541661111883614f35565b5273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261113783614f42565b52610476611156611146614f66565b93604051928391602083016150b7565b61115f83614f35565b5261116982614f35565b5073ffffffffffffffffffffffffffffffffffffffff601b541691823b1561088c576111c7928492836040518096819582947f24856bc300000000000000000000000000000000000000000000000000000000845260048401615027565b03925af1801561086c576112d5575b50506024602073ffffffffffffffffffffffffffffffffffffffff601c5416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082526104d260048301525afa801561086c5782906112a1575b6112409150615473565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526104d2600482015260208160248173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25afa801561086c578290610834576108319150615570565b506020813d6020116112cd575b816112bb60209383614e4f565b81010312610860576112409051611236565b3d91506112ae565b816112df91614e4f565b61012e57805f6111d6565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e576040517f0900000000000000000000000000000000000000000000000000000000000000602082015260018152611351602182614e4f565b73ffffffffffffffffffffffffffffffffffffffff601b5416828060405160208101907f70a08231000000000000000000000000000000000000000000000000000000008252846024820152602481526113ac604482614e4f565b51908273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1506113d26102e3615197565b5061141673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a55565b6370a082317fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000600854161760085560075468010000000000000000811015610960576001810180600755811015610933576007845260208420015573ffffffffffffffffffffffffffffffffffffffff600a54169060085460e01b600954848061149e61595d565b6114a781615afa565b90604051956114bf876103dd6020820195848761515b565b7fffffffff000000000000000000000000000000000000000000000000000000006115088a73ffffffffffffffffffffffffffffffffffffffff165f52600660205260405f2090565b91169081855260205260408420604051602081019061152c816104768b88866159a5565b519020855260205260ff6040852054161561190e575b61156a8973ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b908452602052604083209060405161158b81610476896020830195866159a5565b51902083526020526040822054945190875afa506115a7615197565b907f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681036108f857906115df9160051b90615b88565b6040517f667f9d7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810183905290602082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156108ed5786926118da575b50036108b4578392737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561088c576040517f70ca10bb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602481019190915269152d02c7e14af68000006044820152828160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156108a95783916118c5575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a5416600a557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060085416600855611758615aab565b816009556040519061176b606083614e4f565b60028252604036602084013773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261179583614f35565b5273ffffffffffffffffffffffffffffffffffffffff601c54166117b883614f42565b526104766117c761073d614f66565b6117d083614f35565b526117da82614f35565b5073ffffffffffffffffffffffffffffffffffffffff601b541691823b1561088c57611838928492836040518096819582947f24856bc300000000000000000000000000000000000000000000000000000000845260048401615027565b03925af1801561086c576118b0575b50506024602073ffffffffffffffffffffffffffffffffffffffff601c5416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082526104d260048301525afa801561086c578290610834576108319150615570565b816118ba91614e4f565b61012e57805f611847565b816118cf91614e4f565b6108a657815f6116fe565b9091506020813d602011611906575b816118f660209383614e4f565b810103126108605751905f611654565b3d91506118e9565b611916615c72565b50611542565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e5760135461195781614f1d565b906119656040519283614e4f565b80825260138352827f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a090602084015b8383106119a857604051806101c28782614c7d565b6040516119b481614e33565b825473ffffffffffffffffffffffffffffffffffffffff1681526040516001840180548083529089526020808a20908301918a915b816007840110611bf45784600197946002979460209794611a4c945491818110611bc0575b818110611b8c575b818110611b58575b818110611b24575b818110611af0575b818110611abc575b818110611a8a575b10611a5e575b500382614e4f565b83820152815201920192019190611993565b7fffffffff0000000000000000000000000000000000000000000000000000000016815286015f611a44565b828a1b7fffffffff00000000000000000000000000000000000000000000000000000000168452928901928b01611a3e565b92898c917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301611a36565b92898c917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301611a2e565b92898c917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301611a26565b92898c917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301611a1e565b92898c917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301611a16565b92898c917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301611a0e565b9260016101006008927fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e08201520194019201916119e9565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e576040517f0800000000000000000000000000000000000000000000000000000000000000602082015260018152611ce2602182614e4f565b73ffffffffffffffffffffffffffffffffffffffff601c5416611d5a73ffffffffffffffffffffffffffffffffffffffff601b541691848060405160208101907f70a08231000000000000000000000000000000000000000000000000000000008252866024820152602481526102d1604482614e4f565b6370a082317fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000600854161760085560075468010000000000000000811015610960576001810180600755811015610933576007845260208420015573ffffffffffffffffffffffffffffffffffffffff600a54169060085460e01b6009548480611de261595d565b611deb81615afa565b9060405195611e03876103dd6020820195848761515b565b7fffffffff00000000000000000000000000000000000000000000000000000000611e4c8a73ffffffffffffffffffffffffffffffffffffffff165f52600660205260405f2090565b911690818552602052604084206040516020810190611e70816104768b88866159a5565b519020855260205260ff6040852054161561225a575b611eae8973ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b9084526020526040832090604051611ecf81610476896020830195866159a5565b51902083526020526040822054945190875afa50611eeb615197565b907f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681036108f85790611f239160051b90615b88565b6040517f667f9d7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810183905290602082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156108ed578692612226575b50036108b4578392737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561088c576040517f70ca10bb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152670de0b6b3a76400006044820152828160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156108a9578391612211575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a5416600a557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006008541660085561209a615aab565b81600955604051906120ad606083614e4f565b60028252604036602084013773ffffffffffffffffffffffffffffffffffffffff601c54166120db83614f35565b5273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26120fa83614f42565b52610476612119612109614f66565b9360405192839160208301614fbe565b61212283614f35565b5261212c82614f35565b5073ffffffffffffffffffffffffffffffffffffffff601b541691823b1561088c5761218a928492836040518096819582947f24856bc300000000000000000000000000000000000000000000000000000000845260048401615027565b03925af1801561086c576121fc575b50506040517f70a082310000000000000000000000000000000000000000000000000000000081526104d2600482015260208160248173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25afa801561086c578290610d8f5761083191506152fc565b8161220691614e4f565b61012e57805f612199565b8161221b91614e4f565b6108a657815f612040565b9091506020813d602011612252575b8161224260209383614e4f565b810103126108605751905f611f98565b3d9150612235565b612262615c72565b50611e86565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e576011546122a381614f1d565b906122b16040519283614e4f565b808252601183527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c689280602084015b8383106122f557604051806101c28782614db6565b6040518287548060011c906001811680156123c1575b602083108114610b2957828552908115612380575060011461234a575b506001928261233c85946020940382614e4f565b8152019601920191946122e0565b888552602085208592505b81831061236a57505081016020016001612328565b6001816020925483868801015201920191612355565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b8401909101915060019050612328565b91607f169161230b565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e5760125461240681614f1d565b906124146040519283614e4f565b80825260128352827fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444602084015b83831061245757604051806101c28782614c7d565b60405161246381614e33565b825473ffffffffffffffffffffffffffffffffffffffff1681526040516001840180548083529089526020808a20908301918a915b81600784011061250557846001979460029794602097946124f3945491818110611bc057818110611b8c57818110611b5857818110611b2457818110611af057818110611abc57818110611a8a5710611a5e57500382614e4f565b83820152815201920192019190612442565b9260016101006008927fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920191612498565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e5760405180916020600e54928381520191600e82527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd915b818110612609576101c2856101ae81870382614e4f565b825473ffffffffffffffffffffffffffffffffffffffff168452602090930192600192830192016125f2565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e5760405180916020600f54928381520191600f82527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802915b8181106126b2576101c2856101ae81870382614e4f565b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161269b565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e5760405180916020600d54928381520191600d82527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5915b81811061275b576101c2856101ae81870382614e4f565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612744565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e57806040517f09000000000000000000000000000000000000000000000000000000000000006020820152600181526127ef602182614e4f565b604051906127fe606083614e4f565b60028252604036602084013773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261282883614f35565b5273ffffffffffffffffffffffffffffffffffffffff601c541661284b83614f42565b5261047661285a611146614f66565b61286383614f35565b5261286d82614f35565b5073ffffffffffffffffffffffffffffffffffffffff601b541691823b1561088c576128cb928492836040518096819582947f24856bc300000000000000000000000000000000000000000000000000000000845260048401615027565b03925af1801561086c576129d9575b50506040517f70a082310000000000000000000000000000000000000000000000000000000081526104d2600482015260208160248173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25afa801561086c5782906129a5575b61293e9150615473565b6024602073ffffffffffffffffffffffffffffffffffffffff601c5416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082526104d260048301525afa801561086c578290610834576108319150615570565b506020813d6020116129d1575b816129bf60209383614e4f565b810103126108605761293e9051612934565b3d91506129b2565b816129e391614e4f565b61012e57805f6128da565b503461012e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261012e576040517f0800000000000000000000000000000000000000000000000000000000000000602082015260018152612a55602182614e4f565b73ffffffffffffffffffffffffffffffffffffffff601b5416828060405160208101907f70a0823100000000000000000000000000000000000000000000000000000000825284602482015260248152612ab0604482614e4f565b51908273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af150612ad66102e3615197565b50612b1a73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a55565b6370a082317fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000600854161760085560075468010000000000000000811015610960576001810180600755811015610933576007845260208420015573ffffffffffffffffffffffffffffffffffffffff600a54169060085460e01b6009548480612ba261595d565b612bab81615afa565b9060405195612bc3876103dd6020820195848761515b565b7fffffffff00000000000000000000000000000000000000000000000000000000612c0c8a73ffffffffffffffffffffffffffffffffffffffff165f52600660205260405f2090565b911690818552602052604084206040516020810190612c30816104768b88866159a5565b519020855260205260ff60408520541615613010575b612c6e8973ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b9084526020526040832090604051612c8f81610476896020830195866159a5565b51902083526020526040822054945190875afa50612cab615197565b907f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681036108f85790612ce39160051b90615b88565b6040517f667f9d7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810183905290602082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156108ed578692612fdc575b50036108b4578392737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561088c576040517f70ca10bb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9190911660048201526024810191909152670de0b6b3a76400006044820152828160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156108a9578391612fc7575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a5416600a557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060085416600855612e5a615aab565b8160095560405190612e6d606083614e4f565b60028252604036602084013773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2612e9783614f35565b5273ffffffffffffffffffffffffffffffffffffffff601c5416612eba83614f42565b52610476612ec9612109614f66565b612ed283614f35565b52612edc82614f35565b5073ffffffffffffffffffffffffffffffffffffffff601b541691823b1561088c57612f3a928492836040518096819582947f24856bc300000000000000000000000000000000000000000000000000000000845260048401615027565b03925af1801561086c57612fb2575b50506024602073ffffffffffffffffffffffffffffffffffffffff601c5416604051928380927f70a082310000000000000000000000000000000000000000000000000000000082526104d260048301525afa801561086c578290610d8f5761083191506152fc565b81612fbc91614e4f565b61012e57805f612f49565b81612fd191614e4f565b6108a657815f612e00565b9091506020813d602011613008575b81612ff860209383614e4f565b810103126108605751905f612d58565b3d9150612feb565b613018615c72565b50612c46565b905034610860575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610860577ff877cb1900000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f464f524b5f55524c00000000000000000000000000000000000000000000000060448201525f81606481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115614a64575f91614bb5575b50602061311191604051809381927f71ee464d000000000000000000000000000000000000000000000000000000008352604060048401526044830190614d73565b6301315410602483015203815f737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015614a6457614b86575b5060405161121d80820182811067ffffffffffffffff821117614b0b57829161b8cb833903905ff08015614a645773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000601c541617601c55604051610120810181811067ffffffffffffffff821117614b0b576040526e22d473030f116ddee9f6b43ac78ba38152602081019073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc282526040810191735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f835260608201905f825260808301907f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f825260a08401905f825260c08501955f875260e086015f81526101008701925f845260405198614f6295868b01978b891067ffffffffffffffff8a1117614b0b5773ffffffffffffffffffffffffffffffffffffffff8c9a81809a988c6101209f8f849c9a85602093819d82946169699039511684525116910152511660408c0152511660608a01525160808901525160a0880152511660c0860152511660e084015251166101008201520301905ff08015614a6457601b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff928316179055601c546040517fe6a4390500000000000000000000000000000000000000000000000000000000815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600482015291166024820181905290602081604481735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f5afa8015614a645773ffffffffffffffffffffffffffffffffffffffff915f91614b67575b50161561413b575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561012e57806040517f06447d560000000000000000000000000000000000000000000000000000000081526104d26004820152818160248183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561086c57614126575b5050737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561012e57806040517fc88a5e6d0000000000000000000000000000000000000000000000000000000081526104d2600482015269152d02c7e14af68000006024820152818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561086c57614111575b508060405160208101907f70a082310000000000000000000000000000000000000000000000000000000082526104d260248201526024815261350a604482614e4f565b51908273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1506135306102e3615197565b5061357473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a55565b6370a082317fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006008541617600855600754680100000000000000008110156140e45760018101806007558110156140b7576007825260208220016104d280915573ffffffffffffffffffffffffffffffffffffffff600a541660085460e01b600954848061360061595d565b61360981615afa565b9060405195613621876103dd6020820195848761515b565b7fffffffff0000000000000000000000000000000000000000000000000000000061366a8973ffffffffffffffffffffffffffffffffffffffff165f52600660205260405f2090565b91169081855260205260408420604051602081019061368e816104768b88866159a5565b519020855260205260ff604085205416156140a9575b6136cc8873ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b90845260205260408320906040516136ed81610476896020830195866159a5565b51902083526020526040822054945190865afa50613709615197565b907f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681036108f857906137419160051b90615b88565b6040517f667f9d7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810183905290602082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156108ed578692614075575b50036108b4578391737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15614071576040517f70ca10bb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602481019190915269152d02c7e14af68000006044820152818160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561086c57614058575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a5416600a557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000600854166008556138b7615aab565b8160095561391973ffffffffffffffffffffffffffffffffffffffff601c5416838060405160208101907f70a08231000000000000000000000000000000000000000000000000000000008252866024820152602481526102d1604482614e4f565b6370a082317fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060085416176008556007546801000000000000000081101561402b576001810180600755811015613ffe576007835260208320015573ffffffffffffffffffffffffffffffffffffffff600a541660085460e01b60095483806139a061595d565b6139a981615afa565b90604051956139c1876103dd6020820195848761515b565b7fffffffff00000000000000000000000000000000000000000000000000000000613a0a8973ffffffffffffffffffffffffffffffffffffffff165f52600660205260405f2090565b911690818552602052604084206040516020810190613a2e816104768b88866159a5565b519020855260205260ff60408520541615613ff0575b613a6c8873ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b9084526020526040832090604051613a8d81610476896020830195866159a5565b51902083526020526040822054945190865afa50613aa9615197565b907f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168103613fc35790613ae19160051b90615b88565b6040517f667f9d7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810183905290602082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215613fb8578592613f84575b50036108b4578291737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15613f0c576040517f70ca10bb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602481019190915269152d02c7e14af68000006044820152818160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561086c57613f6f575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a5416600a557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060085416600855613c57615aab565b806009556040517f095ea7b30000000000000000000000000000000000000000000000000000000081526e22d473030f116ddee9f6b43ac78ba360048201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248201526020816044818573c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1801561086c57613f52575b5080602073ffffffffffffffffffffffffffffffffffffffff601c54166044604051809481937f095ea7b30000000000000000000000000000000000000000000000000000000083526e22d473030f116ddee9f6b43ac78ba360048401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60248401525af1801561086c57613f25575b508073ffffffffffffffffffffffffffffffffffffffff601b54166e22d473030f116ddee9f6b43ac78ba33b156108a657604051907f87517c4500000000000000000000000000000000000000000000000000000000825273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26004830152602482015273ffffffffffffffffffffffffffffffffffffffff604482015265ffffffffffff60648201528181608481836e22d473030f116ddee9f6b43ac78ba35af1801561086c57613f10575b5073ffffffffffffffffffffffffffffffffffffffff601c541673ffffffffffffffffffffffffffffffffffffffff601b54166e22d473030f116ddee9f6b43ac78ba33b15613f0c57604051917f87517c450000000000000000000000000000000000000000000000000000000083526004830152602482015273ffffffffffffffffffffffffffffffffffffffff604482015265ffffffffffff60648201528181608481836e22d473030f116ddee9f6b43ac78ba35af1801561086c57613efb5750f35b81613f0591614e4f565b61012e5780f35b5050fd5b81613f1a91614e4f565b61012e57805f613e36565b613f469060203d602011613f4b575b613f3e8183614e4f565b810190614f05565b613d76565b503d613f34565b613f6a9060203d602011613f4b57613f3e8183614e4f565b613ce5565b81613f7991614e4f565b61012e57805f613bfd565b9091506020813d602011613fb0575b81613fa060209383614e4f565b810103126108605751905f613b56565b3d9150613f93565b6040513d87823e3d90fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b613ff8615c72565b50613a44565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8161406291614e4f565b61406d57815f61385d565b5080fd5b8280fd5b9091506020813d6020116140a1575b8161409160209383614e4f565b810103126108605751905f6137b6565b3d9150614084565b6140b1615c72565b506136a4565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526032600452fd5b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8161411b91614e4f565b61012e57805f6134c6565b8161413091614e4f565b61012e57805f613442565b6040517fc9c6539600000000000000000000000000000000000000000000000000000000815273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600482015273ffffffffffffffffffffffffffffffffffffffff9190911660248201526020816044815f735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f5af1908115614a64575f91614b38575b505f806040519273ffffffffffffffffffffffffffffffffffffffff60208501917f70a08231000000000000000000000000000000000000000000000000000000008352169384602482015260248152614220604482614e4f565b51908273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25af1506142466102e3615197565b5061428a73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc27fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a55565b6370a082317fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000600854161760085560075468010000000000000000811015614b0b576001810180600755811015614ade57819060075f5260205f20015573ffffffffffffffffffffffffffffffffffffffff600a541660085460e01b906009545f8061431461595d565b61431d81615afa565b9060405196614361886143356020820195848761515b565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018a5289614e4f565b7fffffffff000000000000000000000000000000000000000000000000000000006143aa8873ffffffffffffffffffffffffffffffffffffffff165f52600660205260405f2090565b9116908185526020526040842060405160208101906143ce816104768b88866159a5565b519020855260205260ff60408520541615614ad0575b61440c8773ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b908452602052604083209060405161442d81610476896020830195866159a5565b51902083526020526040822054955190855afa50614449615197565b7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168203614aa35761447f9160051b90615b88565b6040517f667f9d7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024810184905290602082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa918215614a64575f92614a6f575b50036108b457737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610860576040517f70ca10bb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602481019190915268056bc75e2d6310000060448201525f8160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af18015614a6457614a4f575b507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a5416600a557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000600854166008556145f1615aab565b8160095561465373ffffffffffffffffffffffffffffffffffffffff601c5416838060405160208101907f70a08231000000000000000000000000000000000000000000000000000000008252866024820152602481526102d1604482614e4f565b6370a082317fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060085416176008556007546801000000000000000081101561402b576001810180600755811015613ffe5781906007845260208420015573ffffffffffffffffffffffffffffffffffffffff600a54169060085460e01b60095484806146dd61595d565b6146e681615afa565b90604051956146fe876103dd6020820195848761515b565b7fffffffff000000000000000000000000000000000000000000000000000000006147478a73ffffffffffffffffffffffffffffffffffffffff165f52600660205260405f2090565b91169081855260205260408420604051602081019061476b816104768b88866159a5565b519020855260205260ff60408520541615614a41575b6147a98973ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b90845260205260408320906040516147ca81610476896020830195866159a5565b51902083526020526040822054945190875afa506147e6615197565b907f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681036108f8579061481e9160051b90615b88565b6040517f667f9d7000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810183905290602082604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa9182156108ed578692614a0d575b50036108b4578392737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561088c576040517f70ca10bb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff919091166004820152602481019190915268056bc75e2d631000006044820152828160648183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156108a95783916149f8575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000600a5416600a557fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000060085416600855614996615aab565b81600955803b156108a6578180916004604051809481937ffff6cae90000000000000000000000000000000000000000000000000000000083525af1801561086c576149e3575b506133cf565b816149ed91614e4f565b61012e57805f6149dd565b81614a0291614e4f565b6108a657815f61493c565b9091506020813d602011614a39575b81614a2960209383614e4f565b810103126108605751905f614893565b3d9150614a1c565b614a49615c72565b50614781565b614a5c9192505f90614e4f565b5f905f614598565b6040513d5f823e3d90fd5b9091506020813d602011614a9b575b81614a8b60209383614e4f565b810103126108605751905f6144f4565b3d9150614a7e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b614ad8615c72565b506143e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b614b5a915060203d602011614b60575b614b528183614e4f565b810190614ed9565b5f6141c5565b503d614b48565b614b80915060203d602011614b6057614b528183614e4f565b5f6133c7565b6020813d602011614bad575b81614b9f60209383614e4f565b810103126108605751613140565b3d9150614b92565b90503d805f833e614bc68183614e4f565b8101906020818303126108605780519067ffffffffffffffff8211610860570181601f8201121561086057805191614bfd83614e90565b90614c0b6040519283614e4f565b83825260208484010111610860575f60208461311195828096018386015e8301015291506130cf565b90602080835192838152019201905f5b818110614c515750505090565b825173ffffffffffffffffffffffffffffffffffffffff16845260209384019390920191600101614c44565b602081016020825282518091526040820190602060408260051b8501019401915f905b828210614caf57505050505090565b9091929395947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc087820301825284516020606081604085019373ffffffffffffffffffffffffffffffffffffffff81511686520151936040838201528451809452019201905f905b808210614d395750505060208060019296019201920190929195939495614ca0565b9091926020806001927fffffffff000000000000000000000000000000000000000000000000000000008751168152019401920190614d17565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310614de857505050505090565b9091929394602080614e24837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951614d73565b97019301930191939290614dd9565b6040810190811067ffffffffffffffff821117614b0b57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117614b0b57604052565b67ffffffffffffffff8111614b0b57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b90816020910312610860575190565b90816020910312610860575173ffffffffffffffffffffffffffffffffffffffff811681036108605790565b90816020910312610860575180151581036108605790565b67ffffffffffffffff8111614b0b5760051b60200190565b805115614ade5760200190565b805160011015614ade5760400190565b8051821015614ade5760209160051b010190565b60408051909190614f778382614e4f565b60018152917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825f5b828110614fad57505050565b806060602080938501015201614fa1565b91906080614ff05f9260018652670de0b6b3a7640000602087015283604087015260a0606087015260a0860190614c34565b930152565b91906080614ff0600192838652670de0b6b3a764000060208701525f604087015260a0606087015260a0860190614c34565b9061503a90604083526040830190614d73565b906020818303910152815180825260208201916020808360051b8301019401925f915b83831061506c57505050505090565b90919293946020806150a8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951614d73565b9701930193019193929061505d565b91906080614ff0600192838652670de0b6b3a764000060208701527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604087015260a0606087015260a0860190614c34565b91906080614ff05f9260018652670de0b6b3a764000060208701527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604087015260a0606087015260a0860190614c34565b6004927fffffffff000000000000000000000000000000000000000000000000000000006020931682528051928391018483015e01015f815290565b3d156151c1573d906151a882614e90565b916151b66040519384614e4f565b82523d5f602084013e565b606090565b5f5460081c60ff16156151de5760ff5f5460081c1690565b5f737109709ecfa91a80626ff3989d68f67f5b1dd12d3b6151fc5790565b505f8060405160206152c46004828401737109709ecfa91a80626ff3989d68f67f5b1dd12d81527f6661696c65640000000000000000000000000000000000000000000000000000604086015260408552615258606086614e4f565b604051938491818301967f667f9d70000000000000000000000000000000000000000000000000000000008852518091602485015e8201018281018781525003017fffffffffffffffffffffffffffffffffff