0 txs
1 call
constructor
constructor(address _universalRouter, address _weth, address _feeRecipient)
functions
basketHelper
viewfunction basketHelper() view returns (address)
basketHelperPro
viewfunction basketHelperPro() view returns (address)
calculateFee
viewfunction calculateFee(uint256 amount) view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
getPlatformFee
viewfunction getPlatformFee() view returns (uint256)
MAX_ALLOCATION
viewfunction MAX_ALLOCATION() view returns (uint256)
MAX_TOKENS
viewfunction MAX_TOKENS() view returns (uint256)
MIN_ALLOCATION
viewfunction MIN_ALLOCATION() view returns (uint256)
owner
viewfunction owner() view returns (address)
platformFee
viewfunction platformFee() view returns (uint256)
universalRouter
viewfunction universalRouter() view returns (address)
WETH
viewfunction WETH() view returns (address)
emergencyWithdraw
nonpayablefunction emergencyWithdraw(address token, uint256 amount)
purchaseBasket
payablefunction purchaseBasket(tuple[] tokens, address recipient, uint256 deadline, bytes swapCommands, bytes[] swapInputs) payable
purchaseBasketOptimized
payablefunction purchaseBasketOptimized(tuple[] tokens, uint256 slippageTolerance) payable
purchaseBasketWithToken
nonpayablefunction purchaseBasketWithToken(address inputToken, uint256 inputAmount, tuple[] tokens, address recipient, uint256 deadline, bytes swapCommands, bytes[] swapInputs)
renounceOwnership
nonpayablefunction renounceOwnership()
setFeeRecipient
nonpayablefunction setFeeRecipient(address _newRecipient)
setPlatformFee
nonpayablefunction setPlatformFee(uint256 _newFee)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
BasketPurchased
event BasketPurchased(address indexed buyer, address indexed recipient, uint256 totalAmount, uint256 tokenCount, uint256 feeAmount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PlatformFeeUpdated
event PlatformFeeUpdated(uint256 oldFee, uint256 newFee)
TokenSwapped
event TokenSwapped(address indexed token, uint256 amountIn, uint256 amountOut)
errors
AllocationSumMismatch
error AllocationSumMismatch()
DeadlineExceeded
error DeadlineExceeded()
InsufficientBalance
error InsufficientBalance()
InvalidAllocation
error InvalidAllocation()
InvalidFeeRecipient
error InvalidFeeRecipient()
InvalidTokenCount
error InvalidTokenCount()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SwapFailed
error SwapFailed()
creation bytecode
0x60c060405260326002553480156200001657600080fd5b5060405162003a8138038062003a818339810160408190526200003991620001c6565b33806200006057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006b816200013d565b50600180556001600160a01b0383811660805282811660a052600380546001600160a01b031916918316919091179055604051620000a9906200018d565b604051809103906000f080158015620000c6573d6000803e3d6000fd5b50600480546001600160a01b0319166001600160a01b0392909216919091179055604051620000f5906200019b565b604051809103906000f08015801562000112573d6000803e3d6000fd5b50600580546001600160a01b0319166001600160a01b03929092169190911790555062000210915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610c428062001a9d83390190565b6113a280620026df83390190565b80516001600160a01b0381168114620001c157600080fd5b919050565b600080600060608486031215620001dc57600080fd5b620001e784620001a9565b9250620001f760208501620001a9565b91506200020760408501620001a9565b90509250925092565b60805160a05161184462000259600039600081816102d6015261067b0152600081816101a2015281816106ee01528181610aa401528181610ae00152610ddd01526118446000f3fe6080604052600436106101235760003560e01c806395ccea67116100a0578063e5486bda11610064578063e5486bda1461031e578063e74b981b14610333578063f043164114610353578063f2fde38b14610373578063f47c84c51461031e57600080fd5b806395ccea671461028457806399a5d747146102a4578063ad5c4648146102c4578063af6e865b146102f8578063d726c2e51461030b57600080fd5b80636dadc43c116100e75780636dadc43c146101fc5780636ea8bc101461021c578063702e495814610231578063715018a6146102515780638da5cb5b1461026657600080fd5b806312e8e2c31461012f57806326232a2e14610151578063298f2ac41461017a57806335a9e4df1461019057806346904840146101dc57600080fd5b3661012a57005b600080fd5b34801561013b57600080fd5b5061014f61014a366004611079565b610393565b005b34801561015d57600080fd5b5061016760025481565b6040519081526020015b60405180910390f35b34801561018657600080fd5b5061016761271081565b34801561019c57600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610171565b3480156101e857600080fd5b506003546101c4906001600160a01b031681565b34801561020857600080fd5b506005546101c4906001600160a01b031681565b34801561022857600080fd5b50600254610167565b34801561023d57600080fd5b506004546101c4906001600160a01b031681565b34801561025d57600080fd5b5061014f610426565b34801561027257600080fd5b506000546001600160a01b03166101c4565b34801561029057600080fd5b5061014f61029f3660046110ae565b61043a565b3480156102b057600080fd5b506101676102bf366004611079565b61051a565b3480156102d057600080fd5b506101c47f000000000000000000000000000000000000000000000000000000000000000081565b61014f610306366004611124565b61053d565b61014f6103193660046111f7565b6107c1565b34801561032a57600080fd5b50610167600a81565b34801561033f57600080fd5b5061014f61034e3660046112ae565b610972565b34801561035f57600080fd5b5061014f61036e3660046112d0565b6109c3565b34801561037f57600080fd5b5061014f61038e3660046112ae565b610bb4565b61039b610bf2565b6101f48111156103e15760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b60448201526064015b60405180910390fd5b600280549082905560408051828152602081018490527fd347e206f25a89b917fc9482f1a2d294d749baa4dc9bde7fb495ee11fe491643910160405180910390a15050565b61042e610bf2565b6104386000610c1f565b565b610442610bf2565b6001600160a01b0382166104f057600080546040516001600160a01b039091169083908381818185875af1925050503d806000811461049d576040519150601f19603f3d011682016040523d82523d6000602084013e6104a2565b606091505b50509050806104eb5760405162461bcd60e51b8152602060048201526015602482015274115512081dda5d1a191c985dd85b0819985a5b1959605a1b60448201526064016103d8565b505050565b6105166105056000546001600160a01b031690565b6001600160a01b0384169083610c6f565b5050565b60006127106002548361052d91906113ba565b61053791906113d1565b92915050565b610545610cce565b600034116105855760405162461bcd60e51b815260206004820152600d60248201526c09aeae6e840e6cadcc8408aa89609b1b60448201526064016103d8565b6103e88111156105cb5760405162461bcd60e51b81526020600482015260116024820152700a6d8d2e0e0c2ceca40e8dede40d0d2ced607b1b60448201526064016103d8565b6105d58383610cf8565b6000612710600254346105e891906113ba565b6105f291906113d1565b9050600061060082346113f3565b90508115610644576003546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015610642573d6000803e3d6000fd5b505b60055460405163122e1a6960e11b815260009182916001600160a01b039091169063245c34d2906106a3908a908a90889033908c907f000000000000000000000000000000000000000000000000000000000000000090600401611406565b600060405180830381865afa1580156106c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e8919081019061155a565b915091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633593564c848484426040518563ffffffff1660e01b815260040161073d9392919061166d565b6000604051808303818588803b15801561075657600080fd5b505af115801561076a573d6000803e3d6000fd5b505060408051348152602081018b90529081018890523393508392507fbe85bc6d74d54aa721b28d456de4f02f5ed032dadb3fe6725f44cbe7e777f848915060600160405180910390a3505050506104eb60018055565b6107c9610cce565b844211156107ea5760405163559895a360e01b815260040160405180910390fd5b8615806107f75750600a87115b156108155760405163e778681d60e01b815260040160405180910390fd5b6001600160a01b038616610827573395505b6108318888610cf8565b60006127106002543461084491906113ba565b61084e91906113d1565b9050600061085c82346113f3565b905081156108ff576003546040516000916001600160a01b03169084908381818185875af1925050503d80600081146108b1576040519150601f19603f3d011682016040523d82523d6000602084013e6108b6565b606091505b50509050806108fd5760405162461bcd60e51b8152602060048201526013602482015272119959481d1c985b9cd9995c8819985a5b1959606a1b60448201526064016103d8565b505b61090f86868686858f8f8f610dc6565b60408051348152602081018b90529081018390526001600160a01b0389169033907fbe85bc6d74d54aa721b28d456de4f02f5ed032dadb3fe6725f44cbe7e777f8489060600160405180910390a3505061096860018055565b5050505050505050565b61097a610bf2565b6001600160a01b0381166109a157604051630ed1b8b360e31b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6109cb610cce565b844211156109ec5760405163559895a360e01b815260040160405180910390fd5b8615806109f95750600a87115b15610a175760405163e778681d60e01b815260040160405180910390fd5b6001600160a01b038616610a29573395505b610a338888610cf8565b610a486001600160a01b038b1633308c610eee565b60006127106002548b610a5b91906113ba565b610a6591906113d1565b90506000610a73828c6113f3565b90508115610a9557600354610a95906001600160a01b038e8116911684610c6f565b610ac96001600160a01b038d167f000000000000000000000000000000000000000000000000000000000000000083610f2d565b604051630d64d59360e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633593564c90610b1d9089908990899089908e90600401611711565b600060405180830381600087803b158015610b3757600080fd5b505af1158015610b4b573d6000803e3d6000fd5b5050604080518e8152602081018d90529081018590526001600160a01b038b1692503391507fbe85bc6d74d54aa721b28d456de4f02f5ed032dadb3fe6725f44cbe7e777f8489060600160405180910390a35050610ba860018055565b50505050505050505050565b610bbc610bf2565b6001600160a01b038116610be657604051631e4fbdf760e01b8152600060048201526024016103d8565b610bef81610c1f565b50565b6000546001600160a01b031633146104385760405163118cdaa760e01b81523360048201526024016103d8565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b038381166024830152604482018390526104eb91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610fb9565b600260015403610cf157604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b6000805b82811015610da357600a848483818110610d1857610d186117cc565b905060400201602001351080610d4a5750612710848483818110610d3e57610d3e6117cc565b90506040020160200135115b15610d68576040516305d7ba1960e11b815260040160405180910390fd5b838382818110610d7a57610d7a6117cc565b9050604002016020013582610d8f91906117e2565b915080610d9b816117f5565b915050610cfc565b5061271081146104eb57604051636bb80c9560e11b815260040160405180910390fd5b604051630d64d59360e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633593564c908690610e1c908c908c908c908c904290600401611711565b6000604051808303818588803b158015610e3557600080fd5b505af1158015610e49573d6000803e3d6000fd5b5050505050600047111561096857604051600090339047908381818185875af1925050503d8060008114610e99576040519150601f19603f3d011682016040523d82523d6000602084013e610e9e565b606091505b5050905080610ee35760405162461bcd60e51b8152602060048201526011602482015270115512081c99599d5b990819985a5b1959607a1b60448201526064016103d8565b505050505050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610f279186918216906323b872dd90608401610c9c565b50505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052610f7e848261102a565b610f27576040516001600160a01b03848116602483015260006044830152610fb391869182169063095ea7b390606401610c9c565b610f2784825b600080602060008451602086016000885af180610fdc576040513d6000823e3d81fd5b50506000513d91508115610ff4578060011415611001565b6001600160a01b0384163b155b15610f2757604051635274afe760e01b81526001600160a01b03851660048201526024016103d8565b6000806000806020600086516020880160008a5af192503d9150600051905082801561106f57508115611060578060011461106f565b6000866001600160a01b03163b115b9695505050505050565b60006020828403121561108b57600080fd5b5035919050565b80356001600160a01b03811681146110a957600080fd5b919050565b600080604083850312156110c157600080fd5b6110ca83611092565b946020939093013593505050565b60008083601f8401126110ea57600080fd5b50813567ffffffffffffffff81111561110257600080fd5b6020830191508360208260061b850101111561111d57600080fd5b9250929050565b60008060006040848603121561113957600080fd5b833567ffffffffffffffff81111561115057600080fd5b61115c868287016110d8565b909790965060209590950135949350505050565b60008083601f84011261118257600080fd5b50813567ffffffffffffffff81111561119a57600080fd5b60208301915083602082850101111561111d57600080fd5b60008083601f8401126111c457600080fd5b50813567ffffffffffffffff8111156111dc57600080fd5b6020830191508360208260051b850101111561111d57600080fd5b60008060008060008060008060a0898b03121561121357600080fd5b883567ffffffffffffffff8082111561122b57600080fd5b6112378c838d016110d8565b909a50985088915061124b60208c01611092565b975060408b0135965060608b013591508082111561126857600080fd5b6112748c838d01611170565b909650945060808b013591508082111561128d57600080fd5b5061129a8b828c016111b2565b999c989b5096995094979396929594505050565b6000602082840312156112c057600080fd5b6112c982611092565b9392505050565b60008060008060008060008060008060e08b8d0312156112ef57600080fd5b6112f88b611092565b995060208b0135985060408b013567ffffffffffffffff8082111561131c57600080fd5b6113288e838f016110d8565b909a50985088915061133c60608e01611092565b975060808d0135965060a08d013591508082111561135957600080fd5b6113658e838f01611170565b909650945060c08d013591508082111561137e57600080fd5b5061138b8d828e016111b2565b915080935050809150509295989b9194979a5092959850565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610537576105376113a4565b6000826113ee57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610537576105376113a4565b60a0808252810186905260008760c08301825b89811015611451576001600160a01b0361143284611092565b1682526020838101359083015260409283019290910190600101611419565b50602084019790975250506001600160a01b039384166040820152606081019290925290911660809091015292915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156114c2576114c2611483565b604052919050565b60005b838110156114e55781810151838201526020016114cd565b50506000910152565b600082601f8301126114ff57600080fd5b815167ffffffffffffffff81111561151957611519611483565b61152c601f8201601f1916602001611499565b81815284602083860101111561154157600080fd5b6115528260208301602087016114ca565b949350505050565b6000806040838503121561156d57600080fd5b825167ffffffffffffffff8082111561158557600080fd5b611591868387016114ee565b93506020915081850151818111156115a857600080fd5b8501601f810187136115b957600080fd5b8051828111156115cb576115cb611483565b8060051b6115da858201611499565b918252828101850191858101908a8411156115f457600080fd5b86850192505b83831015611630578251868111156116125760008081fd5b6116208c89838901016114ee565b83525091860191908601906115fa565b809750505050505050509250929050565b600081518084526116598160208601602086016114ca565b601f01601f19169290920160200192915050565b6060815260006116806060830186611641565b6020838203818501528186518084528284019150828160051b85010183890160005b838110156116d057601f198784030185526116be838351611641565b948601949250908501906001016116a2565b50508095505050505050826040830152949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6060815260006117256060830187896116e8565b602083820381850152818683528183019050818760051b8401018860005b898110156117b357858303601f190184528135368c9003601e1901811261176957600080fd5b8b01858101903567ffffffffffffffff81111561178557600080fd5b80360382131561179457600080fd5b61179f8582846116e8565b958701959450505090840190600101611743565b5050809450505050508260408301529695505050505050565b634e487b7160e01b600052603260045260246000fd5b80820180821115610537576105376113a4565b600060018201611807576118076113a4565b506001019056fea2646970667358221220741d68859751ae60e2c769591b66ddd2ff618cf5963abb7365c590d09c3dc09b64736f6c63430008140033608060405234801561001057600080fd5b50610c22806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c806304b1586e1461005c57806346674142146100865780635730861b146100a957806375349404146100bc578063818f8349146100cf575b600080fd5b61006f61006a3660046107c2565b6100fa565b60405161007d929190610867565b60405180910390f35b610099610094366004610925565b61022c565b604051901515815260200161007d565b61006f6100b7366004610967565b6102f3565b61006f6100ca3660046109dd565b6104f7565b6100e66100dd366004610a42565b610bb892915050565b60405162ffffff909116815260200161007d565b60408051600160fb1b60208201528151600181830381018252602183018181526061840190945260609384939091906041015b606081526020019060019003908161012d5750506040805160028082526060820183529294506000929091602083019080368337019050509050888160008151811061017b5761017b610a8b565b60200260200101906001600160a01b031690816001600160a01b03168152505087816001815181106101af576101af610a8b565b60200260200101906001600160a01b031690816001600160a01b03168152505085876101db898861077c565b8360016040516020016101f2959493929190610aa1565b6040516020818303038152906040528360008151811061021457610214610a8b565b60209081029190910101525091509550959350505050565b600081158061023b5750600a82115b15610248575060006102ed565b6000805b838110156102e557600a85858381811061026857610268610a8b565b90506040020160200135108061029a575061271085858381811061028e5761028e610a8b565b90506040020160200135115b156102aa576000925050506102ed565b8484828181106102bc576102bc610a8b565b90506040020160200135826102d19190610b2a565b9150806102dd81610b3d565b91505061024c565b506127101490505b92915050565b606080858160005b8881101561033e5760405161031a908390600160fb1b90602001610b56565b6040516020818303038152906040529150808061033690610b3d565b9150506102fb565b508167ffffffffffffffff81111561035857610358610a75565b60405190808252806020026020018201604052801561038b57816020015b60608152602001906001900390816103765790505b50925060005b888110156104e85760006127108b8b848181106103b0576103b0610a8b565b905060400201602001358a6103c59190610b85565b6103cf9190610b9c565b60408051600280825260608201835292935060009290916020830190803683370190505090508c8160008151811061040957610409610a8b565b60200260200101906001600160a01b031690816001600160a01b0316815250508b8b8481811061043b5761043b610a8b565b6104519260206040909202019081019150610bbe565b8160018151811061046457610464610a8b565b60200260200101906001600160a01b031690816001600160a01b0316815250508882610490848b61077c565b8360016040516020016104a7959493929190610aa1565b6040516020818303038152906040528684815181106104c8576104c8610a8b565b6020026020010181905250505080806104e090610b3d565b915050610391565b50925050965096945050505050565b6060806000610507876001610b2a565b60408051600b60f81b602082015281516001818303018152602190910190915290915060005b888110156105705760405161054c908390600160fb1b90602001610b56565b6040516020818303038152906040529150808061056890610b3d565b91505061052d565b508167ffffffffffffffff81111561058a5761058a610a75565b6040519080825280602002602001820160405280156105bd57816020015b60608152602001906001900390816105a85790505b506040805160026020820152908101899052909350606001604051602081830303815290604052836000815181106105f7576105f7610a8b565b602002602001018190525060005b8881101561076e5760006127108b8b8481811061062457610624610a8b565b905060400201602001358a6106399190610b85565b6106439190610b9c565b60408051600280825260608201835292935060009290916020830190803683370190505090506006602160991b018160008151811061068457610684610a8b565b60200260200101906001600160a01b031690816001600160a01b0316815250508b8b848181106106b6576106b6610a8b565b6106cc9260206040909202019081019150610bbe565b816001815181106106df576106df610a8b565b60200260200101906001600160a01b031690816001600160a01b031681525050888261070b848b61077c565b836000604051602001610722959493929190610aa1565b60408051601f198184030181529190528661073e856001610b2a565b8151811061074e5761074e610a8b565b60200260200101819052505050808061076690610b3d565b915050610605565b509250509550959350505050565b600061271061078b8382610bd9565b6107959085610b85565b61079f9190610b9c565b9392505050565b80356001600160a01b03811681146107bd57600080fd5b919050565b600080600080600060a086880312156107da57600080fd5b6107e3866107a6565b94506107f1602087016107a6565b935060408601359250610806606087016107a6565b949793965091946080013592915050565b60005b8381101561083257818101518382015260200161081a565b50506000910152565b60008151808452610853816020860160208601610817565b601f01601f19169290920160200192915050565b60408152600061087a604083018561083b565b6020838203818501528185518084528284019150828160051b85010183880160005b838110156108ca57601f198784030185526108b883835161083b565b9486019492509085019060010161089c565b50909998505050505050505050565b60008083601f8401126108eb57600080fd5b50813567ffffffffffffffff81111561090357600080fd5b6020830191508360208260061b850101111561091e57600080fd5b9250929050565b6000806020838503121561093857600080fd5b823567ffffffffffffffff81111561094f57600080fd5b61095b858286016108d9565b90969095509350505050565b60008060008060008060a0878903121561098057600080fd5b610989876107a6565b9550602087013567ffffffffffffffff8111156109a557600080fd5b6109b189828a016108d9565b909650945050604087013592506109ca606088016107a6565b9150608087013590509295509295509295565b6000806000806000608086880312156109f557600080fd5b853567ffffffffffffffff811115610a0c57600080fd5b610a18888289016108d9565b90965094505060208601359250610a31604087016107a6565b949793965091946060013592915050565b60008060408385031215610a5557600080fd5b610a5e836107a6565b9150610a6c602084016107a6565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060a0820160018060a01b0380891684526020888186015287604086015260a0606086015282875180855260c087019150828901945060005b81811015610af9578551851683529483019491830191600101610adb565b50508094505050505082151560808301529695505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102ed576102ed610b14565b600060018201610b4f57610b4f610b14565b5060010190565b60008351610b68818460208801610817565b6001600160f81b0319939093169190920190815260010192915050565b80820281158282048414176102ed576102ed610b14565b600082610bb957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610bd057600080fd5b61079f826107a6565b818103818111156102ed576102ed610b1456fea26469706673582212206f046cb41188f5b6f94b2155c9208247f2478e926eac01eb41a7dcdd4199689464736f6c634300081400336101006040526101f46080908152610bb860a05261271060c052606460e0526200002e90600090600462000043565b503480156200003c57600080fd5b50620000fa565b600183019183908215620000d15791602002820160005b838211156200009e57835183826101000a81548162ffffff021916908362ffffff16021790555092602001926003016020816002010492830192600103026200005a565b8015620000cf5782816101000a81549062ffffff02191690556003016020816002010492830192600103026200009e565b505b50620000df929150620000e3565b5090565b5b80821115620000df5760008155600101620000e4565b611298806200010a6000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638054b3c51161005b5780638054b3c514610122578063c90148ec14610146578063f124cf89146101a8578063f57ab16c146101bb57600080fd5b8063245c34d21461008d57806364d50d76146100b75780636b1b9b20146100da5780636f44dfa414610101575b600080fd5b6100a061009b366004610da9565b6101ce565b6040516100ae929190610e94565b60405180910390f35b6100ca6100c5366004610f06565b610656565b60405190151581526020016100ae565b6100ed6100e8366004610f47565b610672565b60405162ffffff90911681526020016100ae565b61011461010f366004610f60565b6106a1565b6040519081526020016100ae565b610135610130366004610f7d565b61071d565b6040516100ae959493929190610ffa565b610159610154366004610f7d565b6109df565b6040516100ae919081511515815260208083015115159082015260408083015162ffffff16908201526060808301516001600160a01b0316908201526080918201519181019190915260a00190565b6101146101b6366004610f60565b610ca8565b6100ed6101c9366004610f7d565b610d2f565b60608060006101de8860016110b7565b90508067ffffffffffffffff8111156101f9576101f96110ca565b6040519080825280601f01601f191660200182016040528015610223576020820181803683370190505b5092508067ffffffffffffffff81111561023f5761023f6110ca565b60405190808252806020026020018201604052801561027257816020015b606081526020019060019003908161025d5790505b509150600b60f81b8360008151811061028d5761028d6110e0565b60200101906001600160f81b031916908160001a905350604080516001600160a01b0388166020820152908101889052606001604051602081830303815290604052826000815181106102e2576102e26110e0565b602002602001018190525060005b888110156106495760006127108b8b8481811061030f5761030f6110e0565b905060400201602001358a61032491906110f6565b61032e919061110d565b9050600061035e878d8d86818110610348576103486110e0565b6101549260206040909202019081019150610f60565b90508060200151156104ca576000866103788560016110b7565b81518110610388576103886110e0565b60200101906001600160f81b031916908160001a9053506040518060e00160405280886001600160a01b031681526020018d8d868181106103cb576103cb6110e0565b6103e19260206040909202019081019150610f60565b6001600160a01b03168152602001826040015162ffffff1681526020018a6001600160a01b0316815260200183815260200161041d848b610d5c565b8152600060209182015260405161048e92910181516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c092830151169181019190915260e00190565b60408051601f19818403018152919052856104aa8560016110b7565b815181106104ba576104ba6110e0565b6020026020010181905250610634565b600160fb1b866104db8560016110b7565b815181106104eb576104eb6110e0565b60200101906001600160f81b031916908160001a9053506040805160028082526060820183526000926020830190803683370190505090508781600081518110610537576105376110e0565b60200260200101906001600160a01b031690816001600160a01b0316815250508c8c85818110610569576105696110e0565b61057f9260206040909202019081019150610f60565b81600181518110610592576105926110e0565b60200260200101906001600160a01b031690816001600160a01b0316815250506040518060a001604052808b6001600160a01b031681526020018481526020016105dc858c610d5c565b81526020808201849052600060409283015290516105fb92910161112f565b60408051601f19818403018152919052866106178660016110b7565b81518110610627576106276110e0565b6020026020010181905250505b5050808061064190611189565b9150506102f0565b5050965096945050505050565b60008061066385856109df565b60800151909211949350505050565b6000816004811061068257600080fd5b600a9182820401919006600302915054906101000a900462ffffff1681565b6000816001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106fd575060408051601f3d908101601f191682019092526106fa918101906111a2565b60015b61070957506000919050565b6001600160801b031692915050565b919050565b60408051600480825260a0820190925260609182918291600091829160208201608080368337505060408051600480825260a08201909252929750905060208201608080368337505060408051600480825260a0820190925292965090506020820160808036833701905050925060005b600481101561092e5760007333128a8fc17869897dce68ed026d694621f6fdfd631698ee828a8a8486600481106107c7576107c76110e0565b600a808204929092015460405160e087901b6001600160e01b03191681526001600160a01b039586166004820152939094166024840152066003026101000a90910462ffffff166044820152606401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085791906111cb565b90508087838151811061086c5761086c6110e0565b60200260200101906001600160a01b031690816001600160a01b0316815250506000826004811061089f5761089f6110e0565b600a91828204019190066003029054906101000a900462ffffff168683815181106108cc576108cc6110e0565b62ffffff909216602092830291909101909101526001600160a01b0381166108f55760006108fe565b6108fe816106a1565b858381518110610910576109106110e0565b6020908102919091010152508061092681611189565b91505061078e565b5060405163e6a4390560e01b81526001600160a01b03808916600483015287166024820152738909dc15e40173ff4699343b6eb8132c65e18ec69063e6a4390590604401602060405180830381865afa15801561098f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b391906111cb565b91506001600160a01b0382166109ca5760006109d3565b6109d382610ca8565b90509295509295909350565b6040805160a0808201835260008083526020808401829052838501829052606080850183905260808086018490528651948501875283855291840183905294830182905293820181905292810183905290915b6004811015610b8e5760007333128a8fc17869897dce68ed026d694621f6fdfd631698ee828787848660048110610a6b57610a6b6110e0565b600a808204929092015460405160e087901b6001600160e01b03191681526001600160a01b039586166004820152939094166024840152066003026101000a90910462ffffff166044820152606401602060405180830381865afa158015610ad7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afb91906111cb565b90506001600160a01b03811615610b7b576000610b17826106a1565b90508360800151811115610b79576001808552602085015260008360048110610b4257610b426110e0565b600a80820492909201549190066003026101000a900462ffffff1660408501526001600160a01b0382166060850152608084018190525b505b5080610b8681611189565b915050610a32565b5060405163e6a4390560e01b81526001600160a01b03808616600483015284166024820152600090738909dc15e40173ff4699343b6eb8132c65e18ec69063e6a4390590604401602060405180830381865afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1691906111cb565b90506001600160a01b03811615610c77576000610c3282610ca8565b905082608001516002610c4591906110f6565b811115610c75576001835260006020840181905260408401526001600160a01b0382166060840152608083018190525b505b8151610c9e5760018083526020830152610bb8604083015260006060830181905260808301525b5090505b92915050565b6000816001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa925050508015610d04575060408051601f3d908101601f19168201909252610d01918101906111ff565b60015b610d1057506000919050565b610d266001600160701b038084169085166110f6565b95945050505050565b600080610d3c84846109df565b90508060200151610d4e576000610d54565b80604001515b949350505050565b6000612710610d6b838261124f565b610d7590856110f6565b610d7f919061110d565b9392505050565b6001600160a01b0381168114610d9b57600080fd5b50565b803561071881610d86565b60008060008060008060a08789031215610dc257600080fd5b863567ffffffffffffffff80821115610dda57600080fd5b818901915089601f830112610dee57600080fd5b813581811115610dfd57600080fd5b8a60208260061b8501011115610e1257600080fd5b602092830198509650508701359350610e2d60408801610d9e565b925060608701359150610e4260808801610d9e565b90509295509295509295565b6000815180845260005b81811015610e7457602081850181015186830182015201610e58565b506000602082860101526020601f19601f83011685010191505092915050565b604081526000610ea76040830185610e4e565b6020838203818501528185518084528284019150828160051b85010183880160005b83811015610ef757601f19878403018552610ee5838351610e4e565b94860194925090850190600101610ec9565b50909998505050505050505050565b600080600060608486031215610f1b57600080fd5b8335610f2681610d86565b92506020840135610f3681610d86565b929592945050506040919091013590565b600060208284031215610f5957600080fd5b5035919050565b600060208284031215610f7257600080fd5b8135610d7f81610d86565b60008060408385031215610f9057600080fd5b8235610f9b81610d86565b91506020830135610fab81610d86565b809150509250929050565b600081518084526020808501945080840160005b83811015610fef5781516001600160a01b031687529582019590820190600101610fca565b509495945050505050565b60a08152600061100d60a0830188610fb6565b82810360208481019190915287518083528882019282019060005b8181101561104957845162ffffff1683529383019391830191600101611028565b50508481036040860152875180825290820192508188019060005b8181101561108057825185529383019391830191600101611064565b505050506001600160a01b0394909416606083015250608001529392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ca257610ca26110a1565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8082028115828204841417610ca257610ca26110a1565b60008261112a57634e487b7160e01b600052601260045260246000fd5b500490565b6020815260018060a01b03825116602082015260208201516040820152604082015160608201526000606083015160a0608084015261117160c0840182610fb6565b90506080840151151560a08401528091505092915050565b60006001820161119b5761119b6110a1565b5060010190565b6000602082840312156111b457600080fd5b81516001600160801b0381168114610d7f57600080fd5b6000602082840312156111dd57600080fd5b8151610d7f81610d86565b80516001600160701b038116811461071857600080fd5b60008060006060848603121561121457600080fd5b61121d846111e8565b925061122b602085016111e8565b9150604084015163ffffffff8116811461124457600080fd5b809150509250925092565b81810381811115610ca257610ca26110a156fea2646970667358221220aedec598ca489c32a0e14c70cbe7a210e38cc9a5296531e85db108a9cccce04264736f6c634300081400330000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad0000000000000000000000004200000000000000000000000000000000000006000000000000000000000000e33be189b01388d8224f4b1933e085868d7cb6db