From 59114e5fd5469d508ded39ebeeb257837df4e31f Mon Sep 17 00:00:00 2001 From: Geoff Stuart <geoffrey.stuart@avalabs.org> Date: Thu, 17 Oct 2024 20:59:02 -0400 Subject: [PATCH] Check weights --- .../ERC20TokenStakingManager.go | 4 +- .../NativeTokenStakingManager.go | 4 +- .../PoAValidatorManager.go | 4 +- .../validator-manager/ValidatorManager.sol | 13 +++ .../tests/ERC20TokenStakingManagerTests.t.sol | 53 +++++++----- .../NativeTokenStakingManagerTests.t.sol | 48 ++++++----- .../tests/PoAValidatorManagerTests.t.sol | 29 ++++--- .../tests/ValidatorManagerTests.t.sol | 85 ++++++++++++++++++- 8 files changed, 178 insertions(+), 62 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index c6cd32649..0c4648437 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -90,8 +90,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\":\"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\":\"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\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"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\":\"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\"}]}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615f8b380380615f8b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e3e8061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c806376f7862111610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff614610444578063df93d8de14610464578063e4a63c401461046e578063f09969ae14610482578063fd7ac5e714610495575f80fd5b8063ba3a4b9714610402578063bc5fbfec14610415578063bee0a03f14610429578063c974d1b61461043c575f80fd5b80639e1bc4ef116100e45780639e1bc4ef146103a2578063a3a65e48146103b5578063afb98096146103c8578063b771b3bc146103dc575f80fd5b806376f78621146103615780638280a25a1461037457806393e245981461037c57806398f3e2b41461038f575f80fd5b80633a1cfff61161018a57806360305d621161015a57806360305d6214610317578063620658561461033457806366435abf14610347578063732214f81461035a575f80fd5b80633a1cfff6146102bd578063467ef06f146102d05780634bee0040146102e35780635297fae614610304575f80fd5b806320d91b7a116101c557806320d91b7a1461025057806325e1c776146102635780632e2194d81461027657806335455ded146102a1575f80fd5b80630118acc4146101f65780630322ed981461020b578063151d30d11461021e5780631ec447241461023d575b5f80fd5b61020961020436600461505c565b6104a8565b005b610209610219366004615097565b6104dd565b610226600a81565b60405160ff90911681526020015b60405180910390f35b61020961024b36600461505c565b6106eb565b61020961025e3660046150ae565b6106f6565b6102096102713660046150fc565b610be2565b610289610284366004615097565b610c56565b6040516001600160401b039091168152602001610234565b6102aa61271081565b60405161ffff9091168152602001610234565b6102096102cb36600461505c565b610c6c565b6102096102de36600461511d565b610c77565b6102f66102f136600461515d565b610d39565b604051908152602001610234565b6102096103123660046151c2565b610d6e565b61031f601481565b60405163ffffffff9091168152602001610234565b6102f66103423660046151ea565b610fd9565b610289610355366004615097565b610ff2565b6102f65f81565b61020961036f36600461505c565b611006565b610226603081565b61020961038a366004615097565b611031565b61020961039d3660046151c2565b6110fc565b6102f66103b0366004615203565b6112d4565b6102096103c336600461511d565b611300565b6102f65f80516020615db283398151915281565b6103ea6005600160991b0181565b6040516001600160a01b039091168152602001610234565b610209610410366004615097565b611489565b6102f65f80516020615dd283398151915281565b610209610437366004615097565b611672565b610226601481565b610457610452366004615097565b6117af565b6040516102349190615298565b6102896202a30081565b6102f65f80516020615d9283398151915281565b61020961049036600461532c565b6118fe565b6102f66104a336600461536a565b6119dd565b6104b3838383611a38565b6104d857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f80516020615e128339815191526020526040808220815160e0810190925280545f80516020615dd283398151915293929190829060ff16600581111561052a5761052a615223565b600581111561053b5761053b615223565b815260200160018201805461054f906153d5565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906153d5565b80156105c65780601f1061059d576101008083540402835291602001916105c6565b820191905f5260205f20905b8154815290600101906020018083116105a957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561063157610631615223565b14610664575f8381526007830160205260409081902054905163170cc93360e21b81526104cf9160ff169060040161540d565b6005600160991b016001600160a01b031663ee5b48eb6106898584606001515f611d46565b6040518263ffffffff1660e01b81526004016106a5919061541b565b6020604051808303815f875af11580156106c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e5919061542d565b50505050565b6106e5838383611a38565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615dd28339815191529060ff161561074857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107af919061542d565b8360200135146107d8576040516372b0a7e760e11b8152602084013560048201526024016104cf565b306107e96060850160408601615444565b6001600160a01b03161461082c576108076060840160408501615444565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104cf565b5f61083a606085018561545f565b905090505f805b828163ffffffff161015610b22575f61085d606088018861545f565b8363ffffffff16818110610873576108736154a4565b905060200281019061088591906154b8565b61088e906155dc565b80516040519192505f9160088801916108a691615655565b908152602001604051809103902054146108d657805160405163a41f772f60e01b81526104cf919060040161541b565b5f6002885f01358460405160200161090592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261091f91615655565b602060405180830381855afa15801561093a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061095d919061542d565b90508086600801835f01516040516109759190615655565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff191660018360058111156109f7576109f7615223565b021790555060208201516001820190610a1090826156aa565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff191692841692909217909155830151610ab5911685615779565b8251604051919550610ac691615655565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b1b9061578c565b9050610841565b50600483018190555f610b40610b3786611d95565b60400151611eab565b90505f610b4c87612038565b90505f600282604051610b5f9190615655565b602060405180830381855afa158015610b7a573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b9d919061542d565b9050828114610bc957604051631872fc8d60e01b815260048101829052602481018490526044016104cf565b5050506009909201805460ff1916600117905550505050565b610beb82612212565b610c0b576040516330efa98b60e01b8152600481018390526024016104cf565b5f610c15836117af565b5190506002816005811115610c2c57610c2c615223565b14610c4c578060405163170cc93360e21b81526004016104cf919061540d565b6106e5838361224d565b5f610c6664e8d4a51000836157ae565b92915050565b6106e58383836124c7565b610c7f6126c0565b5f80516020615db28339815191525f80610c98846126f7565b91509150610ca582612212565b610cb157505050610d20565b5f82815260048085016020526040909120546001600160a01b03169082516005811115610ce057610ce0615223565b03610d05575f83815260078501602052604081208054919055610d038282612a35565b505b610d1b81610d168460400151610fd9565b612aab565b505050505b610d3660015f80516020615df283398151915255565b50565b5f610d426126c0565b610d4e85858585612ae1565b9050610d6660015f80516020615df283398151915255565b949350505050565b5f8181525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db283398151915293929190829060ff166003811115610dbb57610dbb615223565b6003811115610dcc57610dcc615223565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610e42826117af565b9050600183516003811115610e5957610e59615223565b14610e7a578251604051633b0d540d60e21b81526104cf91906004016157cd565b600481516005811115610e8f57610e8f615223565b03610ea557610e9d85612cba565b505050505050565b5f80610ebc610eb389611d95565b60400151612ea1565b5091509150818414610ee957846040015160405163089938b360e11b81526004016104cf91815260200190565b806001600160401b031683606001516001600160401b03161080610f225750806001600160401b03168560a001516001600160401b0316115b15610f4b57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cf565b5f878152600587016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f610c666001600160401b03831664e8d4a510006157e7565b5f610ffc826117af565b6080015192915050565b6110118383836124c7565b6104d857604051635bff683f60e11b8152600481018490526024016104cf565b5f80516020615db28339815191525f611049836117af565b519050600481600581111561106057611060615223565b14611080578060405163170cc93360e21b81526004016104cf919061540d565b5f8381526004830160205260409020546001600160a01b031633146110c657335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104cf565b5f838152600783016020908152604080832080549084905560048601909252909120546106e5906001600160a01b031682612a35565b6111046126c0565b5f8181525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db283398151915293929190829060ff16600381111561115157611151615223565b600381111561116257611162615223565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156111db576111db615223565b146111fc578051604051633b0d540d60e21b81526104cf91906004016157cd565b600461120b82604001516117af565b51600581111561121d5761121d615223565b146112af575f61122c85611d95565b90505f8061123d8360400151612ea1565b5091509150818460400151146112695760405163089938b360e11b8152600481018390526024016104cf565b806001600160401b03168460c001516001600160401b031611156112ab57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cf565b5050505b6112b883612cba565b50506112d060015f80516020615df283398151915255565b5050565b5f6112dd6126c0565b6112e88333846130f7565b9050610c6660015f80516020615df283398151915255565b5f80516020615dd28339815191525f8061132561131c85611d95565b604001516133cf565b915091508061134b57604051632d07135360e01b815281151560048201526024016104cf565b5f82815260068401602052604090208054611365906153d5565b90505f036113895760405163089938b360e11b8152600481018390526024016104cf565b60015f83815260078501602052604090205460ff1660058111156113af576113af615223565b146113e2575f8281526007840160205260409081902054905163170cc93360e21b81526104cf9160ff169060040161540d565b5f82815260068401602052604081206113fa91614fab565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db283398151915293929190829060ff1660038111156114d6576114d6615223565b60038111156114e7576114e7615223565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561156057611560615223565b14158015611581575060038151600381111561157e5761157e615223565b14155b156115a2578051604051633b0d540d60e21b81526104cf91906004016157cd565b5f6115b082604001516117af565b905080606001516001600160401b03165f036115e2576040516339b894f960e21b8152600481018590526024016104cf565b6005600160991b016001600160a01b031663ee5b48eb61160f846040015184606001518560800151611d46565b6040518263ffffffff1660e01b815260040161162b919061541b565b6020604051808303815f875af1158015611647573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061166b919061542d565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615dd283398151915291906116b9906153d5565b90505f036116dd5760405163089938b360e11b8152600481018390526024016104cf565b60015f83815260078301602052604090205460ff16600581111561170357611703615223565b14611736575f8281526007820160205260409081902054905163170cc93360e21b81526104cf9160ff169060040161540d565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161176f91906004016157fe565b6020604051808303815f875af115801561178b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d8919061542d565b6117b7614fe2565b5f8281525f80516020615e12833981519152602052604090819020815160e0810190925280545f80516020615dd2833981519152929190829060ff16600581111561180457611804615223565b600581111561181557611815615223565b8152602001600182018054611829906153d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611855906153d5565b80156118a05780601f10611877576101008083540402835291602001916118a0565b820191905f5260205f20905b81548152906001019060200180831161188357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611947575080546001600160401b03808416911610155b156119655760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611990848461358b565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f80516020615dd2833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611a209086908690615888565b90815260200160405180910390205491505092915050565b5f8381525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db28339815191529284929091829060ff166003811115611a8657611a86615223565b6003811115611a9757611a97615223565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611b0d826117af565b9050600283516003811115611b2457611b24615223565b14611b45578251604051633b0d540d60e21b81526104cf91906004016157cd565b60208301516001600160a01b03163314611be8575f828152600485016020526040902054336001600160a01b0390911603611be2575f82815260048501602052604090205460a0820151611ba991600160b01b90046001600160401b031690615897565b6001600160401b0316421015611bdd5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104cf565b611be8565b336110a1565b600281516005811115611bfd57611bfd615223565b03611cda578615611c1457611c12828761224d565b505b5f8881526005850160205260409020805460ff1916600317905560608301516080820151611c4d918491611c4891906158b7565b6135a5565b505f898152600586016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611c8e846136fc565b5f8a81526006870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a315159450611d3f9350505050565b600481516005811115611cef57611cef615223565b03611d2357611cfd836136fc565b5f898152600686016020526040902055611d1688612cba565b6001945050505050611d3f565b805160405163170cc93360e21b81526104cf919060040161540d565b9392505050565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611df9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e2091908101906158e2565b9150915080611e4257604051636b2f19e960e01b815260040160405180910390fd5b815115611e68578151604051636ba589a560e01b815260048101919091526024016104cf565b60208201516001600160a01b031615611ea4576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104cf565b5092915050565b5f8151602614611ee057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016104cf565b5f805b6002811015611f2f57611ef78160016159b4565b611f029060086157e7565b61ffff16848281518110611f1857611f186154a4565b016020015160f81c901b9190911790600101611ee3565b5061ffff811615611f595760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b6004811015611fb457611f708160036159b4565b611f7b9060086157e7565b63ffffffff1685611f8d836002615779565b81518110611f9d57611f9d6154a4565b016020015160f81c901b9190911790600101611f5c565b5063ffffffff811615611fda57604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561202f57611ff181601f6159b4565b611ffc9060086157e7565b86612008836006615779565b81518110612018576120186154a4565b016020015160f81c901b9190911790600101611fdd565b50949350505050565b60605f8083356020850135601461205487870160408901615444565b612061606089018961545f565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b6120e7606085018561545f565b9050811015611ea457816120fe606086018661545f565b8381811061210e5761210e6154a4565b905060200281019061212091906154b8565b61212a90806159c7565b9050612139606087018761545f565b84818110612149576121496154a4565b905060200281019061215b91906154b8565b61216590806159c7565b612172606089018961545f565b86818110612182576121826154a4565b905060200281019061219491906154b8565b6121a29060208101906159c7565b6121af60608b018b61545f565b888181106121bf576121bf6154a4565b90506020028101906121d191906154b8565b6121e29060608101906040016151ea565b6040516020016121f89796959493929190615a09565b60408051601f1981840301815291905291506001016120da565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612298573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122bf91908101906158e2565b91509150806122e157604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612324573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612348919061542d565b82511461236e578151604051636ba589a560e01b815260048101919091526024016104cf565b60208201516001600160a01b0316156123aa576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104cf565b5f806123b984604001516138a8565b915091508187146123e05760405163089938b360e11b8152600481018890526024016104cf565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020600101545f80516020615db2833981519152906001600160401b03908116908316111561249d575f888152600482016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26124bc565b5f8881526004820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f80516020615db2833981519152816124e086613a99565b90506124eb86612212565b6124fa57600192505050611d3f565b5f8681526004830160205260409020546001600160a01b0316331461251f57336110a1565b5f86815260048301602052604090205460a082015161254e91600160b01b90046001600160401b031690615897565b6001600160401b03168160c001516001600160401b031610156125955760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104cf565b5f85156125ad576125a6878661224d565b90506125cb565b505f8681526004830160205260409020600101546001600160401b03165b600383015460408301515f916001600160a01b03169063778c06b5906125f090610fd9565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b0391821660248401819052604484015281166064830152851660848201525f60a4820181905260c482015260e401602060405180830381865afa158015612666573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268a919061542d565b905080846007015f8a81526020019081526020015f205f8282546126ae9190615779565b90915550501515979650505050505050565b5f80516020615df28339815191528054600119016126f157604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612700614fe2565b5f80516020615dd28339815191525f8061271c61131c87611d95565b91509150801561274357604051632d07135360e01b815281151560048201526024016104cf565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561277457612774615223565b600581111561278557612785615223565b8152602001600182018054612799906153d5565b80601f01602080910402602001604051908101604052809291908181526020018280546127c5906153d5565b80156128105780601f106127e757610100808354040283529160200191612810565b820191905f5260205f20905b8154815290600101906020018083116127f357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561287b5761287b615223565b1415801561289c575060018151600581111561289957612899615223565b14155b156128bd57805160405163170cc93360e21b81526104cf919060040161540d565b6003815160058111156128d2576128d2615223565b036128e057600481526128e5565b600581525b8360080181602001516040516128fb9190615655565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561293f5761293f615223565b02179055506020820151600182019061295890826156aa565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156129fe576129fe615223565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f5f80516020615d9283398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612a90575f80fd5b505af1158015612aa2573d5f803e3d5ffd5b50505050505050565b5f80516020615d92833981519152546112d0906001600160a01b03168383613d7d565b60015f80516020615df283398151915255565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615db283398151915290600160401b900461ffff9081169086161080612b35575061271061ffff8616115b15612b5957604051635f12e6c360e11b815261ffff861660048201526024016104cf565b60028101546001600160401b039081169085161015612b95576040516202a06d60e11b81526001600160401b03851660048201526024016104cf565b8054831080612ba75750806001015483115b15612bc85760405163222d164360e21b8152600481018490526024016104cf565b5f612bd284613ddc565b90505f612bde82610c56565b90505f612beb8983613dff565b90506040518060800160405280612bff3390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526004909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b03199094169516949094179190911798909816178155910151600190910180549190951667ffffffffffffffff19909116179093555090915050949350505050565b5f8181525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db283398151915293929190829060ff166003811115612d0757612d07615223565b6003811115612d1857612d18615223565b8152815461010090046001600160a01b03166020808301919091526001808401546040808501919091526002948501546001600160401b038082166060870152600160401b820481166080870152600160801b8204811660a0870152600160c01b9091041660c090940193909352848301515f89815260058901845284812080546001600160a81b03191681559283018190559190940181905560068701909152908120805490829055929350909190808215612e46575f84815260048701602052604090205461271090612df890600160a01b900461ffff16856157e7565b612e0291906157ae565b915081866007015f8681526020019081526020015f205f828254612e269190615779565b90915550612e36905082846159b4565b9050612e46856020015182612a35565b612e5b8560200151610d168760600151610fd9565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612ed857835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016104cf565b5f805b6002811015612f2757612eef8160016159b4565b612efa9060086157e7565b61ffff16868281518110612f1057612f106154a4565b016020015160f81c901b9190911790600101612edb565b5061ffff811615612f515760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b6004811015612fac57612f688160036159b4565b612f739060086157e7565b63ffffffff1687612f85836002615779565b81518110612f9557612f956154a4565b016020015160f81c901b9190911790600101612f54565b5063ffffffff8116600314612fd457604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561302957612feb81601f6159b4565b612ff69060086157e7565b88613002836006615779565b81518110613012576130126154a4565b016020015160f81c901b9190911790600101612fd7565b505f805b6008811015613088576130418160076159b4565b61304c9060086157e7565b6001600160401b031689613061836026615779565b81518110613071576130716154a4565b016020015160f81c901b919091179060010161302d565b505f805b60088110156130e7576130a08160076159b4565b6130ab9060086157e7565b6001600160401b03168a6130c083602e615779565b815181106130d0576130d06154a4565b016020015160f81c901b919091179060010161308c565b5091989097509095509350505050565b5f5f80516020615db28339815191528161311361028485613ddc565b90505f61311f876117af565b905061312a87612212565b61314a576040516330efa98b60e01b8152600481018890526024016104cf565b60028151600581111561315f5761315f615223565b1461318057805160405163170cc93360e21b81526104cf919060040161540d565b5f8282608001516131919190615897565b905083600201600a9054906101000a90046001600160401b031682604001516131ba9190615a72565b6001600160401b0316816001600160401b031611156131f757604051636d51fe0560e11b81526001600160401b03821660048201526024016104cf565b5f806132038a846135a5565b915091505f8a8360405160200161323192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260058b01909152902081518154829060ff191660018360038111156132c4576132c4615223565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f80825160271461340557825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044016104cf565b5f805b60028110156134545761341c8160016159b4565b6134279060086157e7565b61ffff1685828151811061343d5761343d6154a4565b016020015160f81c901b9190911790600101613408565b5061ffff81161561347e5760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b60048110156134d9576134958160036159b4565b6134a09060086157e7565b63ffffffff16866134b2836002615779565b815181106134c2576134c26154a4565b016020015160f81c901b9190911790600101613481565b5063ffffffff811660021461350157604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156135565761351881601f6159b4565b6135239060086157e7565b8761352f836006615779565b8151811061353f5761353f6154a4565b016020015160f81c901b9190911790600101613504565b505f8660268151811061356b5761356b6154a4565b016020015191976001600160f81b03199092161515965090945050505050565b613593614377565b61359c826143c2565b6112d081614430565b5f8281525f80516020615e12833981519152602052604081206002015481905f80516020615dd283398151915290600160801b90046001600160401b03166135ed8582614498565b5f6135f787614672565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6136478a858b611d46565b6040518263ffffffff1660e01b8152600401613663919061541b565b6020604051808303815f875af115801561367f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136a3919061542d565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f80516020615db283398151915290505f61371c84604001516117af565b90505f60038251600581111561373457613734615223565b1480613752575060048251600581111561375057613750615223565b145b15613762575060c081015161379f565b60028251600581111561377757613777615223565b0361378357504261379f565b815160405163170cc93360e21b81526104cf919060040161540d565b84608001516001600160401b0316816001600160401b0316116137c657505f949350505050565b600383015460608601516001600160a01b039091169063778c06b5906137eb90610fd9565b60a085015160808901516040808b01515f90815260048a810160205282822060010154925160e088901b6001600160e01b0319168152908101959095526001600160401b0393841660248601529183166044850152828716606485015291909116608483015260a4820181905260c482015260e401602060405180830381865afa15801561387b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061389f919061542d565b95945050505050565b5f808251602e146138de57825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016104cf565b5f805b600281101561392d576138f58160016159b4565b6139009060086157e7565b61ffff16858281518110613916576139166154a4565b016020015160f81c901b91909117906001016138e1565b5061ffff8116156139575760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b60048110156139b25761396e8160036159b4565b6139799060086157e7565b63ffffffff168661398b836002615779565b8151811061399b5761399b6154a4565b016020015160f81c901b919091179060010161395a565b5063ffffffff8116156139d857604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613a2d576139ef81601f6159b4565b6139fa9060086157e7565b87613a06836006615779565b81518110613a1657613a166154a4565b016020015160f81c901b91909117906001016139db565b505f805b6008811015613a8c57613a458160076159b4565b613a509060086157e7565b6001600160401b031688613a65836026615779565b81518110613a7557613a756154a4565b016020015160f81c901b9190911790600101613a31565b5090969095509350505050565b613aa1614fe2565b5f8281525f80516020615e128339815191526020526040808220815160e0810190925280545f80516020615dd283398151915293929190829060ff166005811115613aee57613aee615223565b6005811115613aff57613aff615223565b8152602001600182018054613b13906153d5565b80601f0160208091040260200160405190810160405280929190818152602001828054613b3f906153d5565b8015613b8a5780601f10613b6157610100808354040283529160200191613b8a565b820191905f5260205f20905b815481529060010190602001808311613b6d57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613bf857613bf8615223565b14613c2b575f8481526007830160205260409081902054905163170cc93360e21b81526104cf9160ff169060040161540d565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613c6f57613c6f615223565b021790555060208201516001820190613c8890826156aa565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613d2685826135a5565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104d891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146e7565b5f610c66825f80516020615d92833981519152546001600160a01b031690614748565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e4357604051637fab81e560e01b815260040160405180910390fd5b5f80516020615dd283398151915242613e6260608601604087016151ea565b6001600160401b0316111580613e9c5750613e806202a30042615779565b613e9060608601604087016151ea565b6001600160401b031610155b15613ed657613eb160608501604086016151ea565b604051635879da1360e11b81526001600160401b0390911660048201526024016104cf565b613eeb613ee66060860186615a9d565b6148a1565b613efb613ee66080860186615a9d565b6030613f0a60208601866159c7565b905014613f3c57613f1e60208501856159c7565b6040516326475b2f60e11b81526104cf925060040190815260200190565b613f4684806159c7565b90505f03613f7357613f5884806159c7565b604051633e08a12560e11b81526004016104cf929190615ab1565b5f60088201613f8286806159c7565b604051613f90929190615888565b90815260200160405180910390205414613fc957613fae84806159c7565b60405163a41f772f60e01b81526004016104cf929190615ab1565b613fd3835f614498565b6040805160e08101909152815481525f9081906140df9060208101613ff889806159c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614040908a018a6159c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161408960608a0160408b016151ea565b6001600160401b031681526020016140a460608a018a615a9d565b6140ad90615adf565b81526020016140bf60808a018a615a9d565b6140c890615adf565b8152602001876001600160401b0316815250614a0a565b5f828152600686016020526040902091935091506140fd82826156aa565b50816008840161410d88806159c7565b60405161411b929190615888565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061415790859060040161541b565b6020604051808303815f875af1158015614173573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614197919061542d565b6040805160e0810190915290915080600181526020016141b789806159c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff1916600183600581111561424657614246615223565b02179055506020820151600182019061425f90826156aa565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055806142fd88806159c7565b60405161430b929190615888565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061434991906151ea565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166143c057604051631afcd79f60e31b815260040160405180910390fd5b565b6143ca614377565b6143d381614bf7565b6143db614c10565b610d36606082013560808301356143f860c0850160a086016151ea565b61440860e0860160c08701615ba6565b614419610100870160e08801615bbf565b61442b61012088016101008901615444565b614c20565b614438614377565b5f80516020615d928339815191526001600160a01b03821661447857604051637330680360e01b81526001600160a01b03831660048201526024016104cf565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615dd28339815191525f6001600160401b0380841690851611156144cc576144c583856158b7565b90506144d9565b6144d684846158b7565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061453b575060018401548151614537916001600160401b031690615779565b8210155b15614561576001600160401b038316606082015281815260408101516020820152614580565b82816060018181516145739190615897565b6001600160401b03169052505b6060810151614590906064615a72565b602082015160018601546001600160401b0392909216916145bb9190600160401b900460ff166157e7565b10156145eb57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104cf565b856001600160401b0316816040018181516146069190615779565b9052506040810180516001600160401b03871691906146269083906159b4565b905250805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615e128339815191526020526040812060020180545f80516020615dd283398151915291906008906146bc90600160401b90046001600160401b0316615bdf565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6146fb6001600160a01b03841683614d4f565b905080515f1415801561471f57508080602001905181019061471d9190615bfa565b155b156104d857604051635274afe760e01b81526001600160a01b03841660048201526024016104cf565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561478e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147b2919061542d565b90506147c96001600160a01b038516333086614d5c565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa15801561480d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614831919061542d565b90508181116148975760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104cf565b61389f82826159b4565b6148ae602082018261511d565b63ffffffff161580156148ce57506148c9602082018261545f565b151590505b15614915576148e0602082018261511d565b6148ed602083018361545f565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104cf565b614922602082018261545f565b9050614931602083018361511d565b63ffffffff16111561494a576148e0602082018261511d565b60015b61495a602083018361545f565b90508110156112d057614970602083018361545f565b61497b6001846159b4565b81811061498a5761498a6154a4565b905060200201602081019061499f9190615444565b6001600160a01b03166149b5602084018461545f565b838181106149c5576149c56154a4565b90506020020160208101906149da9190615444565b6001600160a01b03161015614a0257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161494d565b5f6060826040015151603014614a335760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614a74988a986001989297929690959094909390929101615c15565b60405160208183030381529060405290505f5b84608001516020015151811015614ae657818560800151602001518281518110614ab357614ab36154a4565b6020026020010151604051602001614acc929190615ccf565b60408051601f198184030181529190529150600101614a87565b5060a0840151805160209182015151604051614b06938593929101615d05565b60405160208183030381529060405290505f5b8460a001516020015151811015614b7857818560a00151602001518281518110614b4557614b456154a4565b6020026020010151604051602001614b5e929190615ccf565b60408051601f198184030181529190529150600101614b19565b5060c0840151604051614b8f918391602001615d40565b6040516020818303038152906040529050600281604051614bb09190615655565b602060405180830381855afa158015614bcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614bee919061542d565b94909350915050565b614bff614377565b614c07614d95565b610d3681614d9d565b614c18614377565b6143c0614e85565b614c28614377565b5f80516020615db283398151915261ffff84161580614c4c575061271061ffff8516115b15614c7057604051635f12e6c360e11b815261ffff851660048201526024016104cf565b85871115614c945760405163222d164360e21b8152600481018890526024016104cf565b60ff83161580614ca75750600a60ff8416115b15614cca5760405163170db35960e31b815260ff841660048201526024016104cf565b95865560018601949094556002850180546001600160401b039490941669ffffffffffffffffffff1990941693909317600160401b61ffff93909316929092029190911767ffffffffffffffff60501b191660ff91909116600160501b02179055600390910180546001600160a01b0319166001600160a01b03909216919091179055565b6060611d3f83835f614e8d565b6040516001600160a01b0384811660248301528381166044830152606482018390526106e59186918216906323b872dd90608401613daa565b6143c0614377565b614da5614377565b80355f80516020615dd28339815191529081556014614dca6060840160408501615bbf565b60ff161180614de95750614de46060830160408401615bbf565b60ff16155b15614e1d57614dfe6060830160408401615bbf565b604051634a59bbff60e11b815260ff90911660048201526024016104cf565b614e2d6060830160408401615bbf565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614e5e60408301602084016151ea565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ace614377565b606081471015614eb25760405163cd78605960e01b81523060048201526024016104cf565b5f80856001600160a01b03168486604051614ecd9190615655565b5f6040518083038185875af1925050503d805f8114614f07576040519150601f19603f3d011682016040523d82523d5f602084013e614f0c565b606091505b5091509150614f1c868383614f26565b9695505050505050565b606082614f3b57614f3682614f82565b611d3f565b8151158015614f5257506001600160a01b0384163b155b15614f7b57604051639996b31560e01b81526001600160a01b03851660048201526024016104cf565b5080611d3f565b805115614f925780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614fb7906153d5565b5f825580601f10614fc6575050565b601f0160209004905f5260205f2090810190610d36919061501f565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115615033575f8155600101615020565b5090565b8015158114610d36575f80fd5b803563ffffffff81168114615057575f80fd5b919050565b5f805f6060848603121561506e575f80fd5b83359250602084013561508081615037565b915061508e60408501615044565b90509250925092565b5f602082840312156150a7575f80fd5b5035919050565b5f80604083850312156150bf575f80fd5b82356001600160401b038111156150d4575f80fd5b8301608081860312156150e5575f80fd5b91506150f360208401615044565b90509250929050565b5f806040838503121561510d575f80fd5b823591506150f360208401615044565b5f6020828403121561512d575f80fd5b611d3f82615044565b803561ffff81168114615057575f80fd5b80356001600160401b0381168114615057575f80fd5b5f805f8060808587031215615170575f80fd5b84356001600160401b03811115615185575f80fd5b850160a08188031215615196575f80fd5b93506151a460208601615136565b92506151b260408601615147565b9396929550929360600135925050565b5f80604083850312156151d3575f80fd5b6151dc83615044565b946020939093013593505050565b5f602082840312156151fa575f80fd5b611d3f82615147565b5f8060408385031215615214575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b6006811061524757615247615223565b9052565b5f5b8381101561526557818101518382015260200161524d565b50505f910152565b5f815180845261528481602086016020860161524b565b601f01601f19169290920160200192915050565b602081526152aa602082018351615237565b5f602083015160e060408401526152c561010084018261526d565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610d36575f80fd5b5f8082840361014081121561533f575f80fd5b6101208082121561534e575f80fd5b849350830135905061535f81615318565b809150509250929050565b5f806020838503121561537b575f80fd5b82356001600160401b0380821115615391575f80fd5b818501915085601f8301126153a4575f80fd5b8135818111156153b2575f80fd5b8660208285010111156153c3575f80fd5b60209290920196919550909350505050565b600181811c908216806153e957607f821691505b60208210810361540757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610c668284615237565b602081525f611d3f602083018461526d565b5f6020828403121561543d575f80fd5b5051919050565b5f60208284031215615454575f80fd5b8135611d3f81615318565b5f808335601e19843603018112615474575f80fd5b8301803591506001600160401b0382111561548d575f80fd5b6020019150600581901b36038213156136f5575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126154cc575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561550c5761550c6154d6565b60405290565b604080519081016001600160401b038111828210171561550c5761550c6154d6565b604051601f8201601f191681016001600160401b038111828210171561555c5761555c6154d6565b604052919050565b5f6001600160401b0382111561557c5761557c6154d6565b50601f01601f191660200190565b5f82601f830112615599575f80fd5b81356155ac6155a782615564565b615534565b8181528460208386010111156155c0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156155ec575f80fd5b6155f46154ea565b82356001600160401b038082111561560a575f80fd5b6156163683870161558a565b8352602085013591508082111561562b575f80fd5b506156383682860161558a565b60208301525061564a60408401615147565b604082015292915050565b5f82516154cc81846020870161524b565b601f8211156104d857805f5260205f20601f840160051c8101602085101561568b5750805b601f840160051c820191505b8181101561166b575f8155600101615697565b81516001600160401b038111156156c3576156c36154d6565b6156d7816156d184546153d5565b84615666565b602080601f83116001811461570a575f84156156f35750858301515b5f19600386901b1c1916600185901b178555610e9d565b5f85815260208120601f198616915b8281101561573857888601518255948401946001909101908401615719565b508582101561575557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610c6657610c66615765565b5f63ffffffff8083168181036157a4576157a4615765565b6001019392505050565b5f826157c857634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157e1576157e1615223565b91905290565b8082028115828204841417610c6657610c66615765565b5f60208083525f8454615810816153d5565b806020870152604060018084165f8114615831576001811461584d5761587a565b60ff19851660408a0152604084151560051b8a0101955061587a565b895f5260205f205f5b858110156158715781548b8201860152908301908801615856565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115611ea457611ea4615765565b6001600160401b03828116828216039080821115611ea457611ea4615765565b805161505781615037565b5f80604083850312156158f3575f80fd5b82516001600160401b0380821115615909575f80fd5b908401906060828703121561591c575f80fd5b6159246154ea565b8251815260208084015161593781615318565b8282015260408401518381111561594c575f80fd5b80850194505087601f850112615960575f80fd5b835192506159706155a784615564565b8381528882858701011115615983575f80fd5b6159928483830184880161524b565b806040840152508195506159a78188016158d7565b9450505050509250929050565b81810381811115610c6657610c66615765565b5f808335601e198436030181126159dc575f80fd5b8301803591506001600160401b038211156159f5575f80fd5b6020019150368190038213156136f5575f80fd5b5f8851615a1a818460208d0161524b565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b6001600160401b03818116838216028082169190828114615a9557615a95615765565b505092915050565b5f8235603e198336030181126154cc575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215615aef575f80fd5b615af7615512565b615b0083615044565b81526020808401356001600160401b0380821115615b1c575f80fd5b9085019036601f830112615b2e575f80fd5b813581811115615b4057615b406154d6565b8060051b9150615b51848301615534565b8181529183018401918481019036841115615b6a575f80fd5b938501935b83851015615b945784359250615b8483615318565b8282529385019390850190615b6f565b94860194909452509295945050505050565b5f60208284031215615bb6575f80fd5b611d3f82615136565b5f60208284031215615bcf575f80fd5b813560ff81168114611d3f575f80fd5b5f6001600160401b038083168181036157a4576157a4615765565b5f60208284031215615c0a575f80fd5b8151611d3f81615037565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651615c5b81602a850160208b0161524b565b865190830190615c7281602a840160208b0161524b565b60c087901b6001600160c01b031916602a9290910191820152615ca4603282018660e01b6001600160e01b0319169052565b615cbd603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615ce081846020880161524b565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f8451615d1681846020890161524b565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615d5181846020880161524b565b60c09390931b6001600160c01b031916919092019081526008019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d056e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", + 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\":\"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\":\"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\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"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\"}]}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161601238038061601283398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615ec58061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c806376f7862111610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff614610444578063df93d8de14610464578063e4a63c401461046e578063f09969ae14610482578063fd7ac5e714610495575f80fd5b8063ba3a4b9714610402578063bc5fbfec14610415578063bee0a03f14610429578063c974d1b61461043c575f80fd5b80639e1bc4ef116100e45780639e1bc4ef146103a2578063a3a65e48146103b5578063afb98096146103c8578063b771b3bc146103dc575f80fd5b806376f78621146103615780638280a25a1461037457806393e245981461037c57806398f3e2b41461038f575f80fd5b80633a1cfff61161018a57806360305d621161015a57806360305d6214610317578063620658561461033457806366435abf14610347578063732214f81461035a575f80fd5b80633a1cfff6146102bd578063467ef06f146102d05780634bee0040146102e35780635297fae614610304575f80fd5b806320d91b7a116101c557806320d91b7a1461025057806325e1c776146102635780632e2194d81461027657806335455ded146102a1575f80fd5b80630118acc4146101f65780630322ed981461020b578063151d30d11461021e5780631ec447241461023d575b5f80fd5b6102096102043660046150e3565b6104a8565b005b61020961021936600461511e565b6104dd565b610226600a81565b60405160ff90911681526020015b60405180910390f35b61020961024b3660046150e3565b6106eb565b61020961025e366004615135565b6106f6565b610209610271366004615183565b610c20565b61028961028436600461511e565b610c94565b6040516001600160401b039091168152602001610234565b6102aa61271081565b60405161ffff9091168152602001610234565b6102096102cb3660046150e3565b610caa565b6102096102de3660046151a4565b610cb5565b6102f66102f13660046151e4565b610d77565b604051908152602001610234565b610209610312366004615249565b610dac565b61031f601481565b60405163ffffffff9091168152602001610234565b6102f6610342366004615271565b611017565b61028961035536600461511e565b611030565b6102f65f81565b61020961036f3660046150e3565b611044565b610226603081565b61020961038a36600461511e565b61106f565b61020961039d366004615249565b61113a565b6102f66103b036600461528a565b611312565b6102096103c33660046151a4565b61133e565b6102f65f80516020615e3983398151915281565b6103ea6005600160991b0181565b6040516001600160a01b039091168152602001610234565b61020961041036600461511e565b6114c7565b6102f65f80516020615e5983398151915281565b61020961043736600461511e565b6116b0565b610226601481565b61045761045236600461511e565b6117ed565b604051610234919061531f565b6102896202a30081565b6102f65f80516020615e1983398151915281565b6102096104903660046153b3565b61193c565b6102f66104a33660046153f1565b611a1b565b6104b3838383611a76565b6104d857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f80516020615e998339815191526020526040808220815160e0810190925280545f80516020615e5983398151915293929190829060ff16600581111561052a5761052a6152aa565b600581111561053b5761053b6152aa565b815260200160018201805461054f9061545c565b80601f016020809104026020016040519081016040528092919081815260200182805461057b9061545c565b80156105c65780601f1061059d576101008083540402835291602001916105c6565b820191905f5260205f20905b8154815290600101906020018083116105a957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115610631576106316152aa565b14610664575f8381526007830160205260409081902054905163170cc93360e21b81526104cf9160ff1690600401615494565b6005600160991b016001600160a01b031663ee5b48eb6106898584606001515f611d84565b6040518263ffffffff1660e01b81526004016106a591906154a2565b6020604051808303815f875af11580156106c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e591906154b4565b50505050565b6106e5838383611a76565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615e598339815191529060ff161561074857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107af91906154b4565b8360200135146107d8576040516372b0a7e760e11b8152602084013560048201526024016104cf565b306107e960608501604086016154cb565b6001600160a01b03161461082c5761080760608401604085016154cb565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104cf565b5f61083a60608501856154e6565b905090505f805b828163ffffffff161015610b22575f61085d60608801886154e6565b8363ffffffff168181106108735761087361552b565b9050602002810190610885919061553f565b61088e90615663565b80516040519192505f9160088801916108a6916156dc565b908152602001604051809103902054146108d657805160405163a41f772f60e01b81526104cf91906004016154a2565b5f6002885f01358460405160200161090592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261091f916156dc565b602060405180830381855afa15801561093a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061095d91906154b4565b90508086600801835f015160405161097591906156dc565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff191660018360058111156109f7576109f76152aa565b021790555060208201516001820190610a109082615731565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff191692841692909217909155830151610ab5911685615800565b8251604051919550610ac6916156dc565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b1b90615813565b9050610841565b50600483018190556001830154606490610b4690600160401b900460ff1683615835565b1015610b6857604051635943317f60e01b8152600481018290526024016104cf565b5f610b7e610b7586611dd3565b60400151611ee9565b90505f610b8a87612076565b90505f600282604051610b9d91906156dc565b602060405180830381855afa158015610bb8573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610bdb91906154b4565b9050828114610c0757604051631872fc8d60e01b815260048101829052602481018490526044016104cf565b5050506009909201805460ff1916600117905550505050565b610c2982612250565b610c49576040516330efa98b60e01b8152600481018390526024016104cf565b5f610c53836117ed565b5190506002816005811115610c6a57610c6a6152aa565b14610c8a578060405163170cc93360e21b81526004016104cf9190615494565b6106e5838361228b565b5f610ca464e8d4a510008361584c565b92915050565b6106e5838383612505565b610cbd6126fe565b5f80516020615e398339815191525f80610cd684612735565b91509150610ce382612250565b610cef57505050610d5e565b5f82815260048085016020526040909120546001600160a01b03169082516005811115610d1e57610d1e6152aa565b03610d43575f83815260078501602052604081208054919055610d418282612a73565b505b610d5981610d548460400151611017565b612ae9565b505050505b610d7460015f80516020615e7983398151915255565b50565b5f610d806126fe565b610d8c85858585612b1f565b9050610da460015f80516020615e7983398151915255565b949350505050565b5f8181525f80516020615df98339815191526020526040808220815160e0810190925280545f80516020615e3983398151915293929190829060ff166003811115610df957610df96152aa565b6003811115610e0a57610e0a6152aa565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610e80826117ed565b9050600183516003811115610e9757610e976152aa565b14610eb8578251604051633b0d540d60e21b81526104cf919060040161586b565b600481516005811115610ecd57610ecd6152aa565b03610ee357610edb85612cf8565b505050505050565b5f80610efa610ef189611dd3565b60400151612edf565b5091509150818414610f2757846040015160405163089938b360e11b81526004016104cf91815260200190565b806001600160401b031683606001516001600160401b03161080610f605750806001600160401b03168560a001516001600160401b0316115b15610f8957604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cf565b5f878152600587016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f610ca46001600160401b03831664e8d4a51000615835565b5f61103a826117ed565b6080015192915050565b61104f838383612505565b6104d857604051635bff683f60e11b8152600481018490526024016104cf565b5f80516020615e398339815191525f611087836117ed565b519050600481600581111561109e5761109e6152aa565b146110be578060405163170cc93360e21b81526004016104cf9190615494565b5f8381526004830160205260409020546001600160a01b0316331461110457335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104cf565b5f838152600783016020908152604080832080549084905560048601909252909120546106e5906001600160a01b031682612a73565b6111426126fe565b5f8181525f80516020615df98339815191526020526040808220815160e0810190925280545f80516020615e3983398151915293929190829060ff16600381111561118f5761118f6152aa565b60038111156111a0576111a06152aa565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529050600381516003811115611219576112196152aa565b1461123a578051604051633b0d540d60e21b81526104cf919060040161586b565b600461124982604001516117ed565b51600581111561125b5761125b6152aa565b146112ed575f61126a85611dd3565b90505f8061127b8360400151612edf565b5091509150818460400151146112a75760405163089938b360e11b8152600481018390526024016104cf565b806001600160401b03168460c001516001600160401b031611156112e957604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cf565b5050505b6112f683612cf8565b505061130e60015f80516020615e7983398151915255565b5050565b5f61131b6126fe565b611326833384613135565b9050610ca460015f80516020615e7983398151915255565b5f80516020615e598339815191525f8061136361135a85611dd3565b6040015161340d565b915091508061138957604051632d07135360e01b815281151560048201526024016104cf565b5f828152600684016020526040902080546113a39061545c565b90505f036113c75760405163089938b360e11b8152600481018390526024016104cf565b60015f83815260078501602052604090205460ff1660058111156113ed576113ed6152aa565b14611420575f8281526007840160205260409081902054905163170cc93360e21b81526104cf9160ff1690600401615494565b5f828152600684016020526040812061143891615032565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181525f80516020615df98339815191526020526040808220815160e0810190925280545f80516020615e3983398151915293929190829060ff166003811115611514576115146152aa565b6003811115611525576115256152aa565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561159e5761159e6152aa565b141580156115bf57506003815160038111156115bc576115bc6152aa565b14155b156115e0578051604051633b0d540d60e21b81526104cf919060040161586b565b5f6115ee82604001516117ed565b905080606001516001600160401b03165f03611620576040516339b894f960e21b8152600481018590526024016104cf565b6005600160991b016001600160a01b031663ee5b48eb61164d846040015184606001518560800151611d84565b6040518263ffffffff1660e01b815260040161166991906154a2565b6020604051808303815f875af1158015611685573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a991906154b4565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615e5983398151915291906116f79061545c565b90505f0361171b5760405163089938b360e11b8152600481018390526024016104cf565b60015f83815260078301602052604090205460ff166005811115611741576117416152aa565b14611774575f8281526007820160205260409081902054905163170cc93360e21b81526104cf9160ff1690600401615494565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916117ad9190600401615885565b6020604051808303815f875af11580156117c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d891906154b4565b6117f5615069565b5f8281525f80516020615e99833981519152602052604090819020815160e0810190925280545f80516020615e59833981519152929190829060ff166005811115611842576118426152aa565b6005811115611853576118536152aa565b81526020016001820180546118679061545c565b80601f01602080910402602001604051908101604052809291908181526020018280546118939061545c565b80156118de5780601f106118b5576101008083540402835291602001916118de565b820191905f5260205f20905b8154815290600101906020018083116118c157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611985575080546001600160401b03808416911610155b156119a35760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556119ce84846135c9565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f80516020615e59833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611a5e908690869061590f565b90815260200160405180910390205491505092915050565b5f8381525f80516020615df98339815191526020526040808220815160e0810190925280545f80516020615e398339815191529284929091829060ff166003811115611ac457611ac46152aa565b6003811115611ad557611ad56152aa565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611b4b826117ed565b9050600283516003811115611b6257611b626152aa565b14611b83578251604051633b0d540d60e21b81526104cf919060040161586b565b60208301516001600160a01b03163314611c26575f828152600485016020526040902054336001600160a01b0390911603611c20575f82815260048501602052604090205460a0820151611be791600160b01b90046001600160401b03169061591e565b6001600160401b0316421015611c1b5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104cf565b611c26565b336110df565b600281516005811115611c3b57611c3b6152aa565b03611d18578615611c5257611c50828761228b565b505b5f8881526005850160205260409020805460ff1916600317905560608301516080820151611c8b918491611c86919061593e565b6135e3565b505f898152600586016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611ccc8461373a565b5f8a81526006870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a315159450611d7d9350505050565b600481516005811115611d2d57611d2d6152aa565b03611d6157611d3b8361373a565b5f898152600686016020526040902055611d5488612cf8565b6001945050505050611d7d565b805160405163170cc93360e21b81526104cf9190600401615494565b9392505050565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611e37573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e5e9190810190615969565b9150915080611e8057604051636b2f19e960e01b815260040160405180910390fd5b815115611ea6578151604051636ba589a560e01b815260048101919091526024016104cf565b60208201516001600160a01b031615611ee2576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104cf565b5092915050565b5f8151602614611f1e57815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016104cf565b5f805b6002811015611f6d57611f35816001615a3b565b611f40906008615835565b61ffff16848281518110611f5657611f5661552b565b016020015160f81c901b9190911790600101611f21565b5061ffff811615611f975760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b6004811015611ff257611fae816003615a3b565b611fb9906008615835565b63ffffffff1685611fcb836002615800565b81518110611fdb57611fdb61552b565b016020015160f81c901b9190911790600101611f9a565b5063ffffffff81161561201857604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561206d5761202f81601f615a3b565b61203a906008615835565b86612046836006615800565b815181106120565761205661552b565b016020015160f81c901b919091179060010161201b565b50949350505050565b60605f80833560208501356014612092878701604089016154cb565b61209f60608901896154e6565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b61212560608501856154e6565b9050811015611ee2578161213c60608601866154e6565b8381811061214c5761214c61552b565b905060200281019061215e919061553f565b6121689080615a4e565b905061217760608701876154e6565b848181106121875761218761552b565b9050602002810190612199919061553f565b6121a39080615a4e565b6121b060608901896154e6565b868181106121c0576121c061552b565b90506020028101906121d2919061553f565b6121e0906020810190615a4e565b6121ed60608b018b6154e6565b888181106121fd576121fd61552b565b905060200281019061220f919061553f565b612220906060810190604001615271565b6040516020016122369796959493929190615a90565b60408051601f198184030181529190529150600101612118565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156122d6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122fd9190810190615969565b915091508061231f57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612362573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238691906154b4565b8251146123ac578151604051636ba589a560e01b815260048101919091526024016104cf565b60208201516001600160a01b0316156123e8576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104cf565b5f806123f784604001516138e6565b9150915081871461241e5760405163089938b360e11b8152600481018890526024016104cf565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020600101545f80516020615e39833981519152906001600160401b0390811690831611156124db575f888152600482016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26124fa565b5f8881526004820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f80516020615e398339815191528161251e86613ad7565b905061252986612250565b61253857600192505050611d7d565b5f8681526004830160205260409020546001600160a01b0316331461255d57336110df565b5f86815260048301602052604090205460a082015161258c91600160b01b90046001600160401b03169061591e565b6001600160401b03168160c001516001600160401b031610156125d35760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104cf565b5f85156125eb576125e4878661228b565b9050612609565b505f8681526004830160205260409020600101546001600160401b03165b600383015460408301515f916001600160a01b03169063778c06b59061262e90611017565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b0391821660248401819052604484015281166064830152851660848201525f60a4820181905260c482015260e401602060405180830381865afa1580156126a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c891906154b4565b905080846007015f8a81526020019081526020015f205f8282546126ec9190615800565b90915550501515979650505050505050565b5f80516020615e7983398151915280546001190161272f57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61273e615069565b5f80516020615e598339815191525f8061275a61135a87611dd3565b91509150801561278157604051632d07135360e01b815281151560048201526024016104cf565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156127b2576127b26152aa565b60058111156127c3576127c36152aa565b81526020016001820180546127d79061545c565b80601f01602080910402602001604051908101604052809291908181526020018280546128039061545c565b801561284e5780601f106128255761010080835404028352916020019161284e565b820191905f5260205f20905b81548152906001019060200180831161283157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156128b9576128b96152aa565b141580156128da57506001815160058111156128d7576128d76152aa565b14155b156128fb57805160405163170cc93360e21b81526104cf9190600401615494565b600381516005811115612910576129106152aa565b0361291e5760048152612923565b600581525b83600801816020015160405161293991906156dc565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561297d5761297d6152aa565b0217905550602082015160018201906129969082615731565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612a3c57612a3c6152aa565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f5f80516020615e1983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612ace575f80fd5b505af1158015612ae0573d5f803e3d5ffd5b50505050505050565b5f80516020615e198339815191525461130e906001600160a01b03168383613dbb565b60015f80516020615e7983398151915255565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615e3983398151915290600160401b900461ffff9081169086161080612b73575061271061ffff8616115b15612b9757604051635f12e6c360e11b815261ffff861660048201526024016104cf565b60028101546001600160401b039081169085161015612bd3576040516202a06d60e11b81526001600160401b03851660048201526024016104cf565b8054831080612be55750806001015483115b15612c065760405163222d164360e21b8152600481018490526024016104cf565b5f612c1084613e1a565b90505f612c1c82610c94565b90505f612c298983613e3d565b90506040518060800160405280612c3d3390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526004909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b03199094169516949094179190911798909816178155910151600190910180549190951667ffffffffffffffff19909116179093555090915050949350505050565b5f8181525f80516020615df98339815191526020526040808220815160e0810190925280545f80516020615e3983398151915293929190829060ff166003811115612d4557612d456152aa565b6003811115612d5657612d566152aa565b8152815461010090046001600160a01b03166020808301919091526001808401546040808501919091526002948501546001600160401b038082166060870152600160401b820481166080870152600160801b8204811660a0870152600160c01b9091041660c090940193909352848301515f89815260058901845284812080546001600160a81b03191681559283018190559190940181905560068701909152908120805490829055929350909190808215612e84575f84815260048701602052604090205461271090612e3690600160a01b900461ffff1685615835565b612e40919061584c565b915081866007015f8681526020019081526020015f205f828254612e649190615800565b90915550612e7490508284615a3b565b9050612e84856020015182612a73565b612e998560200151610d548760600151611017565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612f1657835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016104cf565b5f805b6002811015612f6557612f2d816001615a3b565b612f38906008615835565b61ffff16868281518110612f4e57612f4e61552b565b016020015160f81c901b9190911790600101612f19565b5061ffff811615612f8f5760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b6004811015612fea57612fa6816003615a3b565b612fb1906008615835565b63ffffffff1687612fc3836002615800565b81518110612fd357612fd361552b565b016020015160f81c901b9190911790600101612f92565b5063ffffffff811660031461301257604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156130675761302981601f615a3b565b613034906008615835565b88613040836006615800565b815181106130505761305061552b565b016020015160f81c901b9190911790600101613015565b505f805b60088110156130c65761307f816007615a3b565b61308a906008615835565b6001600160401b03168961309f836026615800565b815181106130af576130af61552b565b016020015160f81c901b919091179060010161306b565b505f805b6008811015613125576130de816007615a3b565b6130e9906008615835565b6001600160401b03168a6130fe83602e615800565b8151811061310e5761310e61552b565b016020015160f81c901b91909117906001016130ca565b5091989097509095509350505050565b5f5f80516020615e398339815191528161315161028485613e1a565b90505f61315d876117ed565b905061316887612250565b613188576040516330efa98b60e01b8152600481018890526024016104cf565b60028151600581111561319d5761319d6152aa565b146131be57805160405163170cc93360e21b81526104cf9190600401615494565b5f8282608001516131cf919061591e565b905083600201600a9054906101000a90046001600160401b031682604001516131f89190615af9565b6001600160401b0316816001600160401b0316111561323557604051636d51fe0560e11b81526001600160401b03821660048201526024016104cf565b5f806132418a846135e3565b915091505f8a8360405160200161326f92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260058b01909152902081518154829060ff19166001836003811115613302576133026152aa565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f80825160271461344357825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044016104cf565b5f805b60028110156134925761345a816001615a3b565b613465906008615835565b61ffff1685828151811061347b5761347b61552b565b016020015160f81c901b9190911790600101613446565b5061ffff8116156134bc5760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b6004811015613517576134d3816003615a3b565b6134de906008615835565b63ffffffff16866134f0836002615800565b815181106135005761350061552b565b016020015160f81c901b91909117906001016134bf565b5063ffffffff811660021461353f57604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156135945761355681601f615a3b565b613561906008615835565b8761356d836006615800565b8151811061357d5761357d61552b565b016020015160f81c901b9190911790600101613542565b505f866026815181106135a9576135a961552b565b016020015191976001600160f81b03199092161515965090945050505050565b6135d16143b5565b6135da82614400565b61130e8161446e565b5f8281525f80516020615e99833981519152602052604081206002015481905f80516020615e5983398151915290600160801b90046001600160401b031661362b85826144d6565b5f613635876146f9565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6136858a858b611d84565b6040518263ffffffff1660e01b81526004016136a191906154a2565b6020604051808303815f875af11580156136bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136e191906154b4565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f80516020615e3983398151915290505f61375a84604001516117ed565b90505f600382516005811115613772576137726152aa565b1480613790575060048251600581111561378e5761378e6152aa565b145b156137a0575060c08101516137dd565b6002825160058111156137b5576137b56152aa565b036137c15750426137dd565b815160405163170cc93360e21b81526104cf9190600401615494565b84608001516001600160401b0316816001600160401b03161161380457505f949350505050565b600383015460608601516001600160a01b039091169063778c06b59061382990611017565b60a085015160808901516040808b01515f90815260048a810160205282822060010154925160e088901b6001600160e01b0319168152908101959095526001600160401b0393841660248601529183166044850152828716606485015291909116608483015260a4820181905260c482015260e401602060405180830381865afa1580156138b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138dd91906154b4565b95945050505050565b5f808251602e1461391c57825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016104cf565b5f805b600281101561396b57613933816001615a3b565b61393e906008615835565b61ffff168582815181106139545761395461552b565b016020015160f81c901b919091179060010161391f565b5061ffff8116156139955760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b60048110156139f0576139ac816003615a3b565b6139b7906008615835565b63ffffffff16866139c9836002615800565b815181106139d9576139d961552b565b016020015160f81c901b9190911790600101613998565b5063ffffffff811615613a1657604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613a6b57613a2d81601f615a3b565b613a38906008615835565b87613a44836006615800565b81518110613a5457613a5461552b565b016020015160f81c901b9190911790600101613a19565b505f805b6008811015613aca57613a83816007615a3b565b613a8e906008615835565b6001600160401b031688613aa3836026615800565b81518110613ab357613ab361552b565b016020015160f81c901b9190911790600101613a6f565b5090969095509350505050565b613adf615069565b5f8281525f80516020615e998339815191526020526040808220815160e0810190925280545f80516020615e5983398151915293929190829060ff166005811115613b2c57613b2c6152aa565b6005811115613b3d57613b3d6152aa565b8152602001600182018054613b519061545c565b80601f0160208091040260200160405190810160405280929190818152602001828054613b7d9061545c565b8015613bc85780601f10613b9f57610100808354040283529160200191613bc8565b820191905f5260205f20905b815481529060010190602001808311613bab57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613c3657613c366152aa565b14613c69575f8481526007830160205260409081902054905163170cc93360e21b81526104cf9160ff1690600401615494565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613cad57613cad6152aa565b021790555060208201516001820190613cc69082615731565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613d6485826135e3565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104d891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061476e565b5f610ca4825f80516020615e19833981519152546001600160a01b0316906147cf565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e8157604051637fab81e560e01b815260040160405180910390fd5b5f80516020615e5983398151915242613ea06060860160408701615271565b6001600160401b0316111580613eda5750613ebe6202a30042615800565b613ece6060860160408701615271565b6001600160401b031610155b15613f1457613eef6060850160408601615271565b604051635879da1360e11b81526001600160401b0390911660048201526024016104cf565b613f29613f246060860186615b24565b614928565b613f39613f246080860186615b24565b6030613f486020860186615a4e565b905014613f7a57613f5c6020850185615a4e565b6040516326475b2f60e11b81526104cf925060040190815260200190565b613f848480615a4e565b90505f03613fb157613f968480615a4e565b604051633e08a12560e11b81526004016104cf929190615b38565b5f60088201613fc08680615a4e565b604051613fce92919061590f565b9081526020016040518091039020541461400757613fec8480615a4e565b60405163a41f772f60e01b81526004016104cf929190615b38565b614011835f6144d6565b6040805160e08101909152815481525f90819061411d90602081016140368980615a4e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061407e908a018a615a4e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c760608a0160408b01615271565b6001600160401b031681526020016140e260608a018a615b24565b6140eb90615b66565b81526020016140fd60808a018a615b24565b61410690615b66565b8152602001876001600160401b0316815250614a91565b5f8281526006860160205260409020919350915061413b8282615731565b50816008840161414b8880615a4e565b60405161415992919061590f565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141959085906004016154a2565b6020604051808303815f875af11580156141b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141d591906154b4565b6040805160e0810190915290915080600181526020016141f58980615a4e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff19166001836005811115614284576142846152aa565b02179055506020820151600182019061429d9082615731565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790558061433b8880615a4e565b60405161434992919061590f565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906143879190615271565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166143fe57604051631afcd79f60e31b815260040160405180910390fd5b565b6144086143b5565b61441181614c7e565b614419614c97565b610d746060820135608083013561443660c0850160a08601615271565b61444660e0860160c08701615c2d565b614457610100870160e08801615c46565b614469610120880161010089016154cb565b614ca7565b6144766143b5565b5f80516020615e198339815191526001600160a01b0382166144b657604051637330680360e01b81526001600160a01b03831660048201526024016104cf565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615e598339815191525f6001600160401b03808416908516111561450a57614503838561593e565b9050614517565b614514848461593e565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580614579575060018401548151614575916001600160401b031690615800565b8210155b1561459f576001600160401b0383166060820152818152604081015160208201526145be565b82816060018181516145b1919061591e565b6001600160401b03169052505b60608101516145ce906064615af9565b602082015160018601546001600160401b0392909216916145f99190600160401b900460ff16615835565b101561462957606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104cf565b856001600160401b0316816040018181516146449190615800565b9052506040810180516001600160401b0387169190614664908390615a3b565b9052506001840154604082015160649161468991600160401b90910460ff1690615835565b10156146b0578060400151604051635943317f60e01b81526004016104cf91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615e998339815191526020526040812060020180545f80516020615e59833981519152919060089061474390600160401b90046001600160401b0316615c66565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6147826001600160a01b03841683614dd6565b905080515f141580156147a65750808060200190518101906147a49190615c81565b155b156104d857604051635274afe760e01b81526001600160a01b03841660048201526024016104cf565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015614815573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061483991906154b4565b90506148506001600160a01b038516333086614de3565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa158015614894573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148b891906154b4565b905081811161491e5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104cf565b6138dd8282615a3b565b61493560208201826151a4565b63ffffffff16158015614955575061495060208201826154e6565b151590505b1561499c5761496760208201826151a4565b61497460208301836154e6565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104cf565b6149a960208201826154e6565b90506149b860208301836151a4565b63ffffffff1611156149d15761496760208201826151a4565b60015b6149e160208301836154e6565b905081101561130e576149f760208301836154e6565b614a02600184615a3b565b818110614a1157614a1161552b565b9050602002016020810190614a2691906154cb565b6001600160a01b0316614a3c60208401846154e6565b83818110614a4c57614a4c61552b565b9050602002016020810190614a6191906154cb565b6001600160a01b03161015614a8957604051630dbc8d5f60e31b815260040160405180910390fd5b6001016149d4565b5f6060826040015151603014614aba5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614afb988a986001989297929690959094909390929101615c9c565b60405160208183030381529060405290505f5b84608001516020015151811015614b6d57818560800151602001518281518110614b3a57614b3a61552b565b6020026020010151604051602001614b53929190615d56565b60408051601f198184030181529190529150600101614b0e565b5060a0840151805160209182015151604051614b8d938593929101615d8c565b60405160208183030381529060405290505f5b8460a001516020015151811015614bff57818560a00151602001518281518110614bcc57614bcc61552b565b6020026020010151604051602001614be5929190615d56565b60408051601f198184030181529190529150600101614ba0565b5060c0840151604051614c16918391602001615dc7565b6040516020818303038152906040529050600281604051614c3791906156dc565b602060405180830381855afa158015614c52573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614c7591906154b4565b94909350915050565b614c866143b5565b614c8e614e1c565b610d7481614e24565b614c9f6143b5565b6143fe614f0c565b614caf6143b5565b5f80516020615e3983398151915261ffff84161580614cd3575061271061ffff8516115b15614cf757604051635f12e6c360e11b815261ffff851660048201526024016104cf565b85871115614d1b5760405163222d164360e21b8152600481018890526024016104cf565b60ff83161580614d2e5750600a60ff8416115b15614d515760405163170db35960e31b815260ff841660048201526024016104cf565b95865560018601949094556002850180546001600160401b039490941669ffffffffffffffffffff1990941693909317600160401b61ffff93909316929092029190911767ffffffffffffffff60501b191660ff91909116600160501b02179055600390910180546001600160a01b0319166001600160a01b03909216919091179055565b6060611d7d83835f614f14565b6040516001600160a01b0384811660248301528381166044830152606482018390526106e59186918216906323b872dd90608401613de8565b6143fe6143b5565b614e2c6143b5565b80355f80516020615e598339815191529081556014614e516060840160408501615c46565b60ff161180614e705750614e6b6060830160408401615c46565b60ff16155b15614ea457614e856060830160408401615c46565b604051634a59bbff60e11b815260ff90911660048201526024016104cf565b614eb46060830160408401615c46565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614ee56040830160208401615271565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612b0c6143b5565b606081471015614f395760405163cd78605960e01b81523060048201526024016104cf565b5f80856001600160a01b03168486604051614f5491906156dc565b5f6040518083038185875af1925050503d805f8114614f8e576040519150601f19603f3d011682016040523d82523d5f602084013e614f93565b606091505b5091509150614fa3868383614fad565b9695505050505050565b606082614fc257614fbd82615009565b611d7d565b8151158015614fd957506001600160a01b0384163b155b1561500257604051639996b31560e01b81526001600160a01b03851660048201526024016104cf565b5080611d7d565b8051156150195780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461503e9061545c565b5f825580601f1061504d575050565b601f0160209004905f5260205f2090810190610d7491906150a6565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156150ba575f81556001016150a7565b5090565b8015158114610d74575f80fd5b803563ffffffff811681146150de575f80fd5b919050565b5f805f606084860312156150f5575f80fd5b833592506020840135615107816150be565b9150615115604085016150cb565b90509250925092565b5f6020828403121561512e575f80fd5b5035919050565b5f8060408385031215615146575f80fd5b82356001600160401b0381111561515b575f80fd5b83016080818603121561516c575f80fd5b915061517a602084016150cb565b90509250929050565b5f8060408385031215615194575f80fd5b8235915061517a602084016150cb565b5f602082840312156151b4575f80fd5b611d7d826150cb565b803561ffff811681146150de575f80fd5b80356001600160401b03811681146150de575f80fd5b5f805f80608085870312156151f7575f80fd5b84356001600160401b0381111561520c575f80fd5b850160a0818803121561521d575f80fd5b935061522b602086016151bd565b9250615239604086016151ce565b9396929550929360600135925050565b5f806040838503121561525a575f80fd5b615263836150cb565b946020939093013593505050565b5f60208284031215615281575f80fd5b611d7d826151ce565b5f806040838503121561529b575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b600681106152ce576152ce6152aa565b9052565b5f5b838110156152ec5781810151838201526020016152d4565b50505f910152565b5f815180845261530b8160208601602086016152d2565b601f01601f19169290920160200192915050565b602081526153316020820183516152be565b5f602083015160e0604084015261534c6101008401826152f4565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610d74575f80fd5b5f808284036101408112156153c6575f80fd5b610120808212156153d5575f80fd5b84935083013590506153e68161539f565b809150509250929050565b5f8060208385031215615402575f80fd5b82356001600160401b0380821115615418575f80fd5b818501915085601f83011261542b575f80fd5b813581811115615439575f80fd5b86602082850101111561544a575f80fd5b60209290920196919550909350505050565b600181811c9082168061547057607f821691505b60208210810361548e57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ca482846152be565b602081525f611d7d60208301846152f4565b5f602082840312156154c4575f80fd5b5051919050565b5f602082840312156154db575f80fd5b8135611d7d8161539f565b5f808335601e198436030181126154fb575f80fd5b8301803591506001600160401b03821115615514575f80fd5b6020019150600581901b3603821315613733575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615553575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156155935761559361555d565b60405290565b604080519081016001600160401b03811182821017156155935761559361555d565b604051601f8201601f191681016001600160401b03811182821017156155e3576155e361555d565b604052919050565b5f6001600160401b038211156156035761560361555d565b50601f01601f191660200190565b5f82601f830112615620575f80fd5b813561563361562e826155eb565b6155bb565b818152846020838601011115615647575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615673575f80fd5b61567b615571565b82356001600160401b0380821115615691575f80fd5b61569d36838701615611565b835260208501359150808211156156b2575f80fd5b506156bf36828601615611565b6020830152506156d1604084016151ce565b604082015292915050565b5f82516155538184602087016152d2565b601f8211156104d857805f5260205f20601f840160051c810160208510156157125750805b601f840160051c820191505b818110156116a9575f815560010161571e565b81516001600160401b0381111561574a5761574a61555d565b61575e81615758845461545c565b846156ed565b602080601f831160018114615791575f841561577a5750858301515b5f19600386901b1c1916600185901b178555610edb565b5f85815260208120601f198616915b828110156157bf578886015182559484019460019091019084016157a0565b50858210156157dc57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ca457610ca46157ec565b5f63ffffffff80831681810361582b5761582b6157ec565b6001019392505050565b8082028115828204841417610ca457610ca46157ec565b5f8261586657634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061587f5761587f6152aa565b91905290565b5f60208083525f84546158978161545c565b806020870152604060018084165f81146158b857600181146158d457615901565b60ff19851660408a0152604084151560051b8a01019550615901565b895f5260205f205f5b858110156158f85781548b82018601529083019088016158dd565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115611ee257611ee26157ec565b6001600160401b03828116828216039080821115611ee257611ee26157ec565b80516150de816150be565b5f806040838503121561597a575f80fd5b82516001600160401b0380821115615990575f80fd5b90840190606082870312156159a3575f80fd5b6159ab615571565b825181526020808401516159be8161539f565b828201526040840151838111156159d3575f80fd5b80850194505087601f8501126159e7575f80fd5b835192506159f761562e846155eb565b8381528882858701011115615a0a575f80fd5b615a19848383018488016152d2565b80604084015250819550615a2e81880161595e565b9450505050509250929050565b81810381811115610ca457610ca46157ec565b5f808335601e19843603018112615a63575f80fd5b8301803591506001600160401b03821115615a7c575f80fd5b602001915036819003821315613733575f80fd5b5f8851615aa1818460208d016152d2565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b6001600160401b03818116838216028082169190828114615b1c57615b1c6157ec565b505092915050565b5f8235603e19833603018112615553575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215615b76575f80fd5b615b7e615599565b615b87836150cb565b81526020808401356001600160401b0380821115615ba3575f80fd5b9085019036601f830112615bb5575f80fd5b813581811115615bc757615bc761555d565b8060051b9150615bd88483016155bb565b8181529183018401918481019036841115615bf1575f80fd5b938501935b83851015615c1b5784359250615c0b8361539f565b8282529385019390850190615bf6565b94860194909452509295945050505050565b5f60208284031215615c3d575f80fd5b611d7d826151bd565b5f60208284031215615c56575f80fd5b813560ff81168114611d7d575f80fd5b5f6001600160401b0380831681810361582b5761582b6157ec565b5f60208284031215615c91575f80fd5b8151611d7d816150be565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651615ce281602a850160208b016152d2565b865190830190615cf981602a840160208b016152d2565b60c087901b6001600160c01b031916602a9290910191820152615d2b603282018660e01b6001600160e01b0319169052565b615d44603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615d678184602088016152d2565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f8451615d9d8184602089016152d2565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615dd88184602088016152d2565b60c09390931b6001600160c01b031916919092019081526008019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d056e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 9bff585a9..976bb688e 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -90,8 +90,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\":\"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\":\"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\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"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\":\"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\"}]}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615c96380380615c9683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b498061014d5f395ff3fe6080604052600436106101e6575f3560e01c8063732214f811610108578063b771b3bc1161009d578063c599e24f1161006d578063c599e24f14610582578063c974d1b614610595578063d5f20ff6146105a9578063df93d8de146105d5578063fd7ac5e7146105eb575f80fd5b8063b771b3bc1461050a578063ba3a4b9714610524578063bc5fbfec14610543578063bee0a03f14610563575f80fd5b806398f3e2b4116100d857806398f3e2b414610499578063a3a65e48146104b8578063af2f5feb146104d7578063afb98096146104ea575f80fd5b8063732214f81461043457806376f78621146104475780638280a25a1461046657806393e245981461047a575f80fd5b8063329c3e121161017e5780635297fae61161014e5780635297fae6146103a057806360305d62146103bf57806362065856146103e857806366435abf14610415575f80fd5b8063329c3e121461030857806335455ded1461033a5780633a1cfff614610362578063467ef06f14610381575f80fd5b806320d91b7a116101b957806320d91b7a1461027457806320e555651461029357806325e1c776146102b25780632e2194d8146102d1575f80fd5b80630118acc4146101ea5780630322ed981461020b578063151d30d11461022a5780631ec4472414610255575b5f80fd5b3480156101f5575f80fd5b50610209610204366004614e00565b61060a565b005b348015610216575f80fd5b50610209610225366004614e3b565b61063f565b348015610235575f80fd5b5061023e600a81565b60405160ff90911681526020015b60405180910390f35b348015610260575f80fd5b5061020961026f366004614e00565b61084d565b34801561027f575f80fd5b5061020961028e366004614e52565b610858565b34801561029e575f80fd5b506102096102ad366004614ea0565b610d44565b3480156102bd575f80fd5b506102096102cc366004614eb7565b610e21565b3480156102dc575f80fd5b506102f06102eb366004614e3b565b610e95565b6040516001600160401b03909116815260200161024c565b348015610313575f80fd5b506103226001600160991b0181565b6040516001600160a01b03909116815260200161024c565b348015610345575f80fd5b5061034f61271081565b60405161ffff909116815260200161024c565b34801561036d575f80fd5b5061020961037c366004614e00565b610eab565b34801561038c575f80fd5b5061020961039b366004614ed8565b610eb6565b3480156103ab575f80fd5b506102096103ba366004614ef1565b610f78565b3480156103ca575f80fd5b506103d3601481565b60405163ffffffff909116815260200161024c565b3480156103f3575f80fd5b50610407610402366004614f2f565b6111e3565b60405190815260200161024c565b348015610420575f80fd5b506102f061042f366004614e3b565b6111fc565b34801561043f575f80fd5b506104075f81565b348015610452575f80fd5b50610209610461366004614e00565b611210565b348015610471575f80fd5b5061023e603081565b348015610485575f80fd5b50610209610494366004614e3b565b61123b565b3480156104a4575f80fd5b506102096104b3366004614ef1565b611306565b3480156104c3575f80fd5b506102096104d2366004614ed8565b6114de565b6104076104e5366004614f59565b611667565b3480156104f5575f80fd5b506104075f80516020615abd83398151915281565b348015610515575f80fd5b506103226005600160991b0181565b34801561052f575f80fd5b5061020961053e366004614e3b565b61169b565b34801561054e575f80fd5b506104075f80516020615add83398151915281565b34801561056e575f80fd5b5061020961057d366004614e3b565b611884565b610407610590366004614e3b565b6119c1565b3480156105a0575f80fd5b5061023e601481565b3480156105b4575f80fd5b506105c86105c3366004614e3b565b6119f2565b60405161024c9190615022565b3480156105e0575f80fd5b506102f06202a30081565b3480156105f6575f80fd5b506104076106053660046150a2565b611b41565b610615838383611b9c565b61063a57604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f80516020615b1d8339815191526020526040808220815160e0810190925280545f80516020615add83398151915293929190829060ff16600581111561068c5761068c614fad565b600581111561069d5761069d614fad565b81526020016001820180546106b19061510d565b80601f01602080910402602001604051908101604052809291908181526020018280546106dd9061510d565b80156107285780601f106106ff57610100808354040283529160200191610728565b820191905f5260205f20905b81548152906001019060200180831161070b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561079357610793614fad565b146107c6575f8381526007830160205260409081902054905163170cc93360e21b81526106319160ff169060040161513f565b6005600160991b016001600160a01b031663ee5b48eb6107eb8584606001515f611ea3565b6040518263ffffffff1660e01b8152600401610807919061514d565b6020604051808303815f875af1158015610823573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610847919061515f565b50505050565b610847838383611b9c565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615add8339815191529060ff16156108aa57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610911919061515f565b83602001351461093a576040516372b0a7e760e11b815260208401356004820152602401610631565b3061094b606085016040860161518a565b6001600160a01b03161461098e57610969606084016040850161518a565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610631565b5f61099c60608501856151a5565b905090505f805b828163ffffffff161015610c84575f6109bf60608801886151a5565b8363ffffffff168181106109d5576109d56151ea565b90506020028101906109e791906151fe565b6109f090615322565b80516040519192505f916008880191610a089161539b565b90815260200160405180910390205414610a3857805160405163a41f772f60e01b8152610631919060040161514d565b5f6002885f013584604051602001610a6792919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a819161539b565b602060405180830381855afa158015610a9c573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610abf919061515f565b90508086600801835f0151604051610ad7919061539b565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff19166001836005811115610b5957610b59614fad565b021790555060208201516001820190610b7290826153f0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff191692841692909217909155830151610c179116856154bf565b8251604051919550610c289161539b565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c7d906154d2565b90506109a3565b50600483018190555f610ca2610c9986611ef2565b60400151612008565b90505f610cae87612195565b90505f600282604051610cc1919061539b565b602060405180830381855afa158015610cdc573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cff919061515f565b9050828114610d2b57604051631872fc8d60e01b81526004810182905260248101849052604401610631565b5050506009909201805460ff1916600117905550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610d8d575080546001600160401b03808416911610155b15610dab5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610dd58361236f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610e2a82612380565b610e4a576040516330efa98b60e01b815260048101839052602401610631565b5f610e54836119f2565b5190506002816005811115610e6b57610e6b614fad565b14610e8b578060405163170cc93360e21b8152600401610631919061513f565b61084783836123bb565b5f610ea564e8d4a51000836154f4565b92915050565b610847838383612635565b610ebe61282e565b5f80516020615abd8339815191525f80610ed784612865565b91509150610ee482612380565b610ef057505050610f5f565b5f82815260048085016020526040909120546001600160a01b03169082516005811115610f1f57610f1f614fad565b03610f44575f83815260078501602052604081208054919055610f428282612ba3565b505b610f5a81610f5584604001516111e3565b612c01565b505050505b610f7560015f80516020615afd83398151915255565b50565b5f8181525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd83398151915293929190829060ff166003811115610fc557610fc5614fad565b6003811115610fd657610fd6614fad565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61104c826119f2565b905060018351600381111561106357611063614fad565b14611084578251604051633b0d540d60e21b81526106319190600401615513565b60048151600581111561109957611099614fad565b036110af576110a785612c27565b505050505050565b5f806110c66110bd89611ef2565b60400151612e0e565b50915091508184146110f357846040015160405163089938b360e11b815260040161063191815260200190565b806001600160401b031683606001516001600160401b0316108061112c5750806001600160401b03168560a001516001600160401b0316115b1561115557604051632e19bc2d60e11b81526001600160401b0382166004820152602401610631565b5f878152600587016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f610ea56001600160401b03831664e8d4a5100061552d565b5f611206826119f2565b6080015192915050565b61121b838383612635565b61063a57604051635bff683f60e11b815260048101849052602401610631565b5f80516020615abd8339815191525f611253836119f2565b519050600481600581111561126a5761126a614fad565b1461128a578060405163170cc93360e21b8152600401610631919061513f565b5f8381526004830160205260409020546001600160a01b031633146112d057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610631565b5f83815260078301602090815260408083208054908490556004860190925290912054610847906001600160a01b031682612ba3565b61130e61282e565b5f8181525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd83398151915293929190829060ff16600381111561135b5761135b614fad565b600381111561136c5761136c614fad565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113e5576113e5614fad565b14611406578051604051633b0d540d60e21b81526106319190600401615513565b600461141582604001516119f2565b51600581111561142757611427614fad565b146114b9575f61143685611ef2565b90505f806114478360400151612e0e565b5091509150818460400151146114735760405163089938b360e11b815260048101839052602401610631565b806001600160401b03168460c001516001600160401b031611156114b557604051632e19bc2d60e11b81526001600160401b0382166004820152602401610631565b5050505b6114c283612c27565b50506114da60015f80516020615afd83398151915255565b5050565b5f80516020615add8339815191525f806115036114fa85611ef2565b60400151613064565b915091508061152957604051632d07135360e01b81528115156004820152602401610631565b5f828152600684016020526040902080546115439061510d565b90505f036115675760405163089938b360e11b815260048101839052602401610631565b60015f83815260078501602052604090205460ff16600581111561158d5761158d614fad565b146115c0575f8281526007840160205260409081902054905163170cc93360e21b81526106319160ff169060040161513f565b5f82815260068401602052604081206115d891614d54565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f61167061282e565b61167c84848434613220565b905061169460015f80516020615afd83398151915255565b9392505050565b5f8181525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd83398151915293929190829060ff1660038111156116e8576116e8614fad565b60038111156116f9576116f9614fad565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561177257611772614fad565b14158015611793575060038151600381111561179057611790614fad565b14155b156117b4578051604051633b0d540d60e21b81526106319190600401615513565b5f6117c282604001516119f2565b905080606001516001600160401b03165f036117f4576040516339b894f960e21b815260048101859052602401610631565b6005600160991b016001600160a01b031663ee5b48eb611821846040015184606001518560800151611ea3565b6040518263ffffffff1660e01b815260040161183d919061514d565b6020604051808303815f875af1158015611859573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187d919061515f565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615add83398151915291906118cb9061510d565b90505f036118ef5760405163089938b360e11b815260048101839052602401610631565b60015f83815260078301602052604090205460ff16600581111561191557611915614fad565b14611948575f8281526007820160205260409081902054905163170cc93360e21b81526106319160ff169060040161513f565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916119819190600401615544565b6020604051808303815f875af115801561199d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063a919061515f565b5f6119ca61282e565b6119d58233346133ee565b90506119ed60015f80516020615afd83398151915255565b919050565b6119fa614d8b565b5f8281525f80516020615b1d833981519152602052604090819020815160e0810190925280545f80516020615add833981519152929190829060ff166005811115611a4757611a47614fad565b6005811115611a5857611a58614fad565b8152602001600182018054611a6c9061510d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a989061510d565b8015611ae35780601f10611aba57610100808354040283529160200191611ae3565b820191905f5260205f20905b815481529060010190602001808311611ac657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615add833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611b8490869086906155ce565b90815260200160405180910390205491505092915050565b5f8381525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd8339815191529284929091829060ff166003811115611bea57611bea614fad565b6003811115611bfb57611bfb614fad565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611c71826119f2565b9050600283516003811115611c8857611c88614fad565b14611ca9578251604051633b0d540d60e21b81526106319190600401615513565b60208301516001600160a01b03163314611d4c575f828152600485016020526040902054336001600160a01b0390911603611d46575f82815260048501602052604090205460a0820151611d0d91600160b01b90046001600160401b0316906155dd565b6001600160401b0316421015611d415760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610631565b611d4c565b336112ab565b600281516005811115611d6157611d61614fad565b03611e3e578615611d7857611d7682876123bb565b505b5f8881526005850160205260409020805460ff1916600317905560608301516080820151611db1918491611dac91906155fd565b6136c3565b505f898152600586016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611df28461381a565b5f8a81526006870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506116949350505050565b600481516005811115611e5357611e53614fad565b03611e8757611e618361381a565b5f898152600686016020526040902055611e7a88612c27565b6001945050505050611694565b805160405163170cc93360e21b8152610631919060040161513f565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611f56573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f7d9190810190615628565b9150915080611f9f57604051636b2f19e960e01b815260040160405180910390fd5b815115611fc5578151604051636ba589a560e01b81526004810191909152602401610631565b60208201516001600160a01b031615612001576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610631565b5092915050565b5f815160261461203d57815160405163cc92daa160e01b815263ffffffff909116600482015260266024820152604401610631565b5f805b600281101561208c576120548160016156fa565b61205f90600861552d565b61ffff16848281518110612075576120756151ea565b016020015160f81c901b9190911790600101612040565b5061ffff8116156120b65760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015612111576120cd8160036156fa565b6120d890600861552d565b63ffffffff16856120ea8360026154bf565b815181106120fa576120fa6151ea565b016020015160f81c901b91909117906001016120b9565b5063ffffffff81161561213757604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561218c5761214e81601f6156fa565b61215990600861552d565b866121658360066154bf565b81518110612175576121756151ea565b016020015160f81c901b919091179060010161213a565b50949350505050565b60605f808335602085013560146121b18787016040890161518a565b6121be60608901896151a5565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b61224460608501856151a5565b9050811015612001578161225b60608601866151a5565b8381811061226b5761226b6151ea565b905060200281019061227d91906151fe565b612287908061570d565b905061229660608701876151a5565b848181106122a6576122a66151ea565b90506020028101906122b891906151fe565b6122c2908061570d565b6122cf60608901896151a5565b868181106122df576122df6151ea565b90506020028101906122f191906151fe565b6122ff90602081019061570d565b61230c60608b018b6151a5565b8881811061231c5761231c6151ea565b905060200281019061232e91906151fe565b61233f906060810190604001614f2f565b604051602001612355979695949392919061574f565b60408051601f198184030181529190529150600101612237565b6123776139c6565b610f7581613a11565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612406573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261242d9190810190615628565b915091508061244f57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612492573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b6919061515f565b8251146124dc578151604051636ba589a560e01b81526004810191909152602401610631565b60208201516001600160a01b031615612518576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610631565b5f806125278460400151613a7f565b9150915081871461254e5760405163089938b360e11b815260048101889052602401610631565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020600101545f80516020615abd833981519152906001600160401b03908116908316111561260b575f888152600482016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261262a565b5f8881526004820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f80516020615abd8339815191528161264e86613c70565b905061265986612380565b61266857600192505050611694565b5f8681526004830160205260409020546001600160a01b0316331461268d57336112ab565b5f86815260048301602052604090205460a08201516126bc91600160b01b90046001600160401b0316906155dd565b6001600160401b03168160c001516001600160401b031610156127035760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610631565b5f851561271b5761271487866123bb565b9050612739565b505f8681526004830160205260409020600101546001600160401b03165b600383015460408301515f916001600160a01b03169063778c06b59061275e906111e3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b0391821660248401819052604484015281166064830152851660848201525f60a4820181905260c482015260e401602060405180830381865afa1580156127d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f8919061515f565b905080846007015f8a81526020019081526020015f205f82825461281c91906154bf565b90915550501515979650505050505050565b5f80516020615afd83398151915280546001190161285f57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61286e614d8b565b5f80516020615add8339815191525f8061288a6114fa87611ef2565b9150915080156128b157604051632d07135360e01b81528115156004820152602401610631565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156128e2576128e2614fad565b60058111156128f3576128f3614fad565b81526020016001820180546129079061510d565b80601f01602080910402602001604051908101604052809291908181526020018280546129339061510d565b801561297e5780601f106129555761010080835404028352916020019161297e565b820191905f5260205f20905b81548152906001019060200180831161296157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156129e9576129e9614fad565b14158015612a0a5750600181516005811115612a0757612a07614fad565b14155b15612a2b57805160405163170cc93360e21b8152610631919060040161513f565b600381516005811115612a4057612a40614fad565b03612a4e5760048152612a53565b600581525b836008018160200151604051612a69919061539b565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612aad57612aad614fad565b021790555060208201516001820190612ac690826153f0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b6c57612b6c614fad565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612bef575f80fd5b505af11580156110a7573d5f803e3d5ffd5b6114da6001600160a01b03831682613f54565b60015f80516020615afd83398151915255565b5f8181525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd83398151915293929190829060ff166003811115612c7457612c74614fad565b6003811115612c8557612c85614fad565b8152815461010090046001600160a01b03166020808301919091526001808401546040808501919091526002948501546001600160401b038082166060870152600160401b820481166080870152600160801b8204811660a0870152600160c01b9091041660c090940193909352848301515f89815260058901845284812080546001600160a81b03191681559283018190559190940181905560068701909152908120805490829055929350909190808215612db3575f84815260048701602052604090205461271090612d6590600160a01b900461ffff168561552d565b612d6f91906154f4565b915081866007015f8681526020019081526020015f205f828254612d9391906154bf565b90915550612da3905082846156fa565b9050612db3856020015182612ba3565b612dc88560200151610f5587606001516111e3565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612e4557835160405163cc92daa160e01b815263ffffffff909116600482015260366024820152604401610631565b5f805b6002811015612e9457612e5c8160016156fa565b612e6790600861552d565b61ffff16868281518110612e7d57612e7d6151ea565b016020015160f81c901b9190911790600101612e48565b5061ffff811615612ebe5760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015612f1957612ed58160036156fa565b612ee090600861552d565b63ffffffff1687612ef28360026154bf565b81518110612f0257612f026151ea565b016020015160f81c901b9190911790600101612ec1565b5063ffffffff8116600314612f4157604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015612f9657612f5881601f6156fa565b612f6390600861552d565b88612f6f8360066154bf565b81518110612f7f57612f7f6151ea565b016020015160f81c901b9190911790600101612f44565b505f805b6008811015612ff557612fae8160076156fa565b612fb990600861552d565b6001600160401b031689612fce8360266154bf565b81518110612fde57612fde6151ea565b016020015160f81c901b9190911790600101612f9a565b505f805b60088110156130545761300d8160076156fa565b61301890600861552d565b6001600160401b03168a61302d83602e6154bf565b8151811061303d5761303d6151ea565b016020015160f81c901b9190911790600101612ff9565b5091989097509095509350505050565b5f80825160271461309a57825160405163cc92daa160e01b815263ffffffff909116600482015260276024820152604401610631565b5f805b60028110156130e9576130b18160016156fa565b6130bc90600861552d565b61ffff168582815181106130d2576130d26151ea565b016020015160f81c901b919091179060010161309d565b5061ffff8116156131135760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b600481101561316e5761312a8160036156fa565b61313590600861552d565b63ffffffff16866131478360026154bf565b81518110613157576131576151ea565b016020015160f81c901b9190911790600101613116565b5063ffffffff811660021461319657604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156131eb576131ad81601f6156fa565b6131b890600861552d565b876131c48360066154bf565b815181106131d4576131d46151ea565b016020015160f81c901b9190911790600101613199565b505f86602681518110613200576132006151ea565b016020015191976001600160f81b03199092161515965090945050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615abd83398151915290600160401b900461ffff9081169086161080613274575061271061ffff8616115b1561329857604051635f12e6c360e11b815261ffff86166004820152602401610631565b60028101546001600160401b0390811690851610156132d4576040516202a06d60e11b81526001600160401b0385166004820152602401610631565b80548310806132e65750806001015483115b156133075760405163222d164360e21b815260048101849052602401610631565b825f61331282610e95565b90505f61331f8983613fe7565b905060405180608001604052806133333390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526004909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b03199094169516949094179190911798909816178155910151600190910180549190951667ffffffffffffffff19909116179093555090915050949350505050565b5f5f80516020615abd8339815191528161340784610e95565b90505f613413876119f2565b905061341e87612380565b61343e576040516330efa98b60e01b815260048101889052602401610631565b60028151600581111561345357613453614fad565b1461347457805160405163170cc93360e21b8152610631919060040161513f565b5f82826080015161348591906155dd565b905083600201600a9054906101000a90046001600160401b031682604001516134ae91906157b8565b6001600160401b0316816001600160401b031611156134eb57604051636d51fe0560e11b81526001600160401b0382166004820152602401610631565b5f806134f78a846136c3565b915091505f8a8360405160200161352592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260058b01909152902081518154829060ff191660018360038111156135b8576135b8614fad565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f8281525f80516020615b1d833981519152602052604081206002015481905f80516020615add83398151915290600160801b90046001600160401b031661370b858261455f565b5f61371587614739565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6137658a858b611ea3565b6040518263ffffffff1660e01b8152600401613781919061514d565b6020604051808303815f875af115801561379d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137c1919061515f565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f80516020615abd83398151915290505f61383a84604001516119f2565b90505f60038251600581111561385257613852614fad565b1480613870575060048251600581111561386e5761386e614fad565b145b15613880575060c08101516138bd565b60028251600581111561389557613895614fad565b036138a15750426138bd565b815160405163170cc93360e21b8152610631919060040161513f565b84608001516001600160401b0316816001600160401b0316116138e457505f949350505050565b600383015460608601516001600160a01b039091169063778c06b590613909906111e3565b60a085015160808901516040808b01515f90815260048a810160205282822060010154925160e088901b6001600160e01b0319168152908101959095526001600160401b0393841660248601529183166044850152828716606485015291909116608483015260a4820181905260c482015260e401602060405180830381865afa158015613999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139bd919061515f565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613a0f57604051631afcd79f60e31b815260040160405180910390fd5b565b613a196139c6565b613a22816147ae565b613a2a6147c7565b610f7560608201356080830135613a4760c0850160a08601614f2f565b613a5760e0860160c087016157e3565b613a68610100870160e088016157fc565b613a7a6101208801610100890161518a565b6147d7565b5f808251602e14613ab557825160405163cc92daa160e01b815263ffffffff9091166004820152602e6024820152604401610631565b5f805b6002811015613b0457613acc8160016156fa565b613ad790600861552d565b61ffff16858281518110613aed57613aed6151ea565b016020015160f81c901b9190911790600101613ab8565b5061ffff811615613b2e5760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015613b8957613b458160036156fa565b613b5090600861552d565b63ffffffff1686613b628360026154bf565b81518110613b7257613b726151ea565b016020015160f81c901b9190911790600101613b31565b5063ffffffff811615613baf57604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613c0457613bc681601f6156fa565b613bd190600861552d565b87613bdd8360066154bf565b81518110613bed57613bed6151ea565b016020015160f81c901b9190911790600101613bb2565b505f805b6008811015613c6357613c1c8160076156fa565b613c2790600861552d565b6001600160401b031688613c3c8360266154bf565b81518110613c4c57613c4c6151ea565b016020015160f81c901b9190911790600101613c08565b5090969095509350505050565b613c78614d8b565b5f8281525f80516020615b1d8339815191526020526040808220815160e0810190925280545f80516020615add83398151915293929190829060ff166005811115613cc557613cc5614fad565b6005811115613cd657613cd6614fad565b8152602001600182018054613cea9061510d565b80601f0160208091040260200160405190810160405280929190818152602001828054613d169061510d565b8015613d615780601f10613d3857610100808354040283529160200191613d61565b820191905f5260205f20905b815481529060010190602001808311613d4457829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613dcf57613dcf614fad565b14613e02575f8481526007830160205260409081902054905163170cc93360e21b81526106319160ff169060040161513f565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613e4657613e46614fad565b021790555060208201516001820190613e5f90826153f0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613efd85826136c3565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b80471015613f775760405163cd78605960e01b8152306004820152602401610631565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613fc0576040519150601f19603f3d011682016040523d82523d5f602084013e613fc5565b606091505b505090508061063a57604051630a12f52160e11b815260040160405180910390fd5b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff1661402b57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615add8339815191524261404a6060860160408701614f2f565b6001600160401b031611158061408457506140686202a300426154bf565b6140786060860160408701614f2f565b6001600160401b031610155b156140be576140996060850160408601614f2f565b604051635879da1360e11b81526001600160401b039091166004820152602401610631565b6140d36140ce606086018661581c565b614906565b6140e36140ce608086018661581c565b60306140f2602086018661570d565b90501461412457614106602085018561570d565b6040516326475b2f60e11b8152610631925060040190815260200190565b61412e848061570d565b90505f0361415b57614140848061570d565b604051633e08a12560e11b8152600401610631929190615830565b5f6008820161416a868061570d565b6040516141789291906155ce565b908152602001604051809103902054146141b157614196848061570d565b60405163a41f772f60e01b8152600401610631929190615830565b6141bb835f61455f565b6040805160e08101909152815481525f9081906142c790602081016141e0898061570d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614228908a018a61570d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161427160608a0160408b01614f2f565b6001600160401b0316815260200161428c60608a018a61581c565b6142959061585e565b81526020016142a760808a018a61581c565b6142b09061585e565b8152602001876001600160401b0316815250614a6f565b5f828152600686016020526040902091935091506142e582826153f0565b5081600884016142f5888061570d565b6040516143039291906155ce565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061433f90859060040161514d565b6020604051808303815f875af115801561435b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061437f919061515f565b6040805160e08101909152909150806001815260200161439f898061570d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff1916600183600581111561442e5761442e614fad565b02179055506020820151600182019061444790826153f0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055806144e5888061570d565b6040516144f39291906155ce565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906145319190614f2f565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f80516020615add8339815191525f6001600160401b0380841690851611156145935761458c83856155fd565b90506145a0565b61459d84846155fd565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806146025750600184015481516145fe916001600160401b0316906154bf565b8210155b15614628576001600160401b038316606082015281815260408101516020820152614647565b828160600181815161463a91906155dd565b6001600160401b03169052505b60608101516146579060646157b8565b602082015160018601546001600160401b0392909216916146829190600160401b900460ff1661552d565b10156146b257606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610631565b856001600160401b0316816040018181516146cd91906154bf565b9052506040810180516001600160401b03871691906146ed9083906156fa565b905250805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615b1d8339815191526020526040812060020180545f80516020615add833981519152919060089061478390600160401b90046001600160401b0316615925565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147b66139c6565b6147be614c5c565b610f7581614c64565b6147cf6139c6565b613a0f614d4c565b6147df6139c6565b5f80516020615abd83398151915261ffff84161580614803575061271061ffff8516115b1561482757604051635f12e6c360e11b815261ffff85166004820152602401610631565b8587111561484b5760405163222d164360e21b815260048101889052602401610631565b60ff8316158061485e5750600a60ff8416115b156148815760405163170db35960e31b815260ff84166004820152602401610631565b95865560018601949094556002850180546001600160401b039490941669ffffffffffffffffffff1990941693909317600160401b61ffff93909316929092029190911767ffffffffffffffff60501b191660ff91909116600160501b02179055600390910180546001600160a01b0319166001600160a01b03909216919091179055565b6149136020820182614ed8565b63ffffffff16158015614933575061492e60208201826151a5565b151590505b1561497a576149456020820182614ed8565b61495260208301836151a5565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610631565b61498760208201826151a5565b90506149966020830183614ed8565b63ffffffff1611156149af576149456020820182614ed8565b60015b6149bf60208301836151a5565b90508110156114da576149d560208301836151a5565b6149e06001846156fa565b8181106149ef576149ef6151ea565b9050602002016020810190614a04919061518a565b6001600160a01b0316614a1a60208401846151a5565b83818110614a2a57614a2a6151ea565b9050602002016020810190614a3f919061518a565b6001600160a01b03161015614a6757604051630dbc8d5f60e31b815260040160405180910390fd5b6001016149b2565b5f6060826040015151603014614a985760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614ad9988a986001989297929690959094909390929101615940565b60405160208183030381529060405290505f5b84608001516020015151811015614b4b57818560800151602001518281518110614b1857614b186151ea565b6020026020010151604051602001614b319291906159fa565b60408051601f198184030181529190529150600101614aec565b5060a0840151805160209182015151604051614b6b938593929101615a30565b60405160208183030381529060405290505f5b8460a001516020015151811015614bdd57818560a00151602001518281518110614baa57614baa6151ea565b6020026020010151604051602001614bc39291906159fa565b60408051601f198184030181529190529150600101614b7e565b5060c0840151604051614bf4918391602001615a6b565b6040516020818303038152906040529050600281604051614c15919061539b565b602060405180830381855afa158015614c30573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614c53919061515f565b94909350915050565b613a0f6139c6565b614c6c6139c6565b80355f80516020615add8339815191529081556014614c9160608401604085016157fc565b60ff161180614cb05750614cab60608301604084016157fc565b60ff16155b15614ce457614cc560608301604084016157fc565b604051634a59bbff60e11b815260ff9091166004820152602401610631565b614cf460608301604084016157fc565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614d256040830160208401614f2f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c146139c6565b508054614d609061510d565b5f825580601f10614d6f575050565b601f0160209004905f5260205f2090810190610f759190614dc8565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ddc575f8155600101614dc9565b5090565b8015158114610f75575f80fd5b803563ffffffff811681146119ed575f80fd5b5f805f60608486031215614e12575f80fd5b833592506020840135614e2481614de0565b9150614e3260408501614ded565b90509250925092565b5f60208284031215614e4b575f80fd5b5035919050565b5f8060408385031215614e63575f80fd5b82356001600160401b03811115614e78575f80fd5b830160808186031215614e89575f80fd5b9150614e9760208401614ded565b90509250929050565b5f6101208284031215614eb1575f80fd5b50919050565b5f8060408385031215614ec8575f80fd5b82359150614e9760208401614ded565b5f60208284031215614ee8575f80fd5b61169482614ded565b5f8060408385031215614f02575f80fd5b614f0b83614ded565b946020939093013593505050565b80356001600160401b03811681146119ed575f80fd5b5f60208284031215614f3f575f80fd5b61169482614f19565b803561ffff811681146119ed575f80fd5b5f805f60608486031215614f6b575f80fd5b83356001600160401b03811115614f80575f80fd5b840160a08187031215614f91575f80fd5b9250614f9f60208501614f48565b9150614e3260408501614f19565b634e487b7160e01b5f52602160045260245ffd5b60068110614fd157614fd1614fad565b9052565b5f5b83811015614fef578181015183820152602001614fd7565b50505f910152565b5f815180845261500e816020860160208601614fd5565b601f01601f19169290920160200192915050565b60208152615034602082018351614fc1565b5f602083015160e0604084015261504f610100840182614ff7565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150b3575f80fd5b82356001600160401b03808211156150c9575f80fd5b818501915085601f8301126150dc575f80fd5b8135818111156150ea575f80fd5b8660208285010111156150fb575f80fd5b60209290920196919550909350505050565b600181811c9082168061512157607f821691505b602082108103614eb157634e487b7160e01b5f52602260045260245ffd5b60208101610ea58284614fc1565b602081525f6116946020830184614ff7565b5f6020828403121561516f575f80fd5b5051919050565b6001600160a01b0381168114610f75575f80fd5b5f6020828403121561519a575f80fd5b813561169481615176565b5f808335601e198436030181126151ba575f80fd5b8301803591506001600160401b038211156151d3575f80fd5b6020019150600581901b3603821315613813575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615212575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156152525761525261521c565b60405290565b604080519081016001600160401b03811182821017156152525761525261521c565b604051601f8201601f191681016001600160401b03811182821017156152a2576152a261521c565b604052919050565b5f6001600160401b038211156152c2576152c261521c565b50601f01601f191660200190565b5f82601f8301126152df575f80fd5b81356152f26152ed826152aa565b61527a565b818152846020838601011115615306575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615332575f80fd5b61533a615230565b82356001600160401b0380821115615350575f80fd5b61535c368387016152d0565b83526020850135915080821115615371575f80fd5b5061537e368286016152d0565b60208301525061539060408401614f19565b604082015292915050565b5f8251615212818460208701614fd5565b601f82111561063a57805f5260205f20601f840160051c810160208510156153d15750805b601f840160051c820191505b8181101561187d575f81556001016153dd565b81516001600160401b038111156154095761540961521c565b61541d81615417845461510d565b846153ac565b602080601f831160018114615450575f84156154395750858301515b5f19600386901b1c1916600185901b1785556110a7565b5f85815260208120601f198616915b8281101561547e5788860151825594840194600190910190840161545f565b508582101561549b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ea557610ea56154ab565b5f63ffffffff8083168181036154ea576154ea6154ab565b6001019392505050565b5f8261550e57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061552757615527614fad565b91905290565b8082028115828204841417610ea557610ea56154ab565b5f60208083525f84546155568161510d565b806020870152604060018084165f81146155775760018114615593576155c0565b60ff19851660408a0152604084151560051b8a010195506155c0565b895f5260205f205f5b858110156155b75781548b820186015290830190880161559c565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612001576120016154ab565b6001600160401b03828116828216039080821115612001576120016154ab565b80516119ed81614de0565b5f8060408385031215615639575f80fd5b82516001600160401b038082111561564f575f80fd5b9084019060608287031215615662575f80fd5b61566a615230565b8251815260208084015161567d81615176565b82820152604084015183811115615692575f80fd5b80850194505087601f8501126156a6575f80fd5b835192506156b66152ed846152aa565b83815288828587010111156156c9575f80fd5b6156d884838301848801614fd5565b806040840152508195506156ed81880161561d565b9450505050509250929050565b81810381811115610ea557610ea56154ab565b5f808335601e19843603018112615722575f80fd5b8301803591506001600160401b0382111561573b575f80fd5b602001915036819003821315613813575f80fd5b5f8851615760818460208d01614fd5565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b6001600160401b038181168382160280821691908281146157db576157db6154ab565b505092915050565b5f602082840312156157f3575f80fd5b61169482614f48565b5f6020828403121561580c575f80fd5b813560ff81168114611694575f80fd5b5f8235603e19833603018112615212575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f6040823603121561586e575f80fd5b615876615258565b61587f83614ded565b81526020808401356001600160401b038082111561589b575f80fd5b9085019036601f8301126158ad575f80fd5b8135818111156158bf576158bf61521c565b8060051b91506158d084830161527a565b81815291830184019184810190368411156158e9575f80fd5b938501935b83851015615913578435925061590383615176565b82825293850193908501906158ee565b94860194909452509295945050505050565b5f6001600160401b038083168181036154ea576154ea6154ab565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b16602684015250865161598681602a850160208b01614fd5565b86519083019061599d81602a840160208b01614fd5565b60c087901b6001600160c01b031916602a92909101918201526159cf603282018660e01b6001600160e01b0319169052565b6159e8603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615a0b818460208801614fd5565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f8451615a41818460208901614fd5565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615a7c818460208801614fd5565b60c09390931b6001600160c01b031916919092019081526008019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d054317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", + 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\":\"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\":\"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\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"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\"}]}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615d1d380380615d1d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615bd08061014d5f395ff3fe6080604052600436106101e6575f3560e01c8063732214f811610108578063b771b3bc1161009d578063c599e24f1161006d578063c599e24f14610582578063c974d1b614610595578063d5f20ff6146105a9578063df93d8de146105d5578063fd7ac5e7146105eb575f80fd5b8063b771b3bc1461050a578063ba3a4b9714610524578063bc5fbfec14610543578063bee0a03f14610563575f80fd5b806398f3e2b4116100d857806398f3e2b414610499578063a3a65e48146104b8578063af2f5feb146104d7578063afb98096146104ea575f80fd5b8063732214f81461043457806376f78621146104475780638280a25a1461046657806393e245981461047a575f80fd5b8063329c3e121161017e5780635297fae61161014e5780635297fae6146103a057806360305d62146103bf57806362065856146103e857806366435abf14610415575f80fd5b8063329c3e121461030857806335455ded1461033a5780633a1cfff614610362578063467ef06f14610381575f80fd5b806320d91b7a116101b957806320d91b7a1461027457806320e555651461029357806325e1c776146102b25780632e2194d8146102d1575f80fd5b80630118acc4146101ea5780630322ed981461020b578063151d30d11461022a5780631ec4472414610255575b5f80fd5b3480156101f5575f80fd5b50610209610204366004614e87565b61060a565b005b348015610216575f80fd5b50610209610225366004614ec2565b61063f565b348015610235575f80fd5b5061023e600a81565b60405160ff90911681526020015b60405180910390f35b348015610260575f80fd5b5061020961026f366004614e87565b61084d565b34801561027f575f80fd5b5061020961028e366004614ed9565b610858565b34801561029e575f80fd5b506102096102ad366004614f27565b610d82565b3480156102bd575f80fd5b506102096102cc366004614f3e565b610e5f565b3480156102dc575f80fd5b506102f06102eb366004614ec2565b610ed3565b6040516001600160401b03909116815260200161024c565b348015610313575f80fd5b506103226001600160991b0181565b6040516001600160a01b03909116815260200161024c565b348015610345575f80fd5b5061034f61271081565b60405161ffff909116815260200161024c565b34801561036d575f80fd5b5061020961037c366004614e87565b610ee9565b34801561038c575f80fd5b5061020961039b366004614f5f565b610ef4565b3480156103ab575f80fd5b506102096103ba366004614f78565b610fb6565b3480156103ca575f80fd5b506103d3601481565b60405163ffffffff909116815260200161024c565b3480156103f3575f80fd5b50610407610402366004614fb6565b611221565b60405190815260200161024c565b348015610420575f80fd5b506102f061042f366004614ec2565b61123a565b34801561043f575f80fd5b506104075f81565b348015610452575f80fd5b50610209610461366004614e87565b61124e565b348015610471575f80fd5b5061023e603081565b348015610485575f80fd5b50610209610494366004614ec2565b611279565b3480156104a4575f80fd5b506102096104b3366004614f78565b611344565b3480156104c3575f80fd5b506102096104d2366004614f5f565b61151c565b6104076104e5366004614fe0565b6116a5565b3480156104f5575f80fd5b506104075f80516020615b4483398151915281565b348015610515575f80fd5b506103226005600160991b0181565b34801561052f575f80fd5b5061020961053e366004614ec2565b6116d9565b34801561054e575f80fd5b506104075f80516020615b6483398151915281565b34801561056e575f80fd5b5061020961057d366004614ec2565b6118c2565b610407610590366004614ec2565b6119ff565b3480156105a0575f80fd5b5061023e601481565b3480156105b4575f80fd5b506105c86105c3366004614ec2565b611a30565b60405161024c91906150a9565b3480156105e0575f80fd5b506102f06202a30081565b3480156105f6575f80fd5b50610407610605366004615129565b611b7f565b610615838383611bda565b61063a57604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f80516020615ba48339815191526020526040808220815160e0810190925280545f80516020615b6483398151915293929190829060ff16600581111561068c5761068c615034565b600581111561069d5761069d615034565b81526020016001820180546106b190615194565b80601f01602080910402602001604051908101604052809291908181526020018280546106dd90615194565b80156107285780601f106106ff57610100808354040283529160200191610728565b820191905f5260205f20905b81548152906001019060200180831161070b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561079357610793615034565b146107c6575f8381526007830160205260409081902054905163170cc93360e21b81526106319160ff16906004016151c6565b6005600160991b016001600160a01b031663ee5b48eb6107eb8584606001515f611ee1565b6040518263ffffffff1660e01b815260040161080791906151d4565b6020604051808303815f875af1158015610823573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061084791906151e6565b50505050565b610847838383611bda565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615b648339815191529060ff16156108aa57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091191906151e6565b83602001351461093a576040516372b0a7e760e11b815260208401356004820152602401610631565b3061094b6060850160408601615211565b6001600160a01b03161461098e576109696060840160408501615211565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610631565b5f61099c606085018561522c565b905090505f805b828163ffffffff161015610c84575f6109bf606088018861522c565b8363ffffffff168181106109d5576109d5615271565b90506020028101906109e79190615285565b6109f0906153a9565b80516040519192505f916008880191610a0891615422565b90815260200160405180910390205414610a3857805160405163a41f772f60e01b815261063191906004016151d4565b5f6002885f013584604051602001610a6792919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a8191615422565b602060405180830381855afa158015610a9c573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610abf91906151e6565b90508086600801835f0151604051610ad79190615422565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff19166001836005811115610b5957610b59615034565b021790555060208201516001820190610b729082615477565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff191692841692909217909155830151610c17911685615546565b8251604051919550610c2891615422565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c7d90615559565b90506109a3565b50600483018190556001830154606490610ca890600160401b900460ff168361557b565b1015610cca57604051635943317f60e01b815260048101829052602401610631565b5f610ce0610cd786611f30565b60400151612046565b90505f610cec876121d3565b90505f600282604051610cff9190615422565b602060405180830381855afa158015610d1a573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d3d91906151e6565b9050828114610d6957604051631872fc8d60e01b81526004810182905260248101849052604401610631565b5050506009909201805460ff1916600117905550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610dcb575080546001600160401b03808416911610155b15610de95760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610e13836123ad565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610e68826123be565b610e88576040516330efa98b60e01b815260048101839052602401610631565b5f610e9283611a30565b5190506002816005811115610ea957610ea9615034565b14610ec9578060405163170cc93360e21b815260040161063191906151c6565b61084783836123f9565b5f610ee364e8d4a5100083615592565b92915050565b610847838383612673565b610efc61286c565b5f80516020615b448339815191525f80610f15846128a3565b91509150610f22826123be565b610f2e57505050610f9d565b5f82815260048085016020526040909120546001600160a01b03169082516005811115610f5d57610f5d615034565b03610f82575f83815260078501602052604081208054919055610f808282612be1565b505b610f9881610f938460400151611221565b612c3f565b505050505b610fb360015f80516020615b8483398151915255565b50565b5f8181525f80516020615b248339815191526020526040808220815160e0810190925280545f80516020615b4483398151915293929190829060ff16600381111561100357611003615034565b600381111561101457611014615034565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108a82611a30565b90506001835160038111156110a1576110a1615034565b146110c2578251604051633b0d540d60e21b815261063191906004016155b1565b6004815160058111156110d7576110d7615034565b036110ed576110e585612c65565b505050505050565b5f806111046110fb89611f30565b60400151612e4c565b509150915081841461113157846040015160405163089938b360e11b815260040161063191815260200190565b806001600160401b031683606001516001600160401b0316108061116a5750806001600160401b03168560a001516001600160401b0316115b1561119357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610631565b5f878152600587016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f610ee36001600160401b03831664e8d4a5100061557b565b5f61124482611a30565b6080015192915050565b611259838383612673565b61063a57604051635bff683f60e11b815260048101849052602401610631565b5f80516020615b448339815191525f61129183611a30565b51905060048160058111156112a8576112a8615034565b146112c8578060405163170cc93360e21b815260040161063191906151c6565b5f8381526004830160205260409020546001600160a01b0316331461130e57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610631565b5f83815260078301602090815260408083208054908490556004860190925290912054610847906001600160a01b031682612be1565b61134c61286c565b5f8181525f80516020615b248339815191526020526040808220815160e0810190925280545f80516020615b4483398151915293929190829060ff16600381111561139957611399615034565b60038111156113aa576113aa615034565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561142357611423615034565b14611444578051604051633b0d540d60e21b815261063191906004016155b1565b60046114538260400151611a30565b51600581111561146557611465615034565b146114f7575f61147485611f30565b90505f806114858360400151612e4c565b5091509150818460400151146114b15760405163089938b360e11b815260048101839052602401610631565b806001600160401b03168460c001516001600160401b031611156114f357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610631565b5050505b61150083612c65565b505061151860015f80516020615b8483398151915255565b5050565b5f80516020615b648339815191525f8061154161153885611f30565b604001516130a2565b915091508061156757604051632d07135360e01b81528115156004820152602401610631565b5f8281526006840160205260409020805461158190615194565b90505f036115a55760405163089938b360e11b815260048101839052602401610631565b60015f83815260078501602052604090205460ff1660058111156115cb576115cb615034565b146115fe575f8281526007840160205260409081902054905163170cc93360e21b81526106319160ff16906004016151c6565b5f828152600684016020526040812061161691614ddb565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6116ae61286c565b6116ba8484843461325e565b90506116d260015f80516020615b8483398151915255565b9392505050565b5f8181525f80516020615b248339815191526020526040808220815160e0810190925280545f80516020615b4483398151915293929190829060ff16600381111561172657611726615034565b600381111561173757611737615034565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156117b0576117b0615034565b141580156117d157506003815160038111156117ce576117ce615034565b14155b156117f2578051604051633b0d540d60e21b815261063191906004016155b1565b5f6118008260400151611a30565b905080606001516001600160401b03165f03611832576040516339b894f960e21b815260048101859052602401610631565b6005600160991b016001600160a01b031663ee5b48eb61185f846040015184606001518560800151611ee1565b6040518263ffffffff1660e01b815260040161187b91906151d4565b6020604051808303815f875af1158015611897573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118bb91906151e6565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615b64833981519152919061190990615194565b90505f0361192d5760405163089938b360e11b815260048101839052602401610631565b60015f83815260078301602052604090205460ff16600581111561195357611953615034565b14611986575f8281526007820160205260409081902054905163170cc93360e21b81526106319160ff16906004016151c6565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916119bf91906004016155cb565b6020604051808303815f875af11580156119db573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063a91906151e6565b5f611a0861286c565b611a1382333461342c565b9050611a2b60015f80516020615b8483398151915255565b919050565b611a38614e12565b5f8281525f80516020615ba4833981519152602052604090819020815160e0810190925280545f80516020615b64833981519152929190829060ff166005811115611a8557611a85615034565b6005811115611a9657611a96615034565b8152602001600182018054611aaa90615194565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad690615194565b8015611b215780601f10611af857610100808354040283529160200191611b21565b820191905f5260205f20905b815481529060010190602001808311611b0457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615b64833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611bc29086908690615655565b90815260200160405180910390205491505092915050565b5f8381525f80516020615b248339815191526020526040808220815160e0810190925280545f80516020615b448339815191529284929091829060ff166003811115611c2857611c28615034565b6003811115611c3957611c39615034565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611caf82611a30565b9050600283516003811115611cc657611cc6615034565b14611ce7578251604051633b0d540d60e21b815261063191906004016155b1565b60208301516001600160a01b03163314611d8a575f828152600485016020526040902054336001600160a01b0390911603611d84575f82815260048501602052604090205460a0820151611d4b91600160b01b90046001600160401b031690615664565b6001600160401b0316421015611d7f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610631565b611d8a565b336112e9565b600281516005811115611d9f57611d9f615034565b03611e7c578615611db657611db482876123f9565b505b5f8881526005850160205260409020805460ff1916600317905560608301516080820151611def918491611dea9190615684565b613701565b505f898152600586016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611e3084613858565b5f8a81526006870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506116d29350505050565b600481516005811115611e9157611e91615034565b03611ec557611e9f83613858565b5f898152600686016020526040902055611eb888612c65565b60019450505050506116d2565b805160405163170cc93360e21b815261063191906004016151c6565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611f94573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611fbb91908101906156af565b9150915080611fdd57604051636b2f19e960e01b815260040160405180910390fd5b815115612003578151604051636ba589a560e01b81526004810191909152602401610631565b60208201516001600160a01b03161561203f576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610631565b5092915050565b5f815160261461207b57815160405163cc92daa160e01b815263ffffffff909116600482015260266024820152604401610631565b5f805b60028110156120ca57612092816001615781565b61209d90600861557b565b61ffff168482815181106120b3576120b3615271565b016020015160f81c901b919091179060010161207e565b5061ffff8116156120f45760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b600481101561214f5761210b816003615781565b61211690600861557b565b63ffffffff1685612128836002615546565b8151811061213857612138615271565b016020015160f81c901b91909117906001016120f7565b5063ffffffff81161561217557604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156121ca5761218c81601f615781565b61219790600861557b565b866121a3836006615546565b815181106121b3576121b3615271565b016020015160f81c901b9190911790600101612178565b50949350505050565b60605f808335602085013560146121ef87870160408901615211565b6121fc606089018961522c565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b612282606085018561522c565b905081101561203f5781612299606086018661522c565b838181106122a9576122a9615271565b90506020028101906122bb9190615285565b6122c59080615794565b90506122d4606087018761522c565b848181106122e4576122e4615271565b90506020028101906122f69190615285565b6123009080615794565b61230d606089018961522c565b8681811061231d5761231d615271565b905060200281019061232f9190615285565b61233d906020810190615794565b61234a60608b018b61522c565b8881811061235a5761235a615271565b905060200281019061236c9190615285565b61237d906060810190604001614fb6565b60405160200161239397969594939291906157d6565b60408051601f198184030181529190529150600101612275565b6123b5613a04565b610fb381613a4f565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612444573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261246b91908101906156af565b915091508061248d57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124f491906151e6565b82511461251a578151604051636ba589a560e01b81526004810191909152602401610631565b60208201516001600160a01b031615612556576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610631565b5f806125658460400151613abd565b9150915081871461258c5760405163089938b360e11b815260048101889052602401610631565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020600101545f80516020615b44833981519152906001600160401b039081169083161115612649575f888152600482016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612668565b5f8881526004820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f80516020615b448339815191528161268c86613cae565b9050612697866123be565b6126a6576001925050506116d2565b5f8681526004830160205260409020546001600160a01b031633146126cb57336112e9565b5f86815260048301602052604090205460a08201516126fa91600160b01b90046001600160401b031690615664565b6001600160401b03168160c001516001600160401b031610156127415760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610631565b5f85156127595761275287866123f9565b9050612777565b505f8681526004830160205260409020600101546001600160401b03165b600383015460408301515f916001600160a01b03169063778c06b59061279c90611221565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b0391821660248401819052604484015281166064830152851660848201525f60a4820181905260c482015260e401602060405180830381865afa158015612812573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283691906151e6565b905080846007015f8a81526020019081526020015f205f82825461285a9190615546565b90915550501515979650505050505050565b5f80516020615b8483398151915280546001190161289d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6128ac614e12565b5f80516020615b648339815191525f806128c861153887611f30565b9150915080156128ef57604051632d07135360e01b81528115156004820152602401610631565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561292057612920615034565b600581111561293157612931615034565b815260200160018201805461294590615194565b80601f016020809104026020016040519081016040528092919081815260200182805461297190615194565b80156129bc5780601f10612993576101008083540402835291602001916129bc565b820191905f5260205f20905b81548152906001019060200180831161299f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a2757612a27615034565b14158015612a485750600181516005811115612a4557612a45615034565b14155b15612a6957805160405163170cc93360e21b815261063191906004016151c6565b600381516005811115612a7e57612a7e615034565b03612a8c5760048152612a91565b600581525b836008018160200151604051612aa79190615422565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612aeb57612aeb615034565b021790555060208201516001820190612b049082615477565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612baa57612baa615034565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612c2d575f80fd5b505af11580156110e5573d5f803e3d5ffd5b6115186001600160a01b03831682613f92565b60015f80516020615b8483398151915255565b5f8181525f80516020615b248339815191526020526040808220815160e0810190925280545f80516020615b4483398151915293929190829060ff166003811115612cb257612cb2615034565b6003811115612cc357612cc3615034565b8152815461010090046001600160a01b03166020808301919091526001808401546040808501919091526002948501546001600160401b038082166060870152600160401b820481166080870152600160801b8204811660a0870152600160c01b9091041660c090940193909352848301515f89815260058901845284812080546001600160a81b03191681559283018190559190940181905560068701909152908120805490829055929350909190808215612df1575f84815260048701602052604090205461271090612da390600160a01b900461ffff168561557b565b612dad9190615592565b915081866007015f8681526020019081526020015f205f828254612dd19190615546565b90915550612de190508284615781565b9050612df1856020015182612be1565b612e068560200151610f938760600151611221565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612e8357835160405163cc92daa160e01b815263ffffffff909116600482015260366024820152604401610631565b5f805b6002811015612ed257612e9a816001615781565b612ea590600861557b565b61ffff16868281518110612ebb57612ebb615271565b016020015160f81c901b9190911790600101612e86565b5061ffff811615612efc5760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015612f5757612f13816003615781565b612f1e90600861557b565b63ffffffff1687612f30836002615546565b81518110612f4057612f40615271565b016020015160f81c901b9190911790600101612eff565b5063ffffffff8116600314612f7f57604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015612fd457612f9681601f615781565b612fa190600861557b565b88612fad836006615546565b81518110612fbd57612fbd615271565b016020015160f81c901b9190911790600101612f82565b505f805b600881101561303357612fec816007615781565b612ff790600861557b565b6001600160401b03168961300c836026615546565b8151811061301c5761301c615271565b016020015160f81c901b9190911790600101612fd8565b505f805b60088110156130925761304b816007615781565b61305690600861557b565b6001600160401b03168a61306b83602e615546565b8151811061307b5761307b615271565b016020015160f81c901b9190911790600101613037565b5091989097509095509350505050565b5f8082516027146130d857825160405163cc92daa160e01b815263ffffffff909116600482015260276024820152604401610631565b5f805b6002811015613127576130ef816001615781565b6130fa90600861557b565b61ffff1685828151811061311057613110615271565b016020015160f81c901b91909117906001016130db565b5061ffff8116156131515760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b60048110156131ac57613168816003615781565b61317390600861557b565b63ffffffff1686613185836002615546565b8151811061319557613195615271565b016020015160f81c901b9190911790600101613154565b5063ffffffff81166002146131d457604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613229576131eb81601f615781565b6131f690600861557b565b87613202836006615546565b8151811061321257613212615271565b016020015160f81c901b91909117906001016131d7565b505f8660268151811061323e5761323e615271565b016020015191976001600160f81b03199092161515965090945050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615b4483398151915290600160401b900461ffff90811690861610806132b2575061271061ffff8616115b156132d657604051635f12e6c360e11b815261ffff86166004820152602401610631565b60028101546001600160401b039081169085161015613312576040516202a06d60e11b81526001600160401b0385166004820152602401610631565b80548310806133245750806001015483115b156133455760405163222d164360e21b815260048101849052602401610631565b825f61335082610ed3565b90505f61335d8983614025565b905060405180608001604052806133713390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526004909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b03199094169516949094179190911798909816178155910151600190910180549190951667ffffffffffffffff19909116179093555090915050949350505050565b5f5f80516020615b448339815191528161344584610ed3565b90505f61345187611a30565b905061345c876123be565b61347c576040516330efa98b60e01b815260048101889052602401610631565b60028151600581111561349157613491615034565b146134b257805160405163170cc93360e21b815261063191906004016151c6565b5f8282608001516134c39190615664565b905083600201600a9054906101000a90046001600160401b031682604001516134ec919061583f565b6001600160401b0316816001600160401b0316111561352957604051636d51fe0560e11b81526001600160401b0382166004820152602401610631565b5f806135358a84613701565b915091505f8a8360405160200161356392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260058b01909152902081518154829060ff191660018360038111156135f6576135f6615034565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f8281525f80516020615ba4833981519152602052604081206002015481905f80516020615b6483398151915290600160801b90046001600160401b0316613749858261459d565b5f613753876147c0565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6137a38a858b611ee1565b6040518263ffffffff1660e01b81526004016137bf91906151d4565b6020604051808303815f875af11580156137db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ff91906151e6565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f80516020615b4483398151915290505f6138788460400151611a30565b90505f60038251600581111561389057613890615034565b14806138ae57506004825160058111156138ac576138ac615034565b145b156138be575060c08101516138fb565b6002825160058111156138d3576138d3615034565b036138df5750426138fb565b815160405163170cc93360e21b815261063191906004016151c6565b84608001516001600160401b0316816001600160401b03161161392257505f949350505050565b600383015460608601516001600160a01b039091169063778c06b59061394790611221565b60a085015160808901516040808b01515f90815260048a810160205282822060010154925160e088901b6001600160e01b0319168152908101959095526001600160401b0393841660248601529183166044850152828716606485015291909116608483015260a4820181905260c482015260e401602060405180830381865afa1580156139d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139fb91906151e6565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613a4d57604051631afcd79f60e31b815260040160405180910390fd5b565b613a57613a04565b613a6081614835565b613a6861484e565b610fb360608201356080830135613a8560c0850160a08601614fb6565b613a9560e0860160c0870161586a565b613aa6610100870160e08801615883565b613ab861012088016101008901615211565b61485e565b5f808251602e14613af357825160405163cc92daa160e01b815263ffffffff9091166004820152602e6024820152604401610631565b5f805b6002811015613b4257613b0a816001615781565b613b1590600861557b565b61ffff16858281518110613b2b57613b2b615271565b016020015160f81c901b9190911790600101613af6565b5061ffff811615613b6c5760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015613bc757613b83816003615781565b613b8e90600861557b565b63ffffffff1686613ba0836002615546565b81518110613bb057613bb0615271565b016020015160f81c901b9190911790600101613b6f565b5063ffffffff811615613bed57604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613c4257613c0481601f615781565b613c0f90600861557b565b87613c1b836006615546565b81518110613c2b57613c2b615271565b016020015160f81c901b9190911790600101613bf0565b505f805b6008811015613ca157613c5a816007615781565b613c6590600861557b565b6001600160401b031688613c7a836026615546565b81518110613c8a57613c8a615271565b016020015160f81c901b9190911790600101613c46565b5090969095509350505050565b613cb6614e12565b5f8281525f80516020615ba48339815191526020526040808220815160e0810190925280545f80516020615b6483398151915293929190829060ff166005811115613d0357613d03615034565b6005811115613d1457613d14615034565b8152602001600182018054613d2890615194565b80601f0160208091040260200160405190810160405280929190818152602001828054613d5490615194565b8015613d9f5780601f10613d7657610100808354040283529160200191613d9f565b820191905f5260205f20905b815481529060010190602001808311613d8257829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613e0d57613e0d615034565b14613e40575f8481526007830160205260409081902054905163170cc93360e21b81526106319160ff16906004016151c6565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613e8457613e84615034565b021790555060208201516001820190613e9d9082615477565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613f3b8582613701565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b80471015613fb55760405163cd78605960e01b8152306004820152602401610631565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613ffe576040519150601f19603f3d011682016040523d82523d5f602084013e614003565b606091505b505090508061063a57604051630a12f52160e11b815260040160405180910390fd5b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff1661406957604051637fab81e560e01b815260040160405180910390fd5b5f80516020615b64833981519152426140886060860160408701614fb6565b6001600160401b03161115806140c257506140a66202a30042615546565b6140b66060860160408701614fb6565b6001600160401b031610155b156140fc576140d76060850160408601614fb6565b604051635879da1360e11b81526001600160401b039091166004820152602401610631565b61411161410c60608601866158a3565b61498d565b61412161410c60808601866158a3565b60306141306020860186615794565b905014614162576141446020850185615794565b6040516326475b2f60e11b8152610631925060040190815260200190565b61416c8480615794565b90505f036141995761417e8480615794565b604051633e08a12560e11b81526004016106319291906158b7565b5f600882016141a88680615794565b6040516141b6929190615655565b908152602001604051809103902054146141ef576141d48480615794565b60405163a41f772f60e01b81526004016106319291906158b7565b6141f9835f61459d565b6040805160e08101909152815481525f908190614305906020810161421e8980615794565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614266908a018a615794565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016142af60608a0160408b01614fb6565b6001600160401b031681526020016142ca60608a018a6158a3565b6142d3906158e5565b81526020016142e560808a018a6158a3565b6142ee906158e5565b8152602001876001600160401b0316815250614af6565b5f828152600686016020526040902091935091506143238282615477565b5081600884016143338880615794565b604051614341929190615655565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061437d9085906004016151d4565b6020604051808303815f875af1158015614399573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143bd91906151e6565b6040805160e0810190915290915080600181526020016143dd8980615794565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff1916600183600581111561446c5761446c615034565b0217905550602082015160018201906144859082615477565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055806145238880615794565b604051614531929190615655565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061456f9190614fb6565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f80516020615b648339815191525f6001600160401b0380841690851611156145d1576145ca8385615684565b90506145de565b6145db8484615684565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061464057506001840154815161463c916001600160401b031690615546565b8210155b15614666576001600160401b038316606082015281815260408101516020820152614685565b82816060018181516146789190615664565b6001600160401b03169052505b606081015161469590606461583f565b602082015160018601546001600160401b0392909216916146c09190600160401b900460ff1661557b565b10156146f057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610631565b856001600160401b03168160400181815161470b9190615546565b9052506040810180516001600160401b038716919061472b908390615781565b9052506001840154604082015160649161475091600160401b90910460ff169061557b565b1015614777578060400151604051635943317f60e01b815260040161063191815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615ba48339815191526020526040812060020180545f80516020615b64833981519152919060089061480a90600160401b90046001600160401b03166159ac565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61483d613a04565b614845614ce3565b610fb381614ceb565b614856613a04565b613a4d614dd3565b614866613a04565b5f80516020615b4483398151915261ffff8416158061488a575061271061ffff8516115b156148ae57604051635f12e6c360e11b815261ffff85166004820152602401610631565b858711156148d25760405163222d164360e21b815260048101889052602401610631565b60ff831615806148e55750600a60ff8416115b156149085760405163170db35960e31b815260ff84166004820152602401610631565b95865560018601949094556002850180546001600160401b039490941669ffffffffffffffffffff1990941693909317600160401b61ffff93909316929092029190911767ffffffffffffffff60501b191660ff91909116600160501b02179055600390910180546001600160a01b0319166001600160a01b03909216919091179055565b61499a6020820182614f5f565b63ffffffff161580156149ba57506149b5602082018261522c565b151590505b15614a01576149cc6020820182614f5f565b6149d9602083018361522c565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610631565b614a0e602082018261522c565b9050614a1d6020830183614f5f565b63ffffffff161115614a36576149cc6020820182614f5f565b60015b614a46602083018361522c565b905081101561151857614a5c602083018361522c565b614a67600184615781565b818110614a7657614a76615271565b9050602002016020810190614a8b9190615211565b6001600160a01b0316614aa1602084018461522c565b83818110614ab157614ab1615271565b9050602002016020810190614ac69190615211565b6001600160a01b03161015614aee57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614a39565b5f6060826040015151603014614b1f5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614b60988a9860019892979296909590949093909291016159c7565b60405160208183030381529060405290505f5b84608001516020015151811015614bd257818560800151602001518281518110614b9f57614b9f615271565b6020026020010151604051602001614bb8929190615a81565b60408051601f198184030181529190529150600101614b73565b5060a0840151805160209182015151604051614bf2938593929101615ab7565b60405160208183030381529060405290505f5b8460a001516020015151811015614c6457818560a00151602001518281518110614c3157614c31615271565b6020026020010151604051602001614c4a929190615a81565b60408051601f198184030181529190529150600101614c05565b5060c0840151604051614c7b918391602001615af2565b6040516020818303038152906040529050600281604051614c9c9190615422565b602060405180830381855afa158015614cb7573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614cda91906151e6565b94909350915050565b613a4d613a04565b614cf3613a04565b80355f80516020615b648339815191529081556014614d186060840160408501615883565b60ff161180614d375750614d326060830160408401615883565b60ff16155b15614d6b57614d4c6060830160408401615883565b604051634a59bbff60e11b815260ff9091166004820152602401610631565b614d7b6060830160408401615883565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614dac6040830160208401614fb6565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c52613a04565b508054614de790615194565b5f825580601f10614df6575050565b601f0160209004905f5260205f2090810190610fb39190614e4f565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614e63575f8155600101614e50565b5090565b8015158114610fb3575f80fd5b803563ffffffff81168114611a2b575f80fd5b5f805f60608486031215614e99575f80fd5b833592506020840135614eab81614e67565b9150614eb960408501614e74565b90509250925092565b5f60208284031215614ed2575f80fd5b5035919050565b5f8060408385031215614eea575f80fd5b82356001600160401b03811115614eff575f80fd5b830160808186031215614f10575f80fd5b9150614f1e60208401614e74565b90509250929050565b5f6101208284031215614f38575f80fd5b50919050565b5f8060408385031215614f4f575f80fd5b82359150614f1e60208401614e74565b5f60208284031215614f6f575f80fd5b6116d282614e74565b5f8060408385031215614f89575f80fd5b614f9283614e74565b946020939093013593505050565b80356001600160401b0381168114611a2b575f80fd5b5f60208284031215614fc6575f80fd5b6116d282614fa0565b803561ffff81168114611a2b575f80fd5b5f805f60608486031215614ff2575f80fd5b83356001600160401b03811115615007575f80fd5b840160a08187031215615018575f80fd5b925061502660208501614fcf565b9150614eb960408501614fa0565b634e487b7160e01b5f52602160045260245ffd5b6006811061505857615058615034565b9052565b5f5b8381101561507657818101518382015260200161505e565b50505f910152565b5f815180845261509581602086016020860161505c565b601f01601f19169290920160200192915050565b602081526150bb602082018351615048565b5f602083015160e060408401526150d661010084018261507e565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f806020838503121561513a575f80fd5b82356001600160401b0380821115615150575f80fd5b818501915085601f830112615163575f80fd5b813581811115615171575f80fd5b866020828501011115615182575f80fd5b60209290920196919550909350505050565b600181811c908216806151a857607f821691505b602082108103614f3857634e487b7160e01b5f52602260045260245ffd5b60208101610ee38284615048565b602081525f6116d2602083018461507e565b5f602082840312156151f6575f80fd5b5051919050565b6001600160a01b0381168114610fb3575f80fd5b5f60208284031215615221575f80fd5b81356116d2816151fd565b5f808335601e19843603018112615241575f80fd5b8301803591506001600160401b0382111561525a575f80fd5b6020019150600581901b3603821315613851575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615299575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156152d9576152d96152a3565b60405290565b604080519081016001600160401b03811182821017156152d9576152d96152a3565b604051601f8201601f191681016001600160401b0381118282101715615329576153296152a3565b604052919050565b5f6001600160401b03821115615349576153496152a3565b50601f01601f191660200190565b5f82601f830112615366575f80fd5b813561537961537482615331565b615301565b81815284602083860101111561538d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153b9575f80fd5b6153c16152b7565b82356001600160401b03808211156153d7575f80fd5b6153e336838701615357565b835260208501359150808211156153f8575f80fd5b5061540536828601615357565b60208301525061541760408401614fa0565b604082015292915050565b5f825161529981846020870161505c565b601f82111561063a57805f5260205f20601f840160051c810160208510156154585750805b601f840160051c820191505b818110156118bb575f8155600101615464565b81516001600160401b03811115615490576154906152a3565b6154a48161549e8454615194565b84615433565b602080601f8311600181146154d7575f84156154c05750858301515b5f19600386901b1c1916600185901b1785556110e5565b5f85815260208120601f198616915b82811015615505578886015182559484019460019091019084016154e6565b508582101561552257878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ee357610ee3615532565b5f63ffffffff80831681810361557157615571615532565b6001019392505050565b8082028115828204841417610ee357610ee3615532565b5f826155ac57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106155c5576155c5615034565b91905290565b5f60208083525f84546155dd81615194565b806020870152604060018084165f81146155fe576001811461561a57615647565b60ff19851660408a0152604084151560051b8a01019550615647565b895f5260205f205f5b8581101561563e5781548b8201860152908301908801615623565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561203f5761203f615532565b6001600160401b0382811682821603908082111561203f5761203f615532565b8051611a2b81614e67565b5f80604083850312156156c0575f80fd5b82516001600160401b03808211156156d6575f80fd5b90840190606082870312156156e9575f80fd5b6156f16152b7565b82518152602080840151615704816151fd565b82820152604084015183811115615719575f80fd5b80850194505087601f85011261572d575f80fd5b8351925061573d61537484615331565b8381528882858701011115615750575f80fd5b61575f8483830184880161505c565b806040840152508195506157748188016156a4565b9450505050509250929050565b81810381811115610ee357610ee3615532565b5f808335601e198436030181126157a9575f80fd5b8301803591506001600160401b038211156157c2575f80fd5b602001915036819003821315613851575f80fd5b5f88516157e7818460208d0161505c565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b6001600160401b0381811683821602808216919082811461586257615862615532565b505092915050565b5f6020828403121561587a575f80fd5b6116d282614fcf565b5f60208284031215615893575f80fd5b813560ff811681146116d2575f80fd5b5f8235603e19833603018112615299575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f604082360312156158f5575f80fd5b6158fd6152df565b61590683614e74565b81526020808401356001600160401b0380821115615922575f80fd5b9085019036601f830112615934575f80fd5b813581811115615946576159466152a3565b8060051b9150615957848301615301565b8181529183018401918481019036841115615970575f80fd5b938501935b8385101561599a578435925061598a836151fd565b8282529385019390850190615975565b94860194909452509295945050505050565b5f6001600160401b0380831681810361557157615571615532565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651615a0d81602a850160208b0161505c565b865190830190615a2481602a840160208b0161505c565b60c087901b6001600160c01b031916602a9290910191820152615a56603282018660e01b6001600160e01b0319169052565b615a6f603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615a9281846020880161505c565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f8451615ac881846020890161505c565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615b0381846020880161505c565b60c09390931b6001600160c01b031916919092019081526008019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d054317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go index 6db96b902..a072d6ff7 100644 --- a/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go +++ b/abi-bindings/go/validator-manager/PoAValidatorManager/PoAValidatorManager.go @@ -79,8 +79,8 @@ type ValidatorRegistrationInput struct { // PoAValidatorManagerMetaData contains all meta data concerning the PoAValidatorManager contract. var PoAValidatorManagerMetaData = &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\":\"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_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"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\":\"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\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registeredValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"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\":\"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\":\"InvalidNodeID\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"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\":\"InvalidSubnetConversionID\",\"inputs\":[{\"name\":\"encodedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expectedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"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\":\"NodeAlreadyRegistered\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"PChainOwnerAddressesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRegistrationStatus\",\"inputs\":[{\"name\":\"validRegistration\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]", - Bin: "0x608060405234801561000f575f80fd5b506040516139d53803806139d583398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6138888061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b610149610144366004612c30565b610312565b005b610149610159366004612c5f565b610529565b61014961016c366004612cad565b610a15565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a1366004612c30565b610a23565b6040516001600160401b03909116815260200161018a565b610149610a37565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b610149610247366004612c30565b610a4a565b6101cd61025a366004612cdc565b610a5f565b61014961026d366004612cad565b610a7b565b6102216005600160991b0181565b6101cd5f8051602061383c83398151915281565b6101496102a2366004612c30565b610c04565b6101e3601481565b6101496102bd366004612d35565b610d41565b6102d56102d0366004612c30565b610e4f565b60405161018a9190612df2565b6101a66202a30081565b6101496102fa366004612e72565b610f9e565b6101cd61030d366004612e94565b610fdb565b5f8181525f8051602061385c8339815191526020526040808220815160e0810190925280545f8051602061383c83398151915293929190829060ff16600581111561035f5761035f612d71565b600581111561037057610370612d71565b815260200160018201805461038490612eff565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612eff565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561046657610466612d71565b146104a2575f8381526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612f37565b60405180910390fd5b6005600160991b016001600160a01b031663ee5b48eb6104c78584606001515f611036565b6040518263ffffffff1660e01b81526004016104e39190612f45565b6020604051808303815f875af11580156104ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105239190612f57565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061383c8339815191529060ff161561057b57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105e29190612f57565b83602001351461060b576040516372b0a7e760e11b815260208401356004820152602401610499565b3061061c6060850160408601612e72565b6001600160a01b03161461065f5761063a6060840160408501612e72565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f61066d6060850185612f6e565b905090505f805b828163ffffffff161015610955575f6106906060880188612f6e565b8363ffffffff168181106106a6576106a6612fb3565b90506020028101906106b89190612fc7565b6106c1906130eb565b80516040519192505f9160088801916106d991613164565b9081526020016040518091039020541461070957805160405163a41f772f60e01b81526104999190600401612f45565b5f6002885f01358460405160200161073892919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261075291613164565b602060405180830381855afa15801561076d573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906107909190612f57565b90508086600801835f01516040516107a89190613164565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff1916600183600581111561082a5761082a612d71565b02179055506020820151600182019061084390826131c0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff1916928416929092179091558301516108e8911685613293565b82516040519195506108f991613164565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a350508061094e906132a6565b9050610674565b50600483018190555f61097361096a86611085565b6040015161119b565b90505f61097f87611328565b90505f6002826040516109929190613164565b602060405180830381855afa1580156109ad573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109d09190612f57565b90508281146109fc57604051631872fc8d60e01b81526004810182905260248101849052604401610499565b5050506009909201805460ff1916600117905550505050565b610a1e81611502565b505050565b5f610a2d82610e4f565b6080015192915050565b610a3f611840565b610a485f61189b565b565b610a52611840565b610a5b8161190b565b5050565b5f610a68611840565b610a728383611bef565b90505b92915050565b5f8051602061383c8339815191525f80610aa0610a9785611085565b60400151612167565b9150915080610ac657604051632d07135360e01b81528115156004820152602401610499565b5f82815260068401602052604090208054610ae090612eff565b90505f03610b045760405163089938b360e11b815260048101839052602401610499565b60015f83815260078501602052604090205460ff166005811115610b2a57610b2a612d71565b14610b5d575f8281526007840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612f37565b5f8281526006840160205260408120610b7591612ba4565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061383c8339815191529190610c4b90612eff565b90505f03610c6f5760405163089938b360e11b815260048101839052602401610499565b60015f83815260078301602052604090205460ff166005811115610c9557610c95612d71565b14610cc8575f8281526007820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612f37565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91610d0191906004016132c8565b6020604051808303815f875af1158015610d1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1e9190612f57565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610d855750825b90505f826001600160401b03166001148015610da05750303b155b905081158015610dae575080155b15610dcc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610df657845460ff60401b1916600160401b1785555b610e008787612323565b8315610e4657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610e57612bdb565b5f8281525f8051602061385c833981519152602052604090819020815160e0810190925280545f8051602061383c833981519152929190829060ff166005811115610ea457610ea4612d71565b6005811115610eb557610eb5612d71565b8152602001600182018054610ec990612eff565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef590612eff565b8015610f405780601f10610f1757610100808354040283529160200191610f40565b820191905f5260205f20905b815481529060010190602001808311610f2357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b610fa6611840565b6001600160a01b038116610fcf57604051631e4fbdf760e01b81525f6004820152602401610499565b610fd88161189b565b50565b6040515f905f8051602061383c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061101e9086908690613352565b90815260200160405180910390205491505092915050565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156110e9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526111109190810190613370565b915091508061113257604051636b2f19e960e01b815260040160405180910390fd5b815115611158578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b031615611194576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f81516026146111d057815160405163cc92daa160e01b815263ffffffff909116600482015260266024820152604401610499565b5f805b600281101561121f576111e7816001613442565b6111f2906008613455565b61ffff1684828151811061120857611208612fb3565b016020015160f81c901b91909117906001016111d3565b5061ffff8116156112495760405163407b587360e01b815261ffff82166004820152602401610499565b5f805b60048110156112a457611260816003613442565b61126b906008613455565b63ffffffff168561127d836002613293565b8151811061128d5761128d612fb3565b016020015160f81c901b919091179060010161124c565b5063ffffffff8116156112ca57604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561131f576112e181601f613442565b6112ec906008613455565b866112f8836006613293565b8151811061130857611308612fb3565b016020015160f81c901b91909117906001016112cd565b50949350505050565b60605f8083356020850135601461134487870160408901612e72565b6113516060890189612f6e565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b6113d76060850185612f6e565b905081101561119457816113ee6060860186612f6e565b838181106113fe576113fe612fb3565b90506020028101906114109190612fc7565b61141a908061346c565b90506114296060870187612f6e565b8481811061143957611439612fb3565b905060200281019061144b9190612fc7565b611455908061346c565b6114626060890189612f6e565b8681811061147257611472612fb3565b90506020028101906114849190612fc7565b61149290602081019061346c565b61149f60608b018b612f6e565b888181106114af576114af612fb3565b90506020028101906114c19190612fc7565b6114d29060608101906040016134ae565b6040516020016114e897969594939291906134c7565b60408051601f1981840301815291905291506001016113ca565b5f61150b612bdb565b5f8051602061383c8339815191525f80611527610a9787611085565b91509150801561154e57604051632d07135360e01b81528115156004820152602401610499565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561157f5761157f612d71565b600581111561159057611590612d71565b81526020016001820180546115a490612eff565b80601f01602080910402602001604051908101604052809291908181526020018280546115d090612eff565b801561161b5780601f106115f25761010080835404028352916020019161161b565b820191905f5260205f20905b8154815290600101906020018083116115fe57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561168657611686612d71565b141580156116a757506001815160058111156116a4576116a4612d71565b14155b156116c857805160405163170cc93360e21b81526104999190600401612f37565b6003815160058111156116dd576116dd612d71565b036116eb57600481526116f0565b600581525b8360080181602001516040516117069190613164565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561174a5761174a612d71565b02179055506020820151600182019061176390826131c0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790558051600581111561180957611809612d71565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336118727f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610a485760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611913612bdb565b5f8281525f8051602061385c8339815191526020526040808220815160e0810190925280545f8051602061383c83398151915293929190829060ff16600581111561196057611960612d71565b600581111561197157611971612d71565b815260200160018201805461198590612eff565b80601f01602080910402602001604051908101604052809291908181526020018280546119b190612eff565b80156119fc5780601f106119d3576101008083540402835291602001916119fc565b820191905f5260205f20905b8154815290600101906020018083116119df57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115611a6a57611a6a612d71565b14611a9d575f8481526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612f37565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115611ae157611ae1612d71565b021790555060208201516001820190611afa90826131c0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f611b98858261233d565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16611c3357604051637fab81e560e01b815260040160405180910390fd5b5f8051602061383c83398151915242611c5260608601604087016134ae565b6001600160401b0316111580611c8c5750611c706202a30042613293565b611c8060608601604087016134ae565b6001600160401b031610155b15611cc657611ca160608501604086016134ae565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b611cdb611cd66060860186613530565b612494565b611ceb611cd66080860186613530565b6030611cfa602086018661346c565b905014611d2c57611d0e602085018561346c565b6040516326475b2f60e11b8152610499925060040190815260200190565b611d36848061346c565b90505f03611d6357611d48848061346c565b604051633e08a12560e11b8152600401610499929190613544565b5f60088201611d72868061346c565b604051611d80929190613352565b90815260200160405180910390205414611db957611d9e848061346c565b60405163a41f772f60e01b8152600401610499929190613544565b611dc3835f6125fd565b6040805160e08101909152815481525f908190611ecf9060208101611de8898061346c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611e30908a018a61346c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611e7960608a0160408b016134ae565b6001600160401b03168152602001611e9460608a018a613530565b611e9d90613572565b8152602001611eaf60808a018a613530565b611eb890613572565b8152602001876001600160401b03168152506127d7565b5f82815260068601602052604090209193509150611eed82826131c0565b508160088401611efd888061346c565b604051611f0b929190613352565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611f47908590600401612f45565b6020604051808303815f875af1158015611f63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f879190612f57565b6040805160e081019091529091508060018152602001611fa7898061346c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff1916600183600581111561203657612036612d71565b02179055506020820151600182019061204f90826131c0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055806120ed888061346c565b6040516120fb929190613352565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061213991906134ae565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f80825160271461219d57825160405163cc92daa160e01b815263ffffffff909116600482015260276024820152604401610499565b5f805b60028110156121ec576121b4816001613442565b6121bf906008613455565b61ffff168582815181106121d5576121d5612fb3565b016020015160f81c901b91909117906001016121a0565b5061ffff8116156122165760405163407b587360e01b815261ffff82166004820152602401610499565b5f805b60048110156122715761222d816003613442565b612238906008613455565b63ffffffff168661224a836002613293565b8151811061225a5761225a612fb3565b016020015160f81c901b9190911790600101612219565b5063ffffffff811660021461229957604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156122ee576122b081601f613442565b6122bb906008613455565b876122c7836006613293565b815181106122d7576122d7612fb3565b016020015160f81c901b919091179060010161229c565b505f8660268151811061230357612303612fb3565b016020015191976001600160f81b03199092161515965090945050505050565b61232b6129c4565b61233482612a0d565b610a5b81612a26565b5f8281525f8051602061385c833981519152602052604081206002015481905f8051602061383c83398151915290600160801b90046001600160401b031661238585826125fd565b5f61238f87612a37565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6123df8a858b611036565b6040518263ffffffff1660e01b81526004016123fb9190612f45565b6020604051808303815f875af1158015612417573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061243b9190612f57565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b6124a16020820182612cad565b63ffffffff161580156124c157506124bc6020820182612f6e565b151590505b15612508576124d36020820182612cad565b6124e06020830183612f6e565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b6125156020820182612f6e565b90506125246020830183612cad565b63ffffffff16111561253d576124d36020820182612cad565b60015b61254d6020830183612f6e565b9050811015610a5b576125636020830183612f6e565b61256e600184613442565b81811061257d5761257d612fb3565b90506020020160208101906125929190612e72565b6001600160a01b03166125a86020840184612f6e565b838181106125b8576125b8612fb3565b90506020020160208101906125cd9190612e72565b6001600160a01b031610156125f557604051630dbc8d5f60e31b815260040160405180910390fd5b600101612540565b5f8051602061383c8339815191525f6001600160401b0380841690851611156126315761262a8385613639565b905061263e565b61263b8484613639565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806126a057506001840154815161269c916001600160401b031690613293565b8210155b156126c6576001600160401b0383166060820152818152604081015160208201526126e5565b82816060018181516126d89190613659565b6001600160401b03169052505b60608101516126f5906064613679565b602082015160018601546001600160401b0392909216916127209190600160401b900460ff16613455565b101561275057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b856001600160401b03168160400181815161276b9190613293565b9052506040810180516001600160401b038716919061278b908390613442565b905250805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f60608260400151516030146128005760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98612841988a9860019892979296909590949093909291016136a4565b60405160208183030381529060405290505f5b846080015160200151518110156128b35781856080015160200151828151811061288057612880612fb3565b602002602001015160405160200161289992919061375e565b60408051601f198184030181529190529150600101612854565b5060a08401518051602091820151516040516128d3938593929101613794565b60405160208183030381529060405290505f5b8460a00151602001515181101561294557818560a0015160200151828151811061291257612912612fb3565b602002602001015160405160200161292b92919061375e565b60408051601f1981840301815291905291506001016128e6565b5060c084015160405161295c9183916020016137cf565b604051602081830303815290604052905060028160405161297d9190613164565b602060405180830381855afa158015612998573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906129bb9190612f57565b94909350915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610a4857604051631afcd79f60e31b815260040160405180910390fd5b612a156129c4565b612a1d612aac565b610fd881612ab4565b612a2e6129c4565b610fd881612b9c565b5f8181525f8051602061385c8339815191526020526040812060020180545f8051602061383c8339815191529190600890612a8190600160401b90046001600160401b0316613800565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610a486129c4565b612abc6129c4565b80355f8051602061383c8339815191529081556014612ae1606084016040850161381b565b60ff161180612b005750612afb606083016040840161381b565b60ff16155b15612b3457612b15606083016040840161381b565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b612b44606083016040840161381b565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055612b7560408301602084016134ae565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b610fa66129c4565b508054612bb090612eff565b5f825580601f10612bbf575050565b601f0160209004905f5260205f2090810190610fd89190612c18565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612c2c575f8155600101612c19565b5090565b5f60208284031215612c40575f80fd5b5035919050565b803563ffffffff81168114612c5a575f80fd5b919050565b5f8060408385031215612c70575f80fd5b82356001600160401b03811115612c85575f80fd5b830160808186031215612c96575f80fd5b9150612ca460208401612c47565b90509250929050565b5f60208284031215612cbd575f80fd5b610a7282612c47565b80356001600160401b0381168114612c5a575f80fd5b5f8060408385031215612ced575f80fd5b82356001600160401b03811115612d02575f80fd5b830160a08186031215612d13575f80fd5b9150612ca460208401612cc6565b6001600160a01b0381168114610fd8575f80fd5b5f808284036080811215612d47575f80fd5b6060811215612d54575f80fd5b508291506060830135612d6681612d21565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60068110612da157634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612dbf578181015183820152602001612da7565b50505f910152565b5f8151808452612dde816020860160208601612da5565b601f01601f19169290920160200192915050565b60208152612e04602082018351612d85565b5f602083015160e06040840152612e1f610100840182612dc7565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f60208284031215612e82575f80fd5b8135612e8d81612d21565b9392505050565b5f8060208385031215612ea5575f80fd5b82356001600160401b0380821115612ebb575f80fd5b818501915085601f830112612ece575f80fd5b813581811115612edc575f80fd5b866020828501011115612eed575f80fd5b60209290920196919550909350505050565b600181811c90821680612f1357607f821691505b602082108103612f3157634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610a758284612d85565b602081525f610a726020830184612dc7565b5f60208284031215612f67575f80fd5b5051919050565b5f808335601e19843603018112612f83575f80fd5b8301803591506001600160401b03821115612f9c575f80fd5b6020019150600581901b360382131561248d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112612fdb575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561301b5761301b612fe5565b60405290565b604080519081016001600160401b038111828210171561301b5761301b612fe5565b604051601f8201601f191681016001600160401b038111828210171561306b5761306b612fe5565b604052919050565b5f6001600160401b0382111561308b5761308b612fe5565b50601f01601f191660200190565b5f82601f8301126130a8575f80fd5b81356130bb6130b682613073565b613043565b8181528460208386010111156130cf575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156130fb575f80fd5b613103612ff9565b82356001600160401b0380821115613119575f80fd5b61312536838701613099565b8352602085013591508082111561313a575f80fd5b5061314736828601613099565b60208301525061315960408401612cc6565b604082015292915050565b5f8251612fdb818460208701612da5565b601f821115610a1e57805f5260205f20601f840160051c8101602085101561319a5750805b601f840160051c820191505b818110156131b9575f81556001016131a6565b5050505050565b81516001600160401b038111156131d9576131d9612fe5565b6131ed816131e78454612eff565b84613175565b602080601f831160018114613220575f84156132095750858301515b5f19600386901b1c1916600185901b178555613277565b5f85815260208120601f198616915b8281101561324e5788860151825594840194600190910190840161322f565b508582101561326b57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a7557610a7561327f565b5f63ffffffff8083168181036132be576132be61327f565b6001019392505050565b5f60208083525f84546132da81612eff565b806020870152604060018084165f81146132fb576001811461331757613344565b60ff19851660408a0152604084151560051b8a01019550613344565b895f5260205f205f5b8581101561333b5781548b8201860152908301908801613320565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b80518015158114612c5a575f80fd5b5f8060408385031215613381575f80fd5b82516001600160401b0380821115613397575f80fd5b90840190606082870312156133aa575f80fd5b6133b2612ff9565b825181526020808401516133c581612d21565b828201526040840151838111156133da575f80fd5b80850194505087601f8501126133ee575f80fd5b835192506133fe6130b684613073565b8381528882858701011115613411575f80fd5b61342084838301848801612da5565b80604084015250819550613435818801613361565b9450505050509250929050565b81810381811115610a7557610a7561327f565b8082028115828204841417610a7557610a7561327f565b5f808335601e19843603018112613481575f80fd5b8301803591506001600160401b0382111561349a575f80fd5b60200191503681900382131561248d575f80fd5b5f602082840312156134be575f80fd5b610a7282612cc6565b5f88516134d8818460208d01612da5565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b5f8235603e19833603018112612fdb575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215613582575f80fd5b61358a613021565b61359383612c47565b81526020808401356001600160401b03808211156135af575f80fd5b9085019036601f8301126135c1575f80fd5b8135818111156135d3576135d3612fe5565b8060051b91506135e4848301613043565b81815291830184019184810190368411156135fd575f80fd5b938501935b83851015613627578435925061361783612d21565b8282529385019390850190613602565b94860194909452509295945050505050565b6001600160401b038281168282160390808211156111945761119461327f565b6001600160401b038181168382160190808211156111945761119461327f565b6001600160401b0381811683821602808216919082811461369c5761369c61327f565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b1660268401525086516136ea81602a850160208b01612da5565b86519083019061370181602a840160208b01612da5565b60c087901b6001600160c01b031916602a9290910191820152613733603282018660e01b6001600160e01b0319169052565b61374c603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f835161376f818460208801612da5565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f84516137a5818460208901612da5565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f83516137e0818460208801612da5565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f6001600160401b038083168181036132be576132be61327f565b5f6020828403121561382b575f80fd5b813560ff81168114612e8d575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", + 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\":\"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_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"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\":\"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\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"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\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"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\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registeredValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"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\":\"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\":\"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\":\"InvalidNodeID\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"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\":\"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\":\"NodeAlreadyRegistered\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"PChainOwnerAddressesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedRegistrationStatus\",\"inputs\":[{\"name\":\"validRegistration\",\"type\":\"bool\",\"internalType\":\"bool\"}]}]", + Bin: "0x608060405234801561000f575f80fd5b50604051613a5c380380613a5c83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61390f8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c80639ba96b86116100b4578063c974d1b611610079578063c974d1b6146102a7578063d588c18f146102af578063d5f20ff6146102c2578063df93d8de146102e2578063f2fde38b146102ec578063fd7ac5e7146102ff575f80fd5b80639ba96b861461024c578063a3a65e481461025f578063b771b3bc14610272578063bc5fbfec14610280578063bee0a03f14610294575f80fd5b8063715018a6116100fa578063715018a6146101be578063732214f8146101c65780638280a25a146101db5780638da5cb5b146101f557806397fb70d414610239575f80fd5b80630322ed981461013657806320d91b7a1461014b578063467ef06f1461015e57806360305d621461017157806366435abf14610193575b5f80fd5b610149610144366004612cb7565b610312565b005b610149610159366004612ce6565b610529565b61014961016c366004612d34565b610a53565b610179601481565b60405163ffffffff90911681526020015b60405180910390f35b6101a66101a1366004612cb7565b610a61565b6040516001600160401b03909116815260200161018a565b610149610a75565b6101cd5f81565b60405190815260200161018a565b6101e3603081565b60405160ff909116815260200161018a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03165b6040516001600160a01b03909116815260200161018a565b610149610247366004612cb7565b610a88565b6101cd61025a366004612d63565b610a9d565b61014961026d366004612d34565b610ab9565b6102216005600160991b0181565b6101cd5f805160206138c383398151915281565b6101496102a2366004612cb7565b610c42565b6101e3601481565b6101496102bd366004612dbc565b610d7f565b6102d56102d0366004612cb7565b610e8d565b60405161018a9190612e79565b6101a66202a30081565b6101496102fa366004612ef9565b610fdc565b6101cd61030d366004612f1b565b611019565b5f8181525f805160206138e38339815191526020526040808220815160e0810190925280545f805160206138c383398151915293929190829060ff16600581111561035f5761035f612df8565b600581111561037057610370612df8565b815260200160018201805461038490612f86565b80601f01602080910402602001604051908101604052809291908181526020018280546103b090612f86565b80156103fb5780601f106103d2576101008083540402835291602001916103fb565b820191905f5260205f20905b8154815290600101906020018083116103de57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561046657610466612df8565b146104a2575f8381526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612fbe565b60405180910390fd5b6005600160991b016001600160a01b031663ee5b48eb6104c78584606001515f611074565b6040518263ffffffff1660e01b81526004016104e39190612fcc565b6020604051808303815f875af11580156104ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105239190612fde565b50505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f805160206138c38339815191529060ff161561057b57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105e29190612fde565b83602001351461060b576040516372b0a7e760e11b815260208401356004820152602401610499565b3061061c6060850160408601612ef9565b6001600160a01b03161461065f5761063a6060840160408501612ef9565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610499565b5f61066d6060850185612ff5565b905090505f805b828163ffffffff161015610955575f6106906060880188612ff5565b8363ffffffff168181106106a6576106a661303a565b90506020028101906106b8919061304e565b6106c190613172565b80516040519192505f9160088801916106d9916131eb565b9081526020016040518091039020541461070957805160405163a41f772f60e01b81526104999190600401612fcc565b5f6002885f01358460405160200161073892919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610752916131eb565b602060405180830381855afa15801561076d573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906107909190612fde565b90508086600801835f01516040516107a891906131eb565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff1916600183600581111561082a5761082a612df8565b0217905550602082015160018201906108439082613247565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff1916928416929092179091558301516108e891168561331a565b82516040519195506108f9916131eb565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a350508061094e9061332d565b9050610674565b5060048301819055600183015460649061097990600160401b900460ff168361334f565b101561099b57604051635943317f60e01b815260048101829052602401610499565b5f6109b16109a8866110c3565b604001516111d9565b90505f6109bd87611366565b90505f6002826040516109d091906131eb565b602060405180830381855afa1580156109eb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a0e9190612fde565b9050828114610a3a57604051631872fc8d60e01b81526004810182905260248101849052604401610499565b5050506009909201805460ff1916600117905550505050565b610a5c81611540565b505050565b5f610a6b82610e8d565b6080015192915050565b610a7d61187e565b610a865f6118d9565b565b610a9061187e565b610a9981611949565b5050565b5f610aa661187e565b610ab08383611c2d565b90505b92915050565b5f805160206138c38339815191525f80610ade610ad5856110c3565b604001516121a5565b9150915080610b0457604051632d07135360e01b81528115156004820152602401610499565b5f82815260068401602052604090208054610b1e90612f86565b90505f03610b425760405163089938b360e11b815260048101839052602401610499565b60015f83815260078501602052604090205460ff166005811115610b6857610b68612df8565b14610b9b575f8281526007840160205260409081902054905163170cc93360e21b81526104999160ff1690600401612fbe565b5f8281526006840160205260408120610bb391612c2b565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f805160206138c38339815191529190610c8990612f86565b90505f03610cad5760405163089938b360e11b815260048101839052602401610499565b60015f83815260078301602052604090205460ff166005811115610cd357610cd3612df8565b14610d06575f8281526007820160205260409081902054905163170cc93360e21b81526104999160ff1690600401612fbe565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91610d3f9190600401613366565b6020604051808303815f875af1158015610d5b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5c9190612fde565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610dc35750825b90505f826001600160401b03166001148015610dde5750303b155b905081158015610dec575080155b15610e0a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e3457845460ff60401b1916600160401b1785555b610e3e8787612361565b8315610e8457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b610e95612c62565b5f8281525f805160206138e3833981519152602052604090819020815160e0810190925280545f805160206138c3833981519152929190829060ff166005811115610ee257610ee2612df8565b6005811115610ef357610ef3612df8565b8152602001600182018054610f0790612f86565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3390612f86565b8015610f7e5780601f10610f5557610100808354040283529160200191610f7e565b820191905f5260205f20905b815481529060010190602001808311610f6157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b610fe461187e565b6001600160a01b03811661100d57604051631e4fbdf760e01b81525f6004820152602401610499565b611016816118d9565b50565b6040515f905f805160206138c3833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061105c90869086906133f0565b90815260200160405180910390205491505092915050565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611127573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261114e919081019061340e565b915091508061117057604051636b2f19e960e01b815260040160405180910390fd5b815115611196578151604051636ba589a560e01b81526004810191909152602401610499565b60208201516001600160a01b0316156111d2576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610499565b5092915050565b5f815160261461120e57815160405163cc92daa160e01b815263ffffffff909116600482015260266024820152604401610499565b5f805b600281101561125d576112258160016134e0565b61123090600861334f565b61ffff168482815181106112465761124661303a565b016020015160f81c901b9190911790600101611211565b5061ffff8116156112875760405163407b587360e01b815261ffff82166004820152602401610499565b5f805b60048110156112e25761129e8160036134e0565b6112a990600861334f565b63ffffffff16856112bb83600261331a565b815181106112cb576112cb61303a565b016020015160f81c901b919091179060010161128a565b5063ffffffff81161561130857604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561135d5761131f81601f6134e0565b61132a90600861334f565b8661133683600661331a565b815181106113465761134661303a565b016020015160f81c901b919091179060010161130b565b50949350505050565b60605f8083356020850135601461138287870160408901612ef9565b61138f6060890189612ff5565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b6114156060850185612ff5565b90508110156111d2578161142c6060860186612ff5565b8381811061143c5761143c61303a565b905060200281019061144e919061304e565b61145890806134f3565b90506114676060870187612ff5565b848181106114775761147761303a565b9050602002810190611489919061304e565b61149390806134f3565b6114a06060890189612ff5565b868181106114b0576114b061303a565b90506020028101906114c2919061304e565b6114d09060208101906134f3565b6114dd60608b018b612ff5565b888181106114ed576114ed61303a565b90506020028101906114ff919061304e565b611510906060810190604001613535565b604051602001611526979695949392919061354e565b60408051601f198184030181529190529150600101611408565b5f611549612c62565b5f805160206138c38339815191525f80611565610ad5876110c3565b91509150801561158c57604051632d07135360e01b81528115156004820152602401610499565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156115bd576115bd612df8565b60058111156115ce576115ce612df8565b81526020016001820180546115e290612f86565b80601f016020809104026020016040519081016040528092919081815260200182805461160e90612f86565b80156116595780601f1061163057610100808354040283529160200191611659565b820191905f5260205f20905b81548152906001019060200180831161163c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156116c4576116c4612df8565b141580156116e557506001815160058111156116e2576116e2612df8565b14155b1561170657805160405163170cc93360e21b81526104999190600401612fbe565b60038151600581111561171b5761171b612df8565b03611729576004815261172e565b600581525b83600801816020015160405161174491906131eb565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561178857611788612df8565b0217905550602082015160018201906117a19082613247565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790558051600581111561184757611847612df8565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b336118b07f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610a865760405163118cdaa760e01b8152336004820152602401610499565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611951612c62565b5f8281525f805160206138e38339815191526020526040808220815160e0810190925280545f805160206138c383398151915293929190829060ff16600581111561199e5761199e612df8565b60058111156119af576119af612df8565b81526020016001820180546119c390612f86565b80601f01602080910402602001604051908101604052809291908181526020018280546119ef90612f86565b8015611a3a5780601f10611a1157610100808354040283529160200191611a3a565b820191905f5260205f20905b815481529060010190602001808311611a1d57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115611aa857611aa8612df8565b14611adb575f8481526007830160205260409081902054905163170cc93360e21b81526104999160ff1690600401612fbe565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115611b1f57611b1f612df8565b021790555060208201516001820190611b389082613247565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f611bd6858261237b565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16611c7157604051637fab81e560e01b815260040160405180910390fd5b5f805160206138c383398151915242611c906060860160408701613535565b6001600160401b0316111580611cca5750611cae6202a3004261331a565b611cbe6060860160408701613535565b6001600160401b031610155b15611d0457611cdf6060850160408601613535565b604051635879da1360e11b81526001600160401b039091166004820152602401610499565b611d19611d1460608601866135b7565b6124d2565b611d29611d1460808601866135b7565b6030611d3860208601866134f3565b905014611d6a57611d4c60208501856134f3565b6040516326475b2f60e11b8152610499925060040190815260200190565b611d7484806134f3565b90505f03611da157611d8684806134f3565b604051633e08a12560e11b81526004016104999291906135cb565b5f60088201611db086806134f3565b604051611dbe9291906133f0565b90815260200160405180910390205414611df757611ddc84806134f3565b60405163a41f772f60e01b81526004016104999291906135cb565b611e01835f61263b565b6040805160e08101909152815481525f908190611f0d9060208101611e2689806134f3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190611e6e908a018a6134f3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001611eb760608a0160408b01613535565b6001600160401b03168152602001611ed260608a018a6135b7565b611edb906135f9565b8152602001611eed60808a018a6135b7565b611ef6906135f9565b8152602001876001600160401b031681525061285e565b5f82815260068601602052604090209193509150611f2b8282613247565b508160088401611f3b88806134f3565b604051611f499291906133f0565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90611f85908590600401612fcc565b6020604051808303815f875af1158015611fa1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fc59190612fde565b6040805160e081019091529091508060018152602001611fe589806134f3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff1916600183600581111561207457612074612df8565b02179055506020820151600182019061208d9082613247565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790558061212b88806134f3565b6040516121399291906133f0565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906121779190613535565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f8082516027146121db57825160405163cc92daa160e01b815263ffffffff909116600482015260276024820152604401610499565b5f805b600281101561222a576121f28160016134e0565b6121fd90600861334f565b61ffff168582815181106122135761221361303a565b016020015160f81c901b91909117906001016121de565b5061ffff8116156122545760405163407b587360e01b815261ffff82166004820152602401610499565b5f805b60048110156122af5761226b8160036134e0565b61227690600861334f565b63ffffffff168661228883600261331a565b815181106122985761229861303a565b016020015160f81c901b9190911790600101612257565b5063ffffffff81166002146122d757604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561232c576122ee81601f6134e0565b6122f990600861334f565b8761230583600661331a565b815181106123155761231561303a565b016020015160f81c901b91909117906001016122da565b505f866026815181106123415761234161303a565b016020015191976001600160f81b03199092161515965090945050505050565b612369612a4b565b61237282612a94565b610a9981612aad565b5f8281525f805160206138e3833981519152602052604081206002015481905f805160206138c383398151915290600160801b90046001600160401b03166123c3858261263b565b5f6123cd87612abe565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb61241d8a858b611074565b6040518263ffffffff1660e01b81526004016124399190612fcc565b6020604051808303815f875af1158015612455573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124799190612fde565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b6124df6020820182612d34565b63ffffffff161580156124ff57506124fa6020820182612ff5565b151590505b15612546576125116020820182612d34565b61251e6020830183612ff5565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610499565b6125536020820182612ff5565b90506125626020830183612d34565b63ffffffff16111561257b576125116020820182612d34565b60015b61258b6020830183612ff5565b9050811015610a99576125a16020830183612ff5565b6125ac6001846134e0565b8181106125bb576125bb61303a565b90506020020160208101906125d09190612ef9565b6001600160a01b03166125e66020840184612ff5565b838181106125f6576125f661303a565b905060200201602081019061260b9190612ef9565b6001600160a01b0316101561263357604051630dbc8d5f60e31b815260040160405180910390fd5b60010161257e565b5f805160206138c38339815191525f6001600160401b03808416908516111561266f5761266883856136c0565b905061267c565b61267984846136c0565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806126de5750600184015481516126da916001600160401b03169061331a565b8210155b15612704576001600160401b038316606082015281815260408101516020820152612723565b828160600181815161271691906136e0565b6001600160401b03169052505b6060810151612733906064613700565b602082015160018601546001600160401b03929092169161275e9190600160401b900460ff1661334f565b101561278e57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610499565b856001600160401b0316816040018181516127a9919061331a565b9052506040810180516001600160401b03871691906127c99083906134e0565b905250600184015460408201516064916127ee91600160401b90910460ff169061334f565b1015612815578060400151604051635943317f60e01b815260040161049991815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f60608260400151516030146128875760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f986128c8988a98600198929792969095909490939092910161372b565b60405160208183030381529060405290505f5b8460800151602001515181101561293a578185608001516020015182815181106129075761290761303a565b60200260200101516040516020016129209291906137e5565b60408051601f1981840301815291905291506001016128db565b5060a084015180516020918201515160405161295a93859392910161381b565b60405160208183030381529060405290505f5b8460a0015160200151518110156129cc57818560a001516020015182815181106129995761299961303a565b60200260200101516040516020016129b29291906137e5565b60408051601f19818403018152919052915060010161296d565b5060c08401516040516129e3918391602001613856565b6040516020818303038152906040529050600281604051612a0491906131eb565b602060405180830381855afa158015612a1f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190612a429190612fde565b94909350915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610a8657604051631afcd79f60e31b815260040160405180910390fd5b612a9c612a4b565b612aa4612b33565b61101681612b3b565b612ab5612a4b565b61101681612c23565b5f8181525f805160206138e38339815191526020526040812060020180545f805160206138c38339815191529190600890612b0890600160401b90046001600160401b0316613887565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b610a86612a4b565b612b43612a4b565b80355f805160206138c38339815191529081556014612b6860608401604085016138a2565b60ff161180612b875750612b8260608301604084016138a2565b60ff16155b15612bbb57612b9c60608301604084016138a2565b604051634a59bbff60e11b815260ff9091166004820152602401610499565b612bcb60608301604084016138a2565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055612bfc6040830160208401613535565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b610fe4612a4b565b508054612c3790612f86565b5f825580601f10612c46575050565b601f0160209004905f5260205f20908101906110169190612c9f565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115612cb3575f8155600101612ca0565b5090565b5f60208284031215612cc7575f80fd5b5035919050565b803563ffffffff81168114612ce1575f80fd5b919050565b5f8060408385031215612cf7575f80fd5b82356001600160401b03811115612d0c575f80fd5b830160808186031215612d1d575f80fd5b9150612d2b60208401612cce565b90509250929050565b5f60208284031215612d44575f80fd5b610ab082612cce565b80356001600160401b0381168114612ce1575f80fd5b5f8060408385031215612d74575f80fd5b82356001600160401b03811115612d89575f80fd5b830160a08186031215612d9a575f80fd5b9150612d2b60208401612d4d565b6001600160a01b0381168114611016575f80fd5b5f808284036080811215612dce575f80fd5b6060811215612ddb575f80fd5b508291506060830135612ded81612da8565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60068110612e2857634e487b7160e01b5f52602160045260245ffd5b9052565b5f5b83811015612e46578181015183820152602001612e2e565b50505f910152565b5f8151808452612e65816020860160208601612e2c565b601f01601f19169290920160200192915050565b60208152612e8b602082018351612e0c565b5f602083015160e06040840152612ea6610100840182612e4e565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f60208284031215612f09575f80fd5b8135612f1481612da8565b9392505050565b5f8060208385031215612f2c575f80fd5b82356001600160401b0380821115612f42575f80fd5b818501915085601f830112612f55575f80fd5b813581811115612f63575f80fd5b866020828501011115612f74575f80fd5b60209290920196919550909350505050565b600181811c90821680612f9a57607f821691505b602082108103612fb857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ab38284612e0c565b602081525f610ab06020830184612e4e565b5f60208284031215612fee575f80fd5b5051919050565b5f808335601e1984360301811261300a575f80fd5b8301803591506001600160401b03821115613023575f80fd5b6020019150600581901b36038213156124cb575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112613062575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156130a2576130a261306c565b60405290565b604080519081016001600160401b03811182821017156130a2576130a261306c565b604051601f8201601f191681016001600160401b03811182821017156130f2576130f261306c565b604052919050565b5f6001600160401b038211156131125761311261306c565b50601f01601f191660200190565b5f82601f83011261312f575f80fd5b813561314261313d826130fa565b6130ca565b818152846020838601011115613156575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215613182575f80fd5b61318a613080565b82356001600160401b03808211156131a0575f80fd5b6131ac36838701613120565b835260208501359150808211156131c1575f80fd5b506131ce36828601613120565b6020830152506131e060408401612d4d565b604082015292915050565b5f8251613062818460208701612e2c565b601f821115610a5c57805f5260205f20601f840160051c810160208510156132215750805b601f840160051c820191505b81811015613240575f815560010161322d565b5050505050565b81516001600160401b038111156132605761326061306c565b6132748161326e8454612f86565b846131fc565b602080601f8311600181146132a7575f84156132905750858301515b5f19600386901b1c1916600185901b1785556132fe565b5f85815260208120601f198616915b828110156132d5578886015182559484019460019091019084016132b6565b50858210156132f257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ab357610ab3613306565b5f63ffffffff80831681810361334557613345613306565b6001019392505050565b8082028115828204841417610ab357610ab3613306565b5f60208083525f845461337881612f86565b806020870152604060018084165f811461339957600181146133b5576133e2565b60ff19851660408a0152604084151560051b8a010195506133e2565b895f5260205f205f5b858110156133d95781548b82018601529083019088016133be565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b80518015158114612ce1575f80fd5b5f806040838503121561341f575f80fd5b82516001600160401b0380821115613435575f80fd5b9084019060608287031215613448575f80fd5b613450613080565b8251815260208084015161346381612da8565b82820152604084015183811115613478575f80fd5b80850194505087601f85011261348c575f80fd5b8351925061349c61313d846130fa565b83815288828587010111156134af575f80fd5b6134be84838301848801612e2c565b806040840152508195506134d38188016133ff565b9450505050509250929050565b81810381811115610ab357610ab3613306565b5f808335601e19843603018112613508575f80fd5b8301803591506001600160401b03821115613521575f80fd5b6020019150368190038213156124cb575f80fd5b5f60208284031215613545575f80fd5b610ab082612d4d565b5f885161355f818460208d01612e2c565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b5f8235603e19833603018112613062575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215613609575f80fd5b6136116130a8565b61361a83612cce565b81526020808401356001600160401b0380821115613636575f80fd5b9085019036601f830112613648575f80fd5b81358181111561365a5761365a61306c565b8060051b915061366b8483016130ca565b8181529183018401918481019036841115613684575f80fd5b938501935b838510156136ae578435925061369e83612da8565b8282529385019390850190613689565b94860194909452509295945050505050565b6001600160401b038281168282160390808211156111d2576111d2613306565b6001600160401b038181168382160190808211156111d2576111d2613306565b6001600160401b0381811683821602808216919082811461372357613723613306565b505092915050565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b16602684015250865161377181602a850160208b01612e2c565b86519083019061378881602a840160208b01612e2c565b60c087901b6001600160c01b031916602a92909101918201526137ba603282018660e01b6001600160e01b0319169052565b6137d3603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516137f6818460208801612e2c565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f845161382c818460208901612e2c565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351613867818460208801612e2c565b60c09390931b6001600160c01b0319169190920190815260080192915050565b5f6001600160401b0380831681810361334557613345613306565b5f602082840312156138b2575f80fd5b813560ff81168114612f14575f80fdfee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", } // PoAValidatorManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/ValidatorManager.sol b/contracts/validator-manager/ValidatorManager.sol index 03c87e8f2..4cb383899 100644 --- a/contracts/validator-manager/ValidatorManager.sol +++ b/contracts/validator-manager/ValidatorManager.sol @@ -78,6 +78,7 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida error InvalidSubnetConversionID( bytes32 encodedSubnetConversionID, bytes32 expectedSubnetConversionID ); + error InvalidTotalWeight(uint256 weight); error InvalidValidationID(bytes32 validationID); error InvalidValidatorStatus(ValidatorStatus status); error InvalidWarpMessage(); @@ -197,6 +198,12 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida } $._churnTracker.totalWeight = totalWeight; + // Rearranged equation for totalWeight < (100 / $._maximumChurnPercentage) + // Total weight must be above this value in order to not trigger churn limits with an added/removed weight of 1. + if (totalWeight * $._maximumChurnPercentage < 100) { + revert InvalidTotalWeight(totalWeight); + } + // Verify that the sha256 hash of the Subnet conversion data matches with the Warp message's subnetConversionID. bytes32 subnetConversionID = ValidatorMessages.unpackSubnetConversionMessage( _getPChainWarpMessage(messageIndex).payload @@ -575,6 +582,12 @@ abstract contract ValidatorManager is Initializable, ContextUpgradeable, IValida churnTracker.totalWeight += newValidatorWeight; churnTracker.totalWeight -= oldValidatorWeight; + // Rearranged equation for totalWeight < (100 / $._maximumChurnPercentage) + // Total weight must be above this value in order to not trigger churn limits with an added/removed weight of 1. + if (churnTracker.totalWeight * $._maximumChurnPercentage < 100) { + revert InvalidTotalWeight(churnTracker.totalWeight); + } + $._churnTracker = churnTracker; } } diff --git a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol index c85356bc9..986a23f93 100644 --- a/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/ERC20TokenStakingManagerTests.t.sol @@ -11,7 +11,8 @@ import {PoSValidatorManager} from "../PoSValidatorManager.sol"; import {ExampleRewardCalculator} from "../ExampleRewardCalculator.sol"; import { ValidatorManagerSettings, - ValidatorRegistrationInput + ValidatorRegistrationInput, + IValidatorManager } from "../interfaces/IValidatorManager.sol"; import {PoSValidatorManagerSettings} from "../interfaces/IPoSValidatorManager.sol"; import {IRewardCalculator} from "../interfaces/IRewardCalculator.sol"; @@ -31,28 +32,7 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { function setUp() public override { ValidatorManagerTest.setUp(); - // Construct the object under test - app = new ERC20TokenStakingManager(ICMInitializable.Allowed); - token = new ExampleERC20(); - rewardCalculator = new ExampleRewardCalculator(DEFAULT_REWARD_RATE); - app.initialize( - PoSValidatorManagerSettings({ - baseSettings: ValidatorManagerSettings({ - subnetID: DEFAULT_SUBNET_ID, - churnPeriodSeconds: DEFAULT_CHURN_PERIOD, - maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE - }), - minimumStakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT, - maximumStakeAmount: DEFAULT_MAXIMUM_STAKE_AMOUNT, - minimumStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, - minimumDelegationFeeBips: DEFAULT_MINIMUM_DELEGATION_FEE_BIPS, - maximumStakeMultiplier: DEFAULT_MAXIMUM_STAKE_MULTIPLIER, - rewardCalculator: rewardCalculator - }), - token - ); - validatorManager = app; - posValidatorManager = app; + _setUp(); _mockGetBlockchainID(); _mockInitializeValidatorSet(); app.initializeValidatorSet(_defaultSubnetConversionData(), 0); @@ -261,6 +241,33 @@ contract ERC20TokenStakingManagerTest is PoSValidatorManagerTest { vm.expectCall(address(token), abi.encodeCall(IERC20Mintable.mint, (account, amount))); } + function _setUp() internal override returns (IValidatorManager) { + // Construct the object under test + app = new ERC20TokenStakingManager(ICMInitializable.Allowed); + token = new ExampleERC20(); + rewardCalculator = new ExampleRewardCalculator(DEFAULT_REWARD_RATE); + app.initialize( + PoSValidatorManagerSettings({ + baseSettings: ValidatorManagerSettings({ + subnetID: DEFAULT_SUBNET_ID, + churnPeriodSeconds: DEFAULT_CHURN_PERIOD, + maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE + }), + minimumStakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT, + maximumStakeAmount: DEFAULT_MAXIMUM_STAKE_AMOUNT, + minimumStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + minimumDelegationFeeBips: DEFAULT_MINIMUM_DELEGATION_FEE_BIPS, + maximumStakeMultiplier: DEFAULT_MAXIMUM_STAKE_MULTIPLIER, + rewardCalculator: rewardCalculator + }), + token + ); + validatorManager = app; + posValidatorManager = app; + + return app; + } + function _getStakeAssetBalance(address account) internal view override returns (uint256) { return token.balanceOf(account); } diff --git a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol index fd748830e..b8a7faa10 100644 --- a/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol +++ b/contracts/validator-manager/tests/NativeTokenStakingManagerTests.t.sol @@ -10,7 +10,8 @@ import {NativeTokenStakingManager} from "../NativeTokenStakingManager.sol"; import {PoSValidatorManager} from "../PoSValidatorManager.sol"; import { ValidatorManagerSettings, - ValidatorRegistrationInput + ValidatorRegistrationInput, + IValidatorManager } from "../interfaces/IValidatorManager.sol"; import {PoSValidatorManagerSettings} from "../interfaces/IPoSValidatorManager.sol"; import {IRewardCalculator} from "../interfaces/IRewardCalculator.sol"; @@ -26,26 +27,7 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { function setUp() public override { ValidatorManagerTest.setUp(); - // Construct the object under test - app = new NativeTokenStakingManager(ICMInitializable.Allowed); - rewardCalculator = new ExampleRewardCalculator(DEFAULT_REWARD_RATE); - app.initialize( - PoSValidatorManagerSettings({ - baseSettings: ValidatorManagerSettings({ - subnetID: DEFAULT_SUBNET_ID, - churnPeriodSeconds: DEFAULT_CHURN_PERIOD, - maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE - }), - minimumStakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT, - maximumStakeAmount: DEFAULT_MAXIMUM_STAKE_AMOUNT, - minimumStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, - minimumDelegationFeeBips: DEFAULT_MINIMUM_DELEGATION_FEE_BIPS, - maximumStakeMultiplier: DEFAULT_MAXIMUM_STAKE_MULTIPLIER, - rewardCalculator: rewardCalculator - }) - ); - validatorManager = app; - posValidatorManager = app; + _setUp(); _mockGetBlockchainID(); _mockInitializeValidatorSet(); app.initializeValidatorSet(_defaultSubnetConversionData(), 0); @@ -229,6 +211,30 @@ contract NativeTokenStakingManagerTest is PoSValidatorManagerTest { vm.deal(account, account.balance + amount); } + function _setUp() internal override returns (IValidatorManager) { + // Construct the object under test + app = new NativeTokenStakingManager(ICMInitializable.Allowed); + rewardCalculator = new ExampleRewardCalculator(DEFAULT_REWARD_RATE); + app.initialize( + PoSValidatorManagerSettings({ + baseSettings: ValidatorManagerSettings({ + subnetID: DEFAULT_SUBNET_ID, + churnPeriodSeconds: DEFAULT_CHURN_PERIOD, + maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE + }), + minimumStakeAmount: DEFAULT_MINIMUM_STAKE_AMOUNT, + maximumStakeAmount: DEFAULT_MAXIMUM_STAKE_AMOUNT, + minimumStakeDuration: DEFAULT_MINIMUM_STAKE_DURATION, + minimumDelegationFeeBips: DEFAULT_MINIMUM_DELEGATION_FEE_BIPS, + maximumStakeMultiplier: DEFAULT_MAXIMUM_STAKE_MULTIPLIER, + rewardCalculator: rewardCalculator + }) + ); + validatorManager = app; + posValidatorManager = app; + return app; + } + function _getStakeAssetBalance(address account) internal view override returns (uint256) { return account.balance; } diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 6de971209..063bcd6f8 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -10,7 +10,8 @@ import {PoAValidatorManager} from "../PoAValidatorManager.sol"; import {ICMInitializable} from "@utilities/ICMInitializable.sol"; import { ValidatorManagerSettings, - ValidatorRegistrationInput + ValidatorRegistrationInput, + IValidatorManager } from "../interfaces/IValidatorManager.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable@5.0.2/access/OwnableUpgradeable.sol"; @@ -24,16 +25,7 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { function setUp() public override { ValidatorManagerTest.setUp(); - app = new PoAValidatorManager(ICMInitializable.Allowed); - app.initialize( - ValidatorManagerSettings({ - subnetID: DEFAULT_SUBNET_ID, - churnPeriodSeconds: DEFAULT_CHURN_PERIOD, - maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE - }), - address(this) - ); - validatorManager = app; + _setUp(); _mockGetBlockchainID(); _mockInitializeValidatorSet(); app.initializeValidatorSet(_defaultSubnetConversionData(), 0); @@ -73,6 +65,21 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initializeEndValidation(validationID); } + function _setUp() internal override returns (IValidatorManager) { + app = new PoAValidatorManager(ICMInitializable.Allowed); + app.initialize( + ValidatorManagerSettings({ + subnetID: DEFAULT_SUBNET_ID, + churnPeriodSeconds: DEFAULT_CHURN_PERIOD, + maximumChurnPercentage: DEFAULT_MAXIMUM_CHURN_PERCENTAGE + }), + address(this) + ); + validatorManager = app; + + return app; + } + // solhint-disable-next-line no-empty-blocks function _beforeSend(uint256 amount, address spender) internal virtual override {} } diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 6de1e94f5..8bf57d4c8 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -11,7 +11,8 @@ import {ValidatorMessages} from "../ValidatorMessages.sol"; import { ValidatorStatus, ValidatorRegistrationInput, - PChainOwner + PChainOwner, + IValidatorManager } from "../interfaces/IValidatorManager.sol"; import { WarpMessage, @@ -280,6 +281,34 @@ abstract contract ValidatorManagerTest is Test { validatorManager.completeEndValidation(0); } + function testInitialWeightsTooLow() public { + vm.prank(address(123)); + IValidatorManager manager = _setUp(); + + _mockGetBlockchainID(); + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); + manager.initializeValidatorSet(_defaultSubnetConversionDataWeightsTooLow(), 0); + } + + function testRemoveValidatorTotalWeight5() public { + // Use prank here, because otherwise each test will end up with a different contract address, leading to a different subnet conversion hash. + vm.prank(address(123)); + IValidatorManager manager = _setUp(); + + _mockGetBlockchainID(); + _mockGetPChainWarpMessage( + ValidatorMessages.packSubnetConversionMessage( + bytes32(hex"1d72565851401e05d6351ebf5443d9bdc04953f3233da1345af126e7e4be7464") + ), + true + ); + manager.initializeValidatorSet(_defaultSubnetConversionDataTotalWeight5(), 0); + + bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(0))); + vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); + _forceInitializeEndValidation(validationID, false); + } + function testCumulativeChurnRegistration() public { uint64 churnThreshold = uint64(DEFAULT_STARTING_TOTAL_WEIGHT) * DEFAULT_MAXIMUM_CHURN_PERCENTAGE / 100; @@ -556,6 +585,8 @@ abstract contract ValidatorManagerTest is Test { bool includeUptime ) internal virtual; + function _setUp() internal virtual returns (IValidatorManager); + function _beforeSend(uint256 amount, address spender) internal virtual; function _defaultSubnetConversionData() internal view returns (SubnetConversionData memory) { @@ -581,6 +612,58 @@ abstract contract ValidatorManagerTest is Test { }); } + function _defaultSubnetConversionDataWeightsTooLow() + internal + view + returns (SubnetConversionData memory) + { + InitialValidator[] memory initialValidators = new InitialValidator[](2); + + initialValidators[0] = InitialValidator({ + nodeID: DEFAULT_INITIAL_VALIDATOR_NODE_ID_1, + weight: 1, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY + }); + initialValidators[1] = InitialValidator({ + nodeID: DEFAULT_INITIAL_VALIDATOR_NODE_ID_2, + weight: 3, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY + }); + + return SubnetConversionData({ + subnetID: DEFAULT_SUBNET_ID, + validatorManagerBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + validatorManagerAddress: address(validatorManager), + initialValidators: initialValidators + }); + } + + function _defaultSubnetConversionDataTotalWeight5() + internal + view + returns (SubnetConversionData memory) + { + InitialValidator[] memory initialValidators = new InitialValidator[](2); + + initialValidators[0] = InitialValidator({ + nodeID: DEFAULT_INITIAL_VALIDATOR_NODE_ID_1, + weight: 1, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY + }); + initialValidators[1] = InitialValidator({ + nodeID: DEFAULT_INITIAL_VALIDATOR_NODE_ID_2, + weight: 4, + blsPublicKey: DEFAULT_BLS_PUBLIC_KEY + }); + + return SubnetConversionData({ + subnetID: DEFAULT_SUBNET_ID, + validatorManagerBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID, + validatorManagerAddress: address(validatorManager), + initialValidators: initialValidators + }); + } + // TODO this needs to be kept in line with the contract conversions, but we can't make external calls // to the contract and use vm.expectRevert at the same time. // These are okay to use for PoA as well, because they're just used for conversions inside the tests.