0 txs
59.1k calls
constructor
constructor(address _ethPOS, address _eigenPodManager, string _version)
functions
activeValidatorCount
viewfunction activeValidatorCount() view returns (uint256)
checkpointBalanceExitedGwei
viewfunction checkpointBalanceExitedGwei(uint64) view returns (uint64)
currentCheckpoint
viewfunction currentCheckpoint() view returns (tuple)
currentCheckpointTimestamp
viewfunction currentCheckpointTimestamp() view returns (uint64)
eigenPodManager
viewfunction eigenPodManager() view returns (address)
ethPOS
viewfunction ethPOS() view returns (address)
getConsolidationRequestFee
viewfunction getConsolidationRequestFee() view returns (uint256)
getParentBlockRoot
viewfunction getParentBlockRoot(uint64 timestamp) view returns (bytes32)
getWithdrawalRequestFee
viewfunction getWithdrawalRequestFee() view returns (uint256)
lastCheckpointTimestamp
viewfunction lastCheckpointTimestamp() view returns (uint64)
podOwner
viewfunction podOwner() view returns (address)
proofSubmitter
viewfunction proofSubmitter() view returns (address)
validatorPubkeyHashToInfo
viewfunction validatorPubkeyHashToInfo(bytes32 validatorPubkeyHash) view returns (tuple)
validatorPubkeyToInfo
viewfunction validatorPubkeyToInfo(bytes validatorPubkey) view returns (tuple)
validatorStatus
viewfunction validatorStatus(bytes validatorPubkey) view returns (uint8)
validatorStatus
viewfunction validatorStatus(bytes32 pubkeyHash) view returns (uint8)
version
viewfunction version() view returns (string)
withdrawableRestakedExecutionLayerGwei
viewfunction withdrawableRestakedExecutionLayerGwei() view returns (uint64)
initialize
nonpayablefunction initialize(address _podOwner)
recoverTokens
nonpayablefunction recoverTokens(address[] tokenList, uint256[] amountsToWithdraw, address recipient)
requestConsolidation
payablefunction requestConsolidation(tuple[] requests) payable
requestWithdrawal
payablefunction requestWithdrawal(tuple[] requests) payable
setProofSubmitter
nonpayablefunction setProofSubmitter(address newProofSubmitter)
stake
payablefunction stake(bytes pubkey, bytes signature, bytes32 depositDataRoot) payable
startCheckpoint
nonpayablefunction startCheckpoint(bool revertIfNoBalance)
verifyCheckpointProofs
nonpayablefunction verifyCheckpointProofs(tuple balanceContainerProof, tuple[] proofs)
verifyStaleBalance
nonpayablefunction verifyStaleBalance(uint64 beaconTimestamp, tuple stateRootProof, tuple proof)
verifyWithdrawalCredentials
nonpayablefunction verifyWithdrawalCredentials(uint64 beaconTimestamp, tuple stateRootProof, uint40[] validatorIndices, bytes[] validatorFieldsProofs, bytes32[][] validatorFields)
withdrawRestakedBeaconChainETH
nonpayablefunction withdrawRestakedBeaconChainETH(address recipient, uint256 amountWei)
events
CheckpointCreated
event CheckpointCreated(uint64 indexed checkpointTimestamp, bytes32 indexed beaconBlockRoot, uint256 validatorCount)
CheckpointFinalized
event CheckpointFinalized(uint64 indexed checkpointTimestamp, int256 totalShareDeltaWei)
ConsolidationRequested
event ConsolidationRequested(bytes32 indexed sourcePubkeyHash, bytes32 indexed targetPubkeyHash)
EigenPodStaked
event EigenPodStaked(bytes32 pubkeyHash)
ExitRequested
event ExitRequested(bytes32 indexed validatorPubkeyHash)
Initialized
event Initialized(uint8 version)
NonBeaconChainETHReceived
event NonBeaconChainETHReceived(uint256 amountReceived)
ProofSubmitterUpdated
event ProofSubmitterUpdated(address prevProofSubmitter, address newProofSubmitter)
RestakedBeaconChainETHWithdrawn
event RestakedBeaconChainETHWithdrawn(address indexed recipient, uint256 amount)
SwitchToCompoundingRequested
event SwitchToCompoundingRequested(bytes32 indexed validatorPubkeyHash)
ValidatorBalanceUpdated
event ValidatorBalanceUpdated(bytes32 pubkeyHash, uint64 balanceTimestamp, uint64 newValidatorBalanceGwei)
ValidatorCheckpointed
event ValidatorCheckpointed(uint64 indexed checkpointTimestamp, bytes32 indexed pubkeyHash)
ValidatorRestaked
event ValidatorRestaked(bytes32 pubkeyHash)
ValidatorWithdrawn
event ValidatorWithdrawn(uint64 indexed checkpointTimestamp, bytes32 indexed pubkeyHash)
WithdrawalRequested
event WithdrawalRequested(bytes32 indexed validatorPubkeyHash, uint64 withdrawalAmountGwei)
errors
BeaconTimestampTooFarInPast
error BeaconTimestampTooFarInPast()
CannotCheckpointTwiceInSingleBlock
error CannotCheckpointTwiceInSingleBlock()
CheckpointAlreadyActive
error CheckpointAlreadyActive()
CredentialsAlreadyVerified
error CredentialsAlreadyVerified()
CurrentlyPaused
error CurrentlyPaused()
FeeQueryFailed
error FeeQueryFailed()
ForkTimestampZero
error ForkTimestampZero()
InputAddressZero
error InputAddressZero()
InputArrayLengthMismatch
error InputArrayLengthMismatch()
InsufficientFunds
error InsufficientFunds()
InsufficientWithdrawableBalance
error InsufficientWithdrawableBalance()
InvalidEIP4788Response
error InvalidEIP4788Response()
InvalidProof
error InvalidProof()
InvalidProofLength
error InvalidProofLength()
InvalidProofLength
error InvalidProofLength()
InvalidPubKeyLength
error InvalidPubKeyLength()
InvalidShortString
error InvalidShortString()
InvalidValidatorFieldsLength
error InvalidValidatorFieldsLength()
MsgValueNot32ETH
error MsgValueNot32ETH()
NoActiveCheckpoint
error NoActiveCheckpoint()
NoBalanceToCheckpoint
error NoBalanceToCheckpoint()
OnlyEigenPodManager
error OnlyEigenPodManager()
OnlyEigenPodOwner
error OnlyEigenPodOwner()
OnlyEigenPodOwnerOrProofSubmitter
error OnlyEigenPodOwnerOrProofSubmitter()
PredeployFailed
error PredeployFailed()
StringTooLong
error StringTooLong(string str)
TimestampOutOfRange
error TimestampOutOfRange()
ValidatorInactiveOnBeaconChain
error ValidatorInactiveOnBeaconChain()
ValidatorIsExitingBeaconChain
error ValidatorIsExitingBeaconChain()
ValidatorNotActiveInPod
error ValidatorNotActiveInPod()
ValidatorNotSlashedOnBeaconChain
error ValidatorNotSlashedOnBeaconChain()
WithdrawalCredentialsNotForEigenPod
error WithdrawalCredentialsNotForEigenPod()
creation bytecode
0x60e060405234801561000f575f5ffd5b5060405161484238038061484283398101604081905261002e91610188565b806100388161005f565b608052506001600160a01b0380841660a052821660c0526100576100a5565b5050506102b9565b5f5f829050601f81511115610092578260405163305a27a960e01b8152600401610089919061025e565b60405180910390fd5b805161009d82610293565b179392505050565b5f54610100900460ff161561010c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610089565b5f5460ff9081161461015b575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610171575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f6060848603121561019a575f5ffd5b83516101a58161015d565b60208501519093506101b68161015d565b60408501519092506001600160401b038111156101d1575f5ffd5b8401601f810186136101e1575f5ffd5b80516001600160401b038111156101fa576101fa610174565b604051601f8201601f19908116603f011681016001600160401b038111828210171561022857610228610174565b60405281815282820160200188101561023f575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102b3575f198160200360031b1b821691505b50919050565b60805160a05160c0516144fd6103455f395f8181610329015281816106d40152818161077c01528181610a2a01528181610da201528181610f6d01528181611078015281816115730152818161161a015281816118a301528181611bf101528181611d25015281816121fb015261310501525f818161057a015261168301525f610fd901526144fd5ff3fe6080604052600436106101bd575f3560e01c80636691954e116100f2578063b522538a11610092578063d06d558711610062578063d06d55871461063f578063dda3346c1461065e578063ee94d67c1461067d578063f074ba621461069c575f5ffd5b8063b522538a146105ce578063c44e30dc146105ed578063c490744214610601578063c4d66de814610620575f5ffd5b80637439841f116100cd5780637439841f1461053457806374cdd7981461056957806388676cad1461059c5780639b4e4634146105bb575f5ffd5b80636691954e146104d65780636c0d2d5a146104e95780636fcd0e5314610508575f5ffd5b806342ecff2a1161015d57806352396a591161013857806352396a591461043657806354fd4d501461046a578063587533571461048b57806358eaee79146104aa575f5ffd5b806342ecff2a146102f25780634665bcda1461031857806347d283721461034b575f5ffd5b80632340e8d3116101985780632340e8d31461027a5780633474aa161461028f5780633f5fa57a146102c05780633f65cf19146102d3575f5ffd5b8063039157d2146101fb5780630b18ff661461021c5780631e51553314610258575f5ffd5b366101f7576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b5f5ffd5b348015610206575f5ffd5b5061021a6102153660046139a4565b6106bb565b005b348015610227575f5ffd5b5060335461023b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610263575f5ffd5b5061026c6109f0565b60405190815260200161024f565b348015610285575f5ffd5b5061026c60395481565b34801561029a575f5ffd5b506034546001600160401b03165b6040516001600160401b03909116815260200161024f565b61021a6102ce366004613a5f565b610a11565b3480156102de575f5ffd5b5061021a6102ed366004613a9d565b610d49565b3480156102fd575f5ffd5b50603a546102a890600160401b90046001600160401b031681565b348015610323575f5ffd5b5061023b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610356575f5ffd5b506103db6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015290565b60405161024f91905f60a0820190508251825262ffffff60208401511660208301526001600160401b036040840151166040830152606083015160070b60608301526001600160401b03608084015116608083015292915050565b348015610441575f5ffd5b506102a8610450366004613b74565b603b6020525f90815260409020546001600160401b031681565b348015610475575f5ffd5b5061047e610fd2565b60405161024f9190613bbd565b348015610496575f5ffd5b50603e5461023b906001600160a01b031681565b3480156104b5575f5ffd5b506104c96104c4366004613c0c565b610ffd565b60405161024f9190613c72565b61021a6104e4366004613a5f565b61105f565b3480156104f4575f5ffd5b5061026c610503366004613b74565b611361565b348015610513575f5ffd5b50610527610522366004613c80565b61146f565b60405161024f9190613c97565b34801561053f575f5ffd5b506104c961054e366004613c80565b5f90815260366020526040902054600160c01b900460ff1690565b348015610574575f5ffd5b5061023b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a7575f5ffd5b5061021a6105b6366004613cf7565b61151a565b61021a6105c9366004613d12565b61160f565b3480156105d9575f5ffd5b506105276105e8366004613c0c565b61178d565b3480156105f8575f5ffd5b5061026c61187c565b34801561060c575f5ffd5b5061021a61061b366004613da7565b611898565b34801561062b575f5ffd5b5061021a61063a366004613dd1565b6119cf565b34801561064a575f5ffd5b5061021a610659366004613dd1565b611b19565b348015610669575f5ffd5b5061021a610678366004613ebc565b611bad565b348015610688575f5ffd5b50603a546102a8906001600160401b031681565b3480156106a7575f5ffd5b5061021a6106b6366004613f8e565b611d0c565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610721573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107459190613ff5565b156107635760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ed9190613ff5565b1561080b5760405163840a48d560e01b815260040160405180910390fd5b5f61084f6108198580614010565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061210892505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156108bd576108bd613c3e565b60028111156108ce576108ce613c3e565b81525050905080604001516001600160401b0316876001600160401b03161161090a576040516337e07ffd60e01b815260040160405180910390fd5b60018160600151600281111561092257610922613c3e565b146109405760405163d49e19a760e01b815260040160405180910390fd5b61098361094d8680614010565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061212a92505050565b6109a05760405163161ce5ed60e31b815260040160405180910390fd5b6109b26109ac88611361565b87612152565b6109de6109be886121f7565b87356109ca8880614010565b6109d760208b018b614055565b87516122ce565b6109e75f612402565b50505050505050565b5f610a0c71bbddc7ce488642fb579f8b00f3a590007251612582565b905090565b604051635ac86ab760e01b8152600a60048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610a77573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b9190613ff5565b15610ab95760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b0316331480610adc5750603e546001600160a01b031633145b610af95760405163427a777960e01b815260040160405180910390fd5b5f610b0261187c565b90505f610b0f84836140ab565b905080341015610b325760405163356680b760e01b815260040160405180910390fd5b5f610b3d82346140c2565b90505f5b85811015610d305736878783818110610b5c57610b5c6140d5565b9050602002810190610b6e91906140e9565b90505f610bb7610b7e8380614055565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b90505f610bc48380614055565b610bd46040860160208701613b74565b604051602001610be693929190614107565b60405160208183030381529060405290505f710961ef480eb55e80d19ad83579a64c0070026001600160a01b03168883604051610c23919061413f565b5f6040518083038185875af1925050503d805f8114610c5d576040519150601f19603f3d011682016040523d82523d5f602084013e610c62565b606091505b5050905080610c845760405163fc52d48360e01b815260040160405180910390fd5b610c946040850160208601613b74565b6001600160401b03165f03610cd25760405183907f60d8ca014d4765a2b8b389e25714cb1cef83b574222911a01d90c1bd69d2d320905f90a2610d20565b827f8b2737bb64ab2f2dc09552dfa1c250399e6a42c7ea9f0e1c658f5d65d708ec05610d046040870160208801613b74565b6040516001600160401b03909116815260200160405180910390a25b505060019092019150610b419050565b508015610d4157610d413382612699565b505050505050565b6033546001600160a01b0316331480610d6c5750603e546001600160a01b031633145b610d895760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610def573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e139190613ff5565b15610e315760405163840a48d560e01b815260040160405180910390fd5b8584148015610e3f57508382145b610e5c576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610e92576040516337e07ffd60e01b815260040160405180910390fd5b610ea4610e9e8a611361565b89612152565b5f805b87811015610f3d57610f298b8b358b8b85818110610ec757610ec76140d5565b9050602002016020810190610edc919061414a565b8a8a86818110610eee57610eee6140d5565b9050602002810190610f009190614055565b8a8a88818110610f1257610f126140d5565b9050602002810190610f249190614010565b6127ae565b610f33908361416e565b9150600101610ea7565b5060335460405163a1ca780b60e01b81526001600160a01b0391821660048201525f6024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b158015610fb0575f5ffd5b505af1158015610fc2573d5f5f3e3d5ffd5b5050505050505050505050505050565b6060610a0c7f0000000000000000000000000000000000000000000000000000000000000000612caf565b5f5f61103d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b5f90815260366020526040902054600160c01b900460ff169150505b92915050565b604051635ac86ab760e01b8152600960048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156110c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e99190613ff5565b156111075760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b031633148061112a5750603e546001600160a01b031633145b6111475760405163427a777960e01b815260040160405180910390fd5b5f6111506109f0565b90505f61115d84836140ab565b9050803410156111805760405163356680b760e01b815260040160405180910390fd5b5f61118b82346140c2565b90505f5b85811015610d3057368787838181106111aa576111aa6140d5565b90506020028101906111bc91906140e9565b90505f6111cc610b7e8380614055565b90505f6111df610b7e6020850185614055565b90505f6111eb8261146f565b905060018160600151600281111561120557611205613c3e565b146112235760405163d49e19a760e01b815260040160405180910390fd5b5f61122e8580614055565b61123b6020880188614055565b60405160200161124e9493929190614181565b60405160208183030381529060405290505f71bbddc7ce488642fb579f8b00f3a5900072516001600160a01b03168a8360405161128b919061413f565b5f6040518083038185875af1925050503d805f81146112c5576040519150601f19603f3d011682016040523d82523d5f602084013e6112ca565b606091505b50509050806112ec5760405163fc52d48360e01b815260040160405180910390fd5b8385036113225760405185907fc97b965b92ae7fd20095fe8eb7b99f81f95f8c4adffb22a19116d8eb2846b016905f90a261134f565b604051849086907f42f9c9db2ca443e9ec62f4588bd0c9b241065c02c2a8001ac164ae1282dc7b94905f90a35b50506001909401935061118f92505050565b5f61136f611fff600c6140ab565b6113826001600160401b038416426140c2565b106113a057604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201525f918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f19818403018152908290526113e79161413f565b5f60405180830381855afa9150503d805f811461141f576040519150601f19603f3d011682016040523d82523d5f602084013e611424565b606091505b509150915081801561143657505f8151115b6114535760405163558ad0a360e01b815260040160405180910390fd5b8080602001905181019061146791906141a0565b949350505050565b611496604080516080810182525f8082526020820181905291810182905290606082015290565b5f82815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff16600281111561150057611500613c3e565b600281111561151157611511613c3e565b90525092915050565b6033546001600160a01b031633148061153d5750603e546001600160a01b031633145b61155a5760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156115c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e49190613ff5565b156116025760405163840a48d560e01b815260040160405180910390fd5b61160b82612402565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461165857604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec800000146116815760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec80000087876116c4612cec565b8888886040518863ffffffff1660e01b81526004016116e8969594939291906141df565b5f604051808303818588803b1580156116ff575f5ffd5b505af1158015611711573d5f5f3e3d5ffd5b50505050507fa01003766d3cd97cf2ade5429690bf5d206be7fb01ef9d3a0089ecf67bc1121961177586868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b60405190815260200160405180910390a15050505050565b6117b4604080516080810182525f8082526020820181905291810182905290606082015290565b60365f6117f585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061260892505050565b815260208082019290925260409081015f20815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561186157611861613c3e565b600281111561187257611872613c3e565b9052509392505050565b5f610a0c710961ef480eb55e80d19ad83579a64c007002612582565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118e157604051633213a66160e21b815260040160405180910390fd5b5f6118f0633b9aca0083614241565b9050611909633b9aca006001600160401b0383166140ab565b6034549092506001600160401b03908116908216111561193c576040516302c6f54760e21b815260040160405180910390fd5b603480548291905f906119599084906001600160401b0316614254565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e836040516119b891815260200190565b60405180910390a26119ca8383612699565b505050565b5f54610100900460ff16158080156119ed57505f54600160ff909116105b80611a065750303b158015611a0657505f5460ff166001145b611a6e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611a8f575f805461ff0019166101001790555b6001600160a01b038216611ab6576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b038416179055801561160b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b03163314611b445760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314611bd85760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611c3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c629190613ff5565b15611c805760405163840a48d560e01b815260040160405180910390fd5b8251845114611ca2576040516343714afd60e01b815260040160405180910390fd5b5f5b8451811015611d0557611cfd83858381518110611cc357611cc36140d5565b6020026020010151878481518110611cdd57611cdd6140d5565b60200260200101516001600160a01b0316612d1c9092919063ffffffff16565b600101611ca4565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611d72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d969190613ff5565b15611db45760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b03165f819003611de857604051631a544f4960e01b815260040160405180910390fd5b6040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b90049091166080820152611e4f611e47836121f7565b825188612d6e565b5f805b858110156120af5736878783818110611e6d57611e6d6140d5565b9050602002810190611e7f9190614273565b80355f908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611eef57611eef613c3e565b6002811115611f0057611f00613c3e565b9052509050600181606001516002811115611f1d57611f1d613c3e565b14611f295750506120a7565b856001600160401b031681604001516001600160401b031610611f4d5750506120a7565b5f8080611f5d848a8f3588612e2f565b60208b0180519396509194509250611f7482614287565b62ffffff16905250608088018051849190611f909083906142a4565b6001600160401b0316905250606088018051839190611fb09083906142c3565b60070b905250611fc081886142a4565b85355f908152603660209081526040918290208751815492890151938901516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060880151939a50879390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b83600281111561206457612064613c3e565b021790555050604051863591506001600160401b038b16907fe4866335761a51dcaff766448ab0af6064291ee5dc94e68492bb9cd757c1e350905f90a350505050505b600101611e52565b506001600160401b038084165f908152603b60205260408120805484939192916120db918591166142a4565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506109e782612f45565b5f815f8151811061211b5761211b6140d5565b60200260200101519050919050565b5f8160038151811061213e5761213e6140d5565b60200260200101515f5f1b14159050919050565b61215e600360206140ab565b61216b6020830183614055565b90501461218b576040516313717da960e21b815260040160405180910390fd5b6121da61219b6020830183614055565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525086925050843590506003613165565b61160b576040516309bde33960e01b815260040160405180910390fd5b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632704351a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612255573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227991906142f2565b9050806001600160401b03165f036122a4576040516341a02cc960e01b815260040160405180910390fd5b806001600160401b0316836001600160401b031611156122c55760016122c7565b5f5b9392505050565b600884146122ef5760405163200591bd60e01b815260040160405180910390fd5b5f6122f98861317c565b9050806123086028600161416e565b612312919061416e565b61231d9060206140ab565b831461233c576040516313717da960e21b815260040160405180910390fd5b5f6123788787808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506131a492505050565b90505f64ffffffffff841661238f6028600161416e565b600b901b1790506123d986868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d9250869150859050613165565b6123f6576040516309bde33960e01b815260040160405180910390fd5b50505050505050505050565b603a54600160401b90046001600160401b0316156124325760405162be9bc360e81b815260040160405180910390fd5b603a546001600160401b03428116911603612460576040516367db5b8b60e01b815260040160405180910390fd5b6034545f906001600160401b031661247c633b9aca0047614241565b6124869190614254565b905081801561249c57506001600160401b038116155b156124ba576040516332dea95960e21b815260040160405180910390fd5b5f6040518060a001604052806124cf42611361565b815260395462ffffff1660208201526001600160401b0380851660408301525f60608301819052608090920191909152603a805442909216600160401b026fffffffffffffffff000000000000000019909216919091179055905061253381612f45565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b5f5f5f836001600160a01b03166040515f60405180830381855afa9150503d805f81146125ca576040519150601f19603f3d011682016040523d82523d5f602084013e6125cf565b606091505b50915091508180156125e2575080516020145b6125ff5760405163c90158af60e01b815260040160405180910390fd5b6114678161430d565b5f815160301461262b57604051634f88323960e11b815260040160405180910390fd5b6040516002906126419084905f90602001614330565b60408051601f198184030181529082905261265b9161413f565b602060405180830381855afa158015612676573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061105991906141a0565b804710156126e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611a65565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612732576040519150601f19603f3d011682016040523d82523d5f602084013e612737565b606091505b50509050806119ca5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611a65565b5f5f6127eb8484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061210892505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561285957612859613c3e565b600281111561286a5761286a613c3e565b90525090505f8160600151600281111561288657612886613c3e565b146128a4576040516335e09e9d60e01b815260040160405180910390fd5b6001600160401b0380166128e98686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061343492505050565b6001600160401b03160361291057604051631958236d60e21b815260040160405180910390fd5b6001600160401b0380166129558686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061345892505050565b6001600160401b03161461297c57604051632eade63760e01b815260040160405180910390fd5b612984612cec565b61298d9061430d565b6129c88686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061346f92505050565b1480612a1d57506129d7613483565b6129e09061430d565b612a1b8686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061346f92505050565b145b612a3a57604051633772dd5360e11b815260040160405180910390fd5b5f612a768686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061349f92505050565b9050612a8f612a848c6121f7565b8b88888c8c8f6122ce565b60398054905f612a9e83614354565b9091555050603a545f90600160401b90046001600160401b031615612ad557603a54600160401b90046001600160401b0316612ae2565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190525f858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115612bb757612bb7613c3e565b021790555050603d8054849250601390612be2908490600160981b90046001600160401b03166142a4565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507f101790c2993f6a4d962bd17c786126823ba1c4cf04ff4cccb2659d50fb20aee884604051612c3791815260200190565b60405180910390a1604080518581526001600160401b03838116602083015284168183015290517fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f9181900360600190a1612c9f633b9aca006001600160401b0384166140ab565b9c9b505050505050505050505050565b60605f612cbb836134b6565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b604051606090612d0890600160f81b905f90309060200161436c565b604051602081830303815290604052905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119ca9084906134dd565b5f612d788461317c565b9050612d8581600361416e565b612d909060206140ab565b612d9d6020840184614055565b905014612dbd576040516313717da960e21b815260040160405180910390fd5b6003811b600c17612e12612dd46020850185614055565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250508635905084613165565b611d05576040516309bde33960e01b815260040160405180910390fd5b5f5f5f866020015192505f612e4886895f0151876135b0565b9050836001600160401b0316816001600160401b031614612ebc57612e6d84826143aa565b60408051873581526001600160401b038a8116602083015284168183015290519194507fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f919081900360600190a15b6001600160401b0380821660208a0181905290881660408a01525f03612f3a5760398054905f612eeb836143d9565b909155505060026060890152612f00836143ee565b6040519092508535906001600160401b038916907f5ce0aa04ae51d52da6e680fbe0336d2e2432f7c3dc2d4f3193204c57b9072107905f90a35b509450945094915050565b8051603c556020810151603d805460408401516060850151608086015162ffffff9095166affffffffffffffffffffff19909316831763010000006001600160401b0393841602176fffffffffffffffffffffffffffffffff60581b1916600160581b9183169190910267ffffffffffffffff60981b191617600160981b919094160292909217905515612fd65750565b60808101516034545f91612ff2916001600160401b03166142a4565b90505f8260600151836040015161300991906142c3565b60408401516034805492935090915f9061302d9084906001600160401b03166142a4565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b810483166001600160801b03199091161790555f915061307d90633b9aca009085166140ab565b90505f613092633b9aca00600785900b614413565b603a546040518281529192506001600160401b0316907f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e449060200160405180910390a260335460405163a1ca780b60e01b81526001600160a01b03918216600482015260248101849052604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b158015613148575f5ffd5b505af115801561315a573d5f5f3e3d5ffd5b505050505050505050565b5f8361317286858561368e565b1495945050505050565b5f8082600181111561319057613190613c3e565b1461319c576006611059565b600592915050565b5f5f600283516131b49190614241565b90505f816001600160401b038111156131cf576131cf613dec565b6040519080825280602002602001820160405280156131f8578160200160208202803683370190505b5090505f5b828110156132f25760028561321283836140ab565b81518110613222576132226140d5565b60200260200101518683600261323891906140ab565b61324390600161416e565b81518110613253576132536140d5565b6020026020010151604051602001613275929190918252602082015260400190565b60408051601f198184030181529082905261328f9161413f565b602060405180830381855afa1580156132aa573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906132cd91906141a0565b8282815181106132df576132df6140d5565b60209081029190910101526001016131fd565b506132fe600283614241565b91505b8115613411575f5b828110156133fe5760028261331e83836140ab565b8151811061332e5761332e6140d5565b60200260200101518383600261334491906140ab565b61334f90600161416e565b8151811061335f5761335f6140d5565b6020026020010151604051602001613381929190918252602082015260400190565b60408051601f198184030181529082905261339b9161413f565b602060405180830381855afa1580156133b6573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906133d991906141a0565b8282815181106133eb576133eb6140d5565b6020908102919091010152600101613309565b5061340a600283614241565b9150613301565b805f81518110613423576134236140d5565b602002602001015192505050919050565b5f6110598260058151811061344b5761344b6140d5565b6020026020010151613762565b5f6110598260068151811061344b5761344b6140d5565b5f8160018151811061211b5761211b6140d5565b604051606090612d0890600160f91b905f90309060200161436c565b5f6110598260028151811061344b5761344b6140d5565b5f60ff8216601f81111561105957604051632cd44ac360e21b815260040160405180910390fd5b5f613531826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137c99092919063ffffffff16565b905080515f14806135515750808060200190518101906135519190613ff5565b6119ca5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611a65565b5f6135bd6026600161416e565b6135c89060206140ab565b6135d56040840184614055565b9050146135f5576040516313717da960e21b815260040160405180910390fd5b5f613601600485614442565b64ffffffffff16905061365a61361a6040850185614055565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992505050602086013584613165565b613677576040516309bde33960e01b815260040160405180910390fd5b6136858360200135856137d7565b95945050505050565b5f83515f141580156136ab5750602084516136a9919061446b565b155b6136c8576040516313717da960e21b815260040160405180910390fd5b604080516020808201909252848152905b85518111613758576136ec60028561446b565b5f0361371e5781515f528086015160205260208260405f60026107d05a03fa613713575f5ffd5b600284049350613746565b808601515f52815160205260208260405f60026107d05a03fa61373f575f5ffd5b6002840493505b61375160208261416e565b90506136d9565b5051949350505050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b606061146784845f85613803565b5f806137e460048461447e565b6137ef9060406144a7565b64ffffffffff16905061146784821b613762565b6060824710156138645760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611a65565b5f5f866001600160a01b0316858760405161387f919061413f565b5f6040518083038185875af1925050503d805f81146138b9576040519150601f19603f3d011682016040523d82523d5f602084013e6138be565b606091505b50915091506138cf878383876138da565b979650505050505050565b606083156139485782515f03613941576001600160a01b0385163b6139415760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611a65565b5081611467565b611467838381511561395d5781518083602001fd5b8060405162461bcd60e51b8152600401611a659190613bbd565b6001600160401b038116811461398b575f5ffd5b50565b5f6040828403121561399e575f5ffd5b50919050565b5f5f5f606084860312156139b6575f5ffd5b83356139c181613977565b925060208401356001600160401b038111156139db575f5ffd5b6139e78682870161398e565b92505060408401356001600160401b03811115613a02575f5ffd5b613a0e8682870161398e565b9150509250925092565b5f5f83601f840112613a28575f5ffd5b5081356001600160401b03811115613a3e575f5ffd5b6020830191508360208260051b8501011115613a58575f5ffd5b9250929050565b5f5f60208385031215613a70575f5ffd5b82356001600160401b03811115613a85575f5ffd5b613a9185828601613a18565b90969095509350505050565b5f5f5f5f5f5f5f5f60a0898b031215613ab4575f5ffd5b8835613abf81613977565b975060208901356001600160401b03811115613ad9575f5ffd5b613ae58b828c0161398e565b97505060408901356001600160401b03811115613b00575f5ffd5b613b0c8b828c01613a18565b90975095505060608901356001600160401b03811115613b2a575f5ffd5b613b368b828c01613a18565b90955093505060808901356001600160401b03811115613b54575f5ffd5b613b608b828c01613a18565b999c989b5096995094979396929594505050565b5f60208284031215613b84575f5ffd5b81356122c781613977565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6122c76020830184613b8f565b5f5f83601f840112613bdf575f5ffd5b5081356001600160401b03811115613bf5575f5ffd5b602083019150836020828501011115613a58575f5ffd5b5f5f60208385031215613c1d575f5ffd5b82356001600160401b03811115613c32575f5ffd5b613a9185828601613bcf565b634e487b7160e01b5f52602160045260245ffd5b60038110613c6e57634e487b7160e01b5f52602160045260245ffd5b9052565b602081016110598284613c52565b5f60208284031215613c90575f5ffd5b5035919050565b5f6080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b0360408401511660408301526060830151613ce36060840182613c52565b5092915050565b801515811461398b575f5ffd5b5f60208284031215613d07575f5ffd5b81356122c781613cea565b5f5f5f5f5f60608688031215613d26575f5ffd5b85356001600160401b03811115613d3b575f5ffd5b613d4788828901613bcf565b90965094505060208601356001600160401b03811115613d65575f5ffd5b613d7188828901613bcf565b96999598509660400135949350505050565b6001600160a01b038116811461398b575f5ffd5b8035613da281613d83565b919050565b5f5f60408385031215613db8575f5ffd5b8235613dc381613d83565b946020939093013593505050565b5f60208284031215613de1575f5ffd5b81356122c781613d83565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613e2857613e28613dec565b604052919050565b5f6001600160401b03821115613e4857613e48613dec565b5060051b60200190565b5f82601f830112613e61575f5ffd5b8135613e74613e6f82613e30565b613e00565b8082825260208201915060208360051b860101925085831115613e95575f5ffd5b602085015b83811015613eb2578035835260209283019201613e9a565b5095945050505050565b5f5f5f60608486031215613ece575f5ffd5b83356001600160401b03811115613ee3575f5ffd5b8401601f81018613613ef3575f5ffd5b8035613f01613e6f82613e30565b8082825260208201915060208360051b850101925088831115613f22575f5ffd5b6020840193505b82841015613f4d578335613f3c81613d83565b825260209384019390910190613f29565b955050505060208401356001600160401b03811115613f6a575f5ffd5b613f7686828701613e52565b925050613f8560408501613d97565b90509250925092565b5f5f5f60408486031215613fa0575f5ffd5b83356001600160401b03811115613fb5575f5ffd5b613fc18682870161398e565b93505060208401356001600160401b03811115613fdc575f5ffd5b613fe886828701613a18565b9497909650939450505050565b5f60208284031215614005575f5ffd5b81516122c781613cea565b5f5f8335601e19843603018112614025575f5ffd5b8301803591506001600160401b0382111561403e575f5ffd5b6020019150600581901b3603821315613a58575f5ffd5b5f5f8335601e1984360301811261406a575f5ffd5b8301803591506001600160401b03821115614083575f5ffd5b602001915036819003821315613a58575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761105957611059614097565b8181038181111561105957611059614097565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126140fd575f5ffd5b9190910192915050565b8284823760c09190911b6001600160c01b0319169101908152600801919050565b5f81518060208401855e5f93019283525090919050565b5f6122c78284614128565b5f6020828403121561415a575f5ffd5b813564ffffffffff811681146122c7575f5ffd5b8082018082111561105957611059614097565b838582375f8482015f8152838582375f93019283525090949350505050565b5f602082840312156141b0575f5ffd5b5051919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f6141f260808301888a6141b7565b82810360208401526142048188613b8f565b905082810360408401526142198186886141b7565b915050826060830152979650505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261424f5761424f61422d565b500490565b6001600160401b03828116828216039081111561105957611059614097565b5f8235605e198336030181126140fd575f5ffd5b5f62ffffff82168061429b5761429b614097565b5f190192915050565b6001600160401b03818116838216019081111561105957611059614097565b600781810b9083900b01677fffffffffffffff8113677fffffffffffffff198212171561105957611059614097565b5f60208284031215614302575f5ffd5b81516122c781613977565b8051602080830151919081101561399e575f1960209190910360031b1b16919050565b5f61433b8285614128565b6001600160801b03199390931683525050601001919050565b5f6001820161436557614365614097565b5060010190565b6001600160f81b03199390931683526001600160a81b031991909116600183015260601b6bffffffffffffffffffffffff1916600c82015260200190565b600782810b9082900b03677fffffffffffffff198112677fffffffffffffff8213171561105957611059614097565b5f816143e7576143e7614097565b505f190190565b5f8160070b677fffffffffffffff19810361440b5761440b614097565b5f0392915050565b8082025f8212600160ff1b8414161561442e5761442e614097565b818105831482151761105957611059614097565b5f64ffffffffff8316806144585761445861422d565b8064ffffffffff84160491505092915050565b5f826144795761447961422d565b500690565b5f64ffffffffff8316806144945761449461422d565b8064ffffffffff84160691505092915050565b64ffffffffff8181168382160290811690818114613ce357613ce361409756fea26469706673582212208723ec7239bbcbb9f0710189c0b9c447283d7ef2fe07154c88871e345bc5dda864736f6c634300081b003300000000000000000000000000000000219ab540356cbb839cbe05303d7705fa00000000000000000000000091e677b07f7af907ec9a428aafa9fc14a0d3a33800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005312e362e30000000000000000000000000000000000000000000000000000000