@uniswap/v4-core
Version:
🦄 Core smart contracts of Uniswap v4
1 lines • 168 kB
JSON
{"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":"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_fromId_0ReturnsNative","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fuzz_balanceOfSelf_native","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_balanceOfSelf_token","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_balanceOf_native","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_balanceOf_token","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_equals","inputs":[{"name":"a","type":"address","internalType":"address"},{"name":"b","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_fuzz_fromId_returnsUint256AsCurrency","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fuzz_fromId_toId_opposites","inputs":[{"name":"currency","type":"address","internalType":"Currency"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fuzz_greaterThan","inputs":[{"name":"a","type":"address","internalType":"address"},{"name":"b","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_fuzz_greaterThanOrEqualTo","inputs":[{"name":"a","type":"address","internalType":"address"},{"name":"b","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_fuzz_isAddressZero","inputs":[{"name":"currency","type":"address","internalType":"Currency"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fuzz_lessThan","inputs":[{"name":"a","type":"address","internalType":"address"},{"name":"b","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"pure"},{"type":"function","name":"test_fuzz_toId_fromId_opposites","inputs":[{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fuzz_toId_returnsCurrencyAsUint256","inputs":[{"name":"currency","type":"address","internalType":"Currency"}],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_fuzz_transfer_native","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_fuzz_transfer_token","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"test_isAddressZero_native_returnsTrue","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_isAddressZero_token_returnsFalse","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_toId_nativeReturns0","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"test_transfer_noReturnData","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x60808060405234602f57600160ff19600c541617600c55600160ff19601f541617601f55615ac690816100348239f35b5f80fdfe60806040526004361015610011575f80fd5b5f803560e01c80630832d2af146130cd5780630a9254e414612bc95780631e6e390a14612b285780631ed7831c14612a7f578063228e356514612a1b5780632a8e3264146129b85780632ade38801461278c578063332165df146125a7578063332a85d714612314578063339351d21461216a578063382287751461202d5780633e5e3c2314611f845780633f7286f414611edb5780634858189b14611bf75780635e215afb14611b94578063615b825014611a4457806366d9a9a0146118e9578063685403311461179857806385226c81146116f0578063916a17c61461161b578063a4df24f614611231578063af0ebe3414610b5e578063b0464fdc14610a89578063b5508aa9146109e1578063ba414fa61461099e578063bef042731461093b578063d42776cc14610712578063d95bc9331461056d578063e20c9f71146104b4578063f250a80a146103de578063f69535ac146102c6578063f8b8f7b3146101c85763fa7626d414610185575f80fd5b346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602060ff601f54166040519015158152f35b80fd5b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576024602073ffffffffffffffffffffffffffffffffffffffff60225416604051928380927fc277f1ac0000000000000000000000000000000000000000000000000000000082528660048301525afa80156102bb57829061027c575b610279915073ffffffffffffffffffffffffffffffffffffffff80602054169116613e5b565b80f35b506020813d6020116102b3575b8161029660209383613726565b810103126102af576102aa610279916138bc565b610253565b5080fd5b3d9150610289565b6040513d84823e3d90fd5b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576024600435602073ffffffffffffffffffffffffffffffffffffffff60225416604051938480927fc277f1ac0000000000000000000000000000000000000000000000000000000082528560048301525afa9182156103d357839261037a575b509073ffffffffffffffffffffffffffffffffffffffff8061027993169116613e5b565b91506020823d6020116103cb575b8161039560209383613726565b810103126103c75773ffffffffffffffffffffffffffffffffffffffff806103bf610279946138bc565b935050610356565b8280fd5b3d9150610388565b6040513d85823e3d90fd5b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55773ffffffffffffffffffffffffffffffffffffffff61042b61348f565b60208260225416916024604051809581937f86bd3f9100000000000000000000000000000000000000000000000000000000835216948560048301525afa9081156103d357610279928492610483575b501590613de1565b6104a691925060203d6020116104ad575b61049e8183613726565b8101906138dd565b905f61047b565b503d610494565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760405180916020601554928381520191601582527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec475915b8181106105415761053d8561053181870382613726565b604051918291826134d5565b0390f35b825473ffffffffffffffffffffffffffffffffffffffff1684526020909301926001928301920161051a565b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55773ffffffffffffffffffffffffffffffffffffffff6105ba61348f565b1673ffffffffffffffffffffffffffffffffffffffff60225416906040517f1192cde9000000000000000000000000000000000000000000000000000000008152816004820152602081602481865afa80156107075784906106d0575b602091506024604051809581937fc277f1ac00000000000000000000000000000000000000000000000000000000835260048301525afa9182156103d357839261067d575b5073ffffffffffffffffffffffffffffffffffffffff610279921690613e5b565b91506020823d6020116106c8575b8161069860209383613726565b810103126103c75773ffffffffffffffffffffffffffffffffffffffff6106c1610279936138bc565b925061065c565b3d915061068b565b506020813d6020116106ff575b816106ea60209383613726565b810103126106fb5760209051610617565b5f80fd5b3d91506106dd565b6040513d86823e3d90fd5b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55773ffffffffffffffffffffffffffffffffffffffff602254168031908261076c8231600435613d56565b9173ffffffffffffffffffffffffffffffffffffffff6020541673ffffffffffffffffffffffffffffffffffffffff601f5460081c1690823b15610937576040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291166024820152604481018490529082908290606490829084905af180156102bb57610922575b505060206108d09261087273ffffffffffffffffffffffffffffffffffffffff601f5460081c1691610847858431613d61565b61086c73ffffffffffffffffffffffffffffffffffffffff6022541695863192613767565b90613d61565b81546040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529082166024820152939031928491829081906044820190565b03915afa9081156103d35783916108ec575b6102799250613d61565b90506020823d60201161091a575b8161090760209383613726565b810103126106fb576102799151906108e2565b3d91506108fa565b8161092c91613726565b6103c757825f610814565b8380fd5b50346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55761027961097661348f565b73ffffffffffffffffffffffffffffffffffffffff806109946134b2565b1691161180613de1565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760206109d7613ba6565b6040519015158152f35b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557601954610a1c816137a1565b91610a2a6040519384613726565b818352601981527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c9695602084015b838310610a6c576040518061053d87826135bc565b600160208192610a7b856137b9565b815201920192019190610a57565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557601c54610ac4816137a1565b91610ad26040519384613726565b818352601c81527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a211602084015b838310610b14576040518061053d8782613639565b60026020600192604051610b27816136dd565b73ffffffffffffffffffffffffffffffffffffffff8654168152610b4c8587016138f5565b83820152815201920192019190610aff565b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557602254602154601f546040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600480830182905260089390931c841660248301529093859392359260209186916044918391165afa9384156103d35783946111fa575b50683635c9adc5dea000008211610e8d57509073ffffffffffffffffffffffffffffffffffffffff6022541673ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff601f5460081c1690823b15610937576040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291166024820152604481018490529082908290606490829084905af180156102bb57610e78575b5050602254602154601f546040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820181905260089290921c831660248201529094929190911690602081604481855afa908115610e6d5784908792610e37575b509061086c610d6e92602095613b99565b6024604051809581937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa9182156103d3578392610e03575b50683635c9adc5dea000000390683635c9adc5dea000008211610dd6579061027991613d61565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b9091506020813d602011610e2f575b81610e1f60209383613726565b810103126106fb5751905f610daf565b3d9150610e12565b9150506020813d602011610e65575b81610e5360209383613726565b810103126106fb57518361086c610d5d565b3d9150610e46565b6040513d88823e3d90fd5b81610e8291613726565b6103c757825f610cdf565b610fd2604051917f4e487b710000000000000000000000000000000000000000000000000000000060208401526011602484015260248352610ed0604484613726565b610fa66040517ff27f64e400000000000000000000000000000000000000000000000000000000602082015260048152610f0b602482613726565b610f766040519586947f90bfb86500000000000000000000000000000000000000000000000000000000602087015260248601527fa9059cbb0000000000000000000000000000000000000000000000000000000060448601526080606486015260a4850190613524565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc848303016084850152613524565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282613726565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156103c7578261102d91604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190613524565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156103d35783916111e5575b505073ffffffffffffffffffffffffffffffffffffffff602254169073ffffffffffffffffffffffffffffffffffffffff602154169073ffffffffffffffffffffffffffffffffffffffff601f5460081c1692803b156111e1576040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152939092166024840152604483015282908290606490829084905af180156102bb576111cc575b5050602254602154601f546040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260089190911c82166024820152929160209184916044918391165afa80156103d3578390611198576102799250613d61565b506020823d6020116111c4575b816111b260209383613726565b810103126106fb5761027991516108e2565b3d91506111a5565b816111d691613726565b6102af57815f611118565b8480fd5b816111ef91613726565b6102af57815f611055565b925092506020823d602011611229575b8161121760209383613726565b810103126106fb57839151925f610c0c565b3d915061120a565b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043573ffffffffffffffffffffffffffffffffffffffff601f5460081c1680318373ffffffffffffffffffffffffffffffffffffffff602254163192838511155f146113d2575073ffffffffffffffffffffffffffffffffffffffff6022541673ffffffffffffffffffffffffffffffffffffffff6020541673ffffffffffffffffffffffffffffffffffffffff601f5460081c1690823b15610937576040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291166024820152604481018690529082908290606490829084905af180156102bb576113bd575b50508261139d61086c9261086c6102799673ffffffffffffffffffffffffffffffffffffffff601f5460081c163192613b99565b73ffffffffffffffffffffffffffffffffffffffff602254163192613767565b816113c791613726565b61093757835f611369565b919390925060209161149a604051916113eb8584613726565b8583527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085013686850137610fa66040517ff4b3b1bc000000000000000000000000000000000000000000000000000000008782015260048152611450602482613726565b610f766040519586947f90bfb865000000000000000000000000000000000000000000000000000000008a87015260248601528960448601526080606486015260a4850190613524565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b1561093757836114f491604051809381927ff28dceb30000000000000000000000000000000000000000000000000000000083528760048401526024830190613524565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1908115610707578491611606575b505073ffffffffffffffffffffffffffffffffffffffff80602254169254169073ffffffffffffffffffffffffffffffffffffffff601f5460081c1692803b156111e1576040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384166004820152939092166024840152604483015282908290606490829084905af180156102bb576115f1575b50506102799073ffffffffffffffffffffffffffffffffffffffff601f5460081c1631613d61565b816115fb91613726565b6102af57815f6115c9565b8161161091613726565b6103c757825f61151c565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557601d54611656816137a1565b916116646040519384613726565b818352601d81527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f602084015b8383106116a6576040518061053d8782613639565b600260206001926040516116b9816136dd565b73ffffffffffffffffffffffffffffffffffffffff86541681526116de8587016138f5565b83820152815201920192019190611691565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557601a5461172b816137a1565b916117396040519384613726565b818352601a81527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e602084015b83831061177b576040518061053d87826135bc565b60016020819261178a856137b9565b815201920192019190611766565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5578073ffffffffffffffffffffffffffffffffffffffff60225416602073ffffffffffffffffffffffffffffffffffffffff8154166024604051809481937f86bd3f9100000000000000000000000000000000000000000000000000000000835260048301525afa9081156102bb5782916118ca575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118c757604051907ff7fe347700000000000000000000000000000000000000000000000000000000825215156004820152600160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156102bb576118b65750f35b816118c091613726565b6101c55780f35b50fd5b6118e3915060203d6020116104ad5761049e8183613726565b5f61183c565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557601b54611924816137a1565b6119316040519182613726565b818152601b83526020810191837f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc1845b838310611a0957868587604051928392602084019060208552518091526040840160408260051b8601019392905b82821061199e57505050500390f35b919360206119f9827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc06001959799849503018652885190836119e98351604084526040840190613524565b9201519084818403910152613567565b960192019201859493919261198f565b60026020600192604051611a1c816136dd565b611a25866137b9565b8152611a328587016138f5565b83820152815201920192019190611961565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5578073ffffffffffffffffffffffffffffffffffffffff60225416602073ffffffffffffffffffffffffffffffffffffffff8154166024604051809481937f1192cde900000000000000000000000000000000000000000000000000000000835260048301525afa9081156102bb578291611b5f575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118c757604051907f98296c5400000000000000000000000000000000000000000000000000000000825260048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156102bb576118b65750f35b9150506020813d602011611b8c575b81611b7b60209383613726565b810103126106fb578190515f611ae8565b3d9150611b6e565b50346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610279611bcf61348f565b73ffffffffffffffffffffffffffffffffffffffff80611bed6134b2565b1691161080613de1565b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557611c32600435613c7f565b8173ffffffffffffffffffffffffffffffffffffffff6022541673ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff601f5460081c1690823b15610937576040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291166024820152604481018490529082908290606490829084905af180156102bb57611ec6575b505073ffffffffffffffffffffffffffffffffffffffff6022541673ffffffffffffffffffffffffffffffffffffffff6021541691604051907fac4a1c3a000000000000000000000000000000000000000000000000000000008252836004830152602082602481865afa918215611ebb578592611e87575b50683635c9adc5dea000000390683635c9adc5dea000008211611e5a5790611d9391613d61565b604051907fac4a1c3a000000000000000000000000000000000000000000000000000000008252826004830152602082602481845afa918215610707578492611e25575b506020906024604051809581937f70a0823100000000000000000000000000000000000000000000000000000000835260048301525afa9081156103d35783916108ec576102799250613d61565b9091506020813d602011611e52575b81611e4160209383613726565b810103126106fb5751906020611dd7565b3d9150611e34565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b9091506020813d602011611eb3575b81611ea360209383613726565b810103126106fb5751905f611d6c565b3d9150611e96565b6040513d87823e3d90fd5b81611ed091613726565b6102af57815f611cf3565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760405180916020601754928381520191601782527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c15915b818110611f585761053d8561053181870382613726565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611f41565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760405180916020601854928381520191601882527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e915b8181106120015761053d8561053181870382613726565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201611fea565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5578073ffffffffffffffffffffffffffffffffffffffff60225416602073ffffffffffffffffffffffffffffffffffffffff602154166024604051809481937f86bd3f9100000000000000000000000000000000000000000000000000000000835260048301525afa9081156102bb57829161214b575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156118c757604051907ff7fe3477000000000000000000000000000000000000000000000000000000008252151560048201528160248201528181604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa80156102bb576118b65750f35b612164915060203d6020116104ad5761049e8183613726565b5f6120d2565b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760043573ffffffffffffffffffffffffffffffffffffffff60225416906040517fc277f1ac000000000000000000000000000000000000000000000000000000008152816004820152602081602481865afa9081156107075784916122bf575b5073ffffffffffffffffffffffffffffffffffffffff602460209260405195869384927f1192cde90000000000000000000000000000000000000000000000000000000084521660048301525afa9182156103d3578392612277575b509073ffffffffffffffffffffffffffffffffffffffff6102799216613d61565b91506020823d6020116122b7575b8161229260209383613726565b810103126106fb5790519073ffffffffffffffffffffffffffffffffffffffff612256565b3d9150612285565b90506020813d60201161230c575b816122da60209383613726565b810103126109375773ffffffffffffffffffffffffffffffffffffffff60246123046020936138bc565b9250506121fa565b3d91506122cd565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557604051906030918281019281841067ffffffffffffffff85111761257a5782938291615a8a8339039082f0801561256d5773ffffffffffffffffffffffffffffffffffffffff16610fa661243e6040517ff27f64e4000000000000000000000000000000000000000000000000000000006020820152600481526123c8602482613726565b6040519283917f90bfb8650000000000000000000000000000000000000000000000000000000060208401528560248401527fa9059cbb000000000000000000000000000000000000000000000000000000006044840152608060648401528660a484015260a0608484015260c4830190613524565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15612569578261249991604051809381927ff28dceb3000000000000000000000000000000000000000000000000000000008352602060048401526024830190613524565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af19081156103d3578391612554575b505073ffffffffffffffffffffffffffffffffffffffff602254169073ffffffffffffffffffffffffffffffffffffffff601f5460081c16823b1561254f57606484928360405195869485937fbeabacc8000000000000000000000000000000000000000000000000000000008552600485015260248401528360448401525af180156102bb576118b65750f35b505050fd5b8161255e91613726565b6118c757815f6124c1565b5050fd5b50604051903d90823e3d90fd5b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55773ffffffffffffffffffffffffffffffffffffffff602254168031908261260083600435613d56565b9173ffffffffffffffffffffffffffffffffffffffff6020541673ffffffffffffffffffffffffffffffffffffffff601f5460081c1690823b15610937576040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291166024820152604481018490529082908290606490829084905af180156102bb57612777575b50506126b391613767565b6126d873ffffffffffffffffffffffffffffffffffffffff6022541691823190613d61565b73ffffffffffffffffffffffffffffffffffffffff6020541690604051917fac4a1c3a0000000000000000000000000000000000000000000000000000000083526004830152602082602481845afa9081156103d3578391612741575b61027992503190613d61565b90506020823d60201161276f575b8161275c60209383613726565b810103126106fb57610279915190612735565b3d915061274f565b8161278191613726565b6103c757825f6126a8565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557601e546127c7816137a1565b6127d46040519182613726565b818152601e83526020810191837f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350845b8383106129225786858760405192839260208401906020855251809152604084019160408260051b8601019392815b8383106128405786860387f35b9193957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc09086929496030183528551906020604082019273ffffffffffffffffffffffffffffffffffffffff81511683520151916040602083015282518091526060820190602060608260051b850101940192855b8281106128d957505050505060208060019297019301930190928695949293612833565b9091929394602080612915837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087600196030189528951613524565b97019501939291016128b5565b60405161292e816136dd565b73ffffffffffffffffffffffffffffffffffffffff8354168152600183018054612957816137a1565b916129656040519384613726565b8183528a526020808b20908b9084015b83821061299b575050505060019282602092836002950152815201920192019190612804565b6001602081926129aa866137b9565b815201930191019091612975565b50346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c5576102796129f361348f565b73ffffffffffffffffffffffffffffffffffffffff80612a116134b2565b1691161480613de1565b50346101c55760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c557610279612a5661348f565b73ffffffffffffffffffffffffffffffffffffffff80612a746134b2565b169116101580613de1565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760405180916020601654928381520191601682527fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289915b818110612afc5761053d8561053181870382613726565b825473ffffffffffffffffffffffffffffffffffffffff16845260209093019260019283019201612ae5565b50346101c55760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55773ffffffffffffffffffffffffffffffffffffffff612b7561348f565b60208260225416916024604051809581937f1192cde900000000000000000000000000000000000000000000000000000000835216948560048301525afa80156103d3578390611198576102799250613d61565b50346101c557807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101c55760408051612c068282613726565b600c815282602082017f6f7468657241646472657373000000000000000000000000000000000000000081528351600c6020820192835e82602c820152600c8152612c52602c82613726565b519020918351927fffa186490000000000000000000000000000000000000000000000000000000084526004840152602083602481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa928315613087578293613091575b50737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102af5781612d22918551809381927fc657c71800000000000000000000000000000000000000000000000000000000835273ffffffffffffffffffffffffffffffffffffffff881660048401528860248401526044830190613524565b038183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561308757613072575b50507fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff00601f549260081b16911617601f5580516106628082019082821067ffffffffffffffff8311176130235791809185936154288339039082f080156130175773ffffffffffffffffffffffffffffffffffffffff16807fffffffffffffffffffffffff00000000000000000000000000000000000000006022541617602255737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156102af578251907fc88a5e6d00000000000000000000000000000000000000000000000000000000825260048201526801a055690d9db800006024820152818160448183737109709ecfa91a80626ff3989d68f67f5b1dd12d5af1801561306557613050575b50507fffffffffffffffffffffffff00000000000000000000000000000000000000006020541660205580516113258082019082821067ffffffffffffffff831117613023578285939260e092614103833960608152600560608201527f5465737441000000000000000000000000000000000000000000000000000000608082015260a06020820152600160a08201527f410000000000000000000000000000000000000000000000000000000000000060c082015260128682015203019082f080156130175773ffffffffffffffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff6022541690833b156103c7578051917f40c10f190000000000000000000000000000000000000000000000000000000083526004830152683635c9adc5dea000006024830152828260448183885af190811561300e5750612ff9575b50507fffffffffffffffffffffffff0000000000000000000000000000000000000000602154161760215580f35b8161300391613726565b6102af57815f612fcb565b513d84823e3d90fd5b505051903d90823e3d90fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8161305a91613726565b6102af57815f612e7b565b50505051903d90823e3d90fd5b8161307c91613726565b6103c757825f612d47565b84513d84823e3d90fd5b9092506020813d6020116130c5575b816130ad60209383613726565b810103126102af576130be906138bc565b915f612cac565b3d91506130a0565b50346106fb5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126106fb57613108600435613c7f565b73ffffffffffffffffffffffffffffffffffffffff6022541673ffffffffffffffffffffffffffffffffffffffff6021541673ffffffffffffffffffffffffffffffffffffffff601f5460081c1690823b156106fb576040517fbeabacc800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116602482015260448101839052905f908290606490829084905af180156134845761346f575b5073ffffffffffffffffffffffffffffffffffffffff602254169073ffffffffffffffffffffffffffffffffffffffff602154169073ffffffffffffffffffffffffffffffffffffffff601f5460081c16906040517ff7888aec0000000000000000000000000000000000000000000000000000000081526020818061327786886004840190929173ffffffffffffffffffffffffffffffffffffffff60209181604085019616845216910152565b0381885afa8015610e6d5782908790613439575b6132959250613d61565b604051907fac4a1c3a000000000000000000000000000000000000000000000000000000008252836004830152602082602481885afa918215610e6d578692613405575b50683635c9adc5dea000000390683635c9adc5dea0000082116133d8579061330091613d61565b604051917f70a08231000000000000000000000000000000000000000000000000000000008352816004840152602083602481845afa928315611ebb5785936133a0575b506040517ff7888aec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152911660248201529160209083908180604481016108d0565b919092506020823d6020116133d0575b816133bd60209383613726565b810103126106fb579051916108d0613344565b3d91506133b0565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b9091506020813d602011613431575b8161342160209383613726565b810103126106fb5751905f6132d9565b3d9150613414565b50506020813d602011613467575b8161345460209383613726565b810103126106fb5781613295915161328b565b3d9150613447565b61347c9192505f90613726565b5f905f6131c8565b6040513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036106fb57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036106fb57565b60206040818301928281528451809452019201905f5b8181106134f85750505090565b825173ffffffffffffffffffffffffffffffffffffffff168452602093840193909201916001016134eb565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b90602080835192838152019201905f5b8181106135845750505090565b82517fffffffff0000000000000000000000000000000000000000000000000000000016845260209384019390920191600101613577565b602081016020825282518091526040820191602060408360051b8301019401925f915b8383106135ee57505050505090565b909192939460208061362a837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528951613524565b970193019301919392906135df565b602081016020825282518091526040820191602060408360051b8301019401925f915b83831061366b57505050505090565b90919293946020806136ce837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187526040838b5173ffffffffffffffffffffffffffffffffffffffff815116845201519181858201520190613567565b9701930193019193929061365c565b6040810190811067ffffffffffffffff8211176136f957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176136f957604052565b9190820391821161377457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b67ffffffffffffffff81116136f95760051b60200190565b90604051915f8154908160011c92600183169283156138b2575b6020851084146138855784875286939081156138455750600114613801575b506137ff92500383613726565b565b90505f9291925260205f20905f915b8183106138295750509060206137ff928201015f6137f2565b6020919350806001915483858901015201910190918492613810565b602093506137ff9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f6137f2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b93607f16936137d3565b519073ffffffffffffffffffffffffffffffffffffffff821682036106fb57565b908160209103126106fb575180151581036106fb5790565b90604051918281549182825260208201905f5260205f20925f905b806007830110613b0c576137ff945491818110613ad6575b818110613aa0575b818110613a6a575b818110613a34575b8181106139fe575b8181106139c8575b818110613993575b10613966575b500383613726565b7fffffffff000000000000000000000000000000000000000000000000000000001681526020015f61395e565b9260206001917fffffffff0000000000000000000000000000000000000000000000000000000085831b168152019301613958565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560401b168152019301613950565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560601b168152019301613948565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560801b168152019301613940565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560a01b168152019301613938565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560c01b168152019301613930565b9260206001917fffffffff000000000000000000000000000000000000000000000000000000008560e01b168152019301613928565b9160089193506101006001917fffffffff000000000000000000000000000000000000000000000000000000008754818160e01b168352818160c01b166020840152818160a01b166040840152818160801b166060840152818160601b166080840152818160401b1660a0840152818160201b1660c08401521660e0820152019401920185929391613910565b9190820180921161377457565b60085460ff168015613bb55790565b506040517f667f9d70000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d60048201527f6661696c656400000000000000000000000000000000000000000000000000006024820152602081604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa908115613484575f91613c4d575b50151590565b90506020813d602011613c77575b81613c6860209383613726565b810103126106fb57515f613c47565b3d9150613c5b565b683635c9adc5dea000005f613c9392613f21565b905f80604051613ca4604082613726565b600c81527f426f756e6420726573756c7400000000000000000000000000000000000000006020820152604051613d4381613d1160208201947fb60e72cc000000000000000000000000000000000000000000000000000000008652604060248401526064830190613524565b886044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282613726565b51906a636f6e736f6c652e6c6f675afa50565b905f613c9392613f21565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106fb57604051917f98296c54000000000000000000000000000000000000000000000000000000008352600483015260248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561348457613dd75750565b5f6137ff91613726565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106fb57604051917ff7fe347700000000000000000000000000000000000000000000000000000000835215156004830152151560248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561348457613dd75750565b90737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156106fb5773ffffffffffffffffffffffffffffffffffffffff9081604051937f515361f60000000000000000000000000000000000000000000000000000000085521660048401521660248201525f81604481737109709ecfa91a80626ff3989d68f67f5b1dd12d5afa801561348457613dd75750565b8115613ef4570690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f9083831161407e5782811091821580614074575b61406c57613f448486613767565b926001840180941161377457600383111580614063575b614054577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8310158061404a575b6140365785831115613fed57505090613fa584613faa93613767565b613eea565b908115613fe857613fbb9250613b99565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116137745790565b505090565b959492919095613ffe575b50505050565b83949550613fa5906140109394613767565b908115613fe8576140219250613767565b6001810180911161377457905f808080613ff8565b505090506140479291501990613767565b90565b5082198411613f89565b50509190506140479250613b99565b50828411613f5b565b509250505090565b5084821115613f36565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374645574696c7320626f756e642875696e743235362c75696e743235362c7560448201527f696e74323536293a204d6178206973206c657373207468616e206d696e2e00006064820152fdfe60e0806040523461040657611325803803809161001c828561040a565b83398101906060818303126104065780516001600160401b038111610406578261004791830161042d565b60208201519092906001600160401b0381116104065760409161006b91840161042d565b91015160ff811681036104065782516001600160401b038111610337576100925f54610482565b601f81116103b7575b506020601f821160011461035657819293945f9261034b575b50508160011b915f199060031b1c1916175f555b81516001600160401b038111610337576100e3600154610482565b601f81116102d4575b50602092601f821160011461027357928192935f92610268575b50508160011b915f199060031b1c1916176001555b6080524660a0526040515f905f54918161013484610482565b9182825260208201946001811690815f1461024c5750600114610202575b61015e9250038261040a565b51902060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a081526101d260c08261040a565b51902060c052604051610e4a90816104bb823960805181610865015260a05181610ca8015260c05181610cce0152f35b505f80805290915f805160206113058339815191525b81831061023057505090602061015e92820101610152565b6020919350806001915483858801015201910190918392610218565b60ff191686525061015e92151560051b82016020019050610152565b015190505f80610106565b601f1982169360015f52805f20915f5b8681106102bc57508360019596106102a4575b505050811b0160015561011b565b01515f1960f88460031b161c191690555f8080610296565b91926020600181928685015181550194019201610283565b60015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f830160051c8101916020841061032d575b601f0160051c01905b81811061032257506100ec565b5f8155600101610315565b909150819061030c565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100b4565b601f198216905f8052805f20915f5b81811061039f57509583600195969710610387575b505050811b015f556100c8565b01515f1960f88460031b161c191690555f808061037a565b9192602060018192868b015181550194019201610365565b5f80525f80516020611305833981519152601f830160051c810191602084106103fc575b601f0160051c01905b8181106103f1575061009b565b5f81556001016103e4565b90915081906103db565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761033757604052565b81601f82011215610406578051906001600160401b0382116103375760405192610461601f8401601f19166020018561040a565b8284526020838301011161040657815f9260208093018386015e8301015290565b90600182811c921680156104b0575b602083101461049c57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161049156fe60806040526004361015610011575f80fd5b5f3560e01c806306fdde0314610a8b578063095ea7b3146109e857806318160ddd146109ad57806323b872dd14610889578063313ce5671461082e5780633644e515146107ee57806340c10f191461071f57806370a08231146106bc5780637ecebe001461065957806395d89b41146105435780639dc29fac146104a4578063a9059cbb146103f0578063d505accf146101435763dd62ed3e146100b3575f80fd5b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576100ea610c52565b73ffffffffffffffffffffffffffffffffffffffff610107610c75565b91165f52600460205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060405f2054604051908152f35b5f80fd5b3461013f5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5761017a610c52565b610182610c75565b6044356064359260843560ff811680910361013f574285106103925760805f9160209373ffffffffffffffffffffffffffffffffffffffff6101c2610ca5565b91169687855260058652604085209889549960018b0190556040519073ffffffffffffffffffffffffffffffffffffffff888301937f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c985528b6040850152169a8b6060840152898784015260a083015260c082015260c0815261024660e082610b9c565b51902060405190868201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815261028d606282610b9c565b519020906040519182528482015260a435604082015260c435606082015282805260015afa156103875773ffffffffffffffffffffffffffffffffffffffff5f51168015158061037e575b15610320577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925916020915f526004825260405f20855f5282528060405f2055604051908152a3005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f494e56414c49445f5349474e45520000000000000000000000000000000000006044820152fd5b508281146102d8565b6040513d5f823e3d90fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f5045524d49545f444541444c494e455f455850495245440000000000000000006044820152fd5b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57610427610c52565b73ffffffffffffffffffffffffffffffffffffffff60243591335f52600360205260405f20610457848254610c98565b90551690815f52600360205260405f208181540190556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3602060405160018152f35b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f575f6104dc610c52565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff6024359316928385526003825260408520610530828254610c98565b90558060025403600255604051908152a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576040515f60015461058181610b4b565b808452906001811690811561061757506001146105b9575b6105b5836105a981850382610b9c565b60405191829182610c0a565b0390f35b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b8082106105fd575090915081016020016105a9610599565b9192600181602092548385880101520191019092916105e5565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506105a99050610599565b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5773ffffffffffffffffffffffffffffffffffffffff6106a5610c52565b165f526005602052602060405f2054604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5773ffffffffffffffffffffffffffffffffffffffff610708610c52565b165f526003602052602060405f2054604051908152f35b3461013f5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57610756610c52565b602435906002548281018091116107c157602073ffffffffffffffffffffffffffffffffffffffff5f937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9360025516938484526003825260408420818154019055604051908152a3005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3461013f575f7fffffffffffffffffffffffffffffffffffffffffffffffffffff