UNPKG

@layerzerolabs/oapp-evm-upgradeable

Version:

LayerZero Labs reference EVM OmniChain Application (OApp) implementation

1 lines 260 kB
{"abi":[{"type":"constructor","inputs":[{"name":"_verifyHelper","type":"address","internalType":"address payable"},{"name":"_endpoint","type":"address","internalType":"address"},{"name":"_treasuryGasCap","type":"uint256","internalType":"uint256"},{"name":"_treasuryGasForFeeCap","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"receive","stateMutability":"payable"},{"type":"function","name":"executorConfigs","inputs":[{"name":"oapp","type":"address","internalType":"address"},{"name":"eid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"fees","inputs":[{"name":"worker","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAppUlnConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_remoteEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}],"stateMutability":"view"},{"type":"function","name":"getConfig","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_oapp","type":"address","internalType":"address"},{"name":"_configType","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"getExecutorConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_remoteEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"rtnConfig","type":"tuple","internalType":"struct ExecutorConfig","components":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}]}],"stateMutability":"view"},{"type":"function","name":"getUlnConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_remoteEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"rtnConfig","type":"tuple","internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}],"stateMutability":"view"},{"type":"function","name":"isSupportedEid","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"messageLibType","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum MessageLibType"}],"stateMutability":"pure"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quote","inputs":[{"name":"_packet","type":"tuple","internalType":"struct Packet","components":[{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"address","internalType":"address"},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"bytes32","internalType":"bytes32"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"message","type":"bytes","internalType":"bytes"}]},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"send","inputs":[{"name":"_packet","type":"tuple","internalType":"struct Packet","components":[{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"address","internalType":"address"},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"bytes32","internalType":"bytes32"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"message","type":"bytes","internalType":"bytes"}]},{"name":"_options","type":"bytes","internalType":"bytes"},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"fee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]},{"name":"encodedPacket","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"setConfig","inputs":[{"name":"_oapp","type":"address","internalType":"address"},{"name":"_params","type":"tuple[]","internalType":"struct SetConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"configType","type":"uint32","internalType":"uint32"},{"name":"config","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultExecutorConfigs","inputs":[{"name":"_params","type":"tuple[]","internalType":"struct SetDefaultExecutorConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct ExecutorConfig","components":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setDefaultUlnConfigs","inputs":[{"name":"_params","type":"tuple[]","internalType":"struct SetDefaultUlnConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTreasury","inputs":[{"name":"_treasury","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setTreasuryNativeFeeCap","inputs":[{"name":"_newTreasuryNativeFeeCap","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"_interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"testHelper","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract TestHelperOz5"}],"stateMutability":"view"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"treasury","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"version","inputs":[],"outputs":[{"name":"major","type":"uint64","internalType":"uint64"},{"name":"minor","type":"uint8","internalType":"uint8"},{"name":"endpointVersion","type":"uint8","internalType":"uint8"}],"stateMutability":"pure"},{"type":"function","name":"withdrawFee","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawLzTokenFee","inputs":[{"name":"_lzToken","type":"address","internalType":"address"},{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"DVNFeePaid","inputs":[{"name":"requiredDVNs","type":"address[]","indexed":false,"internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","indexed":false,"internalType":"address[]"},{"name":"fees","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"DefaultExecutorConfigsSet","inputs":[{"name":"params","type":"tuple[]","indexed":false,"internalType":"struct SetDefaultExecutorConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct ExecutorConfig","components":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}]}]}],"anonymous":false},{"type":"event","name":"DefaultUlnConfigsSet","inputs":[{"name":"params","type":"tuple[]","indexed":false,"internalType":"struct SetDefaultUlnConfigParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"config","type":"tuple","internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}]}],"anonymous":false},{"type":"event","name":"ExecutorConfigSet","inputs":[{"name":"oapp","type":"address","indexed":false,"internalType":"address"},{"name":"eid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"config","type":"tuple","indexed":false,"internalType":"struct ExecutorConfig","components":[{"name":"maxMessageSize","type":"uint32","internalType":"uint32"},{"name":"executor","type":"address","internalType":"address"}]}],"anonymous":false},{"type":"event","name":"ExecutorFeePaid","inputs":[{"name":"executor","type":"address","indexed":false,"internalType":"address"},{"name":"fee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"LzTokenFeeWithdrawn","inputs":[{"name":"lzToken","type":"address","indexed":false,"internalType":"address"},{"name":"receiver","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"NativeFeeWithdrawn","inputs":[{"name":"worker","type":"address","indexed":false,"internalType":"address"},{"name":"receiver","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"TreasuryNativeFeeCapSet","inputs":[{"name":"newTreasuryNativeFeeCap","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"TreasurySet","inputs":[{"name":"treasury","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UlnConfigSet","inputs":[{"name":"oapp","type":"address","indexed":false,"internalType":"address"},{"name":"eid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"config","type":"tuple","indexed":false,"internalType":"struct UlnConfig","components":[{"name":"confirmations","type":"uint64","internalType":"uint64"},{"name":"requiredDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNCount","type":"uint8","internalType":"uint8"},{"name":"optionalDVNThreshold","type":"uint8","internalType":"uint8"},{"name":"requiredDVNs","type":"address[]","internalType":"address[]"},{"name":"optionalDVNs","type":"address[]","internalType":"address[]"}]}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AddressInsufficientBalance","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"DVN_InvalidDVNIdx","inputs":[]},{"type":"error","name":"DVN_InvalidDVNOptions","inputs":[{"name":"cursor","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"LZ_MessageLib_CannotWithdrawAltToken","inputs":[]},{"type":"error","name":"LZ_MessageLib_InvalidAmount","inputs":[{"name":"requested","type":"uint256","internalType":"uint256"},{"name":"available","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_MessageLib_InvalidExecutor","inputs":[]},{"type":"error","name":"LZ_MessageLib_InvalidMessageSize","inputs":[{"name":"actual","type":"uint256","internalType":"uint256"},{"name":"max","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_MessageLib_NotTreasury","inputs":[]},{"type":"error","name":"LZ_MessageLib_OnlyEndpoint","inputs":[]},{"type":"error","name":"LZ_MessageLib_TransferFailed","inputs":[]},{"type":"error","name":"LZ_MessageLib_ZeroMessageSize","inputs":[]},{"type":"error","name":"LZ_ULN_AtLeastOneDVN","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidConfigType","inputs":[{"name":"configType","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"LZ_ULN_InvalidConfirmations","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidLegacyType1Option","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidLegacyType2Option","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidOptionalDVNCount","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidOptionalDVNThreshold","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidRequiredDVNCount","inputs":[]},{"type":"error","name":"LZ_ULN_InvalidWorkerId","inputs":[{"name":"workerId","type":"uint8","internalType":"uint8"}]},{"type":"error","name":"LZ_ULN_InvalidWorkerOptions","inputs":[{"name":"cursor","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"LZ_ULN_Unsorted","inputs":[]},{"type":"error","name":"LZ_ULN_UnsupportedEid","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"LZ_ULN_UnsupportedOptionType","inputs":[{"name":"optionType","type":"uint16","internalType":"uint16"}]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"SafeCastOverflowedUintDowncast","inputs":[{"name":"bits","type":"uint8","internalType":"uint8"},{"name":"value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"Transfer_NativeFailed","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"Transfer_ToAddressIsZero","inputs":[]}],"bytecode":{"object":"0x60e060405234801562000010575f80fd5b506040516200493c3803806200493c833981016040819052620000339162000185565b82828282836001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000074573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200009a9190620001cf565b6001600160a01b03821660805263ffffffff811660a05283833380620000d957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000e4816200011e565b5060c0919091526002555050600680546001600160a01b0319166001600160a01b03989098169790971790965550620001fb945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811462000182575f80fd5b50565b5f805f806080858703121562000199575f80fd5b8451620001a6816200016d565b6020860151909450620001b9816200016d565b6040860151606090960151949790965092505050565b5f60208284031215620001e0575f80fd5b815163ffffffff81168114620001f4575f80fd5b9392505050565b60805160a05160c0516146fd6200023f5f395f8181611ca60152611e0401525f50505f81816106740152818161077701528181611266015261178801526146fd5ff3fe60806040526004361061014a575f3560e01c806361d027b3116100b3578063d15b0d491161006d578063d15b0d4914610434578063d80e9bd914610453578063f0f442601461047f578063f2fde38b1461049e578063faaebd21146104bd578063fd9be522146104f6575f80fd5b806361d027b31461037b5780636750cd4c1461039a578063715018a6146103b95780638da5cb5b146103cd5780639c33abf7146103e9578063c14c434914610415575f80fd5b806329460b0b1161010457806329460b0b1461024657806339e3f938146102655780634389e58f1461029157806343ea4fa9146102be5780634d963200146102dd57806354fd4d5014610350575f80fd5b806301ffc9a7146101555780630e97289b14610189578063188183f4146101c05780631881d94d146101ec578063200175f71461020657806320efd72214610227575f80fd5b3661015157005b5f80fd5b348015610160575f80fd5b5061017461016f366004613614565b610515565b60405190151581526020015b60405180910390f35b348015610194575f80fd5b506006546101a8906001600160a01b031681565b6040516001600160a01b039091168152602001610180565b3480156101cb575f80fd5b506101df6101da36600461367b565b610566565b60405161018091906136b2565b3480156101f7575f80fd5b505f60405161018091906136d8565b348015610211575f80fd5b506102256102203660046136fe565b61063d565b005b348015610232575f80fd5b5061022561024136600461377c565b610775565b348015610251575f80fd5b506102256102603660046137cc565b6108e9565b348015610270575f80fd5b5061028461027f36600461367b565b610a7f565b60405161018091906138bd565b34801561029c575f80fd5b506102b06102ab3660046138e7565b610bb5565b6040516101809291906139da565b3480156102c9575f80fd5b506102846102d836600461367b565b610c44565b3480156102e8575f80fd5b5061032c6102f736600461367b565b600460209081525f928352604080842090915290825290205463ffffffff81169064010000000090046001600160a01b031682565b6040805163ffffffff90931683526001600160a01b03909116602083015201610180565b34801561035b575f80fd5b5060408051600381525f6020820152600291810191909152606001610180565b348015610386575f80fd5b506003546101a8906001600160a01b031681565b3480156103a5575f80fd5b506101746103b43660046139fd565b610f47565b3480156103c4575f80fd5b50610225610f51565b3480156103d8575f80fd5b505f546001600160a01b03166101a8565b3480156103f4575f80fd5b50610408610403366004613a18565b610f64565b6040516101809190613a60565b348015610420575f80fd5b5061022561042f366004613a72565b610ff5565b34801561043f575f80fd5b5061022561044e366004613ae0565b611129565b34801561045e575f80fd5b5061047261046d3660046138e7565b61119e565b6040516101809190613af7565b34801561048a575f80fd5b50610225610499366004613b0e565b61120c565b3480156104a9575f80fd5b506102256104b8366004613b0e565b611220565b3480156104c8575f80fd5b506104e86104d7366004613b0e565b60056020525f908152604090205481565b604051908152602001610180565b348015610501575f80fd5b50610225610510366004613b29565b61125a565b5f6001600160e01b031982166325fc096160e21b148061054557506001600160e01b0319821663b6e9ace360e01b145b8061056057506301ffc9a760e01b6001600160e01b03198316145b92915050565b604080518082019091525f808252602082015263ffffffff8083165f8181527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec602090815260408083206001600160a01b03891684526004835281842094845293909152812080549293909216908190036105e857825463ffffffff166105ea565b805b63ffffffff168452815464010000000090046001600160a01b03168061062257835464010000000090046001600160a01b0316610624565b805b6001600160a01b03166020860152509295945050505050565b6003546001600160a01b031633146106685760405163885762a760e01b815260040160405180910390fd5b826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f29190613b53565b6001600160a01b031603610719576040516339a5741160e21b815260040160405180910390fd5b610724838383611337565b604080516001600160a01b038086168252841660208201529081018290527fe081464b7278501267de69fa85b7b9560b0ae05d5fbfaab9b1986c70356e2efe906060015b60405180910390a1505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146107be5760405163467409c360e01b815260040160405180910390fd5b5f5b818110156108e357368383838181106107db576107db613b6e565b90506020028101906107ed9190613b82565b90506108046107ff60208301836139fd565b611377565b600161081660408301602084016139fd565b63ffffffff16036108565761085161083160208301836139fd565b8661083f6040850185613ba0565b81019061084c9190613c70565b6113a5565b6108da565b600261086860408301602084016139fd565b63ffffffff16036108a35761085161088360208301836139fd565b866108916040850185613ba0565b81019061089e9190613e25565b61142c565b6108b360408201602083016139fd565b604051635d4be0fd60e11b815263ffffffff90911660048201526024015b60405180910390fd5b506001016107c0565b50505050565b6108f1611475565b5f5b81811015610a41573683838381811061090e5761090e613b6e565b90506020028101906109209190613e56565b905060ff6109316020830183613e6a565b610942906040810190602001613e7e565b60ff1603610963576040516341d50bed60e11b815260040160405180910390fd5b60ff6109726020830183613e6a565b610983906060810190604001613e7e565b60ff16036109a45760405163211089b360e11b815260040160405180910390fd5b6001600160401b036109b96020830183613e6a565b6109c7906020810190613e97565b6001600160401b0316036109ee5760405163281b33d760e11b815260040160405180910390fd5b610a0c6109fe6020830183613e6a565b610a0790613eb0565b6114a1565b610a385f610a1d60208401846139fd565b610a2a6020850185613e6a565b610a3390613eb0565b6114d9565b506001016108f3565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b5608282604051610a73929190613f3b565b60405180910390a15050565b610a87613562565b6001600160a01b0383165f90815260016020818152604080842063ffffffff87168552825292839020835160c08101855281546001600160401b038116825260ff600160401b8204811683860152600160481b8204811683880152600160501b9091041660608201529281018054855181850281018501909652808652939491936080860193830182828015610b4457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610b26575b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015610ba457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610b86575b505050505081525050905092915050565b604080518082019091525f80825260208201526060610bd686868686611771565b600654604051631f5dad8b60e31b81529294509092506001600160a01b03169063faed6c5890610c0e9084908990899060040161407d565b5f604051808303815f87803b158015610c25575f80fd5b505af1158015610c37573d5f803e3d5ffd5b5050505094509492505050565b610c4c613562565b63ffffffff82165f8181527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602090815260408083206001600160a01b03881684526001835281842094845293909152902080546001600160401b031680610cc05782546001600160401b03168452610cdd565b6001600160401b0381811614610cdd576001600160401b03811684525b8154600160401b900460ff16610d75578254600160401b900460ff1615610d705782600101805480602002602001604051908101604052809291908181526020018280548015610d5457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610d36575b505050505060808501528254600160401b900460ff1660208501525b610dfa565b8154600160401b900460ff90811614610dfa5781600101805480602002602001604051908101604052809291908181526020018280548015610dde57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610dc0575b505050505060808501528154600160401b900460ff1660208501525b8154600160481b900460ff16610ea1578254600160481b900460ff1615610e9c5782600201805480602002602001604051908101604052809291908181526020018280548015610e7157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610e53575b505050505060a0850152825460ff600160481b820481166040870152600160501b9091041660608501525b610f35565b8154600160481b900460ff90811614610f355781600201805480602002602001604051908101604052809291908181526020018280548015610f0a57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610eec575b505050505060a0850152815460ff600160481b820481166040870152600160501b9091041660608501525b610f3e846114a1565b50505092915050565b5f61056082611842565b610f59611475565b610f625f61189c565b565b60605f1963ffffffff831601610fa457610f7e8385610566565b604051602001610f8e91906136b2565b6040516020818303038152906040529050610fee565b60011963ffffffff831601610fcd57610fbd8385610c44565b604051602001610f8e91906138bd565b604051635d4be0fd60e11b815263ffffffff831660048201526024016108d1565b9392505050565b610ffd611475565b5f5b818110156110f7573683838381811061101a5761101a613b6e565b60609081029290920192505f916110379150830160408401613b0e565b6001600160a01b03160361105e57604051631074e82d60e11b815260040160405180910390fd5b61106e60408201602083016139fd565b63ffffffff165f03611093576040516349cfac4360e01b815260040160405180910390fd5b5f808052600460209081528201907f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec906110cd83856139fd565b63ffffffff16815260208101919091526040015f206110ec82826140c1565b505050600101610fff565b507f2b001e1c6683bf79cc52891bd7215b204c787d18134fc7f3d21b4f32a49e47de8282604051610a7392919061411a565b611131611475565b6002548111156111625760025460405163068109f760e31b81526108d1918391600401918252602082015260400190565b60028190556040518181527f491ff913b5444f4136b0d4075f020cfe3a5f60de926ec0b091612401a22b7842906020015b60405180910390a150565b604080518082019091525f80825260208201525f806111ed6111c66060890160408a01613b0e565b6111d660808a0160608b016139fd565b6111e360c08b018b613ba0565b9050878a8a6118eb565b604080518082019091529182526020820152925050505b949350505050565b611214611475565b61121d816119dc565b50565b611228611475565b6001600160a01b03811661125157604051631e4fbdf760e01b81525f60048201526024016108d1565b61121d8161189c565b61126381611a2a565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e49190613b53565b90506112f1818484611a79565b604080513381526001600160a01b03851660208201529081018390527f820b7fd51bf79c54350bab98400651b3314ff6e79b33528821871d94a666988390606001610768565b6001600160a01b03821661135e576040516306b7a93160e41b815260040160405180910390fd5b6113726001600160a01b0384168383611a9c565b505050565b61138081611842565b61121d57604051633c30434160e21b815263ffffffff821660048201526024016108d1565b6001600160a01b038083165f90815260046020908152604080832063ffffffff8089168552908352928190208551815493870151909516640100000000026001600160c01b03199093169490931693909317179055517f779cb2dd9d2bb1be1737d05435d744facbfb84a2a4912e21379d39beddcdc8059061076890849086908590614199565b6114378284836114d9565b6114418284610c44565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f5081828483604051610768939291906141db565b5f546001600160a01b03163314610f625760405163118cdaa760e01b81523360048201526024016108d1565b602081015160ff161580156114bb5750606081015160ff16155b1561121d5760405163ce2c375160e01b815260040160405180910390fd5b602081015160ff90811614806114f45750602081015160ff16155b15611522576080810151511561151d576040516341d50bed60e11b815260040160405180910390fd5b611588565b806020015160ff1681608001515114158061155d57506002611546600160ff61421e565b6115509190614237565b60ff16816020015160ff16115b1561157b576040516341d50bed60e11b815260040160405180910390fd5b6115888160800151611aee565b604081015160ff90811614806115a35750604081015160ff16155b156115f75760a081015151156115cc5760405163211089b360e11b815260040160405180910390fd5b606081015160ff16156115f2576040516338682fa960e01b815260040160405180910390fd5b61169c565b806040015160ff168160a00151511415806116325750600261161b600160ff61421e565b6116259190614237565b60ff16816040015160ff16115b156116505760405163211089b360e11b815260040160405180910390fd5b606081015160ff1615806116715750806040015160ff16816060015160ff16115b1561168f576040516338682fa960e01b815260040160405180910390fd5b61169c8160a00151611aee565b6001600160a01b0383165f90815260016020818152604080842063ffffffff8716855282529283902084518154868401519587015160608801516001600160401b0390931668ffffffffffffffffff1990921691909117600160401b60ff97881602176affff0000000000000000001916600160481b9187169190910260ff60501b191617600160501b95909116949094029390931783556080840151805185949361174d939085019201906135a6565b5060a082015180516117699160028401916020909101906135a6565b505050505050565b604080518082019091525f808252602082015260607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633146117cf5760405163467409c360e01b815260040160405180910390fd5b5f806117dc888888611b53565b90925090505f8061180d6117f660608c0160408d01613b0e565b61180660808d0160608e016139fd565b858a611c1a565b909250905061181c8284614264565b604080518082019091529081526020810191909152945091925050505b94509492505050565b63ffffffff81165f9081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49602052604081208054600160401b900460ff16151580610fee575054600160501b900460ff16151592915050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f806118f98686611d24565b915091505f6119098b8b84611d3d565b90505f6119168c8c610566565b905061192b8a825f015163ffffffff16611d49565b80602001516001600160a01b031663709eb6648c8e8d886040518563ffffffff1660e01b81526004016119619493929190614277565b602060405180830381865afa15801561197c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a091906142a9565b6119aa9083614264565b91505f806119ba8e8e868e611d78565b90925090506119c98285614264565b9e909d509b505050505050505050505050565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f90602001611193565b335f9081526005602052604090205480821115611a645760405163068109f760e31b815260048101839052602481018290526044016108d1565b335f9081526005602052604090209190039055565b6001600160a01b038316611a91576113728282611e46565b611372838383611337565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611372908490611eef565b5f805b8251811015611372575f838281518110611b0d57611b0d613b6e565b60200260200101519050826001600160a01b0316816001600160a01b031611611b495760405163447516e160e01b815260040160405180910390fd5b9150600101611af1565b60605f805f611b628686611d24565b90925090505f611b8b611b7b60608a0160408b01613b0e565b6101da60808b0160608c016139fd565b90505f611b9b60c08a018a613ba0565b90509050611bb281835f015163ffffffff16611d49565b6020820151611be290611bcb60808c0160608d016139fd565b611bdb60608d0160408e01613b0e565b8488611f50565b611bec9086614264565b94505f80611bfa8b86612044565b9092509050611c098288614264565b909b909a5098505050505050505050565b6003545f9081906001600160a01b031615611839576040516001600160a01b038716602482015263ffffffff861660448201526064810185905283151560848201525f9060a40160408051601f19818403018152919052602080820180516001600160e01b0316636a8e2a4360e11b1790526003549192505f918291611cce916001600160a01b0316907f000000000000000000000000000000000000000000000000000000000000000090849087612066565b91509150611cde87878484612110565b90955093508415611d18576003546001600160a01b03165f9081526005602052604081208054879290611d12908490614264565b90915550505b50505094509492505050565b606080611d318484612187565b915091505b9250929050565b5f61120484848461226d565b80821115611d7457604051636333d79f60e11b815260048101839052602481018290526044016108d1565b5050565b6003545f9081906001600160a01b031615611839576040516001600160a01b038716602482015263ffffffff861660448201526064810185905283151560848201525f9060a40160408051601f19818403018152919052602080820180516001600160e01b031663d424422160e01b1790526003549192505f918291611e2a916001600160a01b0316907f000000000000000000000000000000000000000000000000000000000000000090866122e1565b91509150611e3a87878484612110565b94509450505050611839565b6001600160a01b038216611e6d576040516306b7a93160e41b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611eb6576040519150601f19603f3d011682016040523d82523d5f602084013e611ebb565b606091505b505090508061137257604051631196f20d60e21b81526001600160a01b0384166004820152602481018390526044016108d1565b5f611f036001600160a01b03841683612387565b905080515f14158015611f27575080806020019051810190611f2591906142c0565b155b1561137257604051635274afe760e01b81526001600160a01b03841660048201526024016108d1565b6040516338bf452160e11b81525f906001600160a01b0387169063717e8a4290611f84908890889088908890600401614277565b6020604051808303815f875af1158015611fa0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc491906142a9565b90508015611ff9576001600160a01b0386165f9081526005602052604081208054839290611ff3908490614264565b90915550505b604080516001600160a01b0388168152602081018390527f61ed099e74a97a1d7f8bb0952a88ca8b7b8ebd00c126ea04671f92a81213318a910160405180910390a195945050505050565b5f606061205b600561205586614346565b85612394565b909590945092505050565b5f6060863b80830361208b57604080515f808252602082019092529250925050612106565b5f805f8761ffff166001600160401b038111156120aa576120aa613be2565b6040519080825280601f01601f1916602001820160405280156120d4576020820181803683370190505b5090505f80885160208a018c8f8ff191503d9250878311156120f4578792505b828152825f602083013e909450925050505b9550959350505050565b5f80831580612120575082516020115b1561212f57505f905080611839565b5f8380602001905181019061214491906142a9565b905085156121545780915061217d565b5f600254881161216657600254612168565b875b90508082116121775781612179565b805b9350505b5094509492505050565b6060805f8061219686866124d9565b9150915080515f036121eb57604080515f8082526020820190925283916121df565b604080518082019091525f8152606060208201528152602001906001900390816121b85790505b50935093505050611d36565b6040805160018082528183019092525f91816020015b604080518082019091525f8152606060208201528152602001906001900390816122015790505090506040518060400160405280600260ff16815260200183815250815f8151811061225557612255613b6e565b60209081029190910101529196919550909350505050565b5f806122798585610c44565b90505f83515f146122a757835f8151811061229657612296613b6e565b6020026020010151602001516122b7565b60405180602001604052805f8152505b90505f806122c48361268d565b915091506122d584888a85856128e8565b98975050505050505050565b5f6060853b80830361230657604080515f808252602082019092529250925050611839565b5f805f8761ffff166001600160401b0381111561232557612325613be2565b6040519080825280601f01601f19166020018201604052801561234f576020820181803683370190505b5090505f80885160208a018d8dfa91503d92508783111561236e578792505b828152825f602083013e90999098509650505050505050565b6060610fee83835f612a7a565b5f60605f6123a185612b13565b90505f6123ad86612ba0565b805160208201206060880151604089015192935090915f6123ce8284610c44565b90505f89515f146123fc57895f815181106123eb576123eb613b6e565b60200260200101516020015161240c565b60405180602001604052805f8152505b9050606061245d8d846040518060a001604052808963ffffffff1681526020018c81526020018a8152602001875f01516001600160401b03168152602001886001600160a01b031681525085612bbd565b604051919b50915061247590899089906020016143e0565b60405160208183030381529060405298507f07ea52d82345d6e838192107d8fd7123d9c2ec8e916cd0aad13fd2b60db2464483608001518460a00151836040516124c19392919061440e565b60405180910390a15050505050505050935093915050565b60608060028310156125005760405163196499c760e21b81525f60048201526024016108d1565b5f61250e600282868861446a565b61251791614491565b60f01c90506002600219820161267657805f5b8683101561261c575f61254260018501858a8c61446a565b61254b916144c1565b60f81c90505f81900361257357604051636780cfaf60e01b81525f60048201526024016108d1565b8160ff165f03612585578091506125c1565b8160ff168160ff16146125c157365f6125a086868c8e61446a565b915091506125b18989868585612e4e565b9099509750859450919250829150505b60018401935f906125d790600301868b8d61446a565b6125e091614491565b60f01c90505f8190036126095760405163196499c760e21b8152600481018690526024016108d1565b8060020161ffff1685019450505061252a565b82871461263f5760405163196499c760e21b8152600481018490526024016108d1565b600287111561266f57365f61265685858b8d61446a565b915091506126678888858585612e4e565b909850965050505b5050612684565b612681828787612f6b565b93505b50509250929050565b60608082515f0361269d57915091565b5f6126a7846130f1565b90508060ff166001036127575760408051600180825281830190925290816020015b60608152602001906001900390816126c957905050925083835f815181106126f3576126f3613b6e565b60209081029190910101526040805160018082528183019092529081602001602082028036833701905050915061272b8460036131c8565b825f8151811061273d5761273d613b6e565b602002602001019060ff16908160ff168152505050915091565b8060ff166001600160401b0381111561277257612772613be2565b60405190808252806020026020018201604052801561279b578160200160208202803683370190505b5091508060ff166001600160401b038111156127b9576127b9613be2565b6040519080825280602002602001820160405280156127ec57816020015b60608152602001906001900390816127d75790505b5092505f8060ff5b865183101561287e576001909201915f61280e8885613223565b6002949094019390505f61282289866131c8565b90508260ff1660ff036128375780925061286f565b8260ff168160ff161461286f57600219848603015f6128578b878461327f565b90506128658a8a878461338b565b5093909301929150815b5061ffff1692909201916127f4565b8183035f61288d89858461327f565b905061289b8888858461338b565b5f5b8660ff168160ff1610156128dc57878160ff16815181106128c0576128c0613b6e565b6020908102919091010180515f190160ff16905260010161289d565b50505050505050915091565b5f80866040015187602001516128fe91906144ef565b90505f5b8160ff168160ff161015612a6f575f886020015160ff168260ff16106129565760a089015160208a0151612936908461421e565b60ff168151811061294957612949613b6e565b6020026020010151612978565b88608001518260ff168151811061296f5761296f613b6e565b60200260200101515b60408051602081019091525f808252919250905b86518110156129e4578360ff168782815181106129ab576129ab613b6e565b602002602001015160ff16036129dc578781815181106129cd576129cd613b6e565b602002602001015191506129e4565b60010161298c565b508951604051630c2eceab60e21b81526001600160a01b038416916330bb3aac91612a17918d918d908790600401614508565b602060405180830381865afa158015612a32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5691906142a9565b612a609086614264565b94505050806001019050612902565b505095945050505050565b606081471015612a9f5760405163cd78605960e01b81523060048201526024016108d1565b5f80856001600160a01b03168486604051612aba9190614546565b5f6040518083038185875af1925050503d805f8114612af4576040519150601f19603f3d011682016040523d82523d5f602084013e612af9565b606091505b5091509150612b0986838361349d565b9695505050505050565b805160208083015160408085015160608087015160808801519351600160f81b9681019690965260c09690961b6001600160c01b031916602186015260e093841b6001600160e01b031990811660298701526001600160a01b03909216602d8601529490921b909116604d83015260518201526071015b6040516020818303038152906040529050919050565b60608160a001518260c00151604051602001612b8a929190614557565b5f60605f80612bcb8561268d565b915091505f87604001518860200151612be491906144ef565b90508060ff166001600160401b03811115612c0157612c01613be2565b604051908082528060200260200182016040528015612c2a578160200160208202803683370190505b5093505f5b8160ff168160ff161015610c37575f896020015160ff168260ff1610612c835760a08a015160208b0151612c63908461421e565b60ff1681518110612c7657612c76613b6e565b6020026020010151612ca5565b89608001518260ff1681518110612c9c57612c9c613b6e565b60200260200101515b60408051602081019091525f808252919250905b8551811015612d11578360ff16868281518110612cd857612cd8613b6e565b602002602001015160ff1603612d0957868181518110612cfa57612cfa613b6e565b60200260200101519150612d11565b600101612cb9565b506040516395d376d760e01b81526001600160a01b038316906395d376d790612d40908d90859060040161457c565b6020604051808303815f875af1158015612d5c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d8091906142a9565b878460ff1681518110612d9557612d95613b6e565b6020026020010181815250505f878460ff1681518110612db757612db7613b6e565b60200260200101511115612e4457868360ff1681518110612dda57612dda613b6e565b60200260200101518c5f846001600160a01b03166001600160a01b031681526020019081526020015f205f828254612e129190614264565b92505081905550868360ff1681518110612e2e57612e2e613b6e565b602002602001015188612e419190614264565b97505b5050600101612c2f565b6060805f1960ff861601612ec957865115612e8c57868484604051602001612e78939291906145ed565b604051602081830303815290604052612ec2565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9650612f60565b60011960ff861601612f4257855115612f0557858484604051602001612ef1939291906145ed565b604051602081830303815290604052612f3b565b83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050505b9550612f60565b604051636780cfaf60e01b815260ff861660048201526024016108d1565b509495939450505050565b60605f1961ffff8516016130095760228214612f9a576040516301b8ca5560e31b815260040160405180910390fd5b5f612fba612fac60226002868861446a565b612fb591614613565b6134f9565b604051600160f81b60208201819052601160f01b602183015260238201526001600160801b0319608083901b166024820152909150603401604051602081830303815290604052915050610fee565b60011961ffff8516016130d2576042821115806130265750606282115b15613044576040516360493e2b60e11b815260040160405180910390fd5b5f613056612fac60226002868861446a565b90505f61306a612fac60426022878961446a565b90505f604119850161307f866042818a61446a565b61308891614613565b60405160086020938403029190911c92506130b9916001916011918391889183916031916002918b918b9101614630565b6040516020818303038152906040529350505050610fee565b604051630417051360e41b815261ffff851660048201526024016108d1565b5f80805b835182101561319d576001909101905f61310f8584613223565b905060028301925060028161ffff1610156131405760405163013adb8360e21b8152600481018490526024016108d1565b5f61314b86856131c8565b90508060ff1660ff03613171576040516334f4f66f60e21b815260040160405180910390fd5b600160ff82161b831661318e5760019485019460ff82161b831792505b5061ffff1691909101906130f5565b835182146131c15760405163013adb8360e21b8152600481018390526024016108d1565b5050919050565b5f6131d4826001614264565b8351101561321a5760405162461bcd60e51b8152602060048201526013602482015272746f55696e74385f6f75744f66426f756e647360681b60448201526064016108d1565b50016001015190565b5f61322f826002614264565b835110156132765760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b60448201526064016108d1565b50016002015190565b60608161328d81601f614264565b10156132cc5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016108d1565b6132d68284614264565b8451101561331a5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016108d1565b6060821580156133385760405191505f825260208201604052613382565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613371578051835260209283019201613359565b5050858452601f01601f1916604052505b50949350505050565b8160ff1660ff036133af576040516334f4f66f60e21b815260040160405180910390fd5b5f6133bb8360016144ef565b90505f5b8451811015611769575f8582815181106133db576133db613b6e565b602002602001015190508060ff168360ff16036134505786828151811061340457613404613b6e565b60200260200101518460405160200161341e9291906143e0565b60405160208183030381529060405287838151811061343f5761343f613b6e565b602002602001018190525050611769565b8060ff165f03613494578286838151811061346d5761346d613b6e565b602002602001019060ff16908160ff16815250508387838151811061343f5761343f613b6e565b506001016133bf565b6060826134b2576134ad82613539565b610fee565b81511580156134c957506001600160a01b0384163b155b156134f257604051639996b31560e01b81526001600160a01b03851660048201526024016108d1565b5080610fee565b5f6fffffffffffffffffffffffffffffffff821115613535576040516306dfcc6560e41b815260806004820152602481018390526044016108d1565b5090565b8051156135495780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040518060c001604052805f6001600160401b031681526020015f60ff1681526020015f60ff1681526020015f60ff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156135f9579160200282015b828111156135f957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906135c4565b506135359291505b80821115613535575f8155600101613601565b5f60208284031215613624575f80fd5b81356001600160e01b031981168114610fee575f80fd5b6001600160a01b038116811461121d575f80fd5b803561365a8161363b565b919050565b63ffffffff8116811461121d575f80fd5b803561365a8161365f565b5f806040838503121561368c575f80fd5b82356136978161363b565b915060208301356136a78161365f565b809150509250929050565b815163ffffffff1681526020808301516001600160a01b03169082015260408101610560565b60208101600383106136f857634e487b7160e01b5f52602160045260245ffd5b91905290565b5f805f60608486031215613710575f80fd5b833561371b8161363b565b9250602084013561372b8161363b565b929592945050506040919091013590565b5f8083601f84011261374c575f80fd5b5081356001600160401b03811115613762575f80fd5b6020830191508360208260051b8501011115611d36575f80fd5b5f805f6040848603121561378e575f80fd5b83356137998161363b565b925060208401356001600160401b038111156137b3575f80fd5b6137bf8682870161373c565b9497909650939450505050565b5f80602083850312156137dd575f80fd5b82356001600160401b038111156137f2575f80fd5b6137fe8582860161373c565b90969095509350505050565b5f815180845260208085019450602084015f5b838110156138425781516001600160a01b03168752958201959082019060010161381d565b509495945050505050565b6001600160401b03815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525f608082015160c0608085015261389b60c085018261380a565b905060a083015184820360a08601526138b4828261380a565b95945050505050565b602081525f610fee602083018461384d565b801515811461121d575f80fd5b803561365a816138cf565b5f805f80606085870312156138fa575f80fd5b84356001600160401b0380821115613910575f80fd5b9086019060e08289031215613923575f80fd5b90945060208601359080821115613938575f80fd5b818701915087601f83011261394b575f80fd5b813581811115613959575f80fd5b88602082850101111561396a575f80fd5b602083019550809450505050613982604086016138dc565b905092959194509250565b5f5b838110156139a757818101518382015260200161398f565b50505f910152565b5f81518084526139c681602086016020860161398d565b601f01601f19169290920160200192915050565b8251815260208084015190820152606060408201525f61120460608301846139af565b5f60208284031215613a0d575f80fd5b8135610fee8161365f565b5f805f60608486031215613a2a575f80fd5b8335613a358161365f565b92506020840135613a458161363b565b91506040840135613a558161365f565b809150509250925092565b602081525f610fee60208301846139af565b5f8060208385031215613a83575f80fd5b82356001600160401b0380821115613a99575f80fd5b818501915085601f830112613aac575f80fd5b813581811115613aba575f80fd5b866020606083028501011115613ace575f80fd5b60209290920196919550909350505050565b5f60208284031215613af0575f80fd5b5035919050565b815181526020808301519082015260408101610560565b5f60208284031215613b1e575f80fd5b8135610fee8161363b565b5f8060408385031215613b3a575f80fd5b8235613b458161363b565b946020939093013593505050565b5f60208284031215613b63575f80fd5b8151610fee8161363b565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112613b96575f80fd5b9190910192915050565b5f808335601e19843603018112613bb5575f80fd5b8301803591506001600160401b03821115613bce575f80fd5b602001915036819003821315611d36575f80fd5b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715613c1857613c18613be2565b60405290565b60405160e081016001600160401b0381118282101715613c1857613c18613be2565b604051601f8201601f191681016001600160401b0381118282101715613c6857613c68613be2565b604052919050565b5f60408284031215613c80575f80fd5b604051604081018181106001600160401b0382111715613ca257613ca2613be2565b6040528235613cb08161365f565b81526020830135613cc08161363b565b60208201529392505050565b80356001600160401b038116811461365a575f80fd5b803560ff8116811461365a575f80fd5b5f82601f830112613d01575f80fd5b813560206001600160401b03821115613d1c57613d1c613be2565b8160051b613d2b828201613c40565b9283528481018201928281019087851115613d44575f80fd5b83870192505b84831015613d6c578235613d5d8161363b565b82529183019190830190613d4a565b979650505050505050565b5f60c08284031215613d87575f80fd5b613d8f613bf6565b9050613d9a82613ccc565b8152613da860208301613ce2565b6020820152613db960408301613ce2565b6040820152613dca60608301613ce2565b606082015260808201356001600160401b0380821115613de8575f80fd5b613df485838601613cf2565b608084015260a0840135915080821115613e0c575f80fd5b50613e1984828501613cf2565b60a08301525092915050565b5f60208284031215613e35575f80fd5b81356001600160401b03811115613e4a575f80fd5b61120484828501613d77565b5f8235603e19833603018112613b96575f80fd5b5f823560be19833603018112613b96575f80fd5b5f60208284031215613e8e575f80fd5b610fee82613ce2565b5f60208284031215613ea7575f80fd5b610fee82613ccc565b5f6105603683613d77565b5f808335601e19843603018112613ed0575f80fd5b83016020810192503590506001600160401b03811115613eee575f80fd5b8060051b3603821315611d36575f80fd5b8183525f60208085019450825f5b85811015613842578135613f208161363b565b6001600160a01b031687529582019590820190600101613f0d565b60208082528181018390525f906040808401600586901b8501820187855b8881101561406f57603f19808985030185528235603e198c3603018112613f7e575f80fd5b8b018035613f8b8161365f565b63ffffffff168552808801353682900360be19018112613fa9575f80fd5b85890