diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index a9c5734ba..82136beb6 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -103,8 +103,8 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615bb6380380615bb683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a698061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063b771b3bc116100a9578063c974d1b611610079578063c974d1b61461046d578063d5f20ff614610475578063df93d8de14610495578063e4a63c401461049f578063fd7ac5e7146104b3575f80fd5b8063b771b3bc1461040d578063ba3a4b9714610433578063bc5fbfec14610446578063bee0a03f1461045a575f80fd5b80639e478eea116100e45780639e478eea146103c0578063a3a65e48146103d3578063a9778a7a146102ac578063afb98096146103e6575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f366004614a27565b6104c6565b005b610214610224366004614a62565b6104fb565b610231600a81565b60405160ff90911681526020015b60405180910390f35b610214610256366004614a27565b610782565b610214610269366004614a79565b61078d565b61021461027c366004614ac7565b610d43565b61029461028f366004614a62565b610db7565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d6366004614a27565b610e0b565b6102146102e9366004614ae8565b610e16565b6103016102fc366004614b26565b610ebe565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a366004614ac7565b610ef3565b61030161034d366004614b8d565b6111bb565b610294610360366004614a62565b6111db565b6103015f81565b61021461037a366004614a27565b6111ef565b61021461038d366004614ac7565b61121a565b610231603081565b6102146103a8366004614a62565b611454565b6103016103bb366004614ba8565b611509565b6102146103ce366004614bdc565b611535565b6102146103e1366004614ae8565b611614565b6103017f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61041b6005600160991b0181565b6040516001600160a01b03909116815260200161023f565b610214610441366004614a62565b61180a565b6103015f805160206159d483398151915281565b610214610468366004614a62565b611a6a565b610231601481565b610488610483366004614a62565b611ba6565b60405161023f9190614c8f565b6102946202a30081565b6103015f805160206159b483398151915281565b6103016104c1366004614d0f565b611cf5565b6104d1838383611d50565b6104f657604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206159f48339815191526020526040808220815160e0810190925280545f805160206159d483398151915293929190829060ff16600581111561054857610548614c1a565b600581111561055957610559614c1a565b815260200160018201805461056d90614d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461059990614d7a565b80156105e45780601f106105bb576101008083540402835291602001916105e4565b820191905f5260205f20905b8154815290600101906020018083116105c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561064f5761064f614c1a565b14610682575f8381526005830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614db2565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106f9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107209190810190614ebb565b6040518263ffffffff1660e01b815260040161073c9190614eec565b6020604051808303815f875af1158015610758573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077c9190614efe565b50505050565b61077c838383611d50565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206159d48339815191529060ff16156107df57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610822573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108469190614efe565b83602001351461086f576040516372b0a7e760e11b8152602084013560048201526024016104ed565b306108806060850160408601614f15565b6001600160a01b0316146108c35761089e6060840160408501614f15565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104ed565b5f6108d16060850185614f30565b905090505f805b828163ffffffff161015610b39575f6108f46060880188614f30565b8363ffffffff1681811061090a5761090a614f75565b905060200281019061091c9190614f89565b61092590614ff4565b80516040519192505f91600688019161093d9161506f565b9081526020016040518091039020541461096d57805160405163a41f772f60e01b81526104ed9190600401614eec565b5f6002885f01358460405160200161099c92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109b69161506f565b602060405180830381855afa1580156109d1573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109f49190614efe565b90508086600601835f0151604051610a0c919061506f565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610a4c90826150c4565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610acc9085615193565b8251604051919550610add9161506f565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610b32906151b3565b90506108d8565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610b7c910460ff16836151d5565b6001600160401b03161015610baf57604051633e1a785160e01b81526001600160401b03821660048201526024016104ed565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610bd38761209d565b604001516040518263ffffffff1660e01b8152600401610bf39190614eec565b602060405180830381865af4158015610c0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c329190614efe565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c6c919061532b565b5f60405180830381865af4158015610c86573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cad9190810190614ebb565b90505f600282604051610cc0919061506f565b602060405180830381855afa158015610cdb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cfe9190614efe565b9050828114610d2a5760405163baaea89d60e01b815260048101829052602481018490526044016104ed565b5050506007909201805460ff1916600117905550505050565b610d4c826121b3565b610d6c576040516330efa98b60e01b8152600481018390526024016104ed565b5f610d7683611ba6565b5190506002816005811115610d8d57610d8d614c1a565b14610dad578060405163170cc93360e21b81526004016104ed9190614db2565b61077c83836121dc565b5f80610dc161247b565b60030154610dcf90846153b6565b9050801580610de457506001600160401b0381115b15610e055760405163222d164360e21b8152600481018490526024016104ed565b92915050565b61077c83838361249f565b610e1e612688565b5f610e2761247b565b90505f80610e34846126bf565b91509150610e41826121b3565b610e4d57505050610ea5565b5f8281526006840160205260409020546001600160a01b0316600482516005811115610e7b57610e7b614c1a565b03610e8a57610e8a8184612a77565b610ea081610e9b84604001516111bb565b612aa1565b505050505b610ebb60015f80516020615a1483398151915255565b50565b5f610ec7612688565b610ed385858585612ad7565b9050610eeb60015f80516020615a1483398151915255565b949350505050565b5f610efc61247b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f3557610f35614c1a565b6003811115610f4657610f46614c1a565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610fbc82611ba6565b9050600183516003811115610fd357610fd3614c1a565b14610ff4578251604051633b0d540d60e21b81526104ed91906004016153d5565b60048151600581111561100957611009614c1a565b0361101f5761101786612c3c565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f6110448961209d565b604001516040518263ffffffff1660e01b81526004016110649190614eec565b606060405180830381865af415801561107f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a391906153ef565b50915091508184146110d057846040015160405163089938b360e11b81526004016104ed91815260200190565b806001600160401b031683606001516001600160401b031610806111095750806001600160401b03168560a001516001600160401b0316115b1561113257604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6111c461247b565b60030154610e05906001600160401b03841661542f565b5f6111e582611ba6565b6080015192915050565b6111fa83838361249f565b6104f657604051635bff683f60e11b8152600481018490526024016104ed565b611222612688565b5f61122b61247b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126457611264614c1a565b600381111561127557611275614c1a565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112ee576112ee614c1a565b1461130f578051604051633b0d540d60e21b81526104ed91906004016153d5565b600461131e8260400151611ba6565b51600581111561133057611330614c1a565b1461142f575f61133f8461209d565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161137e9190614eec565b606060405180830381865af4158015611399573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bd91906153ef565b5091509150818460400151146113e95760405163089938b360e11b8152600481018390526024016104ed565b806001600160401b03168460c001516001600160401b0316111561142b57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5050505b61143884612c3c565b505061145060015f80516020615a1483398151915255565b5050565b5f61145d61247b565b90505f61146983611ba6565b519050600481600581111561148057611480614c1a565b146114a0578060405163170cc93360e21b81526004016104ed9190614db2565b5f8381526006830160205260409020546001600160a01b031633146114e657335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104ed565b5f8381526006830160205260409020546104f6906001600160a01b031684612a77565b5f611512612688565b61151d833384612e0a565b9050610e0560015f80516020615a1483398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061157e575080546001600160401b03808416911610155b1561159c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556115c7848461304d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f805160206159d48339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116478661209d565b604001516040518263ffffffff1660e01b81526004016116679190614eec565b6040805180830381865af4158015611681573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a59190615446565b91509150806116cb57604051632d07135360e01b815281151560048201526024016104ed565b5f828152600484016020526040902080546116e590614d7a565b90505f036117095760405163089938b360e11b8152600481018390526024016104ed565b60015f838152600580860160205260409091205460ff169081111561173057611730614c1a565b14611763575f8281526005840160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614db2565b5f828152600484016020526040812061177b91614976565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f61181361247b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561184c5761184c614c1a565b600381111561185d5761185d614c1a565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156118d6576118d6614c1a565b141580156118f757506003815160038111156118f4576118f4614c1a565b14155b15611918578051604051633b0d540d60e21b81526104ed91906004016153d5565b5f6119268260400151611ba6565b905080606001516001600160401b03165f03611958576040516339b894f960e21b8152600481018590526024016104ed565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f936119c693906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af41580156119e0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a079190810190614ebb565b6040518263ffffffff1660e01b8152600401611a239190614eec565b6020604051808303815f875af1158015611a3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a639190614efe565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206159d48339815191529190611ab190614d7a565b90505f03611ad55760405163089938b360e11b8152600481018390526024016104ed565b60015f838152600580840160205260409091205460ff1690811115611afc57611afc614c1a565b14611b2f575f8281526005820160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614db2565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611b669201615469565b6020604051808303815f875af1158015611b82573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f69190614efe565b611bae6149ad565b5f8281525f805160206159f4833981519152602052604090819020815160e0810190925280545f805160206159d4833981519152929190829060ff166005811115611bfb57611bfb614c1a565b6005811115611c0c57611c0c614c1a565b8152602001600182018054611c2090614d7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611c4c90614d7a565b8015611c975780601f10611c6e57610100808354040283529160200191611c97565b820191905f5260205f20905b815481529060010190602001808311611c7a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f805160206159d4833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611d3890869086906154f3565b90815260200160405180910390205491505092915050565b5f80611d5a61247b565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611d9357611d93614c1a565b6003811115611da457611da4614c1a565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611e1a82611ba6565b9050600283516003811115611e3157611e31614c1a565b14611e52578251604051633b0d540d60e21b81526104ed91906004016153d5565b60208301516001600160a01b03163314611eee575f8281526006850160205260409020546001600160a01b03163314611e8b57336114c1565b5f82815260068501602052604090205460a0820151611eba91600160b01b90046001600160401b031690615193565b6001600160401b0316421015611eee5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b600281516005811115611f0357611f03614c1a565b036120315760028401546080840151611f25916001600160401b031690615193565b6001600160401b0316421015611f595760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b8615611f6b57611f6982876121dc565b505b5f8881526007850160205260409020805460ff1916600317905560608301516080820151611fa4918491611f9f9190615502565b613067565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611fe58461323e565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506120969350505050565b60048151600581111561204657612046614c1a565b0361207a576120548361323e565b5f89815260088601602052604090205561206d88612c3c565b6001945050505050612096565b805160405163170cc93360e21b81526104ed9190600401614db2565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612101573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526121289190810190615522565b915091508061214a57604051636b2f19e960e01b815260040160405180910390fd5b815115612170578151604051636ba589a560e01b815260048101919091526024016104ed565b60208201516001600160a01b0316156121ac576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5092915050565b5f806121bd61247b565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612227573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261224e9190810190615522565b915091508061227057604051636b2f19e960e01b815260040160405180910390fd5b5f61227961247b565b60058101548451919250146122a7578251604051636ba589a560e01b815260048101919091526024016104ed565b60208301516001600160a01b0316156122e3576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b60208301516001600160a01b03161561231f576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161235c9190614eec565b6040805180830381865af4158015612376573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239a91906155b2565b915091508188146123c15760405163089938b360e11b8152600481018990526024016104ed565b5f8881526006840160205260409020600101546001600160401b039081169082161115612452575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612470565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806124a961247b565b90505f6124b5866133d5565b90506124c0866121b3565b6124cf57600192505050612096565b5f8681526006830160205260409020546001600160a01b031633146124f457336114c1565b5f86815260068301602052604090205460a082015161252391600160b01b90046001600160401b031690615193565b6001600160401b03168160c001516001600160401b0316101561256a5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104ed565b5f85156125825761257b87866121dc565b90506125a0565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125c5906111bb565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561262e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126529190614efe565b905080846009015f8a81526020019081526020015f205f82825461267691906155d5565b90915550501515979650505050505050565b5f80516020615a148339815191528054600119016126b957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6126c86149ad565b5f805160206159d48339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6126fb8861209d565b604001516040518263ffffffff1660e01b815260040161271b9190614eec565b6040805180830381865af4158015612735573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127599190615446565b91509150801561278057604051632d07135360e01b815281151560048201526024016104ed565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff909116908111156127b7576127b7614c1a565b60058111156127c8576127c8614c1a565b81526020016001820180546127dc90614d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461280890614d7a565b80156128535780601f1061282a57610100808354040283529160200191612853565b820191905f5260205f20905b81548152906001019060200180831161283657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156128be576128be614c1a565b141580156128df57506001815160058111156128dc576128dc614c1a565b14155b1561290057805160405163170cc93360e21b81526104ed9190600401614db2565b60038151600581111561291557612915614c1a565b036129235760048152612928565b600581525b83600601816020015160405161293e919061506f565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff191690600190849081111561298157612981614c1a565b02179055506020820151600182019061299a90826150c4565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612a4057612a40614c1a565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612a8061247b565b5f8381526009820160205260408120805491905590915061077c84826136ba565b5f805160206159b483398151915254611450906001600160a01b03168383613730565b60015f80516020615a1483398151915255565b5f80612ae161247b565b600281015490915061ffff600160401b90910481169086161080612b0a575061271061ffff8616115b15612b2e57604051635f12e6c360e11b815261ffff861660048201526024016104ed565b60028101546001600160401b039081169085161015612b6a576040516202a06d60e11b81526001600160401b03851660048201526024016104ed565b8054831080612b7c5750806001015483115b15612b9d5760405163222d164360e21b8152600481018490526024016104ed565b5f612ba78461378f565b90505f612bb382610db7565b90505f612bc089836137b2565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f612c4561247b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c7e57612c7e614c1a565b6003811115612c8f57612c8f614c1a565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d2c7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d3b9190615193565b6001600160401b0316421015612d6f5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612dab838886613d24565b91509150612dc48560200151610e9b87606001516111bb565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612e1461247b565b90505f612e2361028f8561378f565b90505f612e2f87611ba6565b9050612e3a876121b3565b612e5a576040516330efa98b60e01b8152600481018890526024016104ed565b600281516005811115612e6f57612e6f614c1a565b14612e9057805160405163170cc93360e21b81526104ed9190600401614db2565b5f828260800151612ea19190615193565b905083600201600a9054906101000a90046001600160401b03168260400151612eca91906151d5565b6001600160401b0316816001600160401b03161115612f0757604051636d51fe0560e11b81526001600160401b03821660048201526024016104ed565b5f80612f138a84613067565b915091505f8a83604051602001612f4192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b613055613dd1565b61305e82613e1c565b61145081613e96565b5f8281525f805160206159f4833981519152602052604081206002015481905f805160206159d483398151915290600160801b90046001600160401b03166130af8582613efe565b5f6130b987614168565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613162573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131899190810190614ebb565b6040518263ffffffff1660e01b81526004016131a59190614eec565b6020604051808303815f875af11580156131c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131e59190614efe565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061324861247b565b90505f6132588460400151611ba6565b90505f60038251600581111561327057613270614c1a565b148061328e575060048251600581111561328c5761328c614c1a565b145b1561329e575060c08101516132db565b6002825160058111156132b3576132b3614c1a565b036132bf5750426132db565b815160405163170cc93360e21b81526104ed9190600401614db2565b84608001516001600160401b0316816001600160401b03161161330257505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f90613327906111bb565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa1580156133a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133cc9190614efe565b95945050505050565b6133dd6149ad565b5f8281525f805160206159f48339815191526020526040808220815160e0810190925280545f805160206159d483398151915293929190829060ff16600581111561342a5761342a614c1a565b600581111561343b5761343b614c1a565b815260200160018201805461344f90614d7a565b80601f016020809104026020016040519081016040528092919081815260200182805461347b90614d7a565b80156134c65780601f1061349d576101008083540402835291602001916134c6565b820191905f5260205f20905b8154815290600101906020018083116134a957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561353457613534614c1a565b14613567575f8481526005830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614db2565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156135ac576135ac614c1a565b0217905550602082015160018201906135c590826150c4565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6136638582613067565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f805160206159b483398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613715575f80fd5b505af1158015613727573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526104f691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506141dd565b5f610e05825f805160206159b4833981519152546001600160a01b03169061423e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff166137f657604051637fab81e560e01b815260040160405180910390fd5b5f805160206159d4833981519152426138156060860160408701614b8d565b6001600160401b031611158061384f57506138336202a300426155d5565b6138436060860160408701614b8d565b6001600160401b031610155b15613889576138646060850160408601614b8d565b604051635879da1360e11b81526001600160401b0390911660048201526024016104ed565b60038101546001600160401b03906138ac90600160401b900482168583166155d5565b11156138d657604051633e1a785160e01b81526001600160401b03841660048201526024016104ed565b6138eb6138e660608601866155e8565b61424a565b6138fb6138e660808601866155e8565b603061390a60208601866155fc565b90501461393c5761391e60208501856155fc565b6040516326475b2f60e11b81526104ed925060040190815260200190565b61394684806155fc565b90505f036139735761395884806155fc565b604051633e08a12560e11b81526004016104ed92919061563e565b5f6006820161398286806155fc565b6040516139909291906154f3565b908152602001604051809103902054146139c9576139ae84806155fc565b60405163a41f772f60e01b81526004016104ed92919061563e565b6139d3835f613efe565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613a108a806155fc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613a58908b018b6155fc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613aa160608b0160408c01614b8d565b6001600160401b03168152602001613abc60608b018b6155e8565b613ac590615651565b8152602001613ad760808b018b6155e8565b613ae090615651565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613b0e919061577e565b5f60405180830381865af4158015613b28573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613b4f9190810190615835565b5f82815260048601602052604090209193509150613b6d82826150c4565b508160068401613b7d88806155fc565b604051613b8b9291906154f3565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613bc7908590600401614eec565b6020604051808303815f875af1158015613be3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c079190614efe565b5f8481526005860160205260409020805460ff191660011790559050613c2d87806155fc565b5f858152600587016020526040902060010191613c4b919083615878565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613caa88806155fc565b604051613cb89291906154f3565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b6040016020810190613cf69190614b8d565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f613d2f61247b565b5f86815260088201602052604081208054908290559192509081908015613dc3575f87815260068501602052604090205461271090613d7990600160a01b900461ffff168361542f565b613d8391906153b6565b915081846009015f8981526020019081526020015f205f828254613da791906155d5565b90915550613db790508282615931565b9250613dc389846136ba565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613e1a57604051631afcd79f60e31b815260040160405180910390fd5b565b613e24613dd1565b613e2d816143b3565b613e356143cc565b610ebb60608201356080830135613e5260c0850160a08601614b8d565b613e6260e0860160c08701615944565b613e73610100870160e0880161595d565b610100870135613e8b61014089016101208a01614f15565b8861014001356143dc565b613e9e613dd1565b5f805160206159b48339815191526001600160a01b038216613ede57604051637330680360e01b81526001600160a01b03831660048201526024016104ed565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f805160206159d48339815191525f6001600160401b038084169085161115613f3257613f2b8385615502565b9050613f3f565b613f3c8484615502565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580613fac575060018401548151613fa8916001600160401b0316906155d5565b8210155b15613fd4576001600160401b0380841660608301528282526040820151166020820152613ff3565b8281606001818151613fe69190615193565b6001600160401b03169052505b60608101516140039060646151d5565b602082015160018601546001600160401b03929092169161402e9190600160401b900460ff166151d5565b6001600160401b0316101561406757606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104ed565b85816040018181516140799190615193565b6001600160401b0316905250604081018051869190614099908390615502565b6001600160401b0316905250600184015460408201516064916140c791600160401b90910460ff16906151d5565b6001600160401b03161015614100576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016104ed565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f805160206159f48339815191526020526040812060020180545f805160206159d483398151915291906008906141b290600160401b90046001600160401b031661597d565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6141f16001600160a01b038416836145c1565b905080515f141580156142155750808060200190518101906142139190615998565b155b156104f657604051635274afe760e01b81526001600160a01b03841660048201526024016104ed565b5f6120968333846145ce565b6142576020820182614ae8565b63ffffffff1615801561427757506142726020820182614f30565b151590505b156142be576142896020820182614ae8565b6142966020830183614f30565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104ed565b6142cb6020820182614f30565b90506142da6020830183614ae8565b63ffffffff1611156142f3576142896020820182614ae8565b60015b6143036020830183614f30565b9050811015611450576143196020830183614f30565b614324600184615931565b81811061433357614333614f75565b90506020020160208101906143489190614f15565b6001600160a01b031661435e6020840184614f30565b8381811061436e5761436e614f75565b90506020020160208101906143839190614f15565b6001600160a01b031610156143ab57604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142f6565b6143bb613dd1565b6143c3614731565b610ebb81614739565b6143d4613dd1565b613e1a614821565b6143e4613dd1565b5f6143ed61247b565b905061ffff86161580614405575061271061ffff8716115b1561442957604051635f12e6c360e11b815261ffff871660048201526024016104ed565b8789111561444d5760405163222d164360e21b8152600481018a90526024016104ed565b60ff851615806144605750600a60ff8616115b156144835760405163170db35960e31b815260ff861660048201526024016104ed565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156144ea576040516202a06d60e11b81526001600160401b03881660048201526024016104ed565b835f0361450a5760405163a733007160e01b815260040160405180910390fd5b8161452b57604051632f6bd1db60e01b8152600481018390526024016104ed565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061209683835f614829565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614614573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146389190614efe565b905061464f6001600160a01b0386168530866148b8565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614693573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146b79190614efe565b905081811161471d5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104ed565b6147278282615931565b9695505050505050565b613e1a613dd1565b614741613dd1565b80355f805160206159d48339815191529081556014614766606084016040850161595d565b60ff1611806147855750614780606083016040840161595d565b60ff16155b156147b95761479a606083016040840161595d565b604051634a59bbff60e11b815260ff90911660048201526024016104ed565b6147c9606083016040840161595d565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556147fa6040830160208401614b8d565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ac4613dd1565b60608147101561484e5760405163cd78605960e01b81523060048201526024016104ed565b5f80856001600160a01b03168486604051614869919061506f565b5f6040518083038185875af1925050503d805f81146148a3576040519150601f19603f3d011682016040523d82523d5f602084013e6148a8565b606091505b50915091506147278683836148f1565b6040516001600160a01b03848116602483015283811660448301526064820183905261077c9186918216906323b872dd9060840161375d565b606082614906576149018261494d565b612096565b815115801561491d57506001600160a01b0384163b155b1561494657604051639996b31560e01b81526001600160a01b03851660048201526024016104ed565b5080612096565b80511561495d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461498290614d7a565b5f825580601f10614991575050565b601f0160209004905f5260205f2090810190610ebb91906149ea565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156149fe575f81556001016149eb565b5090565b8015158114610ebb575f80fd5b803563ffffffff81168114614a22575f80fd5b919050565b5f805f60608486031215614a39575f80fd5b833592506020840135614a4b81614a02565b9150614a5960408501614a0f565b90509250925092565b5f60208284031215614a72575f80fd5b5035919050565b5f8060408385031215614a8a575f80fd5b82356001600160401b03811115614a9f575f80fd5b830160808186031215614ab0575f80fd5b9150614abe60208401614a0f565b90509250929050565b5f8060408385031215614ad8575f80fd5b82359150614abe60208401614a0f565b5f60208284031215614af8575f80fd5b61209682614a0f565b803561ffff81168114614a22575f80fd5b6001600160401b0381168114610ebb575f80fd5b5f805f8060808587031215614b39575f80fd5b84356001600160401b03811115614b4e575f80fd5b850160a08188031215614b5f575f80fd5b9350614b6d60208601614b01565b92506040850135614b7d81614b12565b9396929550929360600135925050565b5f60208284031215614b9d575f80fd5b813561209681614b12565b5f8060408385031215614bb9575f80fd5b50508035926020909101359150565b6001600160a01b0381168114610ebb575f80fd5b5f80828403610180811215614bef575f80fd5b61016080821215614bfe575f80fd5b8493508301359050614c0f81614bc8565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60068110614c3e57614c3e614c1a565b9052565b5f5b83811015614c5c578181015183820152602001614c44565b50505f910152565b5f8151808452614c7b816020860160208601614c42565b601f01601f19169290920160200192915050565b60208152614ca1602082018351614c2e565b5f602083015160e06040840152614cbc610100840182614c64565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614d20575f80fd5b82356001600160401b0380821115614d36575f80fd5b818501915085601f830112614d49575f80fd5b813581811115614d57575f80fd5b866020828501011115614d68575f80fd5b60209290920196919550909350505050565b600181811c90821680614d8e57607f821691505b602082108103614dac57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e058284614c2e565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614df657614df6614dc0565b60405290565b604080519081016001600160401b0381118282101715614df657614df6614dc0565b604051601f8201601f191681016001600160401b0381118282101715614e4657614e46614dc0565b604052919050565b5f6001600160401b03821115614e6657614e66614dc0565b50601f01601f191660200190565b5f82601f830112614e83575f80fd5b8151614e96614e9182614e4e565b614e1e565b818152846020838601011115614eaa575f80fd5b610eeb826020830160208701614c42565b5f60208284031215614ecb575f80fd5b81516001600160401b03811115614ee0575f80fd5b610eeb84828501614e74565b602081525f6120966020830184614c64565b5f60208284031215614f0e575f80fd5b5051919050565b5f60208284031215614f25575f80fd5b813561209681614bc8565b5f808335601e19843603018112614f45575f80fd5b8301803591506001600160401b03821115614f5e575f80fd5b6020019150600581901b3603821315613237575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614f9d575f80fd5b9190910192915050565b5f82601f830112614fb6575f80fd5b8135614fc4614e9182614e4e565b818152846020838601011115614fd8575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615004575f80fd5b61500c614dd4565b82356001600160401b0380821115615022575f80fd5b61502e36838701614fa7565b83526020850135915080821115615043575f80fd5b5061505036828601614fa7565b602083015250604083013561506481614b12565b604082015292915050565b5f8251614f9d818460208701614c42565b601f8211156104f657805f5260205f20601f840160051c810160208510156150a55750805b601f840160051c820191505b81811015611a63575f81556001016150b1565b81516001600160401b038111156150dd576150dd614dc0565b6150f1816150eb8454614d7a565b84615080565b602080601f831160018114615124575f841561510d5750858301515b5f19600386901b1c1916600185901b178555611017565b5f85815260208120601f198616915b8281101561515257888601518255948401946001909101908401615133565b508582101561516f57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156121ac576121ac61517f565b5f63ffffffff8083168181036151cb576151cb61517f565b6001019392505050565b6001600160401b038181168382160280821691908281146151f8576151f861517f565b505092915050565b5f808335601e19843603018112615215575f80fd5b83016020810192503590506001600160401b03811115615233575f80fd5b803603821315613237575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561531e57848303601f19018952813536889003605e190181126152a5575f80fd5b870160606152b38280615200565b8287526152c38388018284615241565b925050506152d386830183615200565b868303888801526152e5838284615241565b9250505060408083013592506152fa83614b12565b6001600160401b039290921694909101939093529783019790830190600101615280565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561534f81614bc8565b6001600160a01b031660608381019190915283013536849003601e19018112615376575f80fd5b83016020810190356001600160401b03811115615391575f80fd5b8060051b36038213156153a2575f80fd5b6080808501526133cc60a085018284615269565b5f826153d057634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106153e9576153e9614c1a565b91905290565b5f805f60608486031215615401575f80fd5b83519250602084015161541381614b12565b604085015190925061542481614b12565b809150509250925092565b8082028115828204841417610e0557610e0561517f565b5f8060408385031215615457575f80fd5b825191506020830151614c0f81614a02565b5f60208083525f845461547b81614d7a565b806020870152604060018084165f811461549c57600181146154b8576154e5565b60ff19851660408a0152604084151560051b8a010195506154e5565b895f5260205f205f5b858110156154dc5781548b82018601529083019088016154c1565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156121ac576121ac61517f565b5f8060408385031215615533575f80fd5b82516001600160401b0380821115615549575f80fd5b908401906060828703121561555c575f80fd5b615564614dd4565b82518152602083015161557681614bc8565b602082015260408301518281111561558c575f80fd5b61559888828601614e74565b6040830152508094505050506020830151614c0f81614a02565b5f80604083850312156155c3575f80fd5b825191506020830151614c0f81614b12565b80820180821115610e0557610e0561517f565b5f8235603e19833603018112614f9d575f80fd5b5f808335601e19843603018112615611575f80fd5b8301803591506001600160401b0382111561562a575f80fd5b602001915036819003821315613237575f80fd5b602081525f610eeb602083018486615241565b5f60408236031215615661575f80fd5b615669614dfc565b61567283614a0f565b81526020808401356001600160401b038082111561568e575f80fd5b9085019036601f8301126156a0575f80fd5b8135818111156156b2576156b2614dc0565b8060051b91506156c3848301614e1e565b81815291830184019184810190368411156156dc575f80fd5b938501935b8385101561570657843592506156f683614bc8565b82825293850193908501906156e1565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156157735784516001600160a01b0316825293830193600192909201919083019061574a565b509695505050505050565b60208152815160208201525f602083015160e060408401526157a4610100840182614c64565b90506040840151601f19808584030160608601526157c28383614c64565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526157f28383615718565b925060a08601519150808584030160c0860152506158108282615718565b91505060c084015161582d60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615846575f80fd5b8251915060208301516001600160401b03811115615862575f80fd5b61586e85828601614e74565b9150509250929050565b6001600160401b0383111561588f5761588f614dc0565b6158a38361589d8354614d7a565b83615080565b5f601f8411600181146158d4575f85156158bd5750838201355b5f19600387901b1c1916600186901b178355611a63565b5f83815260208120601f198716915b8281101561590357868501358255602094850194600190920191016158e3565b508682101561591f575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e0557610e0561517f565b5f60208284031215615954575f80fd5b61209682614b01565b5f6020828403121561596d575f80fd5b813560ff81168114612096575f80fd5b5f6001600160401b038083168181036151cb576151cb61517f565b5f602082840312156159a8575f80fd5b815161209681614a0256fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220c74768dc2be1f290e86165fd266c314df7da0829122c7a885a960875dfc8c0ef64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615fa0380380615fa083398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e538061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d97565b61057a565b005b610256610266366004614dd2565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d97565b61081b565b6102566102ab366004614de9565b610827565b6102566102be366004614e37565b610ddd565b6102d66102d1366004614dd2565b610e51565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614e6c565b610ea5565b61025661032b366004614d97565b610eb8565b61025661033e366004614eba565b610ec4565b610356610351366004614ef8565b610fa9565b604051908152602001610281565b610256610372366004614e6c565b610fde565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614e37565b610fea565b6103566103b5366004614f5f565b6112b2565b6102d66103c8366004614dd2565b6112d2565b6103565f81565b6102566103e2366004614d97565b6112e6565b6102566103f5366004614e6c565b6112f2565b610256610408366004614e37565b6112fe565b610273603081565b610256610423366004614f7a565b611538565b610256610436366004614dd2565b611619565b610256610449366004614e6c565b6116ad565b61035661045c366004614fa8565b6116b9565b61025661046f366004614fc8565b6116e5565b610256610482366004614eba565b6117c4565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614dd2565b6119ba565b6103565f80516020615dbe83398151915281565b610256610509366004614dd2565b611c13565b610273601481565b610529610524366004614dd2565b611d4f565b6040516102819190615070565b6102d66202a30081565b6103565f80516020615d9e83398151915281565b610256610562366004614f7a565b611e9e565b6103566105753660046150f0565b611f65565b6105868383835f611fc0565b505050565b5f8181525f80516020615dde8339815191526020526040808220815160e0810190925280545f80516020615dbe83398151915293929190829060ff1660058111156105d8576105d8614ffb565b60058111156105e9576105e9614ffb565b81526020016001820180546105fd9061515b565b80601f01602080910402602001604051908101604052809291908181526020018280546106299061515b565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614ffb565b1461071b575f8381526005830160205260409081902054905163170cc93360e21b81526107129160ff1690600401615193565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b9919081019061529c565b6040518263ffffffff1660e01b81526004016107d591906152cd565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081591906152df565b50505050565b6108158383835f611fec565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615dbe8339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e091906152df565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a60608501604086016152f6565b6001600160a01b03161461095d5761093860608401604085016152f6565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b6060850185615311565b905090505f805b828163ffffffff161015610bd3575f61098e6060880188615311565b8363ffffffff168181106109a4576109a4615356565b90506020028101906109b6919061536a565b6109bf906153d5565b80516040519192505f9160068801916109d791615450565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b815261071291906004016152cd565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a5091615450565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e91906152df565b90508086600601835f0151604051610aa69190615450565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610ae690826154a5565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b669085615574565b8251604051919550610b7791615450565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bcc90615594565b9050610972565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c16910460ff16836155b6565b6001600160401b03161015610c4957604051633e1a785160e01b81526001600160401b0382166004820152602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c6d87612319565b604001516040518263ffffffff1660e01b8152600401610c8d91906152cd565b602060405180830381865af4158015610ca8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ccc91906152df565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d06919061570c565b5f60405180830381865af4158015610d20573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d47919081019061529c565b90505f600282604051610d5a9190615450565b602060405180830381855afa158015610d75573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d9891906152df565b9050828114610dc45760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506007909201805460ff1916600117905550505050565b610de68261242f565b610e06576040516330efa98b60e01b815260048101839052602401610712565b5f610e1083611d4f565b5190506002816005811115610e2757610e27614ffb565b14610e47578060405163170cc93360e21b81526004016107129190615193565b6108158383612458565b5f80610e5b6126f7565b60030154610e6990846157a0565b9050801580610e7e57506001600160401b0381115b15610e9f5760405163222d164360e21b815260048101849052602401610712565b92915050565b610eb184848484611fec565b5050505050565b6108158383835f61271b565b610ecc61293d565b5f610ed56126f7565b90505f80610ee284612974565b91509150610eef8261242f565b610efb57505050610f90565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f32575080610f50565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f6557610f65614ffb565b03610f7457610f748185612d2c565b610f8a82610f8585604001516112b2565b612d56565b50505050505b610fa660015f80516020615dfe83398151915255565b50565b5f610fb261293d565b610fbe85858585612d8c565b9050610fd660015f80516020615dfe83398151915255565b949350505050565b61081584848484612ef1565b5f610ff36126f7565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561102c5761102c614ffb565b600381111561103d5761103d614ffb565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110b382611d4f565b90506001835160038111156110ca576110ca614ffb565b146110eb578251604051633b0d540d60e21b815261071291906004016157bf565b60048151600581111561110057611100614ffb565b036111165761110e86612f1d565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61113b89612319565b604001516040518263ffffffff1660e01b815260040161115b91906152cd565b606060405180830381865af4158015611176573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119a91906157d9565b50915091508184146111c757846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806112005750806001600160401b03168560a001516001600160401b0316115b1561122957604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112bb6126f7565b60030154610e9f906001600160401b038416615819565b5f6112dc82611d4f565b6080015192915050565b6105868383835f612ef1565b610eb18484848461271b565b61130661293d565b5f61130f6126f7565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561134857611348614ffb565b600381111561135957611359614ffb565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113d2576113d2614ffb565b146113f3578051604051633b0d540d60e21b815261071291906004016157bf565b60046114028260400151611d4f565b51600581111561141457611414614ffb565b14611513575f61142384612319565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161146291906152cd565b606060405180830381865af415801561147d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a191906157d9565b5091509150818460400151146114cd5760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b0316111561150f57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b61151c84612f1d565b505061153460015f80516020615dfe83398151915255565b5050565b5f6115416126f7565b90506001600160a01b0382166115755760405163caa903f960e01b81526001600160a01b0383166004820152602401610712565b5f8381526006820160205260409020546001600160a01b031633146115bb57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115ea575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6116226126f7565b90505f61162e83611d4f565b519050600481600581111561164557611645614ffb565b14611665578060405163170cc93360e21b81526004016107129190615193565b5f8381526006830160205260409020546001600160a01b0316331461168a5733611596565b5f838152600683016020526040902054610586906001600160a01b031684612d2c565b61081584848484611fc0565b5f6116c261293d565b6116cd83338461312a565b9050610e9f60015f80516020615dfe83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061172e575080546001600160401b03808416911610155b1561174c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611777848461336f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615dbe8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117f786612319565b604001516040518263ffffffff1660e01b815260040161181791906152cd565b6040805180830381865af4158015611831573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118559190615830565b915091508061187b57604051632d07135360e01b81528115156004820152602401610712565b5f828152600484016020526040902080546118959061515b565b90505f036118b95760405163089938b360e11b815260048101839052602401610712565b60015f838152600580860160205260409091205460ff16908111156118e0576118e0614ffb565b14611913575f8281526005840160205260409081902054905163170cc93360e21b81526107129160ff1690600401615193565b5f828152600484016020526040812061192b91614ce6565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f6119c36126f7565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119fc576119fc614ffb565b6003811115611a0d57611a0d614ffb565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a8657611a86614ffb565b14158015611aa75750600381516003811115611aa457611aa4614ffb565b14155b15611ac8578051604051633b0d540d60e21b815261071291906004016157bf565b5f611ad68260400151611d4f565b905080606001516001600160401b03165f03611b08576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b7693906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b90573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bb7919081019061529c565b6040518263ffffffff1660e01b8152600401611bd391906152cd565b6020604051808303815f875af1158015611bef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb191906152df565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615dbe8339815191529190611c5a9061515b565b90505f03611c7e5760405163089938b360e11b815260048101839052602401610712565b60015f838152600580840160205260409091205460ff1690811115611ca557611ca5614ffb565b14611cd8575f8281526005820160205260409081902054905163170cc93360e21b81526107129160ff1690600401615193565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611d0f9201615853565b6020604051808303815f875af1158015611d2b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061058691906152df565b611d57614d1d565b5f8281525f80516020615dde833981519152602052604090819020815160e0810190925280545f80516020615dbe833981519152929190829060ff166005811115611da457611da4614ffb565b6005811115611db557611db5614ffb565b8152602001600182018054611dc99061515b565b80601f0160208091040260200160405190810160405280929190818152602001828054611df59061515b565b8015611e405780601f10611e1757610100808354040283529160200191611e40565b820191905f5260205f20905b815481529060010190602001808311611e2357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ed05760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611ed96126f7565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611f075733611596565b336001600160a01b03831603611f36575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615dbe833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611fa890869086906158dd565b90815260200160405180910390205491505092915050565b611fcc84848484611fec565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611ff66126f7565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561202f5761202f614ffb565b600381111561204057612040614ffb565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6120b682611d4f565b90506002835160038111156120cd576120cd614ffb565b146120ee578251604051633b0d540d60e21b815261071291906004016157bf565b60208301516001600160a01b0316331461218a575f8281526006850160205260409020546001600160a01b031633146121275733611596565b5f82815260068501602052604090205460a082015161215691600160b01b90046001600160401b031690615574565b6001600160401b031642101561218a5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561219f5761219f614ffb565b036122c157600284015460808401516121c1916001600160401b031690615574565b6001600160401b03164210156121f55760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b8715612207576122058288612458565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161224091849161223b91906158ec565b613389565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561228384888c613560565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fd69350505050565b6004815160058111156122d6576122d6614ffb565b036122fd576122e683878b613560565b506122f089612f1d565b6001945050505050610fd6565b805160405163170cc93360e21b81526107129190600401615193565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561237d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123a4919081019061590c565b91509150806123c657604051636b2f19e960e01b815260040160405180910390fd5b8151156123ec578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b031615612428576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f806124396126f7565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156124a3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124ca919081019061590c565b91509150806124ec57604051636b2f19e960e01b815260040160405180910390fd5b5f6124f56126f7565b6005810154845191925014612523578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b03161561255f576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b03161561259b576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125d891906152cd565b6040805180830381865af41580156125f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612616919061599c565b9150915081881461263d5760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b0390811690821611156126ce575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26126ec565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806127256126f7565b90505f61273187613745565b905061273c8761242f565b61274b57600192505050610fd6565b5f8781526006830160205260409020546001600160a01b031633146127705733611596565b5f87815260068301602052604090205460a082015161279f91600160b01b90046001600160401b031690615574565b6001600160401b03168160c001516001600160401b031610156127e65760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f86156127fe576127f78887612458565b905061281c565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612841906112b2565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156128aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ce91906152df565b90508084600a015f8b81526020019081526020015f205f8282546128f291906159bf565b90915550506001600160a01b0386161561292f575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615dfe83398151915280546001190161296e57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61297d614d1d565b5f80516020615dbe8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6129b088612319565b604001516040518263ffffffff1660e01b81526004016129d091906152cd565b6040805180830381865af41580156129ea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a0e9190615830565b915091508015612a3557604051632d07135360e01b81528115156004820152602401610712565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a6c57612a6c614ffb565b6005811115612a7d57612a7d614ffb565b8152602001600182018054612a919061515b565b80601f0160208091040260200160405190810160405280929190818152602001828054612abd9061515b565b8015612b085780601f10612adf57610100808354040283529160200191612b08565b820191905f5260205f20905b815481529060010190602001808311612aeb57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b7357612b73614ffb565b14158015612b945750600181516005811115612b9157612b91614ffb565b14155b15612bb557805160405163170cc93360e21b81526107129190600401615193565b600381516005811115612bca57612bca614ffb565b03612bd85760048152612bdd565b600581525b836006018160200151604051612bf39190615450565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612c3657612c36614ffb565b021790555060208201516001820190612c4f90826154a5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cf557612cf5614ffb565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d356126f7565b5f838152600a82016020526040812080549190559091506108158482613a2a565b5f80516020615d9e83398151915254611534906001600160a01b03168383613aa0565b60015f80516020615dfe83398151915255565b5f80612d966126f7565b600281015490915061ffff600160401b90910481169086161080612dbf575061271061ffff8616115b15612de357604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612e1f576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e315750806001015483115b15612e525760405163222d164360e21b815260048101849052602401610712565b5f612e5c84613aff565b90505f612e6882610e51565b90505f612e758983613b22565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612efd8484848461271b565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612f266126f7565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f5f57612f5f614ffb565b6003811115612f7057612f70614ffb565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061300d7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161301c9190615574565b6001600160401b03164210156130505760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130a0575060208201516130be565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130cb838886614094565b915091506130e48560200151610f8587606001516112b2565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131346126f7565b90505f6131436102d185613aff565b90505f61314f87611d4f565b905061315a8761242f565b61317a576040516330efa98b60e01b815260048101889052602401610712565b60028151600581111561318f5761318f614ffb565b146131b057805160405163170cc93360e21b81526107129190600401615193565b5f8282608001516131c19190615574565b905083600201600a9054906101000a90046001600160401b031682604001516131ea91906155b6565b6001600160401b0316816001600160401b0316111561322757604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f806132338a84613389565b915091505f8a8360405160200161326192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b613377614141565b6133808261418c565b61153481614206565b5f8281525f80516020615dde833981519152602052604081206002015481905f80516020615dbe83398151915290600160801b90046001600160401b03166133d1858261426e565b5f6133db876144d8565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613484573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526134ab919081019061529c565b6040518263ffffffff1660e01b81526004016134c791906152cd565b6020604051808303815f875af11580156134e3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061350791906152df565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061356a6126f7565b90505f61357a8660400151611d4f565b90505f60038251600581111561359257613592614ffb565b14806135b057506004825160058111156135ae576135ae614ffb565b145b156135c0575060c08101516135fd565b6002825160058111156135d5576135d5614ffb565b036135e15750426135fd565b815160405163170cc93360e21b81526107129190600401615193565b86608001516001600160401b0316816001600160401b031611613625575f9350505050613368565b600483015460608801515f916001600160a01b031690634f22429f9061364a906112b2565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156136cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136ef91906152df565b5f878152600886016020526040902081905590506001600160a01b038716156126ec575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61374d614d1d565b5f8281525f80516020615dde8339815191526020526040808220815160e0810190925280545f80516020615dbe83398151915293929190829060ff16600581111561379a5761379a614ffb565b60058111156137ab576137ab614ffb565b81526020016001820180546137bf9061515b565b80601f01602080910402602001604051908101604052809291908181526020018280546137eb9061515b565b80156138365780601f1061380d57610100808354040283529160200191613836565b820191905f5260205f20905b81548152906001019060200180831161381957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156138a4576138a4614ffb565b146138d7575f8481526005830160205260409081902054905163170cc93360e21b81526107129160ff1690600401615193565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff191690600190849081111561391c5761391c614ffb565b02179055506020820151600182019061393590826154a5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139d38582613389565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d9e83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a85575f80fd5b505af1158015613a97573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061454d565b5f610e9f825f80516020615d9e833981519152546001600160a01b0316906145ae565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b6657604051637fab81e560e01b815260040160405180910390fd5b5f80516020615dbe83398151915242613b856060860160408701614f5f565b6001600160401b0316111580613bbf5750613ba36202a300426159bf565b613bb36060860160408701614f5f565b6001600160401b031610155b15613bf957613bd46060850160408601614f5f565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b60038101546001600160401b0390613c1c90600160401b900482168583166159bf565b1115613c4657604051633e1a785160e01b81526001600160401b0384166004820152602401610712565b613c5b613c5660608601866159d2565b6145ba565b613c6b613c5660808601866159d2565b6030613c7a60208601866159e6565b905014613cac57613c8e60208501856159e6565b6040516326475b2f60e11b8152610712925060040190815260200190565b613cb684806159e6565b90505f03613ce357613cc884806159e6565b604051633e08a12560e11b8152600401610712929190615a28565b5f60068201613cf286806159e6565b604051613d009291906158dd565b90815260200160405180910390205414613d3957613d1e84806159e6565b60405163a41f772f60e01b8152600401610712929190615a28565b613d43835f61426e565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d808a806159e6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613dc8908b018b6159e6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613e1160608b0160408c01614f5f565b6001600160401b03168152602001613e2c60608b018b6159d2565b613e3590615a3b565b8152602001613e4760808b018b6159d2565b613e5090615a3b565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e7e9190615b68565b5f60405180830381865af4158015613e98573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ebf9190810190615c1f565b5f82815260048601602052604090209193509150613edd82826154a5565b508160068401613eed88806159e6565b604051613efb9291906158dd565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613f379085906004016152cd565b6020604051808303815f875af1158015613f53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7791906152df565b5f8481526005860160205260409020805460ff191660011790559050613f9d87806159e6565b5f858152600587016020526040902060010191613fbb919083615c62565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff191690558061401a88806159e6565b6040516140289291906158dd565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906140669190614f5f565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61409f6126f7565b5f86815260088201602052604081208054908290559192509081908015614133575f878152600685016020526040902054612710906140e990600160a01b900461ffff1683615819565b6140f391906157a0565b91508184600a015f8981526020019081526020015f205f82825461411791906159bf565b9091555061412790508282615d1b565b92506141338984613a2a565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661418a57604051631afcd79f60e31b815260040160405180910390fd5b565b614194614141565b61419d81614723565b6141a561473c565b610fa6606082013560808301356141c260c0850160a08601614f5f565b6141d260e0860160c08701615d2e565b6141e3610100870160e08801615d47565b6101008701356141fb61014089016101208a016152f6565b88610140013561474c565b61420e614141565b5f80516020615d9e8339815191526001600160a01b03821661424e57604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615dbe8339815191525f6001600160401b0380841690851611156142a25761429b83856158ec565b90506142af565b6142ac84846158ec565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061431c575060018401548151614318916001600160401b0316906159bf565b8210155b15614344576001600160401b0380841660608301528282526040820151166020820152614363565b82816060018181516143569190615574565b6001600160401b03169052505b60608101516143739060646155b6565b602082015160018601546001600160401b03929092169161439e9190600160401b900460ff166155b6565b6001600160401b031610156143d757606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b85816040018181516143e99190615574565b6001600160401b03169052506040810180518691906144099083906158ec565b6001600160401b03169052506001840154604082015160649161443791600160401b90910460ff16906155b6565b6001600160401b03161015614470576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610712565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615dde8339815191526020526040812060020180545f80516020615dbe833981519152919060089061452290600160401b90046001600160401b0316615d67565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6145616001600160a01b03841683614931565b905080515f141580156145855750808060200190518101906145839190615d82565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f61336883338461493e565b6145c76020820182614eba565b63ffffffff161580156145e757506145e26020820182615311565b151590505b1561462e576145f96020820182614eba565b6146066020830183615311565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b61463b6020820182615311565b905061464a6020830183614eba565b63ffffffff161115614663576145f96020820182614eba565b60015b6146736020830183615311565b9050811015611534576146896020830183615311565b614694600184615d1b565b8181106146a3576146a3615356565b90506020020160208101906146b891906152f6565b6001600160a01b03166146ce6020840184615311565b838181106146de576146de615356565b90506020020160208101906146f391906152f6565b6001600160a01b0316101561471b57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614666565b61472b614141565b614733614aa1565b610fa681614aa9565b614744614141565b61418a614b91565b614754614141565b5f61475d6126f7565b905061ffff86161580614775575061271061ffff8716115b1561479957604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156147bd5760405163222d164360e21b8152600481018a9052602401610712565b60ff851615806147d05750600a60ff8616115b156147f35760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561485a576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f0361487a5760405163a733007160e01b815260040160405180910390fd5b8161489b57604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061336883835f614b99565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614984573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149a891906152df565b90506149bf6001600160a01b038616853086614c28565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614a03573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a2791906152df565b9050818111614a8d5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b614a978282615d1b565b9695505050505050565b61418a614141565b614ab1614141565b80355f80516020615dbe8339815191529081556014614ad66060840160408501615d47565b60ff161180614af55750614af06060830160408401615d47565b60ff16155b15614b2957614b0a6060830160408401615d47565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614b396060830160408401615d47565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b6a6040830160208401614f5f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d79614141565b606081471015614bbe5760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614bd99190615450565b5f6040518083038185875af1925050503d805f8114614c13576040519150601f19603f3d011682016040523d82523d5f602084013e614c18565b606091505b5091509150614a97868383614c61565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613acd565b606082614c7657614c7182614cbd565b613368565b8151158015614c8d57506001600160a01b0384163b155b15614cb657604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b5080613368565b805115614ccd5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614cf29061515b565b5f825580601f10614d01575050565b601f0160209004905f5260205f2090810190610fa69190614d5a565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d6e575f8155600101614d5b565b5090565b8015158114610fa6575f80fd5b803563ffffffff81168114614d92575f80fd5b919050565b5f805f60608486031215614da9575f80fd5b833592506020840135614dbb81614d72565b9150614dc960408501614d7f565b90509250925092565b5f60208284031215614de2575f80fd5b5035919050565b5f8060408385031215614dfa575f80fd5b82356001600160401b03811115614e0f575f80fd5b830160808186031215614e20575f80fd5b9150614e2e60208401614d7f565b90509250929050565b5f8060408385031215614e48575f80fd5b82359150614e2e60208401614d7f565b6001600160a01b0381168114610fa6575f80fd5b5f805f8060808587031215614e7f575f80fd5b843593506020850135614e9181614d72565b9250614e9f60408601614d7f565b91506060850135614eaf81614e58565b939692955090935050565b5f60208284031215614eca575f80fd5b61336882614d7f565b803561ffff81168114614d92575f80fd5b6001600160401b0381168114610fa6575f80fd5b5f805f8060808587031215614f0b575f80fd5b84356001600160401b03811115614f20575f80fd5b850160a08188031215614f31575f80fd5b9350614f3f60208601614ed3565b92506040850135614f4f81614ee4565b9396929550929360600135925050565b5f60208284031215614f6f575f80fd5b813561336881614ee4565b5f8060408385031215614f8b575f80fd5b823591506020830135614f9d81614e58565b809150509250929050565b5f8060408385031215614fb9575f80fd5b50508035926020909101359150565b5f80828403610180811215614fdb575f80fd5b61016080821215614fea575f80fd5b8493508301359050614f9d81614e58565b634e487b7160e01b5f52602160045260245ffd5b6006811061501f5761501f614ffb565b9052565b5f5b8381101561503d578181015183820152602001615025565b50505f910152565b5f815180845261505c816020860160208601615023565b601f01601f19169290920160200192915050565b6020815261508260208201835161500f565b5f602083015160e0604084015261509d610100840182615045565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615101575f80fd5b82356001600160401b0380821115615117575f80fd5b818501915085601f83011261512a575f80fd5b813581811115615138575f80fd5b866020828501011115615149575f80fd5b60209290920196919550909350505050565b600181811c9082168061516f57607f821691505b60208210810361518d57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e9f828461500f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151d7576151d76151a1565b60405290565b604080519081016001600160401b03811182821017156151d7576151d76151a1565b604051601f8201601f191681016001600160401b0381118282101715615227576152276151a1565b604052919050565b5f6001600160401b03821115615247576152476151a1565b50601f01601f191660200190565b5f82601f830112615264575f80fd5b81516152776152728261522f565b6151ff565b81815284602083860101111561528b575f80fd5b610fd6826020830160208701615023565b5f602082840312156152ac575f80fd5b81516001600160401b038111156152c1575f80fd5b610fd684828501615255565b602081525f6133686020830184615045565b5f602082840312156152ef575f80fd5b5051919050565b5f60208284031215615306575f80fd5b813561336881614e58565b5f808335601e19843603018112615326575f80fd5b8301803591506001600160401b0382111561533f575f80fd5b6020019150600581901b3603821315613559575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261537e575f80fd5b9190910192915050565b5f82601f830112615397575f80fd5b81356153a56152728261522f565b8181528460208386010111156153b9575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153e5575f80fd5b6153ed6151b5565b82356001600160401b0380821115615403575f80fd5b61540f36838701615388565b83526020850135915080821115615424575f80fd5b5061543136828601615388565b602083015250604083013561544581614ee4565b604082015292915050565b5f825161537e818460208701615023565b601f82111561058657805f5260205f20601f840160051c810160208510156154865750805b601f840160051c820191505b81811015610eb1575f8155600101615492565b81516001600160401b038111156154be576154be6151a1565b6154d2816154cc845461515b565b84615461565b602080601f831160018114615505575f84156154ee5750858301515b5f19600386901b1c1916600185901b17855561110e565b5f85815260208120601f198616915b8281101561553357888601518255948401946001909101908401615514565b508582101561555057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561242857612428615560565b5f63ffffffff8083168181036155ac576155ac615560565b6001019392505050565b6001600160401b038181168382160280821691908281146155d9576155d9615560565b505092915050565b5f808335601e198436030181126155f6575f80fd5b83016020810192503590506001600160401b03811115615614575f80fd5b803603821315613559575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156ff57848303601f19018952813536889003605e19018112615686575f80fd5b8701606061569482806155e1565b8287526156a48388018284615622565b925050506156b4868301836155e1565b868303888801526156c6838284615622565b9250505060408083013592506156db83614ee4565b6001600160401b039290921694909101939093529783019790830190600101615661565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561573081614e58565b6001600160a01b031660608381019190915283013536849003601e19018112615757575f80fd5b83016020810190356001600160401b03811115615772575f80fd5b8060051b3603821315615783575f80fd5b60808085015261579760a08501828461564a565b95945050505050565b5f826157ba57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157d3576157d3614ffb565b91905290565b5f805f606084860312156157eb575f80fd5b8351925060208401516157fd81614ee4565b604085015190925061580e81614ee4565b809150509250925092565b8082028115828204841417610e9f57610e9f615560565b5f8060408385031215615841575f80fd5b825191506020830151614f9d81614d72565b5f60208083525f84546158658161515b565b806020870152604060018084165f811461588657600181146158a2576158cf565b60ff19851660408a0152604084151560051b8a010195506158cf565b895f5260205f205f5b858110156158c65781548b82018601529083019088016158ab565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561242857612428615560565b5f806040838503121561591d575f80fd5b82516001600160401b0380821115615933575f80fd5b9084019060608287031215615946575f80fd5b61594e6151b5565b82518152602083015161596081614e58565b6020820152604083015182811115615976575f80fd5b61598288828601615255565b6040830152508094505050506020830151614f9d81614d72565b5f80604083850312156159ad575f80fd5b825191506020830151614f9d81614ee4565b80820180821115610e9f57610e9f615560565b5f8235603e1983360301811261537e575f80fd5b5f808335601e198436030181126159fb575f80fd5b8301803591506001600160401b03821115615a14575f80fd5b602001915036819003821315613559575f80fd5b602081525f610fd6602083018486615622565b5f60408236031215615a4b575f80fd5b615a536151dd565b615a5c83614d7f565b81526020808401356001600160401b0380821115615a78575f80fd5b9085019036601f830112615a8a575f80fd5b813581811115615a9c57615a9c6151a1565b8060051b9150615aad8483016151ff565b8181529183018401918481019036841115615ac6575f80fd5b938501935b83851015615af05784359250615ae083614e58565b8282529385019390850190615acb565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b5d5784516001600160a01b03168252938301936001929092019190830190615b34565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b8e610100840182615045565b90506040840151601f1980858403016060860152615bac8383615045565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bdc8383615b02565b925060a08601519150808584030160c086015250615bfa8282615b02565b91505060c0840151615c1760e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c30575f80fd5b8251915060208301516001600160401b03811115615c4c575f80fd5b615c5885828601615255565b9150509250929050565b6001600160401b03831115615c7957615c796151a1565b615c8d83615c87835461515b565b83615461565b5f601f841160018114615cbe575f8515615ca75750838201355b5f19600387901b1c1916600186901b178355610eb1565b5f83815260208120601f198716915b82811015615ced5786850135825560209485019460019092019101615ccd565b5086821015615d09575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e9f57610e9f615560565b5f60208284031215615d3e575f80fd5b61336882614ed3565b5f60208284031215615d57575f80fd5b813560ff81168114613368575f80fd5b5f6001600160401b038083168181036155ac576155ac615560565b5f60208284031215615d92575f80fd5b815161336881614d7256fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220600f26530acb9344f9685711352fcf01384e451856d9210ed4109b133d1b702f64736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -804,6 +804,48 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) WeightTo return _ERC20TokenStakingManager.Contract.WeightToValue(&_ERC20TokenStakingManager.CallOpts, weight) } +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ChangeDelegatorRewardRecipient(opts *bind.TransactOpts, delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "changeDelegatorRewardRecipient", delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ChangeValidatorRewardRecipient(opts *bind.TransactOpts, validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "changeValidatorRewardRecipient", validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + // ClaimDelegationFees is a paid mutator transaction binding the contract method 0x93e24598. // // Solidity: function claimDelegationFees(bytes32 validationID) returns() @@ -930,6 +972,27 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Forc return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. // // Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -951,6 +1014,27 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Forc return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // Initialize is a paid mutator transaction binding the contract method 0x9e478eea. // // Solidity: function initialize(((bytes32,uint64,uint8),uint256,uint256,uint64,uint16,uint8,uint256,address,bytes32) settings, address token) returns() @@ -1014,25 +1098,67 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Init return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } // InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x4bee0040. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 15e61efd0..2b6b6c83f 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -103,8 +103,8 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b506040516158c83803806158c883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61577b8061014d5f395ff3fe6080604052600436106101f1575f3560e01c806376f7862111610108578063b771b3bc1161009d578063c599e24f1161006d578063c599e24f146105a0578063c974d1b6146105b3578063d5f20ff6146105c7578063df93d8de146105f3578063fd7ac5e714610609575f80fd5b8063b771b3bc14610528578063ba3a4b9714610542578063bc5fbfec14610561578063bee0a03f14610581575f80fd5b8063a3a65e48116100d8578063a3a65e48146104c3578063a9778a7a14610345578063af2f5feb146104e2578063afb98096146104f5575f80fd5b806376f786211461045257806380dd672f146104715780638280a25a1461049057806393e24598146104a4575f80fd5b8063329c3e121161018957806360305d621161015957806360305d62146103ab57806360ad7784146103d457806362065856146103f357806366435abf14610420578063732214f81461043f575f80fd5b8063329c3e121461031357806335455ded146103455780633a1cfff61461036d578063467ef06f1461038c575f80fd5b80631ec44724116101c45780631ec447241461027f57806320d91b7a1461029e57806325e1c776146102bd5780632e2194d8146102dc575f80fd5b80630118acc4146101f55780630322ed98146102165780630ba512d114610235578063151d30d114610254575b5f80fd5b348015610200575f80fd5b5061021461020f3660046147bf565b610628565b005b348015610221575f80fd5b506102146102303660046147fa565b61065d565b348015610240575f80fd5b5061021461024f366004614811565b6108e4565b34801561025f575f80fd5b50610268600a81565b60405160ff90911681526020015b60405180910390f35b34801561028a575f80fd5b506102146102993660046147bf565b6109c1565b3480156102a9575f80fd5b506102146102b8366004614828565b6109cc565b3480156102c8575f80fd5b506102146102d7366004614876565b610f82565b3480156102e7575f80fd5b506102fb6102f63660046147fa565b610ff6565b6040516001600160401b039091168152602001610276565b34801561031e575f80fd5b5061032d6001600160991b0181565b6040516001600160a01b039091168152602001610276565b348015610350575f80fd5b5061035a61271081565b60405161ffff9091168152602001610276565b348015610378575f80fd5b506102146103873660046147bf565b61104a565b348015610397575f80fd5b506102146103a6366004614897565b611055565b3480156103b6575f80fd5b506103bf601481565b60405163ffffffff9091168152602001610276565b3480156103df575f80fd5b506102146103ee366004614876565b6110fd565b3480156103fe575f80fd5b5061041261040d3660046148c4565b6113c5565b604051908152602001610276565b34801561042b575f80fd5b506102fb61043a3660046147fa565b6113e5565b34801561044a575f80fd5b506104125f81565b34801561045d575f80fd5b5061021461046c3660046147bf565b6113f9565b34801561047c575f80fd5b5061021461048b366004614876565b611424565b34801561049b575f80fd5b50610268603081565b3480156104af575f80fd5b506102146104be3660046147fa565b61165e565b3480156104ce575f80fd5b506102146104dd366004614897565b611713565b6104126104f03660046148f0565b611909565b348015610500575f80fd5b506104127f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610533575f80fd5b5061032d6005600160991b0181565b34801561054d575f80fd5b5061021461055c3660046147fa565b61193d565b34801561056c575f80fd5b506104125f805160206156e683398151915281565b34801561058c575f80fd5b5061021461059b3660046147fa565b611b9d565b6104126105ae3660046147fa565b611cd9565b3480156105be575f80fd5b50610268601481565b3480156105d2575f80fd5b506105e66105e13660046147fa565b611d0a565b60405161027691906149c6565b3480156105fe575f80fd5b506102fb6202a30081565b348015610614575f80fd5b50610412610623366004614a46565b611e59565b610633838383611eb4565b61065857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206157068339815191526020526040808220815160e0810190925280545f805160206156e683398151915293929190829060ff1660058111156106aa576106aa614951565b60058111156106bb576106bb614951565b81526020016001820180546106cf90614ab1565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb90614ab1565b80156107465780601f1061071d57610100808354040283529160200191610746565b820191905f5260205f20905b81548152906001019060200180831161072957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156107b1576107b1614951565b146107e4575f8381526005830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614ae3565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561085b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108829190810190614bf4565b6040518263ffffffff1660e01b815260040161089e9190614c25565b6020604051808303815f875af11580156108ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108de9190614c37565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061092d575080546001600160401b03808416911610155b1561094b5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610975836121fa565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6108de838383611eb4565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f805160206156e68339815191529060ff1615610a1e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a859190614c37565b836020013514610aae576040516372b0a7e760e11b81526020840135600482015260240161064f565b30610abf6060850160408601614c62565b6001600160a01b031614610b0257610add6060840160408501614c62565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161064f565b5f610b106060850185614c7d565b905090505f805b828163ffffffff161015610d78575f610b336060880188614c7d565b8363ffffffff16818110610b4957610b49614cc2565b9050602002810190610b5b9190614cd6565b610b6490614d41565b80516040519192505f916006880191610b7c91614dbc565b90815260200160405180910390205414610bac57805160405163a41f772f60e01b815261064f9190600401614c25565b5f6002885f013584604051602001610bdb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610bf591614dbc565b602060405180830381855afa158015610c10573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610c339190614c37565b90508086600601835f0151604051610c4b9190614dbc565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610c8b9082614e11565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610d0b9085614ee0565b8251604051919550610d1c91614dbc565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610d7190614f00565b9050610b17565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610dbb910460ff1683614f22565b6001600160401b03161015610dee57604051633e1a785160e01b81526001600160401b038216600482015260240161064f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610e128761220b565b604001516040518263ffffffff1660e01b8152600401610e329190614c25565b602060405180830381865af4158015610e4d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e719190614c37565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610eab9190615078565b5f60405180830381865af4158015610ec5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610eec9190810190614bf4565b90505f600282604051610eff9190614dbc565b602060405180830381855afa158015610f1a573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610f3d9190614c37565b9050828114610f695760405163baaea89d60e01b8152600481018290526024810184905260440161064f565b5050506007909201805460ff1916600117905550505050565b610f8b82612321565b610fab576040516330efa98b60e01b81526004810183905260240161064f565b5f610fb583611d0a565b5190506002816005811115610fcc57610fcc614951565b14610fec578060405163170cc93360e21b815260040161064f9190614ae3565b6108de838361234a565b5f806110006125e9565b6003015461100e9084615103565b905080158061102357506001600160401b0381115b156110445760405163222d164360e21b81526004810184905260240161064f565b92915050565b6108de83838361260d565b61105d6127f6565b5f6110666125e9565b90505f806110738461282d565b9150915061108082612321565b61108c575050506110e4565b5f8281526006840160205260409020546001600160a01b03166004825160058111156110ba576110ba614951565b036110c9576110c98184612be5565b6110df816110da84604001516113c5565b612c0f565b505050505b6110fa60015f8051602061572683398151915255565b50565b5f6111066125e9565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561113f5761113f614951565b600381111561115057611150614951565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6111c682611d0a565b90506001835160038111156111dd576111dd614951565b146111fe578251604051633b0d540d60e21b815261064f9190600401615122565b60048151600581111561121357611213614951565b036112295761122186612c35565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61124e8961220b565b604001516040518263ffffffff1660e01b815260040161126e9190614c25565b606060405180830381865af4158015611289573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ad919061513c565b50915091508184146112da57846040015160405163089938b360e11b815260040161064f91815260200190565b806001600160401b031683606001516001600160401b031610806113135750806001600160401b03168560a001516001600160401b0316115b1561133c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6113ce6125e9565b60030154611044906001600160401b038416615171565b5f6113ef82611d0a565b6080015192915050565b61140483838361260d565b61065857604051635bff683f60e11b81526004810184905260240161064f565b61142c6127f6565b5f6114356125e9565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561146e5761146e614951565b600381111561147f5761147f614951565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114f8576114f8614951565b14611519578051604051633b0d540d60e21b815261064f9190600401615122565b60046115288260400151611d0a565b51600581111561153a5761153a614951565b14611639575f6115498461220b565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016115889190614c25565b606060405180830381865af41580156115a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c7919061513c565b5091509150818460400151146115f35760405163089938b360e11b81526004810183905260240161064f565b806001600160401b03168460c001516001600160401b0316111561163557604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5050505b61164284612c35565b505061165a60015f8051602061572683398151915255565b5050565b5f6116676125e9565b90505f61167383611d0a565b519050600481600581111561168a5761168a614951565b146116aa578060405163170cc93360e21b815260040161064f9190614ae3565b5f8381526006830160205260409020546001600160a01b031633146116f057335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161064f565b5f838152600683016020526040902054610658906001600160a01b031684612be5565b5f805160206156e68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117468661220b565b604001516040518263ffffffff1660e01b81526004016117669190614c25565b6040805180830381865af4158015611780573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117a49190615188565b91509150806117ca57604051632d07135360e01b8152811515600482015260240161064f565b5f828152600484016020526040902080546117e490614ab1565b90505f036118085760405163089938b360e11b81526004810183905260240161064f565b60015f838152600580860160205260409091205460ff169081111561182f5761182f614951565b14611862575f8281526005840160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614ae3565b5f828152600484016020526040812061187a91614713565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f6119126127f6565b61191e84848434612e03565b905061193660015f8051602061572683398151915255565b9392505050565b5f6119466125e9565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561197f5761197f614951565b600381111561199057611990614951565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a0957611a09614951565b14158015611a2a5750600381516003811115611a2757611a27614951565b14155b15611a4b578051604051633b0d540d60e21b815261064f9190600401615122565b5f611a598260400151611d0a565b905080606001516001600160401b03165f03611a8b576040516339b894f960e21b81526004810185905260240161064f565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611af993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b13573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b3a9190810190614bf4565b6040518263ffffffff1660e01b8152600401611b569190614c25565b6020604051808303815f875af1158015611b72573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b969190614c37565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f805160206156e68339815191529190611be490614ab1565b90505f03611c085760405163089938b360e11b81526004810183905260240161064f565b60015f838152600580840160205260409091205460ff1690811115611c2f57611c2f614951565b14611c62575f8281526005820160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614ae3565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611c9992016151b6565b6020604051808303815f875af1158015611cb5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106589190614c37565b5f611ce26127f6565b611ced823334612f5d565b9050611d0560015f8051602061572683398151915255565b919050565b611d1261474a565b5f8281525f80516020615706833981519152602052604090819020815160e0810190925280545f805160206156e6833981519152929190829060ff166005811115611d5f57611d5f614951565b6005811115611d7057611d70614951565b8152602001600182018054611d8490614ab1565b80601f0160208091040260200160405190810160405280929190818152602001828054611db090614ab1565b8015611dfb5780601f10611dd257610100808354040283529160200191611dfb565b820191905f5260205f20905b815481529060010190602001808311611dde57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f805160206156e6833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611e9c9086908690615240565b90815260200160405180910390205491505092915050565b5f80611ebe6125e9565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611ef757611ef7614951565b6003811115611f0857611f08614951565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611f7e82611d0a565b9050600283516003811115611f9557611f95614951565b14611fb6578251604051633b0d540d60e21b815261064f9190600401615122565b60208301516001600160a01b03163314612052575f8281526006850160205260409020546001600160a01b03163314611fef57336116cb565b5f82815260068501602052604090205460a082015161201e91600160b01b90046001600160401b031690614ee0565b6001600160401b03164210156120525760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b60028151600581111561206757612067614951565b036121955760028401546080840151612089916001600160401b031690614ee0565b6001600160401b03164210156120bd5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b86156120cf576120cd828761234a565b505b5f8881526007850160205260409020805460ff1916600317905560608301516080820151612108918491612103919061524f565b61319d565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561214984613374565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506119369350505050565b6004815160058111156121aa576121aa614951565b036121de576121b883613374565b5f8981526008860160205260409020556121d188612c35565b6001945050505050611936565b805160405163170cc93360e21b815261064f9190600401614ae3565b61220261350b565b6110fa81613556565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561226f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612296919081019061526f565b91509150806122b857604051636b2f19e960e01b815260040160405180910390fd5b8151156122de578151604051636ba589a560e01b8152600481019190915260240161064f565b60208201516001600160a01b03161561231a576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5092915050565b5f8061232b6125e9565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612395573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123bc919081019061526f565b91509150806123de57604051636b2f19e960e01b815260040160405180910390fd5b5f6123e76125e9565b6005810154845191925014612415578251604051636ba589a560e01b8152600481019190915260240161064f565b60208301516001600160a01b031615612451576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b60208301516001600160a01b03161561248d576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016124ca9190614c25565b6040805180830381865af41580156124e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250891906152ff565b9150915081881461252f5760405163089938b360e11b81526004810189905260240161064f565b5f8881526006840160205260409020600101546001600160401b0390811690821611156125c0575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26125de565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126176125e9565b90505f612623866135d0565b905061262e86612321565b61263d57600192505050611936565b5f8681526006830160205260409020546001600160a01b0316331461266257336116cb565b5f86815260068301602052604090205460a082015161269191600160b01b90046001600160401b031690614ee0565b6001600160401b03168160c001516001600160401b031610156126d85760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161064f565b5f85156126f0576126e9878661234a565b905061270e565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612733906113c5565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561279c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127c09190614c37565b905080846009015f8a81526020019081526020015f205f8282546127e49190615322565b90915550501515979650505050505050565b5f8051602061572683398151915280546001190161282757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61283661474a565b5f805160206156e68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6128698861220b565b604001516040518263ffffffff1660e01b81526004016128899190614c25565b6040805180830381865af41580156128a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128c79190615188565b9150915080156128ee57604051632d07135360e01b8152811515600482015260240161064f565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff9091169081111561292557612925614951565b600581111561293657612936614951565b815260200160018201805461294a90614ab1565b80601f016020809104026020016040519081016040528092919081815260200182805461297690614ab1565b80156129c15780601f10612998576101008083540402835291602001916129c1565b820191905f5260205f20905b8154815290600101906020018083116129a457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a2c57612a2c614951565b14158015612a4d5750600181516005811115612a4a57612a4a614951565b14155b15612a6e57805160405163170cc93360e21b815261064f9190600401614ae3565b600381516005811115612a8357612a83614951565b03612a915760048152612a96565b600581525b836006018160200151604051612aac9190614dbc565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612aef57612aef614951565b021790555060208201516001820190612b089082614e11565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612bae57612bae614951565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612bee6125e9565b5f838152600982016020526040812080549190559091506108de84826138b5565b61165a6001600160a01b03831682613913565b60015f8051602061572683398151915255565b5f612c3e6125e9565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c7757612c77614951565b6003811115612c8857612c88614951565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d257fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d349190614ee0565b6001600160401b0316421015612d685760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612da48388866139a6565b91509150612dbd85602001516110da87606001516113c5565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612e0d6125e9565b600281015490915061ffff600160401b90910481169086161080612e36575061271061ffff8616115b15612e5a57604051635f12e6c360e11b815261ffff8616600482015260240161064f565b60028101546001600160401b039081169085161015612e96576040516202a06d60e11b81526001600160401b038516600482015260240161064f565b8054831080612ea85750806001015483115b15612ec95760405163222d164360e21b81526004810184905260240161064f565b825f612ed482610ff6565b90505f612ee18983613a53565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f80612f676125e9565b90505f612f7384610ff6565b90505f612f7f87611d0a565b9050612f8a87612321565b612faa576040516330efa98b60e01b81526004810188905260240161064f565b600281516005811115612fbf57612fbf614951565b14612fe057805160405163170cc93360e21b815261064f9190600401614ae3565b5f828260800151612ff19190614ee0565b905083600201600a9054906101000a90046001600160401b0316826040015161301a9190614f22565b6001600160401b0316816001600160401b0316111561305757604051636d51fe0560e11b81526001600160401b038216600482015260240161064f565b5f806130638a8461319d565b915091505f8a8360405160200161309192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f80516020615706833981519152602052604081206002015481905f805160206156e683398151915290600160801b90046001600160401b03166131e58582613fc5565b5f6131ef8761422f565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613298573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132bf9190810190614bf4565b6040518263ffffffff1660e01b81526004016132db9190614c25565b6020604051808303815f875af11580156132f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061331b9190614c37565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061337e6125e9565b90505f61338e8460400151611d0a565b90505f6003825160058111156133a6576133a6614951565b14806133c457506004825160058111156133c2576133c2614951565b145b156133d4575060c0810151613411565b6002825160058111156133e9576133e9614951565b036133f5575042613411565b815160405163170cc93360e21b815261064f9190600401614ae3565b84608001516001600160401b0316816001600160401b03161161343857505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061345d906113c5565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa1580156134de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135029190614c37565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661355457604051631afcd79f60e31b815260040160405180910390fd5b565b61355e61350b565b613567816142a4565b61356f6142bd565b6110fa6060820135608083013561358c60c0850160a086016148c4565b61359c60e0860160c08701615335565b6135ad610100870160e0880161534e565b6101008701356135c561014089016101208a01614c62565b8861014001356142cd565b6135d861474a565b5f8281525f805160206157068339815191526020526040808220815160e0810190925280545f805160206156e683398151915293929190829060ff16600581111561362557613625614951565b600581111561363657613636614951565b815260200160018201805461364a90614ab1565b80601f016020809104026020016040519081016040528092919081815260200182805461367690614ab1565b80156136c15780601f10613698576101008083540402835291602001916136c1565b820191905f5260205f20905b8154815290600101906020018083116136a457829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561372f5761372f614951565b14613762575f8481526005830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614ae3565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156137a7576137a7614951565b0217905550602082015160018201906137c09082614e11565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61385e858261319d565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613901575f80fd5b505af1158015611221573d5f803e3d5ffd5b804710156139365760405163cd78605960e01b815230600482015260240161064f565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461397f576040519150601f19603f3d011682016040523d82523d5f602084013e613984565b606091505b505090508061065857604051630a12f52160e11b815260040160405180910390fd5b5f805f6139b16125e9565b5f86815260088201602052604081208054908290559192509081908015613a45575f878152600685016020526040902054612710906139fb90600160a01b900461ffff1683615171565b613a059190615103565b915081846009015f8981526020019081526020015f205f828254613a299190615322565b90915550613a399050828261536e565b9250613a4589846138b5565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613a9757604051637fab81e560e01b815260040160405180910390fd5b5f805160206156e683398151915242613ab660608601604087016148c4565b6001600160401b0316111580613af05750613ad46202a30042615322565b613ae460608601604087016148c4565b6001600160401b031610155b15613b2a57613b0560608501604086016148c4565b604051635879da1360e11b81526001600160401b03909116600482015260240161064f565b60038101546001600160401b0390613b4d90600160401b90048216858316615322565b1115613b7757604051633e1a785160e01b81526001600160401b038416600482015260240161064f565b613b8c613b876060860186615381565b6144b2565b613b9c613b876080860186615381565b6030613bab6020860186615395565b905014613bdd57613bbf6020850185615395565b6040516326475b2f60e11b815261064f925060040190815260200190565b613be78480615395565b90505f03613c1457613bf98480615395565b604051633e08a12560e11b815260040161064f9291906153d7565b5f60068201613c238680615395565b604051613c31929190615240565b90815260200160405180910390205414613c6a57613c4f8480615395565b60405163a41f772f60e01b815260040161064f9291906153d7565b613c74835f613fc5565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613cb18a80615395565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613cf9908b018b615395565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613d4260608b0160408c016148c4565b6001600160401b03168152602001613d5d60608b018b615381565b613d66906153ea565b8152602001613d7860808b018b615381565b613d81906153ea565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613daf9190615517565b5f60405180830381865af4158015613dc9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613df091908101906155ce565b5f82815260048601602052604090209193509150613e0e8282614e11565b508160068401613e1e8880615395565b604051613e2c929190615240565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613e68908590600401614c25565b6020604051808303815f875af1158015613e84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ea89190614c37565b5f8481526005860160205260409020805460ff191660011790559050613ece8780615395565b5f858152600587016020526040902060010191613eec919083615611565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613f4b8880615395565b604051613f59929190615240565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b6040016020810190613f9791906148c4565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805160206156e68339815191525f6001600160401b038084169085161115613ff957613ff2838561524f565b9050614006565b614003848461524f565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061407357506001840154815161406f916001600160401b031690615322565b8210155b1561409b576001600160401b03808416606083015282825260408201511660208201526140ba565b82816060018181516140ad9190614ee0565b6001600160401b03169052505b60608101516140ca906064614f22565b602082015160018601546001600160401b0392909216916140f59190600160401b900460ff16614f22565b6001600160401b0316101561412e57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161064f565b85816040018181516141409190614ee0565b6001600160401b031690525060408101805186919061416090839061524f565b6001600160401b03169052506001840154604082015160649161418e91600160401b90910460ff1690614f22565b6001600160401b031610156141c7576040808201519051633e1a785160e01b81526001600160401b03909116600482015260240161064f565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f805160206157068339815191526020526040812060020180545f805160206156e6833981519152919060089061427990600160401b90046001600160401b03166156ca565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6142ac61350b565b6142b461461b565b6110fa81614623565b6142c561350b565b61355461470b565b6142d561350b565b5f6142de6125e9565b905061ffff861615806142f6575061271061ffff8716115b1561431a57604051635f12e6c360e11b815261ffff8716600482015260240161064f565b8789111561433e5760405163222d164360e21b8152600481018a905260240161064f565b60ff851615806143515750600a60ff8616115b156143745760405163170db35960e31b815260ff8616600482015260240161064f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156143db576040516202a06d60e11b81526001600160401b038816600482015260240161064f565b835f036143fb5760405163a733007160e01b815260040160405180910390fd5b8161441c57604051632f6bd1db60e01b81526004810183905260240161064f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6144bf6020820182614897565b63ffffffff161580156144df57506144da6020820182614c7d565b151590505b15614526576144f16020820182614897565b6144fe6020830183614c7d565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161064f565b6145336020820182614c7d565b90506145426020830183614897565b63ffffffff16111561455b576144f16020820182614897565b60015b61456b6020830183614c7d565b905081101561165a576145816020830183614c7d565b61458c60018461536e565b81811061459b5761459b614cc2565b90506020020160208101906145b09190614c62565b6001600160a01b03166145c66020840184614c7d565b838181106145d6576145d6614cc2565b90506020020160208101906145eb9190614c62565b6001600160a01b0316101561461357604051630dbc8d5f60e31b815260040160405180910390fd5b60010161455e565b61355461350b565b61462b61350b565b80355f805160206156e68339815191529081556014614650606084016040850161534e565b60ff16118061466f575061466a606083016040840161534e565b60ff16155b156146a357614684606083016040840161534e565b604051634a59bbff60e11b815260ff909116600482015260240161064f565b6146b3606083016040840161534e565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556146e460408301602084016148c4565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c2261350b565b50805461471f90614ab1565b5f825580601f1061472e575050565b601f0160209004905f5260205f20908101906110fa9190614787565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561479b575f8155600101614788565b5090565b80151581146110fa575f80fd5b803563ffffffff81168114611d05575f80fd5b5f805f606084860312156147d1575f80fd5b8335925060208401356147e38161479f565b91506147f1604085016147ac565b90509250925092565b5f6020828403121561480a575f80fd5b5035919050565b5f6101608284031215614822575f80fd5b50919050565b5f8060408385031215614839575f80fd5b82356001600160401b0381111561484e575f80fd5b83016080818603121561485f575f80fd5b915061486d602084016147ac565b90509250929050565b5f8060408385031215614887575f80fd5b8235915061486d602084016147ac565b5f602082840312156148a7575f80fd5b611936826147ac565b6001600160401b03811681146110fa575f80fd5b5f602082840312156148d4575f80fd5b8135611936816148b0565b803561ffff81168114611d05575f80fd5b5f805f60608486031215614902575f80fd5b83356001600160401b03811115614917575f80fd5b840160a08187031215614928575f80fd5b9250614936602085016148df565b91506040840135614946816148b0565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6006811061497557614975614951565b9052565b5f5b8381101561499357818101518382015260200161497b565b50505f910152565b5f81518084526149b2816020860160208601614979565b601f01601f19169290920160200192915050565b602081526149d8602082018351614965565b5f602083015160e060408401526149f361010084018261499b565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614a57575f80fd5b82356001600160401b0380821115614a6d575f80fd5b818501915085601f830112614a80575f80fd5b813581811115614a8e575f80fd5b866020828501011115614a9f575f80fd5b60209290920196919550909350505050565b600181811c90821680614ac557607f821691505b60208210810361482257634e487b7160e01b5f52602260045260245ffd5b602081016110448284614965565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614b2757614b27614af1565b60405290565b604080519081016001600160401b0381118282101715614b2757614b27614af1565b604051601f8201601f191681016001600160401b0381118282101715614b7757614b77614af1565b604052919050565b5f6001600160401b03821115614b9757614b97614af1565b50601f01601f191660200190565b5f82601f830112614bb4575f80fd5b8151614bc7614bc282614b7f565b614b4f565b818152846020838601011115614bdb575f80fd5b614bec826020830160208701614979565b949350505050565b5f60208284031215614c04575f80fd5b81516001600160401b03811115614c19575f80fd5b614bec84828501614ba5565b602081525f611936602083018461499b565b5f60208284031215614c47575f80fd5b5051919050565b6001600160a01b03811681146110fa575f80fd5b5f60208284031215614c72575f80fd5b813561193681614c4e565b5f808335601e19843603018112614c92575f80fd5b8301803591506001600160401b03821115614cab575f80fd5b6020019150600581901b360382131561336d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614cea575f80fd5b9190910192915050565b5f82601f830112614d03575f80fd5b8135614d11614bc282614b7f565b818152846020838601011115614d25575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614d51575f80fd5b614d59614b05565b82356001600160401b0380821115614d6f575f80fd5b614d7b36838701614cf4565b83526020850135915080821115614d90575f80fd5b50614d9d36828601614cf4565b6020830152506040830135614db1816148b0565b604082015292915050565b5f8251614cea818460208701614979565b601f82111561065857805f5260205f20601f840160051c81016020851015614df25750805b601f840160051c820191505b81811015611b96575f8155600101614dfe565b81516001600160401b03811115614e2a57614e2a614af1565b614e3e81614e388454614ab1565b84614dcd565b602080601f831160018114614e71575f8415614e5a5750858301515b5f19600386901b1c1916600185901b178555611221565b5f85815260208120601f198616915b82811015614e9f57888601518255948401946001909101908401614e80565b5085821015614ebc57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561231a5761231a614ecc565b5f63ffffffff808316818103614f1857614f18614ecc565b6001019392505050565b6001600160401b03818116838216028082169190828114614f4557614f45614ecc565b505092915050565b5f808335601e19843603018112614f62575f80fd5b83016020810192503590506001600160401b03811115614f80575f80fd5b80360382131561336d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561506b57848303601f19018952813536889003605e19018112614ff2575f80fd5b870160606150008280614f4d565b8287526150108388018284614f8e565b9250505061502086830183614f4d565b86830388880152615032838284614f8e565b925050506040808301359250615047836148b0565b6001600160401b039290921694909101939093529783019790830190600101614fcd565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561509c81614c4e565b6001600160a01b031660608381019190915283013536849003601e190181126150c3575f80fd5b83016020810190356001600160401b038111156150de575f80fd5b8060051b36038213156150ef575f80fd5b60808085015261350260a085018284614fb6565b5f8261511d57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061513657615136614951565b91905290565b5f805f6060848603121561514e575f80fd5b835192506020840151615160816148b0565b6040850151909250614946816148b0565b808202811582820484141761104457611044614ecc565b5f8060408385031215615199575f80fd5b8251915060208301516151ab8161479f565b809150509250929050565b5f60208083525f84546151c881614ab1565b806020870152604060018084165f81146151e9576001811461520557615232565b60ff19851660408a0152604084151560051b8a01019550615232565b895f5260205f205f5b858110156152295781548b820186015290830190880161520e565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561231a5761231a614ecc565b5f8060408385031215615280575f80fd5b82516001600160401b0380821115615296575f80fd5b90840190606082870312156152a9575f80fd5b6152b1614b05565b8251815260208301516152c381614c4e565b60208201526040830151828111156152d9575f80fd5b6152e588828601614ba5565b60408301525080945050505060208301516151ab8161479f565b5f8060408385031215615310575f80fd5b8251915060208301516151ab816148b0565b8082018082111561104457611044614ecc565b5f60208284031215615345575f80fd5b611936826148df565b5f6020828403121561535e575f80fd5b813560ff81168114611936575f80fd5b8181038181111561104457611044614ecc565b5f8235603e19833603018112614cea575f80fd5b5f808335601e198436030181126153aa575f80fd5b8301803591506001600160401b038211156153c3575f80fd5b60200191503681900382131561336d575f80fd5b602081525f614bec602083018486614f8e565b5f604082360312156153fa575f80fd5b615402614b2d565b61540b836147ac565b81526020808401356001600160401b0380821115615427575f80fd5b9085019036601f830112615439575f80fd5b81358181111561544b5761544b614af1565b8060051b915061545c848301614b4f565b8181529183018401918481019036841115615475575f80fd5b938501935b8385101561549f578435925061548f83614c4e565b828252938501939085019061547a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561550c5784516001600160a01b031682529383019360019290920191908301906154e3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261553d61010084018261499b565b90506040840151601f198085840301606086015261555b838361499b565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261558b83836154b1565b925060a08601519150808584030160c0860152506155a982826154b1565b91505060c08401516155c660e08501826001600160401b03169052565b509392505050565b5f80604083850312156155df575f80fd5b8251915060208301516001600160401b038111156155fb575f80fd5b61560785828601614ba5565b9150509250929050565b6001600160401b0383111561562857615628614af1565b61563c836156368354614ab1565b83614dcd565b5f601f84116001811461566d575f85156156565750838201355b5f19600387901b1c1916600186901b178355611b96565b5f83815260208120601f198716915b8281101561569c578685013582556020948501946001909201910161567c565b50868210156156b8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b03808316818103614f1857614f18614ecc56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220a1e37a2b8a070dde2d3ccc3230af09ada57dfff5e494a7adaae00821ecdc3b3b64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615cff380380615cff83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615bb28061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614b84565b610724565b005b348015610263575f80fd5b50610256610272366004614bbf565b610735565b348015610282575f80fd5b50610256610291366004614bd6565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614b84565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614bed565b610aae565b34801561030a575f80fd5b50610256610319366004614c3b565b611064565b348015610329575f80fd5b5061033d610338366004614bbf565b6110d8565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614c70565b61112c565b3480156103d9575f80fd5b506102566103e8366004614b84565b61113f565b3480156103f8575f80fd5b50610256610407366004614cbe565b61114b565b348015610417575f80fd5b50610256610426366004614c70565b611230565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614c3b565b61123c565b34801561047e575f80fd5b5061049261048d366004614ceb565b611504565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614bbf565b611524565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614b84565b611538565b3480156104fc575f80fd5b5061025661050b366004614c70565b611544565b34801561051b575f80fd5b5061025661052a366004614c3b565b611550565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614d06565b61178a565b34801561056d575f80fd5b5061025661057c366004614bbf565b61186b565b34801561058c575f80fd5b5061025661059b366004614c70565b6118ff565b3480156105ab575f80fd5b506102566105ba366004614cbe565b61190b565b6104926105cd366004614d45565b611b01565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614bbf565b611b35565b348015610649575f80fd5b506104925f80516020615b1d83398151915281565b348015610669575f80fd5b50610256610678366004614bbf565b611d8e565b61049261068b366004614bbf565b611eca565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614bbf565b611efb565b6040516102b89190614e1b565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614d06565b61204a565b348015610710575f80fd5b5061049261071f366004614e9b565b612111565b6107308383835f61216c565b505050565b5f8181525f80516020615b3d8339815191526020526040808220815160e0810190925280545f80516020615b1d83398151915293929190829060ff16600581111561078257610782614da6565b600581111561079357610793614da6565b81526020016001820180546107a790614f06565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614f06565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614da6565b146108c5575f8381526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f38565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190615041565b6040518263ffffffff1660e01b815260040161097f9190615072565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190615084565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5683612198565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f6121a9565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615b1d8339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190615084565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba1606085016040860161509b565b6001600160a01b031614610be457610bbf606084016040850161509b565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf260608501856150b6565b905090505f805b828163ffffffff161015610e5a575f610c1560608801886150b6565b8363ffffffff16818110610c2b57610c2b6150fb565b9050602002810190610c3d919061510f565b610c469061517a565b80516040519192505f916006880191610c5e916151f5565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401615072565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd7916151f5565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190615084565b90508086600601835f0151604051610d2d91906151f5565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6d908261524a565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610ded9085615319565b8251604051919550610dfe916151f5565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e5390615339565b9050610bf9565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e9d910460ff168361535b565b6001600160401b03161015610ed057604051633e1a785160e01b81526001600160401b03821660048201526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ef4876124de565b604001516040518263ffffffff1660e01b8152600401610f149190615072565b602060405180830381865af4158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f539190615084565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f8d91906154b1565b5f60405180830381865af4158015610fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fce9190810190615041565b90505f600282604051610fe191906151f5565b602060405180830381855afa158015610ffc573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061101f9190615084565b905082811461104b5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506007909201805460ff1916600117905550505050565b61106d826125f4565b61108d576040516330efa98b60e01b8152600481018390526024016108bc565b5f61109783611efb565b51905060028160058111156110ae576110ae614da6565b146110ce578060405163170cc93360e21b81526004016108bc9190614f38565b6109bf838361261d565b5f806110e26128bc565b600301546110f09084615545565b905080158061110557506001600160401b0381115b156111265760405163222d164360e21b8152600481018490526024016108bc565b92915050565b611138848484846121a9565b5050505050565b6109bf8383835f6128e0565b611153612b02565b5f61115c6128bc565b90505f8061116984612b39565b91509150611176826125f4565b61118257505050611217565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111b95750806111d7565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111ec576111ec614da6565b036111fb576111fb8185612ef1565b6112118261120c8560400151611504565b612f1b565b50505050505b61122d60015f80516020615b5d83398151915255565b50565b6109bf84848484612f41565b5f6112456128bc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561127e5761127e614da6565b600381111561128f5761128f614da6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61130582611efb565b905060018351600381111561131c5761131c614da6565b1461133d578251604051633b0d540d60e21b81526108bc9190600401615564565b60048151600581111561135257611352614da6565b036113685761136086612f6d565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61138d896124de565b604001516040518263ffffffff1660e01b81526004016113ad9190615072565b606060405180830381865af41580156113c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ec919061557e565b509150915081841461141957846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114525750806001600160401b03168560a001516001600160401b0316115b1561147b57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61150d6128bc565b60030154611126906001600160401b0384166155b3565b5f61152e82611efb565b6080015192915050565b6107308383835f612f41565b611138848484846128e0565b611558612b02565b5f6115616128bc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561159a5761159a614da6565b60038111156115ab576115ab614da6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561162457611624614da6565b14611645578051604051633b0d540d60e21b81526108bc9190600401615564565b60046116548260400151611efb565b51600581111561166657611666614da6565b14611765575f611675846124de565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116b49190615072565b606060405180830381865af41580156116cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f3919061557e565b50915091508184604001511461171f5760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561176157604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61176e84612f6d565b505061178660015f80516020615b5d83398151915255565b5050565b5f6117936128bc565b90506001600160a01b0382166117c75760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b0316331461180d57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b0383160361183c575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6118746128bc565b90505f61188083611efb565b519050600481600581111561189757611897614da6565b146118b7578060405163170cc93360e21b81526004016108bc9190614f38565b5f8381526006830160205260409020546001600160a01b031633146118dc57336117e8565b5f838152600683016020526040902054610730906001600160a01b031684612ef1565b6109bf8484848461216c565b5f80516020615b1d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61193e866124de565b604001516040518263ffffffff1660e01b815260040161195e9190615072565b6040805180830381865af4158015611978573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199c91906155ca565b91509150806119c257604051632d07135360e01b815281151560048201526024016108bc565b5f828152600484016020526040902080546119dc90614f06565b90505f03611a005760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580860160205260409091205460ff1690811115611a2757611a27614da6565b14611a5a575f8281526005840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f38565b5f8281526004840160205260408120611a7291614ad8565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611b0a612b02565b611b168484843461317a565b9050611b2e60015f80516020615b5d83398151915255565b9392505050565b5f611b3e6128bc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b7757611b77614da6565b6003811115611b8857611b88614da6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611c0157611c01614da6565b14158015611c225750600381516003811115611c1f57611c1f614da6565b14155b15611c43578051604051633b0d540d60e21b81526108bc9190600401615564565b5f611c518260400151611efb565b905080606001516001600160401b03165f03611c83576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cf193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611d0b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d329190810190615041565b6040518263ffffffff1660e01b8152600401611d4e9190615072565b6020604051808303815f875af1158015611d6a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111389190615084565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615b1d8339815191529190611dd590614f06565b90505f03611df95760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580840160205260409091205460ff1690811115611e2057611e20614da6565b14611e53575f8281526005820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f38565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e8a92016155ed565b6020604051808303815f875af1158015611ea6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190615084565b5f611ed3612b02565b611ede8233346132d4565b9050611ef660015f80516020615b5d83398151915255565b919050565b611f03614b0f565b5f8281525f80516020615b3d833981519152602052604090819020815160e0810190925280545f80516020615b1d833981519152929190829060ff166005811115611f5057611f50614da6565b6005811115611f6157611f61614da6565b8152602001600182018054611f7590614f06565b80601f0160208091040260200160405190810160405280929190818152602001828054611fa190614f06565b8015611fec5780601f10611fc357610100808354040283529160200191611fec565b820191905f5260205f20905b815481529060010190602001808311611fcf57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b03811661207c5760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f6120856128bc565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146120b357336117e8565b336001600160a01b038316036120e2575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615b1d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906121549086908690615677565b90815260200160405180910390205491505092915050565b612178848484846121a9565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b6121a0613514565b61122d8161355f565b5f806121b36128bc565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121ec576121ec614da6565b60038111156121fd576121fd614da6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61227382611efb565b905060028351600381111561228a5761228a614da6565b146122ab578251604051633b0d540d60e21b81526108bc9190600401615564565b60208301516001600160a01b03163314612347575f8281526006850160205260409020546001600160a01b031633146122e457336117e8565b5f82815260068501602052604090205460a082015161231391600160b01b90046001600160401b031690615319565b6001600160401b03164210156123475760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561235c5761235c614da6565b0361247e576002840154608084015161237e916001600160401b031690615319565b6001600160401b03164210156123b25760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123c4576123c2828861261d565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123fd9184916123f89190615686565b6135d9565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561244084888c6137b0565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124d69350505050565b60048151600581111561249357612493614da6565b036124ba576124a383878b6137b0565b506124ad89612f6d565b60019450505050506124d6565b805160405163170cc93360e21b81526108bc9190600401614f38565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612542573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261256991908101906156a6565b915091508061258b57604051636b2f19e960e01b815260040160405180910390fd5b8151156125b1578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b0316156125ed576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f806125fe6128bc565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612668573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261268f91908101906156a6565b91509150806126b157604051636b2f19e960e01b815260040160405180910390fd5b5f6126ba6128bc565b60058101548451919250146126e8578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b031615612724576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b031615612760576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161279d9190615072565b6040805180830381865af41580156127b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127db9190615736565b915091508188146128025760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612893575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26128b1565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128ea6128bc565b90505f6128f687613995565b9050612901876125f4565b612910576001925050506124d6565b5f8781526006830160205260409020546001600160a01b0316331461293557336117e8565b5f87815260068301602052604090205460a082015161296491600160b01b90046001600160401b031690615319565b6001600160401b03168160c001516001600160401b031610156129ab5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129c3576129bc888761261d565b90506129e1565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a0690611504565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612a6f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a939190615084565b90508084600a015f8b81526020019081526020015f205f828254612ab79190615759565b90915550506001600160a01b03861615612af4575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615b5d833981519152805460011901612b3357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612b42614b0f565b5f80516020615b1d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b75886124de565b604001516040518263ffffffff1660e01b8152600401612b959190615072565b6040805180830381865af4158015612baf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bd391906155ca565b915091508015612bfa57604051632d07135360e01b815281151560048201526024016108bc565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612c3157612c31614da6565b6005811115612c4257612c42614da6565b8152602001600182018054612c5690614f06565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8290614f06565b8015612ccd5780601f10612ca457610100808354040283529160200191612ccd565b820191905f5260205f20905b815481529060010190602001808311612cb057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d3857612d38614da6565b14158015612d595750600181516005811115612d5657612d56614da6565b14155b15612d7a57805160405163170cc93360e21b81526108bc9190600401614f38565b600381516005811115612d8f57612d8f614da6565b03612d9d5760048152612da2565b600581525b836006018160200151604051612db891906151f5565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612dfb57612dfb614da6565b021790555060208201516001820190612e14908261524a565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612eba57612eba614da6565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612efa6128bc565b5f838152600a82016020526040812080549190559091506109bf8482613c7a565b6117866001600160a01b03831682613cd8565b60015f80516020615b5d83398151915255565b612f4d848484846128e0565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f766128bc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612faf57612faf614da6565b6003811115612fc057612fc0614da6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061305d7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161306c9190615319565b6001600160401b03164210156130a05760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130f05750602082015161310e565b5f858152600985016020526040902080546001600160a01b03191690555b5f8061311b838886613d6b565b91509150613134856020015161120c8760600151611504565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131846128bc565b600281015490915061ffff600160401b909104811690861610806131ad575061271061ffff8616115b156131d157604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b03908116908516101561320d576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b805483108061321f5750806001015483115b156132405760405163222d164360e21b8152600481018490526024016108bc565b825f61324b826110d8565b90505f6132588983613e18565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f806132de6128bc565b90505f6132ea846110d8565b90505f6132f687611efb565b9050613301876125f4565b613321576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561333657613336614da6565b1461335757805160405163170cc93360e21b81526108bc9190600401614f38565b5f8282608001516133689190615319565b905083600201600a9054906101000a90046001600160401b03168260400151613391919061535b565b6001600160401b0316816001600160401b031611156133ce57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806133da8a846135d9565b915091505f8a8360405160200161340892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661355d57604051631afcd79f60e31b815260040160405180910390fd5b565b613567613514565b6135708161438a565b6135786143a3565b61122d6060820135608083013561359560c0850160a08601614ceb565b6135a560e0860160c0870161576c565b6135b6610100870160e08801615785565b6101008701356135ce61014089016101208a0161509b565b8861014001356143b3565b5f8281525f80516020615b3d833981519152602052604081206002015481905f80516020615b1d83398151915290600160801b90046001600160401b03166136218582614598565b5f61362b87614802565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156136d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136fb9190810190615041565b6040518263ffffffff1660e01b81526004016137179190615072565b6020604051808303815f875af1158015613733573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137579190615084565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806137ba6128bc565b90505f6137ca8660400151611efb565b90505f6003825160058111156137e2576137e2614da6565b148061380057506004825160058111156137fe576137fe614da6565b145b15613810575060c081015161384d565b60028251600581111561382557613825614da6565b0361383157504261384d565b815160405163170cc93360e21b81526108bc9190600401614f38565b86608001516001600160401b0316816001600160401b031611613875575f9350505050611b2e565b600483015460608801515f916001600160a01b031690634f22429f9061389a90611504565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561391b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393f9190615084565b5f878152600886016020526040902081905590506001600160a01b038716156128b1575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61399d614b0f565b5f8281525f80516020615b3d8339815191526020526040808220815160e0810190925280545f80516020615b1d83398151915293929190829060ff1660058111156139ea576139ea614da6565b60058111156139fb576139fb614da6565b8152602001600182018054613a0f90614f06565b80601f0160208091040260200160405190810160405280929190818152602001828054613a3b90614f06565b8015613a865780601f10613a5d57610100808354040283529160200191613a86565b820191905f5260205f20905b815481529060010190602001808311613a6957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613af457613af4614da6565b14613b27575f8481526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f38565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613b6c57613b6c614da6565b021790555060208201516001820190613b85908261524a565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613c2385826135d9565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613cc6575f80fd5b505af1158015611360573d5f803e3d5ffd5b80471015613cfb5760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d44576040519150601f19603f3d011682016040523d82523d5f602084013e613d49565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d766128bc565b5f86815260088201602052604081208054908290559192509081908015613e0a575f87815260068501602052604090205461271090613dc090600160a01b900461ffff16836155b3565b613dca9190615545565b91508184600a015f8981526020019081526020015f205f828254613dee9190615759565b90915550613dfe905082826157a5565b9250613e0a8984613c7a565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613e5c57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615b1d83398151915242613e7b6060860160408701614ceb565b6001600160401b0316111580613eb55750613e996202a30042615759565b613ea96060860160408701614ceb565b6001600160401b031610155b15613eef57613eca6060850160408601614ceb565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b60038101546001600160401b0390613f1290600160401b90048216858316615759565b1115613f3c57604051633e1a785160e01b81526001600160401b03841660048201526024016108bc565b613f51613f4c60608601866157b8565b614877565b613f61613f4c60808601866157b8565b6030613f7060208601866157cc565b905014613fa257613f8460208501856157cc565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613fac84806157cc565b90505f03613fd957613fbe84806157cc565b604051633e08a12560e11b81526004016108bc92919061580e565b5f60068201613fe886806157cc565b604051613ff6929190615677565b9081526020016040518091039020541461402f5761401484806157cc565b60405163a41f772f60e01b81526004016108bc92919061580e565b614039835f614598565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016140768a806157cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020908101906140be908b018b6157cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161410760608b0160408c01614ceb565b6001600160401b0316815260200161412260608b018b6157b8565b61412b90615821565b815260200161413d60808b018b6157b8565b61414690615821565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401614174919061594e565b5f60405180830381865af415801561418e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b59190810190615a05565b5f828152600486016020526040902091935091506141d3828261524a565b5081600684016141e388806157cc565b6040516141f1929190615677565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061422d908590600401615072565b6020604051808303815f875af1158015614249573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061426d9190615084565b5f8481526005860160205260409020805460ff19166001179055905061429387806157cc565b5f8581526005870160205260409020600101916142b1919083615a48565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff191690558061431088806157cc565b60405161431e929190615677565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b604001602081019061435c9190614ceb565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b614392613514565b61439a6149e0565b61122d816149e8565b6143ab613514565b61355d614ad0565b6143bb613514565b5f6143c46128bc565b905061ffff861615806143dc575061271061ffff8716115b1561440057604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156144245760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806144375750600a60ff8616115b1561445a5760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156144c1576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144e15760405163a733007160e01b815260040160405180910390fd5b8161450257604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615b1d8339815191525f6001600160401b0380841690851611156145cc576145c58385615686565b90506145d9565b6145d68484615686565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614646575060018401548151614642916001600160401b031690615759565b8210155b1561466e576001600160401b038084166060830152828252604082015116602082015261468d565b82816060018181516146809190615319565b6001600160401b03169052505b606081015161469d90606461535b565b602082015160018601546001600160401b0392909216916146c89190600160401b900460ff1661535b565b6001600160401b0316101561470157606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b85816040018181516147139190615319565b6001600160401b0316905250604081018051869190614733908390615686565b6001600160401b03169052506001840154604082015160649161476191600160401b90910460ff169061535b565b6001600160401b0316101561479a576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016108bc565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615b3d8339815191526020526040812060020180545f80516020615b1d833981519152919060089061484c90600160401b90046001600160401b0316615b01565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6148846020820182614cbe565b63ffffffff161580156148a4575061489f60208201826150b6565b151590505b156148eb576148b66020820182614cbe565b6148c360208301836150b6565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148f860208201826150b6565b90506149076020830183614cbe565b63ffffffff161115614920576148b66020820182614cbe565b60015b61493060208301836150b6565b90508110156117865761494660208301836150b6565b6149516001846157a5565b818110614960576149606150fb565b9050602002016020810190614975919061509b565b6001600160a01b031661498b60208401846150b6565b8381811061499b5761499b6150fb565b90506020020160208101906149b0919061509b565b6001600160a01b031610156149d857604051630dbc8d5f60e31b815260040160405180910390fd5b600101614923565b61355d613514565b6149f0613514565b80355f80516020615b1d8339815191529081556014614a156060840160408501615785565b60ff161180614a345750614a2f6060830160408401615785565b60ff16155b15614a6857614a496060830160408401615785565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b614a786060830160408401615785565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa96040830160208401614ceb565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612f2e613514565b508054614ae490614f06565b5f825580601f10614af3575050565b601f0160209004905f5260205f209081019061122d9190614b4c565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b60575f8155600101614b4d565b5090565b801515811461122d575f80fd5b803563ffffffff81168114611ef6575f80fd5b5f805f60608486031215614b96575f80fd5b833592506020840135614ba881614b64565b9150614bb660408501614b71565b90509250925092565b5f60208284031215614bcf575f80fd5b5035919050565b5f6101608284031215614be7575f80fd5b50919050565b5f8060408385031215614bfe575f80fd5b82356001600160401b03811115614c13575f80fd5b830160808186031215614c24575f80fd5b9150614c3260208401614b71565b90509250929050565b5f8060408385031215614c4c575f80fd5b82359150614c3260208401614b71565b6001600160a01b038116811461122d575f80fd5b5f805f8060808587031215614c83575f80fd5b843593506020850135614c9581614b64565b9250614ca360408601614b71565b91506060850135614cb381614c5c565b939692955090935050565b5f60208284031215614cce575f80fd5b611b2e82614b71565b6001600160401b038116811461122d575f80fd5b5f60208284031215614cfb575f80fd5b8135611b2e81614cd7565b5f8060408385031215614d17575f80fd5b823591506020830135614d2981614c5c565b809150509250929050565b803561ffff81168114611ef6575f80fd5b5f805f60608486031215614d57575f80fd5b83356001600160401b03811115614d6c575f80fd5b840160a08187031215614d7d575f80fd5b9250614d8b60208501614d34565b91506040840135614d9b81614cd7565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614dca57614dca614da6565b9052565b5f5b83811015614de8578181015183820152602001614dd0565b50505f910152565b5f8151808452614e07816020860160208601614dce565b601f01601f19169290920160200192915050565b60208152614e2d602082018351614dba565b5f602083015160e06040840152614e48610100840182614df0565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614eac575f80fd5b82356001600160401b0380821115614ec2575f80fd5b818501915085601f830112614ed5575f80fd5b813581811115614ee3575f80fd5b866020828501011115614ef4575f80fd5b60209290920196919550909350505050565b600181811c90821680614f1a57607f821691505b602082108103614be757634e487b7160e01b5f52602260045260245ffd5b602081016111268284614dba565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f7c57614f7c614f46565b60405290565b604080519081016001600160401b0381118282101715614f7c57614f7c614f46565b604051601f8201601f191681016001600160401b0381118282101715614fcc57614fcc614f46565b604052919050565b5f6001600160401b03821115614fec57614fec614f46565b50601f01601f191660200190565b5f82601f830112615009575f80fd5b815161501c61501782614fd4565b614fa4565b818152846020838601011115615030575f80fd5b6124d6826020830160208701614dce565b5f60208284031215615051575f80fd5b81516001600160401b03811115615066575f80fd5b6124d684828501614ffa565b602081525f611b2e6020830184614df0565b5f60208284031215615094575f80fd5b5051919050565b5f602082840312156150ab575f80fd5b8135611b2e81614c5c565b5f808335601e198436030181126150cb575f80fd5b8301803591506001600160401b038211156150e4575f80fd5b6020019150600581901b36038213156137a9575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615123575f80fd5b9190910192915050565b5f82601f83011261513c575f80fd5b813561514a61501782614fd4565b81815284602083860101111561515e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561518a575f80fd5b615192614f5a565b82356001600160401b03808211156151a8575f80fd5b6151b43683870161512d565b835260208501359150808211156151c9575f80fd5b506151d63682860161512d565b60208301525060408301356151ea81614cd7565b604082015292915050565b5f8251615123818460208701614dce565b601f82111561073057805f5260205f20601f840160051c8101602085101561522b5750805b601f840160051c820191505b81811015611138575f8155600101615237565b81516001600160401b0381111561526357615263614f46565b615277816152718454614f06565b84615206565b602080601f8311600181146152aa575f84156152935750858301515b5f19600386901b1c1916600185901b178555611360565b5f85815260208120601f198616915b828110156152d8578886015182559484019460019091019084016152b9565b50858210156152f557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156125ed576125ed615305565b5f63ffffffff80831681810361535157615351615305565b6001019392505050565b6001600160401b0381811683821602808216919082811461537e5761537e615305565b505092915050565b5f808335601e1984360301811261539b575f80fd5b83016020810192503590506001600160401b038111156153b9575f80fd5b8036038213156137a9575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156154a457848303601f19018952813536889003605e1901811261542b575f80fd5b870160606154398280615386565b82875261544983880182846153c7565b9250505061545986830183615386565b8683038888015261546b8382846153c7565b92505050604080830135925061548083614cd7565b6001600160401b039290921694909101939093529783019790830190600101615406565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154d581614c5c565b6001600160a01b031660608381019190915283013536849003601e190181126154fc575f80fd5b83016020810190356001600160401b03811115615517575f80fd5b8060051b3603821315615528575f80fd5b60808085015261553c60a0850182846153ef565b95945050505050565b5f8261555f57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061557857615578614da6565b91905290565b5f805f60608486031215615590575f80fd5b8351925060208401516155a281614cd7565b6040850151909250614d9b81614cd7565b808202811582820484141761112657611126615305565b5f80604083850312156155db575f80fd5b825191506020830151614d2981614b64565b5f60208083525f84546155ff81614f06565b806020870152604060018084165f8114615620576001811461563c57615669565b60ff19851660408a0152604084151560051b8a01019550615669565b895f5260205f205f5b858110156156605781548b8201860152908301908801615645565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156125ed576125ed615305565b5f80604083850312156156b7575f80fd5b82516001600160401b03808211156156cd575f80fd5b90840190606082870312156156e0575f80fd5b6156e8614f5a565b8251815260208301516156fa81614c5c565b6020820152604083015182811115615710575f80fd5b61571c88828601614ffa565b6040830152508094505050506020830151614d2981614b64565b5f8060408385031215615747575f80fd5b825191506020830151614d2981614cd7565b8082018082111561112657611126615305565b5f6020828403121561577c575f80fd5b611b2e82614d34565b5f60208284031215615795575f80fd5b813560ff81168114611b2e575f80fd5b8181038181111561112657611126615305565b5f8235603e19833603018112615123575f80fd5b5f808335601e198436030181126157e1575f80fd5b8301803591506001600160401b038211156157fa575f80fd5b6020019150368190038213156137a9575f80fd5b602081525f6124d66020830184866153c7565b5f60408236031215615831575f80fd5b615839614f82565b61584283614b71565b81526020808401356001600160401b038082111561585e575f80fd5b9085019036601f830112615870575f80fd5b81358181111561588257615882614f46565b8060051b9150615893848301614fa4565b81815291830184019184810190368411156158ac575f80fd5b938501935b838510156158d657843592506158c683614c5c565b82825293850193908501906158b1565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156159435784516001600160a01b0316825293830193600192909201919083019061591a565b509695505050505050565b60208152815160208201525f602083015160e06040840152615974610100840182614df0565b90506040840151601f19808584030160608601526159928383614df0565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159c283836158e8565b925060a08601519150808584030160c0860152506159e082826158e8565b91505060c08401516159fd60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615a16575f80fd5b8251915060208301516001600160401b03811115615a32575f80fd5b615a3e85828601614ffa565b9150509250929050565b6001600160401b03831115615a5f57615a5f614f46565b615a7383615a6d8354614f06565b83615206565b5f601f841160018114615aa4575f8515615a8d5750838201355b5f19600387901b1c1916600186901b178355611138565b5f83815260208120601f198716915b82811015615ad35786850135825560209485019460019092019101615ab3565b5086821015615aef575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036153515761535161530556fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220e7d702905a85000bf3f7765bc5fbb13ff99da49a3cdfb4be122e77e64d8837f264736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -804,6 +804,48 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) Weight return _NativeTokenStakingManager.Contract.WeightToValue(&_NativeTokenStakingManager.CallOpts, weight) } +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ChangeDelegatorRewardRecipient(opts *bind.TransactOpts, delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "changeDelegatorRewardRecipient", delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ChangeValidatorRewardRecipient(opts *bind.TransactOpts, validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "changeValidatorRewardRecipient", validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + // ClaimDelegationFees is a paid mutator transaction binding the contract method 0x93e24598. // // Solidity: function claimDelegationFees(bytes32 validationID) returns() @@ -930,6 +972,27 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Fo return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. // // Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -951,6 +1014,27 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Fo return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // Initialize is a paid mutator transaction binding the contract method 0x0ba512d1. // // Solidity: function initialize(((bytes32,uint64,uint8),uint256,uint256,uint64,uint16,uint8,uint256,address,bytes32) settings) returns() @@ -1014,25 +1098,67 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) In return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } // InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0xaf2f5feb. diff --git a/contracts/ictt/audits/OpenZeppelin Audit (June 26th 2024).pdf b/audits/ICTT Audit (June 26th 2024) - OpenZeppelin.pdf similarity index 100% rename from contracts/ictt/audits/OpenZeppelin Audit (June 26th 2024).pdf rename to audits/ICTT Audit (June 26th 2024) - OpenZeppelin.pdf diff --git a/audits/README.md b/audits/README.md new file mode 100644 index 000000000..544b8bf82 --- /dev/null +++ b/audits/README.md @@ -0,0 +1,12 @@ +# Audits + +Below is the list of most recent audit for contracts in this repo. Please check out __only__ listed audited versions for production code. Code used should be the final commit audited. + +See `audits/historical` for older audits. These audits may now be obsolete, and legacy code superseded by new versions are __not__ recommended for production deployments. + +| Date | Commit | Auditor | Scope | Links | +| ------------ | ---------- | ------------ | -------------------- | ----------------------------------------------------------- | +| Nov 2023 | `6ba46565` | OpenZeppelin | All contracts in the top-level of `contracts/teleporter/` | [🔗](./Teleporter%20Audit%20(November%2016th%202023)%20-%20OpenZeppelin.pdf) | +| Jan 2024 | `9fcdf42d` | Louis | Some contracts in `contracts/teleporter/registry` and `contracts/utilities`, see audit for details | [🔗](./Teleporter%20Upgradeable%20Audit%20(January%2010th%202024)%20-%20Louis.pdf) | +| Jun 2024 | `9e03a1e5` | OpenZeppelin | All contracts in `contracts/ictt/` excluding `mocks/` | [🔗](./ICTT%20Audit%20(June%2026th%202024)%20-%20OpenZeppelin.pdf) | +| Oct 2024 | `93920df6` | OpenZeppelin | All contracts in `contracts/validator-manager/` | [🔗](./Validator%20Manager%20Audit%20(October%2030th%202024)%20-%20OpenZeppelin.pdf) | \ No newline at end of file diff --git a/audits/Validator Manager Audit (October 30th 2024) - OpenZeppelin.pdf b/audits/Validator Manager Audit (October 30th 2024) - OpenZeppelin.pdf new file mode 100644 index 000000000..5bb5e3e8f Binary files /dev/null and b/audits/Validator Manager Audit (October 30th 2024) - OpenZeppelin.pdf differ diff --git a/audits/Bridge Smart Contracts Audit Report (July 7th 2023) - Least Authority .pdf b/audits/historical/Bridge Smart Contracts Audit Report (July 7th 2023) - Least Authority .pdf similarity index 100% rename from audits/Bridge Smart Contracts Audit Report (July 7th 2023) - Least Authority .pdf rename to audits/historical/Bridge Smart Contracts Audit Report (July 7th 2023) - Least Authority .pdf diff --git a/audits/Teleporter Audit (October 20 2023) - Louis.pdf b/audits/historical/Teleporter Audit (October 20 2023) - Louis.pdf similarity index 100% rename from audits/Teleporter Audit (October 20 2023) - Louis.pdf rename to audits/historical/Teleporter Audit (October 20 2023) - Louis.pdf diff --git a/contracts/ictt/audits/README.md b/contracts/ictt/audits/README.md deleted file mode 100644 index 2d8c0cb3f..000000000 --- a/contracts/ictt/audits/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Audits - -Please check out __only__ listed audited version for production code. - -| Date | Version | Commit | Auditor | Scope | Links | -| ------------ | ------- | ---------- | ------------ | -------------------- | ----------------------------------------------------------- | -| June 2024 | v1.0.0 | `9e03a1e5` | OpenZeppelin | All contracts in `contracts/ictt/` excluding `mocks/` | [🔗](./OpenZeppelin%20Audit%20(June%2026th%202024).pdf) | - diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index e50f814dc..1388ffc86 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -65,8 +65,10 @@ abstract contract PoSValidatorManager is mapping(bytes32 delegationID => Delegator) _delegatorStakes; /// @notice Maps the delegation ID to its pending staking rewards. mapping(bytes32 delegationID => uint256) _redeemableDelegatorRewards; + mapping(bytes32 delegationID => address) _delegatorRewardRecipients; /// @notice Maps the validation ID to its pending staking rewards. mapping(bytes32 validationID => uint256) _redeemableValidatorRewards; + mapping(bytes32 validationID => address) _rewardRecipients; } // solhint-enable private-vars-leading-underscore @@ -84,6 +86,7 @@ abstract contract PoSValidatorManager is error InvalidDelegationID(bytes32 delegationID); error InvalidDelegatorStatus(DelegatorStatus status); error InvalidNonce(uint64 nonce); + error InvalidRewardRecipient(address rewardRecipient); error InvalidStakeAmount(uint256 stakeAmount); error InvalidMinStakeDuration(uint64 minStakeDuration); error InvalidStakeMultiplier(uint8 maximumStakeMultiplier); @@ -213,7 +216,36 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - if (!_initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex)) { + _initializeEndValidationWithCheck( + validationID, includeUptimeProof, messageIndex, address(0) + ); + } + + /** + * @notice See {IPoSValidatorManager-initializeEndValidation}. + */ + function initializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + _initializeEndValidationWithCheck( + validationID, includeUptimeProof, messageIndex, rewardRecipient + ); + } + + function _initializeEndValidationWithCheck( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) internal { + if ( + !_initializeEndPoSValidation( + validationID, includeUptimeProof, messageIndex, rewardRecipient + ) + ) { revert ValidatorIneligibleForRewards(validationID); } } @@ -227,7 +259,62 @@ abstract contract PoSValidatorManager is uint32 messageIndex ) external { // Ignore the return value here to force end validation, regardless of possible missed rewards - _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex); + _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, address(0)); + } + + /** + * @notice See {IPoSValidatorManager-forceInitializeEndValidation}. + */ + function forceInitializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + // Ignore the return value here to force end validation, regardless of possible missed rewards + _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, rewardRecipient); + } + + function changeValidatorRewardRecipient( + bytes32 validationID, + address rewardRecipient + ) external { + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + + if (rewardRecipient == address(0)) { + revert InvalidRewardRecipient(rewardRecipient); + } + + if ($._posValidatorInfo[validationID].owner != _msgSender()) { + revert UnauthorizedOwner(_msgSender()); + } + + if (rewardRecipient == _msgSender()) { + delete $._rewardRecipients[validationID]; + } else { + $._rewardRecipients[validationID] = rewardRecipient; + } + } + + function changeDelegatorRewardRecipient( + bytes32 delegationID, + address rewardRecipient + ) external { + if (rewardRecipient == address(0)) { + revert InvalidRewardRecipient(rewardRecipient); + } + + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + + if ($._delegatorStakes[delegationID].owner != _msgSender()) { + revert UnauthorizedOwner(_msgSender()); + } + + if (rewardRecipient == _msgSender()) { + delete $._delegatorRewardRecipients[delegationID]; + } else { + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + } } /** @@ -238,7 +325,8 @@ abstract contract PoSValidatorManager is function _initializeEndPoSValidation( bytes32 validationID, bool includeUptimeProof, - uint32 messageIndex + uint32 messageIndex, + address rewardRecipient ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); @@ -278,6 +366,11 @@ abstract contract PoSValidatorManager is uptimeSeconds: uptimeSeconds }); $._redeemableValidatorRewards[validationID] += reward; + + if (rewardRecipient != address(0)) { + $._rewardRecipients[validationID] = rewardRecipient; + } + return (reward > 0); } @@ -296,9 +389,18 @@ abstract contract PoSValidatorManager is } address owner = $._posValidatorInfo[validationID].owner; + + address rewardRecipient = $._rewardRecipients[validationID]; + + if (rewardRecipient == address(0)) { + rewardRecipient = owner; + } else { + delete $._rewardRecipients[validationID]; + } + // The validator can either be Completed or Invalidated here. We only grant rewards for Completed. if (validator.status == ValidatorStatus.Completed) { - _withdrawValidationRewards(owner, validationID); + _withdrawValidationRewards(rewardRecipient, validationID); } // The stake is unlocked whether the validation period is completed or invalidated. @@ -526,7 +628,36 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - if (!_initializeEndDelegation(delegationID, includeUptimeProof, messageIndex)) { + _initializeEndDelegationWithCheck( + delegationID, includeUptimeProof, messageIndex, address(0) + ); + } + + /** + * @notice See {IPoSValidatorManager-initializeEndDelegation}. + */ + function initializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + _initializeEndDelegationWithCheck( + delegationID, includeUptimeProof, messageIndex, rewardRecipient + ); + } + + function _initializeEndDelegationWithCheck( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) internal { + if ( + !_initializeEndDelegation( + delegationID, includeUptimeProof, messageIndex, rewardRecipient + ) + ) { revert DelegatorIneligibleForRewards(delegationID); } } @@ -540,7 +671,20 @@ abstract contract PoSValidatorManager is uint32 messageIndex ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex); + _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, address(0)); + } + + /** + * @notice See {IPoSValidatorManager-forceInitializeEndDelegation}. + */ + function forceInitializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + // Ignore the return value here to force end delegation, regardless of possible missed rewards + _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient); } /** @@ -551,7 +695,8 @@ abstract contract PoSValidatorManager is function _initializeEndDelegation( bytes32 delegationID, bool includeUptimeProof, - uint32 messageIndex + uint32 messageIndex, + address rewardRecipient ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); @@ -598,8 +743,8 @@ abstract contract PoSValidatorManager is ($._delegatorStakes[delegationID].endingNonce,) = _setValidatorWeight(validationID, validator.weight - delegator.weight); - uint256 reward = _calculateDelegationReward(delegator); - $._redeemableDelegatorRewards[delegationID] = reward; + uint256 reward = + _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); emit DelegatorRemovalInitialized({ delegationID: delegationID, @@ -607,8 +752,7 @@ abstract contract PoSValidatorManager is }); return (reward > 0); } else if (validator.status == ValidatorStatus.Completed) { - $._redeemableDelegatorRewards[delegationID] = _calculateDelegationReward(delegator); - + _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); _completeEndDelegation(delegationID); // If the validator has completed, then no further uptimes may be submitted, so we always // end the delegation. @@ -619,11 +763,12 @@ abstract contract PoSValidatorManager is } /// @dev Calculates the reward owed to the delegator based on the state of the delegator and its corresponding validator. - function _calculateDelegationReward(Delegator memory delegator) - private - view - returns (uint256) - { + /// then set the reward and reward recipient in the storage. + function _calculateAndSetDelegationReward( + Delegator memory delegator, + address rewardRecipient, + bytes32 delegationID + ) private returns (uint256) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Validator memory validator = getValidator(delegator.validationID); @@ -645,13 +790,21 @@ abstract contract PoSValidatorManager is return 0; } - return $._rewardCalculator.calculateReward({ + uint256 reward = $._rewardCalculator.calculateReward({ stakeAmount: weightToValue(delegator.weight), validatorStartTime: validator.startedAt, stakingStartTime: delegator.startedAt, stakingEndTime: delegationEndTime, uptimeSeconds: $._posValidatorInfo[delegator.validationID].uptimeSeconds }); + + $._redeemableDelegatorRewards[delegationID] = reward; + + if (rewardRecipient != address(0)) { + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + } + + return reward; } /** @@ -736,7 +889,13 @@ abstract contract PoSValidatorManager is // Once this function completes, the delegation is completed so we can clear it from state now. delete $._delegatorStakes[delegationID]; - address rewardRecipient = delegator.owner; + address rewardRecipient = $._delegatorRewardRecipients[delegationID]; + + if (rewardRecipient == address(0)) { + rewardRecipient = delegator.owner; + } else { + delete $._delegatorRewardRecipients[delegationID]; + } (uint256 delegationRewards, uint256 validatorFees) = _withdrawDelegationRewards(rewardRecipient, delegationID, validationID); diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index d5b4944a1..c4c5b7bb4 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -151,6 +151,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-initializeEndValidation} for details of the first three parameters + * @param recipientAddress The address to receive the rewards + */ + function initializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Begins the process of ending an active validation period, but does not revert if the latest known uptime * is not sufficient to collect uptime-based rewards. This function is used to exit the validator set when rewards are @@ -168,6 +179,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-forceInitializeEndValidation} for details of the first three parameters + * @param recipientAddress Address to receive the rewards. + */ + function forceInitializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Completes the delegator registration process by submitting an acknowledgement of the registration of a * validationID from the P-Chain. After this function is called, the validator's weight is updated in the contract state. @@ -202,6 +224,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-initializeEndDelegation} for details of the first three parameters + * @param recipientAddress The address to receive the rewards. + */ + function initializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Begins the process of removing a delegator from a validation period, but does not revert if the delegation is not eligible for rewards. * The delegator must have been previously registered with the given validationID. For the purposes of computing delegation rewards, @@ -222,6 +255,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-forceInitializeEndDelegation} for details of the first three parameters + * @param recipientAddress The address to receive the rewards. + */ + function forceInitializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Resubmits a delegator registration or delegator end message to be sent to the P-Chain. * Only necessary if the original message can't be delivered due to validator churn. @@ -247,4 +291,18 @@ interface IPoSValidatorManager is IValidatorManager { * @param validationID The ID of the validation period being ended. */ function claimDelegationFees(bytes32 validationID) external; + + /** + * @notice Changes the address of the recipient of the validator's rewards for a validation period. This method can be called any time before {completeEndValidation}. + * @param validationID The ID of the validation period being ended. + * @param recipient The address to receive the rewards. + */ + function changeValidatorRewardRecipient(bytes32 validationID, address recipient) external; + + /** + * @notice Changes the address of the recipient of the delegator's rewards for a delegation period. This method can be called any time before {completeEndDelegation}. + * @param delegationID The ID of the validation period being ended. + * @param recipient The address to receive the rewards. + */ + function changeDelegatorRewardRecipient(bytes32 delegationID, address recipient) external; } diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 1e717ad31..efcfd70c4 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -80,11 +80,19 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initializeValidatorRegistration(input, weight); } - function _initializeEndValidation(bytes32 validationID, bool) internal virtual override { + function _initializeEndValidation( + bytes32 validationID, + bool, + address + ) internal virtual override { return app.initializeEndValidation(validationID); } - function _forceInitializeEndValidation(bytes32 validationID, bool) internal virtual override { + function _forceInitializeEndValidation( + bytes32 validationID, + bool, + address + ) internal virtual override { return app.initializeEndValidation(validationID); } diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index a418dcb02..fb31bd425 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -386,7 +386,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -403,7 +404,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -422,7 +424,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID: delegationID, endDelegationTimestamp: invalidEndTime, includeUptime: false, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -442,7 +445,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID: delegationID, endDelegationTimestamp: invalidEndTime, includeUptime: false, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -460,13 +464,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedNonce: 1 }); + address validatorOwner = address(this); + _endValidationWithChecks({ validationID: validationID, - validatorOwner: address(this), + validatorOwner: validatorOwner, completeRegistrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, completionTimestamp: delegatorRegistrationTime + 1, validatorWeight: DEFAULT_WEIGHT, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: validatorOwner }); uint64 invalidEndTime = delegatorRegistrationTime + DEFAULT_CHURN_PERIOD - 1; @@ -483,7 +490,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID: delegationID, endDelegationTimestamp: invalidEndTime, includeUptime: false, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -514,7 +522,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: true + force: true, + rewardRecipient: address(0) }); } @@ -531,7 +540,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: false, - force: true + force: true, + rewardRecipient: address(0) }); } @@ -548,7 +558,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 2, DEFAULT_WEIGHT); @@ -591,7 +602,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint256 expectedTotalReward = rewardCalculator.calculateReward({ @@ -602,16 +614,220 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + address delegator = DEFAULT_DELEGATOR_ADDRESS; + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: delegator, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + rewardRecipient: delegator + }); + } + + function testCompleteEndDelegationWithNonDelegatorRewardRecipient() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: rewardRecipient + }); + } + + function testChangeDelegatorRewardRecipientWithNullAddress() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + address newRewardRecipient = address(0); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(DEFAULT_DELEGATOR_ADDRESS); + + vm.expectRevert( + abi.encodeWithSelector( + PoSValidatorManager.InvalidRewardRecipient.selector, newRewardRecipient + ) + ); + + posValidatorManager.changeDelegatorRewardRecipient(delegationID, newRewardRecipient); + } + + function testChangeDelegatorRewardRecipientByNonDelegator() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + address badActor = address(43); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(badActor); + + vm.expectRevert( + abi.encodeWithSelector(PoSValidatorManager.UnauthorizedOwner.selector, badActor) + ); + + posValidatorManager.changeDelegatorRewardRecipient(delegationID, badActor); + } + + function testChangeDelegatorRewardRecipientBackToSelf() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(DEFAULT_DELEGATOR_ADDRESS); + + posValidatorManager.changeDelegatorRewardRecipient(delegationID, DEFAULT_DELEGATOR_ADDRESS); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: DEFAULT_DELEGATOR_ADDRESS, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + rewardRecipient: DEFAULT_DELEGATOR_ADDRESS + }); + } + + function testChangeDelegatorRewardRecipient() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + address newRewardRecipient = address(43); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(DEFAULT_DELEGATOR_ADDRESS); + posValidatorManager.changeDelegatorRewardRecipient(delegationID, newRewardRecipient); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: DEFAULT_DELEGATOR_ADDRESS, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + rewardRecipient: newRewardRecipient }); } @@ -726,7 +942,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint64 validationEndTime = DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP + 1; @@ -752,16 +969,23 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: validationEndTime - DEFAULT_REGISTRATION_TIMESTAMP }); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + address delegator = DEFAULT_DELEGATOR_ADDRESS; + _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: 0, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: delegator }); } @@ -860,7 +1084,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); _endDefaultValidator(validationID, 3); @@ -928,7 +1153,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT, expectedNonce: 3, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); _initializeEndDelegationValidatorActiveWithChecks({ validationID: validationID, @@ -939,7 +1165,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 4, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); // Complete ending delegator2 with delegator1's nonce @@ -990,7 +1217,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT, expectedNonce: 3, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); _initializeEndDelegationValidatorActiveWithChecks({ validationID: validationID, @@ -1001,7 +1229,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 4, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint256 expectedTotalReward = rewardCalculator.calculateReward({ @@ -1012,17 +1241,24 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + address delegator = DEFAULT_DELEGATOR_ADDRESS; + // Complete delegation1 by delivering the weight update from nonce 4 (delegator2's nonce) _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID1, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, - expectedNonce: 4 + expectedNonce: 4, + rewardRecipient: delegator }); } @@ -1050,12 +1286,191 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); + address validatorOwner = address(this); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: validatorOwner, + expectedReward: expectedReward, + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: validatorOwner + }); + } + + function testCompleteEndValidationWithNonValidatorRewardRecipient() public virtual { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + address validatorOwner = address(this); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: validatorOwner, + expectedReward: expectedReward, + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: rewardRecipient + }); + } + + function testChangeValidatorRewardRecipient() public virtual { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address newRecipient = address(43); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + posValidatorManager.changeValidatorRewardRecipient(validationID, newRecipient); + + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + _completeEndValidationWithChecks({ validationID: validationID, validatorOwner: address(this), expectedReward: expectedReward, - validatorWeight: DEFAULT_WEIGHT + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: newRecipient + }); + } + + function testChangeValidatorRewardRecipientBackToSelf() public { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address newRecipient = address(this); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + posValidatorManager.changeValidatorRewardRecipient(validationID, newRecipient); + + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + address validatorOwner = address(this); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: validatorOwner, + expectedReward: expectedReward, + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: validatorOwner + }); + } + + function testChangeValidatorRewardRecipientWithNullAddress() public virtual { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address newRecipient = address(0); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + vm.expectRevert( + abi.encodeWithSelector( + PoSValidatorManager.InvalidRewardRecipient.selector, newRecipient + ) + ); + + posValidatorManager.changeValidatorRewardRecipient(validationID, newRecipient); + } + + function testChangeValidatorRewardRecipientByNonValidator() public { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address badActor = address(43); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient }); + + vm.prank(badActor); + + vm.expectRevert( + abi.encodeWithSelector(PoSValidatorManager.UnauthorizedOwner.selector, badActor) + ); + + posValidatorManager.changeValidatorRewardRecipient(validationID, badActor); } function testInitializeEndValidation() public virtual override { @@ -1109,7 +1524,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, true); + _initializeEndValidation(validationID, true, address(0)); } function testInitializeEndValidationInsufficientUptime() public { @@ -1133,7 +1548,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeEndValidation(validationID, true); + _initializeEndValidation(validationID, true, address(0)); } function testInitializeEndValidationPoAValidator() public { @@ -1148,7 +1563,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { defaultInitialValidationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(defaultInitialValidationID, false); + _initializeEndValidation(defaultInitialValidationID, false, address(0)); } function testForceInitializeEndValidation() public { @@ -1188,7 +1603,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _forceInitializeEndValidation(validationID, true); + _forceInitializeEndValidation(validationID, true, address(0)); } function testValueToWeightTruncated() public { @@ -1243,16 +1658,22 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function _initializeEndValidation( bytes32 validationID, - bool includeUptime + bool includeUptime, + address recipientAddress ) internal virtual override { - posValidatorManager.initializeEndValidation(validationID, includeUptime, 0); + posValidatorManager.initializeEndValidation( + validationID, includeUptime, 0, recipientAddress + ); } function _forceInitializeEndValidation( bytes32 validationID, - bool includeUptime + bool includeUptime, + address recipientAddress ) internal virtual override { - posValidatorManager.forceInitializeEndValidation(validationID, includeUptime, 0); + posValidatorManager.forceInitializeEndValidation( + validationID, includeUptime, 0, recipientAddress + ); } function _initializeDelegatorRegistration( @@ -1405,7 +1826,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 expectedValidatorWeight, uint64 expectedNonce, bool includeUptime, - bool force + bool force, + address rewardRecipient ) internal { bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage( validationID, expectedNonce, expectedValidatorWeight @@ -1431,7 +1853,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { includeUptime: includeUptime, force: force, setValidatorWeightPayload: setValidatorWeightPayload, - uptimePayload: uptimeMsg + uptimePayload: uptimeMsg, + rewardRecipient: rewardRecipient }); } @@ -1442,14 +1865,22 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bool includeUptime, bool force, bytes memory setValidatorWeightPayload, - bytes memory uptimePayload + bytes memory uptimePayload, + address rewardRecipient ) internal { _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); if (includeUptime) { _mockGetUptimeWarpMessage(uptimePayload, true); } - _initializeEndDelegation(sender, delegationID, endDelegationTimestamp, includeUptime, force); + _initializeEndDelegation({ + sender: sender, + delegationID: delegationID, + endDelegationTimestamp: endDelegationTimestamp, + includeUptime: includeUptime, + force: force, + rewardRecipient: rewardRecipient + }); } function _initializeEndDelegation( @@ -1457,25 +1888,32 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID, uint64 endDelegationTimestamp, bool includeUptime, - bool force + bool force, + address rewardRecipient ) internal { vm.warp(endDelegationTimestamp); vm.prank(sender); if (force) { - posValidatorManager.forceInitializeEndDelegation(delegationID, includeUptime, 0); + posValidatorManager.forceInitializeEndDelegation( + delegationID, includeUptime, 0, rewardRecipient + ); } else { - posValidatorManager.initializeEndDelegation(delegationID, includeUptime, 0); + posValidatorManager.initializeEndDelegation( + delegationID, includeUptime, 0, rewardRecipient + ); } } function _endDefaultValidator(bytes32 validationID, uint64 expectedNonce) internal { + address validatorOwner = address(this); _endValidationWithChecks({ validationID: validationID, - validatorOwner: address(this), + validatorOwner: validatorOwner, completeRegistrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, validatorWeight: DEFAULT_WEIGHT, - expectedNonce: expectedNonce + expectedNonce: expectedNonce, + rewardRecipient: validatorOwner }); } @@ -1485,7 +1923,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 completeRegistrationTimestamp, uint64 completionTimestamp, uint64 validatorWeight, - uint64 expectedNonce + uint64 expectedNonce, + address rewardRecipient ) internal { bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, expectedNonce, 0); @@ -1513,7 +1952,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID: validationID, validatorOwner: validatorOwner, expectedReward: expectedReward, - validatorWeight: validatorWeight + validatorWeight: validatorWeight, + rewardRecipient: rewardRecipient }); } @@ -1521,7 +1961,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID, address validatorOwner, uint256 expectedReward, - uint64 validatorWeight + uint64 validatorWeight, + address rewardRecipient ) internal { bytes memory subnetValidatorRegistrationMessage = ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false); @@ -1529,21 +1970,33 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit ValidationPeriodEnded(validationID, ValidatorStatus.Completed); uint256 balanceBefore = _getStakeAssetBalance(validatorOwner); + uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); _expectStakeUnlock(validatorOwner, _weightToValue(validatorWeight)); - _expectRewardIssuance(validatorOwner, expectedReward); + _expectRewardIssuance(rewardRecipient, expectedReward); _completeEndValidation(subnetValidatorRegistrationMessage); - assertEq( - _getStakeAssetBalance(validatorOwner), - balanceBefore + _weightToValue(validatorWeight) + expectedReward - ); + if (rewardRecipient == validatorOwner) { + assertEq( + _getStakeAssetBalance(validatorOwner), + balanceBefore + _weightToValue(validatorWeight) + expectedReward + ); + } else { + assertEq( + _getStakeAssetBalance(validatorOwner), + balanceBefore + _weightToValue(validatorWeight) + ); + + assertEq( + _getStakeAssetBalance(rewardRecipient), + rewardRecipientBalanceBefore + expectedReward + ); + } } function _completeEndValidation(bytes memory subnetValidatorRegistrationMessage) internal { _mockGetPChainWarpMessage(subnetValidatorRegistrationMessage, true); - posValidatorManager.completeEndValidation(0); } @@ -1552,14 +2005,13 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID, address delegator, uint64 delegatorWeight, - uint256 expectedTotalReward, - uint64 delegationFeeBips, + uint256 expectedValidatorFees, + uint256 expectedDelegatorReward, uint64 validatorWeight, uint64 expectedValidatorWeight, - uint64 expectedNonce + uint64 expectedNonce, + address rewardRecipient ) internal { - uint256 expectedValidatorFees = expectedTotalReward * delegationFeeBips / 10000; - uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; bytes memory weightUpdateMessage = ValidatorMessages.packL1ValidatorWeightMessage( validationID, expectedNonce, validatorWeight ); @@ -1569,17 +2021,30 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID, validationID, expectedDelegatorReward, expectedValidatorFees ); uint256 balanceBefore = _getStakeAssetBalance(delegator); + uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); _expectStakeUnlock(delegator, _weightToValue(delegatorWeight)); - _expectRewardIssuance(delegator, expectedDelegatorReward); + _expectRewardIssuance(rewardRecipient, expectedDelegatorReward); _completeEndDelegation(delegationID, weightUpdateMessage); assertEq(posValidatorManager.getWeight(validationID), expectedValidatorWeight); - assertEq( - _getStakeAssetBalance(delegator), - balanceBefore + _weightToValue(delegatorWeight) + expectedDelegatorReward - ); + + if (rewardRecipient == delegator) { + assertEq( + _getStakeAssetBalance(delegator), + balanceBefore + _weightToValue(delegatorWeight) + expectedDelegatorReward + ); + } else { + assertEq( + _getStakeAssetBalance(delegator), balanceBefore + _weightToValue(delegatorWeight) + ); + + assertEq( + _getStakeAssetBalance(rewardRecipient), + rewardRecipientBalanceBefore + expectedDelegatorReward + ); + } } function _completeEndDelegation( @@ -1603,7 +2068,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint256 expectedTotalReward = rewardCalculator.calculateReward({ @@ -1614,20 +2080,33 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: 0 }); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + address delegator = DEFAULT_DELEGATOR_ADDRESS; + _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: delegator }); } function _getStakeAssetBalance(address account) internal virtual returns (uint256); function _expectStakeUnlock(address account, uint256 amount) internal virtual; function _expectRewardIssuance(address account, uint256 amount) internal virtual; + + function _calculateValidatorFeesFromDelegator( + uint256 totalReward, + uint64 delegationFeeBips + ) internal pure returns (uint256) { + return totalReward * delegationFeeBips / 10000; + } } diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 5c204192c..7889cdd72 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -322,7 +322,7 @@ abstract contract ValidatorManagerTest is Test { bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(0))); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); - _forceInitializeEndValidation(validationID, false); + _forceInitializeEndValidation(validationID, false, address(0)); } function testCumulativeChurnRegistration() public { @@ -395,7 +395,8 @@ abstract contract ValidatorManagerTest is Test { _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) + churnThreshold ) ); - _initializeEndValidation(validationID, false); + + _initializeEndValidation(validationID, false, address(0)); } function testValidatorManagerStorageSlot() public view { @@ -497,9 +498,31 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceInitializeEndValidation(validationID, includeUptime); + _forceInitializeEndValidation(validationID, includeUptime, address(0)); + } else { + _initializeEndValidation(validationID, includeUptime, address(0)); + } + } + + function _initializeEndValidation( + bytes32 validationID, + uint64 completionTimestamp, + bytes memory setWeightMessage, + bool includeUptime, + bytes memory uptimeMessage, + bool force, + address recipientAddress + ) internal { + _mockSendWarpMessage(setWeightMessage, bytes32(0)); + if (includeUptime) { + _mockGetUptimeWarpMessage(uptimeMessage, true); + } + + vm.warp(completionTimestamp); + if (force) { + _forceInitializeEndValidation(validationID, includeUptime, recipientAddress); } else { - _initializeEndValidation(validationID, includeUptime); + _initializeEndValidation(validationID, includeUptime, recipientAddress); } } @@ -587,11 +610,16 @@ abstract contract ValidatorManagerTest is Test { uint64 weight ) internal virtual returns (bytes32); - function _initializeEndValidation(bytes32 validationID, bool includeUptime) internal virtual; + function _initializeEndValidation( + bytes32 validationID, + bool includeUptime, + address rewardRecipient + ) internal virtual; function _forceInitializeEndValidation( bytes32 validationID, - bool includeUptime + bool includeUptime, + address rewardRecipient ) internal virtual; function _setUp() internal virtual returns (IValidatorManager); diff --git a/go.mod b/go.mod index 65c65aef7..33e4cae11 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/ava-labs/awm-relayer v1.4.1-0.20241114185359-5cd5a982832d github.com/ava-labs/subnet-evm v0.6.12-rc.0 github.com/ethereum/go-ethereum v1.13.14 - github.com/onsi/ginkgo/v2 v2.21.0 + github.com/onsi/ginkgo/v2 v2.22.0 github.com/onsi/gomega v1.35.1 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 diff --git a/go.sum b/go.sum index 02249c1c6..442b696a7 100644 --- a/go.sum +++ b/go.sum @@ -489,8 +489,8 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM= -github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= +github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= +github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 31182b062..c07c8639f 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -1059,7 +1059,7 @@ func InitializeEndNativeValidation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeEndValidation( + tx, err := stakingManager.InitializeEndValidation0( opts, validationID, false, @@ -1161,7 +1161,7 @@ func InitializeEndERC20Validation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeEndValidation( + tx, err := stakingManager.InitializeEndValidation0( opts, validationID, false,