0 txs
1.2k calls
constructor
constructor()
functions
_getPreferredPool
viewfunction _getPreferredPool(address tokenA, address tokenB, uint8 version) view returns (address)
estimate
viewfunction estimate(tuple[] _offers, uint256 _amount, uint256 _offeredTokenSwitchId) view returns (tuple result)
estimateOutput
viewfunction estimateOutput(address _inputToken, address _outputToken, uint256 _amount) view returns (uint256)
feeBase
viewfunction feeBase() view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
feeStep
viewfunction feeStep() view returns (uint256)
frictionless
viewfunction frictionless() view returns (address)
getFee
viewfunction getFee(address account) view returns (uint256)
getLatestPairedSwitchId
viewfunction getLatestPairedSwitchId(address _token, address _pairedToken) view returns (uint256)
getMerkleExecutor
viewfunction getMerkleExecutor() view returns (address)
getPendingDeleteSwitch
viewfunction getPendingDeleteSwitch(uint256 _switchId) view returns (address)
getPrivateSwitchFactory
viewfunction getPrivateSwitchFactory() view returns (address)
getTokenSwitches
viewfunction getTokenSwitches(address _token) view returns (uint256[])
getTokenToNextPairedSwitchIds
viewfunction getTokenToNextPairedSwitchIds(address _token, address _pairedToken) view returns (uint256[])
implementation
viewfunction implementation() view returns (address)
maxStep
viewfunction maxStep() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
privateSwitchFactory
viewfunction privateSwitchFactory() view returns (address)
switchData
viewfunction switchData(uint256) view returns (address poolAddress, address tokenAddress, address pairedAddress, uint8 version)
switches
viewfunction switches(uint256) view returns (address)
switchId
viewfunction switchId() view returns (uint256)
tokenPerStep
viewfunction tokenPerStep() view returns (uint256)
tokenSwitches
viewfunction tokenSwitches(address, uint256) view returns (uint256)
tokenToLatestPairedSwitchId
viewfunction tokenToLatestPairedSwitchId(address token, address pairedToken) view returns (uint256 latestSwitchId)
tokenToLatestSwitchId
viewfunction tokenToLatestSwitchId(address) view returns (uint256)
tokenToNative
viewfunction tokenToNative(uint256 amount, address token, uint8 version, bool inverse) view returns (uint256)
tokenToNextPairedSwitchIds
viewfunction tokenToNextPairedSwitchIds(address token, address pairedToken, uint256) view returns (uint256 nextSwitchIds)
tokenToToken
viewfunction tokenToToken(uint256 _amount, address _token, address _pool, uint8 version) view returns (uint256)
uniswapPoolFees
viewfunction uniswapPoolFees(uint256) view returns (uint24)
v2Factory
viewfunction v2Factory() view returns (address)
v3Factory
viewfunction v3Factory() view returns (address)
wrappedNative
viewfunction wrappedNative() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
cancelDeleteSwitch
nonpayablefunction cancelDeleteSwitch(uint256 _switchId)
createPrivateSwitch
nonpayablefunction createPrivateSwitch(address _tokenAddress, address _poolAddress, uint8 _version, bytes32 _merkleRoot, uint256 _premium, string _ipfsHash)
executeDeleteSwitch
nonpayablefunction executeDeleteSwitch(uint256 _switchId)
initialize
nonpayablefunction initialize(address _v2Factory, address _v3Factory, address _privateSwitchFactory, address _wrappedNative, address _frictionless, address _feeRecipient, address _owner, string _name)
proposeDeleteSwitch
nonpayablefunction proposeDeleteSwitch(uint256 _switchId)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateFee
nonpayablefunction updateFee(uint256 _feeBase, uint256 _feeStep, uint256 _feeMaxStep, uint256 _tokenPerStep)
updateName
nonpayablefunction updateName(string _name)
events
FeeUpdated
event FeeUpdated(uint256 feeBase, uint256 feeStep, uint256 feeMaxStep, uint256 tokenPerStep)
Initialized
event Initialized(uint64 version)
NameUpdated
event NameUpdated(string name, address controller)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PrivateControllerInitialized
event PrivateControllerInitialized(address v2Factory, address v3Factory, address privateSwitchFactory, address wrappedNative, address frictionless, address feeRecipient, address owner, string name)
PrivateSwitchCreated
event PrivateSwitchCreated(address controller, address privateSwitch, address token, address pool, uint8 version, uint256 premium, address owner, uint256 switchId, string ipfsHash)
SwitchDeleteCancelled
event SwitchDeleteCancelled(uint256 indexed switchId, address indexed switchAddress)
SwitchDeleted
event SwitchDeleted(uint256 indexed switchId, address indexed switchAddress)
SwitchDeleteProposed
event SwitchDeleteProposed(uint256 indexed switchId, address indexed switchAddress)
errors
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
creation bytecode
0x608060405234801562000010575f80fd5b506200001b62000021565b620000d5565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d25780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b614af080620000e35f395ff3fe608060405234801561000f575f80fd5b506004361061026b575f3560e01c8063881ec10b1161014b578063c0517c9a116100bf578063eb6d3a1111610084578063eb6d3a111461054c578063ecff14181461055f578063f2874b5b146105d9578063f2fde38b14610603578063f5b58d7014610616578063fb0aefc214610629575f80fd5b8063c0517c9a146104f5578063e30c397814610508578063e4fcbc0914610510578063e7f92e0f14610530578063ea9fae8014610539575f80fd5b80639b820a80116101105780639b820a801461048f578063aaa46ddf146104a2578063af90ee26146104aa578063b4b57c39146104bd578063b88c9148146104cf578063b9f7c3e3146104e2575f80fd5b8063881ec10b146104265780638da5cb5b1461044e5780638e8a6750146104565780639246798d1461047d57806395e911a814610486575f80fd5b80635f17669f116101e257806373086dfb116101a757806373086dfb146103b357806375852bfe146103c657806379ba5097146103e55780637c887c59146103ed578063819dc9fb1461040057806384da92a714610413575f80fd5b80635f17669f1461036157806363431cbd14610372578063669d6171146103855780636a8cbf5f14610398578063715018a6146103ab575f80fd5b8063469048401161023357806346904840146102eb5780634e389c57146102fe578063501d13d01461031357806351e8602d1461032657806354ad4a48146103395780635c60da1b14610359575f80fd5b806306fdde031461026f57806317a7191f1461028d5780631a18b926146102a45780631a8035fb146102cf5780633a1dd2f0146102d8575b5f80fd5b61027761063c565b6040516102849190613ce5565b60405180910390f35b610296600a5481565b604051908152602001610284565b6102b76102b2366004613cf7565b6106c8565b6040516001600160a01b039091168152602001610284565b610296600b5481565b6102966102e6366004613d22565b610702565b6010546102b7906001600160a01b031681565b61031161030c366004613cf7565b61072d565b005b610311610321366004613df7565b610c45565b610296610334366004613e79565b611467565b61034c610347366004613eb0565b611493565b6040516102849190613ecb565b6102b76114fc565b6002546001600160a01b03166102b7565b61034c610380366004613e79565b61159e565b610311610393366004613cf7565b611614565b6102966103a6366004613f0e565b6117f6565b61031161182c565b6002546102b7906001600160a01b031681565b6102966103d4366004613eb0565b60076020525f908152604090205481565b61031161183f565b6001546102b7906001600160a01b031681565b61031161040e366004613f4c565b611887565b610311610421366004614006565b611cbd565b6102b7610434366004613cf7565b60046020525f90815260409020546001600160a01b031681565b6102b7611d5f565b610469610464366004613cf7565b611d6d565b60405162ffffff9091168152602001610284565b61029660095481565b61029660085481565b600f546102b7906001600160a01b031681565b6102b7611d9b565b6103116104b8366004613cf7565b611e06565b5f546102b7906001600160a01b031681565b6102966104dd366004613eb0565b611fe6565b6102966104f0366004613f0e565b61209d565b6102b7610503366004614038565b61228e565b6102b76124be565b61052361051e366004614080565b6124f2565b604051610284919061418f565b610296600c5481565b610311610547366004614239565b612bf7565b600e546102b7906001600160a01b031681565b6105a661056d366004613cf7565b60056020525f90815260409020805460018201546002909201546001600160a01b0391821692821691811690600160a01b900460ff1684565b604080516001600160a01b0395861681529385166020850152919093169082015260ff9091166060820152608001610284565b6102966105e7366004613e79565b601260209081525f928352604080842090915290825290205481565b610311610611366004613eb0565b612dde565b610296610624366004614275565b612e63565b6102966106373660046142c5565b612e92565b601180546106499061430a565b80601f01602080910402602001604051908101604052809291908181526020018280546106759061430a565b80156106c05780601f10610697576101008083540402835291602001916106c0565b820191905f5260205f20905b8154815290600101906020018083116106a357829003601f168201915b505050505081565b5f818152600460209081526040808320546001600160a01b031680845260069092528220548390036106fa5792915050565b505f92915050565b6003602052815f5260405f20818154811061071b575f80fd5b905f5260205f20015f91509150505481565b805f8111801561073e5750600c5481105b6107635760405162461bcd60e51b815260040161075a90614342565b60405180910390fd5b60025f9054906101000a90046001600160a01b03166001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d79190614386565b6001600160a01b0316336001600160a01b0316148061080e57506107f9611d5f565b6001600160a01b0316336001600160a01b0316145b61082a5760405162461bcd60e51b815260040161075a906143a1565b5f828152600460205260409020546001600160a01b03168061085e5760405162461bcd60e51b815260040161075a906143e2565b6001600160a01b0381165f9081526006602052604090205483146108945760405162461bcd60e51b815260040161075a90614425565b5f83815260056020908152604091829020825160808101845281546001600160a01b039081168252600183015481169382019390935260029182015480841682860152600160a01b900460ff16606082015290549251637506cdd560e11b815284831660048201526024810187905290929091169063ea0d9baa906044015f604051808303815f87803b158015610929575f80fd5b505af115801561093b573d5f803e3d5ffd5b505050506020818101516001600160a01b03165f90815260079091526040902054849003610a96576020808201516001600160a01b03165f908152600390915260408120905b8154811015610a22578582828154811061099d5761099d614469565b905f5260205f20015403610a1a57815482906109bb90600190614491565b815481106109cb576109cb614469565b905f5260205f2001548282815481106109e6576109e6614469565b905f5260205f20018190555081805480610a0257610a026144a4565b600190038181905f5260205f20015f90559055610a22565b600101610981565b50805415610a765780548190610a3a90600190614491565b81548110610a4a57610a4a614469565b5f918252602080832090910154848201516001600160a01b031683526007909152604090912055610a94565b6020808301516001600160a01b03165f908152600790915260408120555b505b6020808201516001600160a01b039081165f90815260128352604080822081860151909316825291909252902054849003610bb3576020808201516001600160a01b039081165f908152601383526040808220818601519093168252919092529020805415610b825780545f908290610b1190600190614491565b81548110610b2157610b21614469565b905f5260205f200154905081805480610b3c57610b3c6144a4565b5f828152602080822083015f19908101839055909201909255848101516001600160a01b0390811683526012825260408084208188015190921684529152902055610bb1565b6020808301516001600160a01b039081165f908152601283526040808220818701519093168252919092528120555b505b5f84815260046020908152604080832080546001600160a01b03199081169091556005835281842080548216815560018101805490921690915560020180546001600160a81b03191690556001600160a01b038516808452600690925280832083905551909186917f4ed704e4fb6148f11ac645fb80db1ef45247fc13ecd496a1df166cd25991334e9190a350505050565b856001600160a01b038116610c6c5760405162461bcd60e51b815260040161075a906144b8565b856001600160a01b038116610c935760405162461bcd60e51b815260040161075a906144b8565b60025f9054906101000a90046001600160a01b03166001600160a01b03166339d01c696040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ce3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d079190614386565b6001600160a01b0316336001600160a01b031614610d675760405162461bcd60e51b815260206004820152601f60248201527f50726976617465436f6e74726f6c6c65723a204e6f74206578656375746f7200604482015260640161075a565b600c545f908152600460205260409020546001600160a01b031615610ddf5760405162461bcd60e51b815260206004820152602860248201527f50726976617465436f6e74726f6c6c65723a2053776974636820616c72656164604482015267792065786973747360c01b606482015260840161075a565b600e546001600160a01b0390811690891603610e475760405162461bcd60e51b815260206004820152602160248201527f50726976617465436f6e74726f6c6c65723a2057726170706564206e617469766044820152606560f81b606482015260840161075a565b5f610e50611d5f565b9050610e5b81612ef5565b604080516060810182525f80825260208201819052918101919091528760ff16600303610f68575f899050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee69190614386565b6001600160a01b0390811683526040805163d21220a760e01b815290519183169163d21220a7916004808201926020929091908290030181865afa158015610f30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f549190614386565b6001600160a01b0316602083015250611006565b8760ff16600203610fb3575f899050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec2573d5f803e3d5ffd5b60405162461bcd60e51b815260206004820152602260248201527f50726976617465436f6e74726f6c6c65723a20496e76616c696420766572736960448201526137b760f11b606482015260840161075a565b80516001600160a01b038b811691161480611036575080602001516001600160a01b03168a6001600160a01b0316145b6110825760405162461bcd60e51b815260206004820152601e60248201527f50726976617465436f6e74726f6c6c65723a204e6f7420696e20706f6f6c0000604482015260640161075a565b80516001600160a01b038b811691161461109d5780516110a3565b80602001515b6001600160a01b039081166040808401829052600254600e549151630797e56d60e31b815230600482015291841660248301528c841660448301528d84166064830152608482019290925260ff8b1660a482015260c481018a905260e48101899052911690633cbf2b6890610104015f604051808303815f87803b158015611129575f80fd5b505af115801561113b573d5f803e3d5ffd5b505050505f60025f9054906101000a90046001600160a01b03166001600160a01b031663736721926040518163ffffffff1660e01b8152600401602060405180830381865afa158015611190573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b49190614386565b6001600160a01b03808d165f908152601260209081526040808320878201519094168352929052908120549192500361121857600c546001600160a01b03808d165f9081526012602090815260408083208782015190941683529290522055611257565b6001600160a01b03808c165f908152601360209081526040808320868201519094168352928152918120600c5481546001810183559183529290912001555b8060045f600c5481526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060405180608001604052808b6001600160a01b031681526020018c6001600160a01b0316815260200183604001516001600160a01b031681526020018a60ff1681525060055f600c5481526020019081526020015f205f820151815f015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506020820151816001015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506040820151816002015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160020160146101000a81548160ff021916908360ff16021790555090505060035f8c6001600160a01b03166001600160a01b031681526020019081526020015f20600c54908060018154018082558091505060019003905f5260205f20015f9091909190915055600c5460075f8d6001600160a01b03166001600160a01b031681526020019081526020015f20819055507fc2718e65ee0b421a176f587e4594efb238b89d3dbaea3482fe850f043b7b9c9530828d8d8d8c89600c548e60405161143e999897969594939291906144ef565b60405180910390a1600c8054905f6114558361455b565b91905055505050505050505050505050565b6001600160a01b038083165f908152601260209081526040808320938516835292905220545b92915050565b6001600160a01b0381165f908152600360209081526040918290208054835181840281018401909452808452606093928301828280156114f057602002820191905f5260205f20905b8154815260200190600101908083116114dc575b50505050509050919050565b5f8061152960017fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d51614491565b5f1b90505f815490505f819050806001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611572573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115969190614386565b935050505090565b6001600160a01b038083165f90815260136020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561160757602002820191905f5260205f20905b8154815260200190600101908083116115f3575b5050505050905092915050565b805f811180156116255750600c5481105b6116415760405162461bcd60e51b815260040161075a90614342565b60025f9054906101000a90046001600160a01b03166001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611691573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116b59190614386565b6001600160a01b0316336001600160a01b0316146116e55760405162461bcd60e51b815260040161075a906143a1565b5f828152600460205260409020546001600160a01b0316806117195760405162461bcd60e51b815260040161075a906143e2565b6001600160a01b0381165f90815260066020526040902054831461174f5760405162461bcd60e51b815260040161075a90614425565b60025460405163026da92f60e11b81526001600160a01b03838116600483015260248201869052909116906304db525e906044015f604051808303815f87803b15801561179a575f80fd5b505af11580156117ac573d5f803e3d5ffd5b505050506001600160a01b0381165f818152600660205260408082208290555185917ff27fb1d6e94d05ebdcbe0ba3bc4c1aad58daaa91e5bd16ef774a156459eb46bd91a3505050565b6013602052825f5260405f20602052815f5260405f208181548110611819575f80fd5b905f5260205f20015f9250925050505481565b61183461313c565b61183d5f61316e565b565b33806118496124be565b6001600160a01b03161461187b5760405163118cdaa760e01b81526001600160a01b038216600482015260240161075a565b6118848161316e565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156118cc5750825b90505f8267ffffffffffffffff1660011480156118e85750303b155b9050811580156118f6575080155b156119145760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561193e57845460ff60401b1916600160401b1785555b611947876131aa565b6001600160a01b038d1661196d5760405162461bcd60e51b815260040161075a906144b8565b6001600160a01b038c166119935760405162461bcd60e51b815260040161075a906144b8565b6001600160a01b038b166119b95760405162461bcd60e51b815260040161075a906144b8565b6001600160a01b038a166119df5760405162461bcd60e51b815260040161075a906144b8565b6001600160a01b038916611a055760405162461bcd60e51b815260040161075a906144b8565b6001600160a01b038816611a2b5760405162461bcd60e51b815260040161075a906144b8565b6001600160a01b038716611a515760405162461bcd60e51b815260040161075a906144b8565b8c5f806101000a8154816001600160a01b0302191690836001600160a01b031602179055508b60015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555089600e5f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555088600f5f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508760105f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508560119081611b1d91906145bf565b506001600c5561271060088190556101f460098190556005600a55620186a0600b5560408051608081018252606481526020810192909252610bb8908201526060810191909152611b7290600d906004613bd9565b50600f5f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be7919061467f565b611bf290600a61477a565b600b5f828254611c029190614788565b9091555050600280546001600160a01b0319166001600160a01b038d161790556040517f7549bc22d1f6e5b80878f2b7e56c5cf6e33bef593bd9a28b9c10489db201d60290611c60908f908f908f908f908f908f908f908f9061479f565b60405180910390a18315611cae57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050505050565b611cc561313c565b5f815111611d155760405162461bcd60e51b815260206004820152601f60248201527f50726976617465436f6e74726f6c6c65723a20496e76616c6964206e616d6500604482015260640161075a565b6011611d2182826145bf565b507f20e318a79d6993b8f81a843a23667dc1d069920c1f36e62a36d3979a129469d2601130604051611d54929190614802565b60405180910390a150565b5f611d686131bb565b905090565b600d8160048110611d7c575f80fd5b600a9182820401919006600302915054906101000a900462ffffff1681565b600254604080516339d01c6960e01b815290515f926001600160a01b0316916339d01c699160048083019260209291908290030181865afa158015611de2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d689190614386565b805f81118015611e175750600c5481105b611e335760405162461bcd60e51b815260040161075a90614342565b60025f9054906101000a90046001600160a01b03166001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ea79190614386565b6001600160a01b0316336001600160a01b03161480611ede5750611ec9611d5f565b6001600160a01b0316336001600160a01b0316145b611efa5760405162461bcd60e51b815260040161075a906143a1565b5f828152600460205260409020546001600160a01b0316611f2d5760405162461bcd60e51b815260040161075a906143e2565b5f82815260046020819052604091829020546002549251633754d17360e01b81526001600160a01b039182169281018390526024810186905291921690633754d173906044015f604051808303815f87803b158015611f8a575f80fd5b505af1158015611f9c573d5f803e3d5ffd5b505050506001600160a01b0381165f818152600660205260408082208690555185917fea9fbba7ece4fb464ca5517327f884d830497cf34527b65147d5f0ea879c223e91a3505050565b600f546040516370a0823160e01b81526001600160a01b0383811660048301525f9283929116906370a0823190602401602060405180830381865afa158015612031573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612055919061489a565b90505f600b548261206691906148b1565b9050600954600a54821161207a578161207e565b600a545b6120889190614788565b6008546120959190614491565b949350505050565b600e545f9081906001600160a01b0390811690861603612102576001600160a01b0384165f908152600760209081526040808320548084526005909252909120600201546120fa9085908790600160a01b900460ff166001612e63565b915050612284565b600e546001600160a01b039081169085160361215b576001600160a01b0385165f90815260076020908152604080832054808452600590925282206002015490916120fa9186918991600160a01b900460ff1690612e63565b6001600160a01b038086165f90815260076020908152604080832054888516845281842054818552600580855283862084516080808201875282548a1682526001808401548b16838a0152600293840154808c16848a0190815260ff600160a01b928390048116606080880191909152898e52978c528a8d208b519586018c5280548f168652938401548e169b85019b909b529190940154808c169883018990529390930490971692870192909252519296919590949390928392160361224b5761222f898c865f01518760600151612e92565b9150612244898b855f01518660600151612e92565b9050612270565b61225b898c86606001515f612e63565b915061226d898b85606001515f612e63565b90505b61227b828a836131e3565b96505050505050505b90505b9392505050565b5f805f8360ff1660030361240e575f5b6004811015612408576001545f906001600160a01b0316631698ee828989600d86600481106122cf576122cf614469565b600a808204929092015460405160e087901b6001600160e01b03191681526001600160a01b039586166004820152939094166024840152066003026101000a90910462ffffff166044820152606401602060405180830381865afa158015612339573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061235d9190614386565b90506001600160a01b0381166123735750612400565b5f816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156123b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d491906148e6565b505050505050905084816001600160a01b031611156123fd57806001600160a01b031694508193505b50505b60010161229e565b5061248f565b8360ff16600203610fb3575f5460405163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529091169063e6a4390590604401602060405180830381865afa158015612468573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248c9190614386565b90505b6001600160a01b0381166124b55760405162461bcd60e51b815260040161075a90614979565b95945050505050565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005b546001600160a01b031692915050565b61251660405180606001604052806060815260200160608152602001606081525090565b815f811180156125275750600c5481105b6125435760405162461bcd60e51b815260040161075a90614342565b5f841161259c5760405162461bcd60e51b815260206004820152602160248201527f50726976617465436f6e74726f6c6c65723a20496e76616c696420616d6f756e6044820152601d60fa1b606482015260840161075a565b8467ffffffffffffffff8111156125b5576125b5613d5a565b60405190808252806020026020018201604052801561261357816020015b6126006040518060a001604052805f81526020015f81526020015f81526020015f81526020015f81525090565b8152602001906001900390816125d35790505b5082528467ffffffffffffffff81111561262f5761262f613d5a565b604051908082528060200260200182016040528015612658578160200160208202803683370190505b5060208301528467ffffffffffffffff81111561267757612677613d5a565b6040519080825280602002602001820160405280156126aa57816020015b60608152602001906001900390816126955790505b5060408301526126b8613c70565b5f805f5b888110156128f5578989828181106126d6576126d6614469565b6101000291909101351590506128ed57805f036127c85761274c8a8a8381811061270257612702614469565b9050610100020160c001602081019061271b9190613eb0565b8b8b8481811061272d5761272d614469565b9050610100020160800160208101906127469190613eb0565b8a61209d565b925089898281811061276057612760614469565b9050610100020160800160208101906127799190613eb0565b6001600160a01b0316845289898281811061279657612796614469565b9050610100020160c00160208101906127af9190613eb0565b6001600160a01b0316602085015282156128f5576128c2565b83516001600160a01b03168a8a838181106127e5576127e5614469565b9050610100020160800160208101906127fe9190613eb0565b6001600160a01b0316141580612854575060208401516001600160a01b03168a8a8381811061282f5761282f614469565b9050610100020160c00160208101906128489190613eb0565b6001600160a01b031614155b156128c25760018660200151828151811061287157612871614469565b602002602001019015159081151581525050604051806060016040528060258152602001614a9660259139866040015182815181106128b2576128b2614469565b60200260200101819052506128ed565b8989828181106128d4576128d4614469565b9050610100020160600135826128ea91906149bd565b91505b6001016126bc565b505f5b88811015612bea5789898281811061291257612912614469565b610100029190910135159050612be2575f61294a898c8c8581811061293957612939614469565b9050610100020160600135856131e3565b90505f612974858d8d8681811061296357612963614469565b9050610100020160600135866131e3565b90505f808d8d8681811061298a5761298a614469565b90506101000201606001351115612a4a575f8a8152600460205260409020546001600160a01b0316806129cf5760405162461bcd60e51b815260040161075a906143e2565b5f816001600160a01b031663e0a73a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a30919061489a565b90508015612a4757612a44848260646131e3565b92505b50505b8c8c85818110612a5c57612a5c614469565b90506101000201606001358183612a7391906149bd565b1115612b4757600189602001518581518110612a9157612a91614469565b6020026020010190151590811515815250506040518060600160405280603e8152602001614a58603e913989604001518581518110612ad257612ad2614469565b60200260200101819052506040518060a001604052808e8e87818110612afa57612afa614469565b905061010002015f013581526020018381526020018281526020015f815260200184815250895f01518581518110612b3457612b34614469565b6020026020010181905250505050612be2565b5f612b5282846149bd565b8e8e87818110612b6457612b64614469565b9050610100020160600135612b799190614491565b90506040518060a001604052808f8f88818110612b9857612b98614469565b905061010002015f01358152602001848152602001838152602001828152602001858152508a5f01518681518110612bd257612bd2614469565b6020026020010181905250505050505b6001016128f8565b5050505050949350505050565b612bff61313c565b61c3508410612c5c5760405162461bcd60e51b8152602060048201526024808201527f50726976617465436f6e74726f6c6c65723a20466565206261736520746f6f206044820152630d0d2ced60e31b606482015260840161075a565b6113888310612cb95760405162461bcd60e51b8152602060048201526024808201527f50726976617465436f6e74726f6c6c65723a20466565207374657020746f6f206044820152630d0d2ced60e31b606482015260840161075a565b6103e88210612d1b5760405162461bcd60e51b815260206004820152602860248201527f50726976617465436f6e74726f6c6c65723a20466565206d61782073746570206044820152670e8dede40d0d2ced60c31b606482015260840161075a565b5f8111612d7c5760405162461bcd60e51b815260206004820152602960248201527f50726976617465436f6e74726f6c6c65723a20546f6b656e20706572207374656044820152687020746f6f206c6f7760b81b606482015260840161075a565b60088490556009839055600a829055600b8190556040805185815260208101859052908101839052606081018290527f11f73e6ea9521ac661f2df2bf3792867813fc17691063fbc7e4123bc9762881b9060800160405180910390a150505050565b612de661313c565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b0383169081178255612e2a611d5f565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f80612e6e8561328d565b9050612e888684612e7f5786612e81565b5f5b838761341b565b9695505050505050565b6040805160018082528183019092525f918291906020808301908036833701905050905083815f81518110612ec957612ec9614469565b60200260200101906001600160a01b031690816001600160a01b031681525050612e888686838661341b565b6002600c54111561188457600f546002546040805163cf80b77b60e01b815290516001600160a01b03938416935f93169163cf80b77b9160048083019260209291908290030181865afa158015612f4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f72919061489a565b6040516370a0823160e01b81526001600160a01b03858116600483015291925082918416906370a0823190602401602060405180830381865afa158015612fbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fdf919061489a565b101561303d5760405162461bcd60e51b815260206004820152602760248201527f50726976617465436f6e74726f6c6c65723a20496e73756666696369656e742060448201526662616c616e636560c81b606482015260840161075a565b816001600160a01b03166323b872dd8460025f9054906101000a90046001600160a01b03166001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa15801561309d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130c19190614386565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018490526064016020604051808303815f875af1158015613112573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061313691906149d0565b50505050565b33613145611d5f565b6001600160a01b03161461183d5760405163118cdaa760e01b815233600482015260240161075a565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b03191681556131a682613a3e565b5050565b6131b2613aae565b61188481613af7565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993006124e2565b5f80805f19858709858702925082811083820303915050805f03613217575f841161320c575f80fd5b508290049050612287565b808411613222575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60605f61329983611493565b90505f8151116132bb5760405162461bcd60e51b815260040161075a906143e2565b5f60055f835f815181106132d1576132d1614469565b60209081029190910181015182528181019290925260409081015f908120825160808101845281546001600160a01b039081168252600183015481168287015260029283015490811682860152600160a01b900460ff166060808301919091528451838152908101855290955091939192909183019080368337019050509050815f0151815f8151811061336757613367614469565b6001600160a01b039283166020918202929092010152600e5460408401518216911614612095575f6133b68360400151600e5f9054906101000a90046001600160a01b0316856060015161228e565b90506001600160a01b0381166133de5760405162461bcd60e51b815260040161075a90614979565b80826001815181106133f2576133f2614469565b60200260200101906001600160a01b031690816001600160a01b03168152505050949350505050565b5f6001600160a01b0384161581808083613435575f613438565b86515b90505b83613449578651811061344d565b5f81115b15613a315761345a613c70565b5f8886613467575f61346a565b60015b6134779060ff1685614491565b8151811061348757613487614469565b602002602001015190505f6001600160a01b0316816001600160a01b0316036134b1575050613a08565b8760ff16600303613730575f819050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135209190614386565b6001600160a01b0390811684526040805163d21220a760e01b815290519183169163d21220a7916004808201926020929091908290030181865afa15801561356a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061358e9190614386565b6001600160a01b03908116602085015260408051633850c7bd60e01b815290515f92841691633850c7bd9160048083019260e09291908290030181865afa1580156135db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135ff91906148e6565b5094955050506001600160a01b03891692506136a691505057876136465783516001600160a01b038d811691161461363e57835f5b6020020151613668565b836001613634565b8351600e546001600160a01b0391821691161461366557836001613634565b83515b955087613675578b61369f565b8351600e546001600160a01b0391821691161461369957835f5b602002015161369f565b60208401515b96506136f3565b87156136ca5783518796506001600160a01b0380881691161461369957835f61368f565b835195965086956001600160a01b038088169116146136ea5783516136f0565b60208401515b95505b613727818e8a6137125786516001600160a01b038a8116911614613b28565b86516001600160a01b038b8116911614613b28565b9c505050613a05565b8760ff16600203610fb3575f819050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561377b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061379f9190614386565b6001600160a01b0390811684526040805163d21220a760e01b815290519183169163d21220a7916004808201926020929091908290030181865afa1580156137e9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061380d9190614386565b83600160200201906001600160a01b031690816001600160a01b0316815250505f80826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561386b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061388f9190614a01565b5090925090506001600160a01b03871661393157886138d15784516001600160a01b038e81169116146138c957845f5b60200201516138f3565b8460016138bf565b8451600e546001600160a01b039182169116146138f0578460016138bf565b84515b965088613900578c61392a565b8451600e546001600160a01b0391821691161461392457845f5b602002015161392a565b60208501515b975061397e565b88156139555784518897506001600160a01b0380891691161461392457845f61391a565b845196975087966001600160a01b0380891691161461397557845161397b565b60208501515b96505b84516001600160a01b038981169116148015613998575088155b806139b8575084516001600160a01b038981169116148015906139b85750885b156139e1576139da816001600160701b03168f846001600160701b03166131e3565b9d50613a01565b6139fe826001600160701b03168f836001600160701b03166131e3565b9d505b5050505b50505b83613a1e5780613a178161455b565b9150613a2b565b80613a2881614a42565b91505b5061343b565b5096979650505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661183d57604051631afcd79f60e31b815260040160405180910390fd5b613aff613aae565b6001600160a01b03811661187b57604051631e4fbdf760e01b81525f600482015260240161075a565b6fffffffffffffffffffffffffffffffff918216915f906001600160a01b03851611613b95575f613b626001600160a01b03861680614788565b90508215613b7e57613b79600160c01b85836131e3565b613b8d565b613b8d8185600160c01b6131e3565b915050612287565b5f613bae6001600160a01b03861680600160401b6131e3565b90508215613bca57613bc5600160801b85836131e3565b6124b5565b6124b58185600160801b6131e3565b600183019183908215613c60579160200282015f5b83821115613c2f57835183826101000a81548162ffffff021916908361ffff1602179055509260200192600301602081600201049283019260010302613bee565b8015613c5e5782816101000a81549062ffffff0219169055600301602081600201049283019260010302613c2f565b505b50613c6c929150613c8e565b5090565b60405180604001604052806002906020820280368337509192915050565b5b80821115613c6c575f8155600101613c8f565b5f81518084525f5b81811015613cc657602081850181015186830182015201613caa565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6122876020830184613ca2565b5f60208284031215613d07575f80fd5b5035919050565b6001600160a01b0381168114611884575f80fd5b5f8060408385031215613d33575f80fd5b8235613d3e81613d0e565b946020939093013593505050565b60ff81168114611884575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112613d7d575f80fd5b813567ffffffffffffffff80821115613d9857613d98613d5a565b604051601f8301601f19908116603f01168101908282118183101715613dc057613dc0613d5a565b81604052838152866020858801011115613dd8575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f805f8060c08789031215613e0c575f80fd5b8635613e1781613d0e565b95506020870135613e2781613d0e565b94506040870135613e3781613d4c565b9350606087013592506080870135915060a087013567ffffffffffffffff811115613e60575f80fd5b613e6c89828a01613d6e565b9150509295509295509295565b5f8060408385031215613e8a575f80fd5b8235613e9581613d0e565b91506020830135613ea581613d0e565b809150509250929050565b5f60208284031215613ec0575f80fd5b813561228781613d0e565b602080825282518282018190525f9190848201906040850190845b81811015613f0257835183529284019291840191600101613ee6565b50909695505050505050565b5f805f60608486031215613f20575f80fd5b8335613f2b81613d0e565b92506020840135613f3b81613d0e565b929592945050506040919091013590565b5f805f805f805f80610100898b031215613f64575f80fd5b8835613f6f81613d0e565b97506020890135613f7f81613d0e565b96506040890135613f8f81613d0e565b95506060890135613f9f81613d0e565b94506080890135613faf81613d0e565b935060a0890135613fbf81613d0e565b925060c0890135613fcf81613d0e565b915060e089013567ffffffffffffffff811115613fea575f80fd5b613ff68b828c01613d6e565b9150509295985092959890939650565b5f60208284031215614016575f80fd5b813567ffffffffffffffff81111561402c575f80fd5b61209584828501613d6e565b5f805f6060848603121561404a575f80fd5b833561405581613d0e565b9250602084013561406581613d0e565b9150604084013561407581613d4c565b809150509250925092565b5f805f8060608587031215614093575f80fd5b843567ffffffffffffffff808211156140aa575f80fd5b818701915087601f8301126140bd575f80fd5b8135818111156140cb575f80fd5b8860208260081b85010111156140df575f80fd5b6020928301999098509187013596604001359550909350505050565b5f815180845260208085019450602084015f5b8381101561412c57815115158752958201959082019060010161410e565b509495945050505050565b5f8282518085526020808601955060208260051b840101602086015f5b8481101561418257601f19868403018952614170838351613ca2565b98840198925090830190600101614154565b5090979650505050505050565b5f6020808352608080840185516060808588015282825180855260a0945060a08901915086840193505f5b818110156141f95784518051845288810151898501526040808201519085015284810151858501528701518784015293870193918501916001016141ba565b5050858901519550601f1994508488820301604089015261421a81876140fb565b955050505050604085015181858403016060860152612e888382614137565b5f805f806080858703121561424c575f80fd5b5050823594602084013594506040840135936060013592509050565b8015158114611884575f80fd5b5f805f8060808587031215614288575f80fd5b84359350602085013561429a81613d0e565b925060408501356142aa81613d4c565b915060608501356142ba81614268565b939692955090935050565b5f805f80608085870312156142d8575f80fd5b8435935060208501356142ea81613d0e565b925060408501356142fa81613d0e565b915060608501356142ba81613d4c565b600181811c9082168061431e57607f821691505b60208210810361433c57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526024908201527f50726976617465436f6e74726f6c6c65723a20496e76616c69642073776974636040820152631a08125160e21b606082015260800190565b5f60208284031215614396575f80fd5b815161228781613d0e565b60208082526021908201527f50726976617465436f6e74726f6c6c65723a204e6f7420617574686f72697a656040820152601960fa1b606082015260800190565b60208082526023908201527f50726976617465436f6e74726f6c6c65723a20537769746368206e6f7420666f6040820152621d5b9960ea1b606082015260800190565b60208082526024908201527f50726976617465436f6e74726f6c6c65723a204e6f2070656e64696e672064656040820152636c65746560e01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8181038181111561148d5761148d61447d565b634e487b7160e01b5f52603160045260245ffd5b6020808252601f908201527f50726976617465436f6e74726f6c6c65723a2041646472657373205a65726f00604082015260600190565b6001600160a01b038a8116825289811660208301528881166040830152878116606083015260ff8716608083015260a08201869052841660c082015260e0810183905261012061010082018190525f9061454b83820185613ca2565b9c9b505050505050505050505050565b5f6001820161456c5761456c61447d565b5060010190565b601f8211156145ba57805f5260205f20601f840160051c810160208510156145985750805b601f840160051c820191505b818110156145b7575f81556001016145a4565b50505b505050565b815167ffffffffffffffff8111156145d9576145d9613d5a565b6145ed816145e7845461430a565b84614573565b602080601f831160018114614620575f84156146095750858301515b5f19600386901b1c1916600185901b178555614677565b5f85815260208120601f198616915b8281101561464e5788860151825594840194600190910190840161462f565b508582101561466b57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f6020828403121561468f575f80fd5b815161228781613d4c565b600181815b808511156146d457815f19048211156146ba576146ba61447d565b808516156146c757918102915b93841c939080029061469f565b509250929050565b5f826146ea5750600161148d565b816146f657505f61148d565b816001811461470c576002811461471657614732565b600191505061148d565b60ff8411156147275761472761447d565b50506001821b61148d565b5060208310610133831016604e8410600b8410161715614755575081810a61148d565b61475f838361469a565b805f19048211156147725761477261447d565b029392505050565b5f61228760ff8416836146dc565b808202811582820484141761148d5761148d61447d565b6001600160a01b038981168252888116602083015287811660408301528681166060830152858116608083015284811660a0830152831660c082015261010060e082018190525f906147f383820185613ca2565b9b9a5050505050505050505050565b604081525f8084546148138161430a565b806040860152606060018084165f811461483457600181146148505761487f565b60ff1985166060890152606084151560051b890101955061487f565b895f526020805f205f5b868110156148755781548b820187015290840190820161485a565b8a01606001975050505b505050506001600160a01b0385166020850152509050612287565b5f602082840312156148aa575f80fd5b5051919050565b5f826148cb57634e487b7160e01b5f52601260045260245ffd5b500490565b805161ffff811681146148e1575f80fd5b919050565b5f805f805f805f60e0888a0312156148fc575f80fd5b875161490781613d0e565b8097505060208801518060020b811461491e575f80fd5b955061492c604089016148d0565b945061493a606089016148d0565b9350614948608089016148d0565b925060a088015161495881613d4c565b60c089015190925061496981614268565b8091505092959891949750929550565b60208082526024908201527f50726976617465436f6e74726f6c6c65723a204e6f20707265666572726564206040820152631c1bdbdb60e21b606082015260800190565b8082018082111561148d5761148d61447d565b5f602082840312156149e0575f80fd5b815161228781614268565b80516001600160701b03811681146148e1575f80fd5b5f805f60608486031215614a13575f80fd5b614a1c846149eb565b9250614a2a602085016149eb565b9150604084015163ffffffff81168114614075575f80fd5b5f81614a5057614a5061447d565b505f19019056fe50726976617465436f6e74726f6c6c65723a20436f6e747269627574696f6e20657863656564732072656d61696e696e67206f6666657220616d6f756e7450726976617465436f6e74726f6c6c65723a20496e76616c69642074726164652070616972a26469706673582212208085dc0ba4f1f1d880db16cc2a7312f1286101b0f49a1ebe0842aea34922524f64736f6c63430008170033