2 txs
146 calls
constructor
constructor(address utilsAdr, address holdingAdr, address _tokenContractAdr)
functions
automator
viewfunction automator() view returns (address)
configFast
viewfunction configFast() view returns (uint80 cashOutPrice, uint80 buyBackPrice, uint24 minTradePercent)
configSlow
viewfunction configSlow() view returns (address pool, address base, address quote, uint256 tokenId, int8 decimalDiff)
correctPriceDirection
purefunction correctPriceDirection(address base, address quote, uint160 sqrtPriceX96) pure returns (uint160 sqrtPriceX96Corrected)
GAS_GRANT
viewfunction GAS_GRANT() view returns (uint256)
getDesiredAction
viewfunction getDesiredAction(uint256 handle, uint160 price) view returns (uint8 action)
getPriceFromSqrtPriceX96
purefunction getPriceFromSqrtPriceX96(int8 decimalDiff, uint160 sqrtPriceX96) pure returns (uint80 price_12Decimals)
getSqrtPriceX96FromPrice
purefunction getSqrtPriceX96FromPrice(int8 decimalDiff, uint80 price_12Decimals) pure returns (uint160 sqrtPriceX96)
holdingContract
viewfunction holdingContract() view returns (address)
mulDiv
purefunction mulDiv(uint256 a, uint256 b, uint256 denominator) pure returns (uint256 result)
owner
viewfunction owner() view returns (address)
shouldExecute
viewfunction shouldExecute(uint256 handle) view returns (bool)
sqrt
purefunction sqrt(uint256 x) pure returns (uint128)
state
viewfunction state() view returns (uint80 lastTradedPrice, uint80 bestObservedPrice, bool direction, bool providingLiquidity, bool waiting)
taskId
viewfunction taskId() view returns (uint256)
tokenContractAdr
viewfunction tokenContractAdr() view returns (address)
tokenHeld
viewfunction tokenHeld() view returns (address)
utils
viewfunction utils() view returns (address)
execute
nonpayablefunction execute(uint256 handle)
executeRaw
nonpayablefunction executeRaw(uint256 handle)
migrateFrom
nonpayablefunction migrateFrom(address old)
migrateManually
nonpayablefunction migrateManually(address base, address quote, uint80 cashOutPrice, uint80 buyBackPrice, uint24 minTradePercent, uint256 tokenId, address _tokenHeld, uint80 lastTradedPrice, uint80 bestObservedPrice, bool direction, bool providingLiquidity, bool waiting)
onDeposit
nonpayablefunction onDeposit(uint256 howMuch)
prepareWithdraw
nonpayablefunction prepareWithdraw(uint256 amtEth)
prepareWithdrawAll
nonpayablefunction prepareWithdrawAll()
renounceOwnership
nonpayablefunction renounceOwnership()
rescueEth
nonpayablefunction rescueEth()
rescueTokens
nonpayablefunction rescueTokens(address token)
setConfig
nonpayablefunction setConfig(address base, address quote, uint80 cashOutPrice, uint80 buyBackPrice, uint80 liquidityLowPrice, uint80 liquidityHighPrice, uint24 minTradePercent)
setHoldingContract
nonpayablefunction setHoldingContract(address holdingAdr)
setToken
nonpayablefunction setToken(address _tokenContractAdr)
setUtils
nonpayablefunction setUtils(address utilsAdr)
startAutomation
nonpayablefunction startAutomation()
stopAutomation
nonpayablefunction stopAutomation()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateFastConfig
nonpayablefunction updateFastConfig(uint80 cashOutPrice, uint80 buyBackPrice, uint24 minTradePercent)
events
AutomationStarted
event AutomationStarted(uint80 price)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
SawBetterPrice
event SawBetterPrice(uint80 price)
TradeExecuted
event TradeExecuted(address targetToken, uint80 price)
errors
No errors.
creation bytecode
0x60e060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4860805273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260a05273f94e7d0710709388bce3161c32b4eea56d3f91cc60c052600180546001600160a01b03191673aaa000e1b72bf8dfa74c958e19e925c0bfae9ded1790555f600255348015610081575f5ffd5b506040516149303803806149308339810160408190526100a091610153565b6100a9336100e9565b600480546001600160a01b03199081166001600160a01b039485161790915560038054821694841694909417909355600580549093169116179055610193565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461014e575f5ffd5b919050565b5f5f5f60608486031215610165575f5ffd5b61016e84610138565b925061017c60208501610138565b915061018a60408501610138565b90509250925092565b60805160a05160c05161471b6102155f395f50505f818161125d0152818161129a015281816113b10152818161144601528181612d8f01528181612dca01528181612ee50152818161322a01528181613329015261337101525f81816112d6015281816132b1015281816132f90152818161340c015261343c015261471b5ff3fe608060405234801561000f575f5ffd5b5060043610610212575f3560e01c8063699535011161011f578063b1abe103116100a9578063ce31a06b11610079578063ce31a06b1461059a578063d8752773146105a2578063df35c36c146105b5578063f2fde38b146105c8578063fe0d94c1146105db575f5ffd5b8063b1abe103146104fc578063b3a5794314610504578063c19d93fb14610517578063c1f36c6814610592575f5ffd5b80637e223c52116100ef5780637e223c521461049e5780638287ccb4146104a65780638da5cb5b146104b9578063aa9a0912146104c9578063af979960146104dc575f5ffd5b806369953501146104455780636cb8491514610458578063715018a61461046b5780637a3dfdad14610473575f5ffd5b806335657e68116101a057806342fc73951161017057806342fc7395146103ce5780635a29638d146103e15780635d52f9fc146103f45780635dd8d67814610407578063677342ce1461041a575f5ffd5b806335657e68146102eb578063382e4781146102fe5780633ed29efe146103115780634126c3fa14610376575f5ffd5b80631cb78541116101e65780631cb785411461027e5780631f3e51fd146102a95780631fba9eda146102bc5780632413d155146102cf5780633322b23d146102e2575f5ffd5b8062ae3bf814610216578063048e92f61461022b578063111ffe5e14610253578063144fa6d71461026b575b5f5ffd5b610229610224366004613acc565b6105ee565b005b61023e610239366004613ae7565b6106ec565b60405190151581526020015b60405180910390f35b61025d62130ee881565b60405190815260200161024a565b610229610279366004613acc565b610757565b600154610291906001600160a01b031681565b6040516001600160a01b03909116815260200161024a565b6102296102b7366004613acc565b610781565b6102916102ca366004613b2a565b6107ab565b600554610291906001600160a01b031681565b61025d60025481565b6102296102f9366004613acc565b6107f3565b61022961030c366004613ae7565b610cfc565b600854600954600a54600b54600c5461033b946001600160a01b03908116948116931691905f0b85565b604080516001600160a01b0396871681529486166020860152929094169183019190915260608201525f9190910b608082015260a00161024a565b600d546103a3906001600160501b0380821691600160501b810490911690600160a01b900462ffffff1683565b604080516001600160501b03948516815293909216602084015262ffffff169082015260600161024a565b6102296103dc366004613b89565b610dcb565b600354610291906001600160a01b031681565b600454610291906001600160a01b031681565b610229610415366004613c61565b6111f2565b61042d610428366004613ae7565b6118de565b6040516001600160801b03909116815260200161024a565b610229610453366004613acc565b611a52565b600754610291906001600160a01b031681565b610229611a7c565b610486610481366004613cf2565b611a8f565b6040516001600160501b03909116815260200161024a565b610229611b23565b6102296104b4366004613ae7565b611cef565b5f546001600160a01b0316610291565b61025d6104d7366004613d1e565b611dcb565b6104ef6104ea366004613d47565b611e76565b60405161024a9190613d7e565b61022961217b565b610291610512366004613da4565b61227f565b600654610557906001600160501b0380821691600160501b81049091169060ff600160a01b8204811691600160a81b8104821691600160b01b9091041685565b604080516001600160501b0396871681529590941660208601529115159284019290925290151560608301521515608082015260a00161024a565b6102296122bf565b610229612422565b6102296105b0366004613ae7565b612461565b6102296105c3366004613dec565b612b8a565b6102296105d6366004613acc565b612bf5565b6102296105e9366004613ae7565b612c6b565b6105f6612d31565b806001600160a01b031663a9059cbb6106165f546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610658573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067c9190613e29565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156106c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e89190613e40565b5050565b5f6002545f14806106fc57504282105b1561070957506001919050565b600954600a545f91610727916001600160a01b039182169116612d8a565b90505f61073d84836001600160501b0316611e76565b600781111561074e5761074e613d6a565b14159392505050565b61075f612d31565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b610789612d31565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b5f806107d56001600160501b038416600160c01b6107ca87600c613e6f565b6104d790600a613f72565b90506107e0816118de565b6001600160801b03169150505b92915050565b6107fb612d31565b5f5f5f5f846001600160a01b0316633ed29efe6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561083b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085f9190613f80565b5093509350935093505f5f5f876001600160a01b0316634126c3fa6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156108a7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cb9190613fe7565b9250925092506040518060a00160405280886001600160a01b03168152602001876001600160a01b03168152602001866001600160a01b03168152602001858152602001866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561094b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096f9190614036565b886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109cf9190614036565b6109d9919061404f565b5f90810b9091528151600880546001600160a01b03199081166001600160a01b0393841617909155602080850151600980548416918516919091179055604080860151600a80548516918616919091179055606080870151600b55608090960151600c805460ff191660ff909216919091179055805195860181526001600160501b0389811680885290891692870183905262ffffff8816968201879052600d805490941617600160501b9092029190911762ffffff60a01b1916600160a01b909502949094179055825163c19d93fb60e01b8152925191928392839283928392918f169163c19d93fb9160048082019260a0929091908290030181865afa158015610ae7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0b919061406f565b945094509450945094508c6001600160a01b0316636cb849156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b7591906140d2565b600780546001600160a01b03199081166001600160a01b03939093169290921790556040805160a0810182526001600160501b038881168083529088166020830181905287151593830184905286151560608401819052861515608090940184905260068054909616909217600160501b9091021761ffff60a01b1916600160a01b90930260ff60a81b191692909217600160a81b9092029190911760ff60b01b1916600160b01b909102179055610c2d5f19612461565b60015460408051632ed5090160e21b815290515f926001600160a01b03169163bb5424049160048083019260209291908290030181865afa158015610c74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9891906140d2565b9050610ca381613020565b5f610cac6131a7565b6040516001600160501b03821681529091507ff12c538904fa9fe594295f2c4046a3fb31971aa9b8559708d17db8d1103cc86a9060200160405180910390a1505050505050505050505050505050565b6005546001600160a01b03163314610d12575f5ffd5b6004546001600160a01b03163181118015610d3757506007546001600160a01b031615155b15610dc8576004546007546001600160a01b03918216916308092e9a91165f5f19610d638531876140ed565b613a986040518663ffffffff1660e01b8152600401610d86959493929190614100565b60408051808303815f875af1158015610da1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc59190614135565b50505b50565b610dd3612d31565b5f60035f9054906101000a90046001600160a01b03166001600160a01b0316637afd0a868e8e5f6040518463ffffffff1660e01b8152600401610e1893929190614157565b6020604051808303815f875af1158015610e34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5891906140d2565b90506040518060a00160405280826001600160a01b031681526020018e6001600160a01b031681526020018d6001600160a01b031681526020018981526020018d6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef89190614036565b8f6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f589190614036565b610f62919061404f565b5f0b81525060085f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550606082015181600301556080820151816004015f6101000a81548160ff02191690835f0b60ff16021790555090505060405180606001604052808c6001600160501b031681526020018b6001600160501b031681526020018a62ffffff16815250600d5f820151815f015f6101000a8154816001600160501b0302191690836001600160501b031602179055506020820151815f01600a6101000a8154816001600160501b0302191690836001600160501b031602179055506040820151815f0160146101000a81548162ffffff021916908362ffffff1602179055509050508660075f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506040518060a00160405280876001600160501b03168152602001866001600160501b031681526020018515158152602001841515815260200183151581525060065f820151815f015f6101000a8154816001600160501b0302191690836001600160501b031602179055506020820151815f01600a6101000a8154816001600160501b0302191690836001600160501b031602179055506040820151815f0160146101000a81548160ff0219169083151502179055506060820151815f0160156101000a81548160ff0219169083151502179055506080820151815f0160166101000a81548160ff021916908315150217905550905050610c2d5f19612461565b6111fa612d31565b600b541561125b5760048054600b54604051634a2539c360e01b8152928301526001600160a01b031690634a2539c3906024015f604051808303815f87803b158015611244575f5ffd5b505af1158015611256573d5f5f3e3d5ffd5b505050505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161415801561130c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614801561130a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316145b155b156114b3575f60045f9054906101000a90046001600160a01b03166001600160a01b0316639ba692496040518163ffffffff1660e01b8152600401602060405180830381865afa158015611362573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113869190614183565b600354604051633d7e854360e11b81529192506001600160a01b031690637afd0a86906113db908b907f0000000000000000000000000000000000000000000000000000000000000000908690600401614157565b6020604051808303815f875af11580156113f7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061141b91906140d2565b50600354604051633d7e854360e11b81526001600160a01b0390911690637afd0a8690611470908a907f0000000000000000000000000000000000000000000000000000000000000000908690600401614157565b6020604051808303815f875af115801561148c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b091906140d2565b50505b600354604051633d7e854360e11b81525f916001600160a01b031690637afd0a86906114e7908b908b908690600401614157565b6020604051808303815f875af1158015611503573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061152791906140d2565b6004549091506001600160a01b03908116319088161580159061154f5750655af3107a400081115b156115d05760048054604051630404974d60e11b81526001600160a01b03909116916308092e9a9161158e915f918d9187915f1991613a989101614100565b60408051808303815f875af11580156115a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115cd9190614135565b50505b600480546040516370a0823160e01b81526001600160a01b03918216928101929092525f91908a16906370a0823190602401602060405180830381865afa15801561161d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116419190613e29565b6004805460405163350793e160e11b81526001600160a01b03878116938201939093528d831660248201528c831660448201526001600160501b03808b1660648301528916608482015260a481018490529293505f92911690636a0f27c29060c40160408051808303815f875af11580156116be573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e291906141a9565b5090506040518060a00160405280856001600160a01b031681526020018c6001600160a01b031681526020018b6001600160a01b031681526020018281526020018b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117839190614036565b8d6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e39190614036565b6117ed919061404f565b5f0b90528051600880546001600160a01b03199081166001600160a01b0393841617909155602080840151600980548416918516919091179055604080850151600a805485169190951617909355606080850151600b55608090940151600c805460ff191660ff909216919091179055825193840183526001600160501b039c8d168085529b909c169b83018c905262ffffff979097169101819052600d80548716909917600160501b909a029990991762ffffff60a01b1916600160a01b90990298909817909655505060068054600160a81b60ff60a81b19909116179055600780549091169055505050505050565b5f815f036118ed57505f919050565b816001600160801b82106119065760809190911c9060401b5b6801000000000000000082106119215760409190911c9060201b5b64010000000082106119385760209190911c9060101b5b62010000821061194d5760109190911c9060081b5b61010082106119615760089190911c9060041b5b601082106119745760049190911c9060021b5b600882106119805760011b5b6001818581611991576119916141d3565b048201901c905060018185816119a9576119a96141d3565b048201901c905060018185816119c1576119c16141d3565b048201901c905060018185816119d9576119d96141d3565b048201901c905060018185816119f1576119f16141d3565b048201901c90506001818581611a0957611a096141d3565b048201901c90506001818581611a2157611a216141d3565b0491909101901c5f611a3382866141e7565b9050808210611a425780611a44565b815b95945050505050565b919050565b611a5a612d31565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b611a84612d31565b611a8d5f6131ca565b565b5f5f835f0b12611ae257611adb611ab36001600160a01b038416630e8d4a516141fa565b611abe85600a613f72565b611ad1906001600160a01b0386166141fa565b600160b41b611dcb565b90506107ed565b611adb611afc6001600160a01b038416630e8d4a516141fa565b6001600160a01b03841660b4611b1187614211565b611b1c90600a613f72565b901b611dcb565b611b2b612d31565b60015460408051632ed5090160e21b815290515f926001600160a01b03169163bb5424049160048083019260209291908290030181865afa158015611b72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9691906140d2565b90506002545f1480611c1a575060025460405163976217cd60e01b815260048101919091526001600160a01b0382169063976217cd9060240161012060405180830381865afa158015611beb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c0f91906142a7565b610100015160ff1615155b611c5d5760405162461bcd60e51b815260206004820152600f60248201526e416c72656164792072756e6e696e6760881b60448201526064015b60405180910390fd5b5f611c666131a7565b600680546001600160a01b031916600160501b6001600160501b03841690810269ffffffffffffffffffff1916919091171790559050611ca65f19612461565b611caf82613020565b6040516001600160501b03821681527ff12c538904fa9fe594295f2c4046a3fb31971aa9b8559708d17db8d1103cc86a9060200160405180910390a15050565b6005546001600160a01b03163314611d05575f5ffd5b600654600160a81b900460ff1615611d6b5760048054600b5460405162a2d35760e51b8152928301526001600160a01b03169063145a6ae0906024015f604051808303815f87803b158015611d58575f5ffd5b505af1925050508015611d69575060015b505b624c4b408110158015611d8857506007546001600160a01b031615155b15610dc85760048054600754604051630404974d60e11b81526001600160a01b03928316936308092e9a93610d86935f9391169187915f1991613a989101614100565b5f80805f19858709858702925082811083820303915050805f03611dff575f8411611df4575f5ffd5b508290049050611e6f565b808411611e0a575f5ffd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b6040805160a0810182526006546001600160501b038082168352600160501b8083048216602080860191909152600160a01b80850460ff908116151587890152600160a81b860481161515606080890191909152600160b01b9096041615156080870190815287519586018852600d54808616875293840490941691850191909152900462ffffff169382019390935291515f929015611f6e57805f01516103e8026001600160501b0316846103e3026001600160a01b0316118015611f59575080602001516103e8026001600160501b0316846103ed026001600160a01b0316105b15611f69576006925050506107ed565b612171565b816060015115611fe65780516001600160501b03166001600160a01b0385161015611f9e576003925050506107ed565b80602001516001600160501b0316846001600160a01b03161115611fc7576004925050506107ed565b42611fd562069780876140ed565b1015611f69576007925050506107ed565b8160400151801561201d575081602001516001600160501b03166103e8026001600160a01b0316846103e3026001600160a01b0316115b1561202d576005925050506107ed565b8160400151158015612065575081602001516001600160501b03166103e8026001600160a01b0316846103ed026001600160a01b0316105b15612075576005925050506107ed565b81604001516120f9575f621e84808260400151620f42406120969190614334565b62ffffff16835f015185602001516120ae919061434f565b6001600160501b03166120c1919061436e565b6120cb919061439f565b9050806001600160a01b0316856001600160a01b031611156120f357600293505050506107ed565b50612171565b5f621e84808260400151620f424061211191906143cd565b62ffffff168360200151856020015161212a919061434f565b6001600160501b031661213d919061436e565b612147919061439f565b9050806001600160a01b0316856001600160a01b0316101561216f57600193505050506107ed565b505b505f949350505050565b612183612d31565b5f6002556001546001600160a01b031663a9059cbb6121a95f546001600160a01b031690565b6001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156121ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122139190613e29565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af115801561225b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc89190613e40565b5f826001600160a01b0316846001600160a01b031610156122a1575080611e6f565b6122b86001600160a01b038316600160c01b6141e7565b9050611e6f565b6005546001600160a01b031633146122d5575f5ffd5b600b54156123325760048054600b54604051630ca6a90560e21b8152928301526001600160a01b03169063329aa414906024015f604051808303815f87803b15801561231f575f5ffd5b505af1925050508015612330575060015b505b6007546001600160a01b031615611a8d57600480546007546040516370a0823160e01b81526001600160a01b039283169381018490526308092e9a92909116905f9082906370a0823190602401602060405180830381865afa15801561239a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123be9190613e29565b5f19613a986040518663ffffffff1660e01b81526004016123e3959493929190614100565b60408051808303815f875af11580156123fe573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e89190614135565b61242a612d31565b5f80546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610dc8573d5f5f3e3d5ffd5b600954600a545f9161247f916001600160a01b039182169116612d8a565b90505f61249583836001600160501b0316611e76565b6040805160a0810182526006546001600160501b038082168352600160501b820416602083015260ff600160a01b82048116151593830193909352600160a81b8104831615156060830152600160b01b900490911615156080820152909150600582600781111561250857612508613d6a565b03612555576001600160501b03831660208281018290526040519182527f9aa54d3e86f75cc1d8ac502d5a25d5c0563481537f37787aebdc54a27d156897910160405180910390a1612b00565b600482600781111561256957612569613d6a565b14806125865750600382600781111561258457612584613d6a565b145b156129225760048054600b54604051630ca6a90560e21b8152928301526001600160a01b03169063329aa414906024015f604051808303815f87803b1580156125cd575f5ffd5b505af11580156125df573d5f5f3e3d5ffd5b50505f6060840181905291506004905083600781111561260157612601613d6a565b0361272e57600a54600480546040516370a0823160e01b81526001600160a01b0391821692810192909252909116906370a0823190602401602060405180830381865afa158015612654573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126789190613e29565b60048054600a54600954604051630404974d60e11b81529495506001600160a01b03928316946308092e9a946126bf94938416939092169187915f1991613a989101614100565b60408051808303815f875af11580156126da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fe9190614135565b5050600954600780546001600160a01b0319166001600160a01b0390921691909117905560016040830152612851565b600954600480546040516370a0823160e01b81526001600160a01b0391821692810192909252909116906370a0823190602401602060405180830381865afa15801561277c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127a09190613e29565b60048054600954600a54604051630404974d60e11b81529495506001600160a01b03928316946308092e9a946127e794938416939092169187915f1991613a989101614100565b60408051808303815f875af1158015612802573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128269190614135565b5050600a54600780546001600160a01b0319166001600160a01b039092169190911790555f60408301525b506004546001600160a01b031631655af3107a40008111801561287e57506007546001600160a01b031615155b1561291c576004546007546001600160a01b03918216916308092e9a915f9116600a6128ab8660096141fa565b6128b591906141e7565b5f19613a986040518663ffffffff1660e01b81526004016128da959493929190614100565b60408051808303815f875af11580156128f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129199190614135565b50505b50612b00565b600682600781111561293657612936613d6a565b03612946575f6080820152612b00565b600782600781111561295a5761295a613d6a565b036129bb5760048054600b5460405162a2d35760e51b8152928301526001600160a01b03169063145a6ae0906024015f604051808303815f87803b1580156129a0575f5ffd5b505af11580156129b2573d5f5f3e3d5ffd5b50505050612b00565b5f8260078111156129ce576129ce613d6a565b14612b00576004546001600160a01b031631655af3107a4000811115612a8957600454600a80546001600160a01b03928316926308092e9a925f9290911690612a188660096141fa565b612a2291906141e7565b5f19613a986040518663ffffffff1660e01b8152600401612a47959493929190614100565b60408051808303815f875af1158015612a62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a869190614135565b50505b60048054600b5460405162a2d35760e51b8152928301526001600160a01b03169063145a6ae0906024015f604051808303815f87803b158015612aca575f5ffd5b505af1158015612adc573d5f5f3e3d5ffd5b505060016060850181905260808501525050600780546001600160a01b0319169055505b8051600680546020840151604085015160608601516080909601511515600160b01b0260ff60b01b19961515600160a81b0260ff60a81b19921515600160a01b029290921661ffff60a01b196001600160501b03948516600160501b026001600160a01b031990961694909716939093179390931794909416179290921792909216179055505050565b612b92612d31565b604080516060810182526001600160501b03948516808252939094166020850181905262ffffff929092169301839052600d80546001600160a01b031916909217600160501b9091021762ffffff60a01b1916600160a01b909202919091179055565b612bfd612d31565b6001600160a01b038116612c625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611c54565b610dc8816131ca565b6002545f03612c775750565b60405163d875277360e01b815260048101829052309063d8752773906024015f604051808303815f87803b158015612cad575f5ffd5b505af1925050508015612cbe575060015b5060015460408051632ed5090160e21b81529051610dc8926001600160a01b03169163bb5424049160048083019260209291908290030181865afa158015612d08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2c91906140d2565b613020565b5f546001600160a01b03163314611a8d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611c54565b5f60607f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161480612dfe57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15612e8f57604080516002808252606082018352909160208301908036833701905050905083815f81518110612e3657612e366143e8565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110612e6a57612e6a6143e8565b60200260200101906001600160a01b031690816001600160a01b031681525050612f6c565b60408051600380825260808201909252906020820160608036833701905050905083815f81518110612ec357612ec36143e8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612f1757612f176143e8565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600281518110612f4b57612f4b6143e8565b60200260200101906001600160a01b031690816001600160a01b0316815250505b60405163d06ca61f60e01b81525f90737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f90612fac9064e987756e009086906004016143fc565b5f60405180830381865afa158015612fc6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612fed9190810190614475565b90508060018251612ffe91906140ed565b8151811061300e5761300e6143e8565b60200260200101519250505092915050565b6040516347e25f2160e01b815262130ee860048201525f906001600160a01b038316906347e25f2190602401602060405180830381865afa158015613067573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061308b9190613e29565b60015460405163095ea7b360e01b81526001600160a01b0385811660048301526024820184905292935091169063095ea7b3906044016020604051808303815f875af11580156130dd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131019190613e40565b505f6131104262093a8061450b565b60405163bc0d984d60e01b815230600482018190526024820152604481018290526064810184905262130ee8608482015260a481018290529091506001600160a01b0384169063bc0d984d9060c4016020604051808303815f875af115801561317b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061319f9190613e29565b600255505050565b600954600a545f916131c5916001600160a01b039182169116613219565b905090565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6001600160a01b03821661324c577f000000000000000000000000000000000000000000000000000000000000000091505b5f836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613289573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ad9190614036565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036133275761331f6132f660068361404f565b857f00000000000000000000000000000000000000000000000000000000000000006078613499565b9150506107ed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036133975761331f61336e60128361404f565b857f00000000000000000000000000000000000000000000000000000000000000006078613499565b5f6006820390505f6006856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133dd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134019190614036565b0390505f61343283887f00000000000000000000000000000000000000000000000000000000000000006078613499565b90505f61346283887f00000000000000000000000000000000000000000000000000000000000000006078613499565b9050806001600160501b0316826001600160501b031664e8d4a51000028161348c5761348c6141d3565b0498975050505050505050565b60035460405163bc501ee760e01b81526001600160a01b03858116600483015284811660248301525f92839291169063bc501ee790604401602060405180830381865afa1580156134ec573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061351091906140d2565b90505f61351f82878787613536565b905061352b8782611a8f565b979650505050505050565b6040805160028082526060820183525f928392919060208301908036833701905050905082815f8151811061356d5761356d6143e8565b602002602001019063ffffffff16908163ffffffff16815250505f8160018151811061359b5761359b6143e8565b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81525f906001600160a01b0388169063883bdbfd906135de90859060040161451e565b5f60405180830381865afa1580156135f8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261361f91908101906145d4565b5090505f8463ffffffff1660060b825f8151811061363f5761363f6143e8565b60200260200101518360018151811061365a5761365a6143e8565b60200260200101510360060b81613673576136736141d3565b0590505f613685888861051285613692565b9998505050505050505050565b5f5f5f8360020b126136a7578260020b6136b4565b8260020b6136b4906146a0565b90506136c3620d89e7196146ba565b62ffffff168111156136fb5760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401611c54565b5f816001165f0361371057600160801b613722565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561376157608061375c826ffff97272373d413259a46990580e213a6141fa565b901c90505b600482161561378b576080613786826ffff2e50f5f656932ef12357cf3c7fdcc6141fa565b901c90505b60088216156137b55760806137b0826fffe5caca7e10e4e61c3624eaa0941cd06141fa565b901c90505b60108216156137df5760806137da826fffcb9843d60f6159c9db58835c9266446141fa565b901c90505b6020821615613809576080613804826fff973b41fa98c081472e6896dfb254c06141fa565b901c90505b604082161561383357608061382e826fff2ea16466c96a3843ec78b326b528616141fa565b901c90505b608082161561385d576080613858826ffe5dee046a99a2a811c461f1969c30536141fa565b901c90505b610100821615613888576080613883826ffcbe86c7900a88aedcffc83b479aa3a46141fa565b901c90505b6102008216156138b35760806138ae826ff987a7253ac413176f2b074cf7815e546141fa565b901c90505b6104008216156138de5760806138d9826ff3392b0822b70005940c7a398e4b70f36141fa565b901c90505b610800821615613909576080613904826fe7159475a2c29b7443b29c7fa6e889d96141fa565b901c90505b61100082161561393457608061392f826fd097f3bdfd2022b8845ad8f792aa58256141fa565b901c90505b61200082161561395f57608061395a826fa9f746462d870fdf8a65dc1f90e061e56141fa565b901c90505b61400082161561398a576080613985826f70d869a156d2a1b890bb3df62baf32f76141fa565b901c90505b6180008216156139b55760806139b0826f31be135f97d08fd981231505542fcfa66141fa565b901c90505b620100008216156139e15760806139dc826f09aa508b5b7a84e1c677de54f3e99bc96141fa565b901c90505b62020000821615613a0c576080613a07826e5d6af8dedb81196699c329225ee6046141fa565b901c90505b62040000821615613a36576080613a31826d2216e584f5fa1ea926041bedfe986141fa565b901c90505b62080000821615613a5e576080613a59826b048a170391f7dc42444e8fa26141fa565b901c90505b5f8460020b1315613a7757613a74815f196141e7565b90505b613a86640100000000826146d2565b15613a92576001613a94565b5f5b613aa59060ff16602083901c61450b565b949350505050565b6001600160a01b0381168114610dc8575f5ffd5b8035611a4d81613aad565b5f60208284031215613adc575f5ffd5b8135611e6f81613aad565b5f60208284031215613af7575f5ffd5b5035919050565b805f0b8114610dc8575f5ffd5b6001600160501b0381168114610dc8575f5ffd5b8035611a4d81613b0b565b5f5f60408385031215613b3b575f5ffd5b8235613b4681613afe565b91506020830135613b5681613b0b565b809150509250929050565b62ffffff81168114610dc8575f5ffd5b8015158114610dc8575f5ffd5b8035611a4d81613b71565b5f5f5f5f5f5f5f5f5f5f5f5f6101808d8f031215613ba5575f5ffd5b8c35613bb081613aad565b9b5060208d0135613bc081613aad565b9a5060408d0135613bd081613b0b565b995060608d0135613be081613b0b565b985060808d0135613bf081613b61565b975060a08d01359650613c0560c08e01613ac1565b9550613c1360e08e01613b1f565b9450613c226101008e01613b1f565b9350613c316101208e01613b7e565b9250613c406101408e01613b7e565b9150613c4f6101608e01613b7e565b90509295989b509295989b509295989b565b5f5f5f5f5f5f5f60e0888a031215613c77575f5ffd5b8735613c8281613aad565b96506020880135613c9281613aad565b95506040880135613ca281613b0b565b94506060880135613cb281613b0b565b93506080880135613cc281613b0b565b925060a0880135613cd281613b0b565b915060c0880135613ce281613b61565b8091505092959891949750929550565b5f5f60408385031215613d03575f5ffd5b8235613d0e81613afe565b91506020830135613b5681613aad565b5f5f5f60608486031215613d30575f5ffd5b505081359360208301359350604090920135919050565b5f5f60408385031215613d58575f5ffd5b823591506020830135613b5681613aad565b634e487b7160e01b5f52602160045260245ffd5b6020810160088310613d9e57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f5f5f60608486031215613db6575f5ffd5b8335613dc181613aad565b92506020840135613dd181613aad565b91506040840135613de181613aad565b809150509250925092565b5f5f5f60608486031215613dfe575f5ffd5b8335613e0981613b0b565b92506020840135613e1981613b0b565b91506040840135613de181613b61565b5f60208284031215613e39575f5ffd5b5051919050565b5f60208284031215613e50575f5ffd5b8151611e6f81613b71565b634e487b7160e01b5f52601160045260245ffd5b5f81810b9083900b01607f8113607f19821217156107ed576107ed613e5b565b6001815b6001841115613eca57808504811115613eae57613eae613e5b565b6001841615613ebc57908102905b60019390931c928002613e93565b935093915050565b5f82613ee0575060016107ed565b81613eec57505f6107ed565b8160018114613f025760028114613f0c57613f28565b60019150506107ed565b60ff841115613f1d57613f1d613e5b565b50506001821b6107ed565b5060208310610133831016604e8410600b8410161715613f4b575081810a6107ed565b613f575f198484613e8f565b805f1904821115613f6a57613f6a613e5b565b029392505050565b5f611e6f60ff841683613ed2565b5f5f5f5f5f60a08688031215613f94575f5ffd5b8551613f9f81613aad565b6020870151909550613fb081613aad565b6040870151909450613fc181613aad565b606087015160808801519194509250613fd981613afe565b809150509295509295909350565b5f5f5f60608486031215613ff9575f5ffd5b835161400481613b0b565b602085015190935061401581613b0b565b6040850151909250613de181613b61565b805160ff81168114611a4d575f5ffd5b5f60208284031215614046575f5ffd5b611e6f82614026565b5f82810b9082900b03607f198112607f821317156107ed576107ed613e5b565b5f5f5f5f5f60a08688031215614083575f5ffd5b855161408e81613b0b565b602087015190955061409f81613b0b565b60408701519094506140b081613b71565b60608701519093506140c181613b71565b6080870151909250613fd981613b71565b5f602082840312156140e2575f5ffd5b8151611e6f81613aad565b818103818111156107ed576107ed613e5b565b6001600160a01b0395861681529390941660208401526040830191909152606082015262ffffff909116608082015260a00190565b5f5f60408385031215614146575f5ffd5b505080516020909101519092909150565b6001600160a01b0393841681529190921660208201526001600160801b03909116604082015260600190565b5f60208284031215614193575f5ffd5b81516001600160801b0381168114611e6f575f5ffd5b5f5f604083850312156141ba575f5ffd5b825191506141ca60208401614026565b90509250929050565b634e487b7160e01b5f52601260045260245ffd5b5f826141f5576141f56141d3565b500490565b80820281158282048414176107ed576107ed613e5b565b5f81810b6080810161422557614225613e5b565b5f0392915050565b634e487b7160e01b5f52604160045260245ffd5b604051610120810167ffffffffffffffff811182821017156142655761426561422d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156142945761429461422d565b604052919050565b8051611a4d81613aad565b5f6101208284031280156142b9575f5ffd5b506142c2614241565b6142cb8361429c565b81526142d96020840161429c565b602082015260408381015190820152606080840151908201526080808401519082015260a0808401519082015260c0808401519082015260e080840151908201526143276101008401614026565b6101008201529392505050565b62ffffff81811683821601908111156107ed576107ed613e5b565b6001600160501b0381811683821601908111156107ed576107ed613e5b565b6001600160a01b0381811683821681810290921691818304811482151761439757614397613e5b565b505092915050565b5f6001600160a01b038316806143b7576143b76141d3565b6001600160a01b03929092169190910492915050565b62ffffff82811682821603908111156107ed576107ed613e5b565b634e487b7160e01b5f52603260045260245ffd5b5f60408201848352604060208401528084518083526060850191506020860192505f5b818110156144465783516001600160a01b031683526020938401939092019160010161441f565b50909695505050505050565b5f67ffffffffffffffff82111561446b5761446b61422d565b5060051b60200190565b5f60208284031215614485575f5ffd5b815167ffffffffffffffff81111561449b575f5ffd5b8201601f810184136144ab575f5ffd5b80516144be6144b982614452565b61426b565b8082825260208201915060208360051b8501019250868311156144df575f5ffd5b6020840193505b828410156145015783518252602093840193909101906144e6565b9695505050505050565b808201808211156107ed576107ed613e5b565b602080825282518282018190525f918401906040840190835b8181101561455b57835163ffffffff16835260209384019390920191600101614537565b509095945050505050565b5f82601f830112614575575f5ffd5b81516145836144b982614452565b8082825260208201915060208360051b8601019250858311156145a4575f5ffd5b602085015b838110156145ca5780516145bc81613aad565b8352602092830192016145a9565b5095945050505050565b5f5f604083850312156145e5575f5ffd5b825167ffffffffffffffff8111156145fb575f5ffd5b8301601f8101851361460b575f5ffd5b80516146196144b982614452565b8082825260208201915060208360051b85010192508783111561463a575f5ffd5b6020840193505b8284101561466a5783518060060b8114614659575f5ffd5b825260209384019390910190614641565b80955050505050602083015167ffffffffffffffff81111561468a575f5ffd5b61469685828601614566565b9150509250929050565b5f600160ff1b82016146b4576146b4613e5b565b505f0390565b5f8160020b627fffff19810361422557614225613e5b565b5f826146e0576146e06141d3565b50069056fea264697066735822122076a30b88343c7323ce1d1f53a5730af499fa582f5db0c8ef984187ae1a880a3564736f6c634300081d0033000000000000000000000000c97b6f6dc641c0f59c724657b91569af00c28b7d000000000000000000000000abc4209ac169145c80b8a23dc683f0e68ffa59240000000000000000000000009f58f81d5b74a1200eaaee1f944d159724be3f59