diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 513f1beee..425afb3a9 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -91,8 +91,8 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ADDRESS_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BIPS_CONVERSION_FACTOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDelegationFees\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"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\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"weightToValueFactor\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20Mintable\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"disableOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}]},{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorSet\",\"inputs\":[{\"name\":\"subnetConversionData\",\"type\":\"tuple\",\"internalType\":\"structSubnetConversionData\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialValidators\",\"type\":\"tuple[]\",\"internalType\":\"structInitialValidator[]\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}]},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitUptimeProof\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewards\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"fees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InitialValidatorCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"DelegatorIneligibleForRewards\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBLSKeyLength\",\"inputs\":[{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidBLSPublicKey\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCodecID\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationFee\",\"inputs\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationID\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumDelegatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitializationStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMaximumChurnPercentage\",\"inputs\":[{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageLength\",\"inputs\":[{\"name\":\"actual\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"expected\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMinStakeDuration\",\"inputs\":[{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNodeID\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidNonce\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidPChainOwnerThreshold\",\"inputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addressesLength\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidRegistrationExpiry\",\"inputs\":[{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeAmount\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeMultiplier\",\"inputs\":[{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSubnetConversionID\",\"inputs\":[{\"name\":\"encodedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expectedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenAddress\",\"inputs\":[{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTotalWeight\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidValidationID\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerAddress\",\"inputs\":[{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerBlockchainID\",\"inputs\":[{\"name\":\"blockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWarpOriginSenderAddress\",\"inputs\":[{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpSourceChainID\",\"inputs\":[{\"name\":\"sourceChainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"MaxChurnRateExceeded\",\"inputs\":[{\"name\":\"churnAmount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MaxWeightExceeded\",\"inputs\":[{\"name\":\"newValidatorWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MinStakeDurationNotPassed\",\"inputs\":[{\"name\":\"endTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"NodeAlreadyRegistered\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PChainOwnerAddressesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnauthorizedOwner\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnexpectedRegistrationStatus\",\"inputs\":[{\"name\":\"validRegistration\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"type\":\"error\",\"name\":\"ValidatorIneligibleForRewards\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ValidatorNotPoS\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroWeightToValueFactor\",\"inputs\":[]}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615f31380380615f3183398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615de48061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101c1575f3560e01c80638280a25a116100f6578063ba3a4b971161009a578063ba3a4b97146103d9578063bc5fbfec146103ec578063bee0a03f14610413578063c974d1b614610426578063d5f20ff61461042e578063df93d8de1461044e578063e4a63c4014610458578063f74c607b1461047f578063fd7ac5e714610492575f80fd5b80638280a25a1461034357806393e245981461034b57806398f3e2b41461035e5780639e1bc4ef14610371578063a3a65e4814610384578063a9778a7a14610270578063afb9809614610397578063b771b3bc146103be575f80fd5b80633a1cfff6116101685780633a1cfff61461028c578063467ef06f1461029f5780634bee0040146102b25780635297fae6146102d357806360305d62146102e6578063620658561461030357806366435abf14610316578063732214f81461032957806376f7862114610330575f80fd5b80630118acc4146101c55780630322ed98146101da578063151d30d1146101ed5780631ec447241461020c57806320d91b7a1461021f57806325e1c776146102325780632e2194d81461024557806335455ded14610270575b5f80fd5b6101d86101d3366004615085565b6104a5565b005b6101d86101e83660046150c0565b6104da565b6101f5600a81565b60405160ff90911681526020015b60405180910390f35b6101d861021a366004615085565b6106dd565b6101d861022d3660046150d7565b6106e8565b6101d8610240366004615125565b610be6565b6102586102533660046150c0565b610c5a565b6040516001600160401b039091168152602001610203565b61027961271081565b60405161ffff9091168152602001610203565b6101d861029a366004615085565b610cae565b6101d86102ad366004615146565b610cb9565b6102c56102c0366004615186565b610d69565b604051908152602001610203565b6101d86102e13660046151eb565b610d90565b6102ee601481565b60405163ffffffff9091168152602001610203565b6102c5610311366004615213565b610feb565b6102586103243660046150c0565b61100b565b6102c55f81565b6101d861033e366004615085565b61101f565b6101f5603081565b6101d86103593660046150c0565b61104a565b6101d861036c3660046151eb565b611107565b6102c561037f36600461522c565b6112c6565b6101d8610392366004615146565b6112e4565b6102c57f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6103cc6005600160991b0181565b604051610203919061524c565b6101d86103e73660046150c0565b61146a565b6102c57fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b6101d86104213660046150c0565b611648565b6101f5601481565b61044161043c3660046150c0565b611765565b60405161020391906152d5565b6102586202a30081565b6102c57f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab0081565b6101d861048d366004615369565b6118a7565b6102c56104a03660046153a7565b611986565b6104b08383836119be565b6104d557604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f6104e3611d0b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600581111561051c5761051c615260565b600581111561052d5761052d615260565b815260200160018201805461054190615412565b80601f016020809104026020016040519081016040528092919081815260200182805461056d90615412565b80156105b85780601f1061058f576101008083540402835291602001916105b8565b820191905f5260205f20905b81548152906001019060200180831161059b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561062357610623615260565b14610656575f8381526007830160205260409081902054905163170cc93360e21b81526104cc9160ff169060040161544a565b6005600160991b016001600160a01b031663ee5b48eb61067b8584606001515f611d2f565b6040518263ffffffff1660e01b81526004016106979190615458565b6020604051808303815f875af11580156106b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106d7919061546a565b50505050565b6106d78383836119be565b5f6106f1611d0b565b600981015490915060ff161561071a57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561075d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610781919061546a565b8360200135146107aa576040516372b0a7e760e11b8152602084013560048201526024016104cc565b306107bb6060850160408601615481565b6001600160a01b0316146107f3576107d96060840160408501615481565b604051632f88120d60e21b81526004016104cc919061524c565b5f610801606085018561549c565b905090505f805b828163ffffffff161015610ae8575f610824606088018861549c565b8363ffffffff1681811061083a5761083a6154e1565b905060200281019061084c91906154f5565b61085590615619565b80516040519192505f91600888019161086d91615692565b9081526020016040518091039020541461089d57805160405163a41f772f60e01b81526104cc9190600401615458565b5f6002885f0135846040516020016108cc92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526108e691615692565b602060405180830381855afa158015610901573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610924919061546a565b90508086600801835f015160405161093c9190615692565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff191660018360058111156109be576109be615260565b0217905550602082015160018201906109d790826156e7565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090930151600390920180546001600160401b03191692841692909217909155830151610a7b9116856157b6565b8251604051919550610a8c91615692565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610ae1906157c9565b9050610808565b50600483018190556001830154606490610b0c90600160401b900460ff16836157eb565b1015610b2e57604051635943317f60e01b8152600481018290526024016104cc565b5f610b44610b3b86611d7e565b60400151611e89565b90505f610b5087612016565b90505f600282604051610b639190615692565b602060405180830381855afa158015610b7e573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ba1919061546a565b9050828114610bcd57604051631872fc8d60e01b815260048101829052602481018490526044016104cc565b5050506009909201805460ff1916600117905550505050565b610bef826121eb565b610c0f576040516330efa98b60e01b8152600481018390526024016104cc565b5f610c1983611765565b5190506002816005811115610c3057610c30615260565b14610c50578060405163170cc93360e21b81526004016104cc919061544a565b6106d78383612214565b5f80610c64612462565b60030154610c729084615802565b9050801580610c8757506001600160401b0381115b15610ca85760405163222d164360e21b8152600481018490526024016104cc565b92915050565b6106d7838383612486565b610cc1612651565b5f610cca612462565b90505f80610cd78461269b565b91509150610ce4826121eb565b610cf057505050610d5e565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610d1e57610d1e615260565b03610d43575f83815260088501602052604081208054919055610d4182826129d5565b505b610d5981610d548460400151610feb565b612a45565b505050505b610d66612a63565b50565b5f610d72612651565b610d7e85858585612a89565b9050610d88612a63565b949350505050565b5f610d99612462565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115610dd257610dd2615260565b6003811115610de357610de3615260565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610e5982611765565b9050600183516003811115610e7057610e70615260565b14610e91578251604051633b0d540d60e21b81526104cc9190600401615821565b600481516005811115610ea657610ea6615260565b03610ebc57610eb485612c40565b505050505050565b5f80610ed3610eca89611d7e565b60400151612e60565b5091509150818414610f0057846040015160405163089938b360e11b81526004016104cc91815260200190565b806001600160401b031683606001516001600160401b03161080610f395750806001600160401b03168560a001516001600160401b0316115b15610f6257604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cc565b5f878152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f610ff4612462565b60030154610ca8906001600160401b0384166157eb565b5f61101582611765565b6080015192915050565b61102a838383612486565b6104d557604051635bff683f60e11b8152600481018490526024016104cc565b5f611053612462565b90505f61105f83611765565b519050600481600581111561107657611076615260565b14611096578060405163170cc93360e21b81526004016104cc919061544a565b5f8381526005830160205260409020546001600160a01b031633146110d157335b604051636e2ccd7560e11b81526004016104cc919061524c565b5f838152600883016020908152604080832080549084905560058601909252909120546106d7906001600160a01b0316826129d5565b61110f612651565b5f611118612462565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff16600381111561115157611151615260565b600381111561116257611162615260565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156111db576111db615260565b146111fc578051604051633b0d540d60e21b81526104cc9190600401615821565b600461120b8260400151611765565b51600581111561121d5761121d615260565b146112af575f61122c85611d7e565b90505f8061123d8360400151612e60565b5091509150818460400151146112695760405163089938b360e11b8152600481018390526024016104cc565b806001600160401b03168460c001516001600160401b031611156112ab57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cc565b5050505b6112b883612c40565b50506112c2612a63565b5050565b5f6112cf612651565b6112da8333846130b6565b9050610ca8612a63565b5f6112ed611d0b565b90505f806113066112fd85611d7e565b6040015161338b565b915091508061132c57604051632d07135360e01b815281151560048201526024016104cc565b5f8281526006840160205260409020805461134690615412565b90505f0361136a5760405163089938b360e11b8152600481018390526024016104cc565b60015f83815260078501602052604090205460ff16600581111561139057611390615260565b146113c3575f8281526007840160205260409081902054905163170cc93360e21b81526104cc9160ff169060040161544a565b5f82815260068401602052604081206113db91614fd4565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611473612462565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114ac576114ac615260565b60038111156114bd576114bd615260565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561153657611536615260565b14158015611557575060038151600381111561155457611554615260565b14155b15611578578051604051633b0d540d60e21b81526104cc9190600401615821565b5f6115868260400151611765565b905080606001516001600160401b03165f036115b8576040516339b894f960e21b8152600481018590526024016104cc565b6005600160991b016001600160a01b031663ee5b48eb6115e5846040015184606001518560800151611d2f565b6040518263ffffffff1660e01b81526004016116019190615458565b6020604051808303815f875af115801561161d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611641919061546a565b5050505050565b5f611651611d0b565b5f838152600682016020526040902080549192509061166f90615412565b90505f036116935760405163089938b360e11b8152600481018390526024016104cc565b60015f83815260078301602052604090205460ff1660058111156116b9576116b9615260565b146116ec575f8281526007820160205260409081902054905163170cc93360e21b81526104cc9160ff169060040161544a565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611725919060040161583b565b6020604051808303815f875af1158015611741573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d5919061546a565b61176d61500b565b5f611776611d0b565b5f84815260078201602052604090819020815160e0810190925280549293509091829060ff1660058111156117ad576117ad615260565b60058111156117be576117be615260565b81526020016001820180546117d290615412565b80601f01602080910402602001604051908101604052809291908181526020018280546117fe90615412565b80156118495780601f1061182057610100808354040283529160200191611849565b820191905f5260205f20905b81548152906001019060200180831161182c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806118f0575080546001600160401b03808416911610155b1561190e5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556119398484613547565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611990611d0b565b90508060080184846040516119a69291906158c5565b90815260200160405180910390205491505092915050565b5f806119c8612462565b5f868152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115611a0157611a01615260565b6003811115611a1257611a12615260565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611a8882611765565b9050600283516003811115611a9f57611a9f615260565b14611ac0578251604051633b0d540d60e21b81526104cc9190600401615821565b60208301516001600160a01b03163314611b5c575f8281526005850160205260409020546001600160a01b03163314611af957336110b7565b5f82815260058501602052604090205460a0820151611b2891600160b01b90046001600160401b0316906158d4565b6001600160401b0316421015611b5c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104cc565b600281516005811115611b7157611b71615260565b03611c9f5760028401546080840151611b93916001600160401b0316906158d4565b6001600160401b0316421015611bc75760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104cc565b8615611bd957611bd78287612214565b505b5f8881526006850160205260409020805460ff1916600317905560608301516080820151611c12918491611c0d91906158f4565b613561565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611c53846136ab565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a315159450611d049350505050565b600481516005811115611cb457611cb4615260565b03611ce857611cc2836136ab565b5f898152600786016020526040902055611cdb88612c40565b6001945050505050611d04565b805160405163170cc93360e21b81526104cc919060040161544a565b9392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611de2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e09919081019061591f565b9150915080611e2b57604051636b2f19e960e01b815260040160405180910390fd5b815115611e51578151604051636ba589a560e01b815260048101919091526024016104cc565b60208201516001600160a01b031615611e82578160200151604051624de75d60e31b81526004016104cc919061524c565b5092915050565b5f8151602614611ebe57815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016104cc565b5f805b6002811015611f0d57611ed58160016159f1565b611ee09060086157eb565b61ffff16848281518110611ef657611ef66154e1565b016020015160f81c901b9190911790600101611ec1565b5061ffff811615611f375760405163407b587360e01b815261ffff821660048201526024016104cc565b5f805b6004811015611f9257611f4e8160036159f1565b611f599060086157eb565b63ffffffff1685611f6b8360026157b6565b81518110611f7b57611f7b6154e1565b016020015160f81c901b9190911790600101611f3a565b5063ffffffff811615611fb857604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561200d57611fcf81601f6159f1565b611fda9060086157eb565b86611fe68360066157b6565b81518110611ff657611ff66154e1565b016020015160f81c901b9190911790600101611fbb565b50949350505050565b60605f8083356020850135601461203287870160408901615481565b61203f606089018961549c565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6001600160601b03191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b6120c0606085018561549c565b9050811015611e8257816120d7606086018661549c565b838181106120e7576120e76154e1565b90506020028101906120f991906154f5565b6121039080615a04565b9050612112606087018761549c565b84818110612122576121226154e1565b905060200281019061213491906154f5565b61213e9080615a04565b61214b606089018961549c565b8681811061215b5761215b6154e1565b905060200281019061216d91906154f5565b61217b906020810190615a04565b61218860608b018b61549c565b88818110612198576121986154e1565b90506020028101906121aa91906154f5565b6121bb906060810190604001615213565b6040516020016121d19796959493929190615a46565b60408051601f1981840301815291905291506001016120b3565b5f806121f5612462565b5f938452600501602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561225f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612286919081019061591f565b91509150806122a857604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230f919061546a565b825114612335578151604051636ba589a560e01b815260048101919091526024016104cc565b60208201516001600160a01b031615612366578160200151604051624de75d60e31b81526004016104cc919061524c565b5f80612375846040015161382e565b9150915081871461239c5760405163089938b360e11b8152600481018890526024016104cc565b5f6123a5612462565b5f8981526005820160205260409020600101549091506001600160401b039081169083161115612438575f88815260058201602090815260409182902060010180546001600160401b0319166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612457565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612490612462565b90505f61249c86613a1f565b90506124a7866121eb565b6124b657600192505050611d04565b5f8681526005830160205260409020546001600160a01b031633146124db57336110b7565b5f86815260058301602052604090205460a082015161250a91600160b01b90046001600160401b0316906158d4565b6001600160401b03168160c001516001600160401b031610156125515760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104cc565b5f8515612569576125628786612214565b9050612587565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125ac90610feb565b60a086015160c08701516040516001600160e01b031960e086901b1681526125dc93929182918990600401615aaf565b602060405180830381865afa1580156125f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061261b919061546a565b905080846008015f8a81526020019081526020015f205f82825461263f91906157b6565b90915550501515979650505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080546001190161269557604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6126a461500b565b5f6126ad611d0b565b90505f806126bd6112fd87611d7e565b9150915080156126e457604051632d07135360e01b815281151560048201526024016104cc565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561271557612715615260565b600581111561272657612726615260565b815260200160018201805461273a90615412565b80601f016020809104026020016040519081016040528092919081815260200182805461276690615412565b80156127b15780601f10612788576101008083540402835291602001916127b1565b820191905f5260205f20905b81548152906001019060200180831161279457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561281c5761281c615260565b1415801561283d575060018151600581111561283a5761283a615260565b14155b1561285e57805160405163170cc93360e21b81526104cc919060040161544a565b60038151600581111561287357612873615260565b036128815760048152612886565b600581525b83600801816020015160405161289c9190615692565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff191660018360058111156128e0576128e0615260565b0217905550602082015160018201906128f990826156e7565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b031916919092161790558051600581111561299e5761299e615260565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f6129de613cf7565b80546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612a2a575f80fd5b505af1158015612a3c573d5f803e3d5ffd5b50505050505050565b6112c28282612a52613cf7565b546001600160a01b03169190613d1b565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f80612a93612462565b600281015490915061ffff600160401b90910481169086161080612abc575061271061ffff8616115b15612ae057604051635f12e6c360e11b815261ffff861660048201526024016104cc565b60028101546001600160401b039081169085161015612b1c576040516202a06d60e11b81526001600160401b03851660048201526024016104cc565b8054831080612b2e5750806001015483115b15612b4f5760405163222d164360e21b8152600481018490526024016104cc565b5f612b5984613d7a565b90505f612b6582610c5a565b90505f612b728983613d97565b90506040518060800160405280612b863390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526005909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b0319909416951694909417919091179890981617815591015160019091018054919095166001600160401b0319909116179093555090915050949350505050565b5f612c49612462565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c8257612c82615260565b6003811115612c9357612c93615260565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d076142f4565b8260800151612d1691906158d4565b6001600160401b0316421015612d4a5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104cc565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612e05575f84815260058701602052604090205461271090612db790600160a01b900461ffff16856157eb565b612dc19190615802565b915081866008015f8681526020019081526020015f205f828254612de591906157b6565b90915550612df5905082846159f1565b9050612e058560200151826129d5565b612e1a8560200151610d548760600151610feb565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612e9757835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016104cc565b5f805b6002811015612ee657612eae8160016159f1565b612eb99060086157eb565b61ffff16868281518110612ecf57612ecf6154e1565b016020015160f81c901b9190911790600101612e9a565b5061ffff811615612f105760405163407b587360e01b815261ffff821660048201526024016104cc565b5f805b6004811015612f6b57612f278160036159f1565b612f329060086157eb565b63ffffffff1687612f448360026157b6565b81518110612f5457612f546154e1565b016020015160f81c901b9190911790600101612f13565b5063ffffffff8116600314612f9357604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015612fe857612faa81601f6159f1565b612fb59060086157eb565b88612fc18360066157b6565b81518110612fd157612fd16154e1565b016020015160f81c901b9190911790600101612f96565b505f805b6008811015613047576130008160076159f1565b61300b9060086157eb565b6001600160401b0316896130208360266157b6565b81518110613030576130306154e1565b016020015160f81c901b9190911790600101612fec565b505f805b60088110156130a65761305f8160076159f1565b61306a9060086157eb565b6001600160401b03168a61307f83602e6157b6565b8151811061308f5761308f6154e1565b016020015160f81c901b919091179060010161304b565b5091989097509095509350505050565b5f806130c0612462565b90505f6130cf61025385613d7a565b90505f6130db87611765565b90506130e6876121eb565b613106576040516330efa98b60e01b8152600481018890526024016104cc565b60028151600581111561311b5761311b615260565b1461313c57805160405163170cc93360e21b81526104cc919060040161544a565b5f82826080015161314d91906158d4565b905083600201600a9054906101000a90046001600160401b031682604001516131769190615add565b6001600160401b0316816001600160401b031611156131b357604051636d51fe0560e11b81526001600160401b03821660048201526024016104cc565b5f806131bf8a84613561565b915091505f8a836040516020016131ed92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260068b01909152902081518154829060ff1916600183600381111561328057613280615260565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f8082516027146133c157825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044016104cc565b5f805b6002811015613410576133d88160016159f1565b6133e39060086157eb565b61ffff168582815181106133f9576133f96154e1565b016020015160f81c901b91909117906001016133c4565b5061ffff81161561343a5760405163407b587360e01b815261ffff821660048201526024016104cc565b5f805b6004811015613495576134518160036159f1565b61345c9060086157eb565b63ffffffff168661346e8360026157b6565b8151811061347e5761347e6154e1565b016020015160f81c901b919091179060010161343d565b5063ffffffff81166002146134bd57604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613512576134d481601f6159f1565b6134df9060086157eb565b876134eb8360066157b6565b815181106134fb576134fb6154e1565b016020015160f81c901b91909117906001016134c0565b505f86602681518110613527576135276154e1565b016020015191976001600160f81b03199092161515965090945050505050565b61354f61430f565b6135588261435a565b6112c2816143ce565b5f805f61356c611d0b565b5f868152600782016020526040902060020154909150600160801b90046001600160401b031661359c858261442a565b5f6135a68761464f565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6135f68a858b611d2f565b6040518263ffffffff1660e01b81526004016136129190615458565b6020604051808303815f875af115801561362e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613652919061546a565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806136b5612462565b90505f6136c58460400151611765565b90505f6003825160058111156136dd576136dd615260565b14806136fb57506004825160058111156136f9576136f9615260565b145b1561370b575060c0810151613748565b60028251600581111561372057613720615260565b0361372c575042613748565b815160405163170cc93360e21b81526104cc919060040161544a565b84608001516001600160401b0316816001600160401b03161161376f57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061379490610feb565b60a085015160808901516040808b01515f90815260058a016020528190206001015490516001600160e01b031960e087901b1681526137e69493929188916001600160401b0390911690600401615aaf565b602060405180830381865afa158015613801573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613825919061546a565b95945050505050565b5f808251602e1461386457825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016104cc565b5f805b60028110156138b35761387b8160016159f1565b6138869060086157eb565b61ffff1685828151811061389c5761389c6154e1565b016020015160f81c901b9190911790600101613867565b5061ffff8116156138dd5760405163407b587360e01b815261ffff821660048201526024016104cc565b5f805b6004811015613938576138f48160036159f1565b6138ff9060086157eb565b63ffffffff16866139118360026157b6565b81518110613921576139216154e1565b016020015160f81c901b91909117906001016138e0565b5063ffffffff81161561395e57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156139b35761397581601f6159f1565b6139809060086157eb565b8761398c8360066157b6565b8151811061399c5761399c6154e1565b016020015160f81c901b9190911790600101613961565b505f805b6008811015613a12576139cb8160076159f1565b6139d69060086157eb565b6001600160401b0316886139eb8360266157b6565b815181106139fb576139fb6154e1565b016020015160f81c901b91909117906001016139b7565b5090969095509350505050565b613a2761500b565b5f613a30611d0b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166005811115613a6957613a69615260565b6005811115613a7a57613a7a615260565b8152602001600182018054613a8e90615412565b80601f0160208091040260200160405190810160405280929190818152602001828054613aba90615412565b8015613b055780601f10613adc57610100808354040283529160200191613b05565b820191905f5260205f20905b815481529060010190602001808311613ae857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613b7357613b73615260565b14613ba6575f8481526007830160205260409081902054905163170cc93360e21b81526104cc9160ff169060040161544a565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613bea57613bea615260565b021790555060208201516001820190613c0390826156e7565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b031916919092161790555f613ca08582613561565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab0090565b6040516001600160a01b038381166024830152604482018390526104d591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146b8565b5f610ca882613d87613cf7565b546001600160a01b031690614710565b5f613da0611d0b565b6009015460ff16613dc457604051637fab81e560e01b815260040160405180910390fd5b5f613dcd611d0b565b905042613de06060860160408701615213565b6001600160401b0316111580613e1a5750613dfe6202a300426157b6565b613e0e6060860160408701615213565b6001600160401b031610155b15613e5457613e2f6060850160408601615213565b604051635879da1360e11b81526001600160401b0390911660048201526024016104cc565b613e69613e646060860186615b08565b614871565b613e79613e646080860186615b08565b6030613e886020860186615a04565b905014613eba57613e9c6020850185615a04565b6040516326475b2f60e11b81526104cc925060040190815260200190565b613ec48480615a04565b90505f03613ef157613ed68480615a04565b604051633e08a12560e11b81526004016104cc929190615b1c565b5f60088201613f008680615a04565b604051613f0e9291906158c5565b90815260200160405180910390205414613f4757613f2c8480615a04565b60405163a41f772f60e01b81526004016104cc929190615b1c565b613f51835f61442a565b6040805160e08101909152815481525f90819061405d9060208101613f768980615a04565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613fbe908a018a615a04565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161400760608a0160408b01615213565b6001600160401b0316815260200161402260608a018a615b08565b61402b90615b4a565b815260200161403d60808a018a615b08565b61404690615b4a565b8152602001876001600160401b03168152506149da565b5f8281526006860160205260409020919350915061407b82826156e7565b50816008840161408b8880615a04565b6040516140999291906158c5565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906140d5908590600401615458565b6020604051808303815f875af11580156140f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614115919061546a565b6040805160e0810190915290915080600181526020016141358980615a04565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff191660018360058111156141c4576141c4615260565b0217905550602082015160018201906141dd90826156e7565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b031916919092161790558061427a8880615a04565b6040516142889291906158c5565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906142c69190615213565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f6142fd611d0b565b600101546001600160401b0316919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661435857604051631afcd79f60e31b815260040160405180910390fd5b565b61436261430f565b61436b81614bc7565b614373614be0565b610d666060820135608083013561439060c0850160a08601615213565b6143a060e0860160c08701615c11565b6143b1610100870160e08801615c2a565b6101008701356143c961014089016101208a01615481565b614bf0565b6143d661430f565b5f6143df613cf7565b90506001600160a01b03821661440a5781604051637330680360e01b81526004016104cc919061524c565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f614433611d0b565b90505f826001600160401b0316846001600160401b031611156144615761445a83856158f4565b905061446e565b61446b84846158f4565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806144d05750600184015481516144cc916001600160401b0316906157b6565b8210155b156144f6576001600160401b038316606082015281815260408101516020820152614515565b828160600181815161450891906158d4565b6001600160401b03169052505b6060810151614525906064615add565b602082015160018601546001600160401b0392909216916145509190600160401b900460ff166157eb565b101561458057606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104cc565b856001600160401b03168160400181815161459b91906157b6565b9052506040810180516001600160401b03871691906145bb9083906159f1565b905250600184015460408201516064916145e091600160401b90910460ff16906157eb565b1015614607578060400151604051635943317f60e01b81526004016104cc91815260200190565b80516002850155602081015160038501556040810151600485015560600151600590930180546001600160401b0319166001600160401b039094169390931790925550505050565b5f80614659611d0b565b5f848152600782016020526040902060020180549192509060089061468d90600160401b90046001600160401b0316615c4a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6146cc6001600160a01b03841683614d86565b905080515f141580156146f05750808060200190518101906146ee9190615c65565b155b156104d55782604051635274afe760e01b81526004016104cc919061524c565b5f80836001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161473e919061524c565b602060405180830381865afa158015614759573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061477d919061546a565b90506147946001600160a01b038516333086614d93565b6040516370a0823160e01b81525f906001600160a01b038616906370a08231906147c290309060040161524c565b602060405180830381865afa1580156147dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614801919061546a565b90508181116148675760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104cc565b61382582826159f1565b61487e6020820182615146565b63ffffffff1615801561489e5750614899602082018261549c565b151590505b156148e5576148b06020820182615146565b6148bd602083018361549c565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104cc565b6148f2602082018261549c565b90506149016020830183615146565b63ffffffff16111561491a576148b06020820182615146565b60015b61492a602083018361549c565b90508110156112c257614940602083018361549c565b61494b6001846159f1565b81811061495a5761495a6154e1565b905060200201602081019061496f9190615481565b6001600160a01b0316614985602084018461549c565b83818110614995576149956154e1565b90506020020160208101906149aa9190615481565b6001600160a01b031610156149d257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161491d565b5f6060826040015151603014614a035760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614a44988a986001989297929690959094909390929101615c80565b60405160208183030381529060405290505f5b84608001516020015151811015614ab657818560800151602001518281518110614a8357614a836154e1565b6020026020010151604051602001614a9c929190615d3a565b60408051601f198184030181529190529150600101614a57565b5060a0840151805160209182015151604051614ad6938593929101615d6b565b60405160208183030381529060405290505f5b8460a001516020015151811015614b4857818560a00151602001518281518110614b1557614b156154e1565b6020026020010151604051602001614b2e929190615d3a565b60408051601f198184030181529190529150600101614ae9565b5060c0840151604051614b5f918391602001615da6565b6040516020818303038152906040529050600281604051614b809190615692565b602060405180830381855afa158015614b9b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614bbe919061546a565b94909350915050565b614bcf61430f565b614bd7614dcc565b610d6681614dd4565b614be861430f565b614358614eb7565b614bf861430f565b5f614c01612462565b905061ffff85161580614c19575061271061ffff8616115b15614c3d57604051635f12e6c360e11b815261ffff861660048201526024016104cc565b86881115614c615760405163222d164360e21b8152600481018990526024016104cc565b60ff84161580614c745750600a60ff8516115b15614c975760405163170db35960e31b815260ff851660048201526024016104cc565b614c9f6142f4565b6001600160401b0316866001600160401b03161015614cdb576040516202a06d60e11b81526001600160401b03871660048201526024016104cc565b825f03614cfb5760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b6060611d0483835f614ebf565b6040516001600160a01b0384811660248301528381166044830152606482018390526106d79186918216906323b872dd90608401613d48565b61435861430f565b614ddc61430f565b5f614de5611d0b565b8235815590506014614dfd6060840160408501615c2a565b60ff161180614e1c5750614e176060830160408401615c2a565b60ff16155b15614e5057614e316060830160408401615c2a565b604051634a59bbff60e11b815260ff90911660048201526024016104cc565b614e606060830160408401615c2a565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614e916040830160208401615213565b60019190910180546001600160401b0319166001600160401b0390921691909117905550565b612a6361430f565b606081471015614ee4573060405163cd78605960e01b81526004016104cc919061524c565b5f80856001600160a01b03168486604051614eff9190615692565b5f6040518083038185875af1925050503d805f8114614f39576040519150601f19603f3d011682016040523d82523d5f602084013e614f3e565b606091505b5091509150614f4e868383614f58565b9695505050505050565b606082614f6d57614f6882614fab565b611d04565b8151158015614f8457506001600160a01b0384163b155b15614fa45783604051639996b31560e01b81526004016104cc919061524c565b5080611d04565b805115614fbb5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614fe090615412565b5f825580601f10614fef575050565b601f0160209004905f5260205f2090810190610d669190615048565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561505c575f8155600101615049565b5090565b8015158114610d66575f80fd5b803563ffffffff81168114615080575f80fd5b919050565b5f805f60608486031215615097575f80fd5b8335925060208401356150a981615060565b91506150b76040850161506d565b90509250925092565b5f602082840312156150d0575f80fd5b5035919050565b5f80604083850312156150e8575f80fd5b82356001600160401b038111156150fd575f80fd5b83016080818603121561510e575f80fd5b915061511c6020840161506d565b90509250929050565b5f8060408385031215615136575f80fd5b8235915061511c6020840161506d565b5f60208284031215615156575f80fd5b611d048261506d565b803561ffff81168114615080575f80fd5b80356001600160401b0381168114615080575f80fd5b5f805f8060808587031215615199575f80fd5b84356001600160401b038111156151ae575f80fd5b850160a081880312156151bf575f80fd5b93506151cd6020860161515f565b92506151db60408601615170565b9396929550929360600135925050565b5f80604083850312156151fc575f80fd5b6152058361506d565b946020939093013593505050565b5f60208284031215615223575f80fd5b611d0482615170565b5f806040838503121561523d575f80fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b634e487b7160e01b5f52602160045260245ffd5b6006811061528457615284615260565b9052565b5f5b838110156152a257818101518382015260200161528a565b50505f910152565b5f81518084526152c1816020860160208601615288565b601f01601f19169290920160200192915050565b602081526152e7602082018351615274565b5f602083015160e060408401526153026101008401826152aa565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610d66575f80fd5b5f8082840361016081121561537c575f80fd5b6101408082121561538b575f80fd5b849350830135905061539c81615355565b809150509250929050565b5f80602083850312156153b8575f80fd5b82356001600160401b03808211156153ce575f80fd5b818501915085601f8301126153e1575f80fd5b8135818111156153ef575f80fd5b866020828501011115615400575f80fd5b60209290920196919550909350505050565b600181811c9082168061542657607f821691505b60208210810361544457634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ca88284615274565b602081525f611d0460208301846152aa565b5f6020828403121561547a575f80fd5b5051919050565b5f60208284031215615491575f80fd5b8135611d0481615355565b5f808335601e198436030181126154b1575f80fd5b8301803591506001600160401b038211156154ca575f80fd5b6020019150600581901b36038213156136a4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615509575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561554957615549615513565b60405290565b604080519081016001600160401b038111828210171561554957615549615513565b604051601f8201601f191681016001600160401b038111828210171561559957615599615513565b604052919050565b5f6001600160401b038211156155b9576155b9615513565b50601f01601f191660200190565b5f82601f8301126155d6575f80fd5b81356155e96155e4826155a1565b615571565b8181528460208386010111156155fd575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615629575f80fd5b615631615527565b82356001600160401b0380821115615647575f80fd5b615653368387016155c7565b83526020850135915080821115615668575f80fd5b50615675368286016155c7565b60208301525061568760408401615170565b604082015292915050565b5f8251615509818460208701615288565b601f8211156104d557805f5260205f20601f840160051c810160208510156156c85750805b601f840160051c820191505b81811015611641575f81556001016156d4565b81516001600160401b0381111561570057615700615513565b6157148161570e8454615412565b846156a3565b602080601f831160018114615747575f84156157305750858301515b5f19600386901b1c1916600185901b178555610eb4565b5f85815260208120601f198616915b8281101561577557888601518255948401946001909101908401615756565b508582101561579257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ca857610ca86157a2565b5f63ffffffff8083168181036157e1576157e16157a2565b6001019392505050565b8082028115828204841417610ca857610ca86157a2565b5f8261581c57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061583557615835615260565b91905290565b5f60208083525f845461584d81615412565b806020870152604060018084165f811461586e576001811461588a576158b7565b60ff19851660408a0152604084151560051b8a010195506158b7565b895f5260205f205f5b858110156158ae5781548b8201860152908301908801615893565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115611e8257611e826157a2565b6001600160401b03828116828216039080821115611e8257611e826157a2565b805161508081615060565b5f8060408385031215615930575f80fd5b82516001600160401b0380821115615946575f80fd5b9084019060608287031215615959575f80fd5b615961615527565b8251815260208084015161597481615355565b82820152604084015183811115615989575f80fd5b80850194505087601f85011261599d575f80fd5b835192506159ad6155e4846155a1565b83815288828587010111156159c0575f80fd5b6159cf84838301848801615288565b806040840152508195506159e4818801615914565b9450505050509250929050565b81810381811115610ca857610ca86157a2565b5f808335601e19843603018112615a19575f80fd5b8301803591506001600160401b03821115615a32575f80fd5b6020019150368190038213156136a4575f80fd5b5f8851615a57818460208d01615288565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b9485526001600160401b03938416602086015291831660408501528216606084015216608082015260a00190565b6001600160401b03818116838216028082169190828114615b0057615b006157a2565b505092915050565b5f8235603e19833603018112615509575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215615b5a575f80fd5b615b6261554f565b615b6b8361506d565b81526020808401356001600160401b0380821115615b87575f80fd5b9085019036601f830112615b99575f80fd5b813581811115615bab57615bab615513565b8060051b9150615bbc848301615571565b8181529183018401918481019036841115615bd5575f80fd5b938501935b83851015615bff5784359250615bef83615355565b8282529385019390850190615bda565b94860194909452509295945050505050565b5f60208284031215615c21575f80fd5b611d048261515f565b5f60208284031215615c3a575f80fd5b813560ff81168114611d04575f80fd5b5f6001600160401b038083168181036157e1576157e16157a2565b5f60208284031215615c75575f80fd5b8151611d0481615060565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651615cc681602a850160208b01615288565b865190830190615cdd81602a840160208b01615288565b60c087901b6001600160c01b031916602a9290910191820152615d0f603282018660e01b6001600160e01b0319169052565b615d28603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615d4b818460208801615288565b60609390931b6001600160601b0319169190920190815260140192915050565b5f8451615d7c818460208901615288565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615db7818460208801615288565b60c09390931b6001600160c01b031916919092019081526008019291505056fea164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ADDRESS_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BIPS_CONVERSION_FACTOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPTIME_REWARDS_THRESHOLD_PERCENTAGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDelegationFees\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimValidationRewards\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"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\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"weightToValueFactor\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20Mintable\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"disableOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}]},{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorSet\",\"inputs\":[{\"name\":\"subnetConversionData\",\"type\":\"tuple\",\"internalType\":\"structSubnetConversionData\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialValidators\",\"type\":\"tuple[]\",\"internalType\":\"structInitialValidator[]\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}]},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitUptimeProof\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewards\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"fees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InitialValidatorCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationRewardsClaimed\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"reward\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"DelegatorIneligibleForRewards\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBLSKeyLength\",\"inputs\":[{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidBLSPublicKey\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCodecID\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationFee\",\"inputs\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationID\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumDelegatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitializationStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMaximumChurnPercentage\",\"inputs\":[{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageLength\",\"inputs\":[{\"name\":\"actual\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"expected\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMinStakeDuration\",\"inputs\":[{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNodeID\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidNonce\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidPChainOwnerThreshold\",\"inputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addressesLength\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidRegistrationExpiry\",\"inputs\":[{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeAmount\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeMultiplier\",\"inputs\":[{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSubnetConversionID\",\"inputs\":[{\"name\":\"encodedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expectedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenAddress\",\"inputs\":[{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidTotalWeight\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidValidationID\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerAddress\",\"inputs\":[{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerBlockchainID\",\"inputs\":[{\"name\":\"blockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWarpOriginSenderAddress\",\"inputs\":[{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpSourceChainID\",\"inputs\":[{\"name\":\"sourceChainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"MaxChurnRateExceeded\",\"inputs\":[{\"name\":\"churnAmount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MaxWeightExceeded\",\"inputs\":[{\"name\":\"newValidatorWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MinStakeDurationNotPassed\",\"inputs\":[{\"name\":\"endTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"NodeAlreadyRegistered\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PChainOwnerAddressesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnauthorizedOwner\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnexpectedRegistrationStatus\",\"inputs\":[{\"name\":\"validRegistration\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"type\":\"error\",\"name\":\"ValidatorIneligibleForRewards\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ValidatorNotPoS\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroWeightToValueFactor\",\"inputs\":[]}]", + Bin: "0x608060405234801561000f575f80fd5b506040516163e83803806163e883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61629b8061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101d7575f3560e01c806380dd672f11610101578063ba3a4b971161009a578063ba3a4b971461040a578063bc5fbfec1461041d578063bee0a03f14610444578063c974d1b614610457578063d5f20ff61461045f578063df93d8de1461047f578063e4a63c4014610489578063f74c607b146104b0578063fd7ac5e7146104c3575f80fd5b806380dd672f1461036c5780638280a25a1461037f57806393e24598146103875780639e1bc4ef1461039a578063a3a65e48146103ad578063a9778a7a14610299578063afb98096146103c0578063afba878a146103e7578063b771b3bc146103ef575f80fd5b80633a1cfff6116101735780633a1cfff6146102b5578063467ef06f146102c85780634bee0040146102db57806360305d62146102fc57806360ad778414610319578063620658561461032c57806366435abf1461033f578063732214f81461035257806376f7862114610359575f80fd5b80630118acc4146101db5780630322ed98146101f0578063151d30d1146102035780631ec447241461022257806320d91b7a1461023557806325e1c776146102485780632893d0771461025b5780632e2194d81461026e57806335455ded14610299575b5f80fd5b6101ee6101e9366004615537565b6104d6565b005b6101ee6101fe366004615572565b6104e8565b61020b600a81565b60405160ff90911681526020015b60405180910390f35b6101ee610230366004615537565b6106f4565b6101ee610243366004615589565b610700565b6101ee6102563660046155d7565b610bfe565b6101ee6102693660046155d7565b610c72565b61028161027c366004615572565b610f94565b6040516001600160401b039091168152602001610219565b6102a261271081565b60405161ffff9091168152602001610219565b6101ee6102c3366004615537565b610fe8565b6101ee6102d63660046155f8565b610ff4565b6102ee6102e9366004615638565b6110d0565b604051908152602001610219565b610304601481565b60405163ffffffff9091168152602001610219565b6101ee6103273660046155d7565b6110f7565b6102ee61033a36600461569d565b611352565b61028161034d366004615572565b611372565b6102ee5f81565b6101ee610367366004615537565b611386565b6101ee61037a3660046155d7565b611393565b61020b603081565b6101ee610395366004615572565b61154e565b6102ee6103a83660046156b6565b6115f5565b6101ee6103bb3660046155f8565b611613565b6102ee7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61020b605081565b6103fd6005600160991b0181565b60405161021991906156d6565b6101ee610418366004615572565b611799565b6102ee7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b6101ee610452366004615572565b611977565b61020b601481565b61047261046d366004615572565b611a94565b604051610219919061575f565b6102816202a30081565b6102ee7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab0081565b6101ee6104be3660046157f3565b611bd6565b6102ee6104d1366004615831565b611cb5565b6104e38383836001611ced565b505050565b5f6104f1612058565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600581111561052a5761052a6156ea565b600581111561053b5761053b6156ea565b815260200160018201805461054f9061589c565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061589c565b80156105c65780601f1061059d576101008083540402835291602001916105c6565b820191905f5260205f20905b8154815290600101906020018083116105a957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115610631576106316156ea565b1461066d575f8381526007830160205260409081902054905163170cc93360e21b81526106649160ff16906004016158d4565b60405180910390fd5b6005600160991b016001600160a01b031663ee5b48eb6106928584606001515f61207c565b6040518263ffffffff1660e01b81526004016106ae91906158e2565b6020604051808303815f875af11580156106ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ee91906158f4565b50505050565b6104e38383835f611ced565b5f610709612058565b600981015490915060ff161561073257604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610775573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079991906158f4565b8360200135146107c2576040516372b0a7e760e11b815260208401356004820152602401610664565b306107d3606085016040860161590b565b6001600160a01b03161461080b576107f1606084016040850161590b565b604051632f88120d60e21b815260040161066491906156d6565b5f6108196060850185615926565b905090505f805b828163ffffffff161015610b00575f61083c6060880188615926565b8363ffffffff168181106108525761085261596b565b9050602002810190610864919061597f565b61086d90615aa3565b80516040519192505f91600888019161088591615b1c565b908152602001604051809103902054146108b557805160405163a41f772f60e01b815261066491906004016158e2565b5f6002885f0135846040516020016108e492919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526108fe91615b1c565b602060405180830381855afa158015610919573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061093c91906158f4565b90508086600801835f01516040516109549190615b1c565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff191660018360058111156109d6576109d66156ea565b0217905550602082015160018201906109ef9082615b71565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090930151600390920180546001600160401b03191692841692909217909155830151610a93911685615c40565b8251604051919550610aa491615b1c565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610af990615c53565b9050610820565b50600483018190556001830154606490610b2490600160401b900460ff1683615c75565b1015610b4657604051635943317f60e01b815260048101829052602401610664565b5f610b5c610b53866120d3565b604001516121de565b90505f610b688761236b565b90505f600282604051610b7b9190615b1c565b602060405180830381855afa158015610b96573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bb991906158f4565b9050828114610be557604051631872fc8d60e01b81526004810182905260248101849052604401610664565b5050506009909201805460ff1916600117905550505050565b610c0782612540565b610c27576040516330efa98b60e01b815260048101839052602401610664565b5f610c3183611a94565b5190506002816005811115610c4857610c486156ea565b14610c68578060405163170cc93360e21b815260040161066491906158d4565b6106ee8383612569565b610c7a6127b7565b5f610c83612801565b90505f610c8f84611a94565b9050600281516005811115610ca657610ca66156ea565b14610cc757805160405163170cc93360e21b815261066491906004016158d4565b610cd084612540565b610cf0576040516330efa98b60e01b815260048101859052602401610664565b5f8481526005830160205260409020546001600160a01b03163314610d2b57335b604051636e2ccd7560e11b815260040161066491906156d6565b5f84815260058301602052604090205460a08201514291610d5d91600160b01b9091046001600160401b031690615c8c565b6001600160401b0316816001600160401b03161015610d9a5760405163fb6ce63f60e01b81526001600160401b0382166004820152602401610664565b5f610da58686612569565b5f87815260058601602052604081206001015491925090610dd690600160401b90046001600160401b031683615cac565b5f888152600587016020526040812060010154919250600160801b9091046001600160401b031690819003610e0c575060a08401515b610e17828286612825565b610e3757604051635bff683f60e11b815260048101899052602401610664565b600486015460408601515f916001600160a01b031690634f22429f90610e5c90611352565b848589886040518663ffffffff1660e01b8152600401610e80959493929190615ccc565b602060405180830381865afa158015610e9b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ebf91906158f4565b90506064605060ff168760a0015187610ed89190615cac565b610ee29190615cfa565b610eec9190615d39565b5f8a81526005890160205260409020600181018054600160401b600160c01b031916600160401b6001600160401b039485160267ffffffffffffffff60801b191617600160801b938916939093029290921790915554610f55906001600160a01b031682612870565b60405181908a907f69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a905f90a350505050505050610f906128e0565b5050565b5f80610f9e612801565b60030154610fac9084615d5e565b9050801580610fc157506001600160401b0381115b15610fe25760405163222d164360e21b815260048101849052602401610664565b92915050565b6104e38383835f612906565b610ffc6127b7565b5f611005612801565b90505f8061101284612b60565b9150915061101f82612540565b61102b575050506110c5565b5f8281526005840160205260409020546001600160a01b0316600482516005811115611059576110596156ea565b036110aa575f8381526008850160205260408120805491905561107c8282612870565b604051819085907f69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a905f90a3505b6110c0816110bb8460400151611352565b612e9a565b505050505b6110cd6128e0565b50565b5f6110d96127b7565b6110e585858585612eb8565b90506110ef6128e0565b949350505050565b5f611100612801565b5f848152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115611139576111396156ea565b600381111561114a5761114a6156ea565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6111c082611a94565b90506001835160038111156111d7576111d76156ea565b146111f8578251604051633b0d540d60e21b81526106649190600401615d71565b60048151600581111561120d5761120d6156ea565b036112235761121b866130b5565b505050505050565b5f8061123a611231886120d3565b604001516132d5565b509150915081841461126757846040015160405163089938b360e11b815260040161066491815260200190565b806001600160401b031683606001516001600160401b031610806112a05750806001600160401b03168560a001516001600160401b0316115b156112c957604051632e19bc2d60e11b81526001600160401b0382166004820152602401610664565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61135b612801565b60030154610fe2906001600160401b038416615c75565b5f61137c82611a94565b6080015192915050565b6104e38383836001612906565b61139b6127b7565b5f6113a4612801565b5f848152600682016020526040808220815160e0810190925280549394509192909190829060ff1660038111156113dd576113dd6156ea565b60038111156113ee576113ee6156ea565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529050600381516003811115611467576114676156ea565b14611488578051604051633b0d540d60e21b81526106649190600401615d71565b60046114978260400151611a94565b5160058111156114a9576114a96156ea565b1461153b575f6114b8846120d3565b90505f806114c983604001516132d5565b5091509150818460400151146114f55760405163089938b360e11b815260048101839052602401610664565b806001600160401b03168460c001516001600160401b0316111561153757604051632e19bc2d60e11b81526001600160401b0382166004820152602401610664565b5050505b611544846130b5565b5050610f906128e0565b5f611557612801565b90505f61156383611a94565b519050600481600581111561157a5761157a6156ea565b1461159a578060405163170cc93360e21b815260040161066491906158d4565b5f8381526005830160205260409020546001600160a01b031633146115bf5733610d11565b5f838152600883016020908152604080832080549084905560058601909252909120546106ee906001600160a01b031682612870565b5f6115fe6127b7565b61160983338461352b565b9050610fe26128e0565b5f61161c612058565b90505f8061163561162c856120d3565b60400151613800565b915091508061165b57604051632d07135360e01b81528115156004820152602401610664565b5f828152600684016020526040902080546116759061589c565b90505f036116995760405163089938b360e11b815260048101839052602401610664565b60015f83815260078501602052604090205460ff1660058111156116bf576116bf6156ea565b146116f2575f8281526007840160205260409081902054905163170cc93360e21b81526106649160ff16906004016158d4565b5f828152600684016020526040812061170a91615486565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6117a2612801565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff1660038111156117db576117db6156ea565b60038111156117ec576117ec6156ea565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611865576118656156ea565b141580156118865750600381516003811115611883576118836156ea565b14155b156118a7578051604051633b0d540d60e21b81526106649190600401615d71565b5f6118b58260400151611a94565b905080606001516001600160401b03165f036118e7576040516339b894f960e21b815260048101859052602401610664565b6005600160991b016001600160a01b031663ee5b48eb61191484604001518460600151856080015161207c565b6040518263ffffffff1660e01b815260040161193091906158e2565b6020604051808303815f875af115801561194c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197091906158f4565b5050505050565b5f611980612058565b5f838152600682016020526040902080549192509061199e9061589c565b90505f036119c25760405163089938b360e11b815260048101839052602401610664565b60015f83815260078301602052604090205460ff1660058111156119e8576119e86156ea565b14611a1b575f8281526007820160205260409081902054905163170cc93360e21b81526106649160ff16906004016158d4565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611a549190600401615d8b565b6020604051808303815f875af1158015611a70573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e391906158f4565b611a9c6154bd565b5f611aa5612058565b5f84815260078201602052604090819020815160e0810190925280549293509091829060ff166005811115611adc57611adc6156ea565b6005811115611aed57611aed6156ea565b8152602001600182018054611b019061589c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d9061589c565b8015611b785780601f10611b4f57610100808354040283529160200191611b78565b820191905f5260205f20905b815481529060010190602001808311611b5b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c1f575080546001600160401b03808416911610155b15611c3d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611c6884846139bc565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80611cbf612058565b9050806008018484604051611cd5929190615e15565b90815260200160405180910390205491505092915050565b5f611cf6612801565b5f868152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115611d2f57611d2f6156ea565b6003811115611d4057611d406156ea565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611db682611a94565b9050600283516003811115611dcd57611dcd6156ea565b14611dee578251604051633b0d540d60e21b81526106649190600401615d71565b60208301516001600160a01b03163314611e8a575f8281526005850160205260409020546001600160a01b03163314611e275733610d11565b5f82815260058501602052604090205460a0820151611e5691600160b01b90046001600160401b031690615c8c565b6001600160401b0316421015611e8a5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610664565b600281516005811115611e9f57611e9f6156ea565b03611ff15760028401546080840151611ec1916001600160401b031690615c8c565b6001600160401b0316421015611ef55760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610664565b8615611f0757611f058287612569565b505b5f8881526006850160205260409020805460ff1916600317905560608301516080820151611f40918491611f3b9190615cac565b6139d6565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611f8184613b20565b9050858015611f8e575080155b15611faf57604051631036cf9160e11b8152600481018a9052602401610664565b5f8981526007860160205260408082208390555184918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed579190a35061204e565b600481516005811115612006576120066156ea565b036120325761201483613b20565b5f89815260078601602052604090205561202d886130b5565b61204e565b805160405163170cc93360e21b815261066491906004016158d4565b5050505050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b6040515f6020820152600360e01b6022820152602681018490526001600160c01b031960c084811b8216604684015283901b16604e82015260609060560160405160208183030381529060405290505b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612137573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261215e9190810190615e2f565b915091508061218057604051636b2f19e960e01b815260040160405180910390fd5b8151156121a6578151604051636ba589a560e01b81526004810191909152602401610664565b60208201516001600160a01b0316156121d7578160200151604051624de75d60e31b815260040161066491906156d6565b5092915050565b5f815160261461221357815160405163cc92daa160e01b815263ffffffff909116600482015260266024820152604401610664565b5f805b60028110156122625761222a816001615f01565b612235906008615c75565b61ffff1684828151811061224b5761224b61596b565b016020015160f81c901b9190911790600101612216565b5061ffff81161561228c5760405163407b587360e01b815261ffff82166004820152602401610664565b5f805b60048110156122e7576122a3816003615f01565b6122ae906008615c75565b63ffffffff16856122c0836002615c40565b815181106122d0576122d061596b565b016020015160f81c901b919091179060010161228f565b5063ffffffff81161561230d57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156123625761232481601f615f01565b61232f906008615c75565b8661233b836006615c40565b8151811061234b5761234b61596b565b016020015160f81c901b9190911790600101612310565b50949350505050565b60605f808335602085013560146123878787016040890161590b565b6123946060890189615926565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6001600160601b03191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b6124156060850185615926565b90508110156121d7578161242c6060860186615926565b8381811061243c5761243c61596b565b905060200281019061244e919061597f565b6124589080615f14565b90506124676060870187615926565b848181106124775761247761596b565b9050602002810190612489919061597f565b6124939080615f14565b6124a06060890189615926565b868181106124b0576124b061596b565b90506020028101906124c2919061597f565b6124d0906020810190615f14565b6124dd60608b018b615926565b888181106124ed576124ed61596b565b90506020028101906124ff919061597f565b61251090606081019060400161569d565b6040516020016125269796959493929190615f56565b60408051601f198184030181529190529150600101612408565b5f8061254a612801565b5f938452600501602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156125b4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125db9190810190615e2f565b91509150806125fd57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612640573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061266491906158f4565b82511461268a578151604051636ba589a560e01b81526004810191909152602401610664565b60208201516001600160a01b0316156126bb578160200151604051624de75d60e31b815260040161066491906156d6565b5f806126ca8460400151613ce0565b915091508187146126f15760405163089938b360e11b815260048101889052602401610664565b5f6126fa612801565b5f8981526005820160205260409020600101549091506001600160401b03908116908316111561278d575f88815260058201602090815260409182902060010180546001600160401b0319166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26127ac565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f008054600119016127fb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f60506128328484615cac565b61283c9190615cfa565b6001600160401b0316612850856064615cfa565b6001600160401b0316101561286657505f6120cc565b5060019392505050565b5f612879613ed1565b80546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b1580156128c5575f80fd5b505af11580156128d7573d5f803e3d5ffd5b50505050505050565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f61290f612801565b90505f61291b86613ef5565b905061292686612540565b6129315750506106ee565b5f8681526005830160205260409020546001600160a01b031633146129565733610d11565b5f86815260058301602052604090205460a082015161298591600160b01b90046001600160401b031690615c8c565b6001600160401b03168160c001516001600160401b031610156129cc5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610664565b5f85156129e4576129dd8786612569565b9050612a02565b505f8681526005830160205260409020600101546001600160401b03165b5f878152600584016020526040812060010154612a2f90600160401b90046001600160401b031683615cac565b5f898152600586016020526040812060010154919250600160801b9091046001600160401b031690819003612a65575060a08301515b858015612a7e5750612a7c82828660c00151612825565b155b15612a9f57604051635bff683f60e11b8152600481018a9052602401610664565b600485015460408501515f916001600160a01b031690634f22429f90612ac490611352565b84858960c00151886040518663ffffffff1660e01b8152600401612aec959493929190615ccc565b602060405180830381865afa158015612b07573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b2b91906158f4565b905080866008015f8c81526020019081526020015f205f828254612b4f9190615c40565b909155505050505050505050505050565b5f612b696154bd565b5f612b72612058565b90505f80612b8261162c876120d3565b915091508015612ba957604051632d07135360e01b81528115156004820152602401610664565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612bda57612bda6156ea565b6005811115612beb57612beb6156ea565b8152602001600182018054612bff9061589c565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2b9061589c565b8015612c765780601f10612c4d57610100808354040283529160200191612c76565b820191905f5260205f20905b815481529060010190602001808311612c5957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612ce157612ce16156ea565b14158015612d025750600181516005811115612cff57612cff6156ea565b14155b15612d2357805160405163170cc93360e21b815261066491906004016158d4565b600381516005811115612d3857612d386156ea565b03612d465760048152612d4b565b600581525b836008018160200151604051612d619190615b1c565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612da557612da56156ea565b021790555060208201516001820190612dbe9082615b71565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b0319169190921617905580516005811115612e6357612e636156ea565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b610f908282612ea7613ed1565b546001600160a01b031691906141cd565b5f80612ec2612801565b600281015490915061ffff600160401b90910481169086161080612eeb575061271061ffff8616115b15612f0f57604051635f12e6c360e11b815261ffff86166004820152602401610664565b60028101546001600160401b039081169085161015612f4b576040516202a06d60e11b81526001600160401b0385166004820152602401610664565b8054831080612f5d5750806001015483115b15612f7e5760405163222d164360e21b815260048101849052602401610664565b5f612f888461422c565b90505f612f9482610f94565b90505f612fa18983614249565b90506040518060c00160405280612fb53390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f6060808801829052608080890183905260a09889018390528a83526005909d0185529082902088518154958a0151938a01518516600160b01b0267ffffffffffffffff60b01b1994909716600160a01b026001600160b01b03199096169716969096179390931716929092178355840151600190920180549885015194909301518116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b031990991692909116919091179690961791909116949094179093555090915050949350505050565b5f6130be612801565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff1660038111156130f7576130f76156ea565b6003811115613108576131086156ea565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061317c6147a6565b826080015161318b9190615c8c565b6001600160401b03164210156131bf5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610664565b5f848152600684016020908152604080832080546001600160a81b0319168155600181018490556002018390556007860190915281208054908290559080821561327a575f8481526005870160205260409020546127109061322c90600160a01b900461ffff1685615c75565b6132369190615d5e565b915081866008015f8681526020019081526020015f205f82825461325a9190615c40565b9091555061326a90508284615f01565b905061327a856020015182612870565b61328f85602001516110bb8760600151611352565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f835160361461330c57835160405163cc92daa160e01b815263ffffffff909116600482015260366024820152604401610664565b5f805b600281101561335b57613323816001615f01565b61332e906008615c75565b61ffff168682815181106133445761334461596b565b016020015160f81c901b919091179060010161330f565b5061ffff8116156133855760405163407b587360e01b815261ffff82166004820152602401610664565b5f805b60048110156133e05761339c816003615f01565b6133a7906008615c75565b63ffffffff16876133b9836002615c40565b815181106133c9576133c961596b565b016020015160f81c901b9190911790600101613388565b5063ffffffff811660031461340857604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561345d5761341f81601f615f01565b61342a906008615c75565b88613436836006615c40565b815181106134465761344661596b565b016020015160f81c901b919091179060010161340b565b505f805b60088110156134bc57613475816007615f01565b613480906008615c75565b6001600160401b031689613495836026615c40565b815181106134a5576134a561596b565b016020015160f81c901b9190911790600101613461565b505f805b600881101561351b576134d4816007615f01565b6134df906008615c75565b6001600160401b03168a6134f483602e615c40565b815181106135045761350461596b565b016020015160f81c901b91909117906001016134c0565b5091989097509095509350505050565b5f80613535612801565b90505f61354461027c8561422c565b90505f61355087611a94565b905061355b87612540565b61357b576040516330efa98b60e01b815260048101889052602401610664565b600281516005811115613590576135906156ea565b146135b157805160405163170cc93360e21b815261066491906004016158d4565b5f8282608001516135c29190615c8c565b905083600201600a9054906101000a90046001600160401b031682604001516135eb9190615cfa565b6001600160401b0316816001600160401b0316111561362857604051636d51fe0560e11b81526001600160401b0382166004820152602401610664565b5f806136348a846139d6565b915091505f8a8360405160200161366292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260068b01909152902081518154829060ff191660018360038111156136f5576136f56156ea565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f80825160271461383657825160405163cc92daa160e01b815263ffffffff909116600482015260276024820152604401610664565b5f805b60028110156138855761384d816001615f01565b613858906008615c75565b61ffff1685828151811061386e5761386e61596b565b016020015160f81c901b9190911790600101613839565b5061ffff8116156138af5760405163407b587360e01b815261ffff82166004820152602401610664565b5f805b600481101561390a576138c6816003615f01565b6138d1906008615c75565b63ffffffff16866138e3836002615c40565b815181106138f3576138f361596b565b016020015160f81c901b91909117906001016138b2565b5063ffffffff811660021461393257604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156139875761394981601f615f01565b613954906008615c75565b87613960836006615c40565b815181106139705761397061596b565b016020015160f81c901b9190911790600101613935565b505f8660268151811061399c5761399c61596b565b016020015191976001600160f81b03199092161515965090945050505050565b6139c46147c1565b6139cd8261480c565b610f9081614880565b5f805f6139e1612058565b5f868152600782016020526040902060020154909150600160801b90046001600160401b0316613a1185826148dc565b5f613a1b87614b01565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb613a6b8a858b61207c565b6040518263ffffffff1660e01b8152600401613a8791906158e2565b6020604051808303815f875af1158015613aa3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ac791906158f4565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f80613b2a612801565b90505f613b3a8460400151611a94565b90505f600382516005811115613b5257613b526156ea565b1480613b705750600482516005811115613b6e57613b6e6156ea565b145b15613b80575060c0810151613bbd565b600282516005811115613b9557613b956156ea565b03613ba1575042613bbd565b815160405163170cc93360e21b815261066491906004016158d4565b84608001516001600160401b0316816001600160401b031611613be457505f949350505050565b6040808601515f90815260058501602052206001015460a0830151613c13916001600160401b03169083612825565b613c2157505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f90613c4690611352565b60a085015160808901516040808b01515f90815260058a016020528190206001015490516001600160e01b031960e087901b168152613c989493929188916001600160401b0390911690600401615ccc565b602060405180830381865afa158015613cb3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cd791906158f4565b95945050505050565b5f808251602e14613d1657825160405163cc92daa160e01b815263ffffffff9091166004820152602e6024820152604401610664565b5f805b6002811015613d6557613d2d816001615f01565b613d38906008615c75565b61ffff16858281518110613d4e57613d4e61596b565b016020015160f81c901b9190911790600101613d19565b5061ffff811615613d8f5760405163407b587360e01b815261ffff82166004820152602401610664565b5f805b6004811015613dea57613da6816003615f01565b613db1906008615c75565b63ffffffff1686613dc3836002615c40565b81518110613dd357613dd361596b565b016020015160f81c901b9190911790600101613d92565b5063ffffffff811615613e1057604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613e6557613e2781601f615f01565b613e32906008615c75565b87613e3e836006615c40565b81518110613e4e57613e4e61596b565b016020015160f81c901b9190911790600101613e13565b505f805b6008811015613ec457613e7d816007615f01565b613e88906008615c75565b6001600160401b031688613e9d836026615c40565b81518110613ead57613ead61596b565b016020015160f81c901b9190911790600101613e69565b5090969095509350505050565b7f6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab0090565b613efd6154bd565b5f613f06612058565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166005811115613f3f57613f3f6156ea565b6005811115613f5057613f506156ea565b8152602001600182018054613f649061589c565b80601f0160208091040260200160405190810160405280929190818152602001828054613f909061589c565b8015613fdb5780601f10613fb257610100808354040283529160200191613fdb565b820191905f5260205f20905b815481529060010190602001808311613fbe57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115614049576140496156ea565b1461407c575f8481526007830160205260409081902054905163170cc93360e21b81526106649160ff16906004016158d4565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156140c0576140c06156ea565b0217905550602082015160018201906140d99082615b71565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b031916919092161790555f61417685826139d6565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104e391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614b6a565b5f610fe282614239613ed1565b546001600160a01b031690614bc2565b5f614252612058565b6009015460ff1661427657604051637fab81e560e01b815260040160405180910390fd5b5f61427f612058565b905042614292606086016040870161569d565b6001600160401b03161115806142cc57506142b06202a30042615c40565b6142c0606086016040870161569d565b6001600160401b031610155b15614306576142e1606085016040860161569d565b604051635879da1360e11b81526001600160401b039091166004820152602401610664565b61431b6143166060860186615fbf565b614d23565b61432b6143166080860186615fbf565b603061433a6020860186615f14565b90501461436c5761434e6020850185615f14565b6040516326475b2f60e11b8152610664925060040190815260200190565b6143768480615f14565b90505f036143a3576143888480615f14565b604051633e08a12560e11b8152600401610664929190615fd3565b5f600882016143b28680615f14565b6040516143c0929190615e15565b908152602001604051809103902054146143f9576143de8480615f14565b60405163a41f772f60e01b8152600401610664929190615fd3565b614403835f6148dc565b6040805160e08101909152815481525f90819061450f90602081016144288980615f14565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614470908a018a615f14565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016144b960608a0160408b0161569d565b6001600160401b031681526020016144d460608a018a615fbf565b6144dd90616001565b81526020016144ef60808a018a615fbf565b6144f890616001565b8152602001876001600160401b0316815250614e8c565b5f8281526006860160205260409020919350915061452d8282615b71565b50816008840161453d8880615f14565b60405161454b929190615e15565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906145879085906004016158e2565b6020604051808303815f875af11580156145a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145c791906158f4565b6040805160e0810190915290915080600181526020016145e78980615f14565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff19166001836005811115614676576146766156ea565b02179055506020820151600182019061468f9082615b71565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b031916919092161790558061472c8880615f14565b60405161473a929190615e15565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190614778919061569d565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f6147af612058565b600101546001600160401b0316919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661480a57604051631afcd79f60e31b815260040160405180910390fd5b565b6148146147c1565b61481d81615079565b614825615092565b6110cd6060820135608083013561484260c0850160a0860161569d565b61485260e0860160c087016160c8565b614863610100870160e088016160e1565b61010087013561487b61014089016101208a0161590b565b6150a2565b6148886147c1565b5f614891613ed1565b90506001600160a01b0382166148bc5781604051637330680360e01b815260040161066491906156d6565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f6148e5612058565b90505f826001600160401b0316846001600160401b031611156149135761490c8385615cac565b9050614920565b61491d8484615cac565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061498257506001840154815161497e916001600160401b031690615c40565b8210155b156149a8576001600160401b0383166060820152818152604081015160208201526149c7565b82816060018181516149ba9190615c8c565b6001600160401b03169052505b60608101516149d7906064615cfa565b602082015160018601546001600160401b039290921691614a029190600160401b900460ff16615c75565b1015614a3257606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610664565b856001600160401b031681604001818151614a4d9190615c40565b9052506040810180516001600160401b0387169190614a6d908390615f01565b90525060018401546040820151606491614a9291600160401b90910460ff1690615c75565b1015614ab9578060400151604051635943317f60e01b815260040161066491815260200190565b80516002850155602081015160038501556040810151600485015560600151600590930180546001600160401b0319166001600160401b039094169390931790925550505050565b5f80614b0b612058565b5f8481526007820160205260409020600201805491925090600890614b3f90600160401b90046001600160401b0316616101565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f614b7e6001600160a01b03841683615238565b905080515f14158015614ba2575080806020019051810190614ba0919061611c565b155b156104e35782604051635274afe760e01b815260040161066491906156d6565b5f80836001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401614bf091906156d6565b602060405180830381865afa158015614c0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614c2f91906158f4565b9050614c466001600160a01b038516333086615245565b6040516370a0823160e01b81525f906001600160a01b038616906370a0823190614c749030906004016156d6565b602060405180830381865afa158015614c8f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614cb391906158f4565b9050818111614d195760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610664565b613cd78282615f01565b614d3060208201826155f8565b63ffffffff16158015614d505750614d4b6020820182615926565b151590505b15614d9757614d6260208201826155f8565b614d6f6020830183615926565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610664565b614da46020820182615926565b9050614db360208301836155f8565b63ffffffff161115614dcc57614d6260208201826155f8565b60015b614ddc6020830183615926565b9050811015610f9057614df26020830183615926565b614dfd600184615f01565b818110614e0c57614e0c61596b565b9050602002016020810190614e21919061590b565b6001600160a01b0316614e376020840184615926565b83818110614e4757614e4761596b565b9050602002016020810190614e5c919061590b565b6001600160a01b03161015614e8457604051630dbc8d5f60e31b815260040160405180910390fd5b600101614dcf565b5f6060826040015151603014614eb55760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614ef6988a986001989297929690959094909390929101616137565b60405160208183030381529060405290505f5b84608001516020015151811015614f6857818560800151602001518281518110614f3557614f3561596b565b6020026020010151604051602001614f4e9291906161f1565b60408051601f198184030181529190529150600101614f09565b5060a0840151805160209182015151604051614f88938593929101616222565b60405160208183030381529060405290505f5b8460a001516020015151811015614ffa57818560a00151602001518281518110614fc757614fc761596b565b6020026020010151604051602001614fe09291906161f1565b60408051601f198184030181529190529150600101614f9b565b5060c084015160405161501191839160200161625d565b60405160208183030381529060405290506002816040516150329190615b1c565b602060405180830381855afa15801561504d573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061507091906158f4565b94909350915050565b6150816147c1565b61508961527e565b6110cd81615286565b61509a6147c1565b61480a615369565b6150aa6147c1565b5f6150b3612801565b905061ffff851615806150cb575061271061ffff8616115b156150ef57604051635f12e6c360e11b815261ffff86166004820152602401610664565b868811156151135760405163222d164360e21b815260048101899052602401610664565b60ff841615806151265750600a60ff8516115b156151495760405163170db35960e31b815260ff85166004820152602401610664565b6151516147a6565b6001600160401b0316866001600160401b0316101561518d576040516202a06d60e11b81526001600160401b0387166004820152602401610664565b825f036151ad5760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b60606120cc83835f615371565b6040516001600160a01b0384811660248301528381166044830152606482018390526106ee9186918216906323b872dd906084016141fa565b61480a6147c1565b61528e6147c1565b5f615297612058565b82358155905060146152af60608401604085016160e1565b60ff1611806152ce57506152c960608301604084016160e1565b60ff16155b15615302576152e360608301604084016160e1565b604051634a59bbff60e11b815260ff9091166004820152602401610664565b61531260608301604084016160e1565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055615343604083016020840161569d565b60019190910180546001600160401b0319166001600160401b0390921691909117905550565b6128e06147c1565b606081471015615396573060405163cd78605960e01b815260040161066491906156d6565b5f80856001600160a01b031684866040516153b19190615b1c565b5f6040518083038185875af1925050503d805f81146153eb576040519150601f19603f3d011682016040523d82523d5f602084013e6153f0565b606091505b509150915061540086838361540a565b9695505050505050565b60608261541f5761541a8261545d565b6120cc565b815115801561543657506001600160a01b0384163b155b156154565783604051639996b31560e01b815260040161066491906156d6565b50806120cc565b80511561546d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546154929061589c565b5f825580601f106154a1575050565b601f0160209004905f5260205f20908101906110cd91906154fa565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561550e575f81556001016154fb565b5090565b80151581146110cd575f80fd5b803563ffffffff81168114615532575f80fd5b919050565b5f805f60608486031215615549575f80fd5b83359250602084013561555b81615512565b91506155696040850161551f565b90509250925092565b5f60208284031215615582575f80fd5b5035919050565b5f806040838503121561559a575f80fd5b82356001600160401b038111156155af575f80fd5b8301608081860312156155c0575f80fd5b91506155ce6020840161551f565b90509250929050565b5f80604083850312156155e8575f80fd5b823591506155ce6020840161551f565b5f60208284031215615608575f80fd5b6120cc8261551f565b803561ffff81168114615532575f80fd5b80356001600160401b0381168114615532575f80fd5b5f805f806080858703121561564b575f80fd5b84356001600160401b03811115615660575f80fd5b850160a08188031215615671575f80fd5b935061567f60208601615611565b925061568d60408601615622565b9396929550929360600135925050565b5f602082840312156156ad575f80fd5b6120cc82615622565b5f80604083850312156156c7575f80fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b634e487b7160e01b5f52602160045260245ffd5b6006811061570e5761570e6156ea565b9052565b5f5b8381101561572c578181015183820152602001615714565b50505f910152565b5f815180845261574b816020860160208601615712565b601f01601f19169290920160200192915050565b602081526157716020820183516156fe565b5f602083015160e0604084015261578c610100840182615734565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b03811681146110cd575f80fd5b5f80828403610160811215615806575f80fd5b61014080821215615815575f80fd5b8493508301359050615826816157df565b809150509250929050565b5f8060208385031215615842575f80fd5b82356001600160401b0380821115615858575f80fd5b818501915085601f83011261586b575f80fd5b813581811115615879575f80fd5b86602082850101111561588a575f80fd5b60209290920196919550909350505050565b600181811c908216806158b057607f821691505b6020821081036158ce57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610fe282846156fe565b602081525f6120cc6020830184615734565b5f60208284031215615904575f80fd5b5051919050565b5f6020828403121561591b575f80fd5b81356120cc816157df565b5f808335601e1984360301811261593b575f80fd5b8301803591506001600160401b03821115615954575f80fd5b6020019150600581901b3603821315613b19575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615993575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156159d3576159d361599d565b60405290565b604080519081016001600160401b03811182821017156159d3576159d361599d565b604051601f8201601f191681016001600160401b0381118282101715615a2357615a2361599d565b604052919050565b5f6001600160401b03821115615a4357615a4361599d565b50601f01601f191660200190565b5f82601f830112615a60575f80fd5b8135615a73615a6e82615a2b565b6159fb565b818152846020838601011115615a87575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615ab3575f80fd5b615abb6159b1565b82356001600160401b0380821115615ad1575f80fd5b615add36838701615a51565b83526020850135915080821115615af2575f80fd5b50615aff36828601615a51565b602083015250615b1160408401615622565b604082015292915050565b5f8251615993818460208701615712565b601f8211156104e357805f5260205f20601f840160051c81016020851015615b525750805b601f840160051c820191505b81811015611970575f8155600101615b5e565b81516001600160401b03811115615b8a57615b8a61599d565b615b9e81615b98845461589c565b84615b2d565b602080601f831160018114615bd1575f8415615bba5750858301515b5f19600386901b1c1916600185901b17855561121b565b5f85815260208120601f198616915b82811015615bff57888601518255948401946001909101908401615be0565b5085821015615c1c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610fe257610fe2615c2c565b5f63ffffffff808316818103615c6b57615c6b615c2c565b6001019392505050565b8082028115828204841417610fe257610fe2615c2c565b6001600160401b038181168382160190808211156121d7576121d7615c2c565b6001600160401b038281168282160390808211156121d7576121d7615c2c565b9485526001600160401b03938416602086015291831660408501528216606084015216608082015260a00190565b6001600160401b03818116838216028082169190828114615d1d57615d1d615c2c565b505092915050565b634e487b7160e01b5f52601260045260245ffd5b5f6001600160401b0380841680615d5257615d52615d25565b92169190910492915050565b5f82615d6c57615d6c615d25565b500490565b6020810160048310615d8557615d856156ea565b91905290565b5f60208083525f8454615d9d8161589c565b806020870152604060018084165f8114615dbe5760018114615dda57615e07565b60ff19851660408a0152604084151560051b8a01019550615e07565b895f5260205f205f5b85811015615dfe5781548b8201860152908301908801615de3565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b805161553281615512565b5f8060408385031215615e40575f80fd5b82516001600160401b0380821115615e56575f80fd5b9084019060608287031215615e69575f80fd5b615e716159b1565b82518152602080840151615e84816157df565b82820152604084015183811115615e99575f80fd5b80850194505087601f850112615ead575f80fd5b83519250615ebd615a6e84615a2b565b8381528882858701011115615ed0575f80fd5b615edf84838301848801615712565b80604084015250819550615ef4818801615e24565b9450505050509250929050565b81810381811115610fe257610fe2615c2c565b5f808335601e19843603018112615f29575f80fd5b8301803591506001600160401b03821115615f42575f80fd5b602001915036819003821315613b19575f80fd5b5f8851615f67818460208d01615712565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b5f8235603e19833603018112615993575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215616011575f80fd5b6160196159d9565b6160228361551f565b81526020808401356001600160401b038082111561603e575f80fd5b9085019036601f830112616050575f80fd5b8135818111156160625761606261599d565b8060051b91506160738483016159fb565b818152918301840191848101903684111561608c575f80fd5b938501935b838510156160b657843592506160a6836157df565b8282529385019390850190616091565b94860194909452509295945050505050565b5f602082840312156160d8575f80fd5b6120cc82615611565b5f602082840312156160f1575f80fd5b813560ff811681146120cc575f80fd5b5f6001600160401b03808316818103615c6b57615c6b615c2c565b5f6020828403121561612c575f80fd5b81516120cc81615512565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b16602684015250865161617d81602a850160208b01615712565b86519083019061619481602a840160208b01615712565b60c087901b6001600160c01b031916602a92909101918201526161c6603282018660e01b6001600160e01b0319169052565b6161df603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351616202818460208801615712565b60609390931b6001600160601b0319169190920190815260140192915050565b5f8451616233818460208901615712565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f835161626e818460208801615712565b60c09390931b6001600160c01b031916919092019081526008019291505056fea164736f6c6343000819000a", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -572,6 +572,37 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) PCHAINBL return _ERC20TokenStakingManager.Contract.PCHAINBLOCKCHAINID(&_ERC20TokenStakingManager.CallOpts) } +// UPTIMEREWARDSTHRESHOLDPERCENTAGE is a free data retrieval call binding the contract method 0xafba878a. +// +// Solidity: function UPTIME_REWARDS_THRESHOLD_PERCENTAGE() view returns(uint8) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCaller) UPTIMEREWARDSTHRESHOLDPERCENTAGE(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ERC20TokenStakingManager.contract.Call(opts, &out, "UPTIME_REWARDS_THRESHOLD_PERCENTAGE") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// UPTIMEREWARDSTHRESHOLDPERCENTAGE is a free data retrieval call binding the contract method 0xafba878a. +// +// Solidity: function UPTIME_REWARDS_THRESHOLD_PERCENTAGE() view returns(uint8) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) UPTIMEREWARDSTHRESHOLDPERCENTAGE() (uint8, error) { + return _ERC20TokenStakingManager.Contract.UPTIMEREWARDSTHRESHOLDPERCENTAGE(&_ERC20TokenStakingManager.CallOpts) +} + +// UPTIMEREWARDSTHRESHOLDPERCENTAGE is a free data retrieval call binding the contract method 0xafba878a. +// +// Solidity: function UPTIME_REWARDS_THRESHOLD_PERCENTAGE() view returns(uint8) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) UPTIMEREWARDSTHRESHOLDPERCENTAGE() (uint8, error) { + return _ERC20TokenStakingManager.Contract.UPTIMEREWARDSTHRESHOLDPERCENTAGE(&_ERC20TokenStakingManager.CallOpts) +} + // VALIDATORMANAGERSTORAGELOCATION is a free data retrieval call binding the contract method 0xbc5fbfec. // // Solidity: function VALIDATOR_MANAGER_STORAGE_LOCATION() view returns(bytes32) @@ -810,46 +841,67 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Clai return _ERC20TokenStakingManager.Contract.ClaimDelegationFees(&_ERC20TokenStakingManager.TransactOpts, validationID) } -// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x5297fae6. +// ClaimValidationRewards is a paid mutator transaction binding the contract method 0x2893d077. // -// Solidity: function completeDelegatorRegistration(uint32 messageIndex, bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteDelegatorRegistration(opts *bind.TransactOpts, messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "completeDelegatorRegistration", messageIndex, delegationID) +// Solidity: function claimValidationRewards(bytes32 validationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ClaimValidationRewards(opts *bind.TransactOpts, validationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "claimValidationRewards", validationID, messageIndex) } -// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x5297fae6. +// ClaimValidationRewards is a paid mutator transaction binding the contract method 0x2893d077. // -// Solidity: function completeDelegatorRegistration(uint32 messageIndex, bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteDelegatorRegistration(messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, messageIndex, delegationID) +// Solidity: function claimValidationRewards(bytes32 validationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ClaimValidationRewards(validationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ClaimValidationRewards(&_ERC20TokenStakingManager.TransactOpts, validationID, messageIndex) } -// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x5297fae6. +// ClaimValidationRewards is a paid mutator transaction binding the contract method 0x2893d077. // -// Solidity: function completeDelegatorRegistration(uint32 messageIndex, bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteDelegatorRegistration(messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, messageIndex, delegationID) +// Solidity: function claimValidationRewards(bytes32 validationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ClaimValidationRewards(validationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ClaimValidationRewards(&_ERC20TokenStakingManager.TransactOpts, validationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x98f3e2b4. +// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x60ad7784. // -// Solidity: function completeEndDelegation(uint32 messageIndex, bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "completeEndDelegation", messageIndex, delegationID) +// Solidity: function completeDelegatorRegistration(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteDelegatorRegistration(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "completeDelegatorRegistration", delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x98f3e2b4. +// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x60ad7784. // -// Solidity: function completeEndDelegation(uint32 messageIndex, bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteEndDelegation(messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, messageIndex, delegationID) +// Solidity: function completeDelegatorRegistration(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteDelegatorRegistration(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x98f3e2b4. +// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x60ad7784. // -// Solidity: function completeEndDelegation(uint32 messageIndex, bytes32 delegationID) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteEndDelegation(messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, messageIndex, delegationID) +// Solidity: function completeDelegatorRegistration(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteDelegatorRegistration(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteDelegatorRegistration(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) +} + +// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// +// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "completeEndDelegation", delegationID, messageIndex) +} + +// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// +// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) +} + +// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// +// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.CompleteEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, messageIndex) } // CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. @@ -2670,6 +2722,159 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidati return event, nil } +// ERC20TokenStakingManagerValidationRewardsClaimedIterator is returned from FilterValidationRewardsClaimed and is used to iterate over the raw logs and unpacked data for ValidationRewardsClaimed events raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerValidationRewardsClaimedIterator struct { + Event *ERC20TokenStakingManagerValidationRewardsClaimed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *ERC20TokenStakingManagerValidationRewardsClaimedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(ERC20TokenStakingManagerValidationRewardsClaimed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(ERC20TokenStakingManagerValidationRewardsClaimed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *ERC20TokenStakingManagerValidationRewardsClaimedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ERC20TokenStakingManagerValidationRewardsClaimedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ERC20TokenStakingManagerValidationRewardsClaimed represents a ValidationRewardsClaimed event raised by the ERC20TokenStakingManager contract. +type ERC20TokenStakingManagerValidationRewardsClaimed struct { + ValidationID [32]byte + Reward *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidationRewardsClaimed is a free log retrieval operation binding the contract event 0x69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a. +// +// Solidity: event ValidationRewardsClaimed(bytes32 indexed validationID, uint256 indexed reward) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) FilterValidationRewardsClaimed(opts *bind.FilterOpts, validationID [][32]byte, reward []*big.Int) (*ERC20TokenStakingManagerValidationRewardsClaimedIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var rewardRule []interface{} + for _, rewardItem := range reward { + rewardRule = append(rewardRule, rewardItem) + } + + logs, sub, err := _ERC20TokenStakingManager.contract.FilterLogs(opts, "ValidationRewardsClaimed", validationIDRule, rewardRule) + if err != nil { + return nil, err + } + return &ERC20TokenStakingManagerValidationRewardsClaimedIterator{contract: _ERC20TokenStakingManager.contract, event: "ValidationRewardsClaimed", logs: logs, sub: sub}, nil +} + +// WatchValidationRewardsClaimed is a free log subscription operation binding the contract event 0x69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a. +// +// Solidity: event ValidationRewardsClaimed(bytes32 indexed validationID, uint256 indexed reward) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) WatchValidationRewardsClaimed(opts *bind.WatchOpts, sink chan<- *ERC20TokenStakingManagerValidationRewardsClaimed, validationID [][32]byte, reward []*big.Int) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var rewardRule []interface{} + for _, rewardItem := range reward { + rewardRule = append(rewardRule, rewardItem) + } + + logs, sub, err := _ERC20TokenStakingManager.contract.WatchLogs(opts, "ValidationRewardsClaimed", validationIDRule, rewardRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(ERC20TokenStakingManagerValidationRewardsClaimed) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationRewardsClaimed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidationRewardsClaimed is a log parse operation binding the contract event 0x69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a. +// +// Solidity: event ValidationRewardsClaimed(bytes32 indexed validationID, uint256 indexed reward) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerFilterer) ParseValidationRewardsClaimed(log types.Log) (*ERC20TokenStakingManagerValidationRewardsClaimed, error) { + event := new(ERC20TokenStakingManagerValidationRewardsClaimed) + if err := _ERC20TokenStakingManager.contract.UnpackLog(event, "ValidationRewardsClaimed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // ERC20TokenStakingManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the ERC20TokenStakingManager contract. type ERC20TokenStakingManagerValidatorRemovalInitializedIterator struct { Event *ERC20TokenStakingManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log diff --git a/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go b/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go index ab51fdaa6..f188dbe78 100644 --- a/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go +++ b/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go @@ -31,8 +31,8 @@ var ( // ExampleRewardCalculatorMetaData contains all meta data concerning the ExampleRewardCalculator contract. var ExampleRewardCalculatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"rewardBasisPoints_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BIPS_CONVERSION_FACTOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"SECONDS_IN_YEAR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPTIME_REWARDS_THRESHOLD_PERCENTAGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateReward\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"validatorStartTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakingStartTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakingEndTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"uptimeSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rewardBasisPoints\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"}]", - Bin: "0x60a0604052348015600e575f80fd5b50604051610362380380610362833981016040819052602b91603b565b6001600160401b03166080526066565b5f60208284031215604a575f80fd5b81516001600160401b0381168114605f575f80fd5b9392505050565b6080516102de6100845f395f818160c5015261015d01526102de5ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c80634f22429f146100595780635dcc93911461007f578063a9778a7a1461008a578063afba878a146100a6578063bb65b242146100c0575b5f80fd5b61006c6100673660046101d5565b6100ff565b6040519081526020015b60405180910390f35b61006c6301e1338081565b61009361271081565b60405161ffff9091168152602001610076565b6100ae605081565b60405160ff9091168152602001610076565b6100e77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610076565b5f605061010c8685610243565b610116919061026a565b6001600160401b031661012a83606461026a565b6001600160401b0316101561014057505f6101b1565b6127106301e133806101528686610243565b6001600160401b03167f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316896101909190610295565b61019a9190610295565b6101a491906102b2565b6101ae91906102b2565b90505b95945050505050565b80356001600160401b03811681146101d0575f80fd5b919050565b5f805f805f60a086880312156101e9575f80fd5b853594506101f9602087016101ba565b9350610207604087016101ba565b9250610215606087016101ba565b9150610223608087016101ba565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038281168282160390808211156102635761026361022f565b5092915050565b6001600160401b0381811683821602808216919082811461028d5761028d61022f565b505092915050565b80820281158282048414176102ac576102ac61022f565b92915050565b5f826102cc57634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"rewardBasisPoints_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BIPS_CONVERSION_FACTOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"SECONDS_IN_YEAR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateReward\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakingStartTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakingEndTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rewardBasisPoints\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"}]", + Bin: "0x60a0604052348015600e575f80fd5b506040516102d43803806102d4833981016040819052602b91603b565b6001600160401b03166080526066565b5f60208284031215604a575f80fd5b81516001600160401b0381168114605f575f80fd5b9392505050565b6080516102516100835f395f818160a0015260fa01526102515ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80634f22429f1461004e5780635dcc939114610074578063a9778a7a1461007f578063bb65b2421461009b575b5f80fd5b61006161005c366004610172565b6100db565b6040519081526020015b60405180910390f35b6100616301e1338081565b61008861271081565b60405161ffff909116815260200161006b565b6100c27f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161006b565b5f6127106301e133806100ee86866101e0565b67ffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168961012e9190610208565b6101389190610208565b6101429190610225565b61014c9190610225565b9695505050505050565b803567ffffffffffffffff8116811461016d575f80fd5b919050565b5f805f805f60a08688031215610186575f80fd5b8535945061019660208701610156565b93506101a460408701610156565b92506101b260608701610156565b91506101c060808701610156565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff828116828216039080821115610201576102016101cc565b5092915050565b808202811582820484141761021f5761021f6101cc565b92915050565b5f8261023f57634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000819000a", } // ExampleRewardCalculatorABI is the input ABI used to generate the binding from. @@ -264,43 +264,12 @@ func (_ExampleRewardCalculator *ExampleRewardCalculatorCallerSession) SECONDSINY return _ExampleRewardCalculator.Contract.SECONDSINYEAR(&_ExampleRewardCalculator.CallOpts) } -// UPTIMEREWARDSTHRESHOLDPERCENTAGE is a free data retrieval call binding the contract method 0xafba878a. -// -// Solidity: function UPTIME_REWARDS_THRESHOLD_PERCENTAGE() view returns(uint8) -func (_ExampleRewardCalculator *ExampleRewardCalculatorCaller) UPTIMEREWARDSTHRESHOLDPERCENTAGE(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _ExampleRewardCalculator.contract.Call(opts, &out, "UPTIME_REWARDS_THRESHOLD_PERCENTAGE") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// UPTIMEREWARDSTHRESHOLDPERCENTAGE is a free data retrieval call binding the contract method 0xafba878a. -// -// Solidity: function UPTIME_REWARDS_THRESHOLD_PERCENTAGE() view returns(uint8) -func (_ExampleRewardCalculator *ExampleRewardCalculatorSession) UPTIMEREWARDSTHRESHOLDPERCENTAGE() (uint8, error) { - return _ExampleRewardCalculator.Contract.UPTIMEREWARDSTHRESHOLDPERCENTAGE(&_ExampleRewardCalculator.CallOpts) -} - -// UPTIMEREWARDSTHRESHOLDPERCENTAGE is a free data retrieval call binding the contract method 0xafba878a. -// -// Solidity: function UPTIME_REWARDS_THRESHOLD_PERCENTAGE() view returns(uint8) -func (_ExampleRewardCalculator *ExampleRewardCalculatorCallerSession) UPTIMEREWARDSTHRESHOLDPERCENTAGE() (uint8, error) { - return _ExampleRewardCalculator.Contract.UPTIMEREWARDSTHRESHOLDPERCENTAGE(&_ExampleRewardCalculator.CallOpts) -} - // CalculateReward is a free data retrieval call binding the contract method 0x4f22429f. // -// Solidity: function calculateReward(uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, uint64 uptimeSeconds) view returns(uint256) -func (_ExampleRewardCalculator *ExampleRewardCalculatorCaller) CalculateReward(opts *bind.CallOpts, stakeAmount *big.Int, validatorStartTime uint64, stakingStartTime uint64, stakingEndTime uint64, uptimeSeconds uint64) (*big.Int, error) { +// Solidity: function calculateReward(uint256 stakeAmount, uint64 , uint64 stakingStartTime, uint64 stakingEndTime, uint64 ) view returns(uint256) +func (_ExampleRewardCalculator *ExampleRewardCalculatorCaller) CalculateReward(opts *bind.CallOpts, stakeAmount *big.Int, arg1 uint64, stakingStartTime uint64, stakingEndTime uint64, arg4 uint64) (*big.Int, error) { var out []interface{} - err := _ExampleRewardCalculator.contract.Call(opts, &out, "calculateReward", stakeAmount, validatorStartTime, stakingStartTime, stakingEndTime, uptimeSeconds) + err := _ExampleRewardCalculator.contract.Call(opts, &out, "calculateReward", stakeAmount, arg1, stakingStartTime, stakingEndTime, arg4) if err != nil { return *new(*big.Int), err @@ -314,16 +283,16 @@ func (_ExampleRewardCalculator *ExampleRewardCalculatorCaller) CalculateReward(o // CalculateReward is a free data retrieval call binding the contract method 0x4f22429f. // -// Solidity: function calculateReward(uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, uint64 uptimeSeconds) view returns(uint256) -func (_ExampleRewardCalculator *ExampleRewardCalculatorSession) CalculateReward(stakeAmount *big.Int, validatorStartTime uint64, stakingStartTime uint64, stakingEndTime uint64, uptimeSeconds uint64) (*big.Int, error) { - return _ExampleRewardCalculator.Contract.CalculateReward(&_ExampleRewardCalculator.CallOpts, stakeAmount, validatorStartTime, stakingStartTime, stakingEndTime, uptimeSeconds) +// Solidity: function calculateReward(uint256 stakeAmount, uint64 , uint64 stakingStartTime, uint64 stakingEndTime, uint64 ) view returns(uint256) +func (_ExampleRewardCalculator *ExampleRewardCalculatorSession) CalculateReward(stakeAmount *big.Int, arg1 uint64, stakingStartTime uint64, stakingEndTime uint64, arg4 uint64) (*big.Int, error) { + return _ExampleRewardCalculator.Contract.CalculateReward(&_ExampleRewardCalculator.CallOpts, stakeAmount, arg1, stakingStartTime, stakingEndTime, arg4) } // CalculateReward is a free data retrieval call binding the contract method 0x4f22429f. // -// Solidity: function calculateReward(uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, uint64 uptimeSeconds) view returns(uint256) -func (_ExampleRewardCalculator *ExampleRewardCalculatorCallerSession) CalculateReward(stakeAmount *big.Int, validatorStartTime uint64, stakingStartTime uint64, stakingEndTime uint64, uptimeSeconds uint64) (*big.Int, error) { - return _ExampleRewardCalculator.Contract.CalculateReward(&_ExampleRewardCalculator.CallOpts, stakeAmount, validatorStartTime, stakingStartTime, stakingEndTime, uptimeSeconds) +// Solidity: function calculateReward(uint256 stakeAmount, uint64 , uint64 stakingStartTime, uint64 stakingEndTime, uint64 ) view returns(uint256) +func (_ExampleRewardCalculator *ExampleRewardCalculatorCallerSession) CalculateReward(stakeAmount *big.Int, arg1 uint64, stakingStartTime uint64, stakingEndTime uint64, arg4 uint64) (*big.Int, error) { + return _ExampleRewardCalculator.Contract.CalculateReward(&_ExampleRewardCalculator.CallOpts, stakeAmount, arg1, stakingStartTime, stakingEndTime, arg4) } // RewardBasisPoints is a free data retrieval call binding the contract method 0xbb65b242. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index eb53a49c9..579d3e0a4 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -91,8 +91,8 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ADDRESS_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BIPS_CONVERSION_FACTOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NATIVE_MINTER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractINativeMinter\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDelegationFees\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"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\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"weightToValueFactor\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"disableOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}]},{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeValidatorSet\",\"inputs\":[{\"name\":\"subnetConversionData\",\"type\":\"tuple\",\"internalType\":\"structSubnetConversionData\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialValidators\",\"type\":\"tuple[]\",\"internalType\":\"structInitialValidator[]\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}]},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitUptimeProof\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewards\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"fees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InitialValidatorCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"DelegatorIneligibleForRewards\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBLSKeyLength\",\"inputs\":[{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidBLSPublicKey\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCodecID\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationFee\",\"inputs\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationID\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumDelegatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitializationStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMaximumChurnPercentage\",\"inputs\":[{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageLength\",\"inputs\":[{\"name\":\"actual\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"expected\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMinStakeDuration\",\"inputs\":[{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNodeID\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidNonce\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidPChainOwnerThreshold\",\"inputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addressesLength\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidRegistrationExpiry\",\"inputs\":[{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeAmount\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeMultiplier\",\"inputs\":[{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSubnetConversionID\",\"inputs\":[{\"name\":\"encodedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expectedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidTotalWeight\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidValidationID\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerAddress\",\"inputs\":[{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerBlockchainID\",\"inputs\":[{\"name\":\"blockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWarpOriginSenderAddress\",\"inputs\":[{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpSourceChainID\",\"inputs\":[{\"name\":\"sourceChainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"MaxChurnRateExceeded\",\"inputs\":[{\"name\":\"churnAmount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MaxWeightExceeded\",\"inputs\":[{\"name\":\"newValidatorWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MinStakeDurationNotPassed\",\"inputs\":[{\"name\":\"endTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"NodeAlreadyRegistered\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PChainOwnerAddressesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedOwner\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnexpectedRegistrationStatus\",\"inputs\":[{\"name\":\"validRegistration\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"type\":\"error\",\"name\":\"ValidatorIneligibleForRewards\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ValidatorNotPoS\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroWeightToValueFactor\",\"inputs\":[]}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615c4c380380615c4c83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615aff8061014d5f395ff3fe6080604052600436106101b5575f3560e01c80638280a25a116100ea578063ba3a4b971161008e578063ba3a4b97146104dc578063bc5fbfec146104fb578063bee0a03f1461052e578063c257a0f51461054d578063c599e24f1461056c578063c974d1b61461057f578063d5f20ff614610593578063df93d8de146105bf578063fd7ac5e7146105d5575f80fd5b80638280a25a1461040b57806393e245981461041f57806398f3e2b41461043e578063a3a65e481461045d578063a9778a7a146102df578063af2f5feb1461047c578063afb980961461048f578063b771b3bc146104c2575f80fd5b806335455ded1161015c57806335455ded146102df5780633a1cfff614610307578063467ef06f146103265780635297fae61461034557806360305d6214610364578063620658561461038d57806366435abf146103ba578063732214f8146103d957806376f78621146103ec575f80fd5b80630118acc4146101b95780630322ed98146101da578063151d30d1146101f95780631ec447241461022457806320d91b7a1461024357806325e1c776146102625780632e2194d814610281578063329c3e12146102b8575b5f80fd5b3480156101c4575f80fd5b506101d86101d3366004614e19565b6105f4565b005b3480156101e5575f80fd5b506101d86101f4366004614e54565b610629565b348015610204575f80fd5b5061020d600a81565b60405160ff90911681526020015b60405180910390f35b34801561022f575f80fd5b506101d861023e366004614e19565b61082c565b34801561024e575f80fd5b506101d861025d366004614e6b565b610837565b34801561026d575f80fd5b506101d861027c366004614eb9565b610d35565b34801561028c575f80fd5b506102a061029b366004614e54565b610da9565b6040516001600160401b03909116815260200161021b565b3480156102c3575f80fd5b506102d26001600160991b0181565b60405161021b9190614eda565b3480156102ea575f80fd5b506102f461271081565b60405161ffff909116815260200161021b565b348015610312575f80fd5b506101d8610321366004614e19565b610dfd565b348015610331575f80fd5b506101d8610340366004614eee565b610e08565b348015610350575f80fd5b506101d861035f366004614f07565b610eb8565b34801561036f575f80fd5b50610378601481565b60405163ffffffff909116815260200161021b565b348015610398575f80fd5b506103ac6103a7366004614f45565b611113565b60405190815260200161021b565b3480156103c5575f80fd5b506102a06103d4366004614e54565b611133565b3480156103e4575f80fd5b506103ac5f81565b3480156103f7575f80fd5b506101d8610406366004614e19565b611147565b348015610416575f80fd5b5061020d603081565b34801561042a575f80fd5b506101d8610439366004614e54565b611172565b348015610449575f80fd5b506101d8610458366004614f07565b61122f565b348015610468575f80fd5b506101d8610477366004614eee565b6113ee565b6103ac61048a366004614f6f565b611574565b34801561049a575f80fd5b506103ac7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b3480156104cd575f80fd5b506102d26005600160991b0181565b3480156104e7575f80fd5b506101d86104f6366004614e54565b61159a565b348015610506575f80fd5b506103ac7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b348015610539575f80fd5b506101d8610548366004614e54565b611778565b348015610558575f80fd5b506101d8610567366004614fc3565b611895565b6103ac61057a366004614e54565b611972565b34801561058a575f80fd5b5061020d601481565b34801561059e575f80fd5b506105b26105ad366004614e54565b611995565b60405161021b919061504f565b3480156105ca575f80fd5b506102a06202a30081565b3480156105e0575f80fd5b506103ac6105ef3660046150cf565b611ad7565b6105ff838383611b0f565b61062457604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f610632611e55565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600581111561066b5761066b614fda565b600581111561067c5761067c614fda565b81526020016001820180546106909061513a565b80601f01602080910402602001604051908101604052809291908181526020018280546106bc9061513a565b80156107075780601f106106de57610100808354040283529160200191610707565b820191905f5260205f20905b8154815290600101906020018083116106ea57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561077257610772614fda565b146107a5575f8381526007830160205260409081902054905163170cc93360e21b815261061b9160ff169060040161516c565b6005600160991b016001600160a01b031663ee5b48eb6107ca8584606001515f611e79565b6040518263ffffffff1660e01b81526004016107e6919061517a565b6020604051808303815f875af1158015610802573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610826919061518c565b50505050565b610826838383611b0f565b5f610840611e55565b600981015490915060ff161561086957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d0919061518c565b8360200135146108f9576040516372b0a7e760e11b81526020840135600482015260240161061b565b3061090a60608501604086016151b7565b6001600160a01b0316146109425761092860608401604085016151b7565b604051632f88120d60e21b815260040161061b9190614eda565b5f61095060608501856151d2565b905090505f805b828163ffffffff161015610c37575f61097360608801886151d2565b8363ffffffff1681811061098957610989615217565b905060200281019061099b919061522b565b6109a49061534f565b80516040519192505f9160088801916109bc916153c8565b908152602001604051809103902054146109ec57805160405163a41f772f60e01b815261061b919060040161517a565b5f6002885f013584604051602001610a1b92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a35916153c8565b602060405180830381855afa158015610a50573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a73919061518c565b90508086600801835f0151604051610a8b91906153c8565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff19166001836005811115610b0d57610b0d614fda565b021790555060208201516001820190610b26908261541d565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090930151600390920180546001600160401b03191692841692909217909155830151610bca9116856154ec565b8251604051919550610bdb916153c8565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c30906154ff565b9050610957565b50600483018190556001830154606490610c5b90600160401b900460ff1683615521565b1015610c7d57604051635943317f60e01b81526004810182905260240161061b565b5f610c93610c8a86611ec8565b60400151611fd3565b90505f610c9f87612160565b90505f600282604051610cb291906153c8565b602060405180830381855afa158015610ccd573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cf0919061518c565b9050828114610d1c57604051631872fc8d60e01b8152600481018290526024810184905260440161061b565b5050506009909201805460ff1916600117905550505050565b610d3e82612335565b610d5e576040516330efa98b60e01b81526004810183905260240161061b565b5f610d6883611995565b5190506002816005811115610d7f57610d7f614fda565b14610d9f578060405163170cc93360e21b815260040161061b919061516c565b610826838361235e565b5f80610db36125ac565b60030154610dc19084615538565b9050801580610dd657506001600160401b0381115b15610df75760405163222d164360e21b81526004810184905260240161061b565b92915050565b6108268383836125d0565b610e1061279b565b5f610e196125ac565b90505f80610e26846127e5565b91509150610e3382612335565b610e3f57505050610ead565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610e6d57610e6d614fda565b03610e92575f83815260088501602052604081208054919055610e908282612b1f565b505b610ea881610ea38460400151611113565b612b7d565b505050505b610eb5612b90565b50565b5f610ec16125ac565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115610efa57610efa614fda565b6003811115610f0b57610f0b614fda565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610f8182611995565b9050600183516003811115610f9857610f98614fda565b14610fb9578251604051633b0d540d60e21b815261061b9190600401615557565b600481516005811115610fce57610fce614fda565b03610fe457610fdc85612bb6565b505050505050565b5f80610ffb610ff289611ec8565b60400151612dd6565b509150915081841461102857846040015160405163089938b360e11b815260040161061b91815260200190565b806001600160401b031683606001516001600160401b031610806110615750806001600160401b03168560a001516001600160401b0316115b1561108a57604051632e19bc2d60e11b81526001600160401b038216600482015260240161061b565b5f878152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b19909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61111c6125ac565b60030154610df7906001600160401b038416615521565b5f61113d82611995565b6080015192915050565b6111528383836125d0565b61062457604051635bff683f60e11b81526004810184905260240161061b565b5f61117b6125ac565b90505f61118783611995565b519050600481600581111561119e5761119e614fda565b146111be578060405163170cc93360e21b815260040161061b919061516c565b5f8381526005830160205260409020546001600160a01b031633146111f957335b604051636e2ccd7560e11b815260040161061b9190614eda565b5f83815260088301602090815260408083208054908490556005860190925290912054610826906001600160a01b031682612b1f565b61123761279b565b5f6112406125ac565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff16600381111561127957611279614fda565b600381111561128a5761128a614fda565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561130357611303614fda565b14611324578051604051633b0d540d60e21b815261061b9190600401615557565b60046113338260400151611995565b51600581111561134557611345614fda565b146113d7575f61135485611ec8565b90505f806113658360400151612dd6565b5091509150818460400151146113915760405163089938b360e11b81526004810183905260240161061b565b806001600160401b03168460c001516001600160401b031611156113d357604051632e19bc2d60e11b81526001600160401b038216600482015260240161061b565b5050505b6113e083612bb6565b50506113ea612b90565b5050565b5f6113f7611e55565b90505f8061141061140785611ec8565b6040015161302c565b915091508061143657604051632d07135360e01b8152811515600482015260240161061b565b5f828152600684016020526040902080546114509061513a565b90505f036114745760405163089938b360e11b81526004810183905260240161061b565b60015f83815260078501602052604090205460ff16600581111561149a5761149a614fda565b146114cd575f8281526007840160205260409081902054905163170cc93360e21b815261061b9160ff169060040161516c565b5f82815260068401602052604081206114e591614d6d565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f61157d61279b565b611589848484346131e8565b9050611593612b90565b9392505050565b5f6115a36125ac565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff1660038111156115dc576115dc614fda565b60038111156115ed576115ed614fda565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561166657611666614fda565b14158015611687575060038151600381111561168457611684614fda565b14155b156116a8578051604051633b0d540d60e21b815261061b9190600401615557565b5f6116b68260400151611995565b905080606001516001600160401b03165f036116e8576040516339b894f960e21b81526004810185905260240161061b565b6005600160991b016001600160a01b031663ee5b48eb611715846040015184606001518560800151611e79565b6040518263ffffffff1660e01b8152600401611731919061517a565b6020604051808303815f875af115801561174d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611771919061518c565b5050505050565b5f611781611e55565b5f838152600682016020526040902080549192509061179f9061513a565b90505f036117c35760405163089938b360e11b81526004810183905260240161061b565b60015f83815260078301602052604090205460ff1660058111156117e9576117e9614fda565b1461181c575f8281526007820160205260409081902054905163170cc93360e21b815261061b9160ff169060040161516c565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916118559190600401615571565b6020604051808303815f875af1158015611871573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610624919061518c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806118de575080546001600160401b03808416911610155b156118fc5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561192683613394565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f61197b61279b565b6119868233346133a5565b9050611990612b90565b919050565b61199d614da4565b5f6119a6611e55565b5f84815260078201602052604090819020815160e0810190925280549293509091829060ff1660058111156119dd576119dd614fda565b60058111156119ee576119ee614fda565b8152602001600182018054611a029061513a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2e9061513a565b8015611a795780601f10611a5057610100808354040283529160200191611a79565b820191905f5260205f20905b815481529060010190602001808311611a5c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b5f80611ae1611e55565b9050806008018484604051611af79291906155fb565b90815260200160405180910390205491505092915050565b5f80611b196125ac565b5f868152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b5257611b52614fda565b6003811115611b6357611b63614fda565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611bd982611995565b9050600283516003811115611bf057611bf0614fda565b14611c11578251604051633b0d540d60e21b815261061b9190600401615557565b60208301516001600160a01b03163314611cad575f8281526005850160205260409020546001600160a01b03163314611c4a57336111df565b5f82815260058501602052604090205460a0820151611c7991600160b01b90046001600160401b03169061560a565b6001600160401b0316421015611cad5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161061b565b600281516005811115611cc257611cc2614fda565b03611df05760028401546080840151611ce4916001600160401b03169061560a565b6001600160401b0316421015611d185760405163fb6ce63f60e01b81526001600160401b034216600482015260240161061b565b8615611d2a57611d28828761235e565b505b5f8881526006850160205260409020805460ff1916600317905560608301516080820151611d63918491611d5e919061562a565b613677565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611da4846137c1565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506115939350505050565b600481516005811115611e0557611e05614fda565b03611e3957611e13836137c1565b5f898152600786016020526040902055611e2c88612bb6565b6001945050505050611593565b805160405163170cc93360e21b815261061b919060040161516c565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611f2c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f539190810190615655565b9150915080611f7557604051636b2f19e960e01b815260040160405180910390fd5b815115611f9b578151604051636ba589a560e01b8152600481019190915260240161061b565b60208201516001600160a01b031615611fcc578160200151604051624de75d60e31b815260040161061b9190614eda565b5092915050565b5f815160261461200857815160405163cc92daa160e01b815263ffffffff90911660048201526026602482015260440161061b565b5f805b60028110156120575761201f816001615727565b61202a906008615521565b61ffff1684828151811061204057612040615217565b016020015160f81c901b919091179060010161200b565b5061ffff8116156120815760405163407b587360e01b815261ffff8216600482015260240161061b565b5f805b60048110156120dc57612098816003615727565b6120a3906008615521565b63ffffffff16856120b58360026154ec565b815181106120c5576120c5615217565b016020015160f81c901b9190911790600101612084565b5063ffffffff81161561210257604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156121575761211981601f615727565b612124906008615521565b866121308360066154ec565b8151811061214057612140615217565b016020015160f81c901b9190911790600101612105565b50949350505050565b60605f8083356020850135601461217c878701604089016151b7565b61218960608901896151d2565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6001600160601b03191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b61220a60608501856151d2565b9050811015611fcc578161222160608601866151d2565b8381811061223157612231615217565b9050602002810190612243919061522b565b61224d908061573a565b905061225c60608701876151d2565b8481811061226c5761226c615217565b905060200281019061227e919061522b565b612288908061573a565b61229560608901896151d2565b868181106122a5576122a5615217565b90506020028101906122b7919061522b565b6122c590602081019061573a565b6122d260608b018b6151d2565b888181106122e2576122e2615217565b90506020028101906122f4919061522b565b612305906060810190604001614f45565b60405160200161231b979695949392919061577c565b60408051601f1981840301815291905291506001016121fd565b5f8061233f6125ac565b5f938452600501602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156123a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123d09190810190615655565b91509150806123f257604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612435573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612459919061518c565b82511461247f578151604051636ba589a560e01b8152600481019190915260240161061b565b60208201516001600160a01b0316156124b0578160200151604051624de75d60e31b815260040161061b9190614eda565b5f806124bf8460400151613944565b915091508187146124e65760405163089938b360e11b81526004810188905260240161061b565b5f6124ef6125ac565b5f8981526005820160205260409020600101549091506001600160401b039081169083161115612582575f88815260058201602090815260409182902060010180546001600160401b0319166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26125a1565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806125da6125ac565b90505f6125e686613b35565b90506125f186612335565b61260057600192505050611593565b5f8681526005830160205260409020546001600160a01b0316331461262557336111df565b5f86815260058301602052604090205460a082015161265491600160b01b90046001600160401b03169061560a565b6001600160401b03168160c001516001600160401b0316101561269b5760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161061b565b5f85156126b3576126ac878661235e565b90506126d1565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906126f690611113565b60a086015160c08701516040516001600160e01b031960e086901b168152612726939291829189906004016157e5565b602060405180830381865afa158015612741573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612765919061518c565b905080846008015f8a81526020019081526020015f205f82825461278991906154ec565b90915550501515979650505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f008054600119016127df57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6127ee614da4565b5f6127f7611e55565b90505f8061280761140787611ec8565b91509150801561282e57604051632d07135360e01b8152811515600482015260240161061b565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561285f5761285f614fda565b600581111561287057612870614fda565b81526020016001820180546128849061513a565b80601f01602080910402602001604051908101604052809291908181526020018280546128b09061513a565b80156128fb5780601f106128d2576101008083540402835291602001916128fb565b820191905f5260205f20905b8154815290600101906020018083116128de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561296657612966614fda565b14158015612987575060018151600581111561298457612984614fda565b14155b156129a857805160405163170cc93360e21b815261061b919060040161516c565b6003815160058111156129bd576129bd614fda565b036129cb57600481526129d0565b600581525b8360080181602001516040516129e691906153c8565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612a2a57612a2a614fda565b021790555060208201516001820190612a43908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b0319169190921617905580516005811115612ae857612ae8614fda565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612b6b575f80fd5b505af1158015610fdc573d5f803e3d5ffd5b6113ea6001600160a01b03831682613e0d565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f612bbf6125ac565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115612bf857612bf8614fda565b6003811115612c0957612c09614fda565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612c7d613ea0565b8260800151612c8c919061560a565b6001600160401b0316421015612cc05760405163fb6ce63f60e01b81526001600160401b034216600482015260240161061b565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612d7b575f84815260058701602052604090205461271090612d2d90600160a01b900461ffff1685615521565b612d379190615538565b915081866008015f8681526020019081526020015f205f828254612d5b91906154ec565b90915550612d6b90508284615727565b9050612d7b856020015182612b1f565b612d908560200151610ea38760600151611113565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612e0d57835160405163cc92daa160e01b815263ffffffff90911660048201526036602482015260440161061b565b5f805b6002811015612e5c57612e24816001615727565b612e2f906008615521565b61ffff16868281518110612e4557612e45615217565b016020015160f81c901b9190911790600101612e10565b5061ffff811615612e865760405163407b587360e01b815261ffff8216600482015260240161061b565b5f805b6004811015612ee157612e9d816003615727565b612ea8906008615521565b63ffffffff1687612eba8360026154ec565b81518110612eca57612eca615217565b016020015160f81c901b9190911790600101612e89565b5063ffffffff8116600314612f0957604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015612f5e57612f2081601f615727565b612f2b906008615521565b88612f378360066154ec565b81518110612f4757612f47615217565b016020015160f81c901b9190911790600101612f0c565b505f805b6008811015612fbd57612f76816007615727565b612f81906008615521565b6001600160401b031689612f968360266154ec565b81518110612fa657612fa6615217565b016020015160f81c901b9190911790600101612f62565b505f805b600881101561301c57612fd5816007615727565b612fe0906008615521565b6001600160401b03168a612ff583602e6154ec565b8151811061300557613005615217565b016020015160f81c901b9190911790600101612fc1565b5091989097509095509350505050565b5f80825160271461306257825160405163cc92daa160e01b815263ffffffff90911660048201526027602482015260440161061b565b5f805b60028110156130b157613079816001615727565b613084906008615521565b61ffff1685828151811061309a5761309a615217565b016020015160f81c901b9190911790600101613065565b5061ffff8116156130db5760405163407b587360e01b815261ffff8216600482015260240161061b565b5f805b6004811015613136576130f2816003615727565b6130fd906008615521565b63ffffffff168661310f8360026154ec565b8151811061311f5761311f615217565b016020015160f81c901b91909117906001016130de565b5063ffffffff811660021461315e57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156131b35761317581601f615727565b613180906008615521565b8761318c8360066154ec565b8151811061319c5761319c615217565b016020015160f81c901b9190911790600101613161565b505f866026815181106131c8576131c8615217565b016020015191976001600160f81b03199092161515965090945050505050565b5f806131f26125ac565b600281015490915061ffff600160401b9091048116908616108061321b575061271061ffff8616115b1561323f57604051635f12e6c360e11b815261ffff8616600482015260240161061b565b60028101546001600160401b03908116908516101561327b576040516202a06d60e11b81526001600160401b038516600482015260240161061b565b805483108061328d5750806001015483115b156132ae5760405163222d164360e21b81526004810184905260240161061b565b825f6132b982610da9565b90505f6132c68983613ebb565b905060405180608001604052806132da3390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526005909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b0319909416951694909417919091179890981617815591015160019091018054919095166001600160401b0319909116179093555090915050949350505050565b61339c614418565b610eb581614463565b5f806133af6125ac565b90505f6133bb84610da9565b90505f6133c787611995565b90506133d287612335565b6133f2576040516330efa98b60e01b81526004810188905260240161061b565b60028151600581111561340757613407614fda565b1461342857805160405163170cc93360e21b815261061b919060040161516c565b5f828260800151613439919061560a565b905083600201600a9054906101000a90046001600160401b031682604001516134629190615813565b6001600160401b0316816001600160401b0316111561349f57604051636d51fe0560e11b81526001600160401b038216600482015260240161061b565b5f806134ab8a84613677565b915091505f8a836040516020016134d992919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260068b01909152902081518154829060ff1916600183600381111561356c5761356c614fda565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f805f613682611e55565b5f868152600782016020526040902060020154909150600160801b90046001600160401b03166136b285826144d7565b5f6136bc876146fc565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb61370c8a858b611e79565b6040518263ffffffff1660e01b8152600401613728919061517a565b6020604051808303815f875af1158015613744573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613768919061518c565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806137cb6125ac565b90505f6137db8460400151611995565b90505f6003825160058111156137f3576137f3614fda565b1480613811575060048251600581111561380f5761380f614fda565b145b15613821575060c081015161385e565b60028251600581111561383657613836614fda565b0361384257504261385e565b815160405163170cc93360e21b815261061b919060040161516c565b84608001516001600160401b0316816001600160401b03161161388557505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906138aa90611113565b60a085015160808901516040808b01515f90815260058a016020528190206001015490516001600160e01b031960e087901b1681526138fc9493929188916001600160401b03909116906004016157e5565b602060405180830381865afa158015613917573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393b919061518c565b95945050505050565b5f808251602e1461397a57825160405163cc92daa160e01b815263ffffffff9091166004820152602e602482015260440161061b565b5f805b60028110156139c957613991816001615727565b61399c906008615521565b61ffff168582815181106139b2576139b2615217565b016020015160f81c901b919091179060010161397d565b5061ffff8116156139f35760405163407b587360e01b815261ffff8216600482015260240161061b565b5f805b6004811015613a4e57613a0a816003615727565b613a15906008615521565b63ffffffff1686613a278360026154ec565b81518110613a3757613a37615217565b016020015160f81c901b91909117906001016139f6565b5063ffffffff811615613a7457604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613ac957613a8b81601f615727565b613a96906008615521565b87613aa28360066154ec565b81518110613ab257613ab2615217565b016020015160f81c901b9190911790600101613a77565b505f805b6008811015613b2857613ae1816007615727565b613aec906008615521565b6001600160401b031688613b018360266154ec565b81518110613b1157613b11615217565b016020015160f81c901b9190911790600101613acd565b5090969095509350505050565b613b3d614da4565b5f613b46611e55565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166005811115613b7f57613b7f614fda565b6005811115613b9057613b90614fda565b8152602001600182018054613ba49061513a565b80601f0160208091040260200160405190810160405280929190818152602001828054613bd09061513a565b8015613c1b5780601f10613bf257610100808354040283529160200191613c1b565b820191905f5260205f20905b815481529060010190602001808311613bfe57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613c8957613c89614fda565b14613cbc575f8481526007830160205260409081902054905163170cc93360e21b815261061b9160ff169060040161516c565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613d0057613d00614fda565b021790555060208201516001820190613d19908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b031916919092161790555f613db68582613677565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b80471015613e30573060405163cd78605960e01b815260040161061b9190614eda565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613e79576040519150601f19603f3d011682016040523d82523d5f602084013e613e7e565b606091505b505090508061062457604051630a12f52160e11b815260040160405180910390fd5b5f613ea9611e55565b600101546001600160401b0316919050565b5f613ec4611e55565b6009015460ff16613ee857604051637fab81e560e01b815260040160405180910390fd5b5f613ef1611e55565b905042613f046060860160408701614f45565b6001600160401b0316111580613f3e5750613f226202a300426154ec565b613f326060860160408701614f45565b6001600160401b031610155b15613f7857613f536060850160408601614f45565b604051635879da1360e11b81526001600160401b03909116600482015260240161061b565b613f8d613f88606086018661583e565b614765565b613f9d613f88608086018661583e565b6030613fac602086018661573a565b905014613fde57613fc0602085018561573a565b6040516326475b2f60e11b815261061b925060040190815260200190565b613fe8848061573a565b90505f0361401557613ffa848061573a565b604051633e08a12560e11b815260040161061b929190615852565b5f60088201614024868061573a565b6040516140329291906155fb565b9081526020016040518091039020541461406b57614050848061573a565b60405163a41f772f60e01b815260040161061b929190615852565b614075835f6144d7565b6040805160e08101909152815481525f908190614181906020810161409a898061573a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020908101906140e2908a018a61573a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161412b60608a0160408b01614f45565b6001600160401b0316815260200161414660608a018a61583e565b61414f90615880565b815260200161416160808a018a61583e565b61416a90615880565b8152602001876001600160401b03168152506148ce565b5f8281526006860160205260409020919350915061419f828261541d565b5081600884016141af888061573a565b6040516141bd9291906155fb565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141f990859060040161517a565b6020604051808303815f875af1158015614215573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614239919061518c565b6040805160e081019091529091508060018152602001614259898061573a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff191660018360058111156142e8576142e8614fda565b021790555060208201516001820190614301908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b031916919092161790558061439e888061573a565b6040516143ac9291906155fb565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906143ea9190614f45565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661446157604051631afcd79f60e31b815260040160405180910390fd5b565b61446b614418565b61447481614abb565b61447c614ad4565b610eb56060820135608083013561449960c0850160a08601614f45565b6144a960e0860160c08701615947565b6144ba610100870160e08801615960565b6101008701356144d261014089016101208a016151b7565b614ae4565b5f6144e0611e55565b90505f826001600160401b0316846001600160401b0316111561450e57614507838561562a565b905061451b565b614518848461562a565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061457d575060018401548151614579916001600160401b0316906154ec565b8210155b156145a3576001600160401b0383166060820152818152604081015160208201526145c2565b82816060018181516145b5919061560a565b6001600160401b03169052505b60608101516145d2906064615813565b602082015160018601546001600160401b0392909216916145fd9190600160401b900460ff16615521565b101561462d57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161061b565b856001600160401b03168160400181815161464891906154ec565b9052506040810180516001600160401b0387169190614668908390615727565b9052506001840154604082015160649161468d91600160401b90910460ff1690615521565b10156146b4578060400151604051635943317f60e01b815260040161061b91815260200190565b80516002850155602081015160038501556040810151600485015560600151600590930180546001600160401b0319166001600160401b039094169390931790925550505050565b5f80614706611e55565b5f848152600782016020526040902060020180549192509060089061473a90600160401b90046001600160401b0316615980565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147726020820182614eee565b63ffffffff16158015614792575061478d60208201826151d2565b151590505b156147d9576147a46020820182614eee565b6147b160208301836151d2565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161061b565b6147e660208201826151d2565b90506147f56020830183614eee565b63ffffffff16111561480e576147a46020820182614eee565b60015b61481e60208301836151d2565b90508110156113ea5761483460208301836151d2565b61483f600184615727565b81811061484e5761484e615217565b905060200201602081019061486391906151b7565b6001600160a01b031661487960208401846151d2565b8381811061488957614889615217565b905060200201602081019061489e91906151b7565b6001600160a01b031610156148c657604051630dbc8d5f60e31b815260040160405180910390fd5b600101614811565b5f60608260400151516030146148f75760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614938988a98600198929792969095909490939092910161599b565b60405160208183030381529060405290505f5b846080015160200151518110156149aa5781856080015160200151828151811061497757614977615217565b6020026020010151604051602001614990929190615a55565b60408051601f19818403018152919052915060010161494b565b5060a08401518051602091820151516040516149ca938593929101615a86565b60405160208183030381529060405290505f5b8460a001516020015151811015614a3c57818560a00151602001518281518110614a0957614a09615217565b6020026020010151604051602001614a22929190615a55565b60408051601f1981840301815291905291506001016149dd565b5060c0840151604051614a53918391602001615ac1565b6040516020818303038152906040529050600281604051614a7491906153c8565b602060405180830381855afa158015614a8f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614ab2919061518c565b94909350915050565b614ac3614418565b614acb614c7a565b610eb581614c82565b614adc614418565b614461614d65565b614aec614418565b5f614af56125ac565b905061ffff85161580614b0d575061271061ffff8616115b15614b3157604051635f12e6c360e11b815261ffff8616600482015260240161061b565b86881115614b555760405163222d164360e21b81526004810189905260240161061b565b60ff84161580614b685750600a60ff8516115b15614b8b5760405163170db35960e31b815260ff8516600482015260240161061b565b614b93613ea0565b6001600160401b0316866001600160401b03161015614bcf576040516202a06d60e11b81526001600160401b038716600482015260240161061b565b825f03614bef5760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b614461614418565b614c8a614418565b5f614c93611e55565b8235815590506014614cab6060840160408501615960565b60ff161180614cca5750614cc56060830160408401615960565b60ff16155b15614cfe57614cdf6060830160408401615960565b604051634a59bbff60e11b815260ff909116600482015260240161061b565b614d0e6060830160408401615960565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614d3f6040830160208401614f45565b60019190910180546001600160401b0319166001600160401b0390921691909117905550565b612b90614418565b508054614d799061513a565b5f825580601f10614d88575050565b601f0160209004905f5260205f2090810190610eb59190614de1565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614df5575f8155600101614de2565b5090565b8015158114610eb5575f80fd5b803563ffffffff81168114611990575f80fd5b5f805f60608486031215614e2b575f80fd5b833592506020840135614e3d81614df9565b9150614e4b60408501614e06565b90509250925092565b5f60208284031215614e64575f80fd5b5035919050565b5f8060408385031215614e7c575f80fd5b82356001600160401b03811115614e91575f80fd5b830160808186031215614ea2575f80fd5b9150614eb060208401614e06565b90509250929050565b5f8060408385031215614eca575f80fd5b82359150614eb060208401614e06565b6001600160a01b0391909116815260200190565b5f60208284031215614efe575f80fd5b61159382614e06565b5f8060408385031215614f18575f80fd5b614f2183614e06565b946020939093013593505050565b80356001600160401b0381168114611990575f80fd5b5f60208284031215614f55575f80fd5b61159382614f2f565b803561ffff81168114611990575f80fd5b5f805f60608486031215614f81575f80fd5b83356001600160401b03811115614f96575f80fd5b840160a08187031215614fa7575f80fd5b9250614fb560208501614f5e565b9150614e4b60408501614f2f565b5f6101408284031215614fd4575f80fd5b50919050565b634e487b7160e01b5f52602160045260245ffd5b60068110614ffe57614ffe614fda565b9052565b5f5b8381101561501c578181015183820152602001615004565b50505f910152565b5f815180845261503b816020860160208601615002565b601f01601f19169290920160200192915050565b60208152615061602082018351614fee565b5f602083015160e0604084015261507c610100840182615024565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150e0575f80fd5b82356001600160401b03808211156150f6575f80fd5b818501915085601f830112615109575f80fd5b813581811115615117575f80fd5b866020828501011115615128575f80fd5b60209290920196919550909350505050565b600181811c9082168061514e57607f821691505b602082108103614fd457634e487b7160e01b5f52602260045260245ffd5b60208101610df78284614fee565b602081525f6115936020830184615024565b5f6020828403121561519c575f80fd5b5051919050565b6001600160a01b0381168114610eb5575f80fd5b5f602082840312156151c7575f80fd5b8135611593816151a3565b5f808335601e198436030181126151e7575f80fd5b8301803591506001600160401b03821115615200575f80fd5b6020019150600581901b36038213156137ba575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261523f575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561527f5761527f615249565b60405290565b604080519081016001600160401b038111828210171561527f5761527f615249565b604051601f8201601f191681016001600160401b03811182821017156152cf576152cf615249565b604052919050565b5f6001600160401b038211156152ef576152ef615249565b50601f01601f191660200190565b5f82601f83011261530c575f80fd5b813561531f61531a826152d7565b6152a7565b818152846020838601011115615333575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561535f575f80fd5b61536761525d565b82356001600160401b038082111561537d575f80fd5b615389368387016152fd565b8352602085013591508082111561539e575f80fd5b506153ab368286016152fd565b6020830152506153bd60408401614f2f565b604082015292915050565b5f825161523f818460208701615002565b601f82111561062457805f5260205f20601f840160051c810160208510156153fe5750805b601f840160051c820191505b81811015611771575f815560010161540a565b81516001600160401b0381111561543657615436615249565b61544a81615444845461513a565b846153d9565b602080601f83116001811461547d575f84156154665750858301515b5f19600386901b1c1916600185901b178555610fdc565b5f85815260208120601f198616915b828110156154ab5788860151825594840194600190910190840161548c565b50858210156154c857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610df757610df76154d8565b5f63ffffffff808316818103615517576155176154d8565b6001019392505050565b8082028115828204841417610df757610df76154d8565b5f8261555257634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061556b5761556b614fda565b91905290565b5f60208083525f84546155838161513a565b806020870152604060018084165f81146155a457600181146155c0576155ed565b60ff19851660408a0152604084151560051b8a010195506155ed565b895f5260205f205f5b858110156155e45781548b82018601529083019088016155c9565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115611fcc57611fcc6154d8565b6001600160401b03828116828216039080821115611fcc57611fcc6154d8565b805161199081614df9565b5f8060408385031215615666575f80fd5b82516001600160401b038082111561567c575f80fd5b908401906060828703121561568f575f80fd5b61569761525d565b825181526020808401516156aa816151a3565b828201526040840151838111156156bf575f80fd5b80850194505087601f8501126156d3575f80fd5b835192506156e361531a846152d7565b83815288828587010111156156f6575f80fd5b61570584838301848801615002565b8060408401525081955061571a81880161564a565b9450505050509250929050565b81810381811115610df757610df76154d8565b5f808335601e1984360301811261574f575f80fd5b8301803591506001600160401b03821115615768575f80fd5b6020019150368190038213156137ba575f80fd5b5f885161578d818460208d01615002565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b9485526001600160401b03938416602086015291831660408501528216606084015216608082015260a00190565b6001600160401b03818116838216028082169190828114615836576158366154d8565b505092915050565b5f8235603e1983360301811261523f575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215615890575f80fd5b615898615285565b6158a183614e06565b81526020808401356001600160401b03808211156158bd575f80fd5b9085019036601f8301126158cf575f80fd5b8135818111156158e1576158e1615249565b8060051b91506158f28483016152a7565b818152918301840191848101903684111561590b575f80fd5b938501935b838510156159355784359250615925836151a3565b8282529385019390850190615910565b94860194909452509295945050505050565b5f60208284031215615957575f80fd5b61159382614f5e565b5f60208284031215615970575f80fd5b813560ff81168114611593575f80fd5b5f6001600160401b03808316818103615517576155176154d8565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b1660268401525086516159e181602a850160208b01615002565b8651908301906159f881602a840160208b01615002565b60c087901b6001600160c01b031916602a9290910191820152615a2a603282018660e01b6001600160e01b0319169052565b615a43603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615a66818460208801615002565b60609390931b6001600160601b0319169190920190815260140192915050565b5f8451615a97818460208901615002565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615ad2818460208801615002565b60c09390931b6001600160c01b031916919092019081526008019291505056fea164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ADDRESS_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BIPS_CONVERSION_FACTOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NATIVE_MINTER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractINativeMinter\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPTIME_REWARDS_THRESHOLD_PERCENTAGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDelegationFees\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"claimValidationRewards\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"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\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"weightToValueFactor\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"disableOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}]},{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeValidatorSet\",\"inputs\":[{\"name\":\"subnetConversionData\",\"type\":\"tuple\",\"internalType\":\"structSubnetConversionData\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialValidators\",\"type\":\"tuple[]\",\"internalType\":\"structInitialValidator[]\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}]},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitUptimeProof\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewards\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"fees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InitialValidatorCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationRewardsClaimed\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"reward\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"DelegatorIneligibleForRewards\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBLSKeyLength\",\"inputs\":[{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidBLSPublicKey\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCodecID\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationFee\",\"inputs\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationID\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumDelegatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitializationStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMaximumChurnPercentage\",\"inputs\":[{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageLength\",\"inputs\":[{\"name\":\"actual\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"expected\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMinStakeDuration\",\"inputs\":[{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNodeID\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidNonce\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidPChainOwnerThreshold\",\"inputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addressesLength\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidRegistrationExpiry\",\"inputs\":[{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeAmount\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeMultiplier\",\"inputs\":[{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSubnetConversionID\",\"inputs\":[{\"name\":\"encodedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expectedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidTotalWeight\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidValidationID\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerAddress\",\"inputs\":[{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerBlockchainID\",\"inputs\":[{\"name\":\"blockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWarpOriginSenderAddress\",\"inputs\":[{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpSourceChainID\",\"inputs\":[{\"name\":\"sourceChainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"MaxChurnRateExceeded\",\"inputs\":[{\"name\":\"churnAmount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MaxWeightExceeded\",\"inputs\":[{\"name\":\"newValidatorWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MinStakeDurationNotPassed\",\"inputs\":[{\"name\":\"endTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"NodeAlreadyRegistered\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PChainOwnerAddressesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedOwner\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnexpectedRegistrationStatus\",\"inputs\":[{\"name\":\"validRegistration\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"type\":\"error\",\"name\":\"ValidatorIneligibleForRewards\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ValidatorNotPoS\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ZeroWeightToValueFactor\",\"inputs\":[]}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161611a38038061611a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615fcd8061014d5f395ff3fe6080604052600436106101cb575f3560e01c806380dd672f116100f5578063ba3a4b971161008e578063ba3a4b9714610525578063bc5fbfec14610544578063bee0a03f14610577578063c257a0f514610596578063c599e24f146105b5578063c974d1b6146105c8578063d5f20ff6146105dc578063df93d8de14610608578063fd7ac5e71461061e575f80fd5b806380dd672f146104405780638280a25a1461045f57806393e2459814610473578063a3a65e4814610492578063a9778a7a14610314578063af2f5feb146104b1578063afb98096146104c4578063afba878a146104f7578063b771b3bc1461050b575f80fd5b806335455ded1161016757806335455ded146103145780633a1cfff61461033c578063467ef06f1461035b57806360305d621461037a57806360ad7784146103a357806362065856146103c257806366435abf146103ef578063732214f81461040e57806376f7862114610421575f80fd5b80630118acc4146101cf5780630322ed98146101f0578063151d30d11461020f5780631ec447241461023a57806320d91b7a1461025957806325e1c776146102785780632893d077146102975780632e2194d8146102b6578063329c3e12146102ed575b5f80fd5b3480156101da575f80fd5b506101ee6101e93660046152e2565b61063d565b005b3480156101fb575f80fd5b506101ee61020a36600461531d565b61064f565b34801561021a575f80fd5b50610223600a81565b60405160ff90911681526020015b60405180910390f35b348015610245575f80fd5b506101ee6102543660046152e2565b61085b565b348015610264575f80fd5b506101ee610273366004615334565b610867565b348015610283575f80fd5b506101ee610292366004615382565b610d65565b3480156102a2575f80fd5b506101ee6102b1366004615382565b610dd9565b3480156102c1575f80fd5b506102d56102d036600461531d565b6110fb565b6040516001600160401b039091168152602001610231565b3480156102f8575f80fd5b506103076001600160991b0181565b60405161023191906153a3565b34801561031f575f80fd5b5061032961271081565b60405161ffff9091168152602001610231565b348015610347575f80fd5b506101ee6103563660046152e2565b61114f565b348015610366575f80fd5b506101ee6103753660046153b7565b61115b565b348015610385575f80fd5b5061038e601481565b60405163ffffffff9091168152602001610231565b3480156103ae575f80fd5b506101ee6103bd366004615382565b611237565b3480156103cd575f80fd5b506103e16103dc3660046153e6565b611492565b604051908152602001610231565b3480156103fa575f80fd5b506102d561040936600461531d565b6114b2565b348015610419575f80fd5b506103e15f81565b34801561042c575f80fd5b506101ee61043b3660046152e2565b6114c6565b34801561044b575f80fd5b506101ee61045a366004615382565b6114d3565b34801561046a575f80fd5b50610223603081565b34801561047e575f80fd5b506101ee61048d36600461531d565b61168e565b34801561049d575f80fd5b506101ee6104ac3660046153b7565b611735565b6103e16104bf366004615410565b6118bb565b3480156104cf575f80fd5b506103e17f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610502575f80fd5b50610223605081565b348015610516575f80fd5b506103076005600160991b0181565b348015610530575f80fd5b506101ee61053f36600461531d565b6118e1565b34801561054f575f80fd5b506103e17fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0081565b348015610582575f80fd5b506101ee61059136600461531d565b611abf565b3480156105a1575f80fd5b506101ee6105b0366004615464565b611bdc565b6103e16105c336600461531d565b611cb9565b3480156105d3575f80fd5b50610223601481565b3480156105e7575f80fd5b506105fb6105f636600461531d565b611cdc565b60405161023191906154f0565b348015610613575f80fd5b506102d56202a30081565b348015610629575f80fd5b506103e1610638366004615570565b611e1e565b61064a8383836001611e56565b505050565b5f6106586121c1565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660058111156106915761069161547b565b60058111156106a2576106a261547b565b81526020016001820180546106b6906155db565b80601f01602080910402602001604051908101604052809291908181526020018280546106e2906155db565b801561072d5780601f106107045761010080835404028352916020019161072d565b820191905f5260205f20905b81548152906001019060200180831161071057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156107985761079861547b565b146107d4575f8381526007830160205260409081902054905163170cc93360e21b81526107cb9160ff169060040161560d565b60405180910390fd5b6005600160991b016001600160a01b031663ee5b48eb6107f98584606001515f6121e5565b6040518263ffffffff1660e01b8152600401610815919061561b565b6020604051808303815f875af1158015610831573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610855919061562d565b50505050565b61064a8383835f611e56565b5f6108706121c1565b600981015490915060ff161561089957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108dc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610900919061562d565b836020013514610929576040516372b0a7e760e11b8152602084013560048201526024016107cb565b3061093a6060850160408601615658565b6001600160a01b031614610972576109586060840160408501615658565b604051632f88120d60e21b81526004016107cb91906153a3565b5f6109806060850185615673565b905090505f805b828163ffffffff161015610c67575f6109a36060880188615673565b8363ffffffff168181106109b9576109b96156b8565b90506020028101906109cb91906156cc565b6109d4906157f0565b80516040519192505f9160088801916109ec91615869565b90815260200160405180910390205414610a1c57805160405163a41f772f60e01b81526107cb919060040161561b565b5f6002885f013584604051602001610a4b92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a6591615869565b602060405180830381855afa158015610a80573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610aa3919061562d565b90508086600801835f0151604051610abb9190615869565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff19166001836005811115610b3d57610b3d61547b565b021790555060208201516001820190610b5690826158be565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090930151600390920180546001600160401b03191692841692909217909155830151610bfa91168561598d565b8251604051919550610c0b91615869565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c60906159a0565b9050610987565b50600483018190556001830154606490610c8b90600160401b900460ff16836159c2565b1015610cad57604051635943317f60e01b8152600481018290526024016107cb565b5f610cc3610cba86612234565b6040015161233f565b90505f610ccf876124cc565b90505f600282604051610ce29190615869565b602060405180830381855afa158015610cfd573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d20919061562d565b9050828114610d4c57604051631872fc8d60e01b815260048101829052602481018490526044016107cb565b5050506009909201805460ff1916600117905550505050565b610d6e826126a1565b610d8e576040516330efa98b60e01b8152600481018390526024016107cb565b5f610d9883611cdc565b5190506002816005811115610daf57610daf61547b565b14610dcf578060405163170cc93360e21b81526004016107cb919061560d565b61085583836126ca565b610de1612918565b5f610dea612962565b90505f610df684611cdc565b9050600281516005811115610e0d57610e0d61547b565b14610e2e57805160405163170cc93360e21b81526107cb919060040161560d565b610e37846126a1565b610e57576040516330efa98b60e01b8152600481018590526024016107cb565b5f8481526005830160205260409020546001600160a01b03163314610e9257335b604051636e2ccd7560e11b81526004016107cb91906153a3565b5f84815260058301602052604090205460a08201514291610ec491600160b01b9091046001600160401b0316906159d9565b6001600160401b0316816001600160401b03161015610f015760405163fb6ce63f60e01b81526001600160401b03821660048201526024016107cb565b5f610f0c86866126ca565b5f87815260058601602052604081206001015491925090610f3d90600160401b90046001600160401b0316836159f9565b5f888152600587016020526040812060010154919250600160801b9091046001600160401b031690819003610f73575060a08401515b610f7e828286612986565b610f9e57604051635bff683f60e11b8152600481018990526024016107cb565b600486015460408601515f916001600160a01b031690634f22429f90610fc390611492565b848589886040518663ffffffff1660e01b8152600401610fe7959493929190615a19565b602060405180830381865afa158015611002573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611026919061562d565b90506064605060ff168760a001518761103f91906159f9565b6110499190615a47565b6110539190615a86565b5f8a81526005890160205260409020600181018054600160401b600160c01b031916600160401b6001600160401b039485160267ffffffffffffffff60801b191617600160801b9389169390930292909217909155546110bc906001600160a01b0316826129d1565b60405181908a907f69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a905f90a3505050505050506110f7612a2f565b5050565b5f80611105612962565b600301546111139084615aab565b905080158061112857506001600160401b0381115b156111495760405163222d164360e21b8152600481018490526024016107cb565b92915050565b61064a8383835f612a55565b611163612918565b5f61116c612962565b90505f8061117984612caf565b91509150611186826126a1565b6111925750505061122c565b5f8281526005840160205260409020546001600160a01b03166004825160058111156111c0576111c061547b565b03611211575f838152600885016020526040812080549190556111e382826129d1565b604051819085907f69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a905f90a3505b611227816112228460400151611492565b612fe9565b505050505b611234612a2f565b50565b5f611240612962565b5f848152600682016020526040808220815160e0810190925280549394509192909190829060ff1660038111156112795761127961547b565b600381111561128a5761128a61547b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61130082611cdc565b90506001835160038111156113175761131761547b565b14611338578251604051633b0d540d60e21b81526107cb9190600401615abe565b60048151600581111561134d5761134d61547b565b036113635761135b86612ffc565b505050505050565b5f8061137a61137188612234565b6040015161321c565b50915091508184146113a757846040015160405163089938b360e11b81526004016107cb91815260200190565b806001600160401b031683606001516001600160401b031610806113e05750806001600160401b03168560a001516001600160401b0316115b1561140957604051632e19bc2d60e11b81526001600160401b03821660048201526024016107cb565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61149b612962565b60030154611149906001600160401b0384166159c2565b5f6114bc82611cdc565b6080015192915050565b61064a8383836001612a55565b6114db612918565b5f6114e4612962565b5f848152600682016020526040808220815160e0810190925280549394509192909190829060ff16600381111561151d5761151d61547b565b600381111561152e5761152e61547b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115a7576115a761547b565b146115c8578051604051633b0d540d60e21b81526107cb9190600401615abe565b60046115d78260400151611cdc565b5160058111156115e9576115e961547b565b1461167b575f6115f884612234565b90505f80611609836040015161321c565b5091509150818460400151146116355760405163089938b360e11b8152600481018390526024016107cb565b806001600160401b03168460c001516001600160401b0316111561167757604051632e19bc2d60e11b81526001600160401b03821660048201526024016107cb565b5050505b61168484612ffc565b50506110f7612a2f565b5f611697612962565b90505f6116a383611cdc565b51905060048160058111156116ba576116ba61547b565b146116da578060405163170cc93360e21b81526004016107cb919061560d565b5f8381526005830160205260409020546001600160a01b031633146116ff5733610e78565b5f83815260088301602090815260408083208054908490556005860190925290912054610855906001600160a01b0316826129d1565b5f61173e6121c1565b90505f8061175761174e85612234565b60400151613472565b915091508061177d57604051632d07135360e01b815281151560048201526024016107cb565b5f82815260068401602052604090208054611797906155db565b90505f036117bb5760405163089938b360e11b8152600481018390526024016107cb565b60015f83815260078501602052604090205460ff1660058111156117e1576117e161547b565b14611814575f8281526007840160205260409081902054905163170cc93360e21b81526107cb9160ff169060040161560d565b5f828152600684016020526040812061182c91615236565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6118c4612918565b6118d08484843461362e565b90506118da612a2f565b9392505050565b5f6118ea612962565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119235761192361547b565b60038111156119345761193461547b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119ad576119ad61547b565b141580156119ce57506003815160038111156119cb576119cb61547b565b14155b156119ef578051604051633b0d540d60e21b81526107cb9190600401615abe565b5f6119fd8260400151611cdc565b905080606001516001600160401b03165f03611a2f576040516339b894f960e21b8152600481018590526024016107cb565b6005600160991b016001600160a01b031663ee5b48eb611a5c8460400151846060015185608001516121e5565b6040518263ffffffff1660e01b8152600401611a78919061561b565b6020604051808303815f875af1158015611a94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ab8919061562d565b5050505050565b5f611ac86121c1565b5f8381526006820160205260409020805491925090611ae6906155db565b90505f03611b0a5760405163089938b360e11b8152600481018390526024016107cb565b60015f83815260078301602052604090205460ff166005811115611b3057611b3061547b565b14611b63575f8281526007820160205260409081902054905163170cc93360e21b81526107cb9160ff169060040161560d565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611b9c9190600401615ad8565b6020604051808303815f875af1158015611bb8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064a919061562d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c25575080546001600160401b03808416911610155b15611c435760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611c6d83613820565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f611cc2612918565b611ccd823334613831565b9050611cd7612a2f565b919050565b611ce461526d565b5f611ced6121c1565b5f84815260078201602052604090819020815160e0810190925280549293509091829060ff166005811115611d2457611d2461547b565b6005811115611d3557611d3561547b565b8152602001600182018054611d49906155db565b80601f0160208091040260200160405190810160405280929190818152602001828054611d75906155db565b8015611dc05780601f10611d9757610100808354040283529160200191611dc0565b820191905f5260205f20905b815481529060010190602001808311611da357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b5f80611e286121c1565b9050806008018484604051611e3e929190615b62565b90815260200160405180910390205491505092915050565b5f611e5f612962565b5f868152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115611e9857611e9861547b565b6003811115611ea957611ea961547b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611f1f82611cdc565b9050600283516003811115611f3657611f3661547b565b14611f57578251604051633b0d540d60e21b81526107cb9190600401615abe565b60208301516001600160a01b03163314611ff3575f8281526005850160205260409020546001600160a01b03163314611f905733610e78565b5f82815260058501602052604090205460a0820151611fbf91600160b01b90046001600160401b0316906159d9565b6001600160401b0316421015611ff35760405163fb6ce63f60e01b81526001600160401b03421660048201526024016107cb565b6002815160058111156120085761200861547b565b0361215a576002840154608084015161202a916001600160401b0316906159d9565b6001600160401b031642101561205e5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016107cb565b86156120705761206e82876126ca565b505b5f8881526006850160205260409020805460ff19166003179055606083015160808201516120a99184916120a491906159f9565b613b03565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556120ea84613c4d565b90508580156120f7575080155b1561211857604051631036cf9160e11b8152600481018a90526024016107cb565b5f8981526007860160205260408082208390555184918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed579190a3506121b7565b60048151600581111561216f5761216f61547b565b0361219b5761217d83613c4d565b5f89815260078601602052604090205561219688612ffc565b6121b7565b805160405163170cc93360e21b81526107cb919060040161560d565b5050505050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0090565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612298573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122bf9190810190615b7c565b91509150806122e157604051636b2f19e960e01b815260040160405180910390fd5b815115612307578151604051636ba589a560e01b815260048101919091526024016107cb565b60208201516001600160a01b031615612338578160200151604051624de75d60e31b81526004016107cb91906153a3565b5092915050565b5f815160261461237457815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016107cb565b5f805b60028110156123c35761238b816001615c4e565b6123969060086159c2565b61ffff168482815181106123ac576123ac6156b8565b016020015160f81c901b9190911790600101612377565b5061ffff8116156123ed5760405163407b587360e01b815261ffff821660048201526024016107cb565b5f805b600481101561244857612404816003615c4e565b61240f9060086159c2565b63ffffffff168561242183600261598d565b81518110612431576124316156b8565b016020015160f81c901b91909117906001016123f0565b5063ffffffff81161561246e57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156124c35761248581601f615c4e565b6124909060086159c2565b8661249c83600661598d565b815181106124ac576124ac6156b8565b016020015160f81c901b9190911790600101612471565b50949350505050565b60605f808335602085013560146124e887870160408901615658565b6124f56060890189615673565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6001600160601b03191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b6125766060850185615673565b9050811015612338578161258d6060860186615673565b8381811061259d5761259d6156b8565b90506020028101906125af91906156cc565b6125b99080615c61565b90506125c86060870187615673565b848181106125d8576125d86156b8565b90506020028101906125ea91906156cc565b6125f49080615c61565b6126016060890189615673565b86818110612611576126116156b8565b905060200281019061262391906156cc565b612631906020810190615c61565b61263e60608b018b615673565b8881811061264e5761264e6156b8565b905060200281019061266091906156cc565b6126719060608101906040016153e6565b6040516020016126879796959493929190615ca3565b60408051601f198184030181529190529150600101612569565b5f806126ab612962565b5f938452600501602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612715573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261273c9190810190615b7c565b915091508061275e57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127c5919061562d565b8251146127eb578151604051636ba589a560e01b815260048101919091526024016107cb565b60208201516001600160a01b03161561281c578160200151604051624de75d60e31b81526004016107cb91906153a3565b5f8061282b8460400151613e0d565b915091508187146128525760405163089938b360e11b8152600481018890526024016107cb565b5f61285b612962565b5f8981526005820160205260409020600101549091506001600160401b0390811690831611156128ee575f88815260058201602090815260409182902060010180546001600160401b0319166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261290d565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080546001190161295c57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f605061299384846159f9565b61299d9190615a47565b6001600160401b03166129b1856064615a47565b6001600160401b031610156129c757505f6118da565b5060019392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612a1d575f80fd5b505af115801561135b573d5f803e3d5ffd5b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f612a5e612962565b90505f612a6a86613ffe565b9050612a75866126a1565b612a80575050610855565b5f8681526005830160205260409020546001600160a01b03163314612aa55733610e78565b5f86815260058301602052604090205460a0820151612ad491600160b01b90046001600160401b0316906159d9565b6001600160401b03168160c001516001600160401b03161015612b1b5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016107cb565b5f8515612b3357612b2c87866126ca565b9050612b51565b505f8681526005830160205260409020600101546001600160401b03165b5f878152600584016020526040812060010154612b7e90600160401b90046001600160401b0316836159f9565b5f898152600586016020526040812060010154919250600160801b9091046001600160401b031690819003612bb4575060a08301515b858015612bcd5750612bcb82828660c00151612986565b155b15612bee57604051635bff683f60e11b8152600481018a90526024016107cb565b600485015460408501515f916001600160a01b031690634f22429f90612c1390611492565b84858960c00151886040518663ffffffff1660e01b8152600401612c3b959493929190615a19565b602060405180830381865afa158015612c56573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c7a919061562d565b905080866008015f8c81526020019081526020015f205f828254612c9e919061598d565b909155505050505050505050505050565b5f612cb861526d565b5f612cc16121c1565b90505f80612cd161174e87612234565b915091508015612cf857604051632d07135360e01b815281151560048201526024016107cb565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612d2957612d2961547b565b6005811115612d3a57612d3a61547b565b8152602001600182018054612d4e906155db565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7a906155db565b8015612dc55780601f10612d9c57610100808354040283529160200191612dc5565b820191905f5260205f20905b815481529060010190602001808311612da857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612e3057612e3061547b565b14158015612e515750600181516005811115612e4e57612e4e61547b565b14155b15612e7257805160405163170cc93360e21b81526107cb919060040161560d565b600381516005811115612e8757612e8761547b565b03612e955760048152612e9a565b600581525b836008018160200151604051612eb09190615869565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612ef457612ef461547b565b021790555060208201516001820190612f0d90826158be565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b0319169190921617905580516005811115612fb257612fb261547b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6110f76001600160a01b038316826142d6565b5f613005612962565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff16600381111561303e5761303e61547b565b600381111561304f5761304f61547b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130c3614369565b82608001516130d291906159d9565b6001600160401b03164210156131065760405163fb6ce63f60e01b81526001600160401b03421660048201526024016107cb565b5f848152600684016020908152604080832080546001600160a81b031916815560018101849055600201839055600786019091528120805490829055908082156131c1575f8481526005870160205260409020546127109061317390600160a01b900461ffff16856159c2565b61317d9190615aab565b915081866008015f8681526020019081526020015f205f8282546131a1919061598d565b909155506131b190508284615c4e565b90506131c18560200151826129d1565b6131d685602001516112228760600151611492565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f835160361461325357835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016107cb565b5f805b60028110156132a25761326a816001615c4e565b6132759060086159c2565b61ffff1686828151811061328b5761328b6156b8565b016020015160f81c901b9190911790600101613256565b5061ffff8116156132cc5760405163407b587360e01b815261ffff821660048201526024016107cb565b5f805b6004811015613327576132e3816003615c4e565b6132ee9060086159c2565b63ffffffff168761330083600261598d565b81518110613310576133106156b8565b016020015160f81c901b91909117906001016132cf565b5063ffffffff811660031461334f57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156133a45761336681601f615c4e565b6133719060086159c2565b8861337d83600661598d565b8151811061338d5761338d6156b8565b016020015160f81c901b9190911790600101613352565b505f805b6008811015613403576133bc816007615c4e565b6133c79060086159c2565b6001600160401b0316896133dc83602661598d565b815181106133ec576133ec6156b8565b016020015160f81c901b91909117906001016133a8565b505f805b60088110156134625761341b816007615c4e565b6134269060086159c2565b6001600160401b03168a61343b83602e61598d565b8151811061344b5761344b6156b8565b016020015160f81c901b9190911790600101613407565b5091989097509095509350505050565b5f8082516027146134a857825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044016107cb565b5f805b60028110156134f7576134bf816001615c4e565b6134ca9060086159c2565b61ffff168582815181106134e0576134e06156b8565b016020015160f81c901b91909117906001016134ab565b5061ffff8116156135215760405163407b587360e01b815261ffff821660048201526024016107cb565b5f805b600481101561357c57613538816003615c4e565b6135439060086159c2565b63ffffffff168661355583600261598d565b81518110613565576135656156b8565b016020015160f81c901b9190911790600101613524565b5063ffffffff81166002146135a457604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156135f9576135bb81601f615c4e565b6135c69060086159c2565b876135d283600661598d565b815181106135e2576135e26156b8565b016020015160f81c901b91909117906001016135a7565b505f8660268151811061360e5761360e6156b8565b016020015191976001600160f81b03199092161515965090945050505050565b5f80613638612962565b600281015490915061ffff600160401b90910481169086161080613661575061271061ffff8616115b1561368557604051635f12e6c360e11b815261ffff861660048201526024016107cb565b60028101546001600160401b0390811690851610156136c1576040516202a06d60e11b81526001600160401b03851660048201526024016107cb565b80548310806136d35750806001015483115b156136f45760405163222d164360e21b8152600481018490526024016107cb565b825f6136ff826110fb565b90505f61370c8983614384565b90506040518060c001604052806137203390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f6060808801829052608080890183905260a09889018390528a83526005909d0185529082902088518154958a0151938a01518516600160b01b0267ffffffffffffffff60b01b1994909716600160a01b026001600160b01b03199096169716969096179390931716929092178355840151600190920180549885015194909301518116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b031990991692909116919091179690961791909116949094179093555090915050949350505050565b6138286148e1565b6112348161492c565b5f8061383b612962565b90505f613847846110fb565b90505f61385387611cdc565b905061385e876126a1565b61387e576040516330efa98b60e01b8152600481018890526024016107cb565b6002815160058111156138935761389361547b565b146138b457805160405163170cc93360e21b81526107cb919060040161560d565b5f8282608001516138c591906159d9565b905083600201600a9054906101000a90046001600160401b031682604001516138ee9190615a47565b6001600160401b0316816001600160401b0316111561392b57604051636d51fe0560e11b81526001600160401b03821660048201526024016107cb565b5f806139378a84613b03565b915091505f8a8360405160200161396592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260068b01909152902081518154829060ff191660018360038111156139f8576139f861547b565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f805f613b0e6121c1565b5f868152600782016020526040902060020154909150600160801b90046001600160401b0316613b3e85826149a0565b5f613b4887614bc5565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb613b988a858b6121e5565b6040518263ffffffff1660e01b8152600401613bb4919061561b565b6020604051808303815f875af1158015613bd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bf4919061562d565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f80613c57612962565b90505f613c678460400151611cdc565b90505f600382516005811115613c7f57613c7f61547b565b1480613c9d5750600482516005811115613c9b57613c9b61547b565b145b15613cad575060c0810151613cea565b600282516005811115613cc257613cc261547b565b03613cce575042613cea565b815160405163170cc93360e21b81526107cb919060040161560d565b84608001516001600160401b0316816001600160401b031611613d1157505f949350505050565b6040808601515f90815260058501602052206001015460a0830151613d40916001600160401b03169083612986565b613d4e57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f90613d7390611492565b60a085015160808901516040808b01515f90815260058a016020528190206001015490516001600160e01b031960e087901b168152613dc59493929188916001600160401b0390911690600401615a19565b602060405180830381865afa158015613de0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e04919061562d565b95945050505050565b5f808251602e14613e4357825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016107cb565b5f805b6002811015613e9257613e5a816001615c4e565b613e659060086159c2565b61ffff16858281518110613e7b57613e7b6156b8565b016020015160f81c901b9190911790600101613e46565b5061ffff811615613ebc5760405163407b587360e01b815261ffff821660048201526024016107cb565b5f805b6004811015613f1757613ed3816003615c4e565b613ede9060086159c2565b63ffffffff1686613ef083600261598d565b81518110613f0057613f006156b8565b016020015160f81c901b9190911790600101613ebf565b5063ffffffff811615613f3d57604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613f9257613f5481601f615c4e565b613f5f9060086159c2565b87613f6b83600661598d565b81518110613f7b57613f7b6156b8565b016020015160f81c901b9190911790600101613f40565b505f805b6008811015613ff157613faa816007615c4e565b613fb59060086159c2565b6001600160401b031688613fca83602661598d565b81518110613fda57613fda6156b8565b016020015160f81c901b9190911790600101613f96565b5090969095509350505050565b61400661526d565b5f61400f6121c1565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660058111156140485761404861547b565b60058111156140595761405961547b565b815260200160018201805461406d906155db565b80601f0160208091040260200160405190810160405280929190818152602001828054614099906155db565b80156140e45780601f106140bb576101008083540402835291602001916140e4565b820191905f5260205f20905b8154815290600101906020018083116140c757829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156141525761415261547b565b14614185575f8481526007830160205260409081902054905163170cc93360e21b81526107cb9160ff169060040161560d565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156141c9576141c961547b565b0217905550602082015160018201906141e290826158be565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b031916919092161790555f61427f8582613b03565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b804710156142f9573060405163cd78605960e01b81526004016107cb91906153a3565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614342576040519150601f19603f3d011682016040523d82523d5f602084013e614347565b606091505b505090508061064a57604051630a12f52160e11b815260040160405180910390fd5b5f6143726121c1565b600101546001600160401b0316919050565b5f61438d6121c1565b6009015460ff166143b157604051637fab81e560e01b815260040160405180910390fd5b5f6143ba6121c1565b9050426143cd60608601604087016153e6565b6001600160401b031611158061440757506143eb6202a3004261598d565b6143fb60608601604087016153e6565b6001600160401b031610155b156144415761441c60608501604086016153e6565b604051635879da1360e11b81526001600160401b0390911660048201526024016107cb565b6144566144516060860186615d0c565b614c2e565b6144666144516080860186615d0c565b60306144756020860186615c61565b9050146144a7576144896020850185615c61565b6040516326475b2f60e11b81526107cb925060040190815260200190565b6144b18480615c61565b90505f036144de576144c38480615c61565b604051633e08a12560e11b81526004016107cb929190615d20565b5f600882016144ed8680615c61565b6040516144fb929190615b62565b90815260200160405180910390205414614534576145198480615c61565b60405163a41f772f60e01b81526004016107cb929190615d20565b61453e835f6149a0565b6040805160e08101909152815481525f90819061464a90602081016145638980615c61565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020908101906145ab908a018a615c61565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016145f460608a0160408b016153e6565b6001600160401b0316815260200161460f60608a018a615d0c565b61461890615d4e565b815260200161462a60808a018a615d0c565b61463390615d4e565b8152602001876001600160401b0316815250614d97565b5f8281526006860160205260409020919350915061466882826158be565b5081600884016146788880615c61565b604051614686929190615b62565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906146c290859060040161561b565b6020604051808303815f875af11580156146de573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614702919061562d565b6040805160e0810190915290915080600181526020016147228980615c61565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff191660018360058111156147b1576147b161547b565b0217905550602082015160018201906147ca90826158be565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c090920151600390910180546001600160401b03191691909216179055806148678880615c61565b604051614875929190615b62565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906148b391906153e6565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661492a57604051631afcd79f60e31b815260040160405180910390fd5b565b6149346148e1565b61493d81614f84565b614945614f9d565b6112346060820135608083013561496260c0850160a086016153e6565b61497260e0860160c08701615e15565b614983610100870160e08801615e2e565b61010087013561499b61014089016101208a01615658565b614fad565b5f6149a96121c1565b90505f826001600160401b0316846001600160401b031611156149d7576149d083856159f9565b90506149e4565b6149e184846159f9565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580614a46575060018401548151614a42916001600160401b03169061598d565b8210155b15614a6c576001600160401b038316606082015281815260408101516020820152614a8b565b8281606001818151614a7e91906159d9565b6001600160401b03169052505b6060810151614a9b906064615a47565b602082015160018601546001600160401b039290921691614ac69190600160401b900460ff166159c2565b1015614af657606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016107cb565b856001600160401b031681604001818151614b11919061598d565b9052506040810180516001600160401b0387169190614b31908390615c4e565b90525060018401546040820151606491614b5691600160401b90910460ff16906159c2565b1015614b7d578060400151604051635943317f60e01b81526004016107cb91815260200190565b80516002850155602081015160038501556040810151600485015560600151600590930180546001600160401b0319166001600160401b039094169390931790925550505050565b5f80614bcf6121c1565b5f8481526007820160205260409020600201805491925090600890614c0390600160401b90046001600160401b0316615e4e565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b614c3b60208201826153b7565b63ffffffff16158015614c5b5750614c566020820182615673565b151590505b15614ca257614c6d60208201826153b7565b614c7a6020830183615673565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016107cb565b614caf6020820182615673565b9050614cbe60208301836153b7565b63ffffffff161115614cd757614c6d60208201826153b7565b60015b614ce76020830183615673565b90508110156110f757614cfd6020830183615673565b614d08600184615c4e565b818110614d1757614d176156b8565b9050602002016020810190614d2c9190615658565b6001600160a01b0316614d426020840184615673565b83818110614d5257614d526156b8565b9050602002016020810190614d679190615658565b6001600160a01b03161015614d8f57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614cda565b5f6060826040015151603014614dc05760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614e01988a986001989297929690959094909390929101615e69565b60405160208183030381529060405290505f5b84608001516020015151811015614e7357818560800151602001518281518110614e4057614e406156b8565b6020026020010151604051602001614e59929190615f23565b60408051601f198184030181529190529150600101614e14565b5060a0840151805160209182015151604051614e93938593929101615f54565b60405160208183030381529060405290505f5b8460a001516020015151811015614f0557818560a00151602001518281518110614ed257614ed26156b8565b6020026020010151604051602001614eeb929190615f23565b60408051601f198184030181529190529150600101614ea6565b5060c0840151604051614f1c918391602001615f8f565b6040516020818303038152906040529050600281604051614f3d9190615869565b602060405180830381855afa158015614f58573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614f7b919061562d565b94909350915050565b614f8c6148e1565b614f94615143565b6112348161514b565b614fa56148e1565b61492a61522e565b614fb56148e1565b5f614fbe612962565b905061ffff85161580614fd6575061271061ffff8616115b15614ffa57604051635f12e6c360e11b815261ffff861660048201526024016107cb565b8688111561501e5760405163222d164360e21b8152600481018990526024016107cb565b60ff841615806150315750600a60ff8516115b156150545760405163170db35960e31b815260ff851660048201526024016107cb565b61505c614369565b6001600160401b0316866001600160401b03161015615098576040516202a06d60e11b81526001600160401b03871660048201526024016107cb565b825f036150b85760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b61492a6148e1565b6151536148e1565b5f61515c6121c1565b82358155905060146151746060840160408501615e2e565b60ff161180615193575061518e6060830160408401615e2e565b60ff16155b156151c7576151a86060830160408401615e2e565b604051634a59bbff60e11b815260ff90911660048201526024016107cb565b6151d76060830160408401615e2e565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561520860408301602084016153e6565b60019190910180546001600160401b0319166001600160401b0390921691909117905550565b612a2f6148e1565b508054615242906155db565b5f825580601f10615251575050565b601f0160209004905f5260205f209081019061123491906152aa565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156152be575f81556001016152ab565b5090565b8015158114611234575f80fd5b803563ffffffff81168114611cd7575f80fd5b5f805f606084860312156152f4575f80fd5b833592506020840135615306816152c2565b9150615314604085016152cf565b90509250925092565b5f6020828403121561532d575f80fd5b5035919050565b5f8060408385031215615345575f80fd5b82356001600160401b0381111561535a575f80fd5b83016080818603121561536b575f80fd5b9150615379602084016152cf565b90509250929050565b5f8060408385031215615393575f80fd5b82359150615379602084016152cf565b6001600160a01b0391909116815260200190565b5f602082840312156153c7575f80fd5b6118da826152cf565b80356001600160401b0381168114611cd7575f80fd5b5f602082840312156153f6575f80fd5b6118da826153d0565b803561ffff81168114611cd7575f80fd5b5f805f60608486031215615422575f80fd5b83356001600160401b03811115615437575f80fd5b840160a08187031215615448575f80fd5b9250615456602085016153ff565b9150615314604085016153d0565b5f6101408284031215615475575f80fd5b50919050565b634e487b7160e01b5f52602160045260245ffd5b6006811061549f5761549f61547b565b9052565b5f5b838110156154bd5781810151838201526020016154a5565b50505f910152565b5f81518084526154dc8160208601602086016154a3565b601f01601f19169290920160200192915050565b6020815261550260208201835161548f565b5f602083015160e0604084015261551d6101008401826154c5565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615581575f80fd5b82356001600160401b0380821115615597575f80fd5b818501915085601f8301126155aa575f80fd5b8135818111156155b8575f80fd5b8660208285010111156155c9575f80fd5b60209290920196919550909350505050565b600181811c908216806155ef57607f821691505b60208210810361547557634e487b7160e01b5f52602260045260245ffd5b60208101611149828461548f565b602081525f6118da60208301846154c5565b5f6020828403121561563d575f80fd5b5051919050565b6001600160a01b0381168114611234575f80fd5b5f60208284031215615668575f80fd5b81356118da81615644565b5f808335601e19843603018112615688575f80fd5b8301803591506001600160401b038211156156a1575f80fd5b6020019150600581901b3603821315613c46575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156e0575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715615720576157206156ea565b60405290565b604080519081016001600160401b0381118282101715615720576157206156ea565b604051601f8201601f191681016001600160401b0381118282101715615770576157706156ea565b604052919050565b5f6001600160401b03821115615790576157906156ea565b50601f01601f191660200190565b5f82601f8301126157ad575f80fd5b81356157c06157bb82615778565b615748565b8181528460208386010111156157d4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615800575f80fd5b6158086156fe565b82356001600160401b038082111561581e575f80fd5b61582a3683870161579e565b8352602085013591508082111561583f575f80fd5b5061584c3682860161579e565b60208301525061585e604084016153d0565b604082015292915050565b5f82516156e08184602087016154a3565b601f82111561064a57805f5260205f20601f840160051c8101602085101561589f5750805b601f840160051c820191505b81811015611ab8575f81556001016158ab565b81516001600160401b038111156158d7576158d76156ea565b6158eb816158e584546155db565b8461587a565b602080601f83116001811461591e575f84156159075750858301515b5f19600386901b1c1916600185901b17855561135b565b5f85815260208120601f198616915b8281101561594c5788860151825594840194600190910190840161592d565b508582101561596957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561114957611149615979565b5f63ffffffff8083168181036159b8576159b8615979565b6001019392505050565b808202811582820484141761114957611149615979565b6001600160401b0381811683821601908082111561233857612338615979565b6001600160401b0382811682821603908082111561233857612338615979565b9485526001600160401b03938416602086015291831660408501528216606084015216608082015260a00190565b6001600160401b03818116838216028082169190828114615a6a57615a6a615979565b505092915050565b634e487b7160e01b5f52601260045260245ffd5b5f6001600160401b0380841680615a9f57615a9f615a72565b92169190910492915050565b5f82615ab957615ab9615a72565b500490565b6020810160048310615ad257615ad261547b565b91905290565b5f60208083525f8454615aea816155db565b806020870152604060018084165f8114615b0b5760018114615b2757615b54565b60ff19851660408a0152604084151560051b8a01019550615b54565b895f5260205f205f5b85811015615b4b5781548b8201860152908301908801615b30565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b8051611cd7816152c2565b5f8060408385031215615b8d575f80fd5b82516001600160401b0380821115615ba3575f80fd5b9084019060608287031215615bb6575f80fd5b615bbe6156fe565b82518152602080840151615bd181615644565b82820152604084015183811115615be6575f80fd5b80850194505087601f850112615bfa575f80fd5b83519250615c0a6157bb84615778565b8381528882858701011115615c1d575f80fd5b615c2c848383018488016154a3565b80604084015250819550615c41818801615b71565b9450505050509250929050565b8181038181111561114957611149615979565b5f808335601e19843603018112615c76575f80fd5b8301803591506001600160401b03821115615c8f575f80fd5b602001915036819003821315613c46575f80fd5b5f8851615cb4818460208d016154a3565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b5f8235603e198336030181126156e0575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215615d5e575f80fd5b615d66615726565b615d6f836152cf565b81526020808401356001600160401b0380821115615d8b575f80fd5b9085019036601f830112615d9d575f80fd5b813581811115615daf57615daf6156ea565b8060051b9150615dc0848301615748565b8181529183018401918481019036841115615dd9575f80fd5b938501935b83851015615e035784359250615df383615644565b8282529385019390850190615dde565b94860194909452509295945050505050565b5f60208284031215615e25575f80fd5b6118da826153ff565b5f60208284031215615e3e575f80fd5b813560ff811681146118da575f80fd5b5f6001600160401b038083168181036159b8576159b8615979565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651615eaf81602a850160208b016154a3565b865190830190615ec681602a840160208b016154a3565b60c087901b6001600160c01b031916602a9290910191820152615ef8603282018660e01b6001600160e01b0319169052565b615f11603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615f348184602088016154a3565b60609390931b6001600160601b0319169190920190815260140192915050565b5f8451615f658184602089016154a3565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615fa08184602088016154a3565b60c09390931b6001600160c01b031916919092019081526008019291505056fea164736f6c6343000819000a", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -572,6 +572,37 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) PCHAIN return _NativeTokenStakingManager.Contract.PCHAINBLOCKCHAINID(&_NativeTokenStakingManager.CallOpts) } +// UPTIMEREWARDSTHRESHOLDPERCENTAGE is a free data retrieval call binding the contract method 0xafba878a. +// +// Solidity: function UPTIME_REWARDS_THRESHOLD_PERCENTAGE() view returns(uint8) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCaller) UPTIMEREWARDSTHRESHOLDPERCENTAGE(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _NativeTokenStakingManager.contract.Call(opts, &out, "UPTIME_REWARDS_THRESHOLD_PERCENTAGE") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// UPTIMEREWARDSTHRESHOLDPERCENTAGE is a free data retrieval call binding the contract method 0xafba878a. +// +// Solidity: function UPTIME_REWARDS_THRESHOLD_PERCENTAGE() view returns(uint8) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) UPTIMEREWARDSTHRESHOLDPERCENTAGE() (uint8, error) { + return _NativeTokenStakingManager.Contract.UPTIMEREWARDSTHRESHOLDPERCENTAGE(&_NativeTokenStakingManager.CallOpts) +} + +// UPTIMEREWARDSTHRESHOLDPERCENTAGE is a free data retrieval call binding the contract method 0xafba878a. +// +// Solidity: function UPTIME_REWARDS_THRESHOLD_PERCENTAGE() view returns(uint8) +func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) UPTIMEREWARDSTHRESHOLDPERCENTAGE() (uint8, error) { + return _NativeTokenStakingManager.Contract.UPTIMEREWARDSTHRESHOLDPERCENTAGE(&_NativeTokenStakingManager.CallOpts) +} + // VALIDATORMANAGERSTORAGELOCATION is a free data retrieval call binding the contract method 0xbc5fbfec. // // Solidity: function VALIDATOR_MANAGER_STORAGE_LOCATION() view returns(bytes32) @@ -810,46 +841,67 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Cl return _NativeTokenStakingManager.Contract.ClaimDelegationFees(&_NativeTokenStakingManager.TransactOpts, validationID) } -// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x5297fae6. +// ClaimValidationRewards is a paid mutator transaction binding the contract method 0x2893d077. // -// Solidity: function completeDelegatorRegistration(uint32 messageIndex, bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteDelegatorRegistration(opts *bind.TransactOpts, messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "completeDelegatorRegistration", messageIndex, delegationID) +// Solidity: function claimValidationRewards(bytes32 validationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ClaimValidationRewards(opts *bind.TransactOpts, validationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "claimValidationRewards", validationID, messageIndex) } -// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x5297fae6. +// ClaimValidationRewards is a paid mutator transaction binding the contract method 0x2893d077. // -// Solidity: function completeDelegatorRegistration(uint32 messageIndex, bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteDelegatorRegistration(messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, messageIndex, delegationID) +// Solidity: function claimValidationRewards(bytes32 validationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ClaimValidationRewards(validationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ClaimValidationRewards(&_NativeTokenStakingManager.TransactOpts, validationID, messageIndex) } -// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x5297fae6. +// ClaimValidationRewards is a paid mutator transaction binding the contract method 0x2893d077. // -// Solidity: function completeDelegatorRegistration(uint32 messageIndex, bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteDelegatorRegistration(messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, messageIndex, delegationID) +// Solidity: function claimValidationRewards(bytes32 validationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ClaimValidationRewards(validationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ClaimValidationRewards(&_NativeTokenStakingManager.TransactOpts, validationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x98f3e2b4. +// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x60ad7784. // -// Solidity: function completeEndDelegation(uint32 messageIndex, bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "completeEndDelegation", messageIndex, delegationID) +// Solidity: function completeDelegatorRegistration(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteDelegatorRegistration(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "completeDelegatorRegistration", delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x98f3e2b4. +// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x60ad7784. // -// Solidity: function completeEndDelegation(uint32 messageIndex, bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteEndDelegation(messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, messageIndex, delegationID) +// Solidity: function completeDelegatorRegistration(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteDelegatorRegistration(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } -// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x98f3e2b4. +// CompleteDelegatorRegistration is a paid mutator transaction binding the contract method 0x60ad7784. // -// Solidity: function completeEndDelegation(uint32 messageIndex, bytes32 delegationID) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteEndDelegation(messageIndex uint32, delegationID [32]byte) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, messageIndex, delegationID) +// Solidity: function completeDelegatorRegistration(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteDelegatorRegistration(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteDelegatorRegistration(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) +} + +// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// +// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) CompleteEndDelegation(opts *bind.TransactOpts, delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "completeEndDelegation", delegationID, messageIndex) +} + +// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// +// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) +} + +// CompleteEndDelegation is a paid mutator transaction binding the contract method 0x80dd672f. +// +// Solidity: function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) CompleteEndDelegation(delegationID [32]byte, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.CompleteEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, messageIndex) } // CompleteEndValidation is a paid mutator transaction binding the contract method 0x467ef06f. @@ -2670,6 +2722,159 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValida return event, nil } +// NativeTokenStakingManagerValidationRewardsClaimedIterator is returned from FilterValidationRewardsClaimed and is used to iterate over the raw logs and unpacked data for ValidationRewardsClaimed events raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerValidationRewardsClaimedIterator struct { + Event *NativeTokenStakingManagerValidationRewardsClaimed // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub interfaces.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *NativeTokenStakingManagerValidationRewardsClaimedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(NativeTokenStakingManagerValidationRewardsClaimed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(NativeTokenStakingManagerValidationRewardsClaimed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *NativeTokenStakingManagerValidationRewardsClaimedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *NativeTokenStakingManagerValidationRewardsClaimedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// NativeTokenStakingManagerValidationRewardsClaimed represents a ValidationRewardsClaimed event raised by the NativeTokenStakingManager contract. +type NativeTokenStakingManagerValidationRewardsClaimed struct { + ValidationID [32]byte + Reward *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterValidationRewardsClaimed is a free log retrieval operation binding the contract event 0x69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a. +// +// Solidity: event ValidationRewardsClaimed(bytes32 indexed validationID, uint256 indexed reward) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) FilterValidationRewardsClaimed(opts *bind.FilterOpts, validationID [][32]byte, reward []*big.Int) (*NativeTokenStakingManagerValidationRewardsClaimedIterator, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var rewardRule []interface{} + for _, rewardItem := range reward { + rewardRule = append(rewardRule, rewardItem) + } + + logs, sub, err := _NativeTokenStakingManager.contract.FilterLogs(opts, "ValidationRewardsClaimed", validationIDRule, rewardRule) + if err != nil { + return nil, err + } + return &NativeTokenStakingManagerValidationRewardsClaimedIterator{contract: _NativeTokenStakingManager.contract, event: "ValidationRewardsClaimed", logs: logs, sub: sub}, nil +} + +// WatchValidationRewardsClaimed is a free log subscription operation binding the contract event 0x69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a. +// +// Solidity: event ValidationRewardsClaimed(bytes32 indexed validationID, uint256 indexed reward) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) WatchValidationRewardsClaimed(opts *bind.WatchOpts, sink chan<- *NativeTokenStakingManagerValidationRewardsClaimed, validationID [][32]byte, reward []*big.Int) (event.Subscription, error) { + + var validationIDRule []interface{} + for _, validationIDItem := range validationID { + validationIDRule = append(validationIDRule, validationIDItem) + } + var rewardRule []interface{} + for _, rewardItem := range reward { + rewardRule = append(rewardRule, rewardItem) + } + + logs, sub, err := _NativeTokenStakingManager.contract.WatchLogs(opts, "ValidationRewardsClaimed", validationIDRule, rewardRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(NativeTokenStakingManagerValidationRewardsClaimed) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationRewardsClaimed", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseValidationRewardsClaimed is a log parse operation binding the contract event 0x69eb3dd96029877a7561d5b5076810e0b53b223c9ab46cba8efd028ebf08fe9a. +// +// Solidity: event ValidationRewardsClaimed(bytes32 indexed validationID, uint256 indexed reward) +func (_NativeTokenStakingManager *NativeTokenStakingManagerFilterer) ParseValidationRewardsClaimed(log types.Log) (*NativeTokenStakingManagerValidationRewardsClaimed, error) { + event := new(NativeTokenStakingManagerValidationRewardsClaimed) + if err := _NativeTokenStakingManager.contract.UnpackLog(event, "ValidationRewardsClaimed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // NativeTokenStakingManagerValidatorRemovalInitializedIterator is returned from FilterValidatorRemovalInitialized and is used to iterate over the raw logs and unpacked data for ValidatorRemovalInitialized events raised by the NativeTokenStakingManager contract. type NativeTokenStakingManagerValidatorRemovalInitializedIterator struct { Event *NativeTokenStakingManagerValidatorRemovalInitialized // Event containing the contract specifics and raw log diff --git a/contracts/validator-manager/ExampleRewardCalculator.sol b/contracts/validator-manager/ExampleRewardCalculator.sol index 856158350..68bbc224d 100644 --- a/contracts/validator-manager/ExampleRewardCalculator.sol +++ b/contracts/validator-manager/ExampleRewardCalculator.sol @@ -10,8 +10,6 @@ import {IRewardCalculator} from "./interfaces/IRewardCalculator.sol"; contract ExampleRewardCalculator is IRewardCalculator { uint256 public constant SECONDS_IN_YEAR = 31536000; - uint8 public constant UPTIME_REWARDS_THRESHOLD_PERCENTAGE = 80; - uint16 public constant BIPS_CONVERSION_FACTOR = 10000; uint64 public immutable rewardBasisPoints; @@ -26,20 +24,11 @@ contract ExampleRewardCalculator is IRewardCalculator { */ function calculateReward( uint256 stakeAmount, - uint64 validatorStartTime, + uint64, // validatorStartTime uint64 stakingStartTime, uint64 stakingEndTime, - uint64 uptimeSeconds + uint64 // uptimeSeconds ) external view returns (uint256) { - // Equivalent to uptimeSeconds/(validator.endedAt - validator.startedAt) < UPTIME_REWARDS_THRESHOLD_PERCENTAGE/100 - // Rearranged to prevent integer division truncation. - if ( - uptimeSeconds * 100 - < (stakingEndTime - validatorStartTime) * UPTIME_REWARDS_THRESHOLD_PERCENTAGE - ) { - return 0; - } - return (stakeAmount * rewardBasisPoints * (stakingEndTime - stakingStartTime)) / SECONDS_IN_YEAR / BIPS_CONVERSION_FACTOR; } diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index eacff333a..f90ab9545 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -76,6 +76,7 @@ abstract contract PoSValidatorManager is uint16 public constant MAXIMUM_DELEGATION_FEE_BIPS = 10000; + uint8 public constant UPTIME_REWARDS_THRESHOLD_PERCENTAGE = 80; uint16 public constant BIPS_CONVERSION_FACTOR = 10000; error InvalidDelegationFee(uint16 delegationFeeBips); @@ -206,9 +207,7 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - if (!_initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex)) { - revert ValidatorIneligibleForRewards(validationID); - } + _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, true); } /** @@ -219,8 +218,7 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, 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, false); } /** @@ -231,15 +229,16 @@ abstract contract PoSValidatorManager is function _initializeEndPoSValidation( bytes32 validationID, bool includeUptimeProof, - uint32 messageIndex - ) internal returns (bool) { + uint32 messageIndex, + bool requireSufficientUptime + ) internal { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Validator memory validator = _initializeEndValidation(validationID); // Non-PoS validators are required to boostrap the network, but are not eligible for rewards. if (!_isPoSValidator(validationID)) { - return true; + return; } // PoS validations can only be ended by their owners. @@ -256,22 +255,32 @@ abstract contract PoSValidatorManager is } // Uptime proofs include the absolute number of seconds the validator has been active. - uint64 uptimeSeconds; + uint64 totalUptime; if (includeUptimeProof) { - uptimeSeconds = _updateUptime(validationID, messageIndex); + totalUptime = _updateUptime(validationID, messageIndex); } else { - uptimeSeconds = $._posValidatorInfo[validationID].uptimeSeconds; + totalUptime = $._posValidatorInfo[validationID].uptimeSeconds; + } + uint64 uptime = totalUptime - $._posValidatorInfo[validationID].lastClaimMinUptime; + uint64 lastClaimTime = $._posValidatorInfo[validationID].lastClaimTime; + if (lastClaimTime == 0) { + lastClaimTime = validator.startedAt; + } + if ( + requireSufficientUptime + && !_validateSufficientUptime(uptime, lastClaimTime, validator.endedAt) + ) { + revert ValidatorIneligibleForRewards(validationID); } uint256 reward = $._rewardCalculator.calculateReward({ stakeAmount: weightToValue(validator.startingWeight), - validatorStartTime: validator.startedAt, - stakingStartTime: validator.startedAt, + validatorStartTime: lastClaimTime, + stakingStartTime: lastClaimTime, stakingEndTime: validator.endedAt, - uptimeSeconds: uptimeSeconds + uptimeSeconds: uptime }); $._redeemableValidatorRewards[validationID] += reward; - return (reward > 0); } /** @@ -294,12 +303,101 @@ abstract contract PoSValidatorManager is uint256 rewards = $._redeemableValidatorRewards[validationID]; delete $._redeemableValidatorRewards[validationID]; _reward(owner, rewards); + + emit ValidationRewardsClaimed(validationID, rewards); } // The stake is unlocked whether the validation period is completed or invalidated. _unlock(owner, weightToValue(validator.startingWeight)); } + /** + * @notice Claim pro-rated validation rewards. Rewards are calculated from the last time rewards were claimed, + * or the beginning of the validation period, whichever is later. Reward eligibility is determined by the + * submitted uptime proof. + * + * + * @dev See {IPoSValidatorManager-claimValidationRewards}. + */ + function claimValidationRewards( + bytes32 validationID, + uint32 messageIndex + ) external nonReentrant { + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + + Validator memory validator = getValidator(validationID); + if (validator.status != ValidatorStatus.Active) { + revert InvalidValidatorStatus(validator.status); + } + + // Non-PoS validators are required to boostrap the network, but are not eligible for rewards. + if (!_isPoSValidator(validationID)) { + revert ValidatorNotPoS(validationID); + } + + // Rewards can only be claimed by the validator owner. + if ($._posValidatorInfo[validationID].owner != _msgSender()) { + revert UnauthorizedOwner(_msgSender()); + } + + // Check that minimum stake duration has passed. + uint64 claimTime = uint64(block.timestamp); + if (claimTime < validator.startedAt + $._posValidatorInfo[validationID].minStakeDuration) { + revert MinStakeDurationNotPassed(claimTime); + } + + // The claim's uptime is the difference between the total uptime and the minimum possible uptime from the last claim. + // We use the minimum uptime to get a lower bound on the required uptime for this claim + uint64 totalUptime = _updateUptime(validationID, messageIndex); + uint64 uptime = totalUptime - $._posValidatorInfo[validationID].lastClaimMinUptime; + + // If no rewards have yet been claimed, use the validator's start time + uint64 lastClaimTime = $._posValidatorInfo[validationID].lastClaimTime; + if (lastClaimTime == 0) { + lastClaimTime = validator.startedAt; + } + // Validate the uptime for this claim. Given that all previous claims have been similarly validated, + // this is equivalent to validating the uptime of the entire validation period up to this point, due + // to the linearity of the uptime threshold calculation. + if (!_validateSufficientUptime(uptime, lastClaimTime, claimTime)) { + revert ValidatorIneligibleForRewards(validationID); + } + + uint256 reward = $._rewardCalculator.calculateReward({ + stakeAmount: weightToValue(validator.startingWeight), + validatorStartTime: lastClaimTime, + stakingStartTime: lastClaimTime, + stakingEndTime: claimTime, + uptimeSeconds: uptime + }); + + $._posValidatorInfo[validationID].lastClaimMinUptime = + (claimTime - validator.startedAt) * UPTIME_REWARDS_THRESHOLD_PERCENTAGE / 100; + $._posValidatorInfo[validationID].lastClaimTime = claimTime; + _reward($._posValidatorInfo[validationID].owner, reward); + + emit ValidationRewardsClaimed(validationID, reward); + } + + /** + * @dev Helper function that checks if the submitted uptime is sufficient for rewards. + */ + function _validateSufficientUptime( + uint64 uptimeSeconds, + uint64 periodStartTime, + uint64 periodEndTime + ) internal pure returns (bool) { + // Equivalent to uptimeSeconds/(periodEndTime - periodStartTime) < UPTIME_REWARDS_THRESHOLD_PERCENTAGE/100 + // Rearranged to prevent integer division truncation. + if ( + uptimeSeconds * 100 + < (periodEndTime - periodStartTime) * UPTIME_REWARDS_THRESHOLD_PERCENTAGE + ) { + return false; + } + return true; + } + /** * @dev Helper function that extracts the uptime from a ValidationUptimeMessage Warp message * If the uptime is greater than the stored uptime, update the stored uptime. @@ -369,7 +467,9 @@ abstract contract PoSValidatorManager is owner: _msgSender(), delegationFeeBips: delegationFeeBips, minStakeDuration: minStakeDuration, - uptimeSeconds: 0 + uptimeSeconds: 0, + lastClaimMinUptime: 0, + lastClaimTime: 0 }); return validationID; } @@ -463,7 +563,7 @@ abstract contract PoSValidatorManager is /** * @notice See {IPoSValidatorManager-completeDelegatorRegistration}. */ - function completeDelegatorRegistration(uint32 messageIndex, bytes32 delegationID) external { + function completeDelegatorRegistration(bytes32 delegationID, uint32 messageIndex) external { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Delegator memory delegator = $._delegatorStakes[delegationID]; @@ -518,9 +618,7 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - if (!_initializeEndDelegation(delegationID, includeUptimeProof, messageIndex)) { - revert DelegatorIneligibleForRewards(delegationID); - } + _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, true); } /** @@ -531,8 +629,7 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, 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, false); } /** @@ -543,8 +640,9 @@ abstract contract PoSValidatorManager is function _initializeEndDelegation( bytes32 delegationID, bool includeUptimeProof, - uint32 messageIndex - ) internal returns (bool) { + uint32 messageIndex, + bool requireSufficientUptime + ) internal { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Delegator memory delegator = $._delegatorStakes[delegationID]; @@ -591,20 +689,21 @@ abstract contract PoSValidatorManager is _setValidatorWeight(validationID, validator.weight - delegator.weight); uint256 reward = _calculateDelegationReward(delegator); + if (requireSufficientUptime && reward == 0) { + revert DelegatorIneligibleForRewards(delegationID); + } $._redeemableDelegatorRewards[delegationID] = reward; emit DelegatorRemovalInitialized({ delegationID: delegationID, validationID: validationID }); - return (reward > 0); } else if (validator.status == ValidatorStatus.Completed) { + // If the validator has completed, then no further uptimes may be submitted, so we always + // end the delegation $._redeemableDelegatorRewards[delegationID] = _calculateDelegationReward(delegator); _completeEndDelegation(delegationID); - // If the validator has completed, then no further uptimes may be submitted, so we always - // end the delegation. - return true; } else { revert InvalidValidatorStatus(validator.status); } @@ -637,6 +736,16 @@ abstract contract PoSValidatorManager is return 0; } + if ( + !_validateSufficientUptime( + $._posValidatorInfo[delegator.validationID].uptimeSeconds, + validator.startedAt, + delegationEndTime + ) + ) { + return 0; + } + return $._rewardCalculator.calculateReward({ stakeAmount: weightToValue(delegator.weight), validatorStartTime: validator.startedAt, @@ -678,8 +787,8 @@ abstract contract PoSValidatorManager is * @notice See {IPoSValidatorManager-completeEndDelegation}. */ function completeEndDelegation( - uint32 messageIndex, - bytes32 delegationID + bytes32 delegationID, + uint32 messageIndex ) external nonReentrant { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Delegator memory delegator = $._delegatorStakes[delegationID]; diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index fc0a77d6c..e20484145 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -53,6 +53,8 @@ struct PoSValidatorInfo { uint16 delegationFeeBips; uint64 minStakeDuration; uint64 uptimeSeconds; + uint64 lastClaimMinUptime; + uint64 lastClaimTime; } /** @@ -114,6 +116,8 @@ interface IPoSValidatorManager is IValidatorManager { */ event UptimeUpdated(bytes32 indexed validationID, uint64 uptime); + event ValidationRewardsClaimed(bytes32 indexed validationID, uint256 indexed reward); + /** * @notice Updates the uptime of the validationID if the submitted proof is greated than the stored uptime. * Anybody may call this function to ensure the stored uptime is accurate. Callable only when the validation period is active. @@ -156,6 +160,16 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice Withdraws pro-rated rewards for an active validation to the owner of the validator. + * Uses the uptime proof provided in the Warp message to determine rewards eligibility. Reverts if the uptime is not eligible for rewards. + * Rewards are calculated from the last time this function was called, or the beginning of the + * validation, whichever is later. + * @param validationID The ID of the validation being claimed. + * @param messageIndex The index of the Warp message to be received providing the uptime proof. + */ + function claimValidationRewards(bytes32 validationID, uint32 messageIndex) 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. @@ -164,10 +178,10 @@ interface IPoSValidatorManager is IValidatorManager { * the delegation is considered active after this function is completed. * Note: Only the specified delegation will be marked as registered, even if the validator weight update * message implicitly includes multiple weight changes. - * @param messageIndex The index of the Warp message to be received providing the acknowledgement. * @param delegationID The ID of the delegation being registered. + * @param messageIndex The index of the Warp message to be received providing the acknowledgement. */ - function completeDelegatorRegistration(uint32 messageIndex, bytes32 delegationID) external; + function completeDelegatorRegistration(bytes32 delegationID, uint32 messageIndex) external; /** * @notice Begins the process of removing a delegator from a validation period, and reverts if the delegation is not eligible for rewards. @@ -225,10 +239,10 @@ interface IPoSValidatorManager is IValidatorManager { * weight change pertaining to the delegation ending is included in any subsequent validator weight update messages. * Note: Only the specified delegation will be marked as completed, even if the validator weight update * message implicitly includes multiple weight changes. - * @param messageIndex The index of the Warp message to be received providing the acknowledgement. * @param delegationID The ID of the delegation being removed. + * @param messageIndex The index of the Warp message to be received providing the acknowledgement. */ - function completeEndDelegation(uint32 messageIndex, bytes32 delegationID) external; + function completeEndDelegation(bytes32 delegationID, uint32 messageIndex) external; /** * @notice Withdraws the delegation fees from completed delegations to the owner of the validator. diff --git a/contracts/validator-manager/tests/ExamplesRewardCalculatorTests.t.sol b/contracts/validator-manager/tests/ExampleRewardCalculatorTests.t.sol similarity index 65% rename from contracts/validator-manager/tests/ExamplesRewardCalculatorTests.t.sol rename to contracts/validator-manager/tests/ExampleRewardCalculatorTests.t.sol index dc59a6409..1ddad1bc0 100644 --- a/contracts/validator-manager/tests/ExamplesRewardCalculatorTests.t.sol +++ b/contracts/validator-manager/tests/ExampleRewardCalculatorTests.t.sol @@ -15,7 +15,6 @@ contract ExampleRewardCalculatorTest is Test { uint256 public constant DEFAULT_STAKE_AMOUNT = 1e12; uint64 public constant DEFAULT_START_TIME = 1000; uint64 public constant DEFAULT_END_TIME = 31537000; // a year + 1000 seonds - uint64 public constant DEFAULT_UPTIME = (DEFAULT_END_TIME - DEFAULT_START_TIME) * 80 / 100; uint64 public constant DEFAULT_REWARD_BASIS_POINTS = 42; function setUp() public { @@ -25,22 +24,11 @@ contract ExampleRewardCalculatorTest is Test { function testRewardCalculation() public view { uint256 output = exampleRewardCalculator.calculateReward({ stakeAmount: DEFAULT_STAKE_AMOUNT, - validatorStartTime: DEFAULT_START_TIME, + validatorStartTime: 0, stakingStartTime: DEFAULT_START_TIME, stakingEndTime: DEFAULT_END_TIME, - uptimeSeconds: DEFAULT_UPTIME + uptimeSeconds: 0 }); assertEq(output, 42e8); } - - function testInsufficientUptime() public view { - uint256 output = exampleRewardCalculator.calculateReward({ - stakeAmount: DEFAULT_STAKE_AMOUNT, - validatorStartTime: DEFAULT_START_TIME, - stakingStartTime: DEFAULT_START_TIME, - stakingEndTime: DEFAULT_END_TIME, - uptimeSeconds: DEFAULT_UPTIME - 1 - }); - assertEq(output, 0); - } } diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index 1684e165d..22efbc170 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -71,6 +71,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { event UptimeUpdated(bytes32 indexed validationID, uint64 uptime); + event ValidationRewardsClaimed(bytes32 indexed validationID, uint256 indexed reward); + function testDelegationFeeBipsTooLow() public { ValidatorRegistrationInput memory registrationInput = ValidatorRegistrationInput({ nodeID: DEFAULT_NODE_ID, @@ -341,7 +343,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.warp(DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP); vm.expectRevert(abi.encodeWithSelector(PoSValidatorManager.InvalidNonce.selector, nonce)); - posValidatorManager.completeDelegatorRegistration(0, delegationID2); + posValidatorManager.completeDelegatorRegistration(delegationID2, 0); } function testCompleteDelegatorRegistrationImplicitNonce() public { @@ -735,7 +737,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedTotalReward = rewardCalculator.calculateReward({ stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), - validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + validatorStartTime: 0, stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, uptimeSeconds: validationEndTime - DEFAULT_REGISTRATION_TIMESTAMP @@ -787,7 +789,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { // warp to right after validator ended vm.warp(DEFAULT_COMPLETION_TIMESTAMP + 1); - posValidatorManager.completeDelegatorRegistration(0, delegationID); + posValidatorManager.completeDelegatorRegistration(delegationID, 0); assertEq( _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS), @@ -805,7 +807,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedTotalReward = rewardCalculator.calculateReward({ stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), - validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + validatorStartTime: 0, stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP @@ -856,7 +858,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedTotalReward = rewardCalculator.calculateReward({ stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), - validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + validatorStartTime: 0, stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP @@ -874,7 +876,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _expectStakeUnlock(DEFAULT_DELEGATOR_ADDRESS, _weightToValue(DEFAULT_DELEGATOR_WEIGHT)); _expectRewardIssuance(DEFAULT_DELEGATOR_ADDRESS, expectedDelegatorReward); - posValidatorManager.completeEndDelegation(0, delegationID); + posValidatorManager.completeEndDelegation(delegationID, 0); assertEq( _getStakeAssetBalance(DEFAULT_DELEGATOR_ADDRESS), @@ -940,7 +942,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetPChainWarpMessage(setValidatorWeightPayload, true); vm.expectRevert(abi.encodeWithSelector(PoSValidatorManager.InvalidNonce.selector, nonce)); - posValidatorManager.completeEndDelegation(0, delegationID2); + posValidatorManager.completeEndDelegation(delegationID2, 0); } function testCompleteEndDelegationImplicitNonce() public { @@ -995,7 +997,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedTotalReward = rewardCalculator.calculateReward({ stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), - validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + validatorStartTime: 0, stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP @@ -1028,7 +1030,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedReward = rewardCalculator.calculateReward({ stakeAmount: _weightToValue(DEFAULT_WEIGHT), - validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + validatorStartTime: 0, stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP @@ -1169,6 +1171,236 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _forceInitializeEndValidation(validationID, true); } + function testClaimValidationReward() public { + bytes32 validationID = _registerDefaultValidator(); + uint64 uptimePercentage = 80; + uint64 claimTime = DEFAULT_COMPLETION_TIMESTAMP; + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: 0, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: claimTime, + uptimeSeconds: 0 + }); + + bytes memory uptimeMsg = ValidatorMessages.packValidationUptimeMessage( + validationID, (claimTime - DEFAULT_REGISTRATION_TIMESTAMP) * uptimePercentage / 100 + ); + _mockGetUptimeWarpMessage(uptimeMsg, true); + _mockGetBlockchainID(); + + vm.warp(claimTime); + _expectValidationRewardsIssuance(validationID, address(this), expectedReward); + posValidatorManager.claimValidationRewards(validationID, 0); + } + + function testClaimSubsequentValidationReward() public { + bytes32 validationID = _registerDefaultValidator(); + uint64 uptimePercentage = 80; + uint64 firstClaimTime = DEFAULT_COMPLETION_TIMESTAMP; + bytes memory uptimeMsg = ValidatorMessages.packValidationUptimeMessage( + validationID, (firstClaimTime - DEFAULT_REGISTRATION_TIMESTAMP) * uptimePercentage / 100 + ); + _claimRewards({ + validationID: validationID, + uptimeMsg: uptimeMsg, + validationStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + claimTime: firstClaimTime, + lastClaimTime: DEFAULT_REGISTRATION_TIMESTAMP, + success: true + }); + + // Claim rewards again + uint64 secondClaimTime = firstClaimTime + 1000; + uptimeMsg = ValidatorMessages.packValidationUptimeMessage( + validationID, + (secondClaimTime - DEFAULT_REGISTRATION_TIMESTAMP) * uptimePercentage / 100 + ); + _claimRewards({ + validationID: validationID, + uptimeMsg: uptimeMsg, + validationStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + claimTime: secondClaimTime, + lastClaimTime: firstClaimTime, + success: true + }); + } + + function testClaimValidationRewardStaleUptime() public { + uint64 validationStartTime = 0; + bytes32 validationID = _registerValidator({ + nodeID: DEFAULT_NODE_ID, + subnetID: DEFAULT_SUBNET_ID, + weight: DEFAULT_WEIGHT, + registrationExpiry: DEFAULT_EXPIRY, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY, + registrationTimestamp: validationStartTime + }); + uint64 uptimePercentage = 80; + uint64 firstClaimTime = DEFAULT_MINIMUM_VALIDATION_DURATION + 1; // 24 hours + + bytes memory uptimeMsg = ValidatorMessages.packValidationUptimeMessage( + validationID, ((firstClaimTime - validationStartTime) * uptimePercentage / 100) + 1 + ); + _claimRewards({ + validationID: validationID, + uptimeMsg: uptimeMsg, + validationStartTime: validationStartTime, + claimTime: firstClaimTime, + lastClaimTime: validationStartTime, + success: true + }); + + // Attempt to claim rewards again, but by submitting the same uptime + uint64 secondClaimTime = firstClaimTime + 5 hours; + _claimRewards({ + validationID: validationID, + uptimeMsg: uptimeMsg, + validationStartTime: validationStartTime, + claimTime: secondClaimTime, + lastClaimTime: firstClaimTime, + success: false + }); + } + + function testClaimValidationRewardInsufficientUptime() public { + bytes32 validationID = _registerDefaultValidator(); + uint64 uptimePercentage = 79; + + bytes memory uptimeMsg = ValidatorMessages.packValidationUptimeMessage( + validationID, + (DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP) * uptimePercentage / 100 + ); + _claimRewards({ + validationID: validationID, + uptimeMsg: uptimeMsg, + validationStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + claimTime: DEFAULT_COMPLETION_TIMESTAMP, + lastClaimTime: DEFAULT_REGISTRATION_TIMESTAMP, + success: false + }); + } + + function testClaimValidationRewardWithDelegation() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + + // Claim validator rewards + uint64 uptimePercentage = 80; + uint64 claimTime = DEFAULT_COMPLETION_TIMESTAMP; + bytes memory uptimeMsg = ValidatorMessages.packValidationUptimeMessage( + validationID, (claimTime - DEFAULT_REGISTRATION_TIMESTAMP) * uptimePercentage / 100 + ); + + _claimRewards({ + validationID: validationID, + uptimeMsg: uptimeMsg, + validationStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + claimTime: claimTime, + lastClaimTime: DEFAULT_REGISTRATION_TIMESTAMP, + success: true + }); + + // End the delegation and claim rewards + _initializeAndCompleteEndDelegationWithChecks(validationID, delegationID); + } + + function testEndValidationPreviouslyClaimedReward() public { + bytes32 validationID = _registerDefaultValidator(); + uint64 uptimePercentage = 80; + uint64 firstClaimTime = DEFAULT_COMPLETION_TIMESTAMP; + + bytes memory uptimeMsg = ValidatorMessages.packValidationUptimeMessage( + validationID, (firstClaimTime - DEFAULT_REGISTRATION_TIMESTAMP) * uptimePercentage / 100 + ); + uint256 firstExpectedReward = _claimRewards({ + validationID: validationID, + uptimeMsg: uptimeMsg, + validationStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + claimTime: firstClaimTime, + lastClaimTime: DEFAULT_REGISTRATION_TIMESTAMP, + success: true + }); + + // Claim rewards again + uint64 secondClaimTime = firstClaimTime + 5 hours; + uptimeMsg = ValidatorMessages.packValidationUptimeMessage( + validationID, + (secondClaimTime - DEFAULT_REGISTRATION_TIMESTAMP) * uptimePercentage / 100 + ); + uint256 secondExpectedReward = _claimRewards({ + validationID: validationID, + uptimeMsg: uptimeMsg, + validationStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + claimTime: secondClaimTime, + lastClaimTime: firstClaimTime, + success: true + }); + + // Try to end the validation with a stale uptime + uint64 thirdClaimTime = secondClaimTime + 5 hours; + vm.expectRevert( + abi.encodeWithSelector( + PoSValidatorManager.ValidatorIneligibleForRewards.selector, validationID + ) + ); + _initializeEndValidation({ + validationID: validationID, + registrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, + completionTimestamp: thirdClaimTime, + expectedNonce: 1, + includeUptime: false, + force: false + }); + + // Try again with the correct uptime + _initializeEndValidation({ + validationID: validationID, + registrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, + completionTimestamp: thirdClaimTime, + expectedNonce: 1, + includeUptime: true, + force: false + }); + + uint256 thirdExpectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: 0, + stakingStartTime: secondClaimTime, + stakingEndTime: thirdClaimTime, + uptimeSeconds: 0 + }); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: address(this), + expectedReward: thirdExpectedReward, + validatorWeight: DEFAULT_WEIGHT + }); + + // Confirm the pro-rated rewards match the total expected reward + uint256 totalExpectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: 0, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: thirdClaimTime, + uptimeSeconds: 0 + }); + // Off-by one errors are possible due to integer rounding + if (totalExpectedReward > firstExpectedReward + secondExpectedReward + thirdExpectedReward) + { + assertTrue( + totalExpectedReward + - (firstExpectedReward + secondExpectedReward + thirdExpectedReward) <= 1 + ); + } else { + assertTrue( + (firstExpectedReward + secondExpectedReward + thirdExpectedReward) + - totalExpectedReward <= 1 + ); + } + } + function testValueToWeightTruncated() public { // default weightToValueFactor is 1e12 vm.expectRevert( @@ -1285,7 +1517,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _mockGetPChainWarpMessage(setValidatorWeightPayload, true); vm.warp(completeRegistrationTimestamp); - posValidatorManager.completeDelegatorRegistration(0, delegationID); + posValidatorManager.completeDelegatorRegistration(delegationID, 0); } function _setUpCompleteDelegatorRegistrationWithChecks( @@ -1485,7 +1717,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedReward = rewardCalculator.calculateReward({ stakeAmount: _weightToValue(validatorWeight), - validatorStartTime: completeRegistrationTimestamp, + validatorStartTime: 0, stakingStartTime: completeRegistrationTimestamp, stakingEndTime: completionTimestamp, uptimeSeconds: completionTimestamp - completeRegistrationTimestamp @@ -1499,6 +1731,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } + function _expectValidationRewardsIssuance( + bytes32 validationID, + address account, + uint256 amount + ) internal { + vm.expectEmit(true, true, true, true, address(validatorManager)); + emit ValidationRewardsClaimed(validationID, amount); + _expectRewardIssuance(account, amount); + } + function _completeEndValidationWithChecks( bytes32 validationID, address validatorOwner, @@ -1510,7 +1752,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 balanceBefore = _getStakeAssetBalance(validatorOwner); _expectStakeUnlock(validatorOwner, _weightToValue(validatorWeight)); - _expectRewardIssuance(validatorOwner, expectedReward); + _expectValidationRewardsIssuance(validationID, validatorOwner, expectedReward); _completeEndValidation(validationID); @@ -1571,7 +1813,77 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); _mockGetPChainWarpMessage(weightUpdateMessage, true); - posValidatorManager.completeEndDelegation(0, delegationID); + posValidatorManager.completeEndDelegation(delegationID, 0); + } + + function _initializeAndCompleteEndDelegationWithChecks( + bytes32 validationID, + bytes32 delegationID + ) internal { + _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 + }); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: 0, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: 0 + }); + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: DEFAULT_DELEGATOR_ADDRESS, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedTotalReward: expectedTotalReward, + delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2 + }); + } + + function _claimRewards( + bytes32 validationID, + bytes memory uptimeMsg, + uint64 validationStartTime, + uint64 claimTime, + uint64 lastClaimTime, + bool success + ) internal returns (uint256) { + uint256 expectedReward; + if (success) { + expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: validationStartTime, + stakingStartTime: lastClaimTime, + stakingEndTime: claimTime, + uptimeSeconds: 0 + }); + _expectValidationRewardsIssuance(validationID, address(this), expectedReward); + } else { + vm.expectRevert( + abi.encodeWithSelector( + PoSValidatorManager.ValidatorIneligibleForRewards.selector, validationID + ) + ); + } + + _mockGetUptimeWarpMessage(uptimeMsg, true); + _mockGetBlockchainID(); + vm.warp(claimTime); + posValidatorManager.claimValidationRewards(validationID, 0); + return expectedReward; } function _getStakeAssetBalance(address account) internal virtual returns (uint256); diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 0ce88da54..64c495e32 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -50,7 +50,9 @@ abstract contract ValidatorManagerTest is Test { uint8 public constant DEFAULT_MAXIMUM_HOURLY_CHURN = 0; uint64 public constant DEFAULT_REGISTRATION_TIMESTAMP = 1000; uint256 public constant DEFAULT_STARTING_TOTAL_WEIGHT = 1e10 + DEFAULT_WEIGHT; - uint64 public constant DEFAULT_COMPLETION_TIMESTAMP = 100_000; + uint64 public constant DEFAULT_MINIMUM_VALIDATION_DURATION = 24 hours; + uint64 public constant DEFAULT_COMPLETION_TIMESTAMP = + DEFAULT_REGISTRATION_TIMESTAMP + DEFAULT_MINIMUM_VALIDATION_DURATION; // solhint-disable-next-line var-name-mixedcase PChainOwner public DEFAULT_P_CHAIN_OWNER; diff --git a/lib/subnet-evm b/lib/subnet-evm index 1b017f1d4..566b5bca7 160000 --- a/lib/subnet-evm +++ b/lib/subnet-evm @@ -1 +1 @@ -Subproject commit 1b017f1d4371e485a6d650d7f5a10dd5288745bc +Subproject commit 566b5bca78fcd748e596c0581554c30b93eda2a1 diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index b3626bc14..70fd97517 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -1176,7 +1176,7 @@ func CompleteERC20DelegatorRegistration( ) *types.Receipt { abi, err := erc20tokenstakingmanager.ERC20TokenStakingManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("completeDelegatorRegistration", uint32(0), delegationID) + callData, err := abi.Pack("completeDelegatorRegistration", delegationID, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, @@ -1218,7 +1218,7 @@ func CompleteEndERC20Delegation( ) *types.Receipt { abi, err := erc20tokenstakingmanager.ERC20TokenStakingManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("completeEndDelegation", uint32(0), delegationID) + callData, err := abi.Pack("completeEndDelegation", delegationID, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, @@ -1267,7 +1267,7 @@ func CompleteNativeDelegatorRegistration( ) *types.Receipt { abi, err := nativetokenstakingmanager.NativeTokenStakingManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("completeDelegatorRegistration", uint32(0), delegationID) + callData, err := abi.Pack("completeDelegatorRegistration", delegationID, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx, @@ -1309,7 +1309,7 @@ func CompleteEndNativeDelegation( ) *types.Receipt { abi, err := nativetokenstakingmanager.NativeTokenStakingManagerMetaData.GetAbi() Expect(err).Should(BeNil()) - callData, err := abi.Pack("completeEndDelegation", uint32(0), delegationID) + callData, err := abi.Pack("completeEndDelegation", delegationID, uint32(0)) Expect(err).Should(BeNil()) return CallWarpReceiver( ctx,