1 tx
2 calls
constructor
No constructor.
functions
_APPROVE_PROXY
viewfunction _APPROVE_PROXY() view returns (address)
_WETH
viewfunction _WETH() view returns (address)
_WNATIVE_RELAY
viewfunction _WNATIVE_RELAY() view returns (address)
admin
viewfunction admin() view returns (address)
approveProxy
viewfunction approveProxy() view returns (address)
commissionRateLimit
viewfunction commissionRateLimit() view returns (uint256)
DENOMINATOR
viewfunction DENOMINATOR() view returns (uint256)
feeRateAndReceiver_UNUSED
viewfunction feeRateAndReceiver_UNUSED() view returns (uint256)
operator_UNUSED
viewfunction operator_UNUSED(address) view returns (address)
orderRemaining_UNUSED
viewfunction orderRemaining_UNUSED(bytes32) view returns (uint256)
owner
viewfunction owner() view returns (address)
priorityAddresses
viewfunction priorityAddresses(address) view returns (bool)
version
viewfunction version() view returns (string)
wNativeRelayer
viewfunction wNativeRelayer() view returns (address)
initialize
nonpayablefunction initialize()
renounceOwnership
nonpayablefunction renounceOwnership()
setPriorityAddress
nonpayablefunction setPriorityAddress(address _priorityAddress, bool valid)
setProtocolAdmin
nonpayablefunction setProtocolAdmin(address _newAdmin)
smartSwapByInvest
payablefunction smartSwapByInvest(tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData, address to) payable returns (uint256 returnAmount)
smartSwapByInvestWithRefund
payablefunction smartSwapByInvestWithRefund(tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData, address to, address refundTo) payable returns (uint256 returnAmount)
smartSwapByOrderId
payablefunction smartSwapByOrderId(uint256 orderId, tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData) payable returns (uint256 returnAmount)
smartSwapByOrderIdByXBridge
payablefunction smartSwapByOrderIdByXBridge(uint256 orderId, tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData) payable returns (uint256 returnAmount)
smartSwapTo
payablefunction smartSwapTo(uint256 orderId, address receiver, tuple baseRequest, uint256[] batchesAmount, tuple[][] batches, tuple[] extraData) payable returns (uint256 returnAmount)
swapWrap
payablefunction swapWrap(uint256 orderId, uint256 rawdata) payable
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes)
uniswapV3SwapTo
payablefunction uniswapV3SwapTo(uint256 receiver, uint256 amount, uint256 minReturn, uint256[] pools) payable returns (uint256 returnAmount)
uniswapV3SwapToByXBridge
payablefunction uniswapV3SwapToByXBridge(uint256 receiver, uint256 amount, uint256 minReturn, uint256[] pools) payable returns (uint256 returnAmount)
uniswapV3SwapToWithPermit
nonpayablefunction uniswapV3SwapToWithPermit(uint256 receiver, address srcToken, uint256 amount, uint256 minReturn, uint256[] pools, bytes permit) returns (uint256 returnAmount)
unxswapByOrderId
payablefunction unxswapByOrderId(uint256 srcToken, uint256 amount, uint256 minReturn, bytes32[] pools) payable returns (uint256 returnAmount)
unxswapByOrderIdByXBridge
payablefunction unxswapByOrderIdByXBridge(uint256 srcToken, uint256 amount, uint256 minReturn, bytes32[] pools) payable returns (uint256 returnAmount)
unxswapTo
payablefunction unxswapTo(uint256 srcToken, uint256 amount, uint256 minReturn, address receiver, bytes32[] pools) payable returns (uint256 returnAmount)
events
AdminChanged
event AdminChanged(address newAdmin)
CommissionFromTokenRecord
event CommissionFromTokenRecord(address fromTokenAddress, uint256 commissionAmount, address referrerAddress)
CommissionToTokenRecord
event CommissionToTokenRecord(address toTokenAddress, uint256 commissionAmount, address referrerAddress)
Initialized
event Initialized(uint8 version)
OrderRecord
event OrderRecord(address fromToken, address toToken, address sender, uint256 fromAmount, uint256 returnAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PriorityAddressChanged
event PriorityAddressChanged(address priorityAddress, bool valid)
SwapOrderId
event SwapOrderId(uint256 id)
errors
SafeTransferFailed
error SafeTransferFailed()
creation bytecode
0x608060405234801561001057600080fd5b506154a1806100206000396000f3fe6080604052600436106101e75760003560e01c80639871efa411610102578063e0af361611610095578063f3dced3c11610064578063f3dced3c1461059e578063f3e144b6146105be578063f851a440146105de578063fa461e33146105fe57600080fd5b8063e0af361614610523578063e99bfa951461053e578063f1489b9f14610551578063f2fde38b1461057e57600080fd5b8063d13a35e6116100d1578063d13a35e6146104c7578063d1b260d4146104e7578063d3507df5146104fa578063d8837daf1461051057600080fd5b80639871efa4146104695780639a09b2851461047c578063b80c2f091461049c578063ca68d8f6146104af57600080fd5b8063715018a61161017a5780638575654f116101495780638575654f146103e0578063869c6b4b146103f35780638da5cb5b14610433578063918f86741461045157600080fd5b8063715018a61461036e57806373679b6b14610383578063779e45fc146103ab5780638129fc1c146103cb57600080fd5b806327f9fa1e116101b657806327f9fa1e1461029d57806354fd4d50146102eb578063591b3d08146103335780636aa476451461034657600080fd5b806301617fab1461023e57806303b87e5f1461025157806308298b5a146102775780630d5f0e3b1461028a57600080fd5b36610239573233036102375760405162461bcd60e51b81526020600482015260146024820152731155120819195c1bdcda5d081c995a9958dd195960621b60448201526064015b60405180910390fd5b005b600080fd5b61023761024c366004614458565b61061e565b61026461025f366004614502565b610a54565b6040519081526020015b60405180910390f35b6102646102853660046145ce565b610b18565b610264610298366004614640565b610b5a565b3480156102a957600080fd5b506102d36102b83660046146a0565b60b4602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161026e565b3480156102f757600080fd5b506103266040518060400160405280600f81526020016e76312e302e332d646563696d616c3960881b81525081565b60405161026e919061470d565b610264610341366004614cf7565b610b9a565b34801561035257600080fd5b506102d3732949a7b2771cc70ecd400871236d345979e1c5e781565b34801561037a57600080fd5b50610237610e13565b34801561038f57600080fd5b506102d373f828bc75b2b63dac9dd84642acce1bb88e84253181565b3480156103b757600080fd5b506102376103c6366004614db9565b610e27565b3480156103d757600080fd5b50610237610ede565b6102646103ee366004614640565b610ff8565b3480156103ff57600080fd5b5061042361040e3660046146a0565b60996020526000908152604090205460ff1681565b604051901515815260200161026e565b34801561043f57600080fd5b506033546001600160a01b03166102d3565b34801561045d57600080fd5b50610264633b9aca0081565b610264610477366004614640565b6110fb565b34801561048857600080fd5b506102376104973660046146a0565b611132565b6102646104aa366004614df2565b6111d4565b3480156104bb57600080fd5b506102646301c9c38081565b3480156104d357600080fd5b506098546102d3906001600160a01b031681565b6102646104f5366004614df2565b611252565b34801561050657600080fd5b5061026460b65481565b61026461051e366004614640565b6113d9565b34801561052f57600080fd5b506102d36006602160991b0181565b61026461054c366004614ea8565b6114d8565b34801561055d57600080fd5b5061026461056c366004614f58565b60b56020526000908152604090205481565b34801561058a57600080fd5b506102376105993660046146a0565b6114e8565b3480156105aa57600080fd5b506097546102d3906001600160a01b031681565b3480156105ca57600080fd5b506102646105d9366004614fb2565b61155e565b3480156105ea57600080fd5b5060ad546102d3906001600160a01b031681565b34801561060a57600080fd5b5061023761061936600461503c565b6115ac565b600160ff1b81166001600160801b038216806106715760405162461bcd60e51b81526020600482015260126024820152710616d6f756e74206d757374206265203e20360741b604482015260640161022e565b600061067b6117fb565b905060008361069e5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6106a7565b6006602160991b015b90506000806106c284843333896001600160801b0316611928565b91509150851561088d5760405163052f523360e11b81526006602160991b01600482015233602482015273f828bc75b2b63dac9dd84642acce1bb88e84253160448201526001600160801b0386166064820152732949a7b2771cc70ecd400871236d345979e1c5e790630a5ea46690608401600060405180830381600087803b15801561074e57600080fd5b505af1158015610762573d6000803e3d6000fd5b5050604051632e1a7d4d60e01b81526001600160801b038816600482015273f828bc75b2b63dac9dd84642acce1bb88e8425319250632e1a7d4d9150602401600060405180830381600087803b1580156107bb57600080fd5b505af11580156107cf573d6000803e3d6000fd5b505050506001600160a01b0382163014610888576000826001600160a01b03164760405160006040518083038185875af1925050503d8060008114610830576040519150601f19603f3d011682016040523d82523d6000602084013e610835565b606091505b50509050806108865760405162461bcd60e51b815260206004820152601c60248201527f7472616e73666572206e617469766520746f6b656e206661696c656400000000604482015260640161022e565b505b610974565b83516108e457846001600160801b031634146108e45760405162461bcd60e51b81526020600482015260166024820152751d985b1d59481b9bdd08195c5d585b08185b5bdd5b9d60521b604482015260640161022e565b6006602160991b016001600160a01b031663d0e30db0866001600160801b03166040518263ffffffff1660e01b81526004016000604051808303818588803b15801561092f57600080fd5b505af1158015610943573d6000803e3d6000fd5b505050506001600160a01b03831630149050610974576109746006602160991b0183876001600160801b0316611c76565b6000610981853384611ca6565b905060008051602061544c833981519152896040516109a291815260200190565b60405180910390a160008051602061542c833981519152876109d85773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6109e1565b6006602160991b015b886109f3576006602160991b01610a09565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee5b604080516001600160a01b03938416815292909116602083015232908201526001600160801b03881660608201819052608082015260a00160405180910390a1505050505050505050565b6000876080013542811015610a7b5760405162461bcd60e51b815260040161022e9061508e565b610a8361204a565b6040518b815260008051602061544c8339815191529060200160405180910390a1610afe33808c610ab9368e90038e018e6150b6565b8c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610af992508d91508e90506150d2565b6120a3565b9150610b0a6001606555565b509998505050505050505050565b60405160a087901c815260009060008051602061544c8339815191529060200160405180910390a1610b4f87878733888888612165565b979650505050505050565b60405160a086901c815260009060008051602061544c8339815191529060200160405180910390a1610b903387878787876121fd565b9695505050505050565b6000866080015142811015610bc15760405162461bcd60e51b815260040161022e9061508e565b610bc961204a565b87516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed198101610c2f5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21039b7bab931b2903a37b5b2b760611b604482015260640161022e565b6001600160a01b038416610c7e5760405162461bcd60e51b8152602060048201526016602482015275726566756e64546f206973206164647265737328302960501b604482015260640161022e565b6001600160a01b038516610cc75760405162461bcd60e51b815260206004820152601060248201526f746f206973206164647265737328302960801b604482015260640161022e565b6000896040015111610d125760405162461bcd60e51b8152602060048201526014602482015273066726f6d546f6b656e416d6f756e7420697320360641b604482015260640161022e565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7d91906150df565b905060005b8951811015610de4578a60400151828b8381518110610da357610da36150f8565b6020026020010151610db59190615124565b610dbf919061513b565b8a8281518110610dd157610dd16150f8565b6020908102919091010152600101610d82565b5060408a01819052610dfa8a8a8a30898b612385565b93505050610e086001606555565b509695505050505050565b610e1b6126b5565b610e25600061270f565b565b60ad546001600160a01b0316331480610e4a57506033546001600160a01b031633145b610e7b5760405162461bcd60e51b81526020600482015260026024820152616e6160f01b604482015260640161022e565b6001600160a01b038216600081815260996020908152604091829020805460ff19168515159081179091558251938452908301527fede97de789011d2becb9fba8441864c3b17f4a20f7ebf0a77e93f30adc30e207910160405180910390a15050565b600054610100900460ff1615808015610efe5750600054600160ff909116105b80610f185750303b158015610f18575060005460ff166001145b610f7b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161022e565b6000805460ff191660011790558015610f9e576000805461ff0019166101001790555b610fa6612761565b610fae612790565b8015610ff5576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b50565b3360009081526099602052604081205460ff16151560011461102c5760405162461bcd60e51b815260040161022e9061515d565b60405160a087901c815260008051602061544c8339815191529060200160405180910390a1600080336001600160a01b031663534015b36040518163ffffffff1660e01b81526004016040805180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190615184565b90925090506001600160a01b0381166110e05760405162461bcd60e51b815260040161022e906151b3565b6110ef88888885858a8a612165565b98975050505050505050565b60405160a086901c815260009060008051602061544c8339815191529060200160405180910390a1610b9086868633338888612165565b60ad546001600160a01b031633148061115557506033546001600160a01b031633145b6111865760405162461bcd60e51b81526020600482015260026024820152616e6160f01b604482015260640161022e565b60ad80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7ce7ec0b50378fb6c0186ffb5f48325f6593fcb4ca4386f21861af3129188f5c90602001610fec565b60008760800135428110156111fb5760405162461bcd60e51b815260040161022e9061508e565b61120361204a565b6040518a815260008051602061544c8339815191529060200160405180910390a1611239338080610ab9368e90038e018e6150b6565b91506112456001606555565b5098975050505050505050565b60008760800135428110156112795760405162461bcd60e51b815260040161022e9061508e565b61128161204a565b3360009081526099602052604090205460ff1615156001146112b55760405162461bcd60e51b815260040161022e9061515d565b6040518a815260008051602061544c8339815191529060200160405180910390a1600080336001600160a01b031663534015b36040518163ffffffff1660e01b81526004016040805180830381865afa158015611316573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133a9190615184565b90925090506001600160a01b0381166113655760405162461bcd60e51b815260040161022e906151b3565b6113cb8283838e80360381019061137c91906150b6565b8e8e80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508d8d90610af991906150d2565b935050506112456001606555565b3360009081526099602052604081205460ff16151560011461140d5760405162461bcd60e51b815260040161022e9061515d565b60405160a087901c815260008051602061544c8339815191529060200160405180910390a1600080336001600160a01b031663534015b36040518163ffffffff1660e01b81526004016040805180830381865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114969190615184565b90925090506001600160a01b0381166114c15760405162461bcd60e51b815260040161022e906151b3565b6110ef82826001600160a01b0316898989896121fd565b6000610b90868686868687610b9a565b6114f06126b5565b6001600160a01b0381166115555760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161022e565b610ff58161270f565b60405160a089901c815260009060008051602061544c8339815191529060200160405180910390a16115918884846127bf565b61159f338a898989896121fd565b9998505050505050505050565b61164d565b3d6000803e3d6000fd5b67a9059cbb70a0823160c01b815230816008015260206000602483600401855afa6115e8576115e86115b1565b60005180156116135760a4356004830152602482018190526116136020600060448582885af1611618565b505050565b80611625576116256115b1565b600160005114601f3d11163d15178061164957633c9fd93960e21b60005260046000fd5b5050565b604051601581017306ff0b40e9091053eee51fa1d482ce5d852f523360611b825260206000600484335afa611684576116846115b1565b6020806004808501335afa61169b5761169b6115b1565b60206040600460088501335afa6116b4576116b46115b1565b60008060008813600181146116d05760205192508791506116d9565b60005192508891505b507fff33128a8fc17869897dce68ed026d694621f6fdfd00000000000000000000008452606060002083527fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5460208401526001600160a01b036055852016925033831461175157635960139160e11b60005260046000fd5b60843592507306ff0b40e9091053eee51fa1d482ce5d852f523360611b8452308314600181146117c3578260148601528360348601523360548601528160748601526117be602060006084601089016000732949a7b2771cc70ecd400871236d345979e1c5e75af1611618565b6117f0565b3360108601528160308601526117e6602060006044600c89016000885af1611618565b6117f083866115bb565b505050505050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260405160e081016040525060203603356001600160d01b031981166522220afc2bbb60d01b8114651111057e155560d11b821417651111057e155560d11b8214651e51057e155560d11b83141784526522220afc2bbb60d01b8214653ca20afc2bbb60d01b831417846020015265ffffffffffff60a01b831660a01c84604001526001600160a01b03831684606001526001600160a01b03604036033516846080015260018114600181146118f65760008560a0015260008560c00152611921565b6060360335935065ffffffffffff60a01b841660a01c8560a001526001600160a01b0384168560c001525b5050505090565b60008086602001511561194d5730611944886080015130612925565b91509150611c6c565b865161195e57508290506000611c6c565b61197f565b62461bcd60e51b600052600160e51b6020528060405250806000fd5b604087015160a08801518082016301c9c3808111156119c0576119c0605f7c1b6572726f7220636f6d6d697373696f6e2072617465206c696d697400611963565b60808a015189811473eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee82148b151617611a0f57611a0f605b7c17746f6b656e20616e6420737263206e6f74206d617463680000000000611963565b60608b015182633b9aca000385890204945073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee821460018114611aba576040516084810160405263052f523360e11b81528360048201528b60248201528260448201528660648201526000806084836000732949a7b2771cc70ecd400871236d345979e1c5e75af1905080611ab457611ab460577304d8db185a5b481d1bdad95b9cc819985a5b1959604a1b611963565b50611af3565b60008060008089865af180611af157611af1605f7c1b636f6d6d697373696f6e2077697468206574686572206572726f7200611963565b505b50604051606081016040528281528560208201528160408201527f0d3b1268ca3dbb6d3d8a0ea35f44f8f9d58cf578d732680b71b6904fb2733e0d606082a150508215611c605760c08b0151935081633b9aca00038388020473eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee821460018114611be5576040516084810160405263052f523360e11b81528360048201528b60248201528660448201528260648201526000806084836000732949a7b2771cc70ecd400871236d345979e1c5e75af1905080611bdf57611bdf60577304d8db185a5b481d1bdad95b9cc819985a5b1959604a1b611963565b50611c1e565b600080600080858a5af180611c1c57611c1c605f7c1b636f6d6d697373696f6e2077697468206574686572206572726f7200611963565b505b50604051606081016040528281528160208201528560408201527f0d3b1268ca3dbb6d3d8a0ea35f44f8f9d58cf578d732680b71b6904fb2733e0d606082a150505b50505050836000915091505b9550959350505050565b611c898363a9059cbb60e01b84846129ab565b6116135760405163fb7f507960e01b815260040160405180910390fd5b60008360200151611cb957506000612043565b604084015160a08501516301c9c3808183011115611cf957611cf9605f7c1b6572726f7220636f6d6d697373696f6e2072617465206c696d697400611963565b608086015160608701516040516060810160405273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee831460018114611f0057604051604c81016040526fa9059cbba9059cbba9059cbb70a0823160801b8152306010820152602060006024600c8401885afa80611d8757611d876058740519d95d0818985b185b98d953d98819985a5b195960421b611963565b6000518a811015611dab57611dab604d6a029cdd588819985a5b195960921b611963565b8a81039050633b9aca0089820204995085600c84015289602c84015260008060446008860160008b5af1915081611e0457611e04605f7c1b7472616e7366657220746f6b656e2072656665726572206661696c00611963565b86855289602086015285604086015260008051602061540c833981519152606086a18715611ea95760c08d0151633b9aca0089830204808c019b5081600886015280602886015260008060446004880160008d5af1935083611e8857611e88605f7c1b7472616e7366657220746f6b656e2072656665726572206661696c00611963565b8887526020870152604086015260008051602061540c833981519152606086a15b6001600160a01b038c1660048401528990036024830152600080604484828a5af1905080611ef957611ef960607c1c7472616e7366657220746f6b656e207265636569766572206661696c611963565b505061203c565b87471015611f2157611f21604d6a029cdd588819985a5b195960921b611963565b874703633b9aca008782020497506000806000808b885af180611f6657611f66605d7c197472616e73666572206574682072656665726572206661696c000000611963565b85845288602085015284604085015260008051602061540c833981519152606085a18615611ff85760c08c0151633b9aca0083890204998a0199600080808084865af180611fd657611fd6605d7c197472616e73666572206574682072656665726572206661696c000000611963565b508786526020860152604085015260008051602061540c833981519152606085a15b6000806000808c86038f60601b60601c5af190508061203957612039605e7c1a7472616e7366657220657468207265636569766572206661696c0000611963565b50505b5050505050505b9392505050565b60026065540361209c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161022e565b6002606555565b60006001600160a01b0385166120e95760405162461bcd60e51b815260206004820152600b60248201526a6e6f74206164647228302960a81b604482015260640161022e565b60006120f36117fb565b905060008061211c8361211089600001516001600160a01b031690565b8c8b8b60400151611928565b9092509050896000612132898989858f89612385565b90506000612141868c86611ca6565b905061214d81836151db565b9d9c50505050505050505050505050565b6001606555565b60006001600160a01b0384166121ab5760405162461bcd60e51b815260206004820152600b60248201526a6e6f74206164647228302960a81b604482015260640161022e565b60006121b56117fb565b90506000806121d0836001600160a01b038d168a8a8e611928565b9150915060006121ee6001600160a01b038d168c8c8a8a8e896129ff565b90506000612141858a85611ca6565b6000806122086117fb565b90506000341561222d575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee612352565b60006001600160a01b038686600081811061224a5761224a6150f8565b905060200201351690506000600160ff1b8787600081811061226e5761226e6150f8565b9050602002013516600014905080156122ea57816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e391906151ee565b925061234f565b816001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061234c91906151ee565b92505b50505b60008061236284848d8d8d611928565b9150915060006123768c848c8c8c8c613211565b90506000612141868d85611ca6565b604086015160009087906123e65760405162461bcd60e51b815260206004820152602260248201527f526f7574653a2066726f6d546f6b656e416d6f756e74206d757374206265203e604482015261020360f41b606482015260840161022e565b805160208201516001600160a01b0391821691612404911685613726565b925061240f816137ba565b15612477576006602160991b016001600160a01b031663d0e30db083604001516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561245a57600080fd5b505af115801561246e573d6000803e3d6000fd5b50505050503095505b6000805b89518110156124b357898181518110612496576124966150f8565b6020026020010151826124a9919061520b565b915060010161247b565b5082604001518111156125265760405162461bcd60e51b815260206004820152603560248201527f526f7574653a206e756d626572206f6620626174636865732073686f756c64206044820152741899480f0f48199c9bdb551bdad95b905b5bdd5b9d605a1b606482015260840161022e565b50865188511461256a5760405162461bcd60e51b815260206004820152600f60248201526e0d8cadccee8d040dad2e6dac2e8c6d608b1b604482015260640161022e565b60005b87518110156125d3576125cb87878761259287602001516001600160a01b03166137ba565b8d86815181106125a4576125a46150f8565b60200260200101518d87815181106125be576125be6150f8565b60200260200101516137dc565b60010161256d565b506125e2826020015185613954565b602082015183906125fc906001600160a01b031686613726565b61260691906151db565b925081606001518310156126555760405162461bcd60e51b8152602060048201526016602482015275135a5b881c995d1d5c9b881b9bdd081c995858da195960521b604482015260640161022e565b60208083015160408085015181516001600160a01b03808716825290931693830193909352329082015260608101919091526080810184905260008051602061542c8339815191529060a00160405180910390a150509695505050505050565b6033546001600160a01b03163314610e255760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161022e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166127885760405162461bcd60e51b815260040161022e9061521e565b610e25613c0e565b600054610100900460ff166127b75760405162461bcd60e51b815260040161022e9061521e565b610e25613c3e565b8015611613576000606060e0839003612860576040516001600160a01b038616906127f99063d505accf60e01b9087908790602001615269565b60408051601f19818403018152908290526128139161528d565b6000604051808303816000865af19150503d8060008114612850576040519150601f19603f3d011682016040523d82523d6000602084013e612855565b606091505b5090925090506128cf565b610100839003612891576040516001600160a01b038616906127f9906323f2ebc360e21b9087908790602001615269565b60405162461bcd60e51b81526020600482015260136024820152720aee4dedcce40e0cae4dad2e840d8cadccee8d606b1b604482015260640161022e565b8161291e57612905816040518060400160405280600f81526020016e02832b936b4ba103330b4b632b21d1608d1b815250613c65565b60405162461bcd60e51b815260040161022e919061470d565b5050505050565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee83146001811461299f57604051602481016040526370a0823160e01b815283600482015260206000602483885afa905080612994576129946058740519d95d0818985b185b98d953d98819985a5b195960421b611963565b5060005191506129a4565b823191505b5092915050565b60006040518481528360048201528260248201526020600060448360008a5af191505080156129f7573d80156129ed57600160005114601f3d111691506129f5565b6000863b1191505b505b949350505050565b6000612c2f565b828152600060206000600484600401865afa612a3b57612a3b6054700419d95d081d1bdad95b8819985a5b195960621b611963565b505060005192915050565b6770a082310dfe168160c01b815260008060206000600485600401875afa612a8957612a89605672049d1bdad95b8c0818d85b1b0819985a5b195960521b611963565b600051915083836004015260206000602485855afa612aca57612aca60597c1562616c616e63654f662063616c6c206661696c656400000000000000611963565b60005190509250929050565b6770a08231d21220a760c01b815260008060206000600485600401875afa612a8957612a89605672049d1bdad95b8c4818d85b1b0819985a5b195960521b611963565b668b0367c240bc6b60c21b8152600060406000600484600401875afa612b6157612b6160587c1472657365727665732063616c6c206661696c65640000000000000000611963565b600051602051868015612b8d578915612b8557612b7e8786612ad6565b8390039650505b909190612ba4565b8815612ba457612b9d8786612a46565b8490039650505b50668b0367c240bc6b60c21b8452898502633b9aca009290920282019102049050848015612bde5781600484015260006024840152612bec565b600060048401528160248401525b50886044830152608060648301526000608483015260008060a4846000885af16110ef576110ef605470041cddd85c0818d85b1b0819985a5b195960621b611963565b846020850281018580612c5657612c56604e6b0b656d70747920706f6f6c7360901b611963565b5060405182358b1560018114612d00573415612c8c57612c8c60557111696e76616c6964206d73672e76616c756560581b611963565b63052f523360e11b83528c60048401528760248401526001600160a01b03821660448401528b60648401526000806084856000732949a7b2771cc70ecd400871236d345979e1c5e75af1612cfb57612cfb6056720498db185a5b481d1bdad95b8819985a5b195960521b611963565b612dbf565b60018c341003612d2a57612d2a60557111696e76616c6964206d73672e76616c756560581b611963565b670a9059cbbd0e30db60c41b835260008060048086018f6006602160991b015af1612d7057612d706056720499195c1bdcda5d081155120819985a5b195960521b611963565b6001600160a01b03821683600401528b83602401526020600060448560006006602160991b015af1612dbf57612dbf605874051d1c985b9cd9995c8815d155120819985a5b195960421b611963565b508a9450602084015b83811015612e1e578035612e126001600160a01b03821663ffffffff60a01b851660a01c600160fd1b8616600160fc1b8716600160ff1b88166001600160a01b0389168d8b612b19565b96509150602001612dc8565b5060009350600160fe1b81168015612f655760009450612e6b3063ffffffff60a01b841660a01c600160fd1b8516600160fc1b8616600160ff1b87166001600160a01b0388168c8a612b19565b9550672e1a7d4da9059cbb60c01b835273f828bc75b2b63dac9dd84642acce1bb88e84253160088401528560288401526020600060448560040160006006602160991b015af1612ed857612ed8605874051d1c985b9cd9995c8815d155120819985a5b195960421b611963565b85600484015260206000602485600073f828bc75b2b63dac9dd84642acce1bb88e8425315af1612f2a57612f2a60577c13776974686472617720455448206661696c6564000000000000000000611963565b600080600080898b5af1612f6057612f6060577c137472616e7366657220455448206661696c6564000000000000000000611963565b6131a3565b60009350600160ff1b8216801561301757600160fc1b831615613012576770a082310dfe168160c01b8452602060006004866004016001600160a01b0387165afa612fcb57612fcb605672049d1bdad95b8c0818d85b1b0819985a5b195960521b611963565b600051955087846004015260206000602486895afa61300c5761300c60567c15746f6b656e302062616c616e6365206661696c656400000000000000611963565b60005194505b6130b3565b600160fd1b8316156130b3576770a08231d21220a760c01b8452602060006004866004016001600160a01b0387165afa61306c5761306c605672049d1bdad95b8c4818d85b1b0819985a5b195960521b611963565b600051955087846004015260206000602486895afa6130ad576130ad60597c15746f6b656e312062616c616e6365206661696c656400000000000000611963565b60005194505b506130eb8763ffffffff60a01b841660a01c600160fd1b8516600160fc1b8616600160ff1b87166001600160a01b0388168c8a612b19565b9550846000106001811461315457600160ff1b8316801561312c576131256770a082310dfe168160c01b6001600160a01b03861687612a06565b965061314e565b61314b6770a08231d21220a760c01b6001600160a01b03861687612a06565b96505b506131a1565b6770a082310dfe168160c01b845287846004015260206000602486895afa613199576131996058740519d95d0818985b185b98d953d98819985a5b195960421b611963565b846000510396505b505b5050888410156131d5576131d5605a7c164d696e2072657475726e206e6f742072656163686564000000000000611963565b8a815282602082015232604082015289606082015283608082015260008051602061542c83398151915260a082a1505050979650505050505050565b6000613627565b6000856001600160ff1b03101561323a57630b3f79fd60e41b60005260046000fd5b604051600160ff1b8616156001600160a01b03871681600181146132ce57630251596160e31b845260048401868152600060208201528a604082015273fffd8963efd1fc6a506488495d951d5263988d25606082015260a06080820152604060a08201528760c08201528860e082015250600080610104866000865af1806132c25760206000fd5b5060206000803e613331565b630251596160e31b845260048401868152600160208201528a60408201526401000276a4606082015260a06080820152604060a08201528760c08201528860e082015250600080610104866000865af1806133295760206000fd5b5060208060003e5b505050506000519050600160ff1b811015613357576322323ba760e21b60005260046000fd5b1960010195945050505050565b60018134100361337f57631841b4e160e01b60005260046000fd5b600080600080846006602160991b015af1806116495761164960577c1357455448206465706f736974206661696c6564000000000000000000611963565b60405160048101672e1a7d4da9059cbb60c01b825273f828bc75b2b63dac9dd84642acce1bb88e842531600482015283602482015260008060448360006006602160991b015af19050806134335761343360587c147472616e736665722077657468206661696c65640000000000000000611963565b836004830152600080602484600073f828bc75b2b63dac9dd84642acce1bb88e8425315af19050806134875761348760587c1477697468647261772077657468206661696c65640000000000000000611963565b60008060008087875af19050806134b8576134b8605571045cd95b9908195d1a195c8819985a5b1959605a1b611963565b50505050565b60006040517306ff0b40e9091053eee51fa1d482ce5d852f523360611b8152600080600483865afa90508061350d5761350d6055710459d95d081d1bdad95b8c0819985a5b1959605a1b611963565b5060206000803e505060005190565b60006040517306ff0b40e9091053eee51fa1d482ce5d852f523360611b81526000806004808401865afa90508061350d5761350d6054710459d95d081d1bdad95b8c4819985a5b1959605a1b611963565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee80346135b9578235600160ff1b811615600181146135aa576135a38261351c565b93506135b6565b6135b3826134be565b93505b50505b8335600160fd1b166135f6578335600160ff1b811615600181146135e7576135e0826134be565b92506135f3565b6135f08261351c565b92505b50505b6040518260005281602052326040528560805260008051602061542c83398151915260a06000a16040525050505050565b82601f19602084028201018380613649576333f3e07b60e11b60005260046000fd5b50886000341180156136625761365e89613364565b309a505b5087606052825b8281101561368c5761367f898235848e30613218565b309b509850602001613669565b506000600160fd1b8335161180600181146136ac5780156136cb576136dc565b6136ba8a8535858f30613218565b95506136c6868c6133bd565b6136dc565b6136d98a8535858f8f613218565b95505b5050508583101561370f5761370f605a7c164d696e2072657475726e206e6f742072656163686564000000000000611963565b61371a83828461356d565b50509695505050505050565b6000613731836137ba565b1561374757506001600160a01b038116316137b4565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa15801561378d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b191906150df565b90505b92915050565b6001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1490565b600061380c826000815181106137f4576137f46150f8565b6020026020010151608001516001600160a01b031690565b905060008060008451905060005b818110156139475780156138585761383d8682815181106137f4576137f46150f8565b94506138526001600160a01b03861630613726565b9650309a505b306138646001846151db565b82148015613870575088155b1561387c575088613914565b6138876001846151db565b821080156138bd57508661389c83600161520b565b815181106138ac576138ac6150f8565b602002602001015160200151516001145b1561390f57866138ce83600161520b565b815181106138de576138de6150f8565b6020026020010151602001516000815181106138fc576138fc6150f8565b6020026020010151905060019450613914565b600094505b61393b8c8c838b8b878151811061392d5761392d6150f8565b602002602001015189613dc8565b5083925060010161381a565b5050505050505050505050565b613966826001600160a01b03166137ba565b15613b80576040516370a0823160e01b81523060048201526000906006602160991b01906370a0823190602401602060405180830381865afa1580156139b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d491906150df565b90508015613ac65760405163a9059cbb60e01b815273f828bc75b2b63dac9dd84642acce1bb88e8425316004820152602481018290526006602160991b019063a9059cbb906044016020604051808303816000875af1158015613a3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5f91906152a9565b50604051632e1a7d4d60e01b81526004810182905273f828bc75b2b63dac9dd84642acce1bb88e84253190632e1a7d4d90602401600060405180830381600087803b158015613aad57600080fd5b505af1158015613ac1573d6000803e3d6000fd5b505050505b6001600160a01b0382163014611613574780156134b8576000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114613b2a576040519150601f19603f3d011682016040523d82523d6000602084013e613b2f565b606091505b505090508061291e5760405162461bcd60e51b815260206004820152601c60248201527f7472616e73666572206e617469766520746f6b656e206661696c656400000000604482015260640161022e565b6001600160a01b0381163014611649576040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015613bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfb91906150df565b9050801561161357611613838383611c76565b600054610100900460ff16613c355760405162461bcd60e51b815260040161022e9061521e565b610e253361270f565b600054610100900460ff1661215e5760405162461bcd60e51b815260040161022e9061521e565b60606004835110613d965760208301516001600160e01b0319811662461bcd60e51b148015613c9657506044845110155b15613d3657602484810151808601820180519192909190613cb890849061520b565b613cc2919061520b565b86511015613d0a5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b604482015260640161022e565b8481604051602001613d1d9291906152c6565b60405160208183030381529060405293505050506137b4565b6001600160e01b03198116634e487b7160e01b148015613d57575083516024145b15613d9457602484015183613d6b82613f7f565b604051602001613d7c929190615315565b604051602081830303815290604052925050506137b4565b505b81613da084613fa7565b604051602001613db192919061534a565b604051602081830303815290604052905092915050565b6000805b835151811015613f7557600084604001518281518110613dee57613dee6150f8565b602002602001015160001b9050600080600080613e1589608001516001600160a01b031690565b6001600160a01b0386169450600160ff1b8616935061ffff60a087901c1692509050613e41828861520b565b895151909750613e53906001906151db565b8603613eba57612710871115613eba5760405162461bcd60e51b815260206004820152602660248201527f746f74616c5765696768742063616e206e6f7420657863656564203130303030604482015265081b1a5b5a5d60d21b606482015260840161022e565b87613f155760008261271014613ee657612710613ed7848d615124565b613ee1919061513b565b613ee8565b8a5b9050613f138e8b602001518981518110613f0457613f046150f8565b6020026020010151848461418e565b505b5050613f5f8188600001518681518110613f3157613f316150f8565b60200260200101518b858b606001518981518110613f5157613f516150f8565b60200260200101518f61422e565b5050508080613f6d9061539b565b915050613dcc565b5050505050505050565b60606137b482604051602001613f9791815260200190565b6040516020818303038152906040525b80516060906f181899199a1a9b1b9c1cb0b131b232b360811b90600090613fcf906002615124565b613fda90600261520b565b6001600160401b03811115613ff157613ff1614720565b6040519080825280601f01601f19166020018201604052801561401b576020820181803683370190505b509050600360fc1b81600081518110614036576140366150f8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614065576140656150f8565b60200101906001600160f81b031916908160001a90535060005b84518110156141865782600486838151811061409d5761409d6150f8565b01602001516001600160f81b031916901c60f81c601081106140c1576140c16150f8565b1a60f81b826140d1836002615124565b6140dc90600261520b565b815181106140ec576140ec6150f8565b60200101906001600160f81b031916908160001a90535082858281518110614116576141166150f8565b60209101015160f81c600f1660108110614132576141326150f8565b1a60f81b82614142836002615124565b61414d90600361520b565b8151811061415d5761415d6150f8565b60200101906001600160f81b031916908160001a9053508061417e8161539b565b91505061407f565b509392505050565b306001600160a01b038516036141ae576141a9828483611c76565b6134b8565b60405163052f523360e11b81526001600160a01b03808416600483015280861660248301528416604482015260648101829052732949a7b2771cc70ecd400871236d345979e1c5e790630a5ea46690608401600060405180830381600087803b15801561421a57600080fd5b505af1158015613f75573d6000803e3d6000fd5b851561434657600080866001600160a01b0316636f7929f260e01b87878760405160240161425e939291906153b4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526142ac6001600160a01b038616650f2882bf0b3360d21b61520b565b6040516020016142bd9291906153e9565b60408051601f19818403018152908290526142d79161528d565b6000604051808303816000865af19150503d8060008114614314576040519150601f19603f3d011682016040523d82523d6000602084013e614319565b606091505b509150915081819061433e5760405162461bcd60e51b815260040161022e919061470d565b505050614450565b600080866001600160a01b03166330e6ae3160e01b878787604051602401614370939291906153b4565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526143be6001600160a01b038616650f2882bf0b3360d21b61520b565b6040516020016143cf9291906153e9565b60408051601f19818403018152908290526143e99161528d565b6000604051808303816000865af19150503d8060008114614426576040519150601f19603f3d011682016040523d82523d6000602084013e61442b565b606091505b50915091508181906117f05760405162461bcd60e51b815260040161022e919061470d565b505050505050565b6000806040838503121561446b57600080fd5b50508035926020909101359150565b6001600160a01b0381168114610ff557600080fd5b803561449a8161447a565b919050565b600060a082840312156144b157600080fd5b50919050565b60008083601f8401126144c957600080fd5b5081356001600160401b038111156144e057600080fd5b6020830191508360208260051b85010111156144fb57600080fd5b9250929050565b60008060008060008060008060006101408a8c03121561452157600080fd5b8935985060208a01356145338161447a565b97506145428b60408c0161449f565b965060e08a01356001600160401b038082111561455e57600080fd5b61456a8d838e016144b7565b90985096506101008c013591508082111561458457600080fd5b6145908d838e016144b7565b90965094506101208c01359150808211156145aa57600080fd5b506145b78c828d016144b7565b915080935050809150509295985092959850929598565b60008060008060008060a087890312156145e757600080fd5b86359550602087013594506040870135935060608701356146078161447a565b925060808701356001600160401b0381111561462257600080fd5b61462e89828a016144b7565b979a9699509497509295939492505050565b60008060008060006080868803121561465857600080fd5b85359450602086013593506040860135925060608601356001600160401b0381111561468357600080fd5b61468f888289016144b7565b969995985093965092949392505050565b6000602082840312156146b257600080fd5b81356120438161447a565b60005b838110156146d85781810151838201526020016146c0565b50506000910152565b600081518084526146f98160208601602086016146bd565b601f01601f19169290920160200192915050565b60208152600061204360208301846146e1565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561475857614758614720565b60405290565b60405161014081016001600160401b038111828210171561475857614758614720565b604051601f8201601f191681016001600160401b03811182821017156147a9576147a9614720565b604052919050565b600060a082840312156147c357600080fd5b6147cb614736565b90508135815260208201356147df8161447a565b8060208301525060408201356040820152606082013560608201526080820135608082015292915050565b60006001600160401b0382111561482357614823614720565b5060051b60200190565b600082601f83011261483e57600080fd5b8135602061485361484e8361480a565b614781565b82815260059290921b8401810191818101908684111561487257600080fd5b8286015b84811015610e085780358352918301918301614876565b600082601f83011261489e57600080fd5b813560206148ae61484e8361480a565b82815260059290921b840181019181810190868411156148cd57600080fd5b8286015b84811015610e085780356148e48161447a565b83529183019183016148d1565b600082601f83011261490257600080fd5b81356001600160401b0381111561491b5761491b614720565b61492e601f8201601f1916602001614781565b81815284602083860101111561494357600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261497157600080fd5b8135602061498161484e8361480a565b82815260059290921b840181019181810190868411156149a057600080fd5b8286015b84811015610e085780356001600160401b038111156149c35760008081fd5b6149d18986838b01016148f1565b8452509183019183016149a4565b60006149ed61484e8461480a565b838152905060208101600584901b8301851015614a0957600080fd5b825b8460051b8401811015614b79576001600160401b038082351115614a2e57600080fd5b8135850187601f820112614a4157600080fd5b614a4e61484e823561480a565b81358082526020808301929160051b8401018a811115614a6d57600080fd5b602084015b81811015614b62578581351115614a8857600080fd5b8035850160a0818e03601f19011215614aa057600080fd5b614aa8614736565b8760208301351115614ab957600080fd5b614acb8e60208085013585010161488d565b81528760408301351115614ade57600080fd5b614af18e6020604085013585010161488d565b60208201528760608301351115614b0757600080fd5b614b1a8e6020606085013585010161482d565b60408201528760808301351115614b3057600080fd5b614b438e60206080850135850101614960565b606082015260a091909101356080820152845260209384019301614a72565b505085525050602092830192919091019050614a0b565b50509392505050565b600082601f830112614b9357600080fd5b612043838335602085016149df565b8015158114610ff557600080fd5b803561449a81614ba2565b600082601f830112614bcc57600080fd5b81356020614bdc61484e8361480a565b82815260059290921b84018101918181019086841115614bfb57600080fd5b8286015b84811015610e085780356001600160401b0380821115614c1f5760008081fd5b90880190610140828b03601f1901811315614c3a5760008081fd5b614c4261475e565b8784013581526040614c5581860161448f565b898301526060614c6681870161448f565b8284015260809150614c7982870161448f565b818401525060a0808601358284015260c0915081860135818401525060e080860135828401526101009150818601358184015250610120614cbb818701614bb0565b83830152928501359284841115614cd457600091508182fd5b614ce28e8b868901016148f1565b90830152508652505050918301918301614bff565b6000806000806000806101408789031215614d1157600080fd5b614d1b88886147b1565b955060a08701356001600160401b0380821115614d3757600080fd5b614d438a838b0161482d565b965060c0890135915080821115614d5957600080fd5b614d658a838b01614b82565b955060e0890135915080821115614d7b57600080fd5b50614d8889828a01614bbb565b935050610100870135614d9a8161447a565b9150610120870135614dab8161447a565b809150509295509295509295565b60008060408385031215614dcc57600080fd5b8235614dd78161447a565b91506020830135614de781614ba2565b809150509250929050565b600080600080600080600080610120898b031215614e0f57600080fd5b88359750614e208a60208b0161449f565b965060c08901356001600160401b0380821115614e3c57600080fd5b614e488c838d016144b7565b909850965060e08b0135915080821115614e6157600080fd5b614e6d8c838d016144b7565b90965094506101008b0135915080821115614e8757600080fd5b50614e948b828c016144b7565b999c989b5096995094979396929594505050565b60008060008060006101208688031215614ec157600080fd5b614ecb87876147b1565b945060a08601356001600160401b0380821115614ee757600080fd5b614ef389838a0161482d565b955060c0880135915080821115614f0957600080fd5b614f1589838a01614b82565b945060e0880135915080821115614f2b57600080fd5b50614f3888828901614bbb565b925050610100860135614f4a8161447a565b809150509295509295909350565b600060208284031215614f6a57600080fd5b5035919050565b60008083601f840112614f8357600080fd5b5081356001600160401b03811115614f9a57600080fd5b6020830191508360208285010111156144fb57600080fd5b60008060008060008060008060c0898b031215614fce57600080fd5b883597506020890135614fe08161447a565b9650604089013595506060890135945060808901356001600160401b038082111561500a57600080fd5b6150168c838d016144b7565b909650945060a08b013591508082111561502f57600080fd5b50614e948b828c01614f71565b6000806000806060858703121561505257600080fd5b843593506020850135925060408501356001600160401b0381111561507657600080fd5b61508287828801614f71565b95989497509550505050565b6020808252600e908201526d149bdd5d194e88195e1c1a5c995960921b604082015260600190565b600060a082840312156150c857600080fd5b61204383836147b1565b60006120433684846149df565b6000602082840312156150f157600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176137b4576137b461510e565b60008261515857634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600d908201526c6f6e6c79207072696f7269747960981b604082015260600190565b6000806040838503121561519757600080fd5b82516151a28161447a565b6020840151909250614de78161447a565b6020808252600e908201526d6e6f74206164647265737328302960901b604082015260600190565b818103818111156137b4576137b461510e565b60006020828403121561520057600080fd5b81516120438161447a565b808201808211156137b4576137b461510e565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160e01b031984168152818360048301376000910160040190815292915050565b6000825161529f8184602087016146bd565b9190910192915050565b6000602082840312156152bb57600080fd5b815161204381614ba2565b600083516152d88184602088016146bd565b6508ae4e4dee4560d31b90830190815283516152fb8160068401602088016146bd565b602960f81b60069290910191820152600701949350505050565b600083516153278184602088016146bd565b650a0c2dcd2c6560d31b90830190815283516152fb8160068401602088016146bd565b6000835161535c8184602088016146bd565b670aadcd6dcdeeedc560c31b90830190815283516153818160088401602088016146bd565b602960f81b60089290910191820152600901949350505050565b6000600182016153ad576153ad61510e565b5060010190565b6001600160a01b038481168252831660208201526060604082018190526000906153e0908301846146e1565b95945050505050565b600083516153fb8184602088016146bd565b919091019182525060200191905056fef171268de859ec269c52bbfac94dcb7715e784de194342abb284bf34fd30b32d1bb43f2da90e35f7b0cf38521ca95a49e68eb42fac49924930a5bd73cdf7576c7724394874fdd8ad13292ec739b441f85c6559f10dc4141b8d4c0fa4cbf55bdba2646970667358221220677143a33d0d9963396828a48604c319b1805d8269a6bc66f9949a87a3f898a764736f6c63430008110033