8 txs
278 calls
constructor
constructor(address _exchangeAdapterRegistry, address _feeRecipient, uint16 _feeBasisPoints, uint16 _maxFeeBasisPoints, address _tradeSigner, uint256 _maxWeiImprecision)
functions
exchangeAdapterRegistry
viewfunction exchangeAdapterRegistry() view returns (address)
feeBasisPoints
viewfunction feeBasisPoints() view returns (uint16)
feelessWallets
viewfunction feelessWallets(address) view returns (bool)
feeRecipient
viewfunction feeRecipient() view returns (address)
maxFeeBasisPoints
viewfunction maxFeeBasisPoints() view returns (uint16)
maxWeiImprecision
viewfunction maxWeiImprecision() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
renounceOwnership
viewfunction renounceOwnership() view
tradeSigner
viewfunction tradeSigner() view returns (address)
activate
nonpayablefunction activate()
addFeelessWallet
nonpayablefunction addFeelessWallet(address _feelessWallet)
addFeelessWallets
nonpayablefunction addFeelessWallets(address[] _feelessWallets)
batchTrade
payablefunction batchTrade(tuple[] _trades, tuple _batchTradeConfig) payable
deactivate
nonpayablefunction deactivate()
receiveFees
nonpayablefunction receiveFees(address[] _feeTokensToReceive)
reduceMaxBasisPoints
nonpayablefunction reduceMaxBasisPoints(uint16 _newMaxFeeBasisPoints)
removeFeelessWallet
nonpayablefunction removeFeelessWallet(address _feelessWallet)
removeFeelessWallets
nonpayablefunction removeFeelessWallets(address[] _feelessWallets)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateBasisPoints
nonpayablefunction updateBasisPoints(uint16 _newFeeBasisPoints)
updateFeeRecipient
nonpayablefunction updateFeeRecipient(address _newFeeRecipient)
updateTradeSigner
nonpayablefunction updateTradeSigner(address _newTradeSigner)
events
BatchTradeCalled
event BatchTradeCalled(address indexed sender)
BatchTradeDeployed
event BatchTradeDeployed(address exchangeAdapterRegistry, address feeRecipient, uint16 feeBasisPoints, uint16 maxFeeBasisPoints, address tradeSigner, uint256 maxWeiImprecision)
FeeBasisPointsUpdated
event FeeBasisPointsUpdated(uint16 oldFeeBasisPoints, uint16 newFeeBasisPoints)
FeelessWalletAdded
event FeelessWalletAdded(address indexed addedWallet)
FeelessWalletRemoved
event FeelessWalletRemoved(address indexed removedWallet)
FeeRecipientUpdated
event FeeRecipientUpdated(address oldFeeRecipient, address newFeeRecipient)
FeesPayedOut
event FeesPayedOut(address indexed feeRecipient, address indexed feeToken, uint256 amount)
MaxBasisPointsReduced
event MaxBasisPointsReduced(uint16 oldMaxBasisPoints, uint16 newMaxBasisPoints)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
TradeExecuted
event TradeExecuted(address indexed trader, address indexed from, uint256 fromAmount, address indexed to, uint256 receivedAmount)
TradeFailedReason
event TradeFailedReason(address indexed trader, address indexed from, address indexed to, bytes reason)
Unpaused
event Unpaused(address account)
errors
FeelessWalletAlreadySet
error FeelessWalletAlreadySet()
FeelessWalletNotSet
error FeelessWalletNotSet()
FromEqualsTo
error FromEqualsTo((string exchangeName, address from, uint256 fromAmount, address to, uint256 minToReceiveBeforeFees, bytes data, bytes signature) trade)
IncorrectSellAmount
error IncorrectSellAmount((string exchangeName, address from, uint256 fromAmount, address to, uint256 minToReceiveBeforeFees, bytes data, bytes signature) trade, uint256 expected, uint256 sold)
InvalidAddress
error InvalidAddress(string paramName, address passedAddress)
InvalidSignature
error InvalidSignature((string exchangeName, address from, uint256 fromAmount, address to, uint256 minToReceiveBeforeFees, bytes data, bytes signature) trade)
MaxFeeExceeded
error MaxFeeExceeded(uint256 fee, uint256 maxFee)
MinToReceiveBeforeFeesZero
error MinToReceiveBeforeFeesZero((string exchangeName, address from, uint256 fromAmount, address to, uint256 minToReceiveBeforeFees, bytes data, bytes signature) trade)
NewValueEqualsOld
error NewValueEqualsOld(string paramName)
NotEnoughClaimed
error NotEnoughClaimed((string exchangeName, address from, uint256 fromAmount, address to, uint256 minToReceiveBeforeFees, bytes data, bytes signature) trade, uint256 expected, uint256 received)
NotEnoughReceived
error NotEnoughReceived((string exchangeName, address from, uint256 fromAmount, address to, uint256 minToReceiveBeforeFees, bytes data, bytes signature) trade, uint256 minExpected, uint256 received)
ReceiveEthFeeFailed
error ReceiveEthFeeFailed()
ReducedMaxFeeTooSmall
error ReducedMaxFeeTooSmall(uint256 maxFee, uint256 fee)
RenounceOwnershipDisabled
error RenounceOwnershipDisabled()
ResetAllowanceFailed
error ResetAllowanceFailed()
ReturnEthFailed
error ReturnEthFailed()
SoldDespiteTradeFailed
error SoldDespiteTradeFailed((string exchangeName, address from, uint256 fromAmount, address to, uint256 minToReceiveBeforeFees, bytes data, bytes signature) trade)
TradeFailed
error TradeFailed((string exchangeName, address from, uint256 fromAmount, address to, uint256 minToReceiveBeforeFees, bytes data, bytes signature) trade, uint256 index)
ZeroAmountTrade
error ZeroAmountTrade((string exchangeName, address from, uint256 fromAmount, address to, uint256 minToReceiveBeforeFees, bytes data, bytes signature) trade)
creation bytecode
0x60c06040523480156200001157600080fd5b5060405162002f8938038062002f898339810160408190526200003491620002f8565b6200003f3362000277565b6000805460ff60a01b19169055600180556001600160a01b038616620000be5760408051630961777760e41b81526004810191909152601860448201527f5f65786368616e6765416461707465725265676973747279000000000000000060648201526001600160a01b03871660248201526084015b60405180910390fd5b6001600160a01b038516620001185760408051630961777760e41b81526004810191909152600d60448201526c17d99959549958da5c1a595b9d609a1b60648201526001600160a01b0386166024820152608401620000b5565b8261ffff168461ffff161115620001515760405163a85293eb60e01b815261ffff808616600483015284166024820152604401620000b5565b6001600160a01b038216620001aa5760408051630961777760e41b81526004810191909152600c60448201526b2fba3930b232a9b4b3b732b960a11b60648201526001600160a01b0383166024820152608401620000b5565b6001600160a01b038681166080818152600280548985166001600160b01b03199091168117600160a01b61ffff8b81169182029290921761ffff60b01b1916600160b01b928b1692830217909355600480546001600160a01b031916968916968717905560a0878152604080519687526020870193909352918501929092526060840191909152908201929092529081018290527fdea44ba721c193574ad19866ad58c4283ffac2542c67f3a618874ef66191c7909060c00160405180910390a150505050505062000379565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620002dd57600080fd5b50565b805161ffff81168114620002f357600080fd5b919050565b60008060008060008060c087890312156200031257600080fd5b86516200031f81620002c7565b60208801519096506200033281620002c7565b94506200034260408801620002e0565b93506200035260608801620002e0565b925060808701516200036481620002c7565b8092505060a087015190509295509295509295565b60805160a051612bdc620003ad600039600081816103f701526118390152600081816103c301526114b80152612bdc6000f3fe6080604052600436106101445760003560e01c80639396f459116100b6578063ce75cdc21161006f578063ce75cdc214610391578063d9ba8632146103b1578063e600607f146103e5578063e7eab94d14610427578063f160d36914610447578063f2fde38b1461046757600080fd5b80639396f459146102cc578063a3782f68146102df578063ab1cefeb146102ff578063b12b3d7c1461031f578063b8606eef1461034f578063c4aa85101461037157600080fd5b806351b42b001161010857806351b42b001461020457806355966a7c146102195780635c975abb1461024e578063715018a61461027957806372b701701461028e5780638da5cb5b146102ae57600080fd5b806306feb0e0146101505780630f15f4c0146101725780632b5afed414610187578063369579f3146101a757806346904840146101c757600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b5061017061016b36600461228f565b610487565b005b34801561017e57600080fd5b50610170610660565b34801561019357600080fd5b506101706101a23660046122d1565b610672565b3480156101b357600080fd5b506101706101c2366004612315565b610787565b3480156101d357600080fd5b506002546101e7906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561021057600080fd5b50610170610809565b34801561022557600080fd5b5060025461023b90600160b01b900461ffff1681565b60405161ffff90911681526020016101fb565b34801561025a57600080fd5b50600054600160a01b900460ff165b60405190151581526020016101fb565b34801561028557600080fd5b50610170610819565b34801561029a57600080fd5b506101706102a93660046122d1565b61083d565b3480156102ba57600080fd5b506000546001600160a01b03166101e7565b6101706102da3660046123b0565b61093a565b3480156102eb57600080fd5b506101706102fa36600461228f565b610be0565b34801561030b57600080fd5b5061017061031a36600461228f565b610c2f565b34801561032b57600080fd5b5061026961033a366004612315565b60036020526000908152604090205460ff1681565b34801561035b57600080fd5b5060025461023b90600160a01b900461ffff1681565b34801561037d57600080fd5b506004546101e7906001600160a01b031681565b34801561039d57600080fd5b506101706103ac366004612315565b610c7e565b3480156103bd57600080fd5b506101e77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f157600080fd5b506104197f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101fb565b34801561043357600080fd5b50610170610442366004612315565b610d35565b34801561045357600080fd5b50610170610462366004612315565b610de8565b34801561047357600080fd5b50610170610482366004612315565b610ea2565b60005b8181101561065b5760006104c38484848181106104a9576104a9612456565b90506020020160208101906104be9190612315565b610f1b565b905080156106485773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8484848181106104f2576104f2612456565b90506020020160208101906105079190612315565b6001600160a01b0316146105625760025461055d906001600160a01b03168286868681811061053857610538612456565b905060200201602081019061054d9190612315565b6001600160a01b03169190610fbb565b6105da565b6002546040516000916001600160a01b03169083908381818185875af1925050503d80600081146105af576040519150601f19603f3d011682016040523d82523d6000602084013e6105b4565b606091505b505080915050806105d857604051636bda383360e01b815260040160405180910390fd5b505b8383838181106105ec576105ec612456565b90506020020160208101906106019190612315565b6002546040518381526001600160a01b0392831692909116907f7b5319a3696beff42cab73b47d5658337398e74c8c5161066426dcfac5df35d99060200160405180910390a35b508061065381612482565b91505061048a565b505050565b61066861101e565b610670611078565b565b61067a61101e565b60025461ffff600160b01b909104811690821611156106cb5760025460405163a85293eb60e01b815261ffff8381166004830152600160b01b90920490911660248201526044015b60405180910390fd5b60025461ffff600160a01b90910481169082160361072157604051636f4e9e6960e11b81526020600482015260126024820152715f6e65774665654261736973506f696e747360701b60448201526064016106c2565b6002805461ffff838116600160a01b81810261ffff60a01b1985161790945560408051949093049091168084526020840191909152917f67079e45e88704fae0304812d79077edf4f2e8996b7b1240c0141fa37cf6664c91015b60405180910390a15050565b61078f61101e565b6001600160a01b0381166107b85780604051630961777760e41b81526004016106c2919061249b565b6004546001600160a01b03908116908216036107e757604051636f4e9e6960e11b81526004016106c2906124e4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b61081161101e565b6106706110cd565b61082161101e565b6040516001623f026d60e01b0319815260040160405180910390fd5b61084561101e565b60025461ffff600160b01b9091048116908216106108905760025460405163a85293eb60e01b815261ffff8381166004830152600160b01b90920490911660248201526044016106c2565b60025461ffff600160a01b909104811690821610156108dc57600254604051633614359360e01b815261ffff8381166004830152600160a01b90920490911660248201526044016106c2565b6002805461ffff838116600160b01b81810261ffff60b01b1985161790945560408051949093049091168084526020840191909152917f512d50e677aca6cab32128b9b5dcfb8ce4c502f9c08e129a7995332eefd0ce14910161077b565b610942611110565b61094a61115d565b60405133907f9097d8d7c7938ca829a9795bc7ec84dd9c494026569568ac35d2bc0d45320bf390600090a23460005b83811015610b62576000806109bd87878581811061099957610999612456565b90506020028101906109ab9190612513565b6109b4906125b1565b865186906111b6565b915091508115610abe5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8787858181106109ee576109ee612456565b9050602002810190610a009190612513565b610a11906040810190602001612315565b6001600160a01b031603610a5457868684818110610a3157610a31612456565b9050602002810190610a439190612513565b610a51906040013585612679565b93505b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee878785818110610a7b57610a7b612456565b9050602002810190610a8d9190612513565b610a9e906080810190606001612315565b6001600160a01b031603610ab957610ab6818561268c565b93505b610b4d565b846020015180610acc575082155b15610b1157868684818110610ae357610ae3612456565b9050602002810190610af59190612513565b8360405163d1f3024360e01b81526004016106c292919061270e565b610b46878785818110610b2657610b26612456565b9050602002810190610b389190612513565b610b41906125b1565b6112f0565b5050610b62565b50508080610b5a90612482565b915050610979565b508015610bd657604051600090339083908381818185875af1925050503d8060008114610bab576040519150601f19603f3d011682016040523d82523d6000602084013e610bb0565b606091505b50508091505080610bd457604051632b4f2e3d60e11b815260040160405180910390fd5b505b5061065b60018055565b610be861101e565b60005b8181101561065b57610c1d838383818110610c0857610c08612456565b90506020020160208101906103ac9190612315565b80610c2781612482565b915050610beb565b610c3761101e565b60005b8181101561065b57610c6c838383818110610c5757610c57612456565b90506020020160208101906104429190612315565b80610c7681612482565b915050610c3a565b610c8661101e565b6001600160a01b038116610caf5780604051630961777760e41b81526004016106c291906127e7565b6001600160a01b03811660009081526003602052604090205460ff1615610ce95760405163196c278b60e11b815260040160405180910390fd5b6001600160a01b038116600081815260036020526040808220805460ff19166001179055517f176f024c3620d77a941c7b28e66c09be46822ee44c4e92b471c3aaeb436f67789190a250565b610d3d61101e565b6001600160a01b038116610d665780604051630961777760e41b81526004016106c291906127e7565b6001600160a01b03811660009081526003602052604090205460ff16610d9f5760405163774aca9360e11b815260040160405180910390fd5b6001600160a01b038116600081815260036020526040808220805460ff19169055517fd6075e71ba6f1655521e43a844b8b0fc588b5ae8bb3d20bb1f9f2208ee7e4d799190a250565b610df061101e565b6001600160a01b038116610e195780604051630961777760e41b81526004016106c29190612820565b6002546001600160a01b0390811690821603610e4857604051636f4e9e6960e11b81526004016106c290612850565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d3910161077b565b610eaa61101e565b6001600160a01b038116610f0f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c2565b610f188161133e565b50565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610faf576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa99190612880565b92915050565b5047919050565b919050565b6040516001600160a01b03831660248201526044810182905261065b90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261138e565b6000546001600160a01b031633146106705760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106c2565b611080611463565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6110d5611110565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586110b03390565b600054600160a01b900460ff16156106705760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016106c2565b6002600154036111af5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016106c2565b6002600155565b60008060006111c886600001516114b3565b905061123586826001600160a01b031663334fc2896040518163ffffffff1660e01b8152600401602060405180830381865afa15801561120c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112309190612899565b611597565b600080600061127d848a73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03168c602001516001600160a01b0316146112775760006116ea565b8a6116ea565b92509250925061128d848a61178f565b60008061129c8585858e611926565b9150915081975087156112d35760006112b5828b611b82565b90506112c18183612679565b97506112cd8c89611bda565b506112e2565b6112dd868c611c29565b600096505b505050505050935093915050565b60208101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14610f1857610f1833826040015183602001516001600160a01b0316610fbb9092919063ffffffff16565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006113e3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611d599092919063ffffffff16565b905080516000148061140457508080602001905181019061140491906128b6565b61065b5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106c2565b600054600160a01b900460ff166106705760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016106c2565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bc4c2212846040518263ffffffff1660e01b81526004016115029190612923565b602060405180830381865afa15801561151f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115439190612899565b90506001600160a01b038116610fa95760408051630961777760e41b81526004810191909152600760448201526630b230b83a32b960c91b60648201526001600160a01b03821660248201526084016106c2565b60008183602001518460400151856060015186608001518760a001516040516020016115c896959493929190612936565b60405160208183030381529060405280519060200120905060006116278460c00151611621847f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b90611d70565b6004549091506001600160a01b0380831691161461165a57836040516396af192560e01b81526004016106c29190612a1d565b83606001516001600160a01b031684602001516001600160a01b0316036116965783604051633618cf0960e01b81526004016106c29190612a1d565b83604001516000036116bd57836040516314528dfb60e11b81526004016106c29190612a1d565b83608001516000036116e457836040516379abd0e560e11b81526004016106c29190612a1d565b50505050565b6000806060856001600160a01b031663e0d7541f8660200151876040015188606001518960800151308a8c60a001516040518863ffffffff1660e01b815260040161173b9796959493929190612a30565b600060405180830381865afa158015611758573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117809190810190612a82565b92509250925093509350939050565b60208101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee146119225760006117c68260200151610f1b565b90506117f03330846040015185602001516001600160a01b0316611d94909392919063ffffffff16565b60006117ff8360200151610f1b565b9050826040015182611811919061268c565b8110156118a35760008183856040015161182b919061268c565b6118359190612679565b90507f000000000000000000000000000000000000000000000000000000000000000081111561188c57604084015184906118708585612679565b60405163d5e7325160e01b81526004016106c293929190612b18565b808460400181815161189e9190612679565b905250505b6116e4846001600160a01b031663334fc2896040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119089190612899565b604085015160208601516001600160a01b03169190611dcc565b5050565b60008060006119388460200151610f1b565b905060006119498560600151610f1b565b9050600080896001600160a01b031689896040516119679190612b3d565b60006040518083038185875af1925050503d80600081146119a4576040519150601f19603f3d011682016040523d82523d6000602084013e6119a9565b606091505b50915091508195508515611adf5760006119c68860200151610f1b565b90508760400151856119d89190612679565b811015611a0b57604088015188906119f08388612679565b60405162d65a5760e01b81526004016106c293929190612b18565b6000611a1a8960600151610f1b565b9050886080015185611a2c919061268c565b811015611a605760808901518990611a448784612679565b6040516385b6c6af60e01b81526004016106c293929190612b18565b611a6a8582612679565b965088606001516001600160a01b031689602001516001600160a01b0316336001600160a01b03167f48d03cda00a0143cab4fa6ba391e54f65e6ec6b838f4ddd08b27a584ff858ee68c604001518b604051611ad0929190918252602082015260400190565b60405180910390a45050611b75565b6000611aee8860200151610f1b565b9050848114611b12578760405163036a651160e41b81526004016106c29190612a1d565b6000955087606001516001600160a01b031688602001516001600160a01b0316336001600160a01b03167f0a593d83366671ae9e9b87b24d61c78d33ed3936b98be861aba2c8ac9a55dc8585604051611b6b9190612923565b60405180910390a4505b5050505094509492505050565b6000818015611ba057503360009081526003602052604090205460ff165b15611bad57506000610fa9565b60025461271090611bc990600160a01b900461ffff1685612b4f565b611bd39190612b6e565b9392505050565b60608201516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14801590611c0b5750600081115b15611922576060820151611922906001600160a01b03163383610fbb565b60208101516001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461192257600081602001516001600160a01b031663095ea7b3846001600160a01b031663334fc2896040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc89190612899565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152600060248201526044016020604051808303816000875af1158015611d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3991906128b6565b90508061065b576040516336e84fed60e11b815260040160405180910390fd5b6060611d688484600085611e79565b949350505050565b6000806000611d7f8585611f54565b91509150611d8c81611f99565b509392505050565b6040516001600160a01b03808516602483015283166044820152606481018290526116e49085906323b872dd60e01b90608401610fe7565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e409190612880565b90506116e48463095ea7b360e01b85611e59868661268c565b6040516001600160a01b0390921660248301526044820152606401610fe7565b606082471015611eda5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106c2565b600080866001600160a01b03168587604051611ef69190612b3d565b60006040518083038185875af1925050503d8060008114611f33576040519150601f19603f3d011682016040523d82523d6000602084013e611f38565b606091505b5091509150611f49878383876120e3565b979650505050505050565b6000808251604103611f8a5760208301516040840151606085015160001a611f7e8782858561215c565b94509450505050611f92565b506000905060025b9250929050565b6000816004811115611fad57611fad612b90565b03611fb55750565b6001816004811115611fc957611fc9612b90565b036120165760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016106c2565b600281600481111561202a5761202a612b90565b036120775760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016106c2565b600381600481111561208b5761208b612b90565b03610f185760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016106c2565b6060831561215257825160000361214b576001600160a01b0385163b61214b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106c2565b5081611d68565b611d688383612220565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156121935750600090506003612217565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156121e7573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661221057600060019250925050612217565b9150600090505b94509492505050565b8151156122305781518083602001fd5b8060405162461bcd60e51b81526004016106c29190612923565b60008083601f84011261225c57600080fd5b50813567ffffffffffffffff81111561227457600080fd5b6020830191508360208260051b8501011115611f9257600080fd5b600080602083850312156122a257600080fd5b823567ffffffffffffffff8111156122b957600080fd5b6122c58582860161224a565b90969095509350505050565b6000602082840312156122e357600080fd5b813561ffff81168114611bd357600080fd5b6001600160a01b0381168114610f1857600080fd5b8035610fb6816122f5565b60006020828403121561232757600080fd5b8135611bd3816122f5565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561236b5761236b612332565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561239a5761239a612332565b604052919050565b8015158114610f1857600080fd5b600080600083850360608112156123c657600080fd5b843567ffffffffffffffff808211156123de57600080fd5b6123ea8883890161224a565b90965094508491506040601f198401121561240457600080fd5b6040519250604083019150828210818311171561242357612423612332565b506040526020850135612435816123a2565b81526040850135612445816123a2565b602082015292959194509192509050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016124945761249461246c565b5060010190565b6040815260006124ca60408301600f81526e2fb732bbaa3930b232a9b4b3b732b960891b602082015260400190565b6001600160a01b0393909316602092909201919091525090565b602081526000610fa960208301600f81526e2fb732bbaa3930b232a9b4b3b732b960891b602082015260400190565b6000823560de1983360301811261252957600080fd5b9190910192915050565b600067ffffffffffffffff82111561254d5761254d612332565b50601f01601f191660200190565b600082601f83011261256c57600080fd5b813561257f61257a82612533565b612371565b81815284602083860101111561259457600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156125c357600080fd5b6125cb612348565b823567ffffffffffffffff808211156125e357600080fd5b6125ef3683870161255b565b83526125fd6020860161230a565b6020840152604085013560408401526126186060860161230a565b60608401526080850135608084015260a085013591508082111561263b57600080fd5b6126473683870161255b565b60a084015260c085013591508082111561266057600080fd5b5061266d3682860161255b565b60c08301525092915050565b81810381811115610fa957610fa961246c565b80820180821115610fa957610fa961246c565b6000808335601e198436030181126126b657600080fd5b830160208101925035905067ffffffffffffffff8111156126d657600080fd5b803603821315611f9257600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061271e848561269f565b60e06040850152612734610120850182846126e5565b9150506020850135612745816122f5565b6001600160a01b03166060848101919091526040860135608085015261276c90860161230a565b6001600160a01b03811660a085015250608085013560c084015261279360a086018661269f565b603f19808685030160e08701526127ab8483856126e5565b93506127ba60c089018961269f565b935091508086850301610100870152506127d58383836126e5565b93505050508260208301529392505050565b6040808252600e908201526d17d999595b195cdcd5d85b1b195d60921b60608201526001600160a01b0391909116602082015260800190565b6040815260006124ca60408301601081526f17db995dd19959549958da5c1a595b9d60821b602082015260400190565b602081526000610fa960208301601081526f17db995dd19959549958da5c1a595b9d60821b602082015260400190565b60006020828403121561289257600080fd5b5051919050565b6000602082840312156128ab57600080fd5b8151611bd3816122f5565b6000602082840312156128c857600080fd5b8151611bd3816123a2565b60005b838110156128ee5781810151838201526020016128d6565b50506000910152565b6000815180845261290f8160208601602086016128d3565b601f01601f19169290920160200192915050565b602081526000611bd360208301846128f7565b60006bffffffffffffffffffffffff19808960601b168352808860601b166014840152866028840152808660601b1660488401525083605c830152825161298481607c8501602087016128d3565b91909101607c01979650505050505050565b6000815160e084526129ab60e08501826128f7565b9050602083015160018060a01b0380821660208701526040850151604087015280606086015116606087015250506080830151608085015260a083015184820360a08601526129fa82826128f7565b91505060c083015184820360c0860152612a1482826128f7565b95945050505050565b602081526000611bd36020830184612996565b600060018060a01b03808a16835288602084015280881660408401528660608401528086166080840152508360a083015260e060c0830152612a7560e08301846128f7565b9998505050505050505050565b600080600060608486031215612a9757600080fd5b8351612aa2816122f5565b60208501516040860151919450925067ffffffffffffffff811115612ac657600080fd5b8401601f81018613612ad757600080fd5b8051612ae561257a82612533565b818152876020838501011115612afa57600080fd5b612b0b8260208301602086016128d3565b8093505050509250925092565b606081526000612b2b6060830186612996565b60208301949094525060400152919050565b600082516125298184602087016128d3565b6000816000190483118215151615612b6957612b6961246c565b500290565b600082612b8b57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fdfea26469706673582212206006df5838537a4694dfccd0503a501d8a3bd82a2d328ea29e73409b6f48673a64736f6c63430008100033000000000000000000000000cb253fa948135ab7dd220aad42ae38590650cd82000000000000000000000000bda2312e1238dd8302070ea62fb5c915c23e5770000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000263dffbff64abdb3b86b70b5f96f728c1a7588a40000000000000000000000000000000000000000000000000000000000000064