0 txs
14 calls
constructor
constructor()
functions
getImplementationByVersion
viewfunction getImplementationByVersion(uint64 version) view returns (address)
isBlocked
viewfunction isBlocked(uint64 version) view returns (bool)
isMigratable
viewfunction isMigratable(uint64 fromVersion, uint64 toVersion) view returns (bool)
isRegisteredVault
viewfunction isRegisteredVault(address vault) view returns (bool)
lastVersion
viewfunction lastVersion() view returns (uint64)
owner
viewfunction owner() view returns (address)
predictVaultAddress
viewfunction predictVaultAddress(uint64 version, address ownerAddr, bytes data, bytes32 salt) view returns (address)
predictVaultAddress
viewfunction predictVaultAddress(uint64 version, address ownerAddr, bytes data) view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
approveImplementation
nonpayablefunction approveImplementation(address implementation)
batchUpgrade
nonpayablefunction batchUpgrade(address[] vaultAddresses, uint64 newVersion, bytes[] data)
blockImplementation
nonpayablefunction blockImplementation(uint64 version)
create
nonpayablefunction create(uint64 version, address ownerAddr, bytes data, bytes32 salt) returns (address)
create
nonpayablefunction create(uint64 version, address ownerAddr, bytes data) returns (address)
initialize
nonpayablefunction initialize(address owner_)
registerVault
nonpayablefunction registerVault(address vault)
renounceOwnership
nonpayablefunction renounceOwnership()
setMigratable
nonpayablefunction setMigratable(uint64 fromVersion, uint64 toVersion)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgrade
nonpayablefunction upgrade(address vault, uint64 newVersion, bytes data)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
ApprovedImplementation
event ApprovedImplementation(address indexed implementation)
Blocked
event Blocked(uint64 indexed version)
Deployed
event Deployed(address indexed vault, uint64 indexed version, address indexed owner)
Initialized
event Initialized(uint64 version)
Migratable
event Migratable(uint64 indexed fromVersion, uint64 indexed toVersion)
Migrated
event Migrated(address indexed vault, uint64 newVersion)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Upgraded
event Upgraded(address indexed implementation)
VaultRegistered
event VaultRegistered(address indexed vault)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyApproved
error AlreadyApproved()
AlreadyBlocked
error AlreadyBlocked()
CanNotMigrate
error CanNotMigrate()
Create2EmptyBytecode
error Create2EmptyBytecode()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
FailedDeployment
error FailedDeployment()
ImplementationBlocked
error ImplementationBlocked()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidDataLength
error InvalidDataLength()
InvalidFactoryOwner
error InvalidFactoryOwner()
InvalidImplementation
error InvalidImplementation()
InvalidInitialization
error InvalidInitialization()
InvalidVaultAddress
error InvalidVaultAddress()
InvalidVersion
error InvalidVersion()
NotInitializing
error NotInitializing()
NotOwner
error NotOwner()
NotRegisteredVault
error NotRegisteredVault()
OldVersion
error OldVersion()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
VaultAlreadyRegistered
error VaultAlreadyRegistered()
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516126706100f95f395f818161132701528181611350015261149401526126705ff3fe608060405260043610610131575f3560e01c8063715018a6116100a8578063abbe49ed1161006d578063abbe49ed1461036a578063ad3cb1cc14610389578063c4d66de8146103c6578063c7b3e37c146103e5578063f2fde38b14610404578063f7fa104314610423575f5ffd5b8063715018a6146102ad57806375298c75146102c15780637b769d87146102f05780638da5cb5b1461030f57806391c90c5a1461034b575f5ffd5b80634f1ef286116100f95780634f1ef286146101ef57806352d1902d1461020257806354edbcb81461022457806364dfea061461024357806367ccd1cb1461026f5780636e6f898d1461028e575f5ffd5b80631081f9da146101355780631bf141101461015657806330a39276146101925780633ac04911146101b15780633b791f67146101d0575b5f5ffd5b348015610140575f5ffd5b5061015461014f3660046118c3565b610442565b005b348015610161575f5ffd5b50610175610170366004611923565b610454565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019d575f5ffd5b506101756101ac36600461198a565b610481565b3480156101bc575f5ffd5b506101756101cb3660046119a5565b610503565b3480156101db575f5ffd5b506101756101ea366004611923565b61051a565b6101546101fd3660046119e7565b6105fe565b34801561020d575f5ffd5b5061021661061d565b604051908152602001610189565b34801561022f575f5ffd5b5061015461023e366004611aea565b610638565b34801561024e575f5ffd5b506102576106c6565b6040516001600160401b039091168152602001610189565b34801561027a575f5ffd5b50610154610289366004611b6a565b6106e2565b348015610299575f5ffd5b506101756102a83660046119a5565b61083e565b3480156102b8575f5ffd5b5061015461084c565b3480156102cc575f5ffd5b506102e06102db36600461198a565b61085f565b6040519015158152602001610189565b3480156102fb575f5ffd5b506102e061030a366004611b6a565b6108ed565b34801561031a575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610175565b348015610356575f5ffd5b506102e0610365366004611b85565b610916565b348015610375575f5ffd5b5061015461038436600461198a565b610a04565b348015610394575f5ffd5b506103b9604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101899190611bea565b3480156103d1575f5ffd5b506101546103e0366004611b6a565b610b11565b3480156103f0575f5ffd5b506101546103ff366004611b85565b610c24565b34801561040f575f5ffd5b5061015461041e366004611b6a565b610d8a565b34801561042e575f5ffd5b5061015461043d366004611b6a565b610dcc565b61044e84848484610ed0565b50505050565b5f5f6104628787878761115c565b905061047683828051906020012030611242565b979650505050505050565b5f815f816001600160401b03161180156104b4575061049e6106c6565b6001600160401b0316816001600160401b031611155b6104d15760405163a9146eeb60e01b815260040160405180910390fd5b6104fc6104df600185611bfc565b6001600160401b03165f5160206125db5f395f51905f5290611274565b9392505050565b5f610511858585858561051a565b95945050505050565b5f5f6105298787878787610454565b6001600160a01b0381165f9081525f5160206125fb5f395f51905f5260205260408120805460ff191660011790559091506105668888888861115c565b90505f6105745f8684611288565b9050806001600160a01b0316836001600160a01b0316146105a857604051630306120160e01b815260040160405180910390fd5b876001600160a01b0316896001600160401b0316826001600160a01b03167f4c0014e4ce2da5edb4be77548b830b31b16706b3b0ea7dc87b3a7f2abe5de40d60405160405180910390a498975050505050505050565b61060661131c565b61060f826113c0565b61061982826113c8565b5050565b5f610626611489565b505f51602061261b5f395f51905f5290565b83811461065857604051630dfe930960e41b815260040160405180910390fd5b5f5b848110156106be576106b686868381811061067757610677611c27565b905060200201602081019061068c9190611b6a565b8585858581811061069f5761069f611c27565b90506020028101906106b19190611c3b565b610ed0565b60010161065a565b505050505050565b5f6106dd5f5160206125db5f395f51905f526114d2565b905090565b6106ea6114db565b6001600160a01b0381166107115760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381165f9081525f5160206125fb5f395f51905f52602052604090205460ff1615610756576040516324ec133760e11b815260040160405180910390fd5b306001600160a01b0316816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561079c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c09190611c7d565b6001600160a01b0316146107e75760405163340aafcd60e11b815260040160405180910390fd5b6001600160a01b0381165f8181525f5160206125fb5f395f51905f526020526040808220805460ff19166001179055517f8e0930709528779f1112249aac8fcca15dbb9c595db31092c7bc7f954b5679339190a250565b5f6105118585858585610454565b6108546114db565b61085d5f611536565b565b5f815f816001600160401b0316118015610892575061087c6106c6565b6001600160401b0316816001600160401b031611155b6108af5760405163a9146eeb60e01b815260040160405180910390fd5b50506001600160401b03165f9081527f8e455bed11907189c537a36ae6131c14495d217d4f7af335ce892f553df45a02602052604090205460ff1690565b6001600160a01b03165f9081525f5160206125fb5f395f51905f52602052604090205460ff1690565b5f825f816001600160401b031611801561094957506109336106c6565b6001600160401b0316816001600160401b031611155b6109665760405163a9146eeb60e01b815260040160405180910390fd5b825f816001600160401b031611801561099857506109826106c6565b6001600160401b0316816001600160401b031611155b6109b55760405163a9146eeb60e01b815260040160405180910390fd5b5050506001600160401b039182165f9081527f8e455bed11907189c537a36ae6131c14495d217d4f7af335ce892f553df45a036020908152604080832093909416825291909152205460ff1690565b610a0c6114db565b805f816001600160401b0316118015610a3e5750610a286106c6565b6001600160401b0316816001600160401b031611155b610a5b5760405163a9146eeb60e01b815260040160405180910390fd5b6001600160401b0382165f9081527f8e455bed11907189c537a36ae6131c14495d217d4f7af335ce892f553df45a0260205260409020545f5160206125db5f395f51905f529060ff1615610ac25760405163065a854760e21b815260040160405180910390fd5b6001600160401b0383165f818152600283016020526040808220805460ff19166001179055517f0f4d6951b566921aa373fd0c3adf9491caedd90ceb9505671a97fc2ae5e476529190a2505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610b555750825b90505f826001600160401b03166001148015610b705750303b155b905081158015610b7e575080155b15610b9c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610bc657845460ff60401b1916600160401b1785555b610bcf866115a6565b610bd76115ae565b83156106be57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b610c2c6114db565b815f816001600160401b0316118015610c5e5750610c486106c6565b6001600160401b0316816001600160401b031611155b610c7b5760405163a9146eeb60e01b815260040160405180910390fd5b815f816001600160401b0316118015610cad5750610c976106c6565b6001600160401b0316816001600160401b031611155b610cca5760405163a9146eeb60e01b815260040160405180910390fd5b826001600160401b0316846001600160401b031610610cfc57604051630384ebd960e41b815260040160405180910390fd5b6001600160401b038481165f8181527f8e455bed11907189c537a36ae6131c14495d217d4f7af335ce892f553df45a036020908152604080832094881680845294909152808220805460ff19166001179055515f5160206125db5f395f51905f529392917f6a075e6666695e12500947b8008f1cff82c568bc14cc7ec61693957d45dfb34791a35050505050565b610d926114db565b6001600160a01b038116610dc057604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610dc981611536565b50565b610dd46114db565b306001600160a01b0316816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3e9190611c7d565b6001600160a01b031614610e655760405163340aafcd60e11b815260040160405180910390fd5b5f5160206125db5f395f51905f52610e7d81836115b6565b610e9a5760405163080fc0bd60e11b815260040160405180910390fd5b6040516001600160a01b038316907e4e3fc87eaca57574ac4c9643f3593e62e8c911bcf371e5226ecd1ae1f857f7905f90a25050565b610ed9846108ed565b610ef657604051633b2fc1c360e21b815260040160405180910390fd5b836001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f569190611c7d565b6001600160a01b0316336001600160a01b031614610f87576040516330cd747160e01b815260040160405180910390fd5b5f846001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe89190611c98565b9050806001600160401b0316846001600160401b03161161101c57604051630384ebd960e41b815260040160405180910390fd5b6110268185610916565b61104357604051637ac9db9b60e11b815260040160405180910390fd5b61104c8461085f565b1561106a57604051631e94feb560e01b815260040160405180910390fd5b846001600160a01b0316634f1ef28661108286610481565b86868660405160240161109793929190611cdb565b60408051601f198184030181529181526020820180516001600160e01b0316632f186bff60e11b179052516001600160e01b031960e085901b1681526110e1929190600401611cfd565b5f604051808303815f87803b1580156110f8575f5ffd5b505af115801561110a573d5f5f3e3d5ffd5b50506040516001600160401b03871681526001600160a01b03881692507fbc16bc2483091c2edac6c4777e7d530dfe2630c6a91164eb01c513e1b0923ebd915060200160405180910390a25050505050565b60606111678561085f565b1561118557604051631e94feb560e01b815260040160405180910390fd5b5f61118f86610481565b90505f868686866040516024016111a99493929190611d28565b60408051601f19818403018152918152602080830180516001600160e01b03166315fb20f360e21b17905290519192506111e490820161184a565b601f1982820381018352601f9091011660408190526112099084908490602001611cfd565b60408051601f19818403018152908290526112279291602001611d7c565b60405160208183030381529060405292505050949350505050565b5f604051836040820152846020820152828152600b8101905060ff8153605590206001600160a01b0316949350505050565b5f61127f83836115ca565b90505b92915050565b5f834710156112b35760405163cf47918160e01b815247600482015260248101859052604401610db7565b81515f036112d457604051631328927760e21b815260040160405180910390fd5b8282516020840186f590503d1519811516156112f5576040513d5f823e3d81fd5b6001600160a01b0381166104fc5760405163b06ebf3d60e01b815260040160405180910390fd5b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113a257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113965f51602061261b5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b1561085d5760405163703e46dd60e11b815260040160405180910390fd5b610dc96114db565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611422575060408051601f3d908101601f1916820190925261141f91810190611d90565b60015b61144a57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610db7565b5f51602061261b5f395f51905f52811461147a57604051632a87526960e21b815260048101829052602401610db7565b61148483836115f0565b505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461085d5760405163703e46dd60e11b815260040160405180910390fd5b5f611282825490565b3361150d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461085d5760405163118cdaa760e01b8152336004820152602401610db7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610d92611645565b61085d611645565b5f61127f836001600160a01b03841661168e565b5f825f0182815481106115df576115df611c27565b905f5260205f200154905092915050565b6115f9826116da565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561163d57611484828261173d565b6106196117a6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661085d57604051631afcd79f60e31b815260040160405180910390fd5b5f8181526001830160205260408120546116d357508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611282565b505f611282565b806001600160a01b03163b5f0361170f57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610db7565b5f51602061261b5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516117599190611da7565b5f60405180830381855af49150503d805f8114611791576040519150601f19603f3d011682016040523d82523d5f602084013e611796565b606091505b50915091506105118583836117c5565b341561085d5760405163b398979f60e01b815260040160405180910390fd5b6060826117da576117d582611821565b6104fc565b81511580156117f157506001600160a01b0384163b155b1561181a57604051639996b31560e01b81526001600160a01b0385166004820152602401610db7565b50806104fc565b8051156118315780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b61082880611db383390190565b6001600160a01b0381168114610dc9575f5ffd5b6001600160401b0381168114610dc9575f5ffd5b5f5f83601f84011261188f575f5ffd5b5081356001600160401b038111156118a5575f5ffd5b6020830191508360208285010111156118bc575f5ffd5b9250929050565b5f5f5f5f606085870312156118d6575f5ffd5b84356118e181611857565b935060208501356118f18161186b565b925060408501356001600160401b0381111561190b575f5ffd5b6119178782880161187f565b95989497509550505050565b5f5f5f5f5f60808688031215611937575f5ffd5b85356119428161186b565b9450602086013561195281611857565b935060408601356001600160401b0381111561196c575f5ffd5b6119788882890161187f565b96999598509660600135949350505050565b5f6020828403121561199a575f5ffd5b81356104fc8161186b565b5f5f5f5f606085870312156119b8575f5ffd5b84356119c38161186b565b935060208501356118f181611857565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156119f8575f5ffd5b8235611a0381611857565b915060208301356001600160401b03811115611a1d575f5ffd5b8301601f81018513611a2d575f5ffd5b80356001600160401b03811115611a4657611a466119d3565b604051601f8201601f19908116603f011681016001600160401b0381118282101715611a7457611a746119d3565b604052818152828201602001871015611a8b575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f840112611aba575f5ffd5b5081356001600160401b03811115611ad0575f5ffd5b6020830191508360208260051b85010111156118bc575f5ffd5b5f5f5f5f5f60608688031215611afe575f5ffd5b85356001600160401b03811115611b13575f5ffd5b611b1f88828901611aaa565b9096509450506020860135611b338161186b565b925060408601356001600160401b03811115611b4d575f5ffd5b611b5988828901611aaa565b969995985093965092949392505050565b5f60208284031215611b7a575f5ffd5b81356104fc81611857565b5f5f60408385031215611b96575f5ffd5b8235611ba18161186b565b91506020830135611bb18161186b565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61127f6020830184611bbc565b6001600160401b03828116828216039081111561128257634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112611c50575f5ffd5b8301803591506001600160401b03821115611c69575f5ffd5b6020019150368190038213156118bc575f5ffd5b5f60208284031215611c8d575f5ffd5b81516104fc81611857565b5f60208284031215611ca8575f5ffd5b81516104fc8161186b565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160401b0384168152604060208201525f610511604083018486611cb3565b6001600160a01b03831681526040602082018190525f90611d2090830184611bbc565b949350505050565b6001600160401b03851681526001600160a01b03841660208201526060604082018190525f90611d5b9083018486611cb3565b9695505050505050565b5f81518060208401855e5f93019283525090919050565b5f611d20611d8a8386611d65565b84611d65565b5f60208284031215611da0575f5ffd5b5051919050565b5f61127f8284611d6556fe60a060405234801561000f575f5ffd5b5060405161082838038061082883398101604081905261002e9161030e565b818161003a8282610058565b50503360805261005161004c60805190565b6100b6565b50506103f3565b61006182610123565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156100aa576100a582826101a1565b505050565b6100b2610214565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100f55f5160206108085f395f51905f52546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a161012081610235565b50565b806001600160a01b03163b5f0361015d57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f5f846001600160a01b0316846040516101bd91906103dd565b5f60405180830381855af49150503d805f81146101f5576040519150601f19603f3d011682016040523d82523d5f602084013e6101fa565b606091505b50909250905061020b858383610272565b95945050505050565b34156102335760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b03811661025e57604051633173bdd160e11b81525f6004820152602401610154565b805f5160206108085f395f51905f52610180565b60608261028757610282826102d1565b6102ca565b815115801561029e57506001600160a01b0384163b155b156102c757604051639996b31560e01b81526001600160a01b0385166004820152602401610154565b50805b9392505050565b8051156102e15780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561031f575f5ffd5b82516001600160a01b0381168114610335575f5ffd5b60208401519092506001600160401b03811115610350575f5ffd5b8301601f81018513610360575f5ffd5b80516001600160401b03811115610379576103796102fa565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103a7576103a76102fa565b6040528181528282016020018710156103be575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b6080516103fe61040a5f395f606301526103fe5ff3fe60806040526004361061001d575f3560e01c80634f1ef28614610027575b610025610046565b005b348015610032575f5ffd5b50610025610041366004610327565b610058565b6100566100516100e5565b61011c565b565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146100a157604051631d94727d60e31b815260040160405180910390fd5b6100e08383838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061013a92505050565b505050565b5f6101177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e808015610136573d5ff35b3d5ffd5b61014382610193565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115610187576100e0828261020e565b61018f610280565b5050565b806001600160a01b03163b5f036101cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161022a91906103b2565b5f60405180830381855af49150503d805f8114610262576040519150601f19603f3d011682016040523d82523d5f602084013e610267565b606091505b509150915061027785838361029f565b95945050505050565b34156100565760405163b398979f60e01b815260040160405180910390fd5b6060826102b4576102af826102fe565b6102f7565b81511580156102cb57506001600160a01b0384163b155b156102f457604051639996b31560e01b81526001600160a01b03851660048201526024016101c4565b50805b9392505050565b80511561030e5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f5f5f60408486031215610339575f5ffd5b83356001600160a01b038116811461034f575f5ffd5b9250602084013567ffffffffffffffff81111561036a575f5ffd5b8401601f8101861361037a575f5ffd5b803567ffffffffffffffff811115610390575f5ffd5b8660208284010111156103a1575f5ffd5b939660209190910195509293505050565b5f82518060208501845e5f92019182525091905056fea26469706673582212207be6c67dc442f92f42da1ef1fe850aee45b7516a63d94b5a25cfb2efe8d6c05064736f6c634300081b0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038e455bed11907189c537a36ae6131c14495d217d4f7af335ce892f553df45a008e455bed11907189c537a36ae6131c14495d217d4f7af335ce892f553df45a04360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220f2a19f8b7ae3082749c328491e6c53af37c48ffa760ed2a43840eb31d03a2f0964736f6c634300081b0033