From e9515c335bd888643b365079c78f7e6228195566 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Thu, 21 Apr 2022 13:19:44 +1000 Subject: [PATCH 01/23] update protobuf for msg --- proto/cosmos/staking/v1beta1/tx.proto | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/proto/cosmos/staking/v1beta1/tx.proto b/proto/cosmos/staking/v1beta1/tx.proto index b7dac39861d8..eb5324e5aab0 100644 --- a/proto/cosmos/staking/v1beta1/tx.proto +++ b/proto/cosmos/staking/v1beta1/tx.proto @@ -36,6 +36,8 @@ service Msg { // CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation // and delegate back to previous validator. rpc CancelUnbondingDelegation(MsgCancelUnbondingDelegation) returns (MsgCancelUnbondingDelegationResponse); + + rpc RotateConsPubKey(MsgRotateConsPubKey) returns (MsgRotateConsPubKeyResponse); } // MsgCreateValidator defines a SDK message for creating a new validator. @@ -142,18 +144,26 @@ message MsgUndelegateResponse { } // MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator -message MsgCancelUnbondingDelegation{ - option (cosmos.msg.v1.signer) = "delegator_address"; +message MsgCancelUnbondingDelegation { + option (cosmos.msg.v1.signer) = "delegator_address"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // amount is always less than or equal to unbonding delegation entry balance - cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // amount is always less than or equal to unbonding delegation entry balance + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; // creation_height is the height which the unbonding took place. int64 creation_height = 4; } // MsgCancelUnbondingDelegationResponse -message MsgCancelUnbondingDelegationResponse{} +message MsgCancelUnbondingDelegationResponse {} + +message MsgRotateConsPubKey { + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string new_pub_key = 3 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; +} + +message MsgRotateConsPubKeyResponse {} \ No newline at end of file From 5eec48ca6837f6bf6d56e44b3c5b4c3533a0c889 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Wed, 18 May 2022 18:18:36 +1000 Subject: [PATCH 02/23] add pseudo code for consensus key rotation flow --- proto/cosmos/staking/v1beta1/staking.proto | 7 +++ x/staking/keeper/cons_pubkey.go | 45 ++++++++++++++++ x/staking/keeper/msg_server.go | 60 ++++++++++++++++++++++ x/staking/keeper/val_state_change.go | 23 +++++++++ x/staking/keeper/validator.go | 11 ++++ 5 files changed, 146 insertions(+) create mode 100644 x/staking/keeper/cons_pubkey.go diff --git a/proto/cosmos/staking/v1beta1/staking.proto b/proto/cosmos/staking/v1beta1/staking.proto index 6dc965feab47..83d2066f2be5 100644 --- a/proto/cosmos/staking/v1beta1/staking.proto +++ b/proto/cosmos/staking/v1beta1/staking.proto @@ -21,6 +21,13 @@ message HistoricalInfo { repeated Validator valset = 2 [(gogoproto.nullable) = false]; } +message ConsPubKeyRotationHistory { + string operator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + google.protobuf.Any old_cons_pubkey = 2 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; + google.protobuf.Any new_cons_pubkey = 3 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; + int64 rotated_height = 4; +} + // CommissionRates defines the initial commission rates to be used for creating // a validator. message CommissionRates { diff --git a/x/staking/keeper/cons_pubkey.go b/x/staking/keeper/cons_pubkey.go new file mode 100644 index 000000000000..6ef90e1f1220 --- /dev/null +++ b/x/staking/keeper/cons_pubkey.go @@ -0,0 +1,45 @@ +package keeper + +type ConsPubKeyRotationHistory struct { + OperatorAddress sdk.ValAddress + OldConsPubKey crypto.PubKey + NewConsPubKey crypto.PubKey + RotatedHeight int64 +} + +func (k Keeper) SetConsPubKeyRotationHistory(ctx sdk.Context, history ConsPubKeyRotationHistory) { + store := ctx.KVStore(k.storeKey) + key := types.GetValidatorConsPubKeyRotationHistoryKey(history) + historyBytes := types.MustMarshalConsPubKeyRotationHistory(k.cdc, history) + store.Set(key, historyBytes) + + // TODO: only set reference + key = types.GetBlockConsPubKeyRotationHistoryKey(history) + store.Set(key, historyBytes) +} + +func (k Keeper) GetValidatorConsPubKeyRotationHistory(ctx sdk.Context, operatorAddress sdk.ValAddress) (historyObjects []ConsPubKeyRotationHistory) { + store := ctx.KVStore(k.storeKey) + + iterator := sdk.KVStorePrefixIterator(store, types.GetValdiatorConsPubKeyRotationHistoryPrefix(valAddr)) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + history := types.MustUnmarshalConsPubKeyRotationHistory(k.cdc, iterator.Value()) + historyObjects = append(historyObjects, history) + } + return +} + +func (k Keeper) GetBlockConsPubKeyRotationHistory(ctx sdk.Context, height int64) (historyObjects []ConsPubKeyRotationHistory) { + store := ctx.KVStore(k.storeKey) + + iterator := sdk.KVStorePrefixIterator(store, types.GetBlockConsPubKeyRotationHistoryPrefix(height)) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + history := types.MustUnmarshalConsPubKeyRotationHistory(k.cdc, iterator.Value()) + historyObjects = append(historyObjects, history) + } + return +} diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 3e4ad4417d1b..affc7cc26158 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -492,3 +492,63 @@ func (k msgServer) CancelUnbondingDelegation(goCtx context.Context, msg *types.M return &types.MsgCancelUnbondingDelegationResponse{}, nil } + +// RotateConsPubKey defines a method for rotating consensus pubkey for a validator +func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateConsPubKey) (*types.MsgRotateConsPubKeyResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // Implementation is based on this ADR + // https://docs.cosmos.network/master/architecture/adr-016-validator-consensus-key-rotation.html + + // TODO: to consider + // pk, ok := v.ConsensusPubkey.GetCachedValue().(cryptotypes.PubKey) + // if !ok { + // return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "expecting cryptotypes.PubKey, got %T", pk) + // } + + consAddr := sdk.ConsAddress(msg.NewPubKey.Address()) + + // checks if NewPubKey is not duplicated on ValidatorsByConsAddr + validator := k.Keeper.ValidatorByConsAddr(ctx) + if validator != nil { + return nil, types.ErrConsensusPubKeyAlreadyUsedForAValidator + } + + // checks if the validator is does not exceed parameter MaxConsPubKeyRotations by iterating ConsPubKeyRotationHistory + historyObjects := k.GetValidatorConsPubKeyRotationHistory(ctx, validator.OperatorAddress) + if len(historyObjects) > MaxConsPubKeyRotations { + return nil, types.ErrExceedingMaxConsPubKeyRotations + } + + // checks if the signing account has enough balance to pay KeyRotationFee + // pays KeyRotationFee to community fund + err := k.Keeper.FundCommunityPool(ctx, KeyRotationFee, msg.Sender) + if err != nil { + return nil, err + } + + validator, found := k.Keeper.GetValidator(ctx, msg.ValidatorAddress) + if !found { + return nil, types.ErrNoValidatorFound + } + + // deletes old ValidatorByConsAddr + k.DeleteValidatorByConsAddr(ctx, validator) + + // overwrites NewPubKey in validator.ConsPubKey + oldConsensusPubKey := validator.ConsensusPubKey + validator.ConsensusPubKey = msg.NewPubKey + + // SetValidatorByConsAddr for NewPubKey + k.SetValidatorByConsAddr(ctx, validator) + + // Add ConsPubKeyRotationHistory for tracking rotation + k.SetConsPubKeyRotationHistory(ctx, types.ConsPubKeyRotationHistory{ + OperatorAddress: validator.OperatorAddress, + OldConsPubKey: oldConsensusPubKey, + NewConsPubKey: validator.ConsensusPubKey, + RotatedHeight: ctx.BlockHeight() + }) + + return &types.MsgRotateConsPubKeyResponse{}, nil +} diff --git a/x/staking/keeper/val_state_change.go b/x/staking/keeper/val_state_change.go index 7392936f5421..004707921d39 100644 --- a/x/staking/keeper/val_state_change.go +++ b/x/staking/keeper/val_state_change.go @@ -202,6 +202,29 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx sdk.Context) (updates []ab updates = append(updates, validator.ABCIValidatorUpdateZero()) } + // ApplyAndReturnValidatorSetUpdates checks if there is ConsPubKeyRotationHistory + // with ConsPubKeyRotationHistory.RotatedHeight == ctx.BlockHeight() and if so, generates 2 ValidatorUpdate, + // one for a remove validator and one for create new validator + // TODO: consider the case, validator's voting power and consensus pubkey both values are + // changed on this block + historyObjects := k.GetBlockConsPubKeyRotationHistory(ctx, ctx.BlockHeight()) + for _, history := range historyObjects { + updates = append(updates, abci.ValidatorUpdate{ + PubKey: tmtypes.TM2PB.PubKey(OldConsPubKey), + Power: 0, + }) + updates = append(updates, abci.ValidatorUpdate{ + PubKey: tmtypes.TM2PB.PubKey(NewConsPubKey), + Power: v.ConsensusPower(), + }) + } + + // TODO: at previousVotes Iteration logic of AllocateTokens, previousVote using OldConsPubKey + // match up with ConsPubKeyRotationHistory, and replace validator for token allocation + + // TODO: Migrate ValidatorSigningInfo and ValidatorMissedBlockBitArray from OldConsPubKey + // to NewConsPubKey + // Update the pools based on the recent updates in the validator set: // - The tokens from the non-bonded candidates that enter the new validator set need to be transferred // to the Bonded pool. diff --git a/x/staking/keeper/validator.go b/x/staking/keeper/validator.go index 8539cbe0ec8a..188ac392d3f1 100644 --- a/x/staking/keeper/validator.go +++ b/x/staking/keeper/validator.go @@ -71,6 +71,17 @@ func (k Keeper) SetValidatorByConsAddr(ctx sdk.Context, validator types.Validato return nil } +// validator index +func (k Keeper) DeleteValidatorByConsAddr(ctx sdk.Context, validator types.Validator) error { + consPk, err := validator.GetConsAddr() + if err != nil { + return err + } + store := ctx.KVStore(k.storeKey) + store.Delete(types.GetValidatorByConsAddrKey(consPk)) + return nil +} + // validator index func (k Keeper) SetValidatorByPowerIndex(ctx sdk.Context, validator types.Validator) { // jailed validators are not kept in the power index From acbc3e99674722663d8cb2fe3a03f5a3b7b78aa8 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Wed, 18 May 2022 18:34:33 +1000 Subject: [PATCH 03/23] add hook flow for consensus pubkey updates to make following changes on slashing module --- x/distribution/keeper/hooks.go | 4 ++++ x/slashing/keeper/hooks.go | 7 +++++++ x/staking/keeper/hooks.go | 7 +++++++ x/staking/keeper/val_state_change.go | 11 ++++++----- x/staking/types/expected_keepers.go | 1 + x/staking/types/hooks.go | 8 ++++++++ 6 files changed, 33 insertions(+), 5 deletions(-) diff --git a/x/distribution/keeper/hooks.go b/x/distribution/keeper/hooks.go index 0c66d44e33e7..29f0183c1abd 100644 --- a/x/distribution/keeper/hooks.go +++ b/x/distribution/keeper/hooks.go @@ -109,6 +109,10 @@ func (h Hooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, f return nil } +func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { + return nil +} + func (h Hooks) BeforeValidatorModified(_ sdk.Context, _ sdk.ValAddress) error { return nil } func (h Hooks) AfterValidatorBonded(_ sdk.Context, _ sdk.ConsAddress, _ sdk.ValAddress) error { return nil diff --git a/x/slashing/keeper/hooks.go b/x/slashing/keeper/hooks.go index 09d1afe02fac..3f2568bd7c62 100644 --- a/x/slashing/keeper/hooks.go +++ b/x/slashing/keeper/hooks.go @@ -88,3 +88,10 @@ func (h Hooks) AfterDelegationModified(_ sdk.Context, _ sdk.AccAddress, _ sdk.Va return nil } func (h Hooks) BeforeValidatorSlashed(_ sdk.Context, _ sdk.ValAddress, _ sdk.Dec) error { return nil } +func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { + + // TODO: Migrate ValidatorSigningInfo and ValidatorMissedBlockBitArray from OldConsPubKey + // to NewConsPubKey + + return nil +} diff --git a/x/staking/keeper/hooks.go b/x/staking/keeper/hooks.go index 91375c9e3881..2fb868f3ffcd 100644 --- a/x/staking/keeper/hooks.go +++ b/x/staking/keeper/hooks.go @@ -87,3 +87,10 @@ func (k Keeper) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, } return nil } + +func (k Keeper) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { + if k.hooks != nil { + return k.hooks.AfterConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey) + } + return nil +} diff --git a/x/staking/keeper/val_state_change.go b/x/staking/keeper/val_state_change.go index 004707921d39..b0ec9f185a74 100644 --- a/x/staking/keeper/val_state_change.go +++ b/x/staking/keeper/val_state_change.go @@ -210,21 +210,22 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx sdk.Context) (updates []ab historyObjects := k.GetBlockConsPubKeyRotationHistory(ctx, ctx.BlockHeight()) for _, history := range historyObjects { updates = append(updates, abci.ValidatorUpdate{ - PubKey: tmtypes.TM2PB.PubKey(OldConsPubKey), + PubKey: tmtypes.TM2PB.PubKey(history.OldConsPubKey), Power: 0, }) updates = append(updates, abci.ValidatorUpdate{ - PubKey: tmtypes.TM2PB.PubKey(NewConsPubKey), + PubKey: tmtypes.TM2PB.PubKey(history.NewConsPubKey), Power: v.ConsensusPower(), }) + err := k.AfterConsensusPubKeyUpdate(ctx, history.OldConsPubKey, history.NewConsPubKey) + if err != nil { + return nil, err + } } // TODO: at previousVotes Iteration logic of AllocateTokens, previousVote using OldConsPubKey // match up with ConsPubKeyRotationHistory, and replace validator for token allocation - // TODO: Migrate ValidatorSigningInfo and ValidatorMissedBlockBitArray from OldConsPubKey - // to NewConsPubKey - // Update the pools based on the recent updates in the validator set: // - The tokens from the non-bonded candidates that enter the new validator set need to be transferred // to the Bonded pool. diff --git a/x/staking/types/expected_keepers.go b/x/staking/types/expected_keepers.go index 785a969f36e4..f4ada4313b1d 100644 --- a/x/staking/types/expected_keepers.go +++ b/x/staking/types/expected_keepers.go @@ -101,4 +101,5 @@ type StakingHooks interface { BeforeDelegationRemoved(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error // Must be called when a delegation is removed AfterDelegationModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec) error + AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error } diff --git a/x/staking/types/hooks.go b/x/staking/types/hooks.go index 33838bcaa030..574268c752e0 100644 --- a/x/staking/types/hooks.go +++ b/x/staking/types/hooks.go @@ -94,3 +94,11 @@ func (h MultiStakingHooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.V } return nil } +func (h MultiStakingHooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec) error { + for i := range h { + if err := h[i].AfterConsensusPubKeyUpdate(ctx, valAddr, fraction); err != nil { + return err + } + } + return nil +} From 5d341dd8a83cadda5408df7033d1d927c1a69027 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Thu, 19 May 2022 20:19:45 +1000 Subject: [PATCH 04/23] slashing module PerformConsensusPubKeyUpdate --- x/slashing/keeper/hooks.go | 6 +----- x/slashing/keeper/signing_info.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/x/slashing/keeper/hooks.go b/x/slashing/keeper/hooks.go index 3f2568bd7c62..579e4dcee2e3 100644 --- a/x/slashing/keeper/hooks.go +++ b/x/slashing/keeper/hooks.go @@ -89,9 +89,5 @@ func (h Hooks) AfterDelegationModified(_ sdk.Context, _ sdk.AccAddress, _ sdk.Va } func (h Hooks) BeforeValidatorSlashed(_ sdk.Context, _ sdk.ValAddress, _ sdk.Dec) error { return nil } func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { - - // TODO: Migrate ValidatorSigningInfo and ValidatorMissedBlockBitArray from OldConsPubKey - // to NewConsPubKey - - return nil + return h.k.PerformConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey) } diff --git a/x/slashing/keeper/signing_info.go b/x/slashing/keeper/signing_info.go index ed15ae3e4ff3..40077c5427c9 100644 --- a/x/slashing/keeper/signing_info.go +++ b/x/slashing/keeper/signing_info.go @@ -37,6 +37,12 @@ func (k Keeper) SetValidatorSigningInfo(ctx sdk.Context, address sdk.ConsAddress store.Set(types.ValidatorSigningInfoKey(address), bz) } +// RemoveValidatorSigningInfo removes the validator signing info from a consensus address key +func (k Keeper) RemoveValidatorSigningInfo(ctx sdk.Context, address sdk.ConsAddress) { + store := ctx.KVStore(k.storeKey) + store.Delete(types.ValidatorSigningInfoKey(address)) +} + // IterateValidatorSigningInfos iterates over the stored ValidatorSigningInfo func (k Keeper) IterateValidatorSigningInfos(ctx sdk.Context, handler func(address sdk.ConsAddress, info types.ValidatorSigningInfo) (stop bool)) { @@ -156,3 +162,25 @@ func (k Keeper) clearValidatorMissedBlockBitArray(ctx sdk.Context, address sdk.C store.Delete(iter.Key()) } } + +func (k Keeper) PerformConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { + // Connect new consensus address with PubKey + k.AddPubkey(ctx, newPubKey) + + // Migrate ValidatorSigningInfo from oldPubKey to newPubKey + signingInfo, found := h.k.GetValidatorSigningInfo(ctx, oldPubKey.Address()) + if !found { + return nil + } + k.RemoveValidatorSigningInfo(ctx, oldPubKey.Address()) + k.SetValidatorSigningInfo(ctx, newPubKey.Address(), signingInfo) + + // Migrate ValidatorMissedBlockBitArray from oldPubKey to newPubKey + k.clearValidatorMissedBlockBitArray(ctx, oldPubKey.Address()) + missedBlocks := h.k.GetValidatorMissedBlocks(ctx, oldPubKey.Address()) + for _, missed := range array.MissedBlocks { + k.SetValidatorMissedBlockBitArray(ctx, newPubKey.Address(), missed.Index, missed.Missed) + } + + return nil +} From b705acc23a21f317dd81d69633db5ff2bd7faade Mon Sep 17 00:00:00 2001 From: devstar Date: Thu, 19 May 2022 19:37:46 +0700 Subject: [PATCH 05/23] generate updated proto --- api/cosmos/staking/v1beta1/staking.pulsar.go | 1594 +++++++++++++----- api/cosmos/staking/v1beta1/tx.pulsar.go | 1157 ++++++++++++- api/cosmos/staking/v1beta1/tx_grpc.pb.go | 36 + x/staking/types/staking.pb.go | 1571 ++++++++++------- x/staking/types/tx.pb.go | 548 +++++- 5 files changed, 3729 insertions(+), 1177 deletions(-) diff --git a/api/cosmos/staking/v1beta1/staking.pulsar.go b/api/cosmos/staking/v1beta1/staking.pulsar.go index 7e027f3b670a..fc9ba9bdd6d0 100644 --- a/api/cosmos/staking/v1beta1/staking.pulsar.go +++ b/api/cosmos/staking/v1beta1/staking.pulsar.go @@ -592,6 +592,632 @@ func (x *fastReflection_HistoricalInfo) ProtoMethods() *protoiface.Methods { } } +var ( + md_ConsPubKeyRotationHistory protoreflect.MessageDescriptor + fd_ConsPubKeyRotationHistory_operator_address protoreflect.FieldDescriptor + fd_ConsPubKeyRotationHistory_old_cons_pubkey protoreflect.FieldDescriptor + fd_ConsPubKeyRotationHistory_new_cons_pubkey protoreflect.FieldDescriptor + fd_ConsPubKeyRotationHistory_rotated_height protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_staking_proto_init() + md_ConsPubKeyRotationHistory = File_cosmos_staking_v1beta1_staking_proto.Messages().ByName("ConsPubKeyRotationHistory") + fd_ConsPubKeyRotationHistory_operator_address = md_ConsPubKeyRotationHistory.Fields().ByName("operator_address") + fd_ConsPubKeyRotationHistory_old_cons_pubkey = md_ConsPubKeyRotationHistory.Fields().ByName("old_cons_pubkey") + fd_ConsPubKeyRotationHistory_new_cons_pubkey = md_ConsPubKeyRotationHistory.Fields().ByName("new_cons_pubkey") + fd_ConsPubKeyRotationHistory_rotated_height = md_ConsPubKeyRotationHistory.Fields().ByName("rotated_height") +} + +var _ protoreflect.Message = (*fastReflection_ConsPubKeyRotationHistory)(nil) + +type fastReflection_ConsPubKeyRotationHistory ConsPubKeyRotationHistory + +func (x *ConsPubKeyRotationHistory) ProtoReflect() protoreflect.Message { + return (*fastReflection_ConsPubKeyRotationHistory)(x) +} + +func (x *ConsPubKeyRotationHistory) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_ConsPubKeyRotationHistory_messageType fastReflection_ConsPubKeyRotationHistory_messageType +var _ protoreflect.MessageType = fastReflection_ConsPubKeyRotationHistory_messageType{} + +type fastReflection_ConsPubKeyRotationHistory_messageType struct{} + +func (x fastReflection_ConsPubKeyRotationHistory_messageType) Zero() protoreflect.Message { + return (*fastReflection_ConsPubKeyRotationHistory)(nil) +} +func (x fastReflection_ConsPubKeyRotationHistory_messageType) New() protoreflect.Message { + return new(fastReflection_ConsPubKeyRotationHistory) +} +func (x fastReflection_ConsPubKeyRotationHistory_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_ConsPubKeyRotationHistory +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_ConsPubKeyRotationHistory) Descriptor() protoreflect.MessageDescriptor { + return md_ConsPubKeyRotationHistory +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_ConsPubKeyRotationHistory) Type() protoreflect.MessageType { + return _fastReflection_ConsPubKeyRotationHistory_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_ConsPubKeyRotationHistory) New() protoreflect.Message { + return new(fastReflection_ConsPubKeyRotationHistory) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_ConsPubKeyRotationHistory) Interface() protoreflect.ProtoMessage { + return (*ConsPubKeyRotationHistory)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_ConsPubKeyRotationHistory) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.OperatorAddress != "" { + value := protoreflect.ValueOfString(x.OperatorAddress) + if !f(fd_ConsPubKeyRotationHistory_operator_address, value) { + return + } + } + if x.OldConsPubkey != nil { + value := protoreflect.ValueOfMessage(x.OldConsPubkey.ProtoReflect()) + if !f(fd_ConsPubKeyRotationHistory_old_cons_pubkey, value) { + return + } + } + if x.NewConsPubkey != nil { + value := protoreflect.ValueOfMessage(x.NewConsPubkey.ProtoReflect()) + if !f(fd_ConsPubKeyRotationHistory_new_cons_pubkey, value) { + return + } + } + if x.RotatedHeight != int64(0) { + value := protoreflect.ValueOfInt64(x.RotatedHeight) + if !f(fd_ConsPubKeyRotationHistory_rotated_height, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_ConsPubKeyRotationHistory) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.operator_address": + return x.OperatorAddress != "" + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.old_cons_pubkey": + return x.OldConsPubkey != nil + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.new_cons_pubkey": + return x.NewConsPubkey != nil + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.rotated_height": + return x.RotatedHeight != int64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.ConsPubKeyRotationHistory")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.ConsPubKeyRotationHistory does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsPubKeyRotationHistory) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.operator_address": + x.OperatorAddress = "" + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.old_cons_pubkey": + x.OldConsPubkey = nil + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.new_cons_pubkey": + x.NewConsPubkey = nil + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.rotated_height": + x.RotatedHeight = int64(0) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.ConsPubKeyRotationHistory")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.ConsPubKeyRotationHistory does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_ConsPubKeyRotationHistory) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.operator_address": + value := x.OperatorAddress + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.old_cons_pubkey": + value := x.OldConsPubkey + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.new_cons_pubkey": + value := x.NewConsPubkey + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.rotated_height": + value := x.RotatedHeight + return protoreflect.ValueOfInt64(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.ConsPubKeyRotationHistory")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.ConsPubKeyRotationHistory does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsPubKeyRotationHistory) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.operator_address": + x.OperatorAddress = value.Interface().(string) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.old_cons_pubkey": + x.OldConsPubkey = value.Message().Interface().(*anypb.Any) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.new_cons_pubkey": + x.NewConsPubkey = value.Message().Interface().(*anypb.Any) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.rotated_height": + x.RotatedHeight = value.Int() + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.ConsPubKeyRotationHistory")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.ConsPubKeyRotationHistory does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsPubKeyRotationHistory) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.old_cons_pubkey": + if x.OldConsPubkey == nil { + x.OldConsPubkey = new(anypb.Any) + } + return protoreflect.ValueOfMessage(x.OldConsPubkey.ProtoReflect()) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.new_cons_pubkey": + if x.NewConsPubkey == nil { + x.NewConsPubkey = new(anypb.Any) + } + return protoreflect.ValueOfMessage(x.NewConsPubkey.ProtoReflect()) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.operator_address": + panic(fmt.Errorf("field operator_address of message cosmos.staking.v1beta1.ConsPubKeyRotationHistory is not mutable")) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.rotated_height": + panic(fmt.Errorf("field rotated_height of message cosmos.staking.v1beta1.ConsPubKeyRotationHistory is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.ConsPubKeyRotationHistory")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.ConsPubKeyRotationHistory does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_ConsPubKeyRotationHistory) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.operator_address": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.old_cons_pubkey": + m := new(anypb.Any) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.new_cons_pubkey": + m := new(anypb.Any) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "cosmos.staking.v1beta1.ConsPubKeyRotationHistory.rotated_height": + return protoreflect.ValueOfInt64(int64(0)) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.ConsPubKeyRotationHistory")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.ConsPubKeyRotationHistory does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_ConsPubKeyRotationHistory) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.ConsPubKeyRotationHistory", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_ConsPubKeyRotationHistory) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_ConsPubKeyRotationHistory) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_ConsPubKeyRotationHistory) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_ConsPubKeyRotationHistory) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*ConsPubKeyRotationHistory) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.OperatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.OldConsPubkey != nil { + l = options.Size(x.OldConsPubkey) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.NewConsPubkey != nil { + l = options.Size(x.NewConsPubkey) + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.RotatedHeight != 0 { + n += 1 + runtime.Sov(uint64(x.RotatedHeight)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*ConsPubKeyRotationHistory) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if x.RotatedHeight != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.RotatedHeight)) + i-- + dAtA[i] = 0x20 + } + if x.NewConsPubkey != nil { + encoded, err := options.Marshal(x.NewConsPubkey) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x1a + } + if x.OldConsPubkey != nil { + encoded, err := options.Marshal(x.OldConsPubkey) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x12 + } + if len(x.OperatorAddress) > 0 { + i -= len(x.OperatorAddress) + copy(dAtA[i:], x.OperatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.OperatorAddress))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*ConsPubKeyRotationHistory) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ConsPubKeyRotationHistory: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: ConsPubKeyRotationHistory: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OperatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.OperatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field OldConsPubkey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.OldConsPubkey == nil { + x.OldConsPubkey = &anypb.Any{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.OldConsPubkey); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewConsPubkey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.NewConsPubkey == nil { + x.NewConsPubkey = &anypb.Any{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.NewConsPubkey); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field RotatedHeight", wireType) + } + x.RotatedHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.RotatedHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + var ( md_CommissionRates protoreflect.MessageDescriptor fd_CommissionRates_rate protoreflect.FieldDescriptor @@ -616,7 +1242,7 @@ func (x *CommissionRates) ProtoReflect() protoreflect.Message { } func (x *CommissionRates) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[1] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1162,7 +1788,7 @@ func (x *Commission) ProtoReflect() protoreflect.Message { } func (x *Commission) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[2] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1682,7 +2308,7 @@ func (x *Description) ProtoReflect() protoreflect.Message { } func (x *Description) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[3] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2370,7 +2996,7 @@ func (x *Validator) ProtoReflect() protoreflect.Message { } func (x *Validator) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[4] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3474,7 +4100,7 @@ func (x *ValAddresses) ProtoReflect() protoreflect.Message { } func (x *ValAddresses) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[5] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3910,7 +4536,7 @@ func (x *DVPair) ProtoReflect() protoreflect.Message { } func (x *DVPair) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[6] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4443,7 +5069,7 @@ func (x *DVPairs) ProtoReflect() protoreflect.Message { } func (x *DVPairs) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[7] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4890,7 +5516,7 @@ func (x *DVVTriplet) ProtoReflect() protoreflect.Message { } func (x *DVVTriplet) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[8] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5485,7 +6111,7 @@ func (x *DVVTriplets) ProtoReflect() protoreflect.Message { } func (x *DVVTriplets) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[9] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5932,7 +6558,7 @@ func (x *Delegation) ProtoReflect() protoreflect.Message { } func (x *Delegation) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[10] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6531,7 +7157,7 @@ func (x *UnbondingDelegation) ProtoReflect() protoreflect.Message { } func (x *UnbondingDelegation) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[11] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7104,7 +7730,7 @@ func (x *UnbondingDelegationEntry) ProtoReflect() protoreflect.Message { } func (x *UnbondingDelegationEntry) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[12] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7715,7 +8341,7 @@ func (x *RedelegationEntry) ProtoReflect() protoreflect.Message { } func (x *RedelegationEntry) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[13] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8377,7 +9003,7 @@ func (x *Redelegation) ProtoReflect() protoreflect.Message { } func (x *Redelegation) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[14] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9016,7 +9642,7 @@ func (x *Params) ProtoReflect() protoreflect.Message { } func (x *Params) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[15] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9715,7 +10341,7 @@ func (x *DelegationResponse) ProtoReflect() protoreflect.Message { } func (x *DelegationResponse) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[16] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10229,7 +10855,7 @@ func (x *RedelegationEntryResponse) ProtoReflect() protoreflect.Message { } func (x *RedelegationEntryResponse) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[17] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10779,7 +11405,7 @@ func (x *RedelegationResponse) ProtoReflect() protoreflect.Message { } func (x *RedelegationResponse) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[18] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11301,7 +11927,7 @@ func (x *Pool) ProtoReflect() protoreflect.Message { } func (x *Pool) slowProtoReflect() protoreflect.Message { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[19] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11880,6 +12506,65 @@ func (x *HistoricalInfo) GetValset() []*Validator { return nil } +type ConsPubKeyRotationHistory struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OperatorAddress string `protobuf:"bytes,1,opt,name=operator_address,json=operatorAddress,proto3" json:"operator_address,omitempty"` + OldConsPubkey *anypb.Any `protobuf:"bytes,2,opt,name=old_cons_pubkey,json=oldConsPubkey,proto3" json:"old_cons_pubkey,omitempty"` + NewConsPubkey *anypb.Any `protobuf:"bytes,3,opt,name=new_cons_pubkey,json=newConsPubkey,proto3" json:"new_cons_pubkey,omitempty"` + RotatedHeight int64 `protobuf:"varint,4,opt,name=rotated_height,json=rotatedHeight,proto3" json:"rotated_height,omitempty"` +} + +func (x *ConsPubKeyRotationHistory) Reset() { + *x = ConsPubKeyRotationHistory{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ConsPubKeyRotationHistory) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ConsPubKeyRotationHistory) ProtoMessage() {} + +// Deprecated: Use ConsPubKeyRotationHistory.ProtoReflect.Descriptor instead. +func (*ConsPubKeyRotationHistory) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{1} +} + +func (x *ConsPubKeyRotationHistory) GetOperatorAddress() string { + if x != nil { + return x.OperatorAddress + } + return "" +} + +func (x *ConsPubKeyRotationHistory) GetOldConsPubkey() *anypb.Any { + if x != nil { + return x.OldConsPubkey + } + return nil +} + +func (x *ConsPubKeyRotationHistory) GetNewConsPubkey() *anypb.Any { + if x != nil { + return x.NewConsPubkey + } + return nil +} + +func (x *ConsPubKeyRotationHistory) GetRotatedHeight() int64 { + if x != nil { + return x.RotatedHeight + } + return 0 +} + // CommissionRates defines the initial commission rates to be used for creating // a validator. type CommissionRates struct { @@ -11898,7 +12583,7 @@ type CommissionRates struct { func (x *CommissionRates) Reset() { *x = CommissionRates{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[1] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11912,7 +12597,7 @@ func (*CommissionRates) ProtoMessage() {} // Deprecated: Use CommissionRates.ProtoReflect.Descriptor instead. func (*CommissionRates) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{1} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{2} } func (x *CommissionRates) GetRate() string { @@ -11951,7 +12636,7 @@ type Commission struct { func (x *Commission) Reset() { *x = Commission{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[2] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11965,7 +12650,7 @@ func (*Commission) ProtoMessage() {} // Deprecated: Use Commission.ProtoReflect.Descriptor instead. func (*Commission) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{2} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{3} } func (x *Commission) GetCommissionRates() *CommissionRates { @@ -12003,7 +12688,7 @@ type Description struct { func (x *Description) Reset() { *x = Description{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[3] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12017,7 +12702,7 @@ func (*Description) ProtoMessage() {} // Deprecated: Use Description.ProtoReflect.Descriptor instead. func (*Description) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{3} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{4} } func (x *Description) GetMoniker() string { @@ -12097,7 +12782,7 @@ type Validator struct { func (x *Validator) Reset() { *x = Validator{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[4] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12111,7 +12796,7 @@ func (*Validator) ProtoMessage() {} // Deprecated: Use Validator.ProtoReflect.Descriptor instead. func (*Validator) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{4} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{5} } func (x *Validator) GetOperatorAddress() string { @@ -12203,7 +12888,7 @@ type ValAddresses struct { func (x *ValAddresses) Reset() { *x = ValAddresses{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[5] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12217,7 +12902,7 @@ func (*ValAddresses) ProtoMessage() {} // Deprecated: Use ValAddresses.ProtoReflect.Descriptor instead. func (*ValAddresses) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{5} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{6} } func (x *ValAddresses) GetAddresses() []string { @@ -12242,7 +12927,7 @@ type DVPair struct { func (x *DVPair) Reset() { *x = DVPair{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[6] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12256,7 +12941,7 @@ func (*DVPair) ProtoMessage() {} // Deprecated: Use DVPair.ProtoReflect.Descriptor instead. func (*DVPair) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{6} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{7} } func (x *DVPair) GetDelegatorAddress() string { @@ -12285,7 +12970,7 @@ type DVPairs struct { func (x *DVPairs) Reset() { *x = DVPairs{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[7] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12299,7 +12984,7 @@ func (*DVPairs) ProtoMessage() {} // Deprecated: Use DVPairs.ProtoReflect.Descriptor instead. func (*DVPairs) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{7} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{8} } func (x *DVPairs) GetPairs() []*DVPair { @@ -12326,7 +13011,7 @@ type DVVTriplet struct { func (x *DVVTriplet) Reset() { *x = DVVTriplet{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[8] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12340,7 +13025,7 @@ func (*DVVTriplet) ProtoMessage() {} // Deprecated: Use DVVTriplet.ProtoReflect.Descriptor instead. func (*DVVTriplet) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{8} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{9} } func (x *DVVTriplet) GetDelegatorAddress() string { @@ -12376,7 +13061,7 @@ type DVVTriplets struct { func (x *DVVTriplets) Reset() { *x = DVVTriplets{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[9] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12390,7 +13075,7 @@ func (*DVVTriplets) ProtoMessage() {} // Deprecated: Use DVVTriplets.ProtoReflect.Descriptor instead. func (*DVVTriplets) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{9} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{10} } func (x *DVVTriplets) GetTriplets() []*DVVTriplet { @@ -12419,7 +13104,7 @@ type Delegation struct { func (x *Delegation) Reset() { *x = Delegation{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[10] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12433,7 +13118,7 @@ func (*Delegation) ProtoMessage() {} // Deprecated: Use Delegation.ProtoReflect.Descriptor instead. func (*Delegation) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{10} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{11} } func (x *Delegation) GetDelegatorAddress() string { @@ -12475,7 +13160,7 @@ type UnbondingDelegation struct { func (x *UnbondingDelegation) Reset() { *x = UnbondingDelegation{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[11] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12489,7 +13174,7 @@ func (*UnbondingDelegation) ProtoMessage() {} // Deprecated: Use UnbondingDelegation.ProtoReflect.Descriptor instead. func (*UnbondingDelegation) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{11} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{12} } func (x *UnbondingDelegation) GetDelegatorAddress() string { @@ -12532,7 +13217,7 @@ type UnbondingDelegationEntry struct { func (x *UnbondingDelegationEntry) Reset() { *x = UnbondingDelegationEntry{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[12] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12546,7 +13231,7 @@ func (*UnbondingDelegationEntry) ProtoMessage() {} // Deprecated: Use UnbondingDelegationEntry.ProtoReflect.Descriptor instead. func (*UnbondingDelegationEntry) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{12} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{13} } func (x *UnbondingDelegationEntry) GetCreationHeight() int64 { @@ -12596,7 +13281,7 @@ type RedelegationEntry struct { func (x *RedelegationEntry) Reset() { *x = RedelegationEntry{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[13] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12610,7 +13295,7 @@ func (*RedelegationEntry) ProtoMessage() {} // Deprecated: Use RedelegationEntry.ProtoReflect.Descriptor instead. func (*RedelegationEntry) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{13} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{14} } func (x *RedelegationEntry) GetCreationHeight() int64 { @@ -12661,7 +13346,7 @@ type Redelegation struct { func (x *Redelegation) Reset() { *x = Redelegation{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[14] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12675,7 +13360,7 @@ func (*Redelegation) ProtoMessage() {} // Deprecated: Use Redelegation.ProtoReflect.Descriptor instead. func (*Redelegation) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{14} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{15} } func (x *Redelegation) GetDelegatorAddress() string { @@ -12729,7 +13414,7 @@ type Params struct { func (x *Params) Reset() { *x = Params{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[15] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12743,7 +13428,7 @@ func (*Params) ProtoMessage() {} // Deprecated: Use Params.ProtoReflect.Descriptor instead. func (*Params) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{15} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{16} } func (x *Params) GetUnbondingTime() *durationpb.Duration { @@ -12802,7 +13487,7 @@ type DelegationResponse struct { func (x *DelegationResponse) Reset() { *x = DelegationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[16] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12816,7 +13501,7 @@ func (*DelegationResponse) ProtoMessage() {} // Deprecated: Use DelegationResponse.ProtoReflect.Descriptor instead. func (*DelegationResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{16} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{17} } func (x *DelegationResponse) GetDelegation() *Delegation { @@ -12848,7 +13533,7 @@ type RedelegationEntryResponse struct { func (x *RedelegationEntryResponse) Reset() { *x = RedelegationEntryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[17] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12862,7 +13547,7 @@ func (*RedelegationEntryResponse) ProtoMessage() {} // Deprecated: Use RedelegationEntryResponse.ProtoReflect.Descriptor instead. func (*RedelegationEntryResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{17} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{18} } func (x *RedelegationEntryResponse) GetRedelegationEntry() *RedelegationEntry { @@ -12894,7 +13579,7 @@ type RedelegationResponse struct { func (x *RedelegationResponse) Reset() { *x = RedelegationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[18] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12908,7 +13593,7 @@ func (*RedelegationResponse) ProtoMessage() {} // Deprecated: Use RedelegationResponse.ProtoReflect.Descriptor instead. func (*RedelegationResponse) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{18} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{19} } func (x *RedelegationResponse) GetRedelegation() *Redelegation { @@ -12939,7 +13624,7 @@ type Pool struct { func (x *Pool) Reset() { *x = Pool{} if protoimpl.UnsafeEnabled { - mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[19] + mi := &file_cosmos_staking_v1beta1_staking_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12953,7 +13638,7 @@ func (*Pool) ProtoMessage() {} // Deprecated: Use Pool.ProtoReflect.Descriptor instead. func (*Pool) Descriptor() ([]byte, []int) { - return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{19} + return file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP(), []int{20} } func (x *Pool) GetNotBondedTokens() string { @@ -12998,160 +13683,163 @@ var file_cosmos_staking_v1beta1_staking_proto_rawDesc = []byte{ 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x06, 0x76, - 0x61, 0x6c, 0x73, 0x65, 0x74, 0x22, 0xac, 0x02, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x04, 0x72, 0x61, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, + 0x61, 0x6c, 0x73, 0x65, 0x74, 0x22, 0xb7, 0x02, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, + 0x62, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x69, 0x73, 0x74, + 0x6f, 0x72, 0x79, 0x12, 0x43, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x56, 0x0a, 0x0f, 0x6f, 0x6c, 0x64, 0x5f, + 0x63, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x42, 0x18, 0xca, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, + 0x79, 0x52, 0x0d, 0x6f, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, + 0x12, 0x56, 0x0a, 0x0f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x75, 0x62, + 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x42, + 0x18, 0xca, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x6e, 0x65, 0x77, 0x43, 0x6f, + 0x6e, 0x73, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x6f, 0x74, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x64, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0xac, 0x02, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, + 0x74, 0x65, 0x73, 0x12, 0x50, 0x0a, 0x04, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, + 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, + 0x04, 0x72, 0x61, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, + 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x74, 0x65, 0x12, 0x64, + 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x04, 0x72, 0x61, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x08, 0x6d, - 0x61, 0x78, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, + 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x52, 0x61, 0x74, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xbb, + 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, + 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x73, + 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0xd0, 0xde, 0x1f, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, + 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xac, 0x01, 0x0a, + 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x6f, 0x6e, 0x69, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x6f, 0x6e, 0x69, 0x6b, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x10, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xc9, 0x06, 0x0a, 0x09, + 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x43, 0x0a, 0x10, 0x6f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x59, + 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x5f, 0x70, 0x75, 0x62, 0x6b, + 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x42, 0x18, + 0xca, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x6f, 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, + 0x73, 0x75, 0x73, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6a, 0x61, 0x69, 0x6c, 0x65, + 0x64, 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x42, 0x6f, 0x6e, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x54, 0x0a, + 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, - 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, - 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x07, 0x6d, 0x61, 0x78, - 0x52, 0x61, 0x74, 0x65, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, + 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, + 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x06, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x12, 0x67, 0x0a, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, - 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0d, 0x6d, 0x61, 0x78, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x61, 0x74, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, - 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xbb, 0x01, 0x0a, 0x0a, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x61, 0x74, 0x65, 0x73, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0xd0, 0xde, 0x1f, 0x01, - 0x52, 0x0f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, - 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0a, 0x75, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, - 0x1f, 0x01, 0x22, 0xac, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6f, 0x6e, 0x69, 0x6b, 0x65, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x6f, 0x6e, 0x69, 0x6b, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x73, - 0x69, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x77, 0x65, 0x62, 0x73, 0x69, - 0x74, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, - 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, - 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, - 0x01, 0x22, 0xc9, 0x06, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, - 0x43, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x59, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, - 0x73, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x41, 0x6e, 0x79, 0x42, 0x18, 0xca, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x0f, - 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x6e, 0x73, 0x75, 0x73, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, - 0x16, 0x0a, 0x06, 0x6a, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x6a, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x42, 0x6f, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x54, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, - 0x74, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x67, 0x0a, 0x10, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, - 0x63, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, - 0x1f, 0x00, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x75, 0x6e, - 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, - 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x48, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x6c, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, - 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, - 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x11, 0x6d, 0x69, - 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, - 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x50, 0x0a, - 0x0c, 0x56, 0x61, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x36, 0x0a, - 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x65, 0x73, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0x80, 0xdc, 0x20, 0x01, 0x22, - 0xa4, 0x01, 0x0a, 0x06, 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, - 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, + 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0f, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x62, + 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x4b, 0x0a, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, + 0x1f, 0x01, 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x48, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, + 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x6c, 0x0a, 0x13, 0x6d, + 0x69, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, + 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x44, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, + 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x50, 0x0a, 0x0c, 0x56, 0x61, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x36, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x3a, + 0x08, 0x98, 0xa0, 0x1f, 0x00, 0x80, 0xdc, 0x20, 0x01, 0x22, 0xa4, 0x01, 0x0a, 0x06, 0x44, 0x56, + 0x50, 0x61, 0x69, 0x72, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, + 0x22, 0x45, 0x0a, 0x07, 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x70, + 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x22, 0xfd, 0x01, 0x0a, 0x0a, 0x44, 0x56, 0x56, 0x54, + 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, + 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, - 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x45, 0x0a, 0x07, 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, - 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x56, 0x50, 0x61, 0x69, 0x72, - 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x05, 0x70, 0x61, 0x69, 0x72, 0x73, 0x22, 0xfd, 0x01, - 0x0a, 0x0a, 0x44, 0x56, 0x56, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x12, 0x45, 0x0a, 0x11, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, - 0x67, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, - 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, - 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x53, 0x0a, - 0x0b, 0x44, 0x56, 0x56, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x08, - 0x74, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x56, 0x56, 0x54, 0x72, 0x69, 0x70, 0x6c, - 0x65, 0x74, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x08, 0x74, 0x72, 0x69, 0x70, 0x6c, 0x65, - 0x74, 0x73, 0x22, 0xfe, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, - 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x54, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, - 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x06, 0x73, - 0x68, 0x61, 0x72, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, - 0xa0, 0x1f, 0x00, 0x22, 0x83, 0x02, 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x53, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, + 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, + 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x53, 0x0a, 0x0b, 0x44, 0x56, 0x56, 0x54, 0x72, + 0x69, 0x70, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x70, 0x6c, 0x65, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x44, 0x56, 0x56, 0x54, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x08, 0x74, 0x72, 0x69, 0x70, 0x6c, 0x65, 0x74, 0x73, 0x22, 0xfe, 0x01, 0x0a, + 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, @@ -13160,179 +13848,196 @@ var file_cosmos_staking_v1beta1_staking_proto_rawDesc = []byte{ 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x07, 0x65, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, - 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, - 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xdb, 0x02, 0x0a, 0x18, 0x55, 0x6e, + 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x54, 0x0a, 0x06, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, + 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x3a, + 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x83, 0x02, + 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x45, 0x0a, 0x11, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x50, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x4d, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0e, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x65, - 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, - 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x08, 0x98, - 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xd9, 0x02, 0x0a, 0x11, 0x52, 0x65, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, - 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, - 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, - 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, - 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, - 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0a, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x5f, 0x64, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, + 0xa0, 0x1f, 0x00, 0x22, 0xdb, 0x02, 0x0a, 0x18, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x4d, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, + 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, + 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, + 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, + 0x56, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, - 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x09, - 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x44, 0x73, 0x74, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, - 0xa0, 0x1f, 0x01, 0x22, 0xca, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, - 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, - 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x73, 0x74, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x49, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, - 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, - 0x22, 0xf2, 0x02, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4a, 0x0a, 0x0e, 0x75, - 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, - 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, 0x1f, 0x01, 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0d, 0x6d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, - 0x2d, 0x0a, 0x12, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x62, 0x6f, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x62, 0x6f, 0x6e, 0x64, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x7c, 0x0a, - 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0xc8, 0xde, 0x1f, 0x00, + 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, + 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, + 0x01, 0x22, 0xd9, 0x02, 0x0a, 0x11, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x4d, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x90, 0xdf, 0x1f, 0x01, 0x52, + 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x65, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, + 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0e, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0a, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x5f, 0x64, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, - 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xf2, 0xde, 0x1f, 0x1a, 0x79, 0x61, - 0x6d, 0x6c, 0x3a, 0x22, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x22, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, - 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xa3, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0a, + 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, + 0x44, 0x73, 0x74, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xca, 0x02, + 0x0a, 0x0c, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, + 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x52, 0x10, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x5f, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x53, 0x72, 0x63, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x4c, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x13, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x49, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, + 0xde, 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, + 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xf2, 0x02, 0x0a, 0x06, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4a, 0x0a, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xc8, 0xde, 0x1f, 0x00, 0x98, 0xdf, + 0x1f, 0x01, 0x52, 0x0d, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6d, 0x61, 0x78, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, + 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6d, + 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x68, 0x69, 0x73, + 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, + 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6f, 0x6e, 0x64, + 0x5f, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, 0x6f, + 0x6e, 0x64, 0x44, 0x65, 0x6e, 0x6f, 0x6d, 0x12, 0x7c, 0x0a, 0x13, 0x6d, 0x69, 0x6e, 0x5f, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x4c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x44, 0x65, 0x63, 0xf2, 0xde, 0x1f, 0x1a, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x6d, 0x69, + 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, + 0x65, 0x22, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x61, 0x74, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, + 0xa3, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x39, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, + 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x12, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, + 0x52, 0x11, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x56, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, + 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, + 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, + 0x01, 0x22, 0xbf, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, - 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xd9, 0x01, 0x0a, 0x19, - 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x12, 0x72, 0x65, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, - 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x11, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x56, 0x0a, 0x07, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, - 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, - 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xbf, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, - 0x1f, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x51, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x83, 0x02, 0x0a, 0x04, 0x50, 0x6f, - 0x6f, 0x6c, 0x12, 0x7d, 0x0a, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, - 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x51, 0xc8, - 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, - 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, - 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, - 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x12, 0x72, 0x0a, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4d, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, - 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, - 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x0d, 0x62, 0x6f, 0x6e, 0x64, - 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x3a, 0x08, 0xe8, 0xa0, 0x1f, 0x01, 0xf0, 0xa0, 0x1f, 0x01, 0x2a, - 0xb6, 0x01, 0x0a, 0x0a, 0x42, 0x6f, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, - 0x0a, 0x17, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x0f, 0x8a, 0x9d, 0x20, - 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x14, - 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, - 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, 0x1a, 0x0c, 0x8a, 0x9d, 0x20, 0x08, 0x55, 0x6e, 0x62, 0x6f, - 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x15, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x1a, - 0x0d, 0x8a, 0x9d, 0x20, 0x09, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x22, - 0x0a, 0x12, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, - 0x4e, 0x44, 0x45, 0x44, 0x10, 0x03, 0x1a, 0x0a, 0x8a, 0x9d, 0x20, 0x06, 0x42, 0x6f, 0x6e, 0x64, - 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, 0x1e, 0x00, 0x42, 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, - 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, - 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, - 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, - 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0c, 0x72, 0x65, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x07, 0x65, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x04, 0xe8, + 0xa0, 0x1f, 0x00, 0x22, 0x83, 0x02, 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x7d, 0x0a, 0x11, + 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x51, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, + 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, + 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x42, + 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x72, 0x0a, 0x0d, 0x62, + 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x4d, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, + 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, + 0x74, 0x52, 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x3a, + 0x08, 0xe8, 0xa0, 0x1f, 0x01, 0xf0, 0xa0, 0x1f, 0x01, 0x2a, 0xb6, 0x01, 0x0a, 0x0a, 0x42, 0x6f, + 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x17, 0x42, 0x4f, 0x4e, 0x44, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x0f, 0x8a, 0x9d, 0x20, 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, + 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x14, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, + 0x1a, 0x0c, 0x8a, 0x9d, 0x20, 0x08, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, + 0x0a, 0x15, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, + 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x1a, 0x0d, 0x8a, 0x9d, 0x20, 0x09, 0x55, + 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x12, 0x42, 0x4f, 0x4e, 0x44, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x03, + 0x1a, 0x0a, 0x8a, 0x9d, 0x20, 0x06, 0x42, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, + 0x1e, 0x00, 0x42, 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x42, 0x0c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, + 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, + 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -13348,62 +14053,65 @@ func file_cosmos_staking_v1beta1_staking_proto_rawDescGZIP() []byte { } var file_cosmos_staking_v1beta1_staking_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_cosmos_staking_v1beta1_staking_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_cosmos_staking_v1beta1_staking_proto_msgTypes = make([]protoimpl.MessageInfo, 21) var file_cosmos_staking_v1beta1_staking_proto_goTypes = []interface{}{ (BondStatus)(0), // 0: cosmos.staking.v1beta1.BondStatus (*HistoricalInfo)(nil), // 1: cosmos.staking.v1beta1.HistoricalInfo - (*CommissionRates)(nil), // 2: cosmos.staking.v1beta1.CommissionRates - (*Commission)(nil), // 3: cosmos.staking.v1beta1.Commission - (*Description)(nil), // 4: cosmos.staking.v1beta1.Description - (*Validator)(nil), // 5: cosmos.staking.v1beta1.Validator - (*ValAddresses)(nil), // 6: cosmos.staking.v1beta1.ValAddresses - (*DVPair)(nil), // 7: cosmos.staking.v1beta1.DVPair - (*DVPairs)(nil), // 8: cosmos.staking.v1beta1.DVPairs - (*DVVTriplet)(nil), // 9: cosmos.staking.v1beta1.DVVTriplet - (*DVVTriplets)(nil), // 10: cosmos.staking.v1beta1.DVVTriplets - (*Delegation)(nil), // 11: cosmos.staking.v1beta1.Delegation - (*UnbondingDelegation)(nil), // 12: cosmos.staking.v1beta1.UnbondingDelegation - (*UnbondingDelegationEntry)(nil), // 13: cosmos.staking.v1beta1.UnbondingDelegationEntry - (*RedelegationEntry)(nil), // 14: cosmos.staking.v1beta1.RedelegationEntry - (*Redelegation)(nil), // 15: cosmos.staking.v1beta1.Redelegation - (*Params)(nil), // 16: cosmos.staking.v1beta1.Params - (*DelegationResponse)(nil), // 17: cosmos.staking.v1beta1.DelegationResponse - (*RedelegationEntryResponse)(nil), // 18: cosmos.staking.v1beta1.RedelegationEntryResponse - (*RedelegationResponse)(nil), // 19: cosmos.staking.v1beta1.RedelegationResponse - (*Pool)(nil), // 20: cosmos.staking.v1beta1.Pool - (*types.Header)(nil), // 21: tendermint.types.Header - (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp + (*ConsPubKeyRotationHistory)(nil), // 2: cosmos.staking.v1beta1.ConsPubKeyRotationHistory + (*CommissionRates)(nil), // 3: cosmos.staking.v1beta1.CommissionRates + (*Commission)(nil), // 4: cosmos.staking.v1beta1.Commission + (*Description)(nil), // 5: cosmos.staking.v1beta1.Description + (*Validator)(nil), // 6: cosmos.staking.v1beta1.Validator + (*ValAddresses)(nil), // 7: cosmos.staking.v1beta1.ValAddresses + (*DVPair)(nil), // 8: cosmos.staking.v1beta1.DVPair + (*DVPairs)(nil), // 9: cosmos.staking.v1beta1.DVPairs + (*DVVTriplet)(nil), // 10: cosmos.staking.v1beta1.DVVTriplet + (*DVVTriplets)(nil), // 11: cosmos.staking.v1beta1.DVVTriplets + (*Delegation)(nil), // 12: cosmos.staking.v1beta1.Delegation + (*UnbondingDelegation)(nil), // 13: cosmos.staking.v1beta1.UnbondingDelegation + (*UnbondingDelegationEntry)(nil), // 14: cosmos.staking.v1beta1.UnbondingDelegationEntry + (*RedelegationEntry)(nil), // 15: cosmos.staking.v1beta1.RedelegationEntry + (*Redelegation)(nil), // 16: cosmos.staking.v1beta1.Redelegation + (*Params)(nil), // 17: cosmos.staking.v1beta1.Params + (*DelegationResponse)(nil), // 18: cosmos.staking.v1beta1.DelegationResponse + (*RedelegationEntryResponse)(nil), // 19: cosmos.staking.v1beta1.RedelegationEntryResponse + (*RedelegationResponse)(nil), // 20: cosmos.staking.v1beta1.RedelegationResponse + (*Pool)(nil), // 21: cosmos.staking.v1beta1.Pool + (*types.Header)(nil), // 22: tendermint.types.Header (*anypb.Any)(nil), // 23: google.protobuf.Any - (*durationpb.Duration)(nil), // 24: google.protobuf.Duration - (*v1beta1.Coin)(nil), // 25: cosmos.base.v1beta1.Coin + (*timestamppb.Timestamp)(nil), // 24: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 25: google.protobuf.Duration + (*v1beta1.Coin)(nil), // 26: cosmos.base.v1beta1.Coin } var file_cosmos_staking_v1beta1_staking_proto_depIdxs = []int32{ - 21, // 0: cosmos.staking.v1beta1.HistoricalInfo.header:type_name -> tendermint.types.Header - 5, // 1: cosmos.staking.v1beta1.HistoricalInfo.valset:type_name -> cosmos.staking.v1beta1.Validator - 2, // 2: cosmos.staking.v1beta1.Commission.commission_rates:type_name -> cosmos.staking.v1beta1.CommissionRates - 22, // 3: cosmos.staking.v1beta1.Commission.update_time:type_name -> google.protobuf.Timestamp - 23, // 4: cosmos.staking.v1beta1.Validator.consensus_pubkey:type_name -> google.protobuf.Any - 0, // 5: cosmos.staking.v1beta1.Validator.status:type_name -> cosmos.staking.v1beta1.BondStatus - 4, // 6: cosmos.staking.v1beta1.Validator.description:type_name -> cosmos.staking.v1beta1.Description - 22, // 7: cosmos.staking.v1beta1.Validator.unbonding_time:type_name -> google.protobuf.Timestamp - 3, // 8: cosmos.staking.v1beta1.Validator.commission:type_name -> cosmos.staking.v1beta1.Commission - 7, // 9: cosmos.staking.v1beta1.DVPairs.pairs:type_name -> cosmos.staking.v1beta1.DVPair - 9, // 10: cosmos.staking.v1beta1.DVVTriplets.triplets:type_name -> cosmos.staking.v1beta1.DVVTriplet - 13, // 11: cosmos.staking.v1beta1.UnbondingDelegation.entries:type_name -> cosmos.staking.v1beta1.UnbondingDelegationEntry - 22, // 12: cosmos.staking.v1beta1.UnbondingDelegationEntry.completion_time:type_name -> google.protobuf.Timestamp - 22, // 13: cosmos.staking.v1beta1.RedelegationEntry.completion_time:type_name -> google.protobuf.Timestamp - 14, // 14: cosmos.staking.v1beta1.Redelegation.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntry - 24, // 15: cosmos.staking.v1beta1.Params.unbonding_time:type_name -> google.protobuf.Duration - 11, // 16: cosmos.staking.v1beta1.DelegationResponse.delegation:type_name -> cosmos.staking.v1beta1.Delegation - 25, // 17: cosmos.staking.v1beta1.DelegationResponse.balance:type_name -> cosmos.base.v1beta1.Coin - 14, // 18: cosmos.staking.v1beta1.RedelegationEntryResponse.redelegation_entry:type_name -> cosmos.staking.v1beta1.RedelegationEntry - 15, // 19: cosmos.staking.v1beta1.RedelegationResponse.redelegation:type_name -> cosmos.staking.v1beta1.Redelegation - 18, // 20: cosmos.staking.v1beta1.RedelegationResponse.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntryResponse - 21, // [21:21] is the sub-list for method output_type - 21, // [21:21] is the sub-list for method input_type - 21, // [21:21] is the sub-list for extension type_name - 21, // [21:21] is the sub-list for extension extendee - 0, // [0:21] is the sub-list for field type_name + 22, // 0: cosmos.staking.v1beta1.HistoricalInfo.header:type_name -> tendermint.types.Header + 6, // 1: cosmos.staking.v1beta1.HistoricalInfo.valset:type_name -> cosmos.staking.v1beta1.Validator + 23, // 2: cosmos.staking.v1beta1.ConsPubKeyRotationHistory.old_cons_pubkey:type_name -> google.protobuf.Any + 23, // 3: cosmos.staking.v1beta1.ConsPubKeyRotationHistory.new_cons_pubkey:type_name -> google.protobuf.Any + 3, // 4: cosmos.staking.v1beta1.Commission.commission_rates:type_name -> cosmos.staking.v1beta1.CommissionRates + 24, // 5: cosmos.staking.v1beta1.Commission.update_time:type_name -> google.protobuf.Timestamp + 23, // 6: cosmos.staking.v1beta1.Validator.consensus_pubkey:type_name -> google.protobuf.Any + 0, // 7: cosmos.staking.v1beta1.Validator.status:type_name -> cosmos.staking.v1beta1.BondStatus + 5, // 8: cosmos.staking.v1beta1.Validator.description:type_name -> cosmos.staking.v1beta1.Description + 24, // 9: cosmos.staking.v1beta1.Validator.unbonding_time:type_name -> google.protobuf.Timestamp + 4, // 10: cosmos.staking.v1beta1.Validator.commission:type_name -> cosmos.staking.v1beta1.Commission + 8, // 11: cosmos.staking.v1beta1.DVPairs.pairs:type_name -> cosmos.staking.v1beta1.DVPair + 10, // 12: cosmos.staking.v1beta1.DVVTriplets.triplets:type_name -> cosmos.staking.v1beta1.DVVTriplet + 14, // 13: cosmos.staking.v1beta1.UnbondingDelegation.entries:type_name -> cosmos.staking.v1beta1.UnbondingDelegationEntry + 24, // 14: cosmos.staking.v1beta1.UnbondingDelegationEntry.completion_time:type_name -> google.protobuf.Timestamp + 24, // 15: cosmos.staking.v1beta1.RedelegationEntry.completion_time:type_name -> google.protobuf.Timestamp + 15, // 16: cosmos.staking.v1beta1.Redelegation.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntry + 25, // 17: cosmos.staking.v1beta1.Params.unbonding_time:type_name -> google.protobuf.Duration + 12, // 18: cosmos.staking.v1beta1.DelegationResponse.delegation:type_name -> cosmos.staking.v1beta1.Delegation + 26, // 19: cosmos.staking.v1beta1.DelegationResponse.balance:type_name -> cosmos.base.v1beta1.Coin + 15, // 20: cosmos.staking.v1beta1.RedelegationEntryResponse.redelegation_entry:type_name -> cosmos.staking.v1beta1.RedelegationEntry + 16, // 21: cosmos.staking.v1beta1.RedelegationResponse.redelegation:type_name -> cosmos.staking.v1beta1.Redelegation + 19, // 22: cosmos.staking.v1beta1.RedelegationResponse.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntryResponse + 23, // [23:23] is the sub-list for method output_type + 23, // [23:23] is the sub-list for method input_type + 23, // [23:23] is the sub-list for extension type_name + 23, // [23:23] is the sub-list for extension extendee + 0, // [0:23] is the sub-list for field type_name } func init() { file_cosmos_staking_v1beta1_staking_proto_init() } @@ -13425,7 +14133,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CommissionRates); i { + switch v := v.(*ConsPubKeyRotationHistory); i { case 0: return &v.state case 1: @@ -13437,7 +14145,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Commission); i { + switch v := v.(*CommissionRates); i { case 0: return &v.state case 1: @@ -13449,7 +14157,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Description); i { + switch v := v.(*Commission); i { case 0: return &v.state case 1: @@ -13461,7 +14169,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Validator); i { + switch v := v.(*Description); i { case 0: return &v.state case 1: @@ -13473,7 +14181,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ValAddresses); i { + switch v := v.(*Validator); i { case 0: return &v.state case 1: @@ -13485,7 +14193,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DVPair); i { + switch v := v.(*ValAddresses); i { case 0: return &v.state case 1: @@ -13497,7 +14205,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DVPairs); i { + switch v := v.(*DVPair); i { case 0: return &v.state case 1: @@ -13509,7 +14217,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DVVTriplet); i { + switch v := v.(*DVPairs); i { case 0: return &v.state case 1: @@ -13521,7 +14229,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DVVTriplets); i { + switch v := v.(*DVVTriplet); i { case 0: return &v.state case 1: @@ -13533,7 +14241,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Delegation); i { + switch v := v.(*DVVTriplets); i { case 0: return &v.state case 1: @@ -13545,7 +14253,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnbondingDelegation); i { + switch v := v.(*Delegation); i { case 0: return &v.state case 1: @@ -13557,7 +14265,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnbondingDelegationEntry); i { + switch v := v.(*UnbondingDelegation); i { case 0: return &v.state case 1: @@ -13569,7 +14277,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RedelegationEntry); i { + switch v := v.(*UnbondingDelegationEntry); i { case 0: return &v.state case 1: @@ -13581,7 +14289,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Redelegation); i { + switch v := v.(*RedelegationEntry); i { case 0: return &v.state case 1: @@ -13593,7 +14301,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Params); i { + switch v := v.(*Redelegation); i { case 0: return &v.state case 1: @@ -13605,7 +14313,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DelegationResponse); i { + switch v := v.(*Params); i { case 0: return &v.state case 1: @@ -13617,7 +14325,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RedelegationEntryResponse); i { + switch v := v.(*DelegationResponse); i { case 0: return &v.state case 1: @@ -13629,7 +14337,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RedelegationResponse); i { + switch v := v.(*RedelegationEntryResponse); i { case 0: return &v.state case 1: @@ -13641,6 +14349,18 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { } } file_cosmos_staking_v1beta1_staking_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RedelegationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_staking_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Pool); i { case 0: return &v.state @@ -13659,7 +14379,7 @@ func file_cosmos_staking_v1beta1_staking_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_staking_v1beta1_staking_proto_rawDesc, NumEnums: 1, - NumMessages: 20, + NumMessages: 21, NumExtensions: 0, NumServices: 0, }, diff --git a/api/cosmos/staking/v1beta1/tx.pulsar.go b/api/cosmos/staking/v1beta1/tx.pulsar.go index a2ff599dec41..392f42f34fe6 100644 --- a/api/cosmos/staking/v1beta1/tx.pulsar.go +++ b/api/cosmos/staking/v1beta1/tx.pulsar.go @@ -6167,6 +6167,910 @@ func (x *fastReflection_MsgCancelUnbondingDelegationResponse) ProtoMethods() *pr } } +var ( + md_MsgRotateConsPubKey protoreflect.MessageDescriptor + fd_MsgRotateConsPubKey_sender protoreflect.FieldDescriptor + fd_MsgRotateConsPubKey_validator_address protoreflect.FieldDescriptor + fd_MsgRotateConsPubKey_new_pub_key protoreflect.FieldDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgRotateConsPubKey = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgRotateConsPubKey") + fd_MsgRotateConsPubKey_sender = md_MsgRotateConsPubKey.Fields().ByName("sender") + fd_MsgRotateConsPubKey_validator_address = md_MsgRotateConsPubKey.Fields().ByName("validator_address") + fd_MsgRotateConsPubKey_new_pub_key = md_MsgRotateConsPubKey.Fields().ByName("new_pub_key") +} + +var _ protoreflect.Message = (*fastReflection_MsgRotateConsPubKey)(nil) + +type fastReflection_MsgRotateConsPubKey MsgRotateConsPubKey + +func (x *MsgRotateConsPubKey) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgRotateConsPubKey)(x) +} + +func (x *MsgRotateConsPubKey) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgRotateConsPubKey_messageType fastReflection_MsgRotateConsPubKey_messageType +var _ protoreflect.MessageType = fastReflection_MsgRotateConsPubKey_messageType{} + +type fastReflection_MsgRotateConsPubKey_messageType struct{} + +func (x fastReflection_MsgRotateConsPubKey_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgRotateConsPubKey)(nil) +} +func (x fastReflection_MsgRotateConsPubKey_messageType) New() protoreflect.Message { + return new(fastReflection_MsgRotateConsPubKey) +} +func (x fastReflection_MsgRotateConsPubKey_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRotateConsPubKey +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgRotateConsPubKey) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRotateConsPubKey +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgRotateConsPubKey) Type() protoreflect.MessageType { + return _fastReflection_MsgRotateConsPubKey_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgRotateConsPubKey) New() protoreflect.Message { + return new(fastReflection_MsgRotateConsPubKey) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgRotateConsPubKey) Interface() protoreflect.ProtoMessage { + return (*MsgRotateConsPubKey)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgRotateConsPubKey) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Sender != "" { + value := protoreflect.ValueOfString(x.Sender) + if !f(fd_MsgRotateConsPubKey_sender, value) { + return + } + } + if x.ValidatorAddress != "" { + value := protoreflect.ValueOfString(x.ValidatorAddress) + if !f(fd_MsgRotateConsPubKey_validator_address, value) { + return + } + } + if x.NewPubKey != "" { + value := protoreflect.ValueOfString(x.NewPubKey) + if !f(fd_MsgRotateConsPubKey_new_pub_key, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgRotateConsPubKey) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.sender": + return x.Sender != "" + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": + return x.ValidatorAddress != "" + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": + return x.NewPubKey != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKey does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRotateConsPubKey) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.sender": + x.Sender = "" + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": + x.ValidatorAddress = "" + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": + x.NewPubKey = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKey does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgRotateConsPubKey) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.sender": + value := x.Sender + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": + value := x.ValidatorAddress + return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": + value := x.NewPubKey + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKey does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRotateConsPubKey) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.sender": + x.Sender = value.Interface().(string) + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": + x.ValidatorAddress = value.Interface().(string) + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": + x.NewPubKey = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKey does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRotateConsPubKey) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.sender": + panic(fmt.Errorf("field sender of message cosmos.staking.v1beta1.MsgRotateConsPubKey is not mutable")) + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": + panic(fmt.Errorf("field validator_address of message cosmos.staking.v1beta1.MsgRotateConsPubKey is not mutable")) + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": + panic(fmt.Errorf("field new_pub_key of message cosmos.staking.v1beta1.MsgRotateConsPubKey is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKey does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgRotateConsPubKey) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.sender": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": + return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKey does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgRotateConsPubKey) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgRotateConsPubKey", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgRotateConsPubKey) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRotateConsPubKey) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgRotateConsPubKey) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgRotateConsPubKey) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgRotateConsPubKey) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + l = len(x.Sender) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.ValidatorAddress) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.NewPubKey) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgRotateConsPubKey) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.NewPubKey) > 0 { + i -= len(x.NewPubKey) + copy(dAtA[i:], x.NewPubKey) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NewPubKey))) + i-- + dAtA[i] = 0x1a + } + if len(x.ValidatorAddress) > 0 { + i -= len(x.ValidatorAddress) + copy(dAtA[i:], x.ValidatorAddress) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(x.Sender) > 0 { + i -= len(x.Sender) + copy(dAtA[i:], x.Sender) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.Sender))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgRotateConsPubKey) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRotateConsPubKey: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRotateConsPubKey: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewPubKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NewPubKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_MsgRotateConsPubKeyResponse protoreflect.MessageDescriptor +) + +func init() { + file_cosmos_staking_v1beta1_tx_proto_init() + md_MsgRotateConsPubKeyResponse = File_cosmos_staking_v1beta1_tx_proto.Messages().ByName("MsgRotateConsPubKeyResponse") +} + +var _ protoreflect.Message = (*fastReflection_MsgRotateConsPubKeyResponse)(nil) + +type fastReflection_MsgRotateConsPubKeyResponse MsgRotateConsPubKeyResponse + +func (x *MsgRotateConsPubKeyResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_MsgRotateConsPubKeyResponse)(x) +} + +func (x *MsgRotateConsPubKeyResponse) slowProtoReflect() protoreflect.Message { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_MsgRotateConsPubKeyResponse_messageType fastReflection_MsgRotateConsPubKeyResponse_messageType +var _ protoreflect.MessageType = fastReflection_MsgRotateConsPubKeyResponse_messageType{} + +type fastReflection_MsgRotateConsPubKeyResponse_messageType struct{} + +func (x fastReflection_MsgRotateConsPubKeyResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_MsgRotateConsPubKeyResponse)(nil) +} +func (x fastReflection_MsgRotateConsPubKeyResponse_messageType) New() protoreflect.Message { + return new(fastReflection_MsgRotateConsPubKeyResponse) +} +func (x fastReflection_MsgRotateConsPubKeyResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRotateConsPubKeyResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_MsgRotateConsPubKeyResponse) Descriptor() protoreflect.MessageDescriptor { + return md_MsgRotateConsPubKeyResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_MsgRotateConsPubKeyResponse) Type() protoreflect.MessageType { + return _fastReflection_MsgRotateConsPubKeyResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_MsgRotateConsPubKeyResponse) New() protoreflect.Message { + return new(fastReflection_MsgRotateConsPubKeyResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_MsgRotateConsPubKeyResponse) Interface() protoreflect.ProtoMessage { + return (*MsgRotateConsPubKeyResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_MsgRotateConsPubKeyResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_MsgRotateConsPubKeyResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRotateConsPubKeyResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_MsgRotateConsPubKeyResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRotateConsPubKeyResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRotateConsPubKeyResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_MsgRotateConsPubKeyResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse")) + } + panic(fmt.Errorf("message cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_MsgRotateConsPubKeyResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_MsgRotateConsPubKeyResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_MsgRotateConsPubKeyResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_MsgRotateConsPubKeyResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_MsgRotateConsPubKeyResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*MsgRotateConsPubKeyResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*MsgRotateConsPubKeyResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*MsgRotateConsPubKeyResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRotateConsPubKeyResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: MsgRotateConsPubKeyResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.0 @@ -6741,6 +7645,83 @@ func (*MsgCancelUnbondingDelegationResponse) Descriptor() ([]byte, []int) { return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{11} } +type MsgRotateConsPubKey struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + NewPubKey string `protobuf:"bytes,3,opt,name=new_pub_key,json=newPubKey,proto3" json:"new_pub_key,omitempty"` +} + +func (x *MsgRotateConsPubKey) Reset() { + *x = MsgRotateConsPubKey{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgRotateConsPubKey) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgRotateConsPubKey) ProtoMessage() {} + +// Deprecated: Use MsgRotateConsPubKey.ProtoReflect.Descriptor instead. +func (*MsgRotateConsPubKey) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{12} +} + +func (x *MsgRotateConsPubKey) GetSender() string { + if x != nil { + return x.Sender + } + return "" +} + +func (x *MsgRotateConsPubKey) GetValidatorAddress() string { + if x != nil { + return x.ValidatorAddress + } + return "" +} + +func (x *MsgRotateConsPubKey) GetNewPubKey() string { + if x != nil { + return x.NewPubKey + } + return "" +} + +type MsgRotateConsPubKeyResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MsgRotateConsPubKeyResponse) Reset() { + *x = MsgRotateConsPubKeyResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_cosmos_staking_v1beta1_tx_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MsgRotateConsPubKeyResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MsgRotateConsPubKeyResponse) ProtoMessage() {} + +// Deprecated: Use MsgRotateConsPubKeyResponse.ProtoReflect.Descriptor instead. +func (*MsgRotateConsPubKeyResponse) Descriptor() ([]byte, []int) { + return file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP(), []int{13} +} + var File_cosmos_staking_v1beta1_tx_proto protoreflect.FileDescriptor var file_cosmos_staking_v1beta1_tx_proto_rawDesc = []byte{ @@ -6916,49 +7897,71 @@ var file_cosmos_staking_v1beta1_tx_proto_rawDesc = []byte{ 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x26, 0x0a, 0x24, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x32, 0xac, 0x05, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, - 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x13, 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x11, 0x76, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x75, 0x62, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xca, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, + 0x79, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x22, 0x1d, 0x0a, 0x1b, + 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa2, 0x06, 0x0a, 0x03, + 0x4d, 0x73, 0x67, 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, - 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, - 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, 0x6e, - 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, + 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, + 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, + 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, + 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x19, 0x43, 0x61, 0x6e, + 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, 0x6e, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, - 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, - 0x01, 0x0a, 0x19, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x63, + 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, - 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x10, 0x52, 0x6f, + 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x2b, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x1a, 0x33, 0x2e, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xd7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, @@ -6988,7 +7991,7 @@ func file_cosmos_staking_v1beta1_tx_proto_rawDescGZIP() []byte { return file_cosmos_staking_v1beta1_tx_proto_rawDescData } -var file_cosmos_staking_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 12) +var file_cosmos_staking_v1beta1_tx_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_cosmos_staking_v1beta1_tx_proto_goTypes = []interface{}{ (*MsgCreateValidator)(nil), // 0: cosmos.staking.v1beta1.MsgCreateValidator (*MsgCreateValidatorResponse)(nil), // 1: cosmos.staking.v1beta1.MsgCreateValidatorResponse @@ -7002,38 +8005,42 @@ var file_cosmos_staking_v1beta1_tx_proto_goTypes = []interface{}{ (*MsgUndelegateResponse)(nil), // 9: cosmos.staking.v1beta1.MsgUndelegateResponse (*MsgCancelUnbondingDelegation)(nil), // 10: cosmos.staking.v1beta1.MsgCancelUnbondingDelegation (*MsgCancelUnbondingDelegationResponse)(nil), // 11: cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse - (*Description)(nil), // 12: cosmos.staking.v1beta1.Description - (*CommissionRates)(nil), // 13: cosmos.staking.v1beta1.CommissionRates - (*anypb.Any)(nil), // 14: google.protobuf.Any - (*v1beta1.Coin)(nil), // 15: cosmos.base.v1beta1.Coin - (*timestamppb.Timestamp)(nil), // 16: google.protobuf.Timestamp + (*MsgRotateConsPubKey)(nil), // 12: cosmos.staking.v1beta1.MsgRotateConsPubKey + (*MsgRotateConsPubKeyResponse)(nil), // 13: cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse + (*Description)(nil), // 14: cosmos.staking.v1beta1.Description + (*CommissionRates)(nil), // 15: cosmos.staking.v1beta1.CommissionRates + (*anypb.Any)(nil), // 16: google.protobuf.Any + (*v1beta1.Coin)(nil), // 17: cosmos.base.v1beta1.Coin + (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp } var file_cosmos_staking_v1beta1_tx_proto_depIdxs = []int32{ - 12, // 0: cosmos.staking.v1beta1.MsgCreateValidator.description:type_name -> cosmos.staking.v1beta1.Description - 13, // 1: cosmos.staking.v1beta1.MsgCreateValidator.commission:type_name -> cosmos.staking.v1beta1.CommissionRates - 14, // 2: cosmos.staking.v1beta1.MsgCreateValidator.pubkey:type_name -> google.protobuf.Any - 15, // 3: cosmos.staking.v1beta1.MsgCreateValidator.value:type_name -> cosmos.base.v1beta1.Coin - 12, // 4: cosmos.staking.v1beta1.MsgEditValidator.description:type_name -> cosmos.staking.v1beta1.Description - 15, // 5: cosmos.staking.v1beta1.MsgDelegate.amount:type_name -> cosmos.base.v1beta1.Coin - 15, // 6: cosmos.staking.v1beta1.MsgBeginRedelegate.amount:type_name -> cosmos.base.v1beta1.Coin - 16, // 7: cosmos.staking.v1beta1.MsgBeginRedelegateResponse.completion_time:type_name -> google.protobuf.Timestamp - 15, // 8: cosmos.staking.v1beta1.MsgUndelegate.amount:type_name -> cosmos.base.v1beta1.Coin - 16, // 9: cosmos.staking.v1beta1.MsgUndelegateResponse.completion_time:type_name -> google.protobuf.Timestamp - 15, // 10: cosmos.staking.v1beta1.MsgCancelUnbondingDelegation.amount:type_name -> cosmos.base.v1beta1.Coin + 14, // 0: cosmos.staking.v1beta1.MsgCreateValidator.description:type_name -> cosmos.staking.v1beta1.Description + 15, // 1: cosmos.staking.v1beta1.MsgCreateValidator.commission:type_name -> cosmos.staking.v1beta1.CommissionRates + 16, // 2: cosmos.staking.v1beta1.MsgCreateValidator.pubkey:type_name -> google.protobuf.Any + 17, // 3: cosmos.staking.v1beta1.MsgCreateValidator.value:type_name -> cosmos.base.v1beta1.Coin + 14, // 4: cosmos.staking.v1beta1.MsgEditValidator.description:type_name -> cosmos.staking.v1beta1.Description + 17, // 5: cosmos.staking.v1beta1.MsgDelegate.amount:type_name -> cosmos.base.v1beta1.Coin + 17, // 6: cosmos.staking.v1beta1.MsgBeginRedelegate.amount:type_name -> cosmos.base.v1beta1.Coin + 18, // 7: cosmos.staking.v1beta1.MsgBeginRedelegateResponse.completion_time:type_name -> google.protobuf.Timestamp + 17, // 8: cosmos.staking.v1beta1.MsgUndelegate.amount:type_name -> cosmos.base.v1beta1.Coin + 18, // 9: cosmos.staking.v1beta1.MsgUndelegateResponse.completion_time:type_name -> google.protobuf.Timestamp + 17, // 10: cosmos.staking.v1beta1.MsgCancelUnbondingDelegation.amount:type_name -> cosmos.base.v1beta1.Coin 0, // 11: cosmos.staking.v1beta1.Msg.CreateValidator:input_type -> cosmos.staking.v1beta1.MsgCreateValidator 2, // 12: cosmos.staking.v1beta1.Msg.EditValidator:input_type -> cosmos.staking.v1beta1.MsgEditValidator 4, // 13: cosmos.staking.v1beta1.Msg.Delegate:input_type -> cosmos.staking.v1beta1.MsgDelegate 6, // 14: cosmos.staking.v1beta1.Msg.BeginRedelegate:input_type -> cosmos.staking.v1beta1.MsgBeginRedelegate 8, // 15: cosmos.staking.v1beta1.Msg.Undelegate:input_type -> cosmos.staking.v1beta1.MsgUndelegate 10, // 16: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:input_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegation - 1, // 17: cosmos.staking.v1beta1.Msg.CreateValidator:output_type -> cosmos.staking.v1beta1.MsgCreateValidatorResponse - 3, // 18: cosmos.staking.v1beta1.Msg.EditValidator:output_type -> cosmos.staking.v1beta1.MsgEditValidatorResponse - 5, // 19: cosmos.staking.v1beta1.Msg.Delegate:output_type -> cosmos.staking.v1beta1.MsgDelegateResponse - 7, // 20: cosmos.staking.v1beta1.Msg.BeginRedelegate:output_type -> cosmos.staking.v1beta1.MsgBeginRedelegateResponse - 9, // 21: cosmos.staking.v1beta1.Msg.Undelegate:output_type -> cosmos.staking.v1beta1.MsgUndelegateResponse - 11, // 22: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:output_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse - 17, // [17:23] is the sub-list for method output_type - 11, // [11:17] is the sub-list for method input_type + 12, // 17: cosmos.staking.v1beta1.Msg.RotateConsPubKey:input_type -> cosmos.staking.v1beta1.MsgRotateConsPubKey + 1, // 18: cosmos.staking.v1beta1.Msg.CreateValidator:output_type -> cosmos.staking.v1beta1.MsgCreateValidatorResponse + 3, // 19: cosmos.staking.v1beta1.Msg.EditValidator:output_type -> cosmos.staking.v1beta1.MsgEditValidatorResponse + 5, // 20: cosmos.staking.v1beta1.Msg.Delegate:output_type -> cosmos.staking.v1beta1.MsgDelegateResponse + 7, // 21: cosmos.staking.v1beta1.Msg.BeginRedelegate:output_type -> cosmos.staking.v1beta1.MsgBeginRedelegateResponse + 9, // 22: cosmos.staking.v1beta1.Msg.Undelegate:output_type -> cosmos.staking.v1beta1.MsgUndelegateResponse + 11, // 23: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:output_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse + 13, // 24: cosmos.staking.v1beta1.Msg.RotateConsPubKey:output_type -> cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse + 18, // [18:25] is the sub-list for method output_type + 11, // [11:18] is the sub-list for method input_type 11, // [11:11] is the sub-list for extension type_name 11, // [11:11] is the sub-list for extension extendee 0, // [0:11] is the sub-list for field type_name @@ -7190,6 +8197,30 @@ func file_cosmos_staking_v1beta1_tx_proto_init() { return nil } } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgRotateConsPubKey); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_cosmos_staking_v1beta1_tx_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MsgRotateConsPubKeyResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -7197,7 +8228,7 @@ func file_cosmos_staking_v1beta1_tx_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cosmos_staking_v1beta1_tx_proto_rawDesc, NumEnums: 0, - NumMessages: 12, + NumMessages: 14, NumExtensions: 0, NumServices: 1, }, diff --git a/api/cosmos/staking/v1beta1/tx_grpc.pb.go b/api/cosmos/staking/v1beta1/tx_grpc.pb.go index e9361597b88e..c0d31b554217 100644 --- a/api/cosmos/staking/v1beta1/tx_grpc.pb.go +++ b/api/cosmos/staking/v1beta1/tx_grpc.pb.go @@ -40,6 +40,7 @@ type MsgClient interface { // // Since: cosmos-sdk 0.46 CancelUnbondingDelegation(ctx context.Context, in *MsgCancelUnbondingDelegation, opts ...grpc.CallOption) (*MsgCancelUnbondingDelegationResponse, error) + RotateConsPubKey(ctx context.Context, in *MsgRotateConsPubKey, opts ...grpc.CallOption) (*MsgRotateConsPubKeyResponse, error) } type msgClient struct { @@ -104,6 +105,15 @@ func (c *msgClient) CancelUnbondingDelegation(ctx context.Context, in *MsgCancel return out, nil } +func (c *msgClient) RotateConsPubKey(ctx context.Context, in *MsgRotateConsPubKey, opts ...grpc.CallOption) (*MsgRotateConsPubKeyResponse, error) { + out := new(MsgRotateConsPubKeyResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/RotateConsPubKey", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. // All implementations must embed UnimplementedMsgServer // for forward compatibility @@ -126,6 +136,7 @@ type MsgServer interface { // // Since: cosmos-sdk 0.46 CancelUnbondingDelegation(context.Context, *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error) + RotateConsPubKey(context.Context, *MsgRotateConsPubKey) (*MsgRotateConsPubKeyResponse, error) mustEmbedUnimplementedMsgServer() } @@ -151,6 +162,9 @@ func (UnimplementedMsgServer) Undelegate(context.Context, *MsgUndelegate) (*MsgU func (UnimplementedMsgServer) CancelUnbondingDelegation(context.Context, *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CancelUnbondingDelegation not implemented") } +func (UnimplementedMsgServer) RotateConsPubKey(context.Context, *MsgRotateConsPubKey) (*MsgRotateConsPubKeyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RotateConsPubKey not implemented") +} func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {} // UnsafeMsgServer may be embedded to opt out of forward compatibility for this service. @@ -272,6 +286,24 @@ func _Msg_CancelUnbondingDelegation_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _Msg_RotateConsPubKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRotateConsPubKey) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RotateConsPubKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/RotateConsPubKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RotateConsPubKey(ctx, req.(*MsgRotateConsPubKey)) + } + return interceptor(ctx, in, info, handler) +} + // Msg_ServiceDesc is the grpc.ServiceDesc for Msg service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -303,6 +335,10 @@ var Msg_ServiceDesc = grpc.ServiceDesc{ MethodName: "CancelUnbondingDelegation", Handler: _Msg_CancelUnbondingDelegation_Handler, }, + { + MethodName: "RotateConsPubKey", + Handler: _Msg_RotateConsPubKey_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cosmos/staking/v1beta1/tx.proto", diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 8dbfa99ae59f..1c2d63e89c0a 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -132,6 +132,74 @@ func (m *HistoricalInfo) GetValset() []Validator { return nil } +type ConsPubKeyRotationHistory struct { + OperatorAddress string `protobuf:"bytes,1,opt,name=operator_address,json=operatorAddress,proto3" json:"operator_address,omitempty"` + OldConsPubkey *types1.Any `protobuf:"bytes,2,opt,name=old_cons_pubkey,json=oldConsPubkey,proto3" json:"old_cons_pubkey,omitempty"` + NewConsPubkey *types1.Any `protobuf:"bytes,3,opt,name=new_cons_pubkey,json=newConsPubkey,proto3" json:"new_cons_pubkey,omitempty"` + RotatedHeight int64 `protobuf:"varint,4,opt,name=rotated_height,json=rotatedHeight,proto3" json:"rotated_height,omitempty"` +} + +func (m *ConsPubKeyRotationHistory) Reset() { *m = ConsPubKeyRotationHistory{} } +func (m *ConsPubKeyRotationHistory) String() string { return proto.CompactTextString(m) } +func (*ConsPubKeyRotationHistory) ProtoMessage() {} +func (*ConsPubKeyRotationHistory) Descriptor() ([]byte, []int) { + return fileDescriptor_64c30c6cf92913c9, []int{1} +} +func (m *ConsPubKeyRotationHistory) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ConsPubKeyRotationHistory) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ConsPubKeyRotationHistory.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ConsPubKeyRotationHistory) XXX_Merge(src proto.Message) { + xxx_messageInfo_ConsPubKeyRotationHistory.Merge(m, src) +} +func (m *ConsPubKeyRotationHistory) XXX_Size() int { + return m.Size() +} +func (m *ConsPubKeyRotationHistory) XXX_DiscardUnknown() { + xxx_messageInfo_ConsPubKeyRotationHistory.DiscardUnknown(m) +} + +var xxx_messageInfo_ConsPubKeyRotationHistory proto.InternalMessageInfo + +func (m *ConsPubKeyRotationHistory) GetOperatorAddress() string { + if m != nil { + return m.OperatorAddress + } + return "" +} + +func (m *ConsPubKeyRotationHistory) GetOldConsPubkey() *types1.Any { + if m != nil { + return m.OldConsPubkey + } + return nil +} + +func (m *ConsPubKeyRotationHistory) GetNewConsPubkey() *types1.Any { + if m != nil { + return m.NewConsPubkey + } + return nil +} + +func (m *ConsPubKeyRotationHistory) GetRotatedHeight() int64 { + if m != nil { + return m.RotatedHeight + } + return 0 +} + // CommissionRates defines the initial commission rates to be used for creating // a validator. type CommissionRates struct { @@ -146,7 +214,7 @@ type CommissionRates struct { func (m *CommissionRates) Reset() { *m = CommissionRates{} } func (*CommissionRates) ProtoMessage() {} func (*CommissionRates) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{1} + return fileDescriptor_64c30c6cf92913c9, []int{2} } func (m *CommissionRates) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -186,7 +254,7 @@ type Commission struct { func (m *Commission) Reset() { *m = Commission{} } func (*Commission) ProtoMessage() {} func (*Commission) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{2} + return fileDescriptor_64c30c6cf92913c9, []int{3} } func (m *Commission) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -239,7 +307,7 @@ type Description struct { func (m *Description) Reset() { *m = Description{} } func (*Description) ProtoMessage() {} func (*Description) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{3} + return fileDescriptor_64c30c6cf92913c9, []int{4} } func (m *Description) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -341,7 +409,7 @@ type Validator struct { func (m *Validator) Reset() { *m = Validator{} } func (*Validator) ProtoMessage() {} func (*Validator) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{4} + return fileDescriptor_64c30c6cf92913c9, []int{5} } func (m *Validator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -378,7 +446,7 @@ type ValAddresses struct { func (m *ValAddresses) Reset() { *m = ValAddresses{} } func (*ValAddresses) ProtoMessage() {} func (*ValAddresses) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{5} + return fileDescriptor_64c30c6cf92913c9, []int{6} } func (m *ValAddresses) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -425,7 +493,7 @@ type DVPair struct { func (m *DVPair) Reset() { *m = DVPair{} } func (*DVPair) ProtoMessage() {} func (*DVPair) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{6} + return fileDescriptor_64c30c6cf92913c9, []int{7} } func (m *DVPair) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -463,7 +531,7 @@ func (m *DVPairs) Reset() { *m = DVPairs{} } func (m *DVPairs) String() string { return proto.CompactTextString(m) } func (*DVPairs) ProtoMessage() {} func (*DVPairs) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{7} + return fileDescriptor_64c30c6cf92913c9, []int{8} } func (m *DVPairs) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -512,7 +580,7 @@ type DVVTriplet struct { func (m *DVVTriplet) Reset() { *m = DVVTriplet{} } func (*DVVTriplet) ProtoMessage() {} func (*DVVTriplet) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{8} + return fileDescriptor_64c30c6cf92913c9, []int{9} } func (m *DVVTriplet) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -550,7 +618,7 @@ func (m *DVVTriplets) Reset() { *m = DVVTriplets{} } func (m *DVVTriplets) String() string { return proto.CompactTextString(m) } func (*DVVTriplets) ProtoMessage() {} func (*DVVTriplets) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{9} + return fileDescriptor_64c30c6cf92913c9, []int{10} } func (m *DVVTriplets) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -601,7 +669,7 @@ type Delegation struct { func (m *Delegation) Reset() { *m = Delegation{} } func (*Delegation) ProtoMessage() {} func (*Delegation) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{10} + return fileDescriptor_64c30c6cf92913c9, []int{11} } func (m *Delegation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -644,7 +712,7 @@ type UnbondingDelegation struct { func (m *UnbondingDelegation) Reset() { *m = UnbondingDelegation{} } func (*UnbondingDelegation) ProtoMessage() {} func (*UnbondingDelegation) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{11} + return fileDescriptor_64c30c6cf92913c9, []int{12} } func (m *UnbondingDelegation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -688,7 +756,7 @@ type UnbondingDelegationEntry struct { func (m *UnbondingDelegationEntry) Reset() { *m = UnbondingDelegationEntry{} } func (*UnbondingDelegationEntry) ProtoMessage() {} func (*UnbondingDelegationEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{12} + return fileDescriptor_64c30c6cf92913c9, []int{13} } func (m *UnbondingDelegationEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -746,7 +814,7 @@ type RedelegationEntry struct { func (m *RedelegationEntry) Reset() { *m = RedelegationEntry{} } func (*RedelegationEntry) ProtoMessage() {} func (*RedelegationEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{13} + return fileDescriptor_64c30c6cf92913c9, []int{14} } func (m *RedelegationEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -805,7 +873,7 @@ type Redelegation struct { func (m *Redelegation) Reset() { *m = Redelegation{} } func (*Redelegation) ProtoMessage() {} func (*Redelegation) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{14} + return fileDescriptor_64c30c6cf92913c9, []int{15} } func (m *Redelegation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -853,7 +921,7 @@ type Params struct { func (m *Params) Reset() { *m = Params{} } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{15} + return fileDescriptor_64c30c6cf92913c9, []int{16} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -927,7 +995,7 @@ type DelegationResponse struct { func (m *DelegationResponse) Reset() { *m = DelegationResponse{} } func (*DelegationResponse) ProtoMessage() {} func (*DelegationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{16} + return fileDescriptor_64c30c6cf92913c9, []int{17} } func (m *DelegationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -982,7 +1050,7 @@ func (m *RedelegationEntryResponse) Reset() { *m = RedelegationEntryResp func (m *RedelegationEntryResponse) String() string { return proto.CompactTextString(m) } func (*RedelegationEntryResponse) ProtoMessage() {} func (*RedelegationEntryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{17} + return fileDescriptor_64c30c6cf92913c9, []int{18} } func (m *RedelegationEntryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1030,7 +1098,7 @@ func (m *RedelegationResponse) Reset() { *m = RedelegationResponse{} } func (m *RedelegationResponse) String() string { return proto.CompactTextString(m) } func (*RedelegationResponse) ProtoMessage() {} func (*RedelegationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{18} + return fileDescriptor_64c30c6cf92913c9, []int{19} } func (m *RedelegationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1084,7 +1152,7 @@ func (m *Pool) Reset() { *m = Pool{} } func (m *Pool) String() string { return proto.CompactTextString(m) } func (*Pool) ProtoMessage() {} func (*Pool) Descriptor() ([]byte, []int) { - return fileDescriptor_64c30c6cf92913c9, []int{19} + return fileDescriptor_64c30c6cf92913c9, []int{20} } func (m *Pool) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1116,6 +1184,7 @@ var xxx_messageInfo_Pool proto.InternalMessageInfo func init() { proto.RegisterEnum("cosmos.staking.v1beta1.BondStatus", BondStatus_name, BondStatus_value) proto.RegisterType((*HistoricalInfo)(nil), "cosmos.staking.v1beta1.HistoricalInfo") + proto.RegisterType((*ConsPubKeyRotationHistory)(nil), "cosmos.staking.v1beta1.ConsPubKeyRotationHistory") proto.RegisterType((*CommissionRates)(nil), "cosmos.staking.v1beta1.CommissionRates") proto.RegisterType((*Commission)(nil), "cosmos.staking.v1beta1.Commission") proto.RegisterType((*Description)(nil), "cosmos.staking.v1beta1.Description") @@ -1142,112 +1211,116 @@ func init() { } var fileDescriptor_64c30c6cf92913c9 = []byte{ - // 1669 bytes of a gzipped FileDescriptorProto + // 1737 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4d, 0x6c, 0x1b, 0xc7, - 0x15, 0xe6, 0x52, 0x0c, 0x45, 0x3d, 0x4a, 0xa2, 0x34, 0x56, 0x52, 0x9a, 0x68, 0x49, 0x96, 0x4d, - 0x13, 0xa7, 0x88, 0xa9, 0x5a, 0x05, 0x02, 0x54, 0x28, 0x50, 0x98, 0x22, 0x53, 0xab, 0x4e, 0x5c, - 0x86, 0x94, 0x55, 0xf4, 0x07, 0x5d, 0x0c, 0x77, 0x47, 0xd4, 0x54, 0xbb, 0xb3, 0xc4, 0xce, 0xd0, - 0x15, 0x81, 0x16, 0x28, 0xd0, 0x4b, 0xea, 0x53, 0x8e, 0xb9, 0x18, 0x30, 0x90, 0x1e, 0x73, 0x0c, - 0x7a, 0xe9, 0xa1, 0xd7, 0x34, 0x27, 0x23, 0xa7, 0xa6, 0x2d, 0xd4, 0xc2, 0xbe, 0x14, 0x3d, 0x15, - 0xb9, 0xb7, 0x28, 0xe6, 0x67, 0x7f, 0x4c, 0x8a, 0x8a, 0x14, 0xa8, 0x40, 0x00, 0x5f, 0xec, 0x9d, - 0x99, 0xf7, 0xbe, 0x79, 0xef, 0x7b, 0x3f, 0x7a, 0x43, 0x78, 0xd1, 0x09, 0xb8, 0x1f, 0xf0, 0x4d, - 0x2e, 0xf0, 0x11, 0x65, 0xc3, 0xcd, 0x7b, 0x37, 0x06, 0x44, 0xe0, 0x1b, 0xd1, 0xba, 0x39, 0x0a, - 0x03, 0x11, 0xa0, 0x17, 0xb4, 0x54, 0x33, 0xda, 0x35, 0x52, 0x95, 0x8d, 0x61, 0x30, 0x0c, 0x94, - 0xc8, 0xa6, 0xfc, 0xd2, 0xd2, 0x95, 0xab, 0xc3, 0x20, 0x18, 0x7a, 0x64, 0x53, 0xad, 0x06, 0xe3, - 0x83, 0x4d, 0xcc, 0x26, 0xe6, 0xa8, 0x3a, 0x7d, 0xe4, 0x8e, 0x43, 0x2c, 0x68, 0xc0, 0xcc, 0x79, - 0x6d, 0xfa, 0x5c, 0x50, 0x9f, 0x70, 0x81, 0xfd, 0x51, 0x84, 0xad, 0x2d, 0xb1, 0xf5, 0xa5, 0xc6, - 0x2c, 0x83, 0x6d, 0x5c, 0x19, 0x60, 0x4e, 0x62, 0x3f, 0x9c, 0x80, 0x46, 0xd8, 0x5f, 0x16, 0x84, - 0xb9, 0x24, 0xf4, 0x29, 0x13, 0x9b, 0x62, 0x32, 0x22, 0x5c, 0xff, 0xab, 0x4f, 0x1b, 0xbf, 0xb5, - 0x60, 0xf5, 0x16, 0xe5, 0x22, 0x08, 0xa9, 0x83, 0xbd, 0x5d, 0x76, 0x10, 0xa0, 0xd7, 0x20, 0x7f, - 0x48, 0xb0, 0x4b, 0xc2, 0xb2, 0x55, 0xb7, 0xae, 0x15, 0xb7, 0xca, 0xcd, 0x04, 0xa1, 0xa9, 0x75, - 0x6f, 0xa9, 0xf3, 0x56, 0xee, 0xc3, 0x93, 0x5a, 0xa6, 0x67, 0xa4, 0xd1, 0x77, 0x21, 0x7f, 0x0f, - 0x7b, 0x9c, 0x88, 0x72, 0xb6, 0xbe, 0x70, 0xad, 0xb8, 0xf5, 0xd5, 0xe6, 0xe9, 0xf4, 0x35, 0xf7, - 0xb1, 0x47, 0x5d, 0x2c, 0x82, 0x18, 0x40, 0xab, 0x35, 0xde, 0xcf, 0x42, 0x69, 0x27, 0xf0, 0x7d, - 0xca, 0x39, 0x0d, 0x58, 0x0f, 0x0b, 0xc2, 0x51, 0x17, 0x72, 0x21, 0x16, 0x44, 0x99, 0xb2, 0xd4, - 0xfa, 0x8e, 0x94, 0xff, 0xcb, 0x49, 0xed, 0xa5, 0x21, 0x15, 0x87, 0xe3, 0x41, 0xd3, 0x09, 0x7c, - 0x43, 0x86, 0xf9, 0xef, 0x3a, 0x77, 0x8f, 0x8c, 0x7f, 0x6d, 0xe2, 0x7c, 0xfc, 0xc1, 0x75, 0x30, - 0x36, 0xb4, 0x89, 0xd3, 0x53, 0x48, 0xe8, 0x87, 0x50, 0xf0, 0xf1, 0xb1, 0xad, 0x50, 0xb3, 0x97, - 0x80, 0xba, 0xe8, 0xe3, 0x63, 0x69, 0x2b, 0x72, 0xa1, 0x24, 0x81, 0x9d, 0x43, 0xcc, 0x86, 0x44, - 0xe3, 0x2f, 0x5c, 0x02, 0xfe, 0x8a, 0x8f, 0x8f, 0x77, 0x14, 0xa6, 0xbc, 0x65, 0xbb, 0xf0, 0xee, - 0xc3, 0x5a, 0xe6, 0x9f, 0x0f, 0x6b, 0x56, 0xe3, 0x0f, 0x16, 0x40, 0x42, 0x17, 0xfa, 0x29, 0xac, - 0x39, 0xf1, 0x4a, 0x5d, 0xcf, 0x4d, 0x00, 0x5f, 0x9e, 0x17, 0x88, 0x29, 0xb2, 0x5b, 0x05, 0x69, - 0xe8, 0xa3, 0x93, 0x9a, 0xd5, 0x2b, 0x39, 0x53, 0x71, 0xe8, 0x40, 0x71, 0x3c, 0x72, 0xb1, 0x20, - 0xb6, 0x4c, 0x4d, 0x45, 0x5c, 0x71, 0xab, 0xd2, 0xd4, 0x79, 0xdb, 0x8c, 0xf2, 0xb6, 0xb9, 0x17, - 0xe5, 0xad, 0xc6, 0x7a, 0xe7, 0xef, 0x35, 0xab, 0x07, 0x5a, 0x51, 0x1e, 0xa5, 0xac, 0x7f, 0xdf, - 0x82, 0x62, 0x9b, 0x70, 0x27, 0xa4, 0x23, 0x59, 0x08, 0xa8, 0x0c, 0x8b, 0x7e, 0xc0, 0xe8, 0x91, - 0x49, 0xbb, 0xa5, 0x5e, 0xb4, 0x44, 0x15, 0x28, 0x50, 0x97, 0x30, 0x41, 0xc5, 0x44, 0x07, 0xac, - 0x17, 0xaf, 0xa5, 0xd6, 0x2f, 0xc8, 0x80, 0xd3, 0x88, 0xeb, 0x5e, 0xb4, 0x44, 0xaf, 0xc0, 0x1a, - 0x27, 0xce, 0x38, 0xa4, 0x62, 0x62, 0x3b, 0x01, 0x13, 0xd8, 0x11, 0xe5, 0x9c, 0x12, 0x29, 0x45, - 0xfb, 0x3b, 0x7a, 0x5b, 0x82, 0xb8, 0x44, 0x60, 0xea, 0xf1, 0xf2, 0x73, 0x1a, 0xc4, 0x2c, 0x53, - 0xe6, 0xfe, 0x29, 0x0f, 0x4b, 0x71, 0xde, 0xa2, 0x1d, 0x58, 0x0b, 0x46, 0x24, 0x94, 0xdf, 0x36, - 0x76, 0xdd, 0x90, 0x70, 0x6e, 0x32, 0xb4, 0xfc, 0xf1, 0x07, 0xd7, 0x37, 0x0c, 0xdd, 0x37, 0xf5, - 0x49, 0x5f, 0x84, 0x94, 0x0d, 0x7b, 0xa5, 0x48, 0xc3, 0x6c, 0xa3, 0x1f, 0xc9, 0x80, 0x31, 0x4e, - 0x18, 0x1f, 0x73, 0x7b, 0x34, 0x1e, 0x1c, 0x91, 0x89, 0xe1, 0x75, 0x63, 0x86, 0xd7, 0x9b, 0x6c, - 0xd2, 0x2a, 0x7f, 0x94, 0x40, 0x3b, 0xe1, 0x64, 0x24, 0x82, 0x66, 0x77, 0x3c, 0xb8, 0x4d, 0x26, - 0x32, 0x5a, 0x06, 0xa7, 0xab, 0x60, 0xd0, 0x0b, 0x90, 0xff, 0x39, 0xa6, 0x1e, 0x71, 0x15, 0x2b, - 0x85, 0x9e, 0x59, 0xa1, 0x6d, 0xc8, 0x73, 0x81, 0xc5, 0x98, 0x2b, 0x2a, 0x56, 0xb7, 0x1a, 0xf3, - 0x32, 0xa3, 0x15, 0x30, 0xb7, 0xaf, 0x24, 0x7b, 0x46, 0x03, 0xed, 0x41, 0x5e, 0x04, 0x47, 0x84, - 0x19, 0x92, 0x2e, 0x94, 0xd5, 0xbb, 0x4c, 0xa4, 0xb2, 0x7a, 0x97, 0x89, 0x9e, 0xc1, 0x42, 0x43, - 0x58, 0x73, 0x89, 0x47, 0x86, 0x8a, 0x4a, 0x7e, 0x88, 0x43, 0xc2, 0xcb, 0xf9, 0x4b, 0xa8, 0x9a, - 0x52, 0x8c, 0xda, 0x57, 0xa0, 0xe8, 0x36, 0x14, 0xdd, 0x24, 0xdd, 0xca, 0x8b, 0x8a, 0xe8, 0xaf, - 0xcd, 0xf3, 0x3f, 0x95, 0x99, 0xa6, 0x49, 0xa5, 0xb5, 0x65, 0x72, 0x8d, 0xd9, 0x20, 0x60, 0x2e, - 0x65, 0x43, 0xfb, 0x90, 0xd0, 0xe1, 0xa1, 0x28, 0x17, 0xea, 0xd6, 0xb5, 0x85, 0x5e, 0x29, 0xde, - 0xbf, 0xa5, 0xb6, 0xd1, 0x6d, 0x58, 0x4d, 0x44, 0x55, 0xed, 0x2c, 0x5d, 0xa0, 0x76, 0x56, 0x62, - 0x5d, 0x79, 0x8a, 0x6e, 0x01, 0x24, 0x85, 0x59, 0x06, 0x05, 0xd4, 0xf8, 0xec, 0xea, 0x36, 0x2e, - 0xa4, 0x74, 0x91, 0x07, 0x57, 0x7c, 0xca, 0x6c, 0x4e, 0xbc, 0x03, 0xdb, 0x50, 0x25, 0x21, 0x8b, - 0x97, 0x10, 0xda, 0x75, 0x9f, 0xb2, 0x3e, 0xf1, 0x0e, 0xda, 0x31, 0xec, 0xf6, 0xf2, 0xdb, 0x0f, - 0x6b, 0x19, 0x53, 0x4b, 0x99, 0x46, 0x17, 0x96, 0xf7, 0xb1, 0x67, 0xca, 0x80, 0x70, 0xf4, 0x1a, - 0x2c, 0xe1, 0x68, 0x51, 0xb6, 0xea, 0x0b, 0x67, 0x96, 0x51, 0x22, 0xaa, 0xab, 0xf3, 0xd7, 0x7f, - 0xab, 0x5b, 0x8d, 0xdf, 0x59, 0x90, 0x6f, 0xef, 0x77, 0x31, 0x0d, 0x51, 0x07, 0xd6, 0x93, 0x84, - 0x3a, 0x6f, 0x6d, 0x26, 0x39, 0x18, 0x15, 0x67, 0x07, 0xd6, 0xef, 0x45, 0xe5, 0x1e, 0xc3, 0x64, - 0x3f, 0x0b, 0x26, 0x56, 0x31, 0xfb, 0x53, 0x8e, 0x77, 0x60, 0x51, 0x5b, 0xc9, 0xd1, 0x36, 0x3c, - 0x37, 0x92, 0x1f, 0xca, 0xdf, 0xe2, 0x56, 0x75, 0x6e, 0x22, 0x2a, 0x79, 0x13, 0x40, 0xad, 0xd2, - 0xf8, 0x8f, 0x05, 0xd0, 0xde, 0xdf, 0xdf, 0x0b, 0xe9, 0xc8, 0x23, 0xe2, 0xb2, 0x3c, 0x7e, 0x03, - 0x9e, 0x4f, 0x3c, 0xe6, 0xa1, 0x73, 0x6e, 0xaf, 0xaf, 0xc4, 0x6a, 0xfd, 0xd0, 0x39, 0x15, 0xcd, - 0xe5, 0x22, 0x46, 0x5b, 0x38, 0x37, 0x5a, 0x9b, 0x8b, 0xd3, 0x69, 0xec, 0x43, 0x31, 0x71, 0x9f, - 0xa3, 0x36, 0x14, 0x84, 0xf9, 0x36, 0x6c, 0x36, 0xe6, 0xb3, 0x19, 0xa9, 0x19, 0x46, 0x63, 0xcd, - 0xc6, 0x7f, 0x25, 0xa9, 0x71, 0xc6, 0x7e, 0xb1, 0xd2, 0x48, 0xf6, 0x5e, 0xd3, 0x1b, 0x2f, 0x63, - 0xa2, 0x30, 0x58, 0x53, 0xac, 0xfe, 0x26, 0x0b, 0x57, 0xee, 0x46, 0xdd, 0xe6, 0x0b, 0xcb, 0x44, - 0x17, 0x16, 0x09, 0x13, 0x21, 0x55, 0x54, 0xc8, 0x58, 0x7f, 0x73, 0x5e, 0xac, 0x4f, 0xf1, 0xa5, - 0xc3, 0x44, 0x38, 0x31, 0x91, 0x8f, 0x60, 0xa6, 0x58, 0xf8, 0x6b, 0x16, 0xca, 0xf3, 0x34, 0xd1, - 0xcb, 0x50, 0x72, 0x42, 0xa2, 0x36, 0xa2, 0xae, 0x6f, 0xa9, 0xae, 0xbf, 0x1a, 0x6d, 0x9b, 0xa6, - 0xff, 0x26, 0xc8, 0x01, 0x4a, 0x26, 0x96, 0x14, 0xbd, 0xf0, 0xc4, 0xb4, 0x9a, 0x28, 0xab, 0xb6, - 0x4f, 0xa0, 0x44, 0x19, 0x15, 0x14, 0x7b, 0xf6, 0x00, 0x7b, 0x98, 0x39, 0x9f, 0x67, 0xb2, 0x9c, - 0x6d, 0xd4, 0xab, 0x06, 0xb4, 0xa5, 0x31, 0xd1, 0x3e, 0x2c, 0x46, 0xf0, 0xb9, 0x4b, 0x80, 0x8f, - 0xc0, 0x52, 0x53, 0xd4, 0x27, 0x59, 0x58, 0xef, 0x11, 0xf7, 0xd9, 0xa2, 0xf5, 0x27, 0x00, 0xba, - 0xe0, 0x64, 0x1f, 0xfc, 0x1c, 0xcc, 0xce, 0x16, 0xf0, 0x92, 0xc6, 0x6b, 0x73, 0x91, 0xe2, 0xf6, - 0xa3, 0x2c, 0x2c, 0xa7, 0xb9, 0x7d, 0x06, 0xfe, 0x2e, 0xa0, 0xdd, 0xa4, 0x1b, 0xe4, 0x54, 0x37, - 0x78, 0x65, 0x5e, 0x37, 0x98, 0xc9, 0xba, 0xb3, 0xdb, 0xc0, 0xa7, 0x59, 0xc8, 0x77, 0x71, 0x88, - 0x7d, 0x8e, 0xbe, 0x3f, 0x33, 0xc0, 0xe9, 0x57, 0xd5, 0xd5, 0x99, 0x9c, 0x6b, 0x9b, 0x47, 0xbd, - 0x4e, 0xb9, 0x77, 0x4f, 0x99, 0xdf, 0xbe, 0x0e, 0xab, 0xf2, 0x89, 0x18, 0xbb, 0xa2, 0x49, 0x5c, - 0x51, 0x6f, 0xbc, 0xf8, 0x75, 0xc1, 0x51, 0x0d, 0x8a, 0x52, 0x2c, 0x69, 0x74, 0x52, 0x06, 0x7c, - 0x7c, 0xdc, 0xd1, 0x3b, 0xe8, 0x3a, 0xa0, 0xc3, 0xf8, 0xd1, 0x6e, 0x27, 0x14, 0x48, 0xb9, 0xf5, - 0xe4, 0x24, 0x12, 0xff, 0x0a, 0x80, 0xb4, 0xc2, 0x76, 0x09, 0x0b, 0x7c, 0xf3, 0xc6, 0x59, 0x92, - 0x3b, 0x6d, 0xb9, 0x81, 0x7e, 0xa9, 0x67, 0xc1, 0xa9, 0xd7, 0xa3, 0x19, 0xc3, 0xdf, 0xb8, 0x58, - 0xa6, 0x7e, 0x7a, 0x52, 0xab, 0x4c, 0xb0, 0xef, 0x6d, 0x37, 0x4e, 0x81, 0x6c, 0xa8, 0xd9, 0xf0, - 0xe9, 0x57, 0x67, 0x2a, 0x83, 0xdf, 0xb3, 0x00, 0x25, 0x2d, 0xb7, 0x47, 0xf8, 0x48, 0x3e, 0x6b, - 0xe4, 0xd0, 0x9b, 0x9a, 0x50, 0xad, 0xb3, 0x87, 0xde, 0x44, 0x3f, 0x1a, 0x7a, 0x53, 0x15, 0xf1, - 0xed, 0xa4, 0xc1, 0x65, 0x4d, 0x0c, 0x0d, 0xcc, 0x00, 0x73, 0x92, 0x1a, 0x9c, 0x69, 0xa4, 0x3d, - 0xd3, 0xc3, 0x32, 0x8d, 0x4f, 0x2c, 0xb8, 0x3a, 0x93, 0x4d, 0xb1, 0xb1, 0x3f, 0x03, 0x14, 0xa6, - 0x0e, 0x55, 0x6c, 0x26, 0xc6, 0xe8, 0x0b, 0x27, 0xe7, 0x7a, 0x38, 0xd3, 0x2b, 0xff, 0x5f, 0x3d, - 0x3a, 0xa7, 0x22, 0xf0, 0x47, 0x0b, 0x36, 0xd2, 0xc6, 0xc4, 0x6e, 0xdd, 0x81, 0xe5, 0xb4, 0x2d, - 0xc6, 0xa1, 0x17, 0xcf, 0xe3, 0x90, 0xf1, 0xe5, 0x29, 0x7d, 0xf4, 0x56, 0x52, 0xb8, 0xfa, 0xc7, - 0xa2, 0x1b, 0xe7, 0xe6, 0x26, 0xb2, 0x69, 0xba, 0x80, 0x73, 0xd1, 0x14, 0x93, 0xeb, 0x06, 0x81, - 0x87, 0x7e, 0x05, 0xeb, 0x2c, 0x10, 0xb6, 0xcc, 0x72, 0xe2, 0xda, 0xe6, 0xe5, 0xaa, 0xbb, 0xdf, - 0x5b, 0x17, 0xa3, 0xec, 0x5f, 0x27, 0xb5, 0x59, 0xa8, 0x29, 0x1e, 0x4b, 0x2c, 0x10, 0x2d, 0x75, - 0xbe, 0xa7, 0xdf, 0xb5, 0x21, 0xac, 0x3c, 0x7d, 0xb5, 0xee, 0x96, 0x6f, 0x5e, 0xf8, 0xea, 0x95, - 0xb3, 0xae, 0x5d, 0x1e, 0xa4, 0xee, 0xdc, 0x2e, 0xc8, 0x18, 0xfe, 0xfb, 0x61, 0xcd, 0xfa, 0xc6, - 0xef, 0x2d, 0x80, 0xe4, 0x09, 0x8f, 0x5e, 0x85, 0x2f, 0xb5, 0x7e, 0x70, 0xa7, 0x6d, 0xf7, 0xf7, - 0x6e, 0xee, 0xdd, 0xed, 0xdb, 0x77, 0xef, 0xf4, 0xbb, 0x9d, 0x9d, 0xdd, 0xd7, 0x77, 0x3b, 0xed, - 0xb5, 0x4c, 0xa5, 0x74, 0xff, 0x41, 0xbd, 0x78, 0x97, 0xf1, 0x11, 0x71, 0xe8, 0x01, 0x25, 0x2e, - 0x7a, 0x09, 0x36, 0x9e, 0x96, 0x96, 0xab, 0x4e, 0x7b, 0xcd, 0xaa, 0x2c, 0xdf, 0x7f, 0x50, 0x2f, - 0xe8, 0xe9, 0x88, 0xb8, 0xe8, 0x1a, 0x3c, 0x3f, 0x2b, 0xb7, 0x7b, 0xe7, 0x7b, 0x6b, 0xd9, 0xca, - 0xca, 0xfd, 0x07, 0xf5, 0xa5, 0x78, 0x8c, 0x42, 0x0d, 0x40, 0x69, 0x49, 0x83, 0xb7, 0x50, 0x81, - 0xfb, 0x0f, 0xea, 0x79, 0x4d, 0x5b, 0x25, 0xf7, 0xf6, 0x7b, 0xd5, 0x4c, 0xeb, 0xf5, 0x0f, 0x1f, - 0x57, 0xad, 0x47, 0x8f, 0xab, 0xd6, 0x3f, 0x1e, 0x57, 0xad, 0x77, 0x9e, 0x54, 0x33, 0x8f, 0x9e, - 0x54, 0x33, 0x7f, 0x7e, 0x52, 0xcd, 0xfc, 0xf8, 0xd5, 0x33, 0x19, 0x3b, 0x8e, 0x7f, 0xc9, 0x55, - 0xdc, 0x0d, 0xf2, 0xaa, 0x29, 0x7f, 0xeb, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x49, 0x0e, 0x8f, - 0x94, 0xe8, 0x15, 0x00, 0x00, + 0x15, 0xe6, 0x52, 0x0c, 0x45, 0x3e, 0x4a, 0xa2, 0x34, 0x56, 0x52, 0x9a, 0x68, 0x49, 0x96, 0xcd, + 0x8f, 0x53, 0xc4, 0x54, 0xed, 0x02, 0x01, 0x2a, 0x14, 0x28, 0x4c, 0x91, 0xa9, 0x55, 0x27, 0xae, + 0xb2, 0x94, 0x55, 0xf4, 0x07, 0x25, 0x86, 0xbb, 0x23, 0x6a, 0xaa, 0xdd, 0x59, 0x62, 0x67, 0x68, + 0x8b, 0x40, 0x0b, 0x14, 0xe8, 0x25, 0xf5, 0x29, 0xc7, 0x5c, 0x0c, 0x18, 0x48, 0x8f, 0x39, 0x06, + 0xed, 0xa1, 0x87, 0x5e, 0xd3, 0x9c, 0x8c, 0x9c, 0x9a, 0xb6, 0x50, 0x0b, 0xfb, 0x52, 0xf4, 0x54, + 0xe4, 0xde, 0xa2, 0x98, 0x9f, 0xfd, 0x11, 0x29, 0x29, 0x92, 0xab, 0x02, 0x01, 0x7c, 0xb1, 0x39, + 0x33, 0xef, 0x7d, 0xf3, 0xde, 0xf7, 0x7e, 0xf4, 0x66, 0xe1, 0x45, 0x27, 0xe0, 0x7e, 0xc0, 0xd7, + 0xb8, 0xc0, 0xfb, 0x94, 0x0d, 0xd7, 0xee, 0x5e, 0x1b, 0x10, 0x81, 0xaf, 0x45, 0xeb, 0xd6, 0x28, + 0x0c, 0x44, 0x80, 0x5e, 0xd0, 0x52, 0xad, 0x68, 0xd7, 0x48, 0x55, 0x57, 0x87, 0xc1, 0x30, 0x50, + 0x22, 0x6b, 0xf2, 0x97, 0x96, 0xae, 0x5e, 0x1e, 0x06, 0xc1, 0xd0, 0x23, 0x6b, 0x6a, 0x35, 0x18, + 0xef, 0xae, 0x61, 0x36, 0x31, 0x47, 0xb5, 0xe9, 0x23, 0x77, 0x1c, 0x62, 0x41, 0x03, 0x66, 0xce, + 0xeb, 0xd3, 0xe7, 0x82, 0xfa, 0x84, 0x0b, 0xec, 0x8f, 0x22, 0x6c, 0x6d, 0x49, 0x5f, 0x5f, 0x6a, + 0xcc, 0x32, 0xd8, 0xc6, 0x95, 0x01, 0xe6, 0x24, 0xf6, 0xc3, 0x09, 0x68, 0x84, 0xfd, 0x65, 0x41, + 0x98, 0x4b, 0x42, 0x9f, 0x32, 0xb1, 0x26, 0x26, 0x23, 0xc2, 0xf5, 0xbf, 0xfa, 0xb4, 0xf9, 0x6b, + 0x0b, 0x96, 0x6e, 0x52, 0x2e, 0x82, 0x90, 0x3a, 0xd8, 0xdb, 0x64, 0xbb, 0x01, 0x7a, 0x1d, 0xf2, + 0x7b, 0x04, 0xbb, 0x24, 0xac, 0x58, 0x0d, 0xeb, 0x4a, 0xe9, 0x7a, 0xa5, 0x95, 0x20, 0xb4, 0xb4, + 0xee, 0x4d, 0x75, 0xde, 0xce, 0x7d, 0x74, 0x58, 0xcf, 0xd8, 0x46, 0x1a, 0x7d, 0x07, 0xf2, 0x77, + 0xb1, 0xc7, 0x89, 0xa8, 0x64, 0x1b, 0x73, 0x57, 0x4a, 0xd7, 0xbf, 0xda, 0x3a, 0x9e, 0xbe, 0xd6, + 0x0e, 0xf6, 0xa8, 0x8b, 0x45, 0x10, 0x03, 0x68, 0xb5, 0xe6, 0xef, 0xb2, 0x70, 0x79, 0x23, 0x60, + 0x7c, 0x6b, 0x3c, 0xb8, 0x45, 0x26, 0x76, 0x20, 0x14, 0x45, 0xda, 0xba, 0x09, 0xda, 0x80, 0xe5, + 0x60, 0x44, 0x42, 0xa9, 0xd7, 0xc7, 0xae, 0x1b, 0x12, 0xce, 0x95, 0x81, 0xc5, 0x76, 0xe5, 0x93, + 0x0f, 0xaf, 0xae, 0x9a, 0xbb, 0x6e, 0xe8, 0x93, 0x9e, 0x08, 0x29, 0x1b, 0xda, 0xe5, 0x48, 0xc3, + 0x6c, 0xa3, 0x1d, 0x28, 0x07, 0x9e, 0xdb, 0x77, 0x02, 0xc6, 0xfb, 0xa3, 0xf1, 0x60, 0x9f, 0x4c, + 0x2a, 0x59, 0xe5, 0xe4, 0x6a, 0x4b, 0x87, 0xa0, 0x15, 0x85, 0xa0, 0x75, 0x83, 0x4d, 0xda, 0x95, + 0x8f, 0x13, 0x64, 0x27, 0x9c, 0x8c, 0x44, 0xd0, 0x32, 0xc6, 0x2d, 0x06, 0x9e, 0x6b, 0x6c, 0xdd, + 0x27, 0x13, 0x89, 0xcb, 0xc8, 0xbd, 0x23, 0xb8, 0x73, 0x4f, 0x87, 0xcb, 0xc8, 0xbd, 0x14, 0xee, + 0x4b, 0xb0, 0x14, 0x4a, 0x1e, 0x88, 0xdb, 0xdf, 0x23, 0x74, 0xb8, 0x27, 0x2a, 0xb9, 0x86, 0x75, + 0x65, 0xce, 0x5e, 0x34, 0xbb, 0x37, 0xd5, 0x66, 0xf3, 0x83, 0x2c, 0x94, 0x37, 0x02, 0xdf, 0xa7, + 0x9c, 0xd3, 0x80, 0xd9, 0x58, 0x10, 0x8e, 0xb6, 0x20, 0x17, 0x62, 0x41, 0x0c, 0x47, 0xdf, 0x96, + 0x4c, 0xff, 0xf9, 0xb0, 0xfe, 0xf2, 0x90, 0x8a, 0xbd, 0xf1, 0xa0, 0xe5, 0x04, 0xbe, 0x49, 0x23, + 0xf3, 0xdf, 0x55, 0xee, 0xee, 0x9b, 0xcc, 0xe8, 0x10, 0xe7, 0x93, 0x0f, 0xaf, 0x82, 0xb1, 0xaf, + 0x43, 0x1c, 0x5b, 0x21, 0xa1, 0x1f, 0x40, 0xc1, 0xc7, 0x07, 0x7d, 0x85, 0x9a, 0xbd, 0x00, 0xd4, + 0x79, 0x1f, 0x1f, 0x48, 0x5b, 0x91, 0x0b, 0x65, 0x09, 0xec, 0xec, 0x61, 0x36, 0x24, 0x1a, 0x7f, + 0xee, 0x02, 0xf0, 0x17, 0x7d, 0x7c, 0xb0, 0xa1, 0x30, 0xe5, 0x2d, 0xeb, 0x85, 0xf7, 0x1e, 0xd6, + 0x33, 0xff, 0x78, 0x58, 0xb7, 0x9a, 0xbf, 0xb7, 0x00, 0x12, 0xba, 0xd0, 0x4f, 0x60, 0xd9, 0x89, + 0x57, 0xea, 0x7a, 0x6e, 0x52, 0xff, 0x95, 0x93, 0x52, 0x78, 0x8a, 0xec, 0x76, 0x41, 0x1a, 0xfa, + 0xe8, 0xb0, 0x6e, 0xd9, 0x65, 0x67, 0x2a, 0x0e, 0x5d, 0x28, 0x8d, 0x47, 0x2e, 0x16, 0xa4, 0x2f, + 0x8b, 0xda, 0xa4, 0x5b, 0x75, 0x26, 0x2d, 0xb6, 0xa3, 0x8a, 0xd7, 0x58, 0xef, 0xfe, 0xad, 0x6e, + 0xd9, 0xa0, 0x15, 0xe5, 0x51, 0xca, 0xfa, 0x0f, 0x2c, 0x28, 0x75, 0x08, 0x77, 0x42, 0x3a, 0x92, + 0xf5, 0x81, 0x2a, 0x30, 0xef, 0x07, 0x8c, 0xee, 0x9b, 0x82, 0x2d, 0xda, 0xd1, 0x12, 0x55, 0xa1, + 0x40, 0x5d, 0xc2, 0x04, 0x15, 0x3a, 0xcd, 0x8b, 0x76, 0xbc, 0x96, 0x5a, 0xf7, 0xc8, 0x80, 0xd3, + 0x88, 0x6b, 0x3b, 0x5a, 0xa2, 0x57, 0x61, 0x99, 0x13, 0x67, 0x1c, 0x52, 0x31, 0x91, 0x09, 0x2d, + 0xb0, 0xa3, 0xb3, 0xae, 0x68, 0x97, 0xa3, 0xfd, 0x0d, 0xbd, 0x2d, 0x41, 0x5c, 0x22, 0x30, 0xf5, + 0x78, 0xe5, 0x39, 0x0d, 0x62, 0x96, 0x29, 0x73, 0xff, 0x98, 0x87, 0x62, 0x5c, 0xf1, 0x17, 0x53, + 0xc5, 0x3f, 0x94, 0x01, 0x63, 0x9c, 0x30, 0x3e, 0xfe, 0x1f, 0xcb, 0xb8, 0x1c, 0xe3, 0x98, 0x82, + 0x7b, 0x01, 0xf2, 0x3f, 0xc3, 0xd4, 0x23, 0xae, 0x62, 0xa5, 0x60, 0x9b, 0x15, 0x5a, 0x87, 0x3c, + 0x17, 0x58, 0x8c, 0xb9, 0xa2, 0x62, 0xe9, 0x7a, 0xf3, 0xa4, 0xcc, 0x68, 0x07, 0xcc, 0xed, 0x29, + 0x49, 0xdb, 0x68, 0xa0, 0x6d, 0xc8, 0x8b, 0x60, 0x9f, 0x30, 0x43, 0xd2, 0xb9, 0xb2, 0x7a, 0x93, + 0x89, 0x54, 0x56, 0x6f, 0x32, 0x61, 0x1b, 0x2c, 0x34, 0x84, 0x65, 0x97, 0x78, 0x64, 0xa8, 0xa8, + 0xe4, 0x7b, 0x38, 0x24, 0xbc, 0x92, 0xbf, 0x80, 0xaa, 0x29, 0xc7, 0xa8, 0x3d, 0x05, 0x8a, 0x6e, + 0x41, 0xc9, 0x4d, 0xd2, 0xad, 0x32, 0xaf, 0x88, 0xfe, 0xda, 0x49, 0xfe, 0xa7, 0x32, 0xd3, 0xb4, + 0xf7, 0xb4, 0xb6, 0x4c, 0xae, 0x31, 0x1b, 0x04, 0xcc, 0xa5, 0x6c, 0x18, 0xb5, 0xb4, 0x82, 0x6a, + 0x69, 0xe5, 0x78, 0x5f, 0x37, 0x35, 0x74, 0x0b, 0x96, 0x12, 0x51, 0x55, 0x3b, 0xc5, 0x73, 0xd4, + 0xce, 0x62, 0xac, 0x2b, 0x4f, 0xd1, 0x4d, 0x80, 0xa4, 0x30, 0x2b, 0xa0, 0x80, 0x9a, 0x9f, 0x5f, + 0xdd, 0xc6, 0x85, 0x94, 0x2e, 0xf2, 0xe0, 0x92, 0x4f, 0x59, 0x9f, 0x13, 0x6f, 0xb7, 0x6f, 0xa8, + 0x92, 0x90, 0xa5, 0x0b, 0x08, 0xed, 0x8a, 0x4f, 0x59, 0x8f, 0x78, 0xbb, 0x9d, 0x18, 0x76, 0x7d, + 0xe1, 0x9d, 0x87, 0xf5, 0x8c, 0xa9, 0xa5, 0x4c, 0x73, 0x0b, 0x16, 0x76, 0xb0, 0x67, 0xca, 0x80, + 0x70, 0xf4, 0x3a, 0x14, 0x71, 0xb4, 0xa8, 0x58, 0x8d, 0xb9, 0x53, 0xcb, 0x28, 0x11, 0xd5, 0xd5, + 0xf9, 0xcb, 0xbf, 0x36, 0xac, 0xe6, 0x6f, 0x2c, 0xc8, 0x77, 0x76, 0xb6, 0x30, 0x0d, 0x51, 0x17, + 0x56, 0x92, 0x84, 0x3a, 0x6b, 0x6d, 0x26, 0x39, 0x18, 0x15, 0x67, 0x17, 0x56, 0xee, 0x46, 0xe5, + 0x1e, 0xc3, 0x64, 0x3f, 0x0f, 0x26, 0x56, 0x31, 0xfb, 0x53, 0x8e, 0x77, 0x61, 0x5e, 0x5b, 0xc9, + 0xd1, 0x3a, 0x3c, 0x37, 0x92, 0x3f, 0x94, 0xbf, 0xa5, 0xeb, 0xb5, 0x13, 0x13, 0x51, 0xc9, 0x9b, + 0x00, 0x6a, 0x95, 0xe6, 0xbf, 0x2d, 0x80, 0xce, 0xce, 0xce, 0x76, 0x48, 0x47, 0x1e, 0x11, 0x17, + 0xe5, 0xf1, 0x9b, 0xf0, 0x7c, 0xe2, 0x31, 0x0f, 0x9d, 0x33, 0x7b, 0x7d, 0x29, 0x56, 0xeb, 0x85, + 0xce, 0xb1, 0x68, 0x2e, 0x17, 0x31, 0xda, 0xdc, 0x99, 0xd1, 0x3a, 0x5c, 0x1c, 0x4f, 0x63, 0x0f, + 0x4a, 0x89, 0xfb, 0x1c, 0x75, 0xa0, 0x20, 0xcc, 0x6f, 0xc3, 0x66, 0xf3, 0x64, 0x36, 0x23, 0x35, + 0xc3, 0x68, 0xac, 0xd9, 0xfc, 0x8f, 0x24, 0x35, 0xce, 0xd8, 0x2f, 0x56, 0x1a, 0xc9, 0xde, 0x6b, + 0x7a, 0xe3, 0x45, 0x4c, 0x14, 0x06, 0x6b, 0x8a, 0xd5, 0x5f, 0x65, 0xe1, 0xd2, 0x9d, 0xa8, 0xdb, + 0x7c, 0x61, 0x99, 0xd8, 0x82, 0x79, 0xc2, 0x44, 0x48, 0x15, 0x15, 0x32, 0xd6, 0xdf, 0x38, 0x29, + 0xd6, 0xc7, 0xf8, 0xd2, 0x65, 0x22, 0x9c, 0x98, 0xc8, 0x47, 0x30, 0x53, 0x2c, 0xfc, 0x25, 0x0b, + 0x95, 0x93, 0x34, 0xd1, 0x2b, 0x50, 0x76, 0x42, 0xa2, 0x36, 0xa2, 0xae, 0x6f, 0xa9, 0xae, 0xbf, + 0x14, 0x6d, 0x9b, 0xa6, 0xff, 0x16, 0xc8, 0x01, 0x4a, 0x26, 0x96, 0x14, 0x3d, 0xf7, 0xc4, 0xb4, + 0x94, 0x28, 0xab, 0xb6, 0x4f, 0xa0, 0x4c, 0x19, 0x15, 0x14, 0x7b, 0xfd, 0x01, 0xf6, 0x30, 0x73, + 0x9e, 0x66, 0xb2, 0x9c, 0x6d, 0xd4, 0x4b, 0x06, 0xb4, 0xad, 0x31, 0xd1, 0x0e, 0xcc, 0x47, 0xf0, + 0xb9, 0x0b, 0x80, 0x8f, 0xc0, 0x52, 0x53, 0xd4, 0xa7, 0x59, 0x58, 0xb1, 0x89, 0xfb, 0x6c, 0xd1, + 0xfa, 0x63, 0x00, 0x5d, 0x70, 0xb2, 0x0f, 0x3e, 0x05, 0xb3, 0xb3, 0x05, 0x5c, 0xd4, 0x78, 0x1d, + 0x2e, 0x52, 0xdc, 0x7e, 0x9c, 0x85, 0x85, 0x34, 0xb7, 0xcf, 0xc0, 0xdf, 0x05, 0xb4, 0x99, 0x74, + 0x83, 0x9c, 0xea, 0x06, 0xaf, 0x9e, 0xd4, 0x0d, 0x66, 0xb2, 0xee, 0xf4, 0x36, 0xf0, 0x59, 0x16, + 0xf2, 0x5b, 0x38, 0xc4, 0x3e, 0x47, 0xdf, 0x9b, 0x19, 0xe0, 0xf4, 0xab, 0xea, 0xf2, 0x4c, 0xce, + 0x75, 0xcc, 0xe7, 0x10, 0x9d, 0x72, 0xef, 0x1d, 0x33, 0xbf, 0xbd, 0x04, 0x4b, 0xf2, 0x89, 0x18, + 0xbb, 0xa2, 0x49, 0x5c, 0x54, 0x6f, 0xbc, 0xf8, 0x75, 0xc1, 0x51, 0x1d, 0x4a, 0x52, 0x2c, 0x69, + 0x74, 0x52, 0x06, 0x7c, 0x7c, 0xd0, 0xd5, 0x3b, 0xe8, 0x2a, 0xa0, 0xbd, 0xf8, 0x73, 0x47, 0x3f, + 0xa1, 0x40, 0xca, 0xad, 0x24, 0x27, 0x91, 0xf8, 0x57, 0x00, 0xa4, 0x15, 0x7d, 0x97, 0xb0, 0xc0, + 0x37, 0x6f, 0x9c, 0xa2, 0xdc, 0xe9, 0xc8, 0x0d, 0xf4, 0x73, 0x3d, 0x0b, 0x4e, 0xbd, 0x1e, 0xcd, + 0x18, 0xfe, 0xe6, 0xf9, 0x32, 0xf5, 0xb3, 0xc3, 0x7a, 0x75, 0x82, 0x7d, 0x6f, 0xbd, 0x79, 0x0c, + 0x64, 0x53, 0xcd, 0x86, 0x47, 0x5f, 0x9d, 0xa9, 0x0c, 0x7e, 0xdf, 0x02, 0x94, 0xb4, 0x5c, 0x9b, + 0xf0, 0x91, 0x7c, 0xd6, 0xc8, 0xa1, 0x37, 0x35, 0xa1, 0x5a, 0xa7, 0x0f, 0xbd, 0x89, 0x7e, 0x34, + 0xf4, 0xa6, 0x2a, 0xe2, 0x5b, 0x49, 0x83, 0xcb, 0x9a, 0x18, 0x1a, 0x98, 0x01, 0xe6, 0x24, 0x35, + 0x38, 0xd3, 0x48, 0x7b, 0xa6, 0x87, 0x65, 0x9a, 0x9f, 0x5a, 0x70, 0x79, 0x26, 0x9b, 0x62, 0x63, + 0x7f, 0x0a, 0x28, 0x4c, 0x1d, 0xaa, 0xd8, 0x4c, 0x8c, 0xd1, 0xe7, 0x4e, 0xce, 0x95, 0x70, 0xa6, + 0x57, 0xfe, 0xbf, 0x7a, 0x74, 0x4e, 0x45, 0xe0, 0x0f, 0x16, 0xac, 0xa6, 0x8d, 0x89, 0xdd, 0xba, + 0x0d, 0x0b, 0x69, 0x5b, 0x8c, 0x43, 0x2f, 0x9e, 0xc5, 0x21, 0xe3, 0xcb, 0x11, 0x7d, 0xf4, 0x76, + 0x52, 0xb8, 0xfa, 0x33, 0xdb, 0xb5, 0x33, 0x73, 0x13, 0xd9, 0x34, 0x5d, 0xc0, 0xb9, 0x68, 0x8a, + 0xc9, 0x6d, 0x05, 0x81, 0x87, 0x7e, 0x01, 0x2b, 0x2c, 0x10, 0x7d, 0x99, 0xe5, 0xc4, 0xed, 0x9b, + 0x97, 0xab, 0xee, 0x7e, 0x6f, 0x9f, 0x8f, 0xb2, 0x7f, 0x1e, 0xd6, 0x67, 0xa1, 0xa6, 0x78, 0x2c, + 0xb3, 0x40, 0xb4, 0xd5, 0xf9, 0xb6, 0x7e, 0xd7, 0x86, 0xb0, 0x78, 0xf4, 0x6a, 0xdd, 0x2d, 0xdf, + 0x3a, 0xf7, 0xd5, 0x8b, 0xa7, 0x5d, 0xbb, 0x30, 0x48, 0xdd, 0xb9, 0x5e, 0x90, 0x31, 0xfc, 0xd7, + 0xc3, 0xba, 0xf5, 0xf5, 0xdf, 0x5a, 0x00, 0xc9, 0x13, 0x1e, 0xbd, 0x06, 0x5f, 0x6a, 0x7f, 0xff, + 0x76, 0xa7, 0xdf, 0xdb, 0xbe, 0xb1, 0x7d, 0xa7, 0xd7, 0xbf, 0x73, 0xbb, 0xb7, 0xd5, 0xdd, 0xd8, + 0x7c, 0x63, 0xb3, 0xdb, 0x59, 0xce, 0x54, 0xcb, 0xf7, 0x1f, 0x34, 0x4a, 0x77, 0x18, 0x1f, 0x11, + 0x87, 0xee, 0x52, 0xe2, 0xa2, 0x97, 0x61, 0xf5, 0xa8, 0xb4, 0x5c, 0x75, 0x3b, 0xcb, 0x56, 0x75, + 0xe1, 0xfe, 0x83, 0x46, 0x41, 0x4f, 0x47, 0xc4, 0x45, 0x57, 0xe0, 0xf9, 0x59, 0xb9, 0xcd, 0xdb, + 0xdf, 0x5d, 0xce, 0x56, 0x17, 0xef, 0x3f, 0x68, 0x14, 0xe3, 0x31, 0x0a, 0x35, 0x01, 0xa5, 0x25, + 0x0d, 0xde, 0x5c, 0x15, 0xee, 0x3f, 0x68, 0xe4, 0x35, 0x6d, 0xd5, 0xdc, 0x3b, 0xef, 0xd7, 0x32, + 0xed, 0x37, 0x3e, 0x7a, 0x5c, 0xb3, 0x1e, 0x3d, 0xae, 0x59, 0x7f, 0x7f, 0x5c, 0xb3, 0xde, 0x7d, + 0x52, 0xcb, 0x3c, 0x7a, 0x52, 0xcb, 0xfc, 0xe9, 0x49, 0x2d, 0xf3, 0xa3, 0xd7, 0x4e, 0x65, 0xec, + 0x20, 0xfe, 0x06, 0xae, 0xb8, 0x1b, 0xe4, 0x55, 0x53, 0xfe, 0xe6, 0x7f, 0x03, 0x00, 0x00, 0xff, + 0xff, 0x69, 0x8a, 0xda, 0x8c, 0x22, 0x17, 0x00, 0x00, } func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { @@ -1256,476 +1329,480 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 7499 bytes of a gzipped FileDescriptorSet - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0xbc, 0x6b, 0x70, 0x24, 0xd7, - 0x75, 0x1f, 0x8e, 0x79, 0x60, 0x30, 0x73, 0x66, 0x30, 0x68, 0x5c, 0x60, 0x77, 0x67, 0x41, 0x12, - 0x00, 0x87, 0x8f, 0x5d, 0xbe, 0xb0, 0xe4, 0x92, 0xbb, 0xcb, 0x9d, 0xb5, 0xc4, 0xff, 0xbc, 0x16, - 0xc4, 0x2e, 0x1e, 0xc3, 0x1e, 0x60, 0xf9, 0xf0, 0xdf, 0xe9, 0x6a, 0xf4, 0x5c, 0x0c, 0x9a, 0xe8, - 0xe9, 0x6e, 0x77, 0xf7, 0xec, 0x2e, 0x58, 0x4e, 0x8a, 0x2e, 0xe5, 0x21, 0x6d, 0x2a, 0x8e, 0x1c, - 0xa7, 0x62, 0x59, 0xd6, 0x2a, 0x94, 0xe5, 0x44, 0x8e, 0xa2, 0x3c, 0x6c, 0x29, 0x4a, 0x1c, 0x57, - 0x12, 0x25, 0xa9, 0x24, 0xb2, 0x3e, 0xa4, 0x64, 0x7f, 0x88, 0xed, 0x3c, 0x18, 0x87, 0x52, 0x25, - 0x8c, 0xa2, 0xc4, 0x8e, 0xc2, 0x54, 0x25, 0xa5, 0x52, 0x2a, 0x75, 0x5f, 0xfd, 0x98, 0x07, 0x66, - 0xb0, 0x59, 0xca, 0xae, 0xf2, 0x27, 0x4c, 0x9f, 0x7b, 0x7e, 0xbf, 0x3e, 0xf7, 0xdc, 0x73, 0xcf, - 0x3d, 0xf7, 0x76, 0x37, 0xe0, 0x9f, 0x5e, 0x81, 0xe5, 0xb6, 0x65, 0xb5, 0x0d, 0x7c, 0xce, 0x76, - 0x2c, 0xcf, 0xda, 0xed, 0xee, 0x9d, 0x6b, 0x61, 0x57, 0x73, 0x74, 0xdb, 0xb3, 0x9c, 0x15, 0x2a, - 0x43, 0x33, 0x4c, 0x63, 0x45, 0x68, 0x14, 0x37, 0x60, 0xf6, 0xaa, 0x6e, 0xe0, 0x9a, 0xaf, 0xd8, - 0xc4, 0x1e, 0x7a, 0x11, 0x92, 0x7b, 0xba, 0x81, 0x0b, 0xb1, 0xe5, 0xc4, 0xd9, 0xec, 0xf9, 0x47, - 0x57, 0x7a, 0x40, 0x2b, 0x51, 0x44, 0x83, 0x88, 0x65, 0x8a, 0x28, 0x7e, 0x3b, 0x09, 0x73, 0x03, - 0x5a, 0x11, 0x82, 0xa4, 0xa9, 0x76, 0x08, 0x63, 0xec, 0x6c, 0x46, 0xa6, 0xbf, 0x51, 0x01, 0xa6, - 0x6c, 0x55, 0x3b, 0x50, 0xdb, 0xb8, 0x10, 0xa7, 0x62, 0x71, 0x89, 0x16, 0x01, 0x5a, 0xd8, 0xc6, - 0x66, 0x0b, 0x9b, 0xda, 0x61, 0x21, 0xb1, 0x9c, 0x38, 0x9b, 0x91, 0x43, 0x12, 0xf4, 0x14, 0xcc, - 0xda, 0xdd, 0x5d, 0x43, 0xd7, 0x94, 0x90, 0x1a, 0x2c, 0x27, 0xce, 0x4e, 0xca, 0x12, 0x6b, 0xa8, - 0x05, 0xca, 0x67, 0x60, 0xe6, 0x16, 0x56, 0x0f, 0xc2, 0xaa, 0x59, 0xaa, 0x9a, 0x27, 0xe2, 0x90, - 0x62, 0x15, 0x72, 0x1d, 0xec, 0xba, 0x6a, 0x1b, 0x2b, 0xde, 0xa1, 0x8d, 0x0b, 0x49, 0xda, 0xfb, - 0xe5, 0xbe, 0xde, 0xf7, 0xf6, 0x3c, 0xcb, 0x51, 0xdb, 0x87, 0x36, 0x46, 0x65, 0xc8, 0x60, 0xb3, - 0xdb, 0x61, 0x0c, 0x93, 0x43, 0xfc, 0x57, 0x37, 0xbb, 0x9d, 0x5e, 0x96, 0x34, 0x81, 0x71, 0x8a, - 0x29, 0x17, 0x3b, 0x37, 0x75, 0x0d, 0x17, 0x52, 0x94, 0xe0, 0x4c, 0x1f, 0x41, 0x93, 0xb5, 0xf7, - 0x72, 0x08, 0x1c, 0xaa, 0x42, 0x06, 0xdf, 0xf6, 0xb0, 0xe9, 0xea, 0x96, 0x59, 0x98, 0xa2, 0x24, - 0x8f, 0x0d, 0x18, 0x45, 0x6c, 0xb4, 0x7a, 0x29, 0x02, 0x1c, 0xba, 0x08, 0x53, 0x96, 0xed, 0xe9, - 0x96, 0xe9, 0x16, 0xd2, 0xcb, 0xb1, 0xb3, 0xd9, 0xf3, 0x0f, 0x0e, 0x0c, 0x84, 0x2d, 0xa6, 0x23, - 0x0b, 0x65, 0xb4, 0x06, 0x92, 0x6b, 0x75, 0x1d, 0x0d, 0x2b, 0x9a, 0xd5, 0xc2, 0x8a, 0x6e, 0xee, - 0x59, 0x85, 0x0c, 0x25, 0x58, 0xea, 0xef, 0x08, 0x55, 0xac, 0x5a, 0x2d, 0xbc, 0x66, 0xee, 0x59, - 0x72, 0xde, 0x8d, 0x5c, 0xa3, 0x93, 0x90, 0x72, 0x0f, 0x4d, 0x4f, 0xbd, 0x5d, 0xc8, 0xd1, 0x08, - 0xe1, 0x57, 0xc5, 0x5f, 0x4d, 0xc1, 0xcc, 0x38, 0x21, 0x76, 0x05, 0x26, 0xf7, 0x48, 0x2f, 0x0b, - 0xf1, 0xe3, 0xf8, 0x80, 0x61, 0xa2, 0x4e, 0x4c, 0xdd, 0xa3, 0x13, 0xcb, 0x90, 0x35, 0xb1, 0xeb, - 0xe1, 0x16, 0x8b, 0x88, 0xc4, 0x98, 0x31, 0x05, 0x0c, 0xd4, 0x1f, 0x52, 0xc9, 0x7b, 0x0a, 0xa9, - 0xd7, 0x60, 0xc6, 0x37, 0x49, 0x71, 0x54, 0xb3, 0x2d, 0x62, 0xf3, 0xdc, 0x28, 0x4b, 0x56, 0xea, - 0x02, 0x27, 0x13, 0x98, 0x9c, 0xc7, 0x91, 0x6b, 0x54, 0x03, 0xb0, 0x4c, 0x6c, 0xed, 0x29, 0x2d, - 0xac, 0x19, 0x85, 0xf4, 0x10, 0x2f, 0x6d, 0x11, 0x95, 0x3e, 0x2f, 0x59, 0x4c, 0xaa, 0x19, 0xe8, - 0x72, 0x10, 0x6a, 0x53, 0x43, 0x22, 0x65, 0x83, 0x4d, 0xb2, 0xbe, 0x68, 0xdb, 0x81, 0xbc, 0x83, - 0x49, 0xdc, 0xe3, 0x16, 0xef, 0x59, 0x86, 0x1a, 0xb1, 0x32, 0xb2, 0x67, 0x32, 0x87, 0xb1, 0x8e, - 0x4d, 0x3b, 0xe1, 0x4b, 0xf4, 0x08, 0xf8, 0x02, 0x85, 0x86, 0x15, 0xd0, 0x2c, 0x94, 0x13, 0xc2, - 0x4d, 0xb5, 0x83, 0x17, 0xde, 0x82, 0x7c, 0xd4, 0x3d, 0x68, 0x1e, 0x26, 0x5d, 0x4f, 0x75, 0x3c, - 0x1a, 0x85, 0x93, 0x32, 0xbb, 0x40, 0x12, 0x24, 0xb0, 0xd9, 0xa2, 0x59, 0x6e, 0x52, 0x26, 0x3f, - 0xd1, 0xff, 0x17, 0x74, 0x38, 0x41, 0x3b, 0xfc, 0x78, 0xff, 0x88, 0x46, 0x98, 0x7b, 0xfb, 0xbd, - 0x70, 0x09, 0xa6, 0x23, 0x1d, 0x18, 0xf7, 0xd6, 0xc5, 0x9f, 0x80, 0x13, 0x03, 0xa9, 0xd1, 0x6b, - 0x30, 0xdf, 0x35, 0x75, 0xd3, 0xc3, 0x8e, 0xed, 0x60, 0x12, 0xb1, 0xec, 0x56, 0x85, 0xff, 0x34, - 0x35, 0x24, 0xe6, 0x76, 0xc2, 0xda, 0x8c, 0x45, 0x9e, 0xeb, 0xf6, 0x0b, 0x9f, 0xcc, 0xa4, 0xdf, - 0x9f, 0x92, 0xde, 0x7e, 0xfb, 0xed, 0xb7, 0xe3, 0xc5, 0x7f, 0x9c, 0x82, 0xf9, 0x41, 0x73, 0x66, - 0xe0, 0xf4, 0x3d, 0x09, 0x29, 0xb3, 0xdb, 0xd9, 0xc5, 0x0e, 0x75, 0xd2, 0xa4, 0xcc, 0xaf, 0x50, - 0x19, 0x26, 0x0d, 0x75, 0x17, 0x1b, 0x85, 0xe4, 0x72, 0xec, 0x6c, 0xfe, 0xfc, 0x53, 0x63, 0xcd, - 0xca, 0x95, 0x75, 0x02, 0x91, 0x19, 0x12, 0x7d, 0x14, 0x92, 0x3c, 0x45, 0x13, 0x86, 0x27, 0xc7, - 0x63, 0x20, 0x73, 0x49, 0xa6, 0x38, 0xf4, 0x00, 0x64, 0xc8, 0x5f, 0x16, 0x1b, 0x29, 0x6a, 0x73, - 0x9a, 0x08, 0x48, 0x5c, 0xa0, 0x05, 0x48, 0xd3, 0x69, 0xd2, 0xc2, 0x62, 0x69, 0xf3, 0xaf, 0x49, - 0x60, 0xb5, 0xf0, 0x9e, 0xda, 0x35, 0x3c, 0xe5, 0xa6, 0x6a, 0x74, 0x31, 0x0d, 0xf8, 0x8c, 0x9c, - 0xe3, 0xc2, 0x1b, 0x44, 0x86, 0x96, 0x20, 0xcb, 0x66, 0x95, 0x6e, 0xb6, 0xf0, 0x6d, 0x9a, 0x3d, - 0x27, 0x65, 0x36, 0xd1, 0xd6, 0x88, 0x84, 0xdc, 0xfe, 0x4d, 0xd7, 0x32, 0x45, 0x68, 0xd2, 0x5b, - 0x10, 0x01, 0xbd, 0xfd, 0xa5, 0xde, 0xc4, 0xfd, 0xd0, 0xe0, 0xee, 0xf5, 0xcd, 0xa5, 0x33, 0x30, - 0x43, 0x35, 0x9e, 0xe7, 0x43, 0xaf, 0x1a, 0x85, 0xd9, 0xe5, 0xd8, 0xd9, 0xb4, 0x9c, 0x67, 0xe2, - 0x2d, 0x2e, 0x2d, 0x7e, 0x35, 0x0e, 0x49, 0x9a, 0x58, 0x66, 0x20, 0xbb, 0xfd, 0x7a, 0xa3, 0xae, - 0xd4, 0xb6, 0x76, 0x2a, 0xeb, 0x75, 0x29, 0x86, 0xf2, 0x00, 0x54, 0x70, 0x75, 0x7d, 0xab, 0xbc, - 0x2d, 0xc5, 0xfd, 0xeb, 0xb5, 0xcd, 0xed, 0x8b, 0x2f, 0x48, 0x09, 0x1f, 0xb0, 0xc3, 0x04, 0xc9, - 0xb0, 0xc2, 0xf3, 0xe7, 0xa5, 0x49, 0x24, 0x41, 0x8e, 0x11, 0xac, 0xbd, 0x56, 0xaf, 0x5d, 0x7c, - 0x41, 0x4a, 0x45, 0x25, 0xcf, 0x9f, 0x97, 0xa6, 0xd0, 0x34, 0x64, 0xa8, 0xa4, 0xb2, 0xb5, 0xb5, - 0x2e, 0xa5, 0x7d, 0xce, 0xe6, 0xb6, 0xbc, 0xb6, 0xb9, 0x2a, 0x65, 0x7c, 0xce, 0x55, 0x79, 0x6b, - 0xa7, 0x21, 0x81, 0xcf, 0xb0, 0x51, 0x6f, 0x36, 0xcb, 0xab, 0x75, 0x29, 0xeb, 0x6b, 0x54, 0x5e, - 0xdf, 0xae, 0x37, 0xa5, 0x5c, 0xc4, 0xac, 0xe7, 0xcf, 0x4b, 0xd3, 0xfe, 0x2d, 0xea, 0x9b, 0x3b, - 0x1b, 0x52, 0x1e, 0xcd, 0xc2, 0x34, 0xbb, 0x85, 0x30, 0x62, 0xa6, 0x47, 0x74, 0xf1, 0x05, 0x49, - 0x0a, 0x0c, 0x61, 0x2c, 0xb3, 0x11, 0xc1, 0xc5, 0x17, 0x24, 0x54, 0xac, 0xc2, 0x24, 0x0d, 0x43, - 0x84, 0x20, 0xbf, 0x5e, 0xae, 0xd4, 0xd7, 0x95, 0xad, 0xc6, 0xf6, 0xda, 0xd6, 0x66, 0x79, 0x5d, - 0x8a, 0x05, 0x32, 0xb9, 0xfe, 0xca, 0xce, 0x9a, 0x5c, 0xaf, 0x49, 0xf1, 0xb0, 0xac, 0x51, 0x2f, - 0x6f, 0xd7, 0x6b, 0x52, 0xa2, 0xa8, 0xc1, 0xfc, 0xa0, 0x84, 0x3a, 0x70, 0x0a, 0x85, 0x62, 0x21, - 0x3e, 0x24, 0x16, 0x28, 0x57, 0x6f, 0x2c, 0x14, 0xbf, 0x15, 0x87, 0xb9, 0x01, 0x8b, 0xca, 0xc0, - 0x9b, 0xbc, 0x04, 0x93, 0x2c, 0x96, 0xd9, 0x32, 0xfb, 0xc4, 0xc0, 0xd5, 0x89, 0x46, 0x76, 0xdf, - 0x52, 0x4b, 0x71, 0xe1, 0x52, 0x23, 0x31, 0xa4, 0xd4, 0x20, 0x14, 0x7d, 0x01, 0xfb, 0x63, 0x7d, - 0xc9, 0x9f, 0xad, 0x8f, 0x17, 0xc7, 0x59, 0x1f, 0xa9, 0xec, 0x78, 0x8b, 0xc0, 0xe4, 0x80, 0x45, - 0xe0, 0x0a, 0xcc, 0xf6, 0x11, 0x8d, 0x9d, 0x8c, 0x3f, 0x16, 0x83, 0xc2, 0x30, 0xe7, 0x8c, 0x48, - 0x89, 0xf1, 0x48, 0x4a, 0xbc, 0xd2, 0xeb, 0xc1, 0x87, 0x87, 0x0f, 0x42, 0xdf, 0x58, 0x7f, 0x21, - 0x06, 0x27, 0x07, 0x97, 0x94, 0x03, 0x6d, 0xf8, 0x28, 0xa4, 0x3a, 0xd8, 0xdb, 0xb7, 0x44, 0x59, - 0xf5, 0xf8, 0x80, 0xc5, 0x9a, 0x34, 0xf7, 0x0e, 0x36, 0x47, 0x85, 0x57, 0xfb, 0xc4, 0xb0, 0xba, - 0x90, 0x59, 0xd3, 0x67, 0xe9, 0x27, 0xe2, 0x70, 0x62, 0x20, 0xf9, 0x40, 0x43, 0x1f, 0x02, 0xd0, - 0x4d, 0xbb, 0xeb, 0xb1, 0xd2, 0x89, 0x65, 0xe2, 0x0c, 0x95, 0xd0, 0xe4, 0x45, 0xb2, 0x6c, 0xd7, - 0xf3, 0xdb, 0x13, 0xb4, 0x1d, 0x98, 0x88, 0x2a, 0xbc, 0x18, 0x18, 0x9a, 0xa4, 0x86, 0x2e, 0x0e, - 0xe9, 0x69, 0x5f, 0x60, 0x3e, 0x0b, 0x92, 0x66, 0xe8, 0xd8, 0xf4, 0x14, 0xd7, 0x73, 0xb0, 0xda, - 0xd1, 0xcd, 0x36, 0x5d, 0x6a, 0xd2, 0xa5, 0xc9, 0x3d, 0xd5, 0x70, 0xb1, 0x3c, 0xc3, 0x9a, 0x9b, - 0xa2, 0x95, 0x20, 0x68, 0x00, 0x39, 0x21, 0x44, 0x2a, 0x82, 0x60, 0xcd, 0x3e, 0xa2, 0xf8, 0xd3, - 0x19, 0xc8, 0x86, 0x0a, 0x70, 0xf4, 0x30, 0xe4, 0xde, 0x54, 0x6f, 0xaa, 0x8a, 0xd8, 0x54, 0x31, - 0x4f, 0x64, 0x89, 0xac, 0xc1, 0x37, 0x56, 0xcf, 0xc2, 0x3c, 0x55, 0xb1, 0xba, 0x1e, 0x76, 0x14, - 0xcd, 0x50, 0x5d, 0x97, 0x3a, 0x2d, 0x4d, 0x55, 0x11, 0x69, 0xdb, 0x22, 0x4d, 0x55, 0xd1, 0x82, - 0x2e, 0xc0, 0x1c, 0x45, 0x74, 0xba, 0x86, 0xa7, 0xdb, 0x06, 0x56, 0xc8, 0x36, 0xcf, 0xa5, 0x4b, - 0x8e, 0x6f, 0xd9, 0x2c, 0xd1, 0xd8, 0xe0, 0x0a, 0xc4, 0x22, 0x17, 0xd5, 0xe0, 0x21, 0x0a, 0x6b, - 0x63, 0x13, 0x3b, 0xaa, 0x87, 0x15, 0xfc, 0xe3, 0x5d, 0xd5, 0x70, 0x15, 0xd5, 0x6c, 0x29, 0xfb, - 0xaa, 0xbb, 0x5f, 0x98, 0x27, 0x04, 0x95, 0x78, 0x21, 0x26, 0x9f, 0x26, 0x8a, 0xab, 0x5c, 0xaf, - 0x4e, 0xd5, 0xca, 0x66, 0xeb, 0x65, 0xd5, 0xdd, 0x47, 0x25, 0x38, 0x49, 0x59, 0x5c, 0xcf, 0xd1, - 0xcd, 0xb6, 0xa2, 0xed, 0x63, 0xed, 0x40, 0xe9, 0x7a, 0x7b, 0x2f, 0x16, 0x1e, 0x08, 0xdf, 0x9f, - 0x5a, 0xd8, 0xa4, 0x3a, 0x55, 0xa2, 0xb2, 0xe3, 0xed, 0xbd, 0x88, 0x9a, 0x90, 0x23, 0x83, 0xd1, - 0xd1, 0xdf, 0xc2, 0xca, 0x9e, 0xe5, 0xd0, 0x35, 0x34, 0x3f, 0x20, 0x35, 0x85, 0x3c, 0xb8, 0xb2, - 0xc5, 0x01, 0x1b, 0x56, 0x0b, 0x97, 0x26, 0x9b, 0x8d, 0x7a, 0xbd, 0x26, 0x67, 0x05, 0xcb, 0x55, - 0xcb, 0x21, 0x01, 0xd5, 0xb6, 0x7c, 0x07, 0x67, 0x59, 0x40, 0xb5, 0x2d, 0xe1, 0xde, 0x0b, 0x30, - 0xa7, 0x69, 0xac, 0xcf, 0xba, 0xa6, 0xf0, 0xcd, 0x98, 0x5b, 0x90, 0x22, 0xce, 0xd2, 0xb4, 0x55, - 0xa6, 0xc0, 0x63, 0xdc, 0x45, 0x97, 0xe1, 0x44, 0xe0, 0xac, 0x30, 0x70, 0xb6, 0xaf, 0x97, 0xbd, - 0xd0, 0x0b, 0x30, 0x67, 0x1f, 0xf6, 0x03, 0x51, 0xe4, 0x8e, 0xf6, 0x61, 0x2f, 0xec, 0x12, 0xcc, - 0xdb, 0xfb, 0x76, 0x3f, 0xee, 0xc9, 0x30, 0x0e, 0xd9, 0xfb, 0x76, 0x2f, 0xf0, 0x31, 0xba, 0x33, - 0x77, 0xb0, 0xa6, 0x7a, 0xb8, 0x55, 0x38, 0x15, 0x56, 0x0f, 0x35, 0xa0, 0x15, 0x90, 0x34, 0x4d, - 0xc1, 0xa6, 0xba, 0x6b, 0x60, 0x45, 0x75, 0xb0, 0xa9, 0xba, 0x85, 0x25, 0xaa, 0x9c, 0xf4, 0x9c, - 0x2e, 0x96, 0xf3, 0x9a, 0x56, 0xa7, 0x8d, 0x65, 0xda, 0x86, 0x9e, 0x84, 0x59, 0x6b, 0xf7, 0x4d, - 0x8d, 0x45, 0xa4, 0x62, 0x3b, 0x78, 0x4f, 0xbf, 0x5d, 0x78, 0x94, 0xba, 0x77, 0x86, 0x34, 0xd0, - 0x78, 0x6c, 0x50, 0x31, 0x7a, 0x02, 0x24, 0xcd, 0xdd, 0x57, 0x1d, 0x9b, 0xa6, 0x64, 0xd7, 0x56, - 0x35, 0x5c, 0x78, 0x8c, 0xa9, 0x32, 0xf9, 0xa6, 0x10, 0x93, 0x19, 0xe1, 0xde, 0xd2, 0xf7, 0x3c, - 0xc1, 0x78, 0x86, 0xcd, 0x08, 0x2a, 0xe3, 0x6c, 0x67, 0x41, 0x22, 0x9e, 0x88, 0xdc, 0xf8, 0x2c, - 0x55, 0xcb, 0xdb, 0xfb, 0x76, 0xf8, 0xbe, 0x8f, 0xc0, 0x34, 0xd1, 0x0c, 0x6e, 0xfa, 0x04, 0x2b, - 0xdc, 0xec, 0xfd, 0xd0, 0x1d, 0x5f, 0x80, 0x93, 0x44, 0xa9, 0x83, 0x3d, 0xb5, 0xa5, 0x7a, 0x6a, - 0x48, 0xfb, 0x69, 0xaa, 0x4d, 0xdc, 0xbe, 0xc1, 0x1b, 0x23, 0x76, 0x3a, 0xdd, 0xdd, 0x43, 0x3f, - 0xb0, 0x9e, 0x61, 0x76, 0x12, 0x99, 0x08, 0xad, 0x0f, 0xad, 0x38, 0x2f, 0x96, 0x20, 0x17, 0x8e, - 0x7b, 0x94, 0x01, 0x16, 0xf9, 0x52, 0x8c, 0x14, 0x41, 0xd5, 0xad, 0x1a, 0x29, 0x5f, 0xde, 0xa8, - 0x4b, 0x71, 0x52, 0x46, 0xad, 0xaf, 0x6d, 0xd7, 0x15, 0x79, 0x67, 0x73, 0x7b, 0x6d, 0xa3, 0x2e, - 0x25, 0x42, 0x85, 0xfd, 0xb5, 0x64, 0xfa, 0x71, 0xe9, 0x0c, 0xa9, 0x1a, 0xf2, 0xd1, 0x9d, 0x1a, - 0xfa, 0x11, 0x38, 0x25, 0x8e, 0x55, 0x5c, 0xec, 0x29, 0xb7, 0x74, 0x87, 0x4e, 0xc8, 0x8e, 0xca, - 0x16, 0x47, 0x3f, 0x7e, 0xe6, 0xb9, 0x56, 0x13, 0x7b, 0xaf, 0xea, 0x0e, 0x99, 0x6e, 0x1d, 0xd5, - 0x43, 0xeb, 0xb0, 0x64, 0x5a, 0x8a, 0xeb, 0xa9, 0x66, 0x4b, 0x75, 0x5a, 0x4a, 0x70, 0xa0, 0xa5, - 0xa8, 0x9a, 0x86, 0x5d, 0xd7, 0x62, 0x0b, 0xa1, 0xcf, 0xf2, 0xa0, 0x69, 0x35, 0xb9, 0x72, 0xb0, - 0x42, 0x94, 0xb9, 0x6a, 0x4f, 0xf8, 0x26, 0x86, 0x85, 0xef, 0x03, 0x90, 0xe9, 0xa8, 0xb6, 0x82, - 0x4d, 0xcf, 0x39, 0xa4, 0xf5, 0x79, 0x5a, 0x4e, 0x77, 0x54, 0xbb, 0x4e, 0xae, 0x7f, 0x28, 0xdb, - 0xa4, 0x6b, 0xc9, 0x74, 0x52, 0x9a, 0xbc, 0x96, 0x4c, 0x4f, 0x4a, 0xa9, 0x6b, 0xc9, 0x74, 0x4a, - 0x9a, 0xba, 0x96, 0x4c, 0xa7, 0xa5, 0xcc, 0xb5, 0x64, 0x3a, 0x23, 0x41, 0xf1, 0xbd, 0x04, 0xe4, - 0xc2, 0x15, 0x3c, 0xd9, 0x10, 0x69, 0x74, 0x0d, 0x8b, 0xd1, 0x2c, 0xf7, 0xc8, 0x91, 0xf5, 0xfe, - 0x4a, 0x95, 0x2c, 0x6e, 0xa5, 0x14, 0x2b, 0x97, 0x65, 0x86, 0x24, 0x85, 0x05, 0x09, 0x3f, 0xcc, - 0xca, 0x93, 0xb4, 0xcc, 0xaf, 0xd0, 0x2a, 0xa4, 0xde, 0x74, 0x29, 0x77, 0x8a, 0x72, 0x3f, 0x7a, - 0x34, 0xf7, 0xb5, 0x26, 0x25, 0xcf, 0x5c, 0x6b, 0x2a, 0x9b, 0x5b, 0xf2, 0x46, 0x79, 0x5d, 0xe6, - 0x70, 0x74, 0x1a, 0x92, 0x86, 0xfa, 0xd6, 0x61, 0x74, 0x19, 0xa4, 0xa2, 0x71, 0x87, 0xe5, 0x34, - 0x24, 0x6f, 0x61, 0xf5, 0x20, 0xba, 0xf8, 0x50, 0xd1, 0x87, 0x38, 0x3d, 0xce, 0xc1, 0x24, 0xf5, - 0x17, 0x02, 0xe0, 0x1e, 0x93, 0x26, 0x50, 0x1a, 0x92, 0xd5, 0x2d, 0x99, 0x4c, 0x11, 0x09, 0x72, - 0x4c, 0xaa, 0x34, 0xd6, 0xea, 0xd5, 0xba, 0x14, 0x2f, 0x5e, 0x80, 0x14, 0x73, 0x02, 0x99, 0x3e, - 0xbe, 0x1b, 0xa4, 0x09, 0x7e, 0xc9, 0x39, 0x62, 0xa2, 0x75, 0x67, 0xa3, 0x52, 0x97, 0xa5, 0x78, - 0xdf, 0xe0, 0x17, 0x5d, 0xc8, 0x85, 0x2b, 0xf3, 0x1f, 0xce, 0xf6, 0xfc, 0x6b, 0x31, 0xc8, 0x86, - 0x2a, 0x6d, 0x52, 0x22, 0xa9, 0x86, 0x61, 0xdd, 0x52, 0x54, 0x43, 0x57, 0x5d, 0x1e, 0x1a, 0x40, - 0x45, 0x65, 0x22, 0x19, 0x77, 0xe8, 0x7e, 0x48, 0x93, 0x66, 0x52, 0x4a, 0x15, 0x3f, 0x1b, 0x03, - 0xa9, 0xb7, 0xd4, 0xed, 0x31, 0x33, 0xf6, 0x07, 0x69, 0x66, 0xf1, 0x33, 0x31, 0xc8, 0x47, 0xeb, - 0xdb, 0x1e, 0xf3, 0x1e, 0xfe, 0x03, 0x35, 0xef, 0x77, 0xe3, 0x30, 0x1d, 0xa9, 0x6a, 0xc7, 0xb5, - 0xee, 0xc7, 0x61, 0x56, 0x6f, 0xe1, 0x8e, 0x6d, 0x79, 0xd8, 0xd4, 0x0e, 0x15, 0x03, 0xdf, 0xc4, - 0x46, 0xa1, 0x48, 0x93, 0xc6, 0xb9, 0xa3, 0xeb, 0xe6, 0x95, 0xb5, 0x00, 0xb7, 0x4e, 0x60, 0xa5, - 0xb9, 0xb5, 0x5a, 0x7d, 0xa3, 0xb1, 0xb5, 0x5d, 0xdf, 0xac, 0xbe, 0xae, 0xec, 0x6c, 0x5e, 0xdf, - 0xdc, 0x7a, 0x75, 0x53, 0x96, 0xf4, 0x1e, 0xb5, 0x0f, 0x71, 0xda, 0x37, 0x40, 0xea, 0x35, 0x0a, - 0x9d, 0x82, 0x41, 0x66, 0x49, 0x13, 0x68, 0x0e, 0x66, 0x36, 0xb7, 0x94, 0xe6, 0x5a, 0xad, 0xae, - 0xd4, 0xaf, 0x5e, 0xad, 0x57, 0xb7, 0x9b, 0xec, 0x24, 0xc4, 0xd7, 0xde, 0x8e, 0x4c, 0xf0, 0xe2, - 0xa7, 0x13, 0x30, 0x37, 0xc0, 0x12, 0x54, 0xe6, 0x7b, 0x18, 0xb6, 0xad, 0x7a, 0x66, 0x1c, 0xeb, - 0x57, 0x48, 0x15, 0xd1, 0x50, 0x1d, 0x8f, 0x6f, 0x79, 0x9e, 0x00, 0xe2, 0x25, 0xd3, 0xd3, 0xf7, - 0x74, 0xec, 0xf0, 0x13, 0x26, 0xb6, 0xb1, 0x99, 0x09, 0xe4, 0xec, 0x90, 0xe9, 0x69, 0x40, 0xb6, - 0xe5, 0xea, 0x9e, 0x7e, 0x13, 0x2b, 0xba, 0x29, 0x8e, 0xa3, 0xc8, 0x46, 0x27, 0x29, 0x4b, 0xa2, - 0x65, 0xcd, 0xf4, 0x7c, 0x6d, 0x13, 0xb7, 0xd5, 0x1e, 0x6d, 0x92, 0xcc, 0x13, 0xb2, 0x24, 0x5a, - 0x7c, 0xed, 0x87, 0x21, 0xd7, 0xb2, 0xba, 0xa4, 0xfa, 0x63, 0x7a, 0x64, 0xed, 0x88, 0xc9, 0x59, - 0x26, 0xf3, 0x55, 0x78, 0x5d, 0x1f, 0x9c, 0x83, 0xe5, 0xe4, 0x2c, 0x93, 0x31, 0x95, 0x33, 0x30, - 0xa3, 0xb6, 0xdb, 0x0e, 0x21, 0x17, 0x44, 0x6c, 0xa7, 0x92, 0xf7, 0xc5, 0x54, 0x71, 0xe1, 0x1a, - 0xa4, 0x85, 0x1f, 0xc8, 0xe2, 0x4d, 0x3c, 0xa1, 0xd8, 0x6c, 0xfb, 0x1d, 0x3f, 0x9b, 0x91, 0xd3, - 0xa6, 0x68, 0x7c, 0x18, 0x72, 0xba, 0xab, 0x04, 0xc7, 0xfa, 0xf1, 0xe5, 0xf8, 0xd9, 0xb4, 0x9c, - 0xd5, 0x5d, 0xff, 0x48, 0xb4, 0xf8, 0x85, 0x38, 0xe4, 0xa3, 0x8f, 0x25, 0x50, 0x0d, 0xd2, 0x86, - 0xa5, 0xa9, 0x34, 0xb4, 0xd8, 0x33, 0xb1, 0xb3, 0x23, 0x9e, 0x64, 0xac, 0xac, 0x73, 0x7d, 0xd9, - 0x47, 0x2e, 0xfc, 0xcb, 0x18, 0xa4, 0x85, 0x18, 0x9d, 0x84, 0xa4, 0xad, 0x7a, 0xfb, 0x94, 0x6e, - 0xb2, 0x12, 0x97, 0x62, 0x32, 0xbd, 0x26, 0x72, 0xd7, 0x56, 0x4d, 0x1a, 0x02, 0x5c, 0x4e, 0xae, - 0xc9, 0xb8, 0x1a, 0x58, 0x6d, 0xd1, 0x6d, 0x90, 0xd5, 0xe9, 0x60, 0xd3, 0x73, 0xc5, 0xb8, 0x72, - 0x79, 0x95, 0x8b, 0xd1, 0x53, 0x30, 0xeb, 0x39, 0xaa, 0x6e, 0x44, 0x74, 0x93, 0x54, 0x57, 0x12, - 0x0d, 0xbe, 0x72, 0x09, 0x4e, 0x0b, 0xde, 0x16, 0xf6, 0x54, 0x6d, 0x1f, 0xb7, 0x02, 0x50, 0x8a, - 0x1e, 0x77, 0x9c, 0xe2, 0x0a, 0x35, 0xde, 0x2e, 0xb0, 0xc5, 0xdf, 0x88, 0xc1, 0xac, 0xd8, 0xb8, - 0xb5, 0x7c, 0x67, 0x6d, 0x00, 0xa8, 0xa6, 0x69, 0x79, 0x61, 0x77, 0xf5, 0x87, 0x72, 0x1f, 0x6e, - 0xa5, 0xec, 0x83, 0xe4, 0x10, 0xc1, 0x42, 0x07, 0x20, 0x68, 0x19, 0xea, 0xb6, 0x25, 0xc8, 0xf2, - 0x67, 0x4e, 0xf4, 0xc1, 0x25, 0xdb, 0xea, 0x03, 0x13, 0x91, 0x1d, 0x1e, 0x9a, 0x87, 0xc9, 0x5d, - 0xdc, 0xd6, 0x4d, 0x7e, 0x92, 0xcc, 0x2e, 0xc4, 0x81, 0x4c, 0xd2, 0x3f, 0x90, 0xa9, 0xfc, 0x09, - 0x98, 0xd3, 0xac, 0x4e, 0xaf, 0xb9, 0x15, 0xa9, 0xe7, 0xb8, 0xc1, 0x7d, 0x39, 0xf6, 0xc6, 0x33, - 0x5c, 0xa9, 0x6d, 0x19, 0xaa, 0xd9, 0x5e, 0xb1, 0x9c, 0x76, 0xf0, 0xe0, 0x95, 0x54, 0x3c, 0x6e, - 0xe8, 0xf1, 0xab, 0xbd, 0xfb, 0xbf, 0x62, 0xb1, 0x5f, 0x88, 0x27, 0x56, 0x1b, 0x95, 0x2f, 0xc6, - 0x17, 0x56, 0x19, 0xb0, 0x21, 0x9c, 0x21, 0xe3, 0x3d, 0x03, 0x6b, 0xa4, 0x83, 0xf0, 0x9d, 0xa7, - 0x60, 0xbe, 0x6d, 0xb5, 0x2d, 0xca, 0x74, 0x8e, 0xfc, 0xe2, 0x4f, 0x6e, 0x33, 0xbe, 0x74, 0x61, - 0xe4, 0x63, 0xde, 0xd2, 0x26, 0xcc, 0x71, 0x65, 0x85, 0x3e, 0x3a, 0x62, 0x1b, 0x1b, 0x74, 0xe4, - 0xa9, 0x5a, 0xe1, 0x97, 0xbf, 0x4d, 0x97, 0x6f, 0x79, 0x96, 0x43, 0x49, 0x1b, 0xdb, 0xfb, 0x94, - 0x64, 0x38, 0x11, 0xe1, 0x63, 0x93, 0x14, 0x3b, 0x23, 0x18, 0xff, 0x19, 0x67, 0x9c, 0x0b, 0x31, - 0x36, 0x39, 0xb4, 0x54, 0x85, 0xe9, 0xe3, 0x70, 0xfd, 0x73, 0xce, 0x95, 0xc3, 0x61, 0x92, 0x55, - 0x98, 0xa1, 0x24, 0x5a, 0xd7, 0xf5, 0xac, 0x0e, 0xcd, 0x80, 0x47, 0xd3, 0xfc, 0x8b, 0x6f, 0xb3, - 0x59, 0x93, 0x27, 0xb0, 0xaa, 0x8f, 0x2a, 0x95, 0x80, 0x3e, 0x2d, 0x6b, 0x61, 0xcd, 0x18, 0xc1, - 0xf0, 0x75, 0x6e, 0x88, 0xaf, 0x5f, 0xba, 0x01, 0xf3, 0xe4, 0x37, 0x4d, 0x50, 0x61, 0x4b, 0x46, - 0x1f, 0xc1, 0x15, 0x7e, 0xe3, 0x63, 0x6c, 0x62, 0xce, 0xf9, 0x04, 0x21, 0x9b, 0x42, 0xa3, 0xd8, - 0xc6, 0x9e, 0x87, 0x1d, 0x57, 0x51, 0x8d, 0x41, 0xe6, 0x85, 0xce, 0x30, 0x0a, 0x3f, 0xf7, 0xdd, - 0xe8, 0x28, 0xae, 0x32, 0x64, 0xd9, 0x30, 0x4a, 0x3b, 0x70, 0x6a, 0x40, 0x54, 0x8c, 0xc1, 0xf9, - 0x69, 0xce, 0x39, 0xdf, 0x17, 0x19, 0x84, 0xb6, 0x01, 0x42, 0xee, 0x8f, 0xe5, 0x18, 0x9c, 0x3f, - 0xcf, 0x39, 0x11, 0xc7, 0x8a, 0x21, 0x25, 0x8c, 0xd7, 0x60, 0xf6, 0x26, 0x76, 0x76, 0x2d, 0x97, - 0x9f, 0x1b, 0x8d, 0x41, 0xf7, 0x19, 0x4e, 0x37, 0xc3, 0x81, 0xf4, 0x20, 0x89, 0x70, 0x5d, 0x86, - 0xf4, 0x9e, 0xaa, 0xe1, 0x31, 0x28, 0xee, 0x72, 0x8a, 0x29, 0xa2, 0x4f, 0xa0, 0x65, 0xc8, 0xb5, - 0x2d, 0xbe, 0x46, 0x8d, 0x86, 0x7f, 0x96, 0xc3, 0xb3, 0x02, 0xc3, 0x29, 0x6c, 0xcb, 0xee, 0x1a, - 0x64, 0x01, 0x1b, 0x4d, 0xf1, 0x97, 0x05, 0x85, 0xc0, 0x70, 0x8a, 0x63, 0xb8, 0xf5, 0x1d, 0x41, - 0xe1, 0x86, 0xfc, 0xf9, 0x12, 0x64, 0x2d, 0xd3, 0x38, 0xb4, 0xcc, 0x71, 0x8c, 0xf8, 0x1c, 0x67, - 0x00, 0x0e, 0x21, 0x04, 0x57, 0x20, 0x33, 0xee, 0x40, 0xfc, 0x95, 0xef, 0x8a, 0xe9, 0x21, 0x46, - 0x60, 0x15, 0x66, 0x44, 0x82, 0xd2, 0x2d, 0x73, 0x0c, 0x8a, 0xbf, 0xca, 0x29, 0xf2, 0x21, 0x18, - 0xef, 0x86, 0x87, 0x5d, 0xaf, 0x8d, 0xc7, 0x21, 0xf9, 0x82, 0xe8, 0x06, 0x87, 0x70, 0x57, 0xee, - 0x62, 0x53, 0xdb, 0x1f, 0x8f, 0xe1, 0x97, 0x84, 0x2b, 0x05, 0x86, 0x50, 0x54, 0x61, 0xba, 0xa3, - 0x3a, 0xee, 0xbe, 0x6a, 0x8c, 0x35, 0x1c, 0x7f, 0x8d, 0x73, 0xe4, 0x7c, 0x10, 0xf7, 0x48, 0xd7, - 0x3c, 0x0e, 0xcd, 0x17, 0x85, 0x47, 0x42, 0x30, 0x3e, 0xf5, 0x5c, 0x8f, 0x1e, 0xb2, 0x1d, 0x87, - 0xed, 0xaf, 0x8b, 0xa9, 0xc7, 0xb0, 0x1b, 0x61, 0xc6, 0x2b, 0x90, 0x71, 0xf5, 0xb7, 0xc6, 0xa2, - 0xf9, 0x92, 0x18, 0x69, 0x0a, 0x20, 0xe0, 0xd7, 0xe1, 0xf4, 0xc0, 0x65, 0x62, 0x0c, 0xb2, 0xbf, - 0xc1, 0xc9, 0x4e, 0x0e, 0x58, 0x2a, 0x78, 0x4a, 0x38, 0x2e, 0xe5, 0xdf, 0x14, 0x29, 0x01, 0xf7, - 0x70, 0x35, 0xc8, 0xae, 0xc1, 0x55, 0xf7, 0x8e, 0xe7, 0xb5, 0xbf, 0x25, 0xbc, 0xc6, 0xb0, 0x11, - 0xaf, 0x6d, 0xc3, 0x49, 0xce, 0x78, 0xbc, 0x71, 0xfd, 0xdb, 0x22, 0xb1, 0x32, 0xf4, 0x4e, 0x74, - 0x74, 0x7f, 0x14, 0x16, 0x7c, 0x77, 0x8a, 0xf2, 0xd4, 0x55, 0x3a, 0xaa, 0x3d, 0x06, 0xf3, 0x2f, - 0x73, 0x66, 0x91, 0xf1, 0xfd, 0xfa, 0xd6, 0xdd, 0x50, 0x6d, 0x42, 0xfe, 0x1a, 0x14, 0x04, 0x79, - 0xd7, 0x74, 0xb0, 0x66, 0xb5, 0x4d, 0xfd, 0x2d, 0xdc, 0x1a, 0x83, 0xfa, 0x57, 0x7a, 0x86, 0x6a, - 0x27, 0x04, 0x27, 0xcc, 0x6b, 0x20, 0xf9, 0xb5, 0x8a, 0xa2, 0x77, 0x6c, 0xcb, 0xf1, 0x46, 0x30, - 0x7e, 0x59, 0x8c, 0x94, 0x8f, 0x5b, 0xa3, 0xb0, 0x52, 0x1d, 0xd8, 0x93, 0xe7, 0x71, 0x43, 0xf2, - 0x2b, 0x9c, 0x68, 0x3a, 0x40, 0xf1, 0xc4, 0xa1, 0x59, 0x1d, 0x5b, 0x75, 0xc6, 0xc9, 0x7f, 0x7f, - 0x47, 0x24, 0x0e, 0x0e, 0xe1, 0x89, 0x83, 0x54, 0x74, 0x64, 0xb5, 0x1f, 0x83, 0xe1, 0xab, 0x22, - 0x71, 0x08, 0x0c, 0xa7, 0x10, 0x05, 0xc3, 0x18, 0x14, 0x7f, 0x57, 0x50, 0x08, 0x0c, 0xa1, 0x78, - 0x25, 0x58, 0x68, 0x1d, 0xdc, 0xd6, 0x5d, 0xcf, 0x61, 0x45, 0xf1, 0xd1, 0x54, 0x7f, 0xef, 0xbb, - 0xd1, 0x22, 0x4c, 0x0e, 0x41, 0x49, 0x26, 0xe2, 0xc7, 0xae, 0x74, 0xcf, 0x34, 0xda, 0xb0, 0x5f, - 0x15, 0x99, 0x28, 0x04, 0x23, 0xb6, 0x85, 0x2a, 0x44, 0xe2, 0x76, 0x8d, 0xec, 0x14, 0xc6, 0xa0, - 0xfb, 0xfb, 0x3d, 0xc6, 0x35, 0x05, 0x96, 0x70, 0x86, 0xea, 0x9f, 0xae, 0x79, 0x80, 0x0f, 0xc7, - 0x8a, 0xce, 0x5f, 0xeb, 0xa9, 0x7f, 0x76, 0x18, 0x92, 0xe5, 0x90, 0x99, 0x9e, 0x7a, 0x0a, 0x8d, - 0x7a, 0xcf, 0xa8, 0xf0, 0x93, 0x1f, 0xf0, 0xfe, 0x46, 0xcb, 0xa9, 0xd2, 0x3a, 0x09, 0xf2, 0x68, - 0xd1, 0x33, 0x9a, 0xec, 0x63, 0x1f, 0xf8, 0x71, 0x1e, 0xa9, 0x79, 0x4a, 0x57, 0x61, 0x3a, 0x52, - 0xf0, 0x8c, 0xa6, 0xfa, 0x93, 0x9c, 0x2a, 0x17, 0xae, 0x77, 0x4a, 0x17, 0x20, 0x49, 0x8a, 0x97, - 0xd1, 0xf0, 0x3f, 0xc5, 0xe1, 0x54, 0xbd, 0xf4, 0x11, 0x48, 0x8b, 0xa2, 0x65, 0x34, 0xf4, 0x4f, - 0x73, 0xa8, 0x0f, 0x21, 0x70, 0x51, 0xb0, 0x8c, 0x86, 0xff, 0x19, 0x01, 0x17, 0x10, 0x02, 0x1f, - 0xdf, 0x85, 0x5f, 0xfb, 0xb3, 0x49, 0xbe, 0xe8, 0x08, 0xdf, 0x5d, 0x81, 0x29, 0x5e, 0xa9, 0x8c, - 0x46, 0x7f, 0x82, 0xdf, 0x5c, 0x20, 0x4a, 0x97, 0x60, 0x72, 0x4c, 0x87, 0xff, 0x39, 0x0e, 0x65, - 0xfa, 0xa5, 0x2a, 0x64, 0x43, 0xd5, 0xc9, 0x68, 0xf8, 0x4f, 0x71, 0x78, 0x18, 0x45, 0x4c, 0xe7, - 0xd5, 0xc9, 0x68, 0x82, 0x3f, 0x2f, 0x4c, 0xe7, 0x08, 0xe2, 0x36, 0x51, 0x98, 0x8c, 0x46, 0x7f, - 0x52, 0x78, 0x5d, 0x40, 0x4a, 0x2f, 0x41, 0xc6, 0x5f, 0x6c, 0x46, 0xe3, 0x7f, 0x9a, 0xe3, 0x03, - 0x0c, 0xf1, 0x40, 0x68, 0xb1, 0x1b, 0x4d, 0xf1, 0x17, 0x84, 0x07, 0x42, 0x28, 0x32, 0x8d, 0x7a, - 0x0b, 0x98, 0xd1, 0x4c, 0x3f, 0x23, 0xa6, 0x51, 0x4f, 0xfd, 0x42, 0x46, 0x93, 0xe6, 0xfc, 0xd1, - 0x14, 0x7f, 0x51, 0x8c, 0x26, 0xd5, 0x27, 0x66, 0xf4, 0x56, 0x04, 0xa3, 0x39, 0x7e, 0x56, 0x98, - 0xd1, 0x53, 0x10, 0x94, 0x1a, 0x80, 0xfa, 0xab, 0x81, 0xd1, 0x7c, 0x9f, 0xe2, 0x7c, 0xb3, 0x7d, - 0xc5, 0x40, 0xe9, 0x55, 0x38, 0x39, 0xb8, 0x12, 0x18, 0xcd, 0xfa, 0x73, 0x1f, 0xf4, 0xec, 0xdd, - 0xc2, 0x85, 0x40, 0x69, 0x3b, 0x58, 0x52, 0xc2, 0x55, 0xc0, 0x68, 0xda, 0x4f, 0x7f, 0x10, 0x4d, - 0xdc, 0xe1, 0x22, 0xa0, 0x54, 0x06, 0x08, 0x16, 0xe0, 0xd1, 0x5c, 0x9f, 0xe1, 0x5c, 0x21, 0x10, - 0x99, 0x1a, 0x7c, 0xfd, 0x1d, 0x8d, 0xbf, 0x2b, 0xa6, 0x06, 0x47, 0x90, 0xa9, 0x21, 0x96, 0xde, - 0xd1, 0xe8, 0xcf, 0x8a, 0xa9, 0x21, 0x20, 0x24, 0xb2, 0x43, 0xab, 0xdb, 0x68, 0x86, 0xcf, 0x89, - 0xc8, 0x0e, 0xa1, 0x4a, 0x9b, 0x30, 0xdb, 0xb7, 0x20, 0x8e, 0xa6, 0xfa, 0x05, 0x4e, 0x25, 0xf5, - 0xae, 0x87, 0xe1, 0xc5, 0x8b, 0x2f, 0x86, 0xa3, 0xd9, 0x3e, 0xdf, 0xb3, 0x78, 0xf1, 0xb5, 0xb0, - 0x74, 0x05, 0xd2, 0x66, 0xd7, 0x30, 0xc8, 0xe4, 0x41, 0x47, 0xbf, 0x1b, 0x58, 0xf8, 0xcf, 0xdf, - 0xe7, 0xde, 0x11, 0x80, 0xd2, 0x05, 0x98, 0xc4, 0x9d, 0x5d, 0xdc, 0x1a, 0x85, 0xfc, 0xce, 0xf7, - 0x45, 0xc2, 0x24, 0xda, 0xa5, 0x97, 0x00, 0xd8, 0xd1, 0x08, 0x7d, 0x18, 0x38, 0x02, 0xfb, 0x5f, - 0xbe, 0xcf, 0x5f, 0xc6, 0x09, 0x20, 0x01, 0x01, 0x7b, 0xb5, 0xe7, 0x68, 0x82, 0xef, 0x46, 0x09, - 0xe8, 0x88, 0x5c, 0x86, 0xa9, 0x37, 0x5d, 0xcb, 0xf4, 0xd4, 0xf6, 0x28, 0xf4, 0x7f, 0xe5, 0x68, - 0xa1, 0x4f, 0x1c, 0xd6, 0xb1, 0x1c, 0xec, 0xa9, 0x6d, 0x77, 0x14, 0xf6, 0xbf, 0x71, 0xac, 0x0f, - 0x20, 0x60, 0x4d, 0x75, 0xbd, 0x71, 0xfa, 0xfd, 0x7b, 0x02, 0x2c, 0x00, 0xc4, 0x68, 0xf2, 0xfb, - 0x00, 0x1f, 0x8e, 0xc2, 0xfe, 0xbe, 0x30, 0x9a, 0xeb, 0x97, 0x3e, 0x02, 0x19, 0xf2, 0x93, 0xbd, - 0x61, 0x37, 0x02, 0xfc, 0xdf, 0x39, 0x38, 0x40, 0x90, 0x3b, 0xbb, 0x5e, 0xcb, 0xd3, 0x47, 0x3b, - 0xfb, 0x7b, 0x7c, 0xa4, 0x85, 0x7e, 0xa9, 0x0c, 0x59, 0xd7, 0x6b, 0xb5, 0xba, 0xbc, 0x3e, 0x1d, - 0x01, 0xff, 0x1f, 0xdf, 0xf7, 0x8f, 0x2c, 0x7c, 0x0c, 0x19, 0xed, 0x5b, 0x07, 0x9e, 0x6d, 0xd1, - 0x07, 0x1e, 0xa3, 0x18, 0x3e, 0xe0, 0x0c, 0x21, 0x48, 0xa9, 0x0a, 0x39, 0xd2, 0x17, 0x07, 0xdb, - 0x98, 0x3e, 0x9d, 0x1a, 0x41, 0xf1, 0x3f, 0xb9, 0x03, 0x22, 0xa0, 0xca, 0x8f, 0x7d, 0xfd, 0xbd, - 0xc5, 0xd8, 0x37, 0xdf, 0x5b, 0x8c, 0xfd, 0xee, 0x7b, 0x8b, 0xb1, 0x4f, 0x7e, 0x6b, 0x71, 0xe2, - 0x9b, 0xdf, 0x5a, 0x9c, 0xf8, 0xed, 0x6f, 0x2d, 0x4e, 0x0c, 0x3e, 0x25, 0x86, 0x55, 0x6b, 0xd5, - 0x62, 0xe7, 0xc3, 0x6f, 0x14, 0xdb, 0xba, 0xb7, 0xdf, 0xdd, 0x5d, 0xd1, 0xac, 0x0e, 0x3d, 0xc6, - 0x0d, 0x4e, 0x6b, 0xfd, 0x4d, 0x0e, 0xfc, 0x20, 0x46, 0x36, 0xcc, 0xd1, 0xb3, 0x5c, 0xd5, 0x3c, - 0x1c, 0xf6, 0xad, 0xce, 0x45, 0x48, 0x94, 0xcd, 0x43, 0x74, 0x9a, 0x65, 0x37, 0xa5, 0xeb, 0x18, - 0xfc, 0x1d, 0xaf, 0x29, 0x72, 0xbd, 0xe3, 0x18, 0x68, 0x3e, 0x78, 0x11, 0x33, 0x76, 0x36, 0xc7, - 0xdf, 0xae, 0xac, 0xfc, 0x54, 0xec, 0x78, 0xdd, 0x48, 0x97, 0xcd, 0x43, 0xda, 0x8b, 0x46, 0xec, - 0x8d, 0xa7, 0x47, 0x1e, 0x72, 0x1f, 0x98, 0xd6, 0x2d, 0x93, 0x98, 0x6d, 0xef, 0x8a, 0x03, 0xee, - 0xc5, 0xde, 0x03, 0xee, 0x57, 0xb1, 0x61, 0x5c, 0x27, 0x7a, 0xdb, 0x04, 0xb2, 0x9b, 0x62, 0xaf, - 0x13, 0xc3, 0xcf, 0xc4, 0x61, 0xb1, 0xef, 0x2c, 0x9b, 0x47, 0xc0, 0x30, 0x27, 0x94, 0x20, 0x5d, - 0x13, 0x81, 0x55, 0x80, 0x29, 0x17, 0x6b, 0x96, 0xd9, 0x72, 0xa9, 0x23, 0x12, 0xb2, 0xb8, 0x24, - 0x8e, 0x30, 0x55, 0xd3, 0x72, 0xf9, 0x5b, 0x92, 0xec, 0xa2, 0xf2, 0xf3, 0xc7, 0x74, 0xc4, 0xb4, - 0xb8, 0x93, 0xf0, 0xc6, 0x73, 0x63, 0x7a, 0x43, 0x74, 0x22, 0x72, 0xec, 0x3f, 0xae, 0x57, 0x7e, - 0x36, 0x0e, 0x4b, 0xbd, 0x5e, 0x21, 0xd3, 0xca, 0xf5, 0xd4, 0x8e, 0x3d, 0xcc, 0x2d, 0x57, 0x20, - 0xb3, 0x2d, 0x74, 0x8e, 0xed, 0x97, 0xbb, 0xc7, 0xf4, 0x4b, 0xde, 0xbf, 0x95, 0x70, 0xcc, 0xf9, - 0x31, 0x1d, 0xe3, 0xf7, 0xe3, 0x9e, 0x3c, 0xf3, 0xbf, 0x53, 0x70, 0x5a, 0xb3, 0xdc, 0x8e, 0xe5, - 0x2a, 0xec, 0xf9, 0x08, 0xbb, 0xe0, 0x3e, 0xc9, 0x85, 0x9b, 0x46, 0x3f, 0x24, 0x29, 0x5e, 0x87, - 0xb9, 0x35, 0x92, 0x2a, 0xc8, 0x16, 0x28, 0x78, 0xbc, 0x33, 0xf0, 0x45, 0xd2, 0xe5, 0x48, 0xb5, - 0xcf, 0x1f, 0x2f, 0x85, 0x45, 0xc5, 0x9f, 0x8c, 0x81, 0xd4, 0xd4, 0x54, 0x43, 0x75, 0xfe, 0x5f, - 0xa9, 0xd0, 0x25, 0x00, 0xfa, 0x01, 0x52, 0xf0, 0xc5, 0x50, 0xfe, 0x7c, 0x61, 0x25, 0xdc, 0xb9, - 0x15, 0x76, 0x27, 0xfa, 0x39, 0x42, 0x86, 0xea, 0x92, 0x9f, 0x4f, 0xbe, 0x06, 0x10, 0x34, 0xa0, - 0x07, 0xe0, 0x54, 0xb3, 0x5a, 0x5e, 0x2f, 0xcb, 0x0a, 0x7b, 0xb3, 0x7d, 0xb3, 0xd9, 0xa8, 0x57, - 0xd7, 0xae, 0xae, 0xd5, 0x6b, 0xd2, 0x04, 0x3a, 0x09, 0x28, 0xdc, 0xe8, 0xbf, 0x94, 0x72, 0x02, - 0x66, 0xc3, 0x72, 0xf6, 0x7a, 0x7c, 0x9c, 0x94, 0x89, 0x7a, 0xc7, 0x36, 0x30, 0x7d, 0xee, 0xa7, - 0xe8, 0xc2, 0x6b, 0xa3, 0x2b, 0x90, 0x5f, 0xff, 0x57, 0xec, 0x95, 0xe9, 0xb9, 0x00, 0xee, 0xfb, - 0xbc, 0xb4, 0x0e, 0xb3, 0xaa, 0xa6, 0x61, 0x3b, 0x42, 0x39, 0x22, 0x4f, 0x13, 0x42, 0xfa, 0x24, - 0x93, 0x23, 0x03, 0xb6, 0x4b, 0x90, 0x72, 0x69, 0xef, 0x47, 0x51, 0x7c, 0x83, 0x53, 0x70, 0xf5, - 0x92, 0x09, 0xb3, 0xa4, 0xec, 0x53, 0x1d, 0x1c, 0x32, 0xe3, 0xe8, 0x43, 0x86, 0x7f, 0xf0, 0xe5, - 0x67, 0xe9, 0x73, 0xcd, 0x87, 0xa3, 0xc3, 0x32, 0x20, 0x9c, 0x64, 0x89, 0x73, 0x07, 0x86, 0x62, - 0xc8, 0x8b, 0xfb, 0x71, 0x83, 0x8f, 0xbe, 0xd9, 0x3f, 0xe4, 0x37, 0x5b, 0x1c, 0x14, 0x03, 0xa1, - 0x3b, 0x4d, 0x73, 0x56, 0xd6, 0x50, 0xa9, 0x0f, 0x9b, 0xd3, 0x6f, 0x3c, 0x15, 0x5a, 0x9a, 0x18, - 0x25, 0xff, 0xf3, 0x0c, 0x65, 0xbe, 0x12, 0xbe, 0x8d, 0x3f, 0xf7, 0x7e, 0x2b, 0x01, 0x8b, 0x5c, - 0x79, 0x57, 0x75, 0xf1, 0xb9, 0x9b, 0xcf, 0xed, 0x62, 0x4f, 0x7d, 0xee, 0x9c, 0x66, 0xe9, 0x22, - 0x57, 0xcf, 0xf1, 0xe9, 0x48, 0xda, 0x57, 0x78, 0xfb, 0xc2, 0xc0, 0xa7, 0x99, 0x0b, 0xc3, 0xa7, - 0x71, 0x71, 0x07, 0x92, 0x55, 0x4b, 0x37, 0x49, 0xaa, 0x6a, 0x61, 0xd3, 0xea, 0xf0, 0xd9, 0xc3, - 0x2e, 0xd0, 0x73, 0x90, 0x52, 0x3b, 0x56, 0xd7, 0xf4, 0xd8, 0xcc, 0xa9, 0x9c, 0xfe, 0xfa, 0xbb, - 0x4b, 0x13, 0xff, 0xfa, 0xdd, 0xa5, 0xc4, 0x9a, 0xe9, 0xfd, 0xe6, 0x57, 0x9e, 0x01, 0x4e, 0xb5, - 0x66, 0x7a, 0x32, 0x57, 0x2c, 0x25, 0xdf, 0x7f, 0x67, 0x29, 0x56, 0x7c, 0x0d, 0xa6, 0x6a, 0x58, - 0xbb, 0x17, 0xe6, 0x1a, 0xd6, 0x42, 0xcc, 0x35, 0xac, 0xf5, 0x30, 0x5f, 0x82, 0xf4, 0x9a, 0xe9, - 0xb1, 0xb7, 0xd0, 0x9f, 0x82, 0x84, 0x6e, 0xb2, 0x17, 0x1b, 0x8f, 0xb4, 0x8d, 0x68, 0x11, 0x60, - 0x0d, 0x6b, 0x3e, 0xb0, 0x85, 0xb5, 0x5e, 0x60, 0xff, 0xad, 0x89, 0x56, 0xa5, 0xf6, 0xdb, 0xff, - 0x61, 0x71, 0xe2, 0xed, 0xf7, 0x16, 0x27, 0x86, 0x0e, 0x71, 0x71, 0xe8, 0x10, 0xbb, 0xad, 0x03, - 0x96, 0x91, 0xfd, 0x91, 0xfd, 0x62, 0x12, 0x1e, 0xa2, 0x1f, 0x27, 0x39, 0x1d, 0xdd, 0xf4, 0xce, - 0x69, 0xce, 0xa1, 0xed, 0xd1, 0x72, 0xc5, 0xda, 0xe3, 0x03, 0x3b, 0x1b, 0x34, 0xaf, 0xb0, 0xe6, - 0xc1, 0xc3, 0x5a, 0xdc, 0x83, 0xc9, 0x06, 0xc1, 0x11, 0x17, 0x7b, 0x96, 0xa7, 0x1a, 0x7c, 0xfd, - 0x61, 0x17, 0x44, 0xca, 0x3e, 0x68, 0x8a, 0x33, 0xa9, 0x2e, 0xbe, 0x65, 0x32, 0xb0, 0xba, 0xc7, - 0xde, 0x0b, 0x4f, 0xd0, 0xc2, 0x25, 0x4d, 0x04, 0xf4, 0x15, 0xf0, 0x79, 0x98, 0x54, 0xbb, 0xec, - 0x05, 0x86, 0x04, 0xa9, 0x68, 0xe8, 0x45, 0xf1, 0x3a, 0x4c, 0xf1, 0xc7, 0xa8, 0x48, 0x82, 0xc4, - 0x01, 0x3e, 0xa4, 0xf7, 0xc9, 0xc9, 0xe4, 0x27, 0x5a, 0x81, 0x49, 0x6a, 0x3c, 0xff, 0xe0, 0xa5, - 0xb0, 0xd2, 0x67, 0xfd, 0x0a, 0x35, 0x52, 0x66, 0x6a, 0xc5, 0x6b, 0x90, 0xae, 0x59, 0x1d, 0xdd, - 0xb4, 0xa2, 0x6c, 0x19, 0xc6, 0x46, 0x6d, 0xb6, 0xbb, 0x3c, 0x2a, 0x64, 0x76, 0x81, 0x4e, 0x42, - 0x8a, 0x7d, 0x27, 0xc0, 0x5f, 0xc2, 0xe0, 0x57, 0xc5, 0x2a, 0x4c, 0x51, 0xee, 0x2d, 0x9b, 0x24, - 0x7f, 0xff, 0x95, 0xcc, 0x0c, 0xff, 0x6a, 0x8c, 0xd3, 0xc7, 0x03, 0x63, 0x11, 0x24, 0x5b, 0xaa, - 0xa7, 0xf2, 0x7e, 0xd3, 0xdf, 0xc5, 0x8f, 0x42, 0x9a, 0x93, 0xb8, 0xe8, 0x3c, 0x24, 0x2c, 0xdb, - 0xe5, 0xaf, 0x51, 0x2c, 0x0c, 0xeb, 0xca, 0x96, 0x5d, 0x49, 0x92, 0x98, 0x91, 0x89, 0x72, 0x45, - 0x1e, 0x1a, 0x16, 0x2f, 0x86, 0xc2, 0x22, 0x34, 0xe4, 0xa1, 0x9f, 0x6c, 0x48, 0xfb, 0xc2, 0xc1, - 0x0f, 0x96, 0xcf, 0xc5, 0x61, 0x31, 0xd4, 0x7a, 0x13, 0x3b, 0xae, 0x6e, 0x99, 0x2c, 0xa2, 0x78, - 0xb4, 0xa0, 0x90, 0x91, 0xbc, 0x7d, 0x48, 0xb8, 0x7c, 0x04, 0x12, 0x65, 0xdb, 0x46, 0x0b, 0x90, - 0xa6, 0xd7, 0x9a, 0xc5, 0xe2, 0x25, 0x29, 0xfb, 0xd7, 0xa4, 0xcd, 0xb5, 0xf6, 0xbc, 0x5b, 0xaa, - 0xe3, 0x7f, 0x4a, 0x27, 0xae, 0x8b, 0x97, 0x21, 0x53, 0xb5, 0x4c, 0x17, 0x9b, 0x6e, 0x97, 0x56, - 0x36, 0xbb, 0x86, 0xa5, 0x1d, 0x70, 0x06, 0x76, 0x41, 0x1c, 0xae, 0xda, 0x36, 0x45, 0x26, 0x65, - 0xf2, 0x93, 0xcd, 0xd9, 0x4a, 0x73, 0xa8, 0x8b, 0x2e, 0x1f, 0xdf, 0x45, 0xbc, 0x93, 0xbe, 0x8f, - 0x7e, 0x10, 0x83, 0x07, 0xfb, 0x27, 0xd4, 0x01, 0x3e, 0x74, 0x8f, 0x3b, 0x9f, 0x5e, 0x83, 0x4c, - 0x83, 0x7e, 0xcf, 0x7e, 0x1d, 0x1f, 0xa2, 0x05, 0x98, 0xc2, 0xad, 0xf3, 0x17, 0x2e, 0x3c, 0x77, - 0x99, 0x45, 0xfb, 0xcb, 0x13, 0xb2, 0x10, 0xa0, 0x45, 0xc8, 0xb8, 0x58, 0xb3, 0xcf, 0x5f, 0xb8, - 0x78, 0xf0, 0x1c, 0x0b, 0xaf, 0x97, 0x27, 0xe4, 0x40, 0x54, 0x4a, 0x93, 0x5e, 0xbf, 0xff, 0xb9, - 0xa5, 0x58, 0x65, 0x12, 0x12, 0x6e, 0xb7, 0xf3, 0xa1, 0xc6, 0xc8, 0xa7, 0x27, 0x61, 0x39, 0x8c, - 0xa4, 0xf5, 0xdf, 0x4d, 0xd5, 0xd0, 0x5b, 0x6a, 0xf0, 0x9f, 0x08, 0xa4, 0x90, 0x0f, 0xa8, 0xc6, - 0x90, 0x95, 0xe2, 0x48, 0x4f, 0x16, 0x7f, 0x25, 0x06, 0xb9, 0x1b, 0x82, 0xb9, 0x89, 0x3d, 0x74, - 0x05, 0xc0, 0xbf, 0x93, 0x98, 0x36, 0x0f, 0xac, 0xf4, 0xde, 0x6b, 0xc5, 0xc7, 0xc8, 0x21, 0x75, - 0x74, 0x89, 0x06, 0xa2, 0x6d, 0xb9, 0xfc, 0xf3, 0xaa, 0x11, 0x50, 0x5f, 0x19, 0x3d, 0x0d, 0x88, - 0x66, 0x38, 0xe5, 0xa6, 0xe5, 0xe9, 0x66, 0x5b, 0xb1, 0xad, 0x5b, 0xfc, 0xa3, 0xd5, 0x84, 0x2c, - 0xd1, 0x96, 0x1b, 0xb4, 0xa1, 0x41, 0xe4, 0xc4, 0xe8, 0x8c, 0xcf, 0x42, 0x8a, 0x75, 0xb5, 0xd5, - 0x72, 0xb0, 0xeb, 0xf2, 0x24, 0x26, 0x2e, 0xd1, 0x15, 0x98, 0xb2, 0xbb, 0xbb, 0x8a, 0xc8, 0x18, - 0xd9, 0xf3, 0x0f, 0x0e, 0x9a, 0xff, 0x22, 0x3e, 0x78, 0x06, 0x48, 0xd9, 0xdd, 0x5d, 0x12, 0x2d, - 0x0f, 0x43, 0x6e, 0x80, 0x31, 0xd9, 0x9b, 0x81, 0x1d, 0xf4, 0xdf, 0x28, 0xf0, 0x1e, 0x28, 0xb6, - 0xa3, 0x5b, 0x8e, 0xee, 0x1d, 0xd2, 0x77, 0xa1, 0x12, 0xb2, 0x24, 0x1a, 0x1a, 0x5c, 0x5e, 0x3c, - 0x80, 0x99, 0x26, 0x2d, 0xe2, 0x02, 0xcb, 0x2f, 0x04, 0xf6, 0xc5, 0x46, 0xdb, 0x37, 0xd4, 0xb2, - 0x78, 0x9f, 0x65, 0x95, 0x57, 0x86, 0x46, 0xe7, 0xa5, 0xe3, 0x47, 0x67, 0x74, 0xb5, 0xfb, 0xbd, - 0xd3, 0x91, 0xc9, 0xc9, 0x82, 0x33, 0x9c, 0xbe, 0xc6, 0x0d, 0xcc, 0x51, 0x7b, 0xb4, 0x85, 0xa3, - 0x17, 0xd5, 0x85, 0x11, 0x69, 0x74, 0x61, 0xe4, 0x14, 0x2a, 0x5e, 0x86, 0xe9, 0x86, 0xea, 0x78, - 0x4d, 0xec, 0xbd, 0x8c, 0xd5, 0x16, 0x76, 0xa2, 0xab, 0xee, 0xb4, 0x58, 0x75, 0x11, 0x24, 0xe9, - 0xd2, 0xca, 0x56, 0x1d, 0xfa, 0xbb, 0xb8, 0x0f, 0x49, 0xfa, 0x3e, 0xa4, 0xbf, 0x22, 0x73, 0x04, - 0x5b, 0x91, 0x49, 0x2e, 0x3d, 0xf4, 0xb0, 0x2b, 0x8e, 0x11, 0xe8, 0x05, 0x7a, 0x41, 0xac, 0xab, - 0x89, 0xa3, 0xd7, 0x55, 0x1e, 0x88, 0x7c, 0x75, 0x35, 0x60, 0xaa, 0x42, 0x52, 0xf1, 0x5a, 0xcd, - 0x37, 0x24, 0x16, 0x18, 0x82, 0x36, 0x60, 0xc6, 0x56, 0x1d, 0x8f, 0x7e, 0x1a, 0xb2, 0x4f, 0x7b, - 0xc1, 0x63, 0x7d, 0xa9, 0x7f, 0xe6, 0x45, 0x3a, 0xcb, 0xef, 0x32, 0x6d, 0x87, 0x85, 0xc5, 0xff, - 0x98, 0x84, 0x14, 0x77, 0xc6, 0x47, 0x60, 0x8a, 0xbb, 0x95, 0x47, 0xe7, 0x43, 0x2b, 0xfd, 0x0b, - 0xd3, 0x8a, 0xbf, 0x80, 0x70, 0x3e, 0x81, 0x41, 0x8f, 0x43, 0x5a, 0xdb, 0x57, 0x75, 0x53, 0xd1, - 0x5b, 0xbc, 0x20, 0xcc, 0xbe, 0xf7, 0xee, 0xd2, 0x54, 0x95, 0xc8, 0xd6, 0x6a, 0xf2, 0x14, 0x6d, - 0x5c, 0x6b, 0x91, 0x4a, 0x60, 0x1f, 0xeb, 0xed, 0x7d, 0x8f, 0xcf, 0x30, 0x7e, 0x85, 0x5e, 0x84, - 0x24, 0x09, 0x08, 0xfe, 0xe1, 0xe0, 0x42, 0x5f, 0x85, 0xef, 0x6f, 0xa1, 0x2b, 0x69, 0x72, 0xe3, - 0x4f, 0xfe, 0xfb, 0xa5, 0x98, 0x4c, 0x11, 0xa8, 0x0a, 0xd3, 0x86, 0xea, 0x7a, 0x0a, 0x5d, 0xc1, - 0xc8, 0xed, 0x27, 0x29, 0xc5, 0xe9, 0x7e, 0x87, 0x70, 0xc7, 0x72, 0xd3, 0xb3, 0x04, 0xc5, 0x44, - 0x2d, 0x74, 0x16, 0x24, 0x4a, 0xa2, 0x59, 0x9d, 0x8e, 0xee, 0xb1, 0xda, 0x2a, 0x45, 0xfd, 0x9e, - 0x27, 0xf2, 0x2a, 0x15, 0xd3, 0x0a, 0xeb, 0x01, 0xc8, 0xd0, 0x4f, 0x95, 0xa8, 0x0a, 0x7b, 0x09, - 0x37, 0x4d, 0x04, 0xb4, 0xf1, 0x0c, 0xcc, 0x04, 0xf9, 0x91, 0xa9, 0xa4, 0x19, 0x4b, 0x20, 0xa6, - 0x8a, 0xcf, 0xc2, 0xbc, 0x89, 0x6f, 0xd3, 0xd7, 0x82, 0x23, 0xda, 0x19, 0xaa, 0x8d, 0x48, 0xdb, - 0x8d, 0x28, 0xe2, 0x31, 0xc8, 0x6b, 0xc2, 0xf9, 0x4c, 0x17, 0xa8, 0xee, 0xb4, 0x2f, 0xa5, 0x6a, - 0xa7, 0x21, 0xad, 0xda, 0x36, 0x53, 0xc8, 0xf2, 0xfc, 0x68, 0xdb, 0xb4, 0xe9, 0x49, 0x98, 0xa5, - 0x7d, 0x74, 0xb0, 0xdb, 0x35, 0x3c, 0x4e, 0x92, 0xa3, 0x3a, 0x33, 0xa4, 0x41, 0x66, 0x72, 0xaa, - 0xfb, 0x08, 0x4c, 0xe3, 0x9b, 0x7a, 0x0b, 0x9b, 0x1a, 0x66, 0x7a, 0xd3, 0x54, 0x2f, 0x27, 0x84, - 0x54, 0xe9, 0x09, 0xf0, 0xf3, 0x9e, 0x22, 0x72, 0x72, 0x9e, 0xf1, 0x09, 0x79, 0x99, 0x89, 0x8b, - 0x05, 0x48, 0xd6, 0x54, 0x4f, 0x25, 0x05, 0x86, 0x77, 0x9b, 0x2d, 0x34, 0x39, 0x99, 0xfc, 0x2c, - 0xbe, 0x1f, 0x87, 0xe4, 0x0d, 0xcb, 0xc3, 0xe8, 0xf9, 0x50, 0x01, 0x98, 0x1f, 0x14, 0xcf, 0x4d, - 0xbd, 0x6d, 0xe2, 0xd6, 0x86, 0xdb, 0x0e, 0xfd, 0x5f, 0x81, 0x20, 0x9c, 0xe2, 0x91, 0x70, 0x9a, - 0x87, 0x49, 0xc7, 0xea, 0x9a, 0x2d, 0xf1, 0xfe, 0x2a, 0xbd, 0x40, 0x75, 0x48, 0xfb, 0x51, 0x92, - 0x1c, 0x15, 0x25, 0x33, 0x24, 0x4a, 0x48, 0x0c, 0x73, 0x81, 0x3c, 0xb5, 0xcb, 0x83, 0xa5, 0x02, - 0x19, 0x3f, 0x79, 0xf1, 0x68, 0x1b, 0x2f, 0x60, 0x03, 0x18, 0x59, 0x4c, 0xfc, 0xb1, 0xf7, 0x9d, - 0xc7, 0x22, 0x4e, 0xf2, 0x1b, 0xb8, 0xf7, 0x22, 0x61, 0xc5, 0xff, 0xc7, 0xc1, 0x14, 0xed, 0x57, - 0x10, 0x56, 0xec, 0xff, 0x1c, 0x3c, 0x08, 0x19, 0x57, 0x6f, 0x9b, 0xaa, 0xd7, 0x75, 0x30, 0x8f, - 0xbc, 0x40, 0x50, 0xfc, 0x5a, 0x0c, 0x52, 0x2c, 0x92, 0x43, 0x7e, 0x8b, 0x0d, 0xf6, 0x5b, 0x7c, - 0x98, 0xdf, 0x12, 0xf7, 0xee, 0xb7, 0x32, 0x80, 0x6f, 0x8c, 0xcb, 0x3f, 0x3d, 0x1f, 0x50, 0x31, - 0x30, 0x13, 0x9b, 0x7a, 0x9b, 0x4f, 0xd4, 0x10, 0xa8, 0xf8, 0xef, 0x62, 0xa4, 0x88, 0xe5, 0xed, - 0xa8, 0x0c, 0xd3, 0xc2, 0x2e, 0x65, 0xcf, 0x50, 0xdb, 0x3c, 0x76, 0x1e, 0x1a, 0x6a, 0xdc, 0x55, - 0x43, 0x6d, 0xcb, 0x59, 0x6e, 0x0f, 0xb9, 0x18, 0x3c, 0x0e, 0xf1, 0x21, 0xe3, 0x10, 0x19, 0xf8, - 0xc4, 0xbd, 0x0d, 0x7c, 0x64, 0x88, 0x92, 0xbd, 0x43, 0xf4, 0xe5, 0x38, 0xdd, 0xcc, 0xd8, 0x96, - 0xab, 0x1a, 0x3f, 0x8c, 0x19, 0xf1, 0x00, 0x64, 0x6c, 0xcb, 0x50, 0x58, 0x0b, 0x7b, 0xaf, 0x3b, - 0x6d, 0x5b, 0x86, 0xdc, 0x37, 0xec, 0x93, 0xf7, 0x69, 0xba, 0xa4, 0xee, 0x83, 0xd7, 0xa6, 0x7a, - 0xbd, 0xe6, 0x40, 0x8e, 0xb9, 0x82, 0xaf, 0x65, 0xcf, 0x12, 0x1f, 0xd0, 0xc5, 0x31, 0xd6, 0xbf, - 0xf6, 0x32, 0xb3, 0x99, 0xa6, 0xcc, 0xf5, 0x08, 0x82, 0xa5, 0xfe, 0x41, 0xbb, 0xe0, 0x70, 0x58, - 0xca, 0x5c, 0xaf, 0xf8, 0x97, 0x62, 0x00, 0xeb, 0xc4, 0xb3, 0xb4, 0xbf, 0x64, 0x15, 0x72, 0xa9, - 0x09, 0x4a, 0xe4, 0xce, 0x8b, 0xc3, 0x06, 0x8d, 0xdf, 0x3f, 0xe7, 0x86, 0xed, 0xae, 0xc2, 0x74, - 0x10, 0x8c, 0x2e, 0x16, 0xc6, 0x2c, 0x1e, 0x51, 0x55, 0x37, 0xb1, 0x27, 0xe7, 0x6e, 0x86, 0xae, - 0x8a, 0xff, 0x24, 0x06, 0x19, 0x6a, 0xd3, 0x06, 0xf6, 0xd4, 0xc8, 0x18, 0xc6, 0xee, 0x7d, 0x0c, - 0x1f, 0x02, 0x60, 0x34, 0xae, 0xfe, 0x16, 0xe6, 0x91, 0x95, 0xa1, 0x92, 0xa6, 0xfe, 0x16, 0x46, - 0x17, 0x7d, 0x87, 0x27, 0x8e, 0x76, 0xb8, 0xa8, 0xba, 0xb9, 0xdb, 0x4f, 0xc1, 0x14, 0xfd, 0x57, - 0x4d, 0xb7, 0x5d, 0x5e, 0x48, 0xa7, 0xcc, 0x6e, 0x67, 0xfb, 0xb6, 0x5b, 0x7c, 0x13, 0xa6, 0xb6, - 0x6f, 0xb3, 0xb3, 0x91, 0x07, 0x20, 0xe3, 0x58, 0x16, 0x5f, 0x93, 0x59, 0x2d, 0x94, 0x26, 0x02, - 0xba, 0x04, 0x89, 0xf3, 0x80, 0x78, 0x70, 0x1e, 0x10, 0x1c, 0x68, 0x24, 0xc6, 0x3a, 0xd0, 0x78, - 0xf2, 0xb7, 0x62, 0x90, 0x0d, 0xe5, 0x07, 0xf4, 0x1c, 0x9c, 0xa8, 0xac, 0x6f, 0x55, 0xaf, 0x2b, - 0x6b, 0x35, 0xe5, 0xea, 0x7a, 0x79, 0x35, 0xf8, 0x72, 0x69, 0xe1, 0xe4, 0x9d, 0xbb, 0xcb, 0x28, - 0xa4, 0xbb, 0x63, 0xd2, 0x73, 0x7a, 0x74, 0x0e, 0xe6, 0xa3, 0x90, 0x72, 0xa5, 0x59, 0xdf, 0xdc, - 0x96, 0x62, 0x0b, 0x27, 0xee, 0xdc, 0x5d, 0x9e, 0x0d, 0x21, 0xca, 0xbb, 0x2e, 0x36, 0xbd, 0x7e, - 0x40, 0x75, 0x6b, 0x63, 0x63, 0x6d, 0x5b, 0x8a, 0xf7, 0x01, 0x78, 0xc2, 0x7e, 0x02, 0x66, 0xa3, - 0x80, 0xcd, 0xb5, 0x75, 0x29, 0xb1, 0x80, 0xee, 0xdc, 0x5d, 0xce, 0x87, 0xb4, 0x37, 0x75, 0x63, - 0x21, 0xfd, 0xf1, 0xcf, 0x2f, 0x4e, 0xfc, 0xd2, 0x2f, 0x2e, 0xc6, 0x48, 0xcf, 0xa6, 0x23, 0x39, - 0x02, 0x3d, 0x0d, 0xa7, 0x9a, 0x6b, 0xab, 0x9b, 0xf5, 0x9a, 0xb2, 0xd1, 0x5c, 0x15, 0x27, 0xdd, - 0xa2, 0x77, 0x33, 0x77, 0xee, 0x2e, 0x67, 0x79, 0x97, 0x86, 0x69, 0x37, 0xe4, 0xfa, 0x8d, 0xad, - 0xed, 0xba, 0x14, 0x63, 0xda, 0x0d, 0x07, 0xdf, 0xb4, 0x3c, 0xf6, 0xbf, 0xdc, 0x9e, 0x85, 0xd3, - 0x03, 0xb4, 0xfd, 0x8e, 0xcd, 0xde, 0xb9, 0xbb, 0x3c, 0xdd, 0x70, 0x30, 0x9b, 0x3f, 0x14, 0xb1, - 0x02, 0x85, 0x7e, 0xc4, 0x56, 0x63, 0xab, 0x59, 0x5e, 0x97, 0x96, 0x17, 0xa4, 0x3b, 0x77, 0x97, - 0x73, 0x22, 0x19, 0x12, 0xfd, 0xa0, 0x67, 0x1f, 0xe6, 0x8e, 0xe7, 0xfd, 0xa7, 0xe0, 0x51, 0x7e, - 0x06, 0xe8, 0x7a, 0xea, 0x81, 0x6e, 0xb6, 0xfd, 0xc3, 0x5b, 0x7e, 0xcd, 0x77, 0x3e, 0x27, 0xf9, - 0x39, 0xa3, 0x90, 0x8e, 0x38, 0xc2, 0x1d, 0xfa, 0xe4, 0x72, 0x61, 0xc4, 0x43, 0xbd, 0xd1, 0x5b, - 0xa7, 0xe1, 0xc7, 0xc3, 0x0b, 0x23, 0x0e, 0xa1, 0x17, 0x8e, 0xdc, 0xdc, 0x15, 0x3f, 0x11, 0x83, - 0xfc, 0xcb, 0xba, 0xeb, 0x59, 0x8e, 0xae, 0xa9, 0x06, 0xfd, 0x5e, 0xe9, 0xe2, 0xb8, 0xb9, 0xb5, - 0x67, 0xaa, 0xbf, 0x04, 0xa9, 0x9b, 0xaa, 0xc1, 0x92, 0x5a, 0xf8, 0x59, 0x40, 0xaf, 0xfb, 0x82, - 0xd4, 0x26, 0x08, 0x18, 0xac, 0xf8, 0xa5, 0x38, 0xcc, 0xd0, 0xc9, 0xe0, 0xb2, 0x7f, 0xc5, 0x45, - 0xf6, 0x58, 0x0d, 0x48, 0x3a, 0xaa, 0xc7, 0x0f, 0x0d, 0x2b, 0x3f, 0xc2, 0xcf, 0x81, 0x1f, 0x1f, - 0x7d, 0x9a, 0xbb, 0xd2, 0x7f, 0x54, 0x4c, 0x99, 0xd0, 0xab, 0x90, 0xee, 0xa8, 0xb7, 0x15, 0xca, - 0x1a, 0xbf, 0x0f, 0xac, 0x53, 0x1d, 0xf5, 0x36, 0xb1, 0x15, 0xb5, 0x60, 0x86, 0x10, 0x6b, 0xfb, - 0xaa, 0xd9, 0xc6, 0x8c, 0x3f, 0x71, 0x1f, 0xf8, 0xa7, 0x3b, 0xea, 0xed, 0x2a, 0xe5, 0x24, 0x77, - 0x29, 0xa5, 0x3f, 0xf5, 0xce, 0xd2, 0x04, 0x3d, 0x66, 0xff, 0xb5, 0x18, 0x40, 0xe0, 0x2e, 0xf4, - 0xff, 0x83, 0xa4, 0xf9, 0x57, 0xf4, 0xf6, 0x2e, 0x1f, 0xc0, 0x33, 0xc3, 0x06, 0xa2, 0xc7, 0xd9, - 0x6c, 0x61, 0xfe, 0xe6, 0xbb, 0x4b, 0x31, 0x79, 0x46, 0xeb, 0x19, 0x87, 0x3a, 0x64, 0xbb, 0x76, - 0x4b, 0xf5, 0xb0, 0x42, 0x37, 0x71, 0xf1, 0x63, 0x2c, 0xf2, 0xc0, 0x80, 0xa4, 0x29, 0x64, 0xfd, - 0x97, 0x62, 0x90, 0xad, 0x85, 0x1e, 0xf2, 0x15, 0x60, 0xaa, 0x63, 0x99, 0xfa, 0x01, 0x0f, 0xbb, - 0x8c, 0x2c, 0x2e, 0xd1, 0x02, 0xa4, 0xd9, 0x97, 0x9a, 0xde, 0xa1, 0x38, 0xf1, 0x14, 0xd7, 0x04, - 0x75, 0x0b, 0xef, 0xba, 0xba, 0xf0, 0xb5, 0x2c, 0x2e, 0xc9, 0xd6, 0xc5, 0xc5, 0x5a, 0xd7, 0xd1, - 0xbd, 0x43, 0x45, 0xb3, 0x4c, 0x4f, 0xd5, 0x3c, 0xfe, 0xcd, 0xdf, 0x8c, 0x90, 0x57, 0x99, 0x98, - 0x90, 0xb4, 0xb0, 0xa7, 0xea, 0x86, 0x5b, 0x60, 0x0f, 0xc2, 0xc4, 0x65, 0xc8, 0xdc, 0x5f, 0x4f, - 0x85, 0x8f, 0xa8, 0xaa, 0x20, 0x59, 0x36, 0x76, 0x22, 0x25, 0x25, 0x8b, 0xd0, 0xc2, 0x6f, 0x7e, - 0xe5, 0x99, 0x79, 0xee, 0x6e, 0x5e, 0x54, 0xb2, 0x97, 0x5a, 0xe5, 0x19, 0x81, 0x10, 0xb5, 0xe6, - 0xeb, 0x64, 0xc0, 0xc4, 0x7e, 0xcf, 0xee, 0xee, 0x06, 0xc7, 0x5a, 0xf3, 0x7d, 0x7e, 0x2d, 0x9b, - 0x87, 0x95, 0xc2, 0x37, 0x02, 0xea, 0xe0, 0x2c, 0xe9, 0x3a, 0x3e, 0x24, 0xa3, 0xc5, 0x79, 0x1a, - 0x94, 0x86, 0x94, 0x88, 0x6f, 0xaa, 0xba, 0x21, 0x3e, 0x40, 0x97, 0xf9, 0x15, 0x2a, 0x41, 0xca, - 0xf5, 0x54, 0xaf, 0xeb, 0xf2, 0x7f, 0x14, 0x57, 0x1c, 0x16, 0x19, 0x15, 0xcb, 0x6c, 0x35, 0xa9, - 0xa6, 0xcc, 0x11, 0x68, 0x1b, 0x52, 0x9e, 0x75, 0x80, 0x4d, 0xee, 0xa4, 0x63, 0x45, 0xf5, 0x80, - 0x67, 0x51, 0x8c, 0x0b, 0xb5, 0x41, 0x6a, 0x61, 0x03, 0xb7, 0x59, 0x41, 0xb4, 0xaf, 0x92, 0x7d, - 0x43, 0xea, 0x3e, 0xcc, 0x9a, 0x19, 0x9f, 0xb5, 0x49, 0x49, 0xd1, 0xf5, 0xe8, 0x63, 0x66, 0xf6, - 0x5f, 0x15, 0x1f, 0x19, 0xd6, 0xff, 0x50, 0x64, 0x8a, 0xc3, 0x84, 0xf0, 0x13, 0xe9, 0x27, 0x40, - 0xea, 0x9a, 0xbb, 0x96, 0x49, 0x3f, 0x13, 0xe5, 0xc5, 0x78, 0x9a, 0x96, 0x37, 0x33, 0xbe, 0xfc, - 0x65, 0x56, 0x95, 0x5f, 0x87, 0x7c, 0xa0, 0x4a, 0xe7, 0x4e, 0xe6, 0x18, 0x73, 0x67, 0xda, 0xc7, - 0x92, 0x56, 0xf4, 0x32, 0x40, 0x30, 0x31, 0xe9, 0xf1, 0x40, 0x76, 0xf8, 0x18, 0x06, 0xb3, 0x5b, - 0x6c, 0xb3, 0x02, 0x2c, 0x32, 0x60, 0xae, 0xa3, 0x9b, 0x8a, 0x8b, 0x8d, 0x3d, 0x85, 0xbb, 0x8a, - 0x50, 0x66, 0xef, 0xc3, 0xd0, 0xce, 0x76, 0x74, 0xb3, 0x89, 0x8d, 0xbd, 0x9a, 0x4f, 0x5b, 0xca, - 0x7d, 0xfc, 0x9d, 0xa5, 0x09, 0x3e, 0x97, 0x26, 0x8a, 0x0d, 0x7a, 0x44, 0xcd, 0xa7, 0x01, 0x76, - 0xd1, 0x45, 0xc8, 0xa8, 0xe2, 0x82, 0x1e, 0x1c, 0x1c, 0x35, 0x8d, 0x02, 0x55, 0x36, 0x3b, 0xdf, - 0xfe, 0xb7, 0xcb, 0xb1, 0xe2, 0x2f, 0xc6, 0x20, 0x55, 0xbb, 0xd1, 0x50, 0x75, 0x07, 0xd5, 0x61, - 0x36, 0x08, 0xa8, 0x71, 0xe7, 0x66, 0x10, 0x83, 0x62, 0x72, 0xd6, 0x87, 0xed, 0x1a, 0x8f, 0xa4, - 0xe9, 0xdd, 0x4f, 0xf6, 0x74, 0xbc, 0x0e, 0x53, 0xcc, 0x4a, 0x17, 0x95, 0x60, 0xd2, 0x26, 0x3f, - 0xf8, 0x89, 0xfc, 0xe2, 0xd0, 0x40, 0xa4, 0xfa, 0xfe, 0x09, 0x22, 0x81, 0x14, 0x7f, 0x10, 0x03, - 0xa8, 0xdd, 0xb8, 0xb1, 0xed, 0xe8, 0xb6, 0x81, 0xbd, 0xfb, 0xd5, 0xe3, 0x75, 0x38, 0x11, 0xda, - 0x9a, 0x38, 0xda, 0xd8, 0xbd, 0x9e, 0x0b, 0x36, 0x27, 0x8e, 0x36, 0x90, 0xad, 0xe5, 0x7a, 0x3e, - 0x5b, 0x62, 0x6c, 0xb6, 0x9a, 0xeb, 0x0d, 0x76, 0x63, 0x13, 0xb2, 0x41, 0xf7, 0x5d, 0x54, 0x83, - 0xb4, 0xc7, 0x7f, 0x73, 0x6f, 0x16, 0x87, 0x7b, 0x53, 0xc0, 0xb8, 0x47, 0x7d, 0x64, 0xf1, 0xff, - 0x10, 0xa7, 0xfa, 0x11, 0xfb, 0x87, 0x2b, 0x8c, 0x48, 0xee, 0xe5, 0xb9, 0xf1, 0x7e, 0x54, 0x14, - 0x9c, 0xab, 0xc7, 0xab, 0x1f, 0x8b, 0xc3, 0xdc, 0x8e, 0xc8, 0x36, 0x7f, 0x68, 0x3d, 0xd1, 0x80, - 0x29, 0x6c, 0x7a, 0x8e, 0x4e, 0x5d, 0x41, 0xc6, 0xfa, 0xd9, 0x61, 0x63, 0x3d, 0xa0, 0x2f, 0xf4, - 0xff, 0x15, 0x89, 0x73, 0x6d, 0x4e, 0xd3, 0xe3, 0x85, 0x7f, 0x13, 0x87, 0xc2, 0x30, 0x24, 0x3a, - 0x03, 0x33, 0x9a, 0x83, 0xa9, 0x40, 0x89, 0x1c, 0xae, 0xe5, 0x85, 0x98, 0x27, 0xfd, 0x0d, 0x20, - 0x05, 0x14, 0x09, 0x2c, 0xa2, 0x7a, 0xec, 0x8a, 0x29, 0x1f, 0x80, 0x69, 0xda, 0xc7, 0x30, 0xa3, - 0x9b, 0xba, 0xa7, 0xab, 0x86, 0xb2, 0xab, 0x1a, 0xaa, 0xa9, 0xdd, 0x4b, 0x65, 0xd9, 0x9f, 0xa8, - 0xf3, 0x9c, 0xb4, 0xc2, 0x38, 0xd1, 0x0d, 0x98, 0x12, 0xf4, 0xc9, 0xfb, 0x40, 0x2f, 0xc8, 0x42, - 0x55, 0xd4, 0xef, 0xc4, 0x61, 0x56, 0xc6, 0xad, 0x3f, 0x5a, 0x6e, 0xfd, 0x51, 0x00, 0x36, 0xe1, - 0x48, 0x1e, 0xbc, 0x07, 0xcf, 0xf6, 0x4f, 0xe0, 0x0c, 0xe3, 0xab, 0xb9, 0x5e, 0xc8, 0xb7, 0xdf, - 0x88, 0x43, 0x2e, 0xec, 0xdb, 0x3f, 0x02, 0xeb, 0x02, 0x5a, 0x0b, 0xb2, 0x41, 0x92, 0xff, 0xa7, - 0xd5, 0x21, 0xd9, 0xa0, 0x2f, 0xea, 0x8e, 0x4e, 0x03, 0xdf, 0x8b, 0x43, 0xaa, 0xa1, 0x3a, 0x6a, - 0xc7, 0x45, 0xd7, 0xfa, 0x0a, 0x38, 0x71, 0xca, 0xd6, 0xf7, 0xff, 0xb4, 0xf9, 0xa6, 0x9e, 0x85, - 0xdc, 0xa7, 0x06, 0xd4, 0x6f, 0x8f, 0x41, 0x9e, 0x6c, 0x11, 0x43, 0x0f, 0xe4, 0xe3, 0xf4, 0x31, - 0x23, 0xd9, 0xe3, 0x05, 0x4f, 0x83, 0xd0, 0x12, 0x64, 0x89, 0x5a, 0x90, 0xe8, 0x88, 0x0e, 0x74, - 0xd4, 0xdb, 0x75, 0x26, 0x41, 0xcf, 0x00, 0xda, 0xf7, 0x37, 0xed, 0x4a, 0xe0, 0x02, 0xa2, 0x37, - 0x1b, 0xb4, 0x08, 0xf5, 0x87, 0x00, 0x88, 0x15, 0x0a, 0x7b, 0xc9, 0x8b, 0xed, 0x71, 0x32, 0x44, - 0x52, 0xa3, 0x2f, 0x7a, 0xfd, 0x04, 0xab, 0x05, 0x7b, 0x76, 0x8f, 0xbc, 0x0c, 0x5f, 0x3f, 0x5e, - 0xa4, 0x7e, 0xef, 0xdd, 0xa5, 0x85, 0x43, 0xb5, 0x63, 0x94, 0x8a, 0x03, 0x28, 0x8b, 0xb4, 0x36, - 0x8c, 0xee, 0x3a, 0x43, 0x11, 0xfc, 0xf9, 0x18, 0xa0, 0x20, 0xe5, 0xca, 0xd8, 0xb5, 0xc9, 0xb6, - 0x86, 0x14, 0xbd, 0xa1, 0x0a, 0x35, 0x76, 0x74, 0xd1, 0x1b, 0xe0, 0x45, 0xd1, 0x1b, 0x9a, 0x11, - 0x97, 0x83, 0x04, 0x17, 0xe7, 0x63, 0x38, 0xe0, 0x0d, 0xbd, 0x95, 0xaa, 0xa5, 0x0b, 0x74, 0x5f, - 0x0e, 0x9b, 0x28, 0xfe, 0x4e, 0x0c, 0x4e, 0xf7, 0x45, 0x93, 0x6f, 0xec, 0x1f, 0x03, 0xe4, 0x84, - 0x1a, 0xf9, 0xbf, 0xcc, 0x63, 0x46, 0x1f, 0x3b, 0x38, 0x67, 0x9d, 0xbe, 0x5c, 0xf9, 0x61, 0xe5, - 0x68, 0xf6, 0xe6, 0xde, 0x3f, 0x8a, 0xc1, 0x7c, 0xd8, 0x18, 0xbf, 0x5b, 0x9b, 0x90, 0x0b, 0xdb, - 0xc2, 0x3b, 0xf4, 0xe8, 0x38, 0x1d, 0xe2, 0x7d, 0x89, 0xe0, 0xd1, 0x2b, 0xc1, 0xc4, 0x65, 0x87, - 0x45, 0xcf, 0x8d, 0xed, 0x1b, 0x61, 0x53, 0xef, 0x04, 0x4e, 0x8a, 0x2a, 0x26, 0xd9, 0xb0, 0x2c, - 0x03, 0xfd, 0x71, 0x98, 0x35, 0x2d, 0x4f, 0x21, 0x51, 0x8e, 0x5b, 0x0a, 0xdf, 0xb9, 0xb2, 0xec, - 0xf7, 0xca, 0xf1, 0x5c, 0xf6, 0x9d, 0x77, 0x97, 0xfa, 0xa9, 0x7a, 0xfc, 0x38, 0x63, 0x5a, 0x5e, - 0x85, 0xb6, 0x6f, 0xb3, 0x7d, 0xad, 0x03, 0xd3, 0xd1, 0x5b, 0xb3, 0x6c, 0xb9, 0x71, 0xec, 0x5b, - 0x4f, 0x1f, 0x75, 0xdb, 0xdc, 0x6e, 0xe8, 0x9e, 0xec, 0x9d, 0xa6, 0xdf, 0x7f, 0x67, 0x29, 0xf6, - 0xe4, 0x57, 0x63, 0x00, 0xc1, 0x16, 0x1e, 0x3d, 0x0d, 0xa7, 0x2a, 0x5b, 0x9b, 0x35, 0xa5, 0xb9, - 0x5d, 0xde, 0xde, 0x69, 0x46, 0xdf, 0x7c, 0x16, 0x67, 0xc2, 0xae, 0x8d, 0x35, 0x7d, 0x4f, 0xc7, - 0x2d, 0xf4, 0x38, 0xcc, 0x47, 0xb5, 0xc9, 0x55, 0xbd, 0x26, 0xc5, 0x16, 0x72, 0x77, 0xee, 0x2e, - 0xa7, 0x59, 0x75, 0x84, 0x5b, 0xe8, 0x2c, 0x9c, 0xe8, 0xd7, 0x5b, 0xdb, 0x5c, 0x95, 0xe2, 0x0b, - 0xd3, 0x77, 0xee, 0x2e, 0x67, 0xfc, 0x32, 0x0a, 0x15, 0x01, 0x85, 0x35, 0x39, 0x5f, 0x62, 0x01, - 0xee, 0xdc, 0x5d, 0x4e, 0x31, 0xb7, 0x2d, 0x24, 0x3f, 0xfe, 0xf9, 0xc5, 0x89, 0xca, 0xd5, 0xa1, - 0xa7, 0xbe, 0x4f, 0x1f, 0xe9, 0xb1, 0xdb, 0xfe, 0x49, 0x6e, 0xe4, 0xa8, 0xf7, 0xff, 0x06, 0x00, - 0x00, 0xff, 0xff, 0xdf, 0xc6, 0xe4, 0x92, 0x04, 0x66, 0x00, 0x00, + // 7568 bytes of a gzipped FileDescriptorSet + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7c, 0x6b, 0x70, 0x24, 0xd7, + 0x75, 0x1e, 0xe6, 0x81, 0xc1, 0xcc, 0x99, 0xc1, 0x4c, 0xe3, 0x02, 0xbb, 0x3b, 0x0b, 0x92, 0x00, + 0x38, 0x7c, 0xec, 0xf2, 0x85, 0x25, 0x97, 0xdc, 0x5d, 0xee, 0xac, 0x25, 0x06, 0xf3, 0x58, 0x10, + 0x4b, 0x3c, 0x86, 0x3d, 0xc0, 0xf2, 0xe1, 0x38, 0x5d, 0x8d, 0x9e, 0x8b, 0x41, 0x13, 0x3d, 0xdd, + 0xed, 0xee, 0x9e, 0xdd, 0x05, 0xcb, 0x49, 0xd1, 0xa5, 0x3c, 0xa4, 0x4d, 0xc5, 0x91, 0xe3, 0x54, + 0x2c, 0xcb, 0x5a, 0x85, 0x92, 0x9c, 0xc8, 0x51, 0x94, 0x87, 0x2d, 0x45, 0x8e, 0xe3, 0x4a, 0xa2, + 0x24, 0x95, 0x44, 0xd6, 0x8f, 0x94, 0xec, 0x1f, 0xb1, 0x9d, 0x07, 0xe3, 0x50, 0xaa, 0x44, 0x51, + 0x94, 0xd8, 0x51, 0x98, 0xaa, 0xa4, 0x54, 0x4a, 0xb9, 0xee, 0xab, 0x1f, 0xf3, 0xc0, 0x0c, 0xd6, + 0x4b, 0xda, 0x55, 0xfa, 0x85, 0xe9, 0x73, 0xcf, 0xf7, 0xf5, 0xb9, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, + 0xb7, 0xbb, 0x01, 0xff, 0xe2, 0x0a, 0x2c, 0xb5, 0x2d, 0xab, 0x6d, 0xe0, 0x73, 0xb6, 0x63, 0x79, + 0xd6, 0x6e, 0x77, 0xef, 0x5c, 0x0b, 0xbb, 0x9a, 0xa3, 0xdb, 0x9e, 0xe5, 0x2c, 0x53, 0x19, 0x2a, + 0x30, 0x8d, 0x65, 0xa1, 0x51, 0xda, 0x80, 0x99, 0xab, 0xba, 0x81, 0x6b, 0xbe, 0x62, 0x13, 0x7b, + 0xe8, 0x79, 0x48, 0xee, 0xe9, 0x06, 0x2e, 0xc6, 0x96, 0x12, 0x67, 0xb3, 0xe7, 0x1f, 0x5e, 0xee, + 0x01, 0x2d, 0x47, 0x11, 0x0d, 0x22, 0x96, 0x29, 0xa2, 0xf4, 0xad, 0x24, 0xcc, 0x0e, 0x68, 0x45, + 0x08, 0x92, 0xa6, 0xda, 0x21, 0x8c, 0xb1, 0xb3, 0x19, 0x99, 0xfe, 0x46, 0x45, 0x98, 0xb2, 0x55, + 0xed, 0x40, 0x6d, 0xe3, 0x62, 0x9c, 0x8a, 0xc5, 0x25, 0x5a, 0x00, 0x68, 0x61, 0x1b, 0x9b, 0x2d, + 0x6c, 0x6a, 0x87, 0xc5, 0xc4, 0x52, 0xe2, 0x6c, 0x46, 0x0e, 0x49, 0xd0, 0x13, 0x30, 0x63, 0x77, + 0x77, 0x0d, 0x5d, 0x53, 0x42, 0x6a, 0xb0, 0x94, 0x38, 0x3b, 0x29, 0x4b, 0xac, 0xa1, 0x16, 0x28, + 0x9f, 0x81, 0xc2, 0x4d, 0xac, 0x1e, 0x84, 0x55, 0xb3, 0x54, 0x35, 0x4f, 0xc4, 0x21, 0xc5, 0x2a, + 0xe4, 0x3a, 0xd8, 0x75, 0xd5, 0x36, 0x56, 0xbc, 0x43, 0x1b, 0x17, 0x93, 0xb4, 0xf7, 0x4b, 0x7d, + 0xbd, 0xef, 0xed, 0x79, 0x96, 0xa3, 0xb6, 0x0f, 0x6d, 0x8c, 0x56, 0x20, 0x83, 0xcd, 0x6e, 0x87, + 0x31, 0x4c, 0x0e, 0xf1, 0x5f, 0xdd, 0xec, 0x76, 0x7a, 0x59, 0xd2, 0x04, 0xc6, 0x29, 0xa6, 0x5c, + 0xec, 0xdc, 0xd0, 0x35, 0x5c, 0x4c, 0x51, 0x82, 0x33, 0x7d, 0x04, 0x4d, 0xd6, 0xde, 0xcb, 0x21, + 0x70, 0xa8, 0x0a, 0x19, 0x7c, 0xcb, 0xc3, 0xa6, 0xab, 0x5b, 0x66, 0x71, 0x8a, 0x92, 0x3c, 0x32, + 0x60, 0x14, 0xb1, 0xd1, 0xea, 0xa5, 0x08, 0x70, 0xe8, 0x22, 0x4c, 0x59, 0xb6, 0xa7, 0x5b, 0xa6, + 0x5b, 0x4c, 0x2f, 0xc5, 0xce, 0x66, 0xcf, 0xdf, 0x3f, 0x30, 0x10, 0xb6, 0x98, 0x8e, 0x2c, 0x94, + 0xd1, 0x1a, 0x48, 0xae, 0xd5, 0x75, 0x34, 0xac, 0x68, 0x56, 0x0b, 0x2b, 0xba, 0xb9, 0x67, 0x15, + 0x33, 0x94, 0x60, 0xb1, 0xbf, 0x23, 0x54, 0xb1, 0x6a, 0xb5, 0xf0, 0x9a, 0xb9, 0x67, 0xc9, 0x79, + 0x37, 0x72, 0x8d, 0x4e, 0x42, 0xca, 0x3d, 0x34, 0x3d, 0xf5, 0x56, 0x31, 0x47, 0x23, 0x84, 0x5f, + 0x95, 0x7e, 0x35, 0x05, 0x85, 0x71, 0x42, 0xec, 0x0a, 0x4c, 0xee, 0x91, 0x5e, 0x16, 0xe3, 0xc7, + 0xf1, 0x01, 0xc3, 0x44, 0x9d, 0x98, 0xba, 0x4b, 0x27, 0xae, 0x40, 0xd6, 0xc4, 0xae, 0x87, 0x5b, + 0x2c, 0x22, 0x12, 0x63, 0xc6, 0x14, 0x30, 0x50, 0x7f, 0x48, 0x25, 0xef, 0x2a, 0xa4, 0x5e, 0x85, + 0x82, 0x6f, 0x92, 0xe2, 0xa8, 0x66, 0x5b, 0xc4, 0xe6, 0xb9, 0x51, 0x96, 0x2c, 0xd7, 0x05, 0x4e, + 0x26, 0x30, 0x39, 0x8f, 0x23, 0xd7, 0xa8, 0x06, 0x60, 0x99, 0xd8, 0xda, 0x53, 0x5a, 0x58, 0x33, + 0x8a, 0xe9, 0x21, 0x5e, 0xda, 0x22, 0x2a, 0x7d, 0x5e, 0xb2, 0x98, 0x54, 0x33, 0xd0, 0xe5, 0x20, + 0xd4, 0xa6, 0x86, 0x44, 0xca, 0x06, 0x9b, 0x64, 0x7d, 0xd1, 0xb6, 0x03, 0x79, 0x07, 0x93, 0xb8, + 0xc7, 0x2d, 0xde, 0xb3, 0x0c, 0x35, 0x62, 0x79, 0x64, 0xcf, 0x64, 0x0e, 0x63, 0x1d, 0x9b, 0x76, + 0xc2, 0x97, 0xe8, 0x21, 0xf0, 0x05, 0x0a, 0x0d, 0x2b, 0xa0, 0x59, 0x28, 0x27, 0x84, 0x9b, 0x6a, + 0x07, 0xcf, 0xbf, 0x09, 0xf9, 0xa8, 0x7b, 0xd0, 0x1c, 0x4c, 0xba, 0x9e, 0xea, 0x78, 0x34, 0x0a, + 0x27, 0x65, 0x76, 0x81, 0x24, 0x48, 0x60, 0xb3, 0x45, 0xb3, 0xdc, 0xa4, 0x4c, 0x7e, 0xa2, 0x3f, + 0x11, 0x74, 0x38, 0x41, 0x3b, 0xfc, 0x68, 0xff, 0x88, 0x46, 0x98, 0x7b, 0xfb, 0x3d, 0x7f, 0x09, + 0xa6, 0x23, 0x1d, 0x18, 0xf7, 0xd6, 0xa5, 0x9f, 0x80, 0x13, 0x03, 0xa9, 0xd1, 0xab, 0x30, 0xd7, + 0x35, 0x75, 0xd3, 0xc3, 0x8e, 0xed, 0x60, 0x12, 0xb1, 0xec, 0x56, 0xc5, 0xff, 0x3a, 0x35, 0x24, + 0xe6, 0x76, 0xc2, 0xda, 0x8c, 0x45, 0x9e, 0xed, 0xf6, 0x0b, 0x1f, 0xcf, 0xa4, 0xbf, 0x3d, 0x25, + 0xbd, 0xf5, 0xd6, 0x5b, 0x6f, 0xc5, 0x4b, 0xff, 0x2c, 0x05, 0x73, 0x83, 0xe6, 0xcc, 0xc0, 0xe9, + 0x7b, 0x12, 0x52, 0x66, 0xb7, 0xb3, 0x8b, 0x1d, 0xea, 0xa4, 0x49, 0x99, 0x5f, 0xa1, 0x15, 0x98, + 0x34, 0xd4, 0x5d, 0x6c, 0x14, 0x93, 0x4b, 0xb1, 0xb3, 0xf9, 0xf3, 0x4f, 0x8c, 0x35, 0x2b, 0x97, + 0xd7, 0x09, 0x44, 0x66, 0x48, 0xf4, 0x61, 0x48, 0xf2, 0x14, 0x4d, 0x18, 0x1e, 0x1f, 0x8f, 0x81, + 0xcc, 0x25, 0x99, 0xe2, 0xd0, 0x7d, 0x90, 0x21, 0x7f, 0x59, 0x6c, 0xa4, 0xa8, 0xcd, 0x69, 0x22, + 0x20, 0x71, 0x81, 0xe6, 0x21, 0x4d, 0xa7, 0x49, 0x0b, 0x8b, 0xa5, 0xcd, 0xbf, 0x26, 0x81, 0xd5, + 0xc2, 0x7b, 0x6a, 0xd7, 0xf0, 0x94, 0x1b, 0xaa, 0xd1, 0xc5, 0x34, 0xe0, 0x33, 0x72, 0x8e, 0x0b, + 0xaf, 0x13, 0x19, 0x5a, 0x84, 0x2c, 0x9b, 0x55, 0xba, 0xd9, 0xc2, 0xb7, 0x68, 0xf6, 0x9c, 0x94, + 0xd9, 0x44, 0x5b, 0x23, 0x12, 0x72, 0xfb, 0x37, 0x5c, 0xcb, 0x14, 0xa1, 0x49, 0x6f, 0x41, 0x04, + 0xf4, 0xf6, 0x97, 0x7a, 0x13, 0xf7, 0x03, 0x83, 0xbb, 0xd7, 0x37, 0x97, 0xce, 0x40, 0x81, 0x6a, + 0x3c, 0xcb, 0x87, 0x5e, 0x35, 0x8a, 0x33, 0x4b, 0xb1, 0xb3, 0x69, 0x39, 0xcf, 0xc4, 0x5b, 0x5c, + 0x5a, 0xfa, 0x4a, 0x1c, 0x92, 0x34, 0xb1, 0x14, 0x20, 0xbb, 0xfd, 0x5a, 0xa3, 0xae, 0xd4, 0xb6, + 0x76, 0x2a, 0xeb, 0x75, 0x29, 0x86, 0xf2, 0x00, 0x54, 0x70, 0x75, 0x7d, 0x6b, 0x65, 0x5b, 0x8a, + 0xfb, 0xd7, 0x6b, 0x9b, 0xdb, 0x17, 0x9f, 0x93, 0x12, 0x3e, 0x60, 0x87, 0x09, 0x92, 0x61, 0x85, + 0x67, 0xcf, 0x4b, 0x93, 0x48, 0x82, 0x1c, 0x23, 0x58, 0x7b, 0xb5, 0x5e, 0xbb, 0xf8, 0x9c, 0x94, + 0x8a, 0x4a, 0x9e, 0x3d, 0x2f, 0x4d, 0xa1, 0x69, 0xc8, 0x50, 0x49, 0x65, 0x6b, 0x6b, 0x5d, 0x4a, + 0xfb, 0x9c, 0xcd, 0x6d, 0x79, 0x6d, 0x73, 0x55, 0xca, 0xf8, 0x9c, 0xab, 0xf2, 0xd6, 0x4e, 0x43, + 0x02, 0x9f, 0x61, 0xa3, 0xde, 0x6c, 0xae, 0xac, 0xd6, 0xa5, 0xac, 0xaf, 0x51, 0x79, 0x6d, 0xbb, + 0xde, 0x94, 0x72, 0x11, 0xb3, 0x9e, 0x3d, 0x2f, 0x4d, 0xfb, 0xb7, 0xa8, 0x6f, 0xee, 0x6c, 0x48, + 0x79, 0x34, 0x03, 0xd3, 0xec, 0x16, 0xc2, 0x88, 0x42, 0x8f, 0xe8, 0xe2, 0x73, 0x92, 0x14, 0x18, + 0xc2, 0x58, 0x66, 0x22, 0x82, 0x8b, 0xcf, 0x49, 0xa8, 0x54, 0x85, 0x49, 0x1a, 0x86, 0x08, 0x41, + 0x7e, 0x7d, 0xa5, 0x52, 0x5f, 0x57, 0xb6, 0x1a, 0xdb, 0x6b, 0x5b, 0x9b, 0x2b, 0xeb, 0x52, 0x2c, + 0x90, 0xc9, 0xf5, 0x97, 0x77, 0xd6, 0xe4, 0x7a, 0x4d, 0x8a, 0x87, 0x65, 0x8d, 0xfa, 0xca, 0x76, + 0xbd, 0x26, 0x25, 0x4a, 0x1a, 0xcc, 0x0d, 0x4a, 0xa8, 0x03, 0xa7, 0x50, 0x28, 0x16, 0xe2, 0x43, + 0x62, 0x81, 0x72, 0xf5, 0xc6, 0x42, 0xe9, 0x9b, 0x71, 0x98, 0x1d, 0xb0, 0xa8, 0x0c, 0xbc, 0xc9, + 0x0b, 0x30, 0xc9, 0x62, 0x99, 0x2d, 0xb3, 0x8f, 0x0d, 0x5c, 0x9d, 0x68, 0x64, 0xf7, 0x2d, 0xb5, + 0x14, 0x17, 0x2e, 0x35, 0x12, 0x43, 0x4a, 0x0d, 0x42, 0xd1, 0x17, 0xb0, 0x3f, 0xd6, 0x97, 0xfc, + 0xd9, 0xfa, 0x78, 0x71, 0x9c, 0xf5, 0x91, 0xca, 0x8e, 0xb7, 0x08, 0x4c, 0x0e, 0x58, 0x04, 0xae, + 0xc0, 0x4c, 0x1f, 0xd1, 0xd8, 0xc9, 0xf8, 0x23, 0x31, 0x28, 0x0e, 0x73, 0xce, 0x88, 0x94, 0x18, + 0x8f, 0xa4, 0xc4, 0x2b, 0xbd, 0x1e, 0x7c, 0x70, 0xf8, 0x20, 0xf4, 0x8d, 0xf5, 0xe7, 0x63, 0x70, + 0x72, 0x70, 0x49, 0x39, 0xd0, 0x86, 0x0f, 0x43, 0xaa, 0x83, 0xbd, 0x7d, 0x4b, 0x94, 0x55, 0x8f, + 0x0e, 0x58, 0xac, 0x49, 0x73, 0xef, 0x60, 0x73, 0x54, 0x78, 0xb5, 0x4f, 0x0c, 0xab, 0x0b, 0x99, + 0x35, 0x7d, 0x96, 0x7e, 0x2c, 0x0e, 0x27, 0x06, 0x92, 0x0f, 0x34, 0xf4, 0x01, 0x00, 0xdd, 0xb4, + 0xbb, 0x1e, 0x2b, 0x9d, 0x58, 0x26, 0xce, 0x50, 0x09, 0x4d, 0x5e, 0x24, 0xcb, 0x76, 0x3d, 0xbf, + 0x3d, 0x41, 0xdb, 0x81, 0x89, 0xa8, 0xc2, 0xf3, 0x81, 0xa1, 0x49, 0x6a, 0xe8, 0xc2, 0x90, 0x9e, + 0xf6, 0x05, 0xe6, 0xd3, 0x20, 0x69, 0x86, 0x8e, 0x4d, 0x4f, 0x71, 0x3d, 0x07, 0xab, 0x1d, 0xdd, + 0x6c, 0xd3, 0xa5, 0x26, 0x5d, 0x9e, 0xdc, 0x53, 0x0d, 0x17, 0xcb, 0x05, 0xd6, 0xdc, 0x14, 0xad, + 0x04, 0x41, 0x03, 0xc8, 0x09, 0x21, 0x52, 0x11, 0x04, 0x6b, 0xf6, 0x11, 0xa5, 0x9f, 0xce, 0x40, + 0x36, 0x54, 0x80, 0xa3, 0x07, 0x21, 0xf7, 0x86, 0x7a, 0x43, 0x55, 0xc4, 0xa6, 0x8a, 0x79, 0x22, + 0x4b, 0x64, 0x0d, 0xbe, 0xb1, 0x7a, 0x1a, 0xe6, 0xa8, 0x8a, 0xd5, 0xf5, 0xb0, 0xa3, 0x68, 0x86, + 0xea, 0xba, 0xd4, 0x69, 0x69, 0xaa, 0x8a, 0x48, 0xdb, 0x16, 0x69, 0xaa, 0x8a, 0x16, 0x74, 0x01, + 0x66, 0x29, 0xa2, 0xd3, 0x35, 0x3c, 0xdd, 0x36, 0xb0, 0x42, 0xb6, 0x79, 0x2e, 0x5d, 0x72, 0x7c, + 0xcb, 0x66, 0x88, 0xc6, 0x06, 0x57, 0x20, 0x16, 0xb9, 0xa8, 0x06, 0x0f, 0x50, 0x58, 0x1b, 0x9b, + 0xd8, 0x51, 0x3d, 0xac, 0xe0, 0x1f, 0xef, 0xaa, 0x86, 0xab, 0xa8, 0x66, 0x4b, 0xd9, 0x57, 0xdd, + 0xfd, 0xe2, 0x1c, 0x21, 0xa8, 0xc4, 0x8b, 0x31, 0xf9, 0x34, 0x51, 0x5c, 0xe5, 0x7a, 0x75, 0xaa, + 0xb6, 0x62, 0xb6, 0x5e, 0x54, 0xdd, 0x7d, 0x54, 0x86, 0x93, 0x94, 0xc5, 0xf5, 0x1c, 0xdd, 0x6c, + 0x2b, 0xda, 0x3e, 0xd6, 0x0e, 0x94, 0xae, 0xb7, 0xf7, 0x7c, 0xf1, 0xbe, 0xf0, 0xfd, 0xa9, 0x85, + 0x4d, 0xaa, 0x53, 0x25, 0x2a, 0x3b, 0xde, 0xde, 0xf3, 0xa8, 0x09, 0x39, 0x32, 0x18, 0x1d, 0xfd, + 0x4d, 0xac, 0xec, 0x59, 0x0e, 0x5d, 0x43, 0xf3, 0x03, 0x52, 0x53, 0xc8, 0x83, 0xcb, 0x5b, 0x1c, + 0xb0, 0x61, 0xb5, 0x70, 0x79, 0xb2, 0xd9, 0xa8, 0xd7, 0x6b, 0x72, 0x56, 0xb0, 0x5c, 0xb5, 0x1c, + 0x12, 0x50, 0x6d, 0xcb, 0x77, 0x70, 0x96, 0x05, 0x54, 0xdb, 0x12, 0xee, 0xbd, 0x00, 0xb3, 0x9a, + 0xc6, 0xfa, 0xac, 0x6b, 0x0a, 0xdf, 0x8c, 0xb9, 0x45, 0x29, 0xe2, 0x2c, 0x4d, 0x5b, 0x65, 0x0a, + 0x3c, 0xc6, 0x5d, 0x74, 0x19, 0x4e, 0x04, 0xce, 0x0a, 0x03, 0x67, 0xfa, 0x7a, 0xd9, 0x0b, 0xbd, + 0x00, 0xb3, 0xf6, 0x61, 0x3f, 0x10, 0x45, 0xee, 0x68, 0x1f, 0xf6, 0xc2, 0x2e, 0xc1, 0x9c, 0xbd, + 0x6f, 0xf7, 0xe3, 0x1e, 0x0f, 0xe3, 0x90, 0xbd, 0x6f, 0xf7, 0x02, 0x1f, 0xa1, 0x3b, 0x73, 0x07, + 0x6b, 0xaa, 0x87, 0x5b, 0xc5, 0x53, 0x61, 0xf5, 0x50, 0x03, 0x5a, 0x06, 0x49, 0xd3, 0x14, 0x6c, + 0xaa, 0xbb, 0x06, 0x56, 0x54, 0x07, 0x9b, 0xaa, 0x5b, 0x5c, 0xa4, 0xca, 0x49, 0xcf, 0xe9, 0x62, + 0x39, 0xaf, 0x69, 0x75, 0xda, 0xb8, 0x42, 0xdb, 0xd0, 0xe3, 0x30, 0x63, 0xed, 0xbe, 0xa1, 0xb1, + 0x88, 0x54, 0x6c, 0x07, 0xef, 0xe9, 0xb7, 0x8a, 0x0f, 0x53, 0xf7, 0x16, 0x48, 0x03, 0x8d, 0xc7, + 0x06, 0x15, 0xa3, 0xc7, 0x40, 0xd2, 0xdc, 0x7d, 0xd5, 0xb1, 0x69, 0x4a, 0x76, 0x6d, 0x55, 0xc3, + 0xc5, 0x47, 0x98, 0x2a, 0x93, 0x6f, 0x0a, 0x31, 0x99, 0x11, 0xee, 0x4d, 0x7d, 0xcf, 0x13, 0x8c, + 0x67, 0xd8, 0x8c, 0xa0, 0x32, 0xce, 0x76, 0x16, 0x24, 0xe2, 0x89, 0xc8, 0x8d, 0xcf, 0x52, 0xb5, + 0xbc, 0xbd, 0x6f, 0x87, 0xef, 0xfb, 0x10, 0x4c, 0x13, 0xcd, 0xe0, 0xa6, 0x8f, 0xb1, 0xc2, 0xcd, + 0xde, 0x0f, 0xdd, 0xf1, 0x39, 0x38, 0x49, 0x94, 0x3a, 0xd8, 0x53, 0x5b, 0xaa, 0xa7, 0x86, 0xb4, + 0x9f, 0xa4, 0xda, 0xc4, 0xed, 0x1b, 0xbc, 0x31, 0x62, 0xa7, 0xd3, 0xdd, 0x3d, 0xf4, 0x03, 0xeb, + 0x29, 0x66, 0x27, 0x91, 0x89, 0xd0, 0x7a, 0xdf, 0x8a, 0xf3, 0x52, 0x19, 0x72, 0xe1, 0xb8, 0x47, + 0x19, 0x60, 0x91, 0x2f, 0xc5, 0x48, 0x11, 0x54, 0xdd, 0xaa, 0x91, 0xf2, 0xe5, 0xf5, 0xba, 0x14, + 0x27, 0x65, 0xd4, 0xfa, 0xda, 0x76, 0x5d, 0x91, 0x77, 0x36, 0xb7, 0xd7, 0x36, 0xea, 0x52, 0x22, + 0x54, 0xd8, 0x5f, 0x4b, 0xa6, 0x1f, 0x95, 0xce, 0x90, 0xaa, 0x21, 0x1f, 0xdd, 0xa9, 0xa1, 0x1f, + 0x81, 0x53, 0xe2, 0x58, 0xc5, 0xc5, 0x9e, 0x72, 0x53, 0x77, 0xe8, 0x84, 0xec, 0xa8, 0x6c, 0x71, + 0xf4, 0xe3, 0x67, 0x8e, 0x6b, 0x35, 0xb1, 0xf7, 0x8a, 0xee, 0x90, 0xe9, 0xd6, 0x51, 0x3d, 0xb4, + 0x0e, 0x8b, 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0xb6, 0x54, 0xa7, 0xa5, 0x04, 0x07, 0x5a, 0x8a, 0xaa, + 0x69, 0xd8, 0x75, 0x2d, 0xb6, 0x10, 0xfa, 0x2c, 0xf7, 0x9b, 0x56, 0x93, 0x2b, 0x07, 0x2b, 0xc4, + 0x0a, 0x57, 0xed, 0x09, 0xdf, 0xc4, 0xb0, 0xf0, 0xbd, 0x0f, 0x32, 0x1d, 0xd5, 0x56, 0xb0, 0xe9, + 0x39, 0x87, 0xb4, 0x3e, 0x4f, 0xcb, 0xe9, 0x8e, 0x6a, 0xd7, 0xc9, 0xf5, 0x07, 0xb2, 0x4d, 0xba, + 0x96, 0x4c, 0x27, 0xa5, 0xc9, 0x6b, 0xc9, 0xf4, 0xa4, 0x94, 0xba, 0x96, 0x4c, 0xa7, 0xa4, 0xa9, + 0x6b, 0xc9, 0x74, 0x5a, 0xca, 0x5c, 0x4b, 0xa6, 0x33, 0x12, 0x94, 0xde, 0x4d, 0x40, 0x2e, 0x5c, + 0xc1, 0x93, 0x0d, 0x91, 0x46, 0xd7, 0xb0, 0x18, 0xcd, 0x72, 0x0f, 0x1d, 0x59, 0xef, 0x2f, 0x57, + 0xc9, 0xe2, 0x56, 0x4e, 0xb1, 0x72, 0x59, 0x66, 0x48, 0x52, 0x58, 0x90, 0xf0, 0xc3, 0xac, 0x3c, + 0x49, 0xcb, 0xfc, 0x0a, 0xad, 0x42, 0xea, 0x0d, 0x97, 0x72, 0xa7, 0x28, 0xf7, 0xc3, 0x47, 0x73, + 0x5f, 0x6b, 0x52, 0xf2, 0xcc, 0xb5, 0xa6, 0xb2, 0xb9, 0x25, 0x6f, 0xac, 0xac, 0xcb, 0x1c, 0x8e, + 0x4e, 0x43, 0xd2, 0x50, 0xdf, 0x3c, 0x8c, 0x2e, 0x83, 0x54, 0x34, 0xee, 0xb0, 0x9c, 0x86, 0xe4, + 0x4d, 0xac, 0x1e, 0x44, 0x17, 0x1f, 0x2a, 0x7a, 0x1f, 0xa7, 0xc7, 0x39, 0x98, 0xa4, 0xfe, 0x42, + 0x00, 0xdc, 0x63, 0xd2, 0x04, 0x4a, 0x43, 0xb2, 0xba, 0x25, 0x93, 0x29, 0x22, 0x41, 0x8e, 0x49, + 0x95, 0xc6, 0x5a, 0xbd, 0x5a, 0x97, 0xe2, 0xa5, 0x0b, 0x90, 0x62, 0x4e, 0x20, 0xd3, 0xc7, 0x77, + 0x83, 0x34, 0xc1, 0x2f, 0x39, 0x47, 0x4c, 0xb4, 0xee, 0x6c, 0x54, 0xea, 0xb2, 0x14, 0xef, 0x1b, + 0xfc, 0x92, 0x0b, 0xb9, 0x70, 0x65, 0xfe, 0xc1, 0x6c, 0xcf, 0xbf, 0x1a, 0x83, 0x6c, 0xa8, 0xd2, + 0x26, 0x25, 0x92, 0x6a, 0x18, 0xd6, 0x4d, 0x45, 0x35, 0x74, 0xd5, 0xe5, 0xa1, 0x01, 0x54, 0xb4, + 0x42, 0x24, 0xe3, 0x0e, 0xdd, 0x07, 0x34, 0x69, 0x26, 0xa5, 0x54, 0xe9, 0xd3, 0x31, 0x90, 0x7a, + 0x4b, 0xdd, 0x1e, 0x33, 0x63, 0x7f, 0x94, 0x66, 0x96, 0x3e, 0x15, 0x83, 0x7c, 0xb4, 0xbe, 0xed, + 0x31, 0xef, 0xc1, 0x3f, 0x52, 0xf3, 0x7e, 0x37, 0x0e, 0xd3, 0x91, 0xaa, 0x76, 0x5c, 0xeb, 0x7e, + 0x1c, 0x66, 0xf4, 0x16, 0xee, 0xd8, 0x96, 0x87, 0x4d, 0xed, 0x50, 0x31, 0xf0, 0x0d, 0x6c, 0x14, + 0x4b, 0x34, 0x69, 0x9c, 0x3b, 0xba, 0x6e, 0x5e, 0x5e, 0x0b, 0x70, 0xeb, 0x04, 0x56, 0x9e, 0x5d, + 0xab, 0xd5, 0x37, 0x1a, 0x5b, 0xdb, 0xf5, 0xcd, 0xea, 0x6b, 0xca, 0xce, 0xe6, 0x4b, 0x9b, 0x5b, + 0xaf, 0x6c, 0xca, 0x92, 0xde, 0xa3, 0xf6, 0x3e, 0x4e, 0xfb, 0x06, 0x48, 0xbd, 0x46, 0xa1, 0x53, + 0x30, 0xc8, 0x2c, 0x69, 0x02, 0xcd, 0x42, 0x61, 0x73, 0x4b, 0x69, 0xae, 0xd5, 0xea, 0x4a, 0xfd, + 0xea, 0xd5, 0x7a, 0x75, 0xbb, 0xc9, 0x4e, 0x42, 0x7c, 0xed, 0xed, 0xc8, 0x04, 0x2f, 0x7d, 0x32, + 0x01, 0xb3, 0x03, 0x2c, 0x41, 0x2b, 0x7c, 0x0f, 0xc3, 0xb6, 0x55, 0x4f, 0x8d, 0x63, 0xfd, 0x32, + 0xa9, 0x22, 0x1a, 0xaa, 0xe3, 0xf1, 0x2d, 0xcf, 0x63, 0x40, 0xbc, 0x64, 0x7a, 0xfa, 0x9e, 0x8e, + 0x1d, 0x7e, 0xc2, 0xc4, 0x36, 0x36, 0x85, 0x40, 0xce, 0x0e, 0x99, 0x9e, 0x04, 0x64, 0x5b, 0xae, + 0xee, 0xe9, 0x37, 0xb0, 0xa2, 0x9b, 0xe2, 0x38, 0x8a, 0x6c, 0x74, 0x92, 0xb2, 0x24, 0x5a, 0xd6, + 0x4c, 0xcf, 0xd7, 0x36, 0x71, 0x5b, 0xed, 0xd1, 0x26, 0xc9, 0x3c, 0x21, 0x4b, 0xa2, 0xc5, 0xd7, + 0x7e, 0x10, 0x72, 0x2d, 0xab, 0x4b, 0xaa, 0x3f, 0xa6, 0x47, 0xd6, 0x8e, 0x98, 0x9c, 0x65, 0x32, + 0x5f, 0x85, 0xd7, 0xf5, 0xc1, 0x39, 0x58, 0x4e, 0xce, 0x32, 0x19, 0x53, 0x39, 0x03, 0x05, 0xb5, + 0xdd, 0x76, 0x08, 0xb9, 0x20, 0x62, 0x3b, 0x95, 0xbc, 0x2f, 0xa6, 0x8a, 0xf3, 0xd7, 0x20, 0x2d, + 0xfc, 0x40, 0x16, 0x6f, 0xe2, 0x09, 0xc5, 0x66, 0xdb, 0xef, 0xf8, 0xd9, 0x8c, 0x9c, 0x36, 0x45, + 0xe3, 0x83, 0x90, 0xd3, 0x5d, 0x25, 0x38, 0xd6, 0x8f, 0x2f, 0xc5, 0xcf, 0xa6, 0xe5, 0xac, 0xee, + 0xfa, 0x47, 0xa2, 0xa5, 0xcf, 0xc7, 0x21, 0x1f, 0x7d, 0x2c, 0x81, 0x6a, 0x90, 0x36, 0x2c, 0x4d, + 0xa5, 0xa1, 0xc5, 0x9e, 0x89, 0x9d, 0x1d, 0xf1, 0x24, 0x63, 0x79, 0x9d, 0xeb, 0xcb, 0x3e, 0x72, + 0xfe, 0xdf, 0xc4, 0x20, 0x2d, 0xc4, 0xe8, 0x24, 0x24, 0x6d, 0xd5, 0xdb, 0xa7, 0x74, 0x93, 0x95, + 0xb8, 0x14, 0x93, 0xe9, 0x35, 0x91, 0xbb, 0xb6, 0x6a, 0xd2, 0x10, 0xe0, 0x72, 0x72, 0x4d, 0xc6, + 0xd5, 0xc0, 0x6a, 0x8b, 0x6e, 0x83, 0xac, 0x4e, 0x07, 0x9b, 0x9e, 0x2b, 0xc6, 0x95, 0xcb, 0xab, + 0x5c, 0x8c, 0x9e, 0x80, 0x19, 0xcf, 0x51, 0x75, 0x23, 0xa2, 0x9b, 0xa4, 0xba, 0x92, 0x68, 0xf0, + 0x95, 0xcb, 0x70, 0x5a, 0xf0, 0xb6, 0xb0, 0xa7, 0x6a, 0xfb, 0xb8, 0x15, 0x80, 0x52, 0xf4, 0xb8, + 0xe3, 0x14, 0x57, 0xa8, 0xf1, 0x76, 0x81, 0x2d, 0xfd, 0x46, 0x0c, 0x66, 0xc4, 0xc6, 0xad, 0xe5, + 0x3b, 0x6b, 0x03, 0x40, 0x35, 0x4d, 0xcb, 0x0b, 0xbb, 0xab, 0x3f, 0x94, 0xfb, 0x70, 0xcb, 0x2b, + 0x3e, 0x48, 0x0e, 0x11, 0xcc, 0x77, 0x00, 0x82, 0x96, 0xa1, 0x6e, 0x5b, 0x84, 0x2c, 0x7f, 0xe6, + 0x44, 0x1f, 0x5c, 0xb2, 0xad, 0x3e, 0x30, 0x11, 0xd9, 0xe1, 0xa1, 0x39, 0x98, 0xdc, 0xc5, 0x6d, + 0xdd, 0xe4, 0x27, 0xc9, 0xec, 0x42, 0x1c, 0xc8, 0x24, 0xfd, 0x03, 0x99, 0xca, 0x9f, 0x81, 0x59, + 0xcd, 0xea, 0xf4, 0x9a, 0x5b, 0x91, 0x7a, 0x8e, 0x1b, 0xdc, 0x17, 0x63, 0xaf, 0x3f, 0xc5, 0x95, + 0xda, 0x96, 0xa1, 0x9a, 0xed, 0x65, 0xcb, 0x69, 0x07, 0x0f, 0x5e, 0x49, 0xc5, 0xe3, 0x86, 0x1e, + 0xbf, 0xda, 0xbb, 0xff, 0x37, 0x16, 0xfb, 0x6c, 0x3c, 0xb1, 0xda, 0xa8, 0x7c, 0x21, 0x3e, 0xbf, + 0xca, 0x80, 0x0d, 0xe1, 0x0c, 0x19, 0xef, 0x19, 0x58, 0x23, 0x1d, 0x84, 0xef, 0x3c, 0x01, 0x73, + 0x6d, 0xab, 0x6d, 0x51, 0xa6, 0x73, 0xe4, 0x17, 0x7f, 0x72, 0x9b, 0xf1, 0xa5, 0xf3, 0x23, 0x1f, + 0xf3, 0x96, 0x37, 0x61, 0x96, 0x2b, 0x2b, 0xf4, 0xd1, 0x11, 0xdb, 0xd8, 0xa0, 0x23, 0x4f, 0xd5, + 0x8a, 0xbf, 0xf4, 0x2d, 0xba, 0x7c, 0xcb, 0x33, 0x1c, 0x4a, 0xda, 0xd8, 0xde, 0xa7, 0x2c, 0xc3, + 0x89, 0x08, 0x1f, 0x9b, 0xa4, 0xd8, 0x19, 0xc1, 0xf8, 0x2f, 0x39, 0xe3, 0x6c, 0x88, 0xb1, 0xc9, + 0xa1, 0xe5, 0x2a, 0x4c, 0x1f, 0x87, 0xeb, 0x5f, 0x71, 0xae, 0x1c, 0x0e, 0x93, 0xac, 0x42, 0x81, + 0x92, 0x68, 0x5d, 0xd7, 0xb3, 0x3a, 0x34, 0x03, 0x1e, 0x4d, 0xf3, 0xaf, 0xbf, 0xc5, 0x66, 0x4d, + 0x9e, 0xc0, 0xaa, 0x3e, 0xaa, 0x5c, 0x06, 0xfa, 0xb4, 0xac, 0x85, 0x35, 0x63, 0x04, 0xc3, 0xd7, + 0xb8, 0x21, 0xbe, 0x7e, 0xf9, 0x3a, 0xcc, 0x91, 0xdf, 0x34, 0x41, 0x85, 0x2d, 0x19, 0x7d, 0x04, + 0x57, 0xfc, 0x8d, 0x8f, 0xb0, 0x89, 0x39, 0xeb, 0x13, 0x84, 0x6c, 0x0a, 0x8d, 0x62, 0x1b, 0x7b, + 0x1e, 0x76, 0x5c, 0x45, 0x35, 0x06, 0x99, 0x17, 0x3a, 0xc3, 0x28, 0xfe, 0xdc, 0x77, 0xa3, 0xa3, + 0xb8, 0xca, 0x90, 0x2b, 0x86, 0x51, 0xde, 0x81, 0x53, 0x03, 0xa2, 0x62, 0x0c, 0xce, 0x4f, 0x72, + 0xce, 0xb9, 0xbe, 0xc8, 0x20, 0xb4, 0x0d, 0x10, 0x72, 0x7f, 0x2c, 0xc7, 0xe0, 0xfc, 0x79, 0xce, + 0x89, 0x38, 0x56, 0x0c, 0x29, 0x61, 0xbc, 0x06, 0x33, 0x37, 0xb0, 0xb3, 0x6b, 0xb9, 0xfc, 0xdc, + 0x68, 0x0c, 0xba, 0x4f, 0x71, 0xba, 0x02, 0x07, 0xd2, 0x83, 0x24, 0xc2, 0x75, 0x19, 0xd2, 0x7b, + 0xaa, 0x86, 0xc7, 0xa0, 0xb8, 0xc3, 0x29, 0xa6, 0x88, 0x3e, 0x81, 0xae, 0x40, 0xae, 0x6d, 0xf1, + 0x35, 0x6a, 0x34, 0xfc, 0xd3, 0x1c, 0x9e, 0x15, 0x18, 0x4e, 0x61, 0x5b, 0x76, 0xd7, 0x20, 0x0b, + 0xd8, 0x68, 0x8a, 0xbf, 0x2e, 0x28, 0x04, 0x86, 0x53, 0x1c, 0xc3, 0xad, 0x6f, 0x0b, 0x0a, 0x37, + 0xe4, 0xcf, 0x17, 0x20, 0x6b, 0x99, 0xc6, 0xa1, 0x65, 0x8e, 0x63, 0xc4, 0x67, 0x38, 0x03, 0x70, + 0x08, 0x21, 0xb8, 0x02, 0x99, 0x71, 0x07, 0xe2, 0x6f, 0x7c, 0x57, 0x4c, 0x0f, 0x31, 0x02, 0xab, + 0x50, 0x10, 0x09, 0x4a, 0xb7, 0xcc, 0x31, 0x28, 0xfe, 0x26, 0xa7, 0xc8, 0x87, 0x60, 0xbc, 0x1b, + 0x1e, 0x76, 0xbd, 0x36, 0x1e, 0x87, 0xe4, 0xf3, 0xa2, 0x1b, 0x1c, 0xc2, 0x5d, 0xb9, 0x8b, 0x4d, + 0x6d, 0x7f, 0x3c, 0x86, 0x5f, 0x14, 0xae, 0x14, 0x18, 0x42, 0x51, 0x85, 0xe9, 0x8e, 0xea, 0xb8, + 0xfb, 0xaa, 0x31, 0xd6, 0x70, 0xfc, 0x2d, 0xce, 0x91, 0xf3, 0x41, 0xdc, 0x23, 0x5d, 0xf3, 0x38, + 0x34, 0x5f, 0x10, 0x1e, 0x09, 0xc1, 0xf8, 0xd4, 0x73, 0x3d, 0x7a, 0xc8, 0x76, 0x1c, 0xb6, 0xbf, + 0x2d, 0xa6, 0x1e, 0xc3, 0x6e, 0x84, 0x19, 0xaf, 0x40, 0xc6, 0xd5, 0xdf, 0x1c, 0x8b, 0xe6, 0x8b, + 0x62, 0xa4, 0x29, 0x80, 0x80, 0x5f, 0x83, 0xd3, 0x03, 0x97, 0x89, 0x31, 0xc8, 0xfe, 0x0e, 0x27, + 0x3b, 0x39, 0x60, 0xa9, 0xe0, 0x29, 0xe1, 0xb8, 0x94, 0x7f, 0x57, 0xa4, 0x04, 0xdc, 0xc3, 0xd5, + 0x20, 0xbb, 0x06, 0x57, 0xdd, 0x3b, 0x9e, 0xd7, 0xfe, 0x9e, 0xf0, 0x1a, 0xc3, 0x46, 0xbc, 0xb6, + 0x0d, 0x27, 0x39, 0xe3, 0xf1, 0xc6, 0xf5, 0xef, 0x8b, 0xc4, 0xca, 0xd0, 0x3b, 0xd1, 0xd1, 0xfd, + 0x51, 0x98, 0xf7, 0xdd, 0x29, 0xca, 0x53, 0x57, 0xe9, 0xa8, 0xf6, 0x18, 0xcc, 0xbf, 0xc4, 0x99, + 0x45, 0xc6, 0xf7, 0xeb, 0x5b, 0x77, 0x43, 0xb5, 0x09, 0xf9, 0xab, 0x50, 0x14, 0xe4, 0x5d, 0xd3, + 0xc1, 0x9a, 0xd5, 0x36, 0xf5, 0x37, 0x71, 0x6b, 0x0c, 0xea, 0x5f, 0xee, 0x19, 0xaa, 0x9d, 0x10, + 0x9c, 0x30, 0xaf, 0x81, 0xe4, 0xd7, 0x2a, 0x8a, 0xde, 0xb1, 0x2d, 0xc7, 0x1b, 0xc1, 0xf8, 0x25, + 0x31, 0x52, 0x3e, 0x6e, 0x8d, 0xc2, 0xca, 0x75, 0x60, 0x4f, 0x9e, 0xc7, 0x0d, 0xc9, 0x2f, 0x73, + 0xa2, 0xe9, 0x00, 0xc5, 0x13, 0x87, 0x66, 0x75, 0x6c, 0xd5, 0x19, 0x27, 0xff, 0xfd, 0x03, 0x91, + 0x38, 0x38, 0x84, 0x27, 0x0e, 0x52, 0xd1, 0x91, 0xd5, 0x7e, 0x0c, 0x86, 0xaf, 0x88, 0xc4, 0x21, + 0x30, 0x9c, 0x42, 0x14, 0x0c, 0x63, 0x50, 0xfc, 0x8a, 0xa0, 0x10, 0x18, 0x42, 0xf1, 0x72, 0xb0, + 0xd0, 0x3a, 0xb8, 0xad, 0xbb, 0x9e, 0xc3, 0x8a, 0xe2, 0xa3, 0xa9, 0xfe, 0xe1, 0x77, 0xa3, 0x45, + 0x98, 0x1c, 0x82, 0x92, 0x4c, 0xc4, 0x8f, 0x5d, 0xe9, 0x9e, 0x69, 0xb4, 0x61, 0xbf, 0x2a, 0x32, + 0x51, 0x08, 0x46, 0x6c, 0x0b, 0x55, 0x88, 0xc4, 0xed, 0x1a, 0xd9, 0x29, 0x8c, 0x41, 0xf7, 0x8f, + 0x7a, 0x8c, 0x6b, 0x0a, 0x2c, 0xe1, 0x0c, 0xd5, 0x3f, 0x5d, 0xf3, 0x00, 0x1f, 0x8e, 0x15, 0x9d, + 0xbf, 0xd6, 0x53, 0xff, 0xec, 0x30, 0x24, 0xcb, 0x21, 0x85, 0x9e, 0x7a, 0x0a, 0x8d, 0x7a, 0xcf, + 0xa8, 0xf8, 0x93, 0xef, 0xf1, 0xfe, 0x46, 0xcb, 0xa9, 0xf2, 0x3a, 0x09, 0xf2, 0x68, 0xd1, 0x33, + 0x9a, 0xec, 0x23, 0xef, 0xf9, 0x71, 0x1e, 0xa9, 0x79, 0xca, 0x57, 0x61, 0x3a, 0x52, 0xf0, 0x8c, + 0xa6, 0xfa, 0xb3, 0x9c, 0x2a, 0x17, 0xae, 0x77, 0xca, 0x17, 0x20, 0x49, 0x8a, 0x97, 0xd1, 0xf0, + 0x3f, 0xc7, 0xe1, 0x54, 0xbd, 0xfc, 0x21, 0x48, 0x8b, 0xa2, 0x65, 0x34, 0xf4, 0xcf, 0x73, 0xa8, + 0x0f, 0x21, 0x70, 0x51, 0xb0, 0x8c, 0x86, 0xff, 0x05, 0x01, 0x17, 0x10, 0x02, 0x1f, 0xdf, 0x85, + 0x5f, 0xfd, 0x8b, 0x49, 0xbe, 0xe8, 0x08, 0xdf, 0x5d, 0x81, 0x29, 0x5e, 0xa9, 0x8c, 0x46, 0x7f, + 0x8c, 0xdf, 0x5c, 0x20, 0xca, 0x97, 0x60, 0x72, 0x4c, 0x87, 0xff, 0x25, 0x0e, 0x65, 0xfa, 0xe5, + 0x2a, 0x64, 0x43, 0xd5, 0xc9, 0x68, 0xf8, 0x4f, 0x71, 0x78, 0x18, 0x45, 0x4c, 0xe7, 0xd5, 0xc9, + 0x68, 0x82, 0xbf, 0x2c, 0x4c, 0xe7, 0x08, 0xe2, 0x36, 0x51, 0x98, 0x8c, 0x46, 0x7f, 0x5c, 0x78, + 0x5d, 0x40, 0xca, 0x2f, 0x40, 0xc6, 0x5f, 0x6c, 0x46, 0xe3, 0x7f, 0x9a, 0xe3, 0x03, 0x0c, 0xf1, + 0x40, 0x68, 0xb1, 0x1b, 0x4d, 0xf1, 0x57, 0x84, 0x07, 0x42, 0x28, 0x32, 0x8d, 0x7a, 0x0b, 0x98, + 0xd1, 0x4c, 0x3f, 0x23, 0xa6, 0x51, 0x4f, 0xfd, 0x42, 0x46, 0x93, 0xe6, 0xfc, 0xd1, 0x14, 0x7f, + 0x55, 0x8c, 0x26, 0xd5, 0x27, 0x66, 0xf4, 0x56, 0x04, 0xa3, 0x39, 0x7e, 0x56, 0x98, 0xd1, 0x53, + 0x10, 0x94, 0x1b, 0x80, 0xfa, 0xab, 0x81, 0xd1, 0x7c, 0x9f, 0xe0, 0x7c, 0x33, 0x7d, 0xc5, 0x40, + 0xf9, 0x15, 0x38, 0x39, 0xb8, 0x12, 0x18, 0xcd, 0xfa, 0x73, 0xef, 0xf5, 0xec, 0xdd, 0xc2, 0x85, + 0x40, 0x79, 0x3b, 0x58, 0x52, 0xc2, 0x55, 0xc0, 0x68, 0xda, 0x4f, 0xbe, 0x17, 0x4d, 0xdc, 0xe1, + 0x22, 0xa0, 0xbc, 0x02, 0x10, 0x2c, 0xc0, 0xa3, 0xb9, 0x3e, 0xc5, 0xb9, 0x42, 0x20, 0x32, 0x35, + 0xf8, 0xfa, 0x3b, 0x1a, 0x7f, 0x47, 0x4c, 0x0d, 0x8e, 0x20, 0x53, 0x43, 0x2c, 0xbd, 0xa3, 0xd1, + 0x9f, 0x16, 0x53, 0x43, 0x40, 0x48, 0x64, 0x87, 0x56, 0xb7, 0xd1, 0x0c, 0x9f, 0x11, 0x91, 0x1d, + 0x42, 0x95, 0x37, 0x61, 0xa6, 0x6f, 0x41, 0x1c, 0x4d, 0xf5, 0x59, 0x4e, 0x25, 0xf5, 0xae, 0x87, + 0xe1, 0xc5, 0x8b, 0x2f, 0x86, 0xa3, 0xd9, 0x3e, 0xd7, 0xb3, 0x78, 0xf1, 0xb5, 0xb0, 0x7c, 0x05, + 0xd2, 0x66, 0xd7, 0x30, 0xc8, 0xe4, 0x41, 0x47, 0xbf, 0x1b, 0x58, 0xfc, 0x6f, 0xdf, 0xe7, 0xde, + 0x11, 0x80, 0xf2, 0x05, 0x98, 0xc4, 0x9d, 0x5d, 0xdc, 0x1a, 0x85, 0xfc, 0xce, 0xf7, 0x45, 0xc2, + 0x24, 0xda, 0xe5, 0x17, 0x00, 0xd8, 0xd1, 0x08, 0x7d, 0x18, 0x38, 0x02, 0xfb, 0xdf, 0xbf, 0xcf, + 0x5f, 0xc6, 0x09, 0x20, 0x01, 0x01, 0x7b, 0xb5, 0xe7, 0x68, 0x82, 0xef, 0x46, 0x09, 0xe8, 0x88, + 0x5c, 0x86, 0xa9, 0x37, 0x5c, 0xcb, 0xf4, 0xd4, 0xf6, 0x28, 0xf4, 0xff, 0xe0, 0x68, 0xa1, 0x4f, + 0x1c, 0xd6, 0xb1, 0x1c, 0xec, 0xa9, 0x6d, 0x77, 0x14, 0xf6, 0x7f, 0x72, 0xac, 0x0f, 0x20, 0x60, + 0x4d, 0x75, 0xbd, 0x71, 0xfa, 0xfd, 0x7b, 0x02, 0x2c, 0x00, 0xc4, 0x68, 0xf2, 0xfb, 0x00, 0x1f, + 0x8e, 0xc2, 0xfe, 0xbe, 0x30, 0x9a, 0xeb, 0x97, 0x3f, 0x04, 0x19, 0xf2, 0x93, 0xbd, 0x61, 0x37, + 0x02, 0xfc, 0xbf, 0x38, 0x38, 0x40, 0x90, 0x3b, 0xbb, 0x5e, 0xcb, 0xd3, 0x47, 0x3b, 0xfb, 0x7b, + 0x7c, 0xa4, 0x85, 0x7e, 0x79, 0x05, 0xb2, 0xae, 0xd7, 0x6a, 0x75, 0x79, 0x7d, 0x3a, 0x02, 0xfe, + 0xbf, 0xbf, 0xef, 0x1f, 0x59, 0xf8, 0x18, 0x32, 0xda, 0x37, 0x0f, 0x3c, 0xdb, 0xa2, 0x0f, 0x3c, + 0x46, 0x31, 0xbc, 0xc7, 0x19, 0x42, 0x90, 0x72, 0x15, 0x72, 0xa4, 0x2f, 0x0e, 0xb6, 0x31, 0x7d, + 0x3a, 0x35, 0x82, 0xe2, 0xff, 0x70, 0x07, 0x44, 0x40, 0x95, 0x1f, 0xfb, 0xda, 0xbb, 0x0b, 0xb1, + 0x6f, 0xbc, 0xbb, 0x10, 0xfb, 0xdd, 0x77, 0x17, 0x62, 0x1f, 0xff, 0xe6, 0xc2, 0xc4, 0x37, 0xbe, + 0xb9, 0x30, 0xf1, 0xdb, 0xdf, 0x5c, 0x98, 0x18, 0x7c, 0x4a, 0x0c, 0xab, 0xd6, 0xaa, 0xc5, 0xce, + 0x87, 0x5f, 0x2f, 0xb5, 0x75, 0x6f, 0xbf, 0xbb, 0xbb, 0xac, 0x59, 0x1d, 0x7a, 0x8c, 0x1b, 0x9c, + 0xd6, 0xfa, 0x9b, 0x1c, 0xf8, 0x41, 0x8c, 0x6c, 0x98, 0xa3, 0x67, 0xb9, 0xaa, 0x79, 0x38, 0xec, + 0x5b, 0x9d, 0x8b, 0x90, 0x58, 0x31, 0x0f, 0xd1, 0x69, 0x96, 0xdd, 0x94, 0xae, 0x63, 0xf0, 0x77, + 0xbc, 0xa6, 0xc8, 0xf5, 0x8e, 0x63, 0xa0, 0xb9, 0xe0, 0x45, 0xcc, 0xd8, 0xd9, 0x1c, 0x7f, 0xbb, + 0xb2, 0xf2, 0x53, 0xb1, 0xe3, 0x75, 0x23, 0xbd, 0x62, 0x1e, 0xd2, 0x5e, 0x34, 0x62, 0xaf, 0x3f, + 0x39, 0xf2, 0x90, 0xfb, 0xc0, 0xb4, 0x6e, 0x9a, 0xc4, 0x6c, 0x7b, 0x57, 0x1c, 0x70, 0x2f, 0xf4, + 0x1e, 0x70, 0xbf, 0x82, 0x0d, 0xe3, 0x25, 0xa2, 0xb7, 0x4d, 0x20, 0xbb, 0x29, 0xf6, 0x3a, 0x31, + 0xfc, 0x4c, 0x1c, 0x16, 0xfa, 0xce, 0xb2, 0x79, 0x04, 0x0c, 0x73, 0x42, 0x19, 0xd2, 0x35, 0x11, + 0x58, 0x45, 0x98, 0x72, 0xb1, 0x66, 0x99, 0x2d, 0x97, 0x3a, 0x22, 0x21, 0x8b, 0x4b, 0xe2, 0x08, + 0x53, 0x35, 0x2d, 0x97, 0xbf, 0x25, 0xc9, 0x2e, 0x2a, 0x3f, 0x7f, 0x4c, 0x47, 0x4c, 0x8b, 0x3b, + 0x09, 0x6f, 0x3c, 0x33, 0xa6, 0x37, 0x44, 0x27, 0x22, 0xc7, 0xfe, 0xe3, 0x7a, 0xe5, 0x67, 0xe3, + 0xb0, 0xd8, 0xeb, 0x15, 0x32, 0xad, 0x5c, 0x4f, 0xed, 0xd8, 0xc3, 0xdc, 0x72, 0x05, 0x32, 0xdb, + 0x42, 0xe7, 0xd8, 0x7e, 0xb9, 0x73, 0x4c, 0xbf, 0xe4, 0xfd, 0x5b, 0x09, 0xc7, 0x9c, 0x1f, 0xd3, + 0x31, 0x7e, 0x3f, 0xee, 0xca, 0x33, 0xff, 0x2f, 0x05, 0xa7, 0x35, 0xcb, 0xed, 0x58, 0xae, 0xc2, + 0x9e, 0x8f, 0xb0, 0x0b, 0xee, 0x93, 0x5c, 0xb8, 0x69, 0xf4, 0x43, 0x92, 0xd2, 0x4b, 0x30, 0xbb, + 0x46, 0x52, 0x05, 0xd9, 0x02, 0x05, 0x8f, 0x77, 0x06, 0xbe, 0x48, 0xba, 0x14, 0xa9, 0xf6, 0xf9, + 0xe3, 0xa5, 0xb0, 0xa8, 0xf4, 0x93, 0x31, 0x90, 0x9a, 0x9a, 0x6a, 0xa8, 0xce, 0x1f, 0x96, 0x0a, + 0x5d, 0x02, 0xa0, 0x1f, 0x20, 0x05, 0x5f, 0x0c, 0xe5, 0xcf, 0x17, 0x97, 0xc3, 0x9d, 0x5b, 0x66, + 0x77, 0xa2, 0x9f, 0x23, 0x64, 0xa8, 0x2e, 0xf9, 0xf9, 0xf8, 0xab, 0x00, 0x41, 0x03, 0xba, 0x0f, + 0x4e, 0x35, 0xab, 0x2b, 0xeb, 0x2b, 0xb2, 0xc2, 0xde, 0x6c, 0xdf, 0x6c, 0x36, 0xea, 0xd5, 0xb5, + 0xab, 0x6b, 0xf5, 0x9a, 0x34, 0x81, 0x4e, 0x02, 0x0a, 0x37, 0xfa, 0x2f, 0xa5, 0x9c, 0x80, 0x99, + 0xb0, 0x9c, 0xbd, 0x1e, 0x1f, 0x27, 0x65, 0xa2, 0xde, 0xb1, 0x0d, 0x4c, 0x9f, 0xfb, 0x29, 0xba, + 0xf0, 0xda, 0xe8, 0x0a, 0xe4, 0xd7, 0xff, 0x2d, 0x7b, 0x65, 0x7a, 0x36, 0x80, 0xfb, 0x3e, 0x2f, + 0xaf, 0xc3, 0x8c, 0xaa, 0x69, 0xd8, 0x8e, 0x50, 0x8e, 0xc8, 0xd3, 0x84, 0x90, 0x3e, 0xc9, 0xe4, + 0xc8, 0x80, 0xed, 0x12, 0xa4, 0x5c, 0xda, 0xfb, 0x51, 0x14, 0x5f, 0xe7, 0x14, 0x5c, 0xbd, 0x6c, + 0xc2, 0x0c, 0x29, 0xfb, 0x54, 0x07, 0x87, 0xcc, 0x38, 0xfa, 0x90, 0xe1, 0x1f, 0x7f, 0xe9, 0x69, + 0xfa, 0x5c, 0xf3, 0xc1, 0xe8, 0xb0, 0x0c, 0x08, 0x27, 0x59, 0xe2, 0xdc, 0x81, 0xa1, 0x18, 0xf2, + 0xe2, 0x7e, 0xdc, 0xe0, 0xa3, 0x6f, 0xf6, 0x4f, 0xf8, 0xcd, 0x16, 0x06, 0xc5, 0x40, 0xe8, 0x4e, + 0xd3, 0x9c, 0x95, 0x35, 0x54, 0xea, 0xc3, 0xe6, 0xf4, 0xeb, 0x4f, 0x84, 0x96, 0x26, 0x46, 0xc9, + 0xff, 0x3c, 0x45, 0x99, 0xaf, 0x84, 0x6f, 0xe3, 0xcf, 0xbd, 0xdf, 0x4a, 0xc0, 0x02, 0x57, 0xde, + 0x55, 0x5d, 0x7c, 0xee, 0xc6, 0x33, 0xbb, 0xd8, 0x53, 0x9f, 0x39, 0xa7, 0x59, 0xba, 0xc8, 0xd5, + 0xb3, 0x7c, 0x3a, 0x92, 0xf6, 0x65, 0xde, 0x3e, 0x3f, 0xf0, 0x69, 0xe6, 0xfc, 0xf0, 0x69, 0x5c, + 0xda, 0x81, 0x64, 0xd5, 0xd2, 0x4d, 0x92, 0xaa, 0x5a, 0xd8, 0xb4, 0x3a, 0x7c, 0xf6, 0xb0, 0x0b, + 0xf4, 0x0c, 0xa4, 0xd4, 0x8e, 0xd5, 0x35, 0x3d, 0x36, 0x73, 0x2a, 0xa7, 0xbf, 0xf6, 0xce, 0xe2, + 0xc4, 0xbf, 0x7b, 0x67, 0x31, 0xb1, 0x66, 0x7a, 0xbf, 0xf9, 0xe5, 0xa7, 0x80, 0x53, 0xad, 0x99, + 0x9e, 0xcc, 0x15, 0xcb, 0xc9, 0x6f, 0xbf, 0xbd, 0x18, 0x2b, 0xbd, 0x0a, 0x53, 0x35, 0xac, 0xdd, + 0x0d, 0x73, 0x0d, 0x6b, 0x21, 0xe6, 0x1a, 0xd6, 0x7a, 0x98, 0x2f, 0x41, 0x7a, 0xcd, 0xf4, 0xd8, + 0x5b, 0xe8, 0x4f, 0x40, 0x42, 0x37, 0xd9, 0x8b, 0x8d, 0x47, 0xda, 0x46, 0xb4, 0x08, 0xb0, 0x86, + 0x35, 0x1f, 0xd8, 0xc2, 0x5a, 0x2f, 0xb0, 0xff, 0xd6, 0x44, 0xab, 0x52, 0xfb, 0xed, 0xff, 0xbc, + 0x30, 0xf1, 0xd6, 0xbb, 0x0b, 0x13, 0x43, 0x87, 0xb8, 0x34, 0x74, 0x88, 0xdd, 0xd6, 0x01, 0xcb, + 0xc8, 0xfe, 0xc8, 0x7e, 0x21, 0x09, 0x0f, 0xd0, 0x8f, 0x93, 0x9c, 0x8e, 0x6e, 0x7a, 0xe7, 0x34, + 0xe7, 0xd0, 0xf6, 0x68, 0xb9, 0x62, 0xed, 0xf1, 0x81, 0x9d, 0x09, 0x9a, 0x97, 0x59, 0xf3, 0xe0, + 0x61, 0x2d, 0xed, 0xc1, 0x64, 0x83, 0xe0, 0x88, 0x8b, 0x3d, 0xcb, 0x53, 0x0d, 0xbe, 0xfe, 0xb0, + 0x0b, 0x22, 0x65, 0x1f, 0x34, 0xc5, 0x99, 0x54, 0x17, 0xdf, 0x32, 0x19, 0x58, 0xdd, 0x63, 0xef, + 0x85, 0x27, 0x68, 0xe1, 0x92, 0x26, 0x02, 0xfa, 0x0a, 0xf8, 0x1c, 0x4c, 0xaa, 0x5d, 0xf6, 0x02, + 0x43, 0x82, 0x54, 0x34, 0xf4, 0xa2, 0xf4, 0x12, 0x4c, 0xf1, 0xc7, 0xa8, 0x48, 0x82, 0xc4, 0x01, + 0x3e, 0xa4, 0xf7, 0xc9, 0xc9, 0xe4, 0x27, 0x5a, 0x86, 0x49, 0x6a, 0x3c, 0xff, 0xe0, 0xa5, 0xb8, + 0xdc, 0x67, 0xfd, 0x32, 0x35, 0x52, 0x66, 0x6a, 0xa5, 0x6b, 0x90, 0xae, 0x59, 0x1d, 0xdd, 0xb4, + 0xa2, 0x6c, 0x19, 0xc6, 0x46, 0x6d, 0xb6, 0xbb, 0x3c, 0x2a, 0x64, 0x76, 0x81, 0x4e, 0x42, 0x8a, + 0x7d, 0x27, 0xc0, 0x5f, 0xc2, 0xe0, 0x57, 0xa5, 0x2a, 0x4c, 0x51, 0xee, 0x2d, 0x9b, 0x24, 0x7f, + 0xff, 0x95, 0xcc, 0x0c, 0xff, 0x6a, 0x8c, 0xd3, 0xc7, 0x03, 0x63, 0x11, 0x24, 0x5b, 0xaa, 0xa7, + 0xf2, 0x7e, 0xd3, 0xdf, 0xa5, 0x0f, 0x43, 0x9a, 0x93, 0xb8, 0xe8, 0x3c, 0x24, 0x2c, 0xdb, 0xe5, + 0xaf, 0x51, 0xcc, 0x0f, 0xeb, 0xca, 0x96, 0x5d, 0x49, 0x92, 0x98, 0x91, 0x89, 0x72, 0x45, 0x1e, + 0x1a, 0x16, 0xcf, 0x87, 0xc2, 0x22, 0x34, 0xe4, 0xa1, 0x9f, 0x6c, 0x48, 0xfb, 0xc2, 0xc1, 0x0f, + 0x96, 0xcf, 0xc4, 0x61, 0x21, 0xd4, 0x7a, 0x03, 0x3b, 0xae, 0x6e, 0x99, 0x2c, 0xa2, 0x78, 0xb4, + 0xa0, 0x90, 0x91, 0xbc, 0x7d, 0x48, 0xb8, 0x7c, 0x08, 0x12, 0x2b, 0xb6, 0x8d, 0xe6, 0x21, 0x4d, + 0xaf, 0x35, 0x8b, 0xc5, 0x4b, 0x52, 0xf6, 0xaf, 0x49, 0x9b, 0x6b, 0xed, 0x79, 0x37, 0x55, 0xc7, + 0xff, 0x94, 0x4e, 0x5c, 0x97, 0x2e, 0x43, 0xa6, 0x6a, 0x99, 0x2e, 0x36, 0xdd, 0x2e, 0xad, 0x6c, + 0x76, 0x0d, 0x4b, 0x3b, 0xe0, 0x0c, 0xec, 0x82, 0x38, 0x5c, 0xb5, 0x6d, 0x8a, 0x4c, 0xca, 0xe4, + 0x27, 0x9b, 0xb3, 0x95, 0xe6, 0x50, 0x17, 0x5d, 0x3e, 0xbe, 0x8b, 0x78, 0x27, 0x7d, 0x1f, 0xfd, + 0x20, 0x06, 0xf7, 0xf7, 0x4f, 0xa8, 0x03, 0x7c, 0xe8, 0x1e, 0x77, 0x3e, 0xbd, 0x0a, 0x99, 0x06, + 0xfd, 0x9e, 0xfd, 0x25, 0x7c, 0x88, 0xe6, 0x61, 0x0a, 0xb7, 0xce, 0x5f, 0xb8, 0xf0, 0xcc, 0x65, + 0x16, 0xed, 0x2f, 0x4e, 0xc8, 0x42, 0x80, 0x16, 0x20, 0xe3, 0x62, 0xcd, 0x3e, 0x7f, 0xe1, 0xe2, + 0xc1, 0x33, 0x2c, 0xbc, 0x5e, 0x9c, 0x90, 0x03, 0x51, 0x39, 0x4d, 0x7a, 0xfd, 0xed, 0xcf, 0x2c, + 0xc6, 0x2a, 0x93, 0x90, 0x70, 0xbb, 0x9d, 0xf7, 0x35, 0x46, 0x3e, 0x39, 0x09, 0x4b, 0x61, 0x24, + 0xad, 0xff, 0x6e, 0xa8, 0x86, 0xde, 0x52, 0x83, 0xff, 0x44, 0x20, 0x85, 0x7c, 0x40, 0x35, 0x86, + 0xac, 0x14, 0x47, 0x7a, 0xb2, 0xf4, 0xcb, 0x31, 0xc8, 0x5d, 0x17, 0xcc, 0x4d, 0xec, 0xa1, 0x2b, + 0x00, 0xfe, 0x9d, 0xc4, 0xb4, 0xb9, 0x6f, 0xb9, 0xf7, 0x5e, 0xcb, 0x3e, 0x46, 0x0e, 0xa9, 0xa3, + 0x4b, 0x34, 0x10, 0x6d, 0xcb, 0xe5, 0x9f, 0x57, 0x8d, 0x80, 0xfa, 0xca, 0xe8, 0x49, 0x40, 0x34, + 0xc3, 0x29, 0x37, 0x2c, 0x4f, 0x37, 0xdb, 0x8a, 0x6d, 0xdd, 0xe4, 0x1f, 0xad, 0x26, 0x64, 0x89, + 0xb6, 0x5c, 0xa7, 0x0d, 0x0d, 0x22, 0x27, 0x46, 0x67, 0x7c, 0x16, 0x52, 0xac, 0xab, 0xad, 0x96, + 0x83, 0x5d, 0x97, 0x27, 0x31, 0x71, 0x89, 0xae, 0xc0, 0x94, 0xdd, 0xdd, 0x55, 0x44, 0xc6, 0xc8, + 0x9e, 0xbf, 0x7f, 0xd0, 0xfc, 0x17, 0xf1, 0xc1, 0x33, 0x40, 0xca, 0xee, 0xee, 0x92, 0x68, 0x79, + 0x10, 0x72, 0x03, 0x8c, 0xc9, 0xde, 0x08, 0xec, 0xa0, 0xff, 0x46, 0x81, 0xf7, 0x40, 0xb1, 0x1d, + 0xdd, 0x72, 0x74, 0xef, 0x90, 0xbe, 0x0b, 0x95, 0x90, 0x25, 0xd1, 0xd0, 0xe0, 0xf2, 0xd2, 0x01, + 0x14, 0x9a, 0xb4, 0x88, 0x0b, 0x2c, 0xbf, 0x10, 0xd8, 0x17, 0x1b, 0x6d, 0xdf, 0x50, 0xcb, 0xe2, + 0x7d, 0x96, 0x55, 0x5e, 0x1e, 0x1a, 0x9d, 0x97, 0x8e, 0x1f, 0x9d, 0xd1, 0xd5, 0xee, 0xf7, 0x4e, + 0x47, 0x26, 0x27, 0x0b, 0xce, 0x70, 0xfa, 0x1a, 0x37, 0x30, 0x47, 0xed, 0xd1, 0xe6, 0x8f, 0x5e, + 0x54, 0xe7, 0x47, 0xa4, 0xd1, 0xf9, 0x91, 0x53, 0xa8, 0x74, 0x19, 0xa6, 0x1b, 0xaa, 0xe3, 0x35, + 0xb1, 0xf7, 0x22, 0x56, 0x5b, 0xd8, 0x89, 0xae, 0xba, 0xd3, 0x62, 0xd5, 0x45, 0x90, 0xa4, 0x4b, + 0x2b, 0x5b, 0x75, 0xe8, 0xef, 0xd2, 0x3e, 0x24, 0xe9, 0xfb, 0x90, 0xfe, 0x8a, 0xcc, 0x11, 0x6c, + 0x45, 0x26, 0xb9, 0xf4, 0xd0, 0xc3, 0xae, 0x38, 0x46, 0xa0, 0x17, 0xe8, 0x39, 0xb1, 0xae, 0x26, + 0x8e, 0x5e, 0x57, 0x79, 0x20, 0xf2, 0xd5, 0xd5, 0x80, 0xa9, 0x0a, 0x49, 0xc5, 0x6b, 0x35, 0xdf, + 0x90, 0x58, 0x60, 0x08, 0xda, 0x80, 0x82, 0xad, 0x3a, 0x1e, 0xfd, 0x34, 0x64, 0x9f, 0xf6, 0x82, + 0xc7, 0xfa, 0x62, 0xff, 0xcc, 0x8b, 0x74, 0x96, 0xdf, 0x65, 0xda, 0x0e, 0x0b, 0x4b, 0xff, 0x25, + 0x09, 0x29, 0xee, 0x8c, 0x0f, 0xc1, 0x14, 0x77, 0x2b, 0x8f, 0xce, 0x07, 0x96, 0xfb, 0x17, 0xa6, + 0x65, 0x7f, 0x01, 0xe1, 0x7c, 0x02, 0x83, 0x1e, 0x85, 0xb4, 0xb6, 0xaf, 0xea, 0xa6, 0xa2, 0xb7, + 0x78, 0x41, 0x98, 0x7d, 0xf7, 0x9d, 0xc5, 0xa9, 0x2a, 0x91, 0xad, 0xd5, 0xe4, 0x29, 0xda, 0xb8, + 0xd6, 0x22, 0x95, 0xc0, 0x3e, 0xd6, 0xdb, 0xfb, 0x1e, 0x9f, 0x61, 0xfc, 0x0a, 0x3d, 0x0f, 0x49, + 0x12, 0x10, 0xfc, 0xc3, 0xc1, 0xf9, 0xbe, 0x0a, 0xdf, 0xdf, 0x42, 0x57, 0xd2, 0xe4, 0xc6, 0x1f, + 0xff, 0x4f, 0x8b, 0x31, 0x99, 0x22, 0x50, 0x15, 0xa6, 0x0d, 0xd5, 0xf5, 0x14, 0xba, 0x82, 0x91, + 0xdb, 0x4f, 0x52, 0x8a, 0xd3, 0xfd, 0x0e, 0xe1, 0x8e, 0xe5, 0xa6, 0x67, 0x09, 0x8a, 0x89, 0x5a, + 0xe8, 0x2c, 0x48, 0x94, 0x44, 0xb3, 0x3a, 0x1d, 0xdd, 0x63, 0xb5, 0x55, 0x8a, 0xfa, 0x3d, 0x4f, + 0xe4, 0x55, 0x2a, 0xa6, 0x15, 0xd6, 0x7d, 0x90, 0xa1, 0x9f, 0x2a, 0x51, 0x15, 0xf6, 0x12, 0x6e, + 0x9a, 0x08, 0x68, 0xe3, 0x19, 0x28, 0x04, 0xf9, 0x91, 0xa9, 0xa4, 0x19, 0x4b, 0x20, 0xa6, 0x8a, + 0x4f, 0xc3, 0x9c, 0x89, 0x6f, 0xd1, 0xd7, 0x82, 0x23, 0xda, 0x19, 0xaa, 0x8d, 0x48, 0xdb, 0xf5, + 0x28, 0xe2, 0x11, 0xc8, 0x6b, 0xc2, 0xf9, 0x4c, 0x17, 0xa8, 0xee, 0xb4, 0x2f, 0xa5, 0x6a, 0xa7, + 0x21, 0xad, 0xda, 0x36, 0x53, 0xc8, 0xf2, 0xfc, 0x68, 0xdb, 0xb4, 0xe9, 0x71, 0x98, 0xa1, 0x7d, + 0x74, 0xb0, 0xdb, 0x35, 0x3c, 0x4e, 0x92, 0xa3, 0x3a, 0x05, 0xd2, 0x20, 0x33, 0x39, 0xd5, 0x7d, + 0x08, 0xa6, 0xf1, 0x0d, 0xbd, 0x85, 0x4d, 0x0d, 0x33, 0xbd, 0x69, 0xaa, 0x97, 0x13, 0x42, 0xaa, + 0xf4, 0x18, 0xf8, 0x79, 0x4f, 0x11, 0x39, 0x39, 0xcf, 0xf8, 0x84, 0x7c, 0x85, 0x89, 0x4b, 0x45, + 0x48, 0xd6, 0x54, 0x4f, 0x25, 0x05, 0x86, 0x77, 0x8b, 0x2d, 0x34, 0x39, 0x99, 0xfc, 0x2c, 0x7d, + 0x3b, 0x0e, 0xc9, 0xeb, 0x96, 0x87, 0xd1, 0xb3, 0xa1, 0x02, 0x30, 0x3f, 0x28, 0x9e, 0x9b, 0x7a, + 0xdb, 0xc4, 0xad, 0x0d, 0xb7, 0x1d, 0xfa, 0xbf, 0x02, 0x41, 0x38, 0xc5, 0x23, 0xe1, 0x34, 0x07, + 0x93, 0x8e, 0xd5, 0x35, 0x5b, 0xe2, 0xfd, 0x55, 0x7a, 0x81, 0xea, 0x90, 0xf6, 0xa3, 0x24, 0x39, + 0x2a, 0x4a, 0x0a, 0x24, 0x4a, 0x48, 0x0c, 0x73, 0x81, 0x3c, 0xb5, 0xcb, 0x83, 0xa5, 0x02, 0x19, + 0x3f, 0x79, 0xf1, 0x68, 0x1b, 0x2f, 0x60, 0x03, 0x18, 0x59, 0x4c, 0xfc, 0xb1, 0xf7, 0x9d, 0xc7, + 0x22, 0x4e, 0xf2, 0x1b, 0xb8, 0xf7, 0x22, 0x61, 0xc5, 0xff, 0xc7, 0xc1, 0x14, 0xed, 0x57, 0x10, + 0x56, 0xec, 0xff, 0x1c, 0xdc, 0x0f, 0x19, 0x57, 0x6f, 0x9b, 0xaa, 0xd7, 0x75, 0x30, 0x8f, 0xbc, + 0x40, 0x50, 0xfa, 0x6a, 0x0c, 0x52, 0x2c, 0x92, 0x43, 0x7e, 0x8b, 0x0d, 0xf6, 0x5b, 0x7c, 0x98, + 0xdf, 0x12, 0x77, 0xef, 0xb7, 0x15, 0x00, 0xdf, 0x18, 0x97, 0x7f, 0x7a, 0x3e, 0xa0, 0x62, 0x60, + 0x26, 0x36, 0xf5, 0x36, 0x9f, 0xa8, 0x21, 0x50, 0xe9, 0x3f, 0xc6, 0x48, 0x11, 0xcb, 0xdb, 0xd1, + 0x0a, 0x4c, 0x0b, 0xbb, 0x94, 0x3d, 0x43, 0x6d, 0xf3, 0xd8, 0x79, 0x60, 0xa8, 0x71, 0x57, 0x0d, + 0xb5, 0x2d, 0x67, 0xb9, 0x3d, 0xe4, 0x62, 0xf0, 0x38, 0xc4, 0x87, 0x8c, 0x43, 0x64, 0xe0, 0x13, + 0x77, 0x37, 0xf0, 0x91, 0x21, 0x4a, 0xf6, 0x0e, 0xd1, 0x97, 0xe2, 0x74, 0x33, 0x63, 0x5b, 0xae, + 0x6a, 0x7c, 0x10, 0x33, 0xe2, 0x3e, 0xc8, 0xd8, 0x96, 0xa1, 0xb0, 0x16, 0xf6, 0x5e, 0x77, 0xda, + 0xb6, 0x0c, 0xb9, 0x6f, 0xd8, 0x27, 0xef, 0xd1, 0x74, 0x49, 0xdd, 0x03, 0xaf, 0x4d, 0xf5, 0x7a, + 0xcd, 0x81, 0x1c, 0x73, 0x05, 0x5f, 0xcb, 0x9e, 0x26, 0x3e, 0xa0, 0x8b, 0x63, 0xac, 0x7f, 0xed, + 0x65, 0x66, 0x33, 0x4d, 0x99, 0xeb, 0x11, 0x04, 0x4b, 0xfd, 0x83, 0x76, 0xc1, 0xe1, 0xb0, 0x94, + 0xb9, 0x5e, 0xe9, 0xaf, 0xc5, 0x00, 0xd6, 0x89, 0x67, 0x69, 0x7f, 0xc9, 0x2a, 0xe4, 0x52, 0x13, + 0x94, 0xc8, 0x9d, 0x17, 0x86, 0x0d, 0x1a, 0xbf, 0x7f, 0xce, 0x0d, 0xdb, 0x5d, 0x85, 0xe9, 0x20, + 0x18, 0x5d, 0x2c, 0x8c, 0x59, 0x38, 0xa2, 0xaa, 0x6e, 0x62, 0x4f, 0xce, 0xdd, 0x08, 0x5d, 0x95, + 0xfe, 0x79, 0x0c, 0x32, 0xd4, 0xa6, 0x0d, 0xec, 0xa9, 0x91, 0x31, 0x8c, 0xdd, 0xfd, 0x18, 0x3e, + 0x00, 0xc0, 0x68, 0x5c, 0xfd, 0x4d, 0xcc, 0x23, 0x2b, 0x43, 0x25, 0x4d, 0xfd, 0x4d, 0x8c, 0x2e, + 0xfa, 0x0e, 0x4f, 0x1c, 0xed, 0x70, 0x51, 0x75, 0x73, 0xb7, 0x9f, 0x82, 0x29, 0xfa, 0xaf, 0x9a, + 0x6e, 0xb9, 0xbc, 0x90, 0x4e, 0x99, 0xdd, 0xce, 0xf6, 0x2d, 0xb7, 0xf4, 0x06, 0x4c, 0x6d, 0xdf, + 0x62, 0x67, 0x23, 0xf7, 0x41, 0xc6, 0xb1, 0x2c, 0xbe, 0x26, 0xb3, 0x5a, 0x28, 0x4d, 0x04, 0x74, + 0x09, 0x12, 0xe7, 0x01, 0xf1, 0xe0, 0x3c, 0x20, 0x38, 0xd0, 0x48, 0x8c, 0x75, 0xa0, 0xf1, 0xf8, + 0x6f, 0xc5, 0x20, 0x1b, 0xca, 0x0f, 0xe8, 0x19, 0x38, 0x51, 0x59, 0xdf, 0xaa, 0xbe, 0xa4, 0xac, + 0xd5, 0x94, 0xab, 0xeb, 0x2b, 0xab, 0xc1, 0x97, 0x4b, 0xf3, 0x27, 0x6f, 0xdf, 0x59, 0x42, 0x21, + 0xdd, 0x1d, 0x93, 0x9e, 0xd3, 0xa3, 0x73, 0x30, 0x17, 0x85, 0xac, 0x54, 0x9a, 0xf5, 0xcd, 0x6d, + 0x29, 0x36, 0x7f, 0xe2, 0xf6, 0x9d, 0xa5, 0x99, 0x10, 0x62, 0x65, 0xd7, 0xc5, 0xa6, 0xd7, 0x0f, + 0xa8, 0x6e, 0x6d, 0x6c, 0xac, 0x6d, 0x4b, 0xf1, 0x3e, 0x00, 0x4f, 0xd8, 0x8f, 0xc1, 0x4c, 0x14, + 0xb0, 0xb9, 0xb6, 0x2e, 0x25, 0xe6, 0xd1, 0xed, 0x3b, 0x4b, 0xf9, 0x90, 0xf6, 0xa6, 0x6e, 0xcc, + 0xa7, 0x3f, 0xfa, 0xb9, 0x85, 0x89, 0x5f, 0xfc, 0x85, 0x85, 0x18, 0xe9, 0xd9, 0x74, 0x24, 0x47, + 0xa0, 0x27, 0xe1, 0x54, 0x73, 0x6d, 0x75, 0xb3, 0x5e, 0x53, 0x36, 0x9a, 0xab, 0xe2, 0xa4, 0x5b, + 0xf4, 0xae, 0x70, 0xfb, 0xce, 0x52, 0x96, 0x77, 0x69, 0x98, 0x76, 0x43, 0xae, 0x5f, 0xdf, 0xda, + 0xae, 0x4b, 0x31, 0xa6, 0xdd, 0x70, 0xf0, 0x0d, 0xcb, 0x63, 0xff, 0xcb, 0xed, 0x69, 0x38, 0x3d, + 0x40, 0xdb, 0xef, 0xd8, 0xcc, 0xed, 0x3b, 0x4b, 0xd3, 0x0d, 0x07, 0xb3, 0xf9, 0x43, 0x11, 0xcb, + 0x50, 0xec, 0x47, 0x6c, 0x35, 0xb6, 0x9a, 0x2b, 0xeb, 0xd2, 0xd2, 0xbc, 0x74, 0xfb, 0xce, 0x52, + 0x4e, 0x24, 0x43, 0xa2, 0x1f, 0xf4, 0xec, 0xfd, 0xdc, 0xf1, 0x7c, 0x76, 0x19, 0x1e, 0xe6, 0x67, + 0x80, 0xae, 0xa7, 0x1e, 0xe8, 0x66, 0xdb, 0x3f, 0xbc, 0xe5, 0xd7, 0x7c, 0xe7, 0x73, 0x92, 0x9f, + 0x33, 0x0a, 0xe9, 0x88, 0x23, 0xdc, 0xa1, 0x4f, 0x2e, 0xe7, 0x47, 0x3c, 0xd4, 0x1b, 0xbd, 0x75, + 0x1a, 0x7e, 0x3c, 0x3c, 0x3f, 0xe2, 0x10, 0x7a, 0xfe, 0xc8, 0xcd, 0x5d, 0xe9, 0x63, 0x31, 0xc8, + 0xbf, 0xa8, 0xbb, 0x9e, 0xe5, 0xe8, 0x9a, 0x6a, 0xd0, 0xef, 0x95, 0x2e, 0x8e, 0x9b, 0x5b, 0x7b, + 0xa6, 0xfa, 0x0b, 0x90, 0xba, 0xa1, 0x1a, 0x2c, 0xa9, 0x85, 0x9f, 0x05, 0xf4, 0xba, 0x2f, 0x48, + 0x6d, 0x82, 0x80, 0xc1, 0x4a, 0xbf, 0x12, 0x87, 0xd3, 0x64, 0xfb, 0xd1, 0xa0, 0xdb, 0x62, 0x99, + 0x7f, 0xe2, 0xc4, 0xac, 0x3b, 0x44, 0x55, 0x90, 0x2c, 0x1b, 0x3b, 0x91, 0x65, 0x9c, 0x9d, 0x0e, + 0x17, 0x7f, 0xf3, 0xcb, 0x4f, 0xcd, 0xf1, 0x7b, 0xf1, 0x85, 0x9c, 0xbd, 0x48, 0x28, 0x17, 0x04, + 0x42, 0xac, 0xef, 0xd7, 0xa1, 0x60, 0x19, 0x2d, 0x85, 0x54, 0xd4, 0x8a, 0xdd, 0xdd, 0x0d, 0x4e, + 0x12, 0xe6, 0xfa, 0xd6, 0xab, 0x15, 0xf3, 0xb0, 0x52, 0xfc, 0x7a, 0xc0, 0x1c, 0x6c, 0xdf, 0x89, + 0x71, 0xd3, 0x96, 0xd1, 0xe2, 0xb6, 0x1e, 0xe0, 0x43, 0xc2, 0x6b, 0xe2, 0x9b, 0x11, 0xde, 0xc4, + 0xdd, 0xf1, 0x9a, 0xf8, 0x66, 0x88, 0xf7, 0x11, 0xc8, 0x3b, 0xc4, 0x0f, 0x74, 0xd5, 0xa1, 0x6b, + 0x3e, 0xcb, 0xa2, 0xd3, 0x5c, 0xfa, 0x22, 0x15, 0x96, 0xbe, 0x18, 0x87, 0x02, 0x4d, 0x23, 0x2e, + 0xfb, 0x27, 0x66, 0x64, 0x77, 0xda, 0x80, 0xa4, 0xa3, 0x7a, 0xfc, 0xb8, 0xb5, 0xf2, 0x23, 0xfc, + 0x04, 0xfd, 0xd1, 0xd1, 0xe7, 0xe0, 0xcb, 0xfd, 0x87, 0xec, 0x94, 0x09, 0xbd, 0x02, 0xe9, 0x8e, + 0x7a, 0x4b, 0xa1, 0xac, 0xf1, 0x7b, 0xc0, 0x3a, 0xd5, 0x51, 0x6f, 0x11, 0x5b, 0x51, 0x0b, 0x0a, + 0x84, 0x58, 0xdb, 0x57, 0xcd, 0x36, 0x66, 0xfc, 0x89, 0x7b, 0xc0, 0x3f, 0xdd, 0x51, 0x6f, 0x55, + 0x29, 0x27, 0xb9, 0x4b, 0x39, 0xfd, 0x89, 0xb7, 0x17, 0x27, 0xe8, 0x03, 0x8a, 0x5f, 0x8b, 0x01, + 0x04, 0xee, 0x42, 0x7f, 0x12, 0x24, 0xcd, 0xbf, 0xa2, 0xb7, 0x77, 0x79, 0xe8, 0x9f, 0x19, 0x16, + 0xc2, 0x3d, 0xce, 0x66, 0x25, 0xcd, 0x37, 0xde, 0x59, 0x8c, 0xc9, 0x05, 0xad, 0x67, 0x1c, 0xea, + 0x90, 0xed, 0xda, 0x2d, 0xd5, 0xc3, 0x0a, 0xdd, 0xfe, 0xc6, 0x8f, 0x51, 0x1e, 0x01, 0x03, 0x92, + 0xa6, 0x90, 0xf5, 0x5f, 0x8c, 0x41, 0xb6, 0x16, 0x7a, 0x3c, 0x5a, 0x84, 0xa9, 0x8e, 0x65, 0xea, + 0x07, 0x7c, 0xc2, 0x66, 0x64, 0x71, 0x89, 0xe6, 0x21, 0xcd, 0xbe, 0x71, 0xf5, 0x0e, 0xc5, 0x59, + 0xb1, 0xb8, 0x26, 0xa8, 0x9b, 0x78, 0xd7, 0xd5, 0x85, 0xaf, 0x65, 0x71, 0x49, 0x36, 0x7d, 0x2e, + 0xd6, 0xba, 0x8e, 0xee, 0x1d, 0x92, 0x80, 0xf6, 0x54, 0xcd, 0xe3, 0x5f, 0x4b, 0x16, 0x84, 0xbc, + 0xca, 0xc4, 0x84, 0xa4, 0x85, 0x3d, 0x55, 0x37, 0xdc, 0x22, 0x7b, 0x84, 0x28, 0x2e, 0x43, 0xe6, + 0xfe, 0x7a, 0x2a, 0x7c, 0xb8, 0x77, 0x4f, 0x66, 0xf1, 0x6b, 0x64, 0xc0, 0xc4, 0x4e, 0xf9, 0x0f, + 0x35, 0x8d, 0x0b, 0x3e, 0x0f, 0x9f, 0x70, 0x27, 0x21, 0xf5, 0x86, 0xaa, 0x1b, 0xe2, 0xd3, 0x7d, + 0x99, 0x5f, 0xa1, 0x32, 0xa4, 0x5c, 0x4f, 0xf5, 0xba, 0x2e, 0xff, 0x17, 0x7b, 0xa5, 0x61, 0x91, + 0x51, 0xb1, 0xcc, 0x56, 0x93, 0x6a, 0xca, 0x1c, 0x81, 0xb6, 0x21, 0xe5, 0x59, 0x07, 0xd8, 0xe4, + 0x4e, 0x3a, 0x56, 0x54, 0x0f, 0x78, 0x8a, 0xc7, 0xb8, 0x50, 0x1b, 0xa4, 0x16, 0x36, 0x70, 0x9b, + 0x95, 0x92, 0xfb, 0x2a, 0xd9, 0x71, 0xa5, 0xee, 0xc1, 0xac, 0x29, 0xf8, 0xac, 0x4d, 0x4a, 0x8a, + 0x5e, 0x8a, 0x3e, 0xa0, 0x67, 0xff, 0x8f, 0xf2, 0xa1, 0x61, 0xfd, 0x0f, 0x45, 0xa6, 0x38, 0x86, + 0x09, 0x3f, 0xcb, 0x7f, 0x0c, 0xa4, 0xae, 0xb9, 0x6b, 0x99, 0xf4, 0x03, 0x5b, 0x9e, 0xd2, 0xd2, + 0x34, 0xa5, 0x15, 0x7c, 0x39, 0x4b, 0x6a, 0xe8, 0x25, 0xc8, 0x07, 0xaa, 0x74, 0xee, 0x64, 0x8e, + 0x31, 0x77, 0xa6, 0x7d, 0x2c, 0x69, 0x45, 0x2f, 0x02, 0x04, 0x13, 0x93, 0x1e, 0xac, 0x64, 0x87, + 0x8f, 0x61, 0x30, 0xbb, 0xc5, 0x06, 0x35, 0xc0, 0x22, 0x03, 0x66, 0x3b, 0xba, 0xa9, 0xb8, 0xd8, + 0xd8, 0x53, 0xb8, 0xab, 0x08, 0x65, 0xf6, 0x1e, 0x0c, 0xed, 0x4c, 0x47, 0x37, 0x9b, 0xd8, 0xd8, + 0xab, 0xf9, 0xb4, 0xe5, 0xdc, 0x47, 0xdf, 0x5e, 0x9c, 0xe0, 0x73, 0x69, 0xa2, 0xd4, 0xa0, 0x87, + 0xfb, 0x7c, 0x1a, 0x60, 0x17, 0x5d, 0x84, 0x8c, 0x2a, 0x2e, 0xe8, 0x91, 0xcb, 0x51, 0xd3, 0x28, + 0x50, 0x65, 0xb3, 0xf3, 0xad, 0xff, 0xb0, 0x14, 0x2b, 0xfd, 0x42, 0x0c, 0x52, 0xb5, 0xeb, 0x0d, + 0x55, 0x77, 0x50, 0x1d, 0x66, 0x82, 0x80, 0x1a, 0x77, 0x6e, 0x06, 0x31, 0x28, 0x26, 0x67, 0x7d, + 0xd8, 0x7e, 0xfb, 0x48, 0x9a, 0xde, 0x9d, 0x78, 0x4f, 0xc7, 0xeb, 0x30, 0xc5, 0xac, 0x74, 0x51, + 0x19, 0x26, 0x6d, 0xf2, 0x83, 0x3f, 0xcb, 0x58, 0x18, 0x1a, 0x88, 0x54, 0xdf, 0x3f, 0x7b, 0x25, + 0x90, 0xd2, 0x0f, 0x62, 0x00, 0xb5, 0xeb, 0xd7, 0xb7, 0x1d, 0xdd, 0x36, 0xb0, 0x77, 0xaf, 0x7a, + 0xbc, 0x0e, 0x27, 0x42, 0x9b, 0x3a, 0x47, 0x1b, 0xbb, 0xd7, 0xb3, 0xc1, 0xb6, 0xce, 0xd1, 0x06, + 0xb2, 0xb5, 0x5c, 0xcf, 0x67, 0x4b, 0x8c, 0xcd, 0x56, 0x73, 0xbd, 0xc1, 0x6e, 0x6c, 0x42, 0x36, + 0xe8, 0xbe, 0x8b, 0x6a, 0x90, 0xf6, 0xf8, 0x6f, 0xee, 0xcd, 0xd2, 0x70, 0x6f, 0x0a, 0x18, 0xf7, + 0xa8, 0x8f, 0x2c, 0xfd, 0x7f, 0xe2, 0x54, 0x3f, 0x62, 0xff, 0x78, 0x85, 0x11, 0xc9, 0xbd, 0x3c, + 0x37, 0xde, 0x8b, 0x8a, 0x82, 0x73, 0xf5, 0x78, 0xf5, 0x23, 0x71, 0x98, 0xdd, 0x11, 0xd9, 0xe6, + 0x8f, 0xad, 0x27, 0x1a, 0x30, 0x85, 0x4d, 0xcf, 0xd1, 0xa9, 0x2b, 0xc8, 0x58, 0x3f, 0x3d, 0x6c, + 0xac, 0x07, 0xf4, 0x85, 0xfe, 0xa7, 0x27, 0xf1, 0x44, 0x80, 0xd3, 0xf4, 0x78, 0xe1, 0xdf, 0xc7, + 0xa1, 0x38, 0x0c, 0x89, 0xce, 0x40, 0x41, 0x73, 0x30, 0x15, 0x28, 0x91, 0x63, 0xc9, 0xbc, 0x10, + 0xf3, 0xa4, 0xbf, 0x01, 0xa4, 0x80, 0x22, 0x81, 0x45, 0x54, 0x8f, 0x5d, 0x31, 0xe5, 0x03, 0x30, + 0x4d, 0xfb, 0x18, 0x0a, 0xba, 0xa9, 0x7b, 0xba, 0x6a, 0x28, 0xbb, 0xaa, 0xa1, 0x9a, 0xda, 0xdd, + 0x54, 0x96, 0xfd, 0x89, 0x3a, 0xcf, 0x49, 0x2b, 0x8c, 0x13, 0x5d, 0x87, 0x29, 0x41, 0x9f, 0xbc, + 0x07, 0xf4, 0x82, 0x2c, 0x54, 0x45, 0xfd, 0x4e, 0x1c, 0x66, 0x64, 0xdc, 0xfa, 0xe1, 0x72, 0xeb, + 0x8f, 0x02, 0xb0, 0x09, 0x47, 0xf2, 0xe0, 0x5d, 0x78, 0xb6, 0x7f, 0x02, 0x67, 0x18, 0x5f, 0xcd, + 0xf5, 0x42, 0xbe, 0xfd, 0x7a, 0x1c, 0x72, 0x61, 0xdf, 0xfe, 0x10, 0xac, 0x0b, 0x68, 0x2d, 0xc8, + 0x06, 0x49, 0xfe, 0x3f, 0x6a, 0x87, 0x64, 0x83, 0xbe, 0xa8, 0x3b, 0x3a, 0x0d, 0x7c, 0x2f, 0x0e, + 0xa9, 0x86, 0xea, 0xa8, 0x1d, 0x17, 0x5d, 0xeb, 0x2b, 0xe0, 0xc4, 0xf9, 0x64, 0xdf, 0x7f, 0x22, + 0xe7, 0xc7, 0x21, 0x2c, 0xe4, 0x3e, 0x31, 0xa0, 0x7e, 0x7b, 0x04, 0xf2, 0x64, 0x8b, 0x18, 0x7a, + 0x95, 0x21, 0x4e, 0x1f, 0xd0, 0x92, 0x3d, 0x5e, 0xf0, 0x1c, 0x0d, 0x2d, 0x42, 0x96, 0xa8, 0x05, + 0x89, 0x8e, 0xe8, 0x40, 0x47, 0xbd, 0x55, 0x67, 0x12, 0xf4, 0x14, 0xa0, 0x7d, 0xff, 0xb8, 0x43, + 0x09, 0x5c, 0x40, 0xf4, 0x66, 0x82, 0x16, 0xa1, 0xfe, 0x00, 0x00, 0xb1, 0x42, 0x61, 0xaf, 0xc7, + 0xb1, 0x3d, 0x4e, 0x86, 0x48, 0x6a, 0xf4, 0x15, 0xb9, 0x9f, 0x60, 0xb5, 0x60, 0xcf, 0xee, 0x91, + 0x97, 0xe1, 0xeb, 0xc7, 0x8b, 0xd4, 0xef, 0xbd, 0xb3, 0x38, 0x7f, 0xa8, 0x76, 0x8c, 0x72, 0x69, + 0x00, 0x65, 0x89, 0xd6, 0x86, 0xd1, 0x5d, 0x67, 0x28, 0x82, 0x3f, 0x17, 0x03, 0x14, 0xa4, 0x5c, + 0x19, 0xbb, 0x36, 0xd9, 0xd6, 0x90, 0xa2, 0x37, 0x54, 0xa1, 0xc6, 0x8e, 0x2e, 0x7a, 0x03, 0xbc, + 0x28, 0x7a, 0x43, 0x33, 0xe2, 0x72, 0x90, 0xe0, 0xe2, 0x7c, 0x0c, 0x07, 0xbc, 0xdb, 0xb8, 0x5c, + 0xb5, 0x74, 0x81, 0xee, 0xcb, 0x61, 0x13, 0xa5, 0xdf, 0x89, 0xc1, 0xe9, 0xbe, 0x68, 0xf2, 0x8d, + 0xfd, 0x53, 0x80, 0x9c, 0x50, 0x23, 0xff, 0x67, 0x83, 0xcc, 0xe8, 0x63, 0x07, 0xe7, 0x8c, 0xd3, + 0x97, 0x2b, 0xdf, 0xaf, 0x1c, 0xcd, 0xde, 0x79, 0xfc, 0xa7, 0x31, 0x98, 0x0b, 0x1b, 0xe3, 0x77, + 0x6b, 0x13, 0x72, 0x61, 0x5b, 0x78, 0x87, 0x1e, 0x1e, 0xa7, 0x43, 0xbc, 0x2f, 0x11, 0x3c, 0x7a, + 0x39, 0x98, 0xb8, 0xec, 0x98, 0xed, 0x99, 0xb1, 0x7d, 0x23, 0x6c, 0xea, 0x9d, 0xc0, 0x49, 0x51, + 0xc5, 0x24, 0x1b, 0x96, 0x65, 0xa0, 0x3f, 0x0d, 0x33, 0xa6, 0xe5, 0x29, 0x24, 0xca, 0x71, 0x4b, + 0xe1, 0x3b, 0x57, 0x96, 0xfd, 0x5e, 0x3e, 0x9e, 0xcb, 0xbe, 0xf3, 0xce, 0x62, 0x3f, 0x55, 0x8f, + 0x1f, 0x0b, 0xa6, 0xe5, 0x55, 0x68, 0xfb, 0x36, 0xdb, 0xd7, 0x3a, 0x30, 0x1d, 0xbd, 0x35, 0xcb, + 0x96, 0x1b, 0xc7, 0xbe, 0xf5, 0xf4, 0x51, 0xb7, 0xcd, 0xed, 0x86, 0xee, 0xc9, 0xde, 0x06, 0xfb, + 0xfd, 0xb7, 0x17, 0x63, 0x8f, 0x7f, 0x25, 0x06, 0x10, 0x6c, 0xe1, 0xd1, 0x93, 0x70, 0xaa, 0xb2, + 0xb5, 0x59, 0x53, 0x9a, 0xdb, 0x2b, 0xdb, 0x3b, 0xcd, 0xe8, 0x3b, 0xe3, 0xe2, 0x34, 0xdd, 0xb5, + 0xb1, 0xa6, 0xef, 0xe9, 0xb8, 0x85, 0x1e, 0x85, 0xb9, 0xa8, 0x36, 0xb9, 0xaa, 0xd7, 0xa4, 0xd8, + 0x7c, 0xee, 0xf6, 0x9d, 0xa5, 0x34, 0xab, 0x8e, 0x70, 0x0b, 0x9d, 0x85, 0x13, 0xfd, 0x7a, 0x6b, + 0x9b, 0xab, 0x52, 0x7c, 0x7e, 0xfa, 0xf6, 0x9d, 0xa5, 0x8c, 0x5f, 0x46, 0xa1, 0x12, 0xa0, 0xb0, + 0x26, 0xe7, 0x4b, 0xcc, 0xc3, 0xed, 0x3b, 0x4b, 0x29, 0xe6, 0xb6, 0xf9, 0xe4, 0x47, 0x3f, 0xb7, + 0x30, 0x51, 0xb9, 0x3a, 0xf4, 0xbc, 0xfc, 0xc9, 0x23, 0x3d, 0x76, 0xcb, 0x3f, 0x03, 0x8f, 0x1c, + 0x92, 0xff, 0x41, 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, 0xf6, 0x2d, 0x04, 0x3e, 0x67, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2040,6 +2117,65 @@ func (m *HistoricalInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ConsPubKeyRotationHistory) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ConsPubKeyRotationHistory) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ConsPubKeyRotationHistory) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.RotatedHeight != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.RotatedHeight)) + i-- + dAtA[i] = 0x20 + } + if m.NewConsPubkey != nil { + { + size, err := m.NewConsPubkey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.OldConsPubkey != nil { + { + size, err := m.OldConsPubkey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.OperatorAddress) > 0 { + i -= len(m.OperatorAddress) + copy(dAtA[i:], m.OperatorAddress) + i = encodeVarintStaking(dAtA, i, uint64(len(m.OperatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *CommissionRates) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -2113,12 +2249,12 @@ func (m *Commission) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UpdateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdateTime):]) - if err2 != nil { - return 0, err2 + n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UpdateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdateTime):]) + if err4 != nil { + return 0, err4 } - i -= n2 - i = encodeVarintStaking(dAtA, i, uint64(n2)) + i -= n4 + i = encodeVarintStaking(dAtA, i, uint64(n4)) i-- dAtA[i] = 0x12 { @@ -2232,12 +2368,12 @@ func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x52 - n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UnbondingTime):]) - if err5 != nil { - return 0, err5 + n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UnbondingTime):]) + if err7 != nil { + return 0, err7 } - i -= n5 - i = encodeVarintStaking(dAtA, i, uint64(n5)) + i -= n7 + i = encodeVarintStaking(dAtA, i, uint64(n7)) i-- dAtA[i] = 0x4a if m.UnbondingHeight != 0 { @@ -2637,12 +2773,12 @@ func (m *UnbondingDelegationEntry) MarshalToSizedBuffer(dAtA []byte) (int, error } i-- dAtA[i] = 0x1a - n8, err8 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) - if err8 != nil { - return 0, err8 + n10, err10 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) + if err10 != nil { + return 0, err10 } - i -= n8 - i = encodeVarintStaking(dAtA, i, uint64(n8)) + i -= n10 + i = encodeVarintStaking(dAtA, i, uint64(n10)) i-- dAtA[i] = 0x12 if m.CreationHeight != 0 { @@ -2693,12 +2829,12 @@ func (m *RedelegationEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x1a - n9, err9 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) - if err9 != nil { - return 0, err9 + n11, err11 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CompletionTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CompletionTime):]) + if err11 != nil { + return 0, err11 } - i -= n9 - i = encodeVarintStaking(dAtA, i, uint64(n9)) + i -= n11 + i = encodeVarintStaking(dAtA, i, uint64(n11)) i-- dAtA[i] = 0x12 if m.CreationHeight != 0 { @@ -2819,12 +2955,12 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x10 } - n10, err10 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime):]) - if err10 != nil { - return 0, err10 + n12, err12 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime):]) + if err12 != nil { + return 0, err12 } - i -= n10 - i = encodeVarintStaking(dAtA, i, uint64(n10)) + i -= n12 + i = encodeVarintStaking(dAtA, i, uint64(n12)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -3034,6 +3170,30 @@ func (m *HistoricalInfo) Size() (n int) { return n } +func (m *ConsPubKeyRotationHistory) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OperatorAddress) + if l > 0 { + n += 1 + l + sovStaking(uint64(l)) + } + if m.OldConsPubkey != nil { + l = m.OldConsPubkey.Size() + n += 1 + l + sovStaking(uint64(l)) + } + if m.NewConsPubkey != nil { + l = m.NewConsPubkey.Size() + n += 1 + l + sovStaking(uint64(l)) + } + if m.RotatedHeight != 0 { + n += 1 + sovStaking(uint64(m.RotatedHeight)) + } + return n +} + func (m *CommissionRates) Size() (n int) { if m == nil { return 0 @@ -3540,6 +3700,179 @@ func (m *HistoricalInfo) Unmarshal(dAtA []byte) error { } return nil } +func (m *ConsPubKeyRotationHistory) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConsPubKeyRotationHistory: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConsPubKeyRotationHistory: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OperatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OperatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OldConsPubkey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.OldConsPubkey == nil { + m.OldConsPubkey = &types1.Any{} + } + if err := m.OldConsPubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewConsPubkey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NewConsPubkey == nil { + m.NewConsPubkey = &types1.Any{} + } + if err := m.NewConsPubkey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RotatedHeight", wireType) + } + m.RotatedHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RotatedHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipStaking(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthStaking + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *CommissionRates) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 diff --git a/x/staking/types/tx.pb.go b/x/staking/types/tx.pb.go index 040c6a9233f4..22f208db2655 100644 --- a/x/staking/types/tx.pb.go +++ b/x/staking/types/tx.pb.go @@ -535,6 +535,102 @@ func (m *MsgCancelUnbondingDelegationResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgCancelUnbondingDelegationResponse proto.InternalMessageInfo +type MsgRotateConsPubKey struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + NewPubKey string `protobuf:"bytes,3,opt,name=new_pub_key,json=newPubKey,proto3" json:"new_pub_key,omitempty"` +} + +func (m *MsgRotateConsPubKey) Reset() { *m = MsgRotateConsPubKey{} } +func (m *MsgRotateConsPubKey) String() string { return proto.CompactTextString(m) } +func (*MsgRotateConsPubKey) ProtoMessage() {} +func (*MsgRotateConsPubKey) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{12} +} +func (m *MsgRotateConsPubKey) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRotateConsPubKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRotateConsPubKey.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRotateConsPubKey) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRotateConsPubKey.Merge(m, src) +} +func (m *MsgRotateConsPubKey) XXX_Size() int { + return m.Size() +} +func (m *MsgRotateConsPubKey) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRotateConsPubKey.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRotateConsPubKey proto.InternalMessageInfo + +func (m *MsgRotateConsPubKey) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgRotateConsPubKey) GetValidatorAddress() string { + if m != nil { + return m.ValidatorAddress + } + return "" +} + +func (m *MsgRotateConsPubKey) GetNewPubKey() string { + if m != nil { + return m.NewPubKey + } + return "" +} + +type MsgRotateConsPubKeyResponse struct { +} + +func (m *MsgRotateConsPubKeyResponse) Reset() { *m = MsgRotateConsPubKeyResponse{} } +func (m *MsgRotateConsPubKeyResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRotateConsPubKeyResponse) ProtoMessage() {} +func (*MsgRotateConsPubKeyResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_0926ef28816b35ab, []int{13} +} +func (m *MsgRotateConsPubKeyResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRotateConsPubKeyResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRotateConsPubKeyResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRotateConsPubKeyResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRotateConsPubKeyResponse.Merge(m, src) +} +func (m *MsgRotateConsPubKeyResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRotateConsPubKeyResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRotateConsPubKeyResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRotateConsPubKeyResponse proto.InternalMessageInfo + func init() { proto.RegisterType((*MsgCreateValidator)(nil), "cosmos.staking.v1beta1.MsgCreateValidator") proto.RegisterType((*MsgCreateValidatorResponse)(nil), "cosmos.staking.v1beta1.MsgCreateValidatorResponse") @@ -548,71 +644,78 @@ func init() { proto.RegisterType((*MsgUndelegateResponse)(nil), "cosmos.staking.v1beta1.MsgUndelegateResponse") proto.RegisterType((*MsgCancelUnbondingDelegation)(nil), "cosmos.staking.v1beta1.MsgCancelUnbondingDelegation") proto.RegisterType((*MsgCancelUnbondingDelegationResponse)(nil), "cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse") + proto.RegisterType((*MsgRotateConsPubKey)(nil), "cosmos.staking.v1beta1.MsgRotateConsPubKey") + proto.RegisterType((*MsgRotateConsPubKeyResponse)(nil), "cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse") } func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) } var fileDescriptor_0926ef28816b35ab = []byte{ - // 937 bytes of a gzipped FileDescriptorProto + // 1011 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xf6, 0xc6, 0x4e, 0x28, 0x13, 0xb5, 0x69, 0x37, 0x09, 0x38, 0xab, 0xca, 0xae, 0xdc, 0xd2, - 0x46, 0x85, 0xac, 0x69, 0x28, 0x02, 0x55, 0xbd, 0xd4, 0x75, 0x2b, 0xaa, 0x62, 0x09, 0x6d, 0x28, - 0x07, 0x84, 0x64, 0xcd, 0xee, 0x4e, 0x26, 0x23, 0xef, 0xce, 0xb8, 0x3b, 0xe3, 0xa8, 0xbe, 0x72, - 0xe2, 0x46, 0x25, 0xfe, 0x40, 0x7f, 0x00, 0x42, 0x1c, 0xfa, 0x23, 0x2a, 0x4e, 0x51, 0x4f, 0x88, + 0x18, 0xf6, 0xc6, 0xae, 0x69, 0xdf, 0xa8, 0x4d, 0xba, 0x49, 0xc0, 0x59, 0x8a, 0x5d, 0xb9, 0xa5, + 0x8d, 0x0a, 0x59, 0xb7, 0x69, 0x11, 0x55, 0xd5, 0x4b, 0x1d, 0xb7, 0xa2, 0x2a, 0x96, 0xd0, 0x86, + 0x72, 0x40, 0x48, 0xd6, 0x7e, 0x4c, 0x36, 0x2b, 0x7b, 0x67, 0xb6, 0x3b, 0xe3, 0xb4, 0xbe, 0x72, + 0xe2, 0x46, 0x25, 0xfe, 0x40, 0xc5, 0x0f, 0x40, 0x1c, 0xfa, 0x23, 0x22, 0x4e, 0x51, 0x4f, 0x88, 0x43, 0x81, 0xe4, 0x00, 0x3f, 0x00, 0x71, 0x46, 0x3b, 0x3b, 0x3b, 0xfe, 0x58, 0x7b, 0xb3, 0x41, - 0xe9, 0x01, 0x71, 0xf2, 0x6a, 0xe6, 0x79, 0x9f, 0x99, 0x79, 0xde, 0x67, 0xde, 0x77, 0x0c, 0xea, - 0x1e, 0xe3, 0x21, 0xe3, 0x4d, 0x2e, 0x60, 0x8f, 0x50, 0xdc, 0xdc, 0xbf, 0xe1, 0x22, 0x01, 0x6f, - 0x34, 0xc5, 0x13, 0xbb, 0x1f, 0x31, 0xc1, 0xcc, 0xb7, 0x12, 0x80, 0xad, 0x00, 0xb6, 0x02, 0x58, - 0x1b, 0x98, 0x31, 0x1c, 0xa0, 0xa6, 0x44, 0xb9, 0x83, 0xdd, 0x26, 0xa4, 0xc3, 0x24, 0xc4, 0xaa, - 0x4f, 0x4f, 0x09, 0x12, 0x22, 0x2e, 0x60, 0xd8, 0x57, 0x80, 0x35, 0xcc, 0x30, 0x93, 0x9f, 0xcd, - 0xf8, 0x4b, 0x8d, 0x6e, 0x24, 0x2b, 0x75, 0x93, 0x09, 0xb5, 0x6c, 0x32, 0x55, 0x53, 0xbb, 0x74, - 0x21, 0x47, 0x7a, 0x8b, 0x1e, 0x23, 0x54, 0xcd, 0x5f, 0x99, 0x73, 0x8a, 0x74, 0xd3, 0x09, 0xea, - 0x6d, 0x85, 0x0a, 0x79, 0x8c, 0x88, 0x7f, 0x92, 0x89, 0xc6, 0xef, 0x15, 0x60, 0x76, 0x38, 0xbe, - 0x1b, 0x21, 0x28, 0xd0, 0x17, 0x30, 0x20, 0x3e, 0x14, 0x2c, 0x32, 0x1f, 0x82, 0x65, 0x1f, 0x71, - 0x2f, 0x22, 0x7d, 0x41, 0x18, 0xad, 0x1a, 0x97, 0x8c, 0xcd, 0xe5, 0xed, 0xcb, 0xf6, 0x6c, 0x41, - 0xec, 0xf6, 0x08, 0xda, 0xaa, 0xbc, 0x78, 0x55, 0x2f, 0x39, 0xe3, 0xd1, 0x66, 0x07, 0x00, 0x8f, - 0x85, 0x21, 0xe1, 0x3c, 0xe6, 0x5a, 0x90, 0x5c, 0xd7, 0xe6, 0x71, 0xdd, 0xd5, 0x48, 0x07, 0x0a, - 0xc4, 0x15, 0xdf, 0x18, 0x81, 0x19, 0x80, 0xd5, 0x90, 0xd0, 0x2e, 0x47, 0xc1, 0x6e, 0xd7, 0x47, - 0x01, 0xc2, 0x50, 0xee, 0xb1, 0x7c, 0xc9, 0xd8, 0x7c, 0xb3, 0x75, 0x3b, 0x86, 0xff, 0xf2, 0xaa, - 0x7e, 0x15, 0x13, 0xb1, 0x37, 0x70, 0x6d, 0x8f, 0x85, 0x4a, 0x4f, 0xf5, 0xb3, 0xc5, 0xfd, 0x5e, - 0x53, 0x0c, 0xfb, 0x88, 0xdb, 0x0f, 0xa8, 0x78, 0xf9, 0x7c, 0x0b, 0xa8, 0x8d, 0x3c, 0xa0, 0xc2, - 0xb9, 0x10, 0x12, 0xba, 0x83, 0x82, 0xdd, 0xb6, 0xa6, 0x35, 0xef, 0x81, 0x0b, 0x6a, 0x11, 0x16, - 0x75, 0xa1, 0xef, 0x47, 0x88, 0xf3, 0x6a, 0x45, 0xae, 0x55, 0x7d, 0xf9, 0x7c, 0x6b, 0x4d, 0x45, - 0xdf, 0x49, 0x66, 0x76, 0x44, 0x44, 0x28, 0x76, 0xce, 0xeb, 0x10, 0x35, 0x1e, 0xd3, 0xec, 0xa7, - 0xea, 0x6a, 0x9a, 0xc5, 0xe3, 0x68, 0x74, 0x48, 0x4a, 0x73, 0x1f, 0x2c, 0xf5, 0x07, 0x6e, 0x0f, - 0x0d, 0xab, 0x4b, 0x52, 0xc6, 0x35, 0x3b, 0x31, 0x9c, 0x9d, 0x1a, 0xce, 0xbe, 0x43, 0x87, 0xad, - 0xea, 0x4f, 0x23, 0x46, 0x2f, 0x1a, 0xf6, 0x05, 0xb3, 0x3f, 0x1b, 0xb8, 0x0f, 0xd1, 0xd0, 0x51, - 0xd1, 0xe6, 0x87, 0x60, 0x71, 0x1f, 0x06, 0x03, 0x54, 0x7d, 0x43, 0xd2, 0x6c, 0xa4, 0xd9, 0x88, - 0x5d, 0x36, 0x96, 0x0a, 0x92, 0xe6, 0x33, 0x41, 0xdf, 0xba, 0xf9, 0xcd, 0xb3, 0x7a, 0xe9, 0xcf, - 0x67, 0xf5, 0xd2, 0xd7, 0x7f, 0xfc, 0x78, 0x3d, 0xab, 0x8b, 0x1c, 0xcd, 0x1c, 0xb3, 0x71, 0x11, - 0x58, 0x59, 0x8b, 0x39, 0x88, 0xf7, 0x19, 0xe5, 0xa8, 0xf1, 0x5d, 0x19, 0x9c, 0xef, 0x70, 0x7c, - 0xcf, 0x27, 0xe2, 0x35, 0xf9, 0x6f, 0xa6, 0xf6, 0x0b, 0x27, 0xd6, 0x1e, 0x82, 0x95, 0x91, 0x0b, - 0xbb, 0x11, 0x14, 0x48, 0x79, 0xee, 0xe3, 0x82, 0x7e, 0x6b, 0x23, 0x6f, 0xcc, 0x6f, 0x6d, 0xe4, - 0x39, 0xe7, 0xbc, 0x09, 0xb7, 0x9b, 0x7b, 0xb3, 0xad, 0x5d, 0x39, 0xd1, 0x32, 0x45, 0x6c, 0x7d, - 0xab, 0x36, 0x91, 0xc9, 0x6c, 0xce, 0x2c, 0x50, 0x9d, 0x4e, 0x8a, 0xce, 0xd8, 0x5f, 0x06, 0x58, - 0xee, 0x70, 0xac, 0xd8, 0xd0, 0xec, 0x2b, 0x62, 0x9c, 0xce, 0x15, 0x39, 0x79, 0x9a, 0x3e, 0x02, - 0x4b, 0x30, 0x64, 0x03, 0x2a, 0x64, 0x76, 0x0a, 0x78, 0x5b, 0xc1, 0xa7, 0x24, 0xc9, 0x9c, 0xa8, - 0xb1, 0x0e, 0x56, 0xc7, 0x4e, 0xad, 0xd5, 0x38, 0x58, 0x90, 0x15, 0xb4, 0x85, 0x30, 0xa1, 0x0e, - 0xf2, 0x4f, 0x59, 0x94, 0x4f, 0xc1, 0xfa, 0x48, 0x14, 0x1e, 0x79, 0x85, 0x85, 0x59, 0xd5, 0x61, - 0x3b, 0x91, 0x37, 0x93, 0xcd, 0xe7, 0x42, 0xb3, 0x95, 0x0b, 0xb3, 0xb5, 0xb9, 0xc8, 0x2a, 0x5d, - 0x39, 0x5d, 0xa5, 0x7b, 0xb2, 0x60, 0x4c, 0x29, 0x9a, 0x0a, 0x6e, 0x76, 0xe4, 0x3d, 0xec, 0x07, - 0x28, 0x36, 0x72, 0x37, 0x6e, 0xb0, 0xaa, 0x3e, 0x58, 0x99, 0x62, 0xf8, 0x79, 0xda, 0x7d, 0x5b, - 0x67, 0xe2, 0x0d, 0x3c, 0xfd, 0xb5, 0x6e, 0xc8, 0x3b, 0xa7, 0x82, 0xe3, 0xe9, 0xc6, 0xdf, 0x06, - 0x38, 0xdb, 0xe1, 0xf8, 0x11, 0xf5, 0xff, 0x67, 0x7e, 0xde, 0x05, 0xeb, 0x13, 0xe7, 0x7e, 0x5d, - 0x02, 0xff, 0xb0, 0x00, 0x2e, 0xc6, 0xf5, 0x1f, 0x52, 0x0f, 0x05, 0x8f, 0xa8, 0xcb, 0xa8, 0x4f, - 0x28, 0x3e, 0xae, 0xc5, 0xfe, 0xe7, 0xf4, 0x36, 0xaf, 0x81, 0x15, 0x2f, 0xee, 0x71, 0xb1, 0x68, - 0x7b, 0x88, 0xe0, 0xbd, 0xe4, 0x5e, 0x94, 0x9d, 0x73, 0xe9, 0xf0, 0x27, 0x72, 0xf4, 0xd8, 0xc4, - 0x5c, 0x05, 0x57, 0xf2, 0xf4, 0x4a, 0xf3, 0xb4, 0xfd, 0xfd, 0x22, 0x28, 0x77, 0x38, 0x36, 0x1f, - 0x83, 0x95, 0xe9, 0xf7, 0xdb, 0xf5, 0x79, 0xad, 0x32, 0xdb, 0x88, 0xad, 0xed, 0xe2, 0x58, 0x6d, - 0x91, 0x1e, 0x38, 0x3b, 0xd9, 0xb0, 0x37, 0x73, 0x48, 0x26, 0x90, 0xd6, 0xfb, 0x45, 0x91, 0x7a, - 0xb1, 0xaf, 0xc0, 0x19, 0xdd, 0x6b, 0x2e, 0xe7, 0x44, 0xa7, 0x20, 0xeb, 0xdd, 0x02, 0x20, 0xcd, - 0xfe, 0x18, 0xac, 0x4c, 0xd7, 0xee, 0x3c, 0xf5, 0xa6, 0xb0, 0xb9, 0xea, 0xcd, 0xab, 0x60, 0x2e, - 0x00, 0x63, 0xe5, 0xe6, 0x9d, 0x1c, 0x86, 0x11, 0xcc, 0xda, 0x2a, 0x04, 0xd3, 0x6b, 0x7c, 0x6b, - 0x80, 0x8d, 0xf9, 0x57, 0xee, 0x66, 0x5e, 0xce, 0xe7, 0x45, 0x59, 0xb7, 0xff, 0x4d, 0x54, 0xba, - 0xa3, 0xd6, 0xfd, 0x17, 0x87, 0x35, 0xe3, 0xe0, 0xb0, 0x66, 0xfc, 0x76, 0x58, 0x33, 0x9e, 0x1e, - 0xd5, 0x4a, 0x07, 0x47, 0xb5, 0xd2, 0xcf, 0x47, 0xb5, 0xd2, 0x97, 0xef, 0xe5, 0xbe, 0x6a, 0x9e, - 0xe8, 0xff, 0x36, 0xf2, 0x7d, 0xe3, 0x2e, 0xc9, 0xea, 0xf3, 0xc1, 0x3f, 0x01, 0x00, 0x00, 0xff, - 0xff, 0x48, 0x6a, 0x50, 0xaf, 0xc0, 0x0d, 0x00, 0x00, + 0xe9, 0x01, 0x71, 0xf2, 0x6a, 0xe6, 0x79, 0x9f, 0x99, 0x79, 0xde, 0x67, 0xde, 0x79, 0x0d, 0x35, + 0x9b, 0x50, 0x9f, 0xd0, 0x06, 0x65, 0x66, 0xd7, 0xc3, 0x6e, 0x63, 0xf7, 0x86, 0x85, 0x98, 0x79, + 0xa3, 0xc1, 0x9e, 0xe9, 0x41, 0x48, 0x18, 0x51, 0xdf, 0x8e, 0x01, 0xba, 0x00, 0xe8, 0x02, 0xa0, + 0xad, 0xba, 0x84, 0xb8, 0x3d, 0xd4, 0xe0, 0x28, 0xab, 0xbf, 0xdd, 0x30, 0xf1, 0x20, 0x0e, 0xd1, + 0x6a, 0x93, 0x53, 0xcc, 0xf3, 0x11, 0x65, 0xa6, 0x1f, 0x08, 0xc0, 0xb2, 0x4b, 0x5c, 0xc2, 0x3f, + 0x1b, 0xd1, 0x97, 0x18, 0x5d, 0x8d, 0x57, 0xea, 0xc4, 0x13, 0x62, 0xd9, 0x78, 0xaa, 0x2a, 0x76, + 0x69, 0x99, 0x14, 0xc9, 0x2d, 0xda, 0xc4, 0xc3, 0x62, 0xfe, 0xf2, 0x8c, 0x53, 0x24, 0x9b, 0x8e, + 0x51, 0xef, 0x08, 0x94, 0x4f, 0x23, 0x44, 0xf4, 0x13, 0x4f, 0xd4, 0x7f, 0x2f, 0x81, 0xda, 0xa6, + 0xee, 0x66, 0x88, 0x4c, 0x86, 0xbe, 0x30, 0x7b, 0x9e, 0x63, 0x32, 0x12, 0xaa, 0x8f, 0x60, 0xde, + 0x41, 0xd4, 0x0e, 0xbd, 0x80, 0x79, 0x04, 0x57, 0x94, 0x8b, 0xca, 0xda, 0xfc, 0xc6, 0x25, 0x7d, + 0xba, 0x20, 0x7a, 0x6b, 0x08, 0x6d, 0x96, 0xf6, 0x5e, 0xd7, 0x0a, 0xc6, 0x68, 0xb4, 0xda, 0x06, + 0xb0, 0x89, 0xef, 0x7b, 0x94, 0x46, 0x5c, 0x73, 0x9c, 0xeb, 0xea, 0x2c, 0xae, 0x4d, 0x89, 0x34, + 0x4c, 0x86, 0xa8, 0xe0, 0x1b, 0x21, 0x50, 0x7b, 0xb0, 0xe4, 0x7b, 0xb8, 0x43, 0x51, 0x6f, 0xbb, + 0xe3, 0xa0, 0x1e, 0x72, 0x4d, 0xbe, 0xc7, 0xe2, 0x45, 0x65, 0xed, 0x4c, 0xf3, 0x6e, 0x04, 0xff, + 0xe5, 0x75, 0xed, 0x8a, 0xeb, 0xb1, 0x9d, 0xbe, 0xa5, 0xdb, 0xc4, 0x17, 0x7a, 0x8a, 0x9f, 0x75, + 0xea, 0x74, 0x1b, 0x6c, 0x10, 0x20, 0xaa, 0x3f, 0xc4, 0xec, 0xd5, 0xcb, 0x75, 0x10, 0x1b, 0x79, + 0x88, 0x99, 0x71, 0xde, 0xf7, 0xf0, 0x16, 0xea, 0x6d, 0xb7, 0x24, 0xad, 0x7a, 0x1f, 0xce, 0x8b, + 0x45, 0x48, 0xd8, 0x31, 0x1d, 0x27, 0x44, 0x94, 0x56, 0x4a, 0x7c, 0xad, 0xca, 0xab, 0x97, 0xeb, + 0xcb, 0x22, 0xfa, 0x5e, 0x3c, 0xb3, 0xc5, 0x42, 0x0f, 0xbb, 0xc6, 0xa2, 0x0c, 0x11, 0xe3, 0x11, + 0xcd, 0x6e, 0xa2, 0xae, 0xa4, 0x39, 0x75, 0x14, 0x8d, 0x0c, 0x49, 0x68, 0x1e, 0x40, 0x39, 0xe8, + 0x5b, 0x5d, 0x34, 0xa8, 0x94, 0xb9, 0x8c, 0xcb, 0x7a, 0x6c, 0x38, 0x3d, 0x31, 0x9c, 0x7e, 0x0f, + 0x0f, 0x9a, 0x95, 0x9f, 0x86, 0x8c, 0x76, 0x38, 0x08, 0x18, 0xd1, 0x3f, 0xeb, 0x5b, 0x8f, 0xd0, + 0xc0, 0x10, 0xd1, 0xea, 0x47, 0x70, 0x6a, 0xd7, 0xec, 0xf5, 0x51, 0xe5, 0x2d, 0x4e, 0xb3, 0x9a, + 0x64, 0x23, 0x72, 0xd9, 0x48, 0x2a, 0xbc, 0x24, 0x9f, 0x31, 0xfa, 0xce, 0xad, 0x6f, 0x5e, 0xd4, + 0x0a, 0x7f, 0xbe, 0xa8, 0x15, 0xbe, 0xfe, 0xe3, 0xc7, 0x6b, 0x69, 0x5d, 0xf8, 0x68, 0xea, 0x98, + 0xf5, 0x0b, 0xa0, 0xa5, 0x2d, 0x66, 0x20, 0x1a, 0x10, 0x4c, 0x51, 0xfd, 0xbb, 0x22, 0x2c, 0xb6, + 0xa9, 0x7b, 0xdf, 0xf1, 0xd8, 0x1b, 0xf2, 0xdf, 0x54, 0xed, 0xe7, 0x8e, 0xad, 0xbd, 0x09, 0x0b, + 0x43, 0x17, 0x76, 0x42, 0x93, 0x21, 0xe1, 0xb9, 0xdb, 0x39, 0xfd, 0xd6, 0x42, 0xf6, 0x88, 0xdf, + 0x5a, 0xc8, 0x36, 0xce, 0xd9, 0x63, 0x6e, 0x57, 0x77, 0xa6, 0x5b, 0xbb, 0x74, 0xac, 0x65, 0xf2, + 0xd8, 0xfa, 0x4e, 0x75, 0x2c, 0x93, 0xe9, 0x9c, 0x69, 0x50, 0x99, 0x4c, 0x8a, 0xcc, 0xd8, 0x5f, + 0x0a, 0xcc, 0xb7, 0xa9, 0x2b, 0xd8, 0xd0, 0xf4, 0x2b, 0xa2, 0x9c, 0xcc, 0x15, 0x39, 0x7e, 0x9a, + 0x3e, 0x86, 0xb2, 0xe9, 0x93, 0x3e, 0x66, 0x3c, 0x3b, 0x39, 0xbc, 0x2d, 0xe0, 0x13, 0x92, 0xa4, + 0x4e, 0x54, 0x5f, 0x81, 0xa5, 0x91, 0x53, 0x4b, 0x35, 0xf6, 0xe7, 0x78, 0x05, 0x6d, 0x22, 0xd7, + 0xc3, 0x06, 0x72, 0x4e, 0x58, 0x94, 0x4f, 0x61, 0x65, 0x28, 0x0a, 0x0d, 0xed, 0xdc, 0xc2, 0x2c, + 0xc9, 0xb0, 0xad, 0xd0, 0x9e, 0xca, 0xe6, 0x50, 0x26, 0xd9, 0x8a, 0xb9, 0xd9, 0x5a, 0x94, 0xa5, + 0x95, 0x2e, 0x9d, 0xac, 0xd2, 0x5d, 0x5e, 0x30, 0x26, 0x14, 0x4d, 0x04, 0x57, 0xdb, 0xfc, 0x1e, + 0x06, 0x3d, 0x14, 0x19, 0xb9, 0x13, 0x3d, 0xb0, 0xa2, 0x3e, 0x68, 0xa9, 0x62, 0xf8, 0x79, 0xf2, + 0xfa, 0x36, 0x4f, 0x47, 0x1b, 0x78, 0xfe, 0x6b, 0x4d, 0xe1, 0x77, 0x4e, 0x04, 0x47, 0xd3, 0xf5, + 0xbf, 0x15, 0x38, 0xdb, 0xa6, 0xee, 0x63, 0xec, 0xfc, 0xcf, 0xfc, 0xbc, 0x0d, 0x2b, 0x63, 0xe7, + 0x7e, 0x53, 0x02, 0xff, 0x30, 0x07, 0x17, 0xa2, 0xfa, 0x6f, 0x62, 0x1b, 0xf5, 0x1e, 0x63, 0x8b, + 0x60, 0xc7, 0xc3, 0xee, 0x51, 0x4f, 0xec, 0x7f, 0x4e, 0x6f, 0xf5, 0x2a, 0x2c, 0xd8, 0xd1, 0x1b, + 0x17, 0x89, 0xb6, 0x83, 0x3c, 0x77, 0x27, 0xbe, 0x17, 0x45, 0xe3, 0x5c, 0x32, 0xfc, 0x09, 0x1f, + 0x3d, 0x32, 0x31, 0x57, 0xe0, 0x72, 0x96, 0x5e, 0xb2, 0xf2, 0xec, 0x29, 0xbc, 0x22, 0x19, 0x84, + 0x99, 0x0c, 0x6d, 0x12, 0x4c, 0xe3, 0x47, 0x5e, 0xbd, 0x0e, 0x65, 0x8a, 0xb0, 0x83, 0xc2, 0x23, + 0x45, 0x14, 0xb8, 0x93, 0x92, 0xee, 0x36, 0xcc, 0x63, 0xf4, 0xb4, 0x13, 0xf4, 0xad, 0x4e, 0xd4, + 0xa2, 0x88, 0xa2, 0x32, 0xb3, 0x19, 0x39, 0x83, 0xd1, 0xd3, 0xf8, 0xb3, 0xfe, 0x1e, 0xbc, 0x3b, + 0xe5, 0x24, 0xc9, 0x49, 0x37, 0xbe, 0x2f, 0x43, 0xb1, 0x4d, 0x5d, 0xf5, 0x09, 0x2c, 0x4c, 0x76, + 0xaa, 0xd7, 0x66, 0x35, 0x05, 0xe9, 0x96, 0x43, 0xdb, 0xc8, 0x8f, 0x95, 0x97, 0xa1, 0x0b, 0x67, + 0xc7, 0x5b, 0x93, 0xb5, 0x0c, 0x92, 0x31, 0xa4, 0x76, 0x3d, 0x2f, 0x52, 0x2e, 0xf6, 0x15, 0x9c, + 0x96, 0xaf, 0xea, 0xa5, 0x8c, 0xe8, 0x04, 0xa4, 0x7d, 0x90, 0x03, 0x24, 0xd9, 0x9f, 0xc0, 0xc2, + 0xe4, 0x2b, 0x95, 0xa5, 0xde, 0x04, 0x36, 0x53, 0xbd, 0x59, 0xb5, 0xda, 0x02, 0x18, 0x29, 0xac, + 0xef, 0x67, 0x30, 0x0c, 0x61, 0xda, 0x7a, 0x2e, 0x98, 0x5c, 0xe3, 0x5b, 0x05, 0x56, 0x67, 0x17, + 0x97, 0x5b, 0x59, 0x39, 0x9f, 0x15, 0xa5, 0xdd, 0xfd, 0x37, 0x51, 0x72, 0x47, 0x0c, 0x16, 0x53, + 0x97, 0x32, 0x2b, 0x53, 0x93, 0x60, 0xed, 0xe6, 0x31, 0xc0, 0xc9, 0xaa, 0xcd, 0x07, 0x7b, 0x07, + 0x55, 0x65, 0xff, 0xa0, 0xaa, 0xfc, 0x76, 0x50, 0x55, 0x9e, 0x1f, 0x56, 0x0b, 0xfb, 0x87, 0xd5, + 0xc2, 0xcf, 0x87, 0xd5, 0xc2, 0x97, 0x1f, 0x66, 0x76, 0x8d, 0xcf, 0xe4, 0x7f, 0x47, 0xde, 0x3f, + 0x5a, 0x65, 0x5e, 0xdd, 0x6f, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x19, 0x80, 0x42, 0xc9, 0x20, + 0x0f, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -645,6 +748,7 @@ type MsgClient interface { // // Since: cosmos-sdk 0.46 CancelUnbondingDelegation(ctx context.Context, in *MsgCancelUnbondingDelegation, opts ...grpc.CallOption) (*MsgCancelUnbondingDelegationResponse, error) + RotateConsPubKey(ctx context.Context, in *MsgRotateConsPubKey, opts ...grpc.CallOption) (*MsgRotateConsPubKeyResponse, error) } type msgClient struct { @@ -709,6 +813,15 @@ func (c *msgClient) CancelUnbondingDelegation(ctx context.Context, in *MsgCancel return out, nil } +func (c *msgClient) RotateConsPubKey(ctx context.Context, in *MsgRotateConsPubKey, opts ...grpc.CallOption) (*MsgRotateConsPubKeyResponse, error) { + out := new(MsgRotateConsPubKeyResponse) + err := c.cc.Invoke(ctx, "/cosmos.staking.v1beta1.Msg/RotateConsPubKey", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MsgServer is the server API for Msg service. type MsgServer interface { // CreateValidator defines a method for creating a new validator. @@ -729,6 +842,7 @@ type MsgServer interface { // // Since: cosmos-sdk 0.46 CancelUnbondingDelegation(context.Context, *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error) + RotateConsPubKey(context.Context, *MsgRotateConsPubKey) (*MsgRotateConsPubKeyResponse, error) } // UnimplementedMsgServer can be embedded to have forward compatible implementations. @@ -753,6 +867,9 @@ func (*UnimplementedMsgServer) Undelegate(ctx context.Context, req *MsgUndelegat func (*UnimplementedMsgServer) CancelUnbondingDelegation(ctx context.Context, req *MsgCancelUnbondingDelegation) (*MsgCancelUnbondingDelegationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method CancelUnbondingDelegation not implemented") } +func (*UnimplementedMsgServer) RotateConsPubKey(ctx context.Context, req *MsgRotateConsPubKey) (*MsgRotateConsPubKeyResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RotateConsPubKey not implemented") +} func RegisterMsgServer(s grpc1.Server, srv MsgServer) { s.RegisterService(&_Msg_serviceDesc, srv) @@ -866,6 +983,24 @@ func _Msg_CancelUnbondingDelegation_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _Msg_RotateConsPubKey_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRotateConsPubKey) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RotateConsPubKey(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.staking.v1beta1.Msg/RotateConsPubKey", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RotateConsPubKey(ctx, req.(*MsgRotateConsPubKey)) + } + return interceptor(ctx, in, info, handler) +} + var _Msg_serviceDesc = grpc.ServiceDesc{ ServiceName: "cosmos.staking.v1beta1.Msg", HandlerType: (*MsgServer)(nil), @@ -894,6 +1029,10 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ MethodName: "CancelUnbondingDelegation", Handler: _Msg_CancelUnbondingDelegation_Handler, }, + { + MethodName: "RotateConsPubKey", + Handler: _Msg_RotateConsPubKey_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "cosmos/staking/v1beta1/tx.proto", @@ -1406,6 +1545,73 @@ func (m *MsgCancelUnbondingDelegationResponse) MarshalToSizedBuffer(dAtA []byte) return len(dAtA) - i, nil } +func (m *MsgRotateConsPubKey) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRotateConsPubKey) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRotateConsPubKey) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewPubKey) > 0 { + i -= len(m.NewPubKey) + copy(dAtA[i:], m.NewPubKey) + i = encodeVarintTx(dAtA, i, uint64(len(m.NewPubKey))) + i-- + dAtA[i] = 0x1a + } + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRotateConsPubKeyResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRotateConsPubKeyResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRotateConsPubKeyResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + func encodeVarintTx(dAtA []byte, offset int, v uint64) int { offset -= sovTx(v) base := offset @@ -1610,6 +1816,36 @@ func (m *MsgCancelUnbondingDelegationResponse) Size() (n int) { return n } +func (m *MsgRotateConsPubKey) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.NewPubKey) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRotateConsPubKeyResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + func sovTx(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } @@ -3091,6 +3327,202 @@ func (m *MsgCancelUnbondingDelegationResponse) Unmarshal(dAtA []byte) error { } return nil } +func (m *MsgRotateConsPubKey) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRotateConsPubKey: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRotateConsPubKey: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewPubKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewPubKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRotateConsPubKeyResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRotateConsPubKeyResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRotateConsPubKeyResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func skipTx(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 From 4abd99eb6820a1f9d38493d85d01415009f58154 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Fri, 20 May 2022 00:00:26 +1000 Subject: [PATCH 06/23] resolve build errors on ConsPubKeyRotationHistory and AfterConsensusPubKeyUpdate --- x/distribution/keeper/hooks.go | 1 + x/staking/keeper/cons_pubkey.go | 16 +++++++--------- x/staking/keeper/hooks.go | 1 + x/staking/keeper/msg_server.go | 6 +++--- x/staking/types/expected_keepers.go | 1 + x/staking/types/hooks.go | 5 +++-- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/x/distribution/keeper/hooks.go b/x/distribution/keeper/hooks.go index 29f0183c1abd..b9cd07ff3273 100644 --- a/x/distribution/keeper/hooks.go +++ b/x/distribution/keeper/hooks.go @@ -4,6 +4,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/distribution/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/tendermint/tendermint/crypto" ) // Wrapper struct diff --git a/x/staking/keeper/cons_pubkey.go b/x/staking/keeper/cons_pubkey.go index 6ef90e1f1220..441e59534c41 100644 --- a/x/staking/keeper/cons_pubkey.go +++ b/x/staking/keeper/cons_pubkey.go @@ -1,13 +1,11 @@ package keeper -type ConsPubKeyRotationHistory struct { - OperatorAddress sdk.ValAddress - OldConsPubKey crypto.PubKey - NewConsPubKey crypto.PubKey - RotatedHeight int64 -} +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" +) -func (k Keeper) SetConsPubKeyRotationHistory(ctx sdk.Context, history ConsPubKeyRotationHistory) { +func (k Keeper) SetConsPubKeyRotationHistory(ctx sdk.Context, history types.ConsPubKeyRotationHistory) { store := ctx.KVStore(k.storeKey) key := types.GetValidatorConsPubKeyRotationHistoryKey(history) historyBytes := types.MustMarshalConsPubKeyRotationHistory(k.cdc, history) @@ -18,7 +16,7 @@ func (k Keeper) SetConsPubKeyRotationHistory(ctx sdk.Context, history ConsPubKey store.Set(key, historyBytes) } -func (k Keeper) GetValidatorConsPubKeyRotationHistory(ctx sdk.Context, operatorAddress sdk.ValAddress) (historyObjects []ConsPubKeyRotationHistory) { +func (k Keeper) GetValidatorConsPubKeyRotationHistory(ctx sdk.Context, operatorAddress sdk.ValAddress) (historyObjects []types.ConsPubKeyRotationHistory) { store := ctx.KVStore(k.storeKey) iterator := sdk.KVStorePrefixIterator(store, types.GetValdiatorConsPubKeyRotationHistoryPrefix(valAddr)) @@ -31,7 +29,7 @@ func (k Keeper) GetValidatorConsPubKeyRotationHistory(ctx sdk.Context, operatorA return } -func (k Keeper) GetBlockConsPubKeyRotationHistory(ctx sdk.Context, height int64) (historyObjects []ConsPubKeyRotationHistory) { +func (k Keeper) GetBlockConsPubKeyRotationHistory(ctx sdk.Context, height int64) (historyObjects []types.ConsPubKeyRotationHistory) { store := ctx.KVStore(k.storeKey) iterator := sdk.KVStorePrefixIterator(store, types.GetBlockConsPubKeyRotationHistoryPrefix(height)) diff --git a/x/staking/keeper/hooks.go b/x/staking/keeper/hooks.go index 2fb868f3ffcd..61b41626df6f 100644 --- a/x/staking/keeper/hooks.go +++ b/x/staking/keeper/hooks.go @@ -3,6 +3,7 @@ package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/tendermint/tendermint/crypto" ) // Implements StakingHooks interface diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index affc7cc26158..2cceed0ab91d 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -545,9 +545,9 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC // Add ConsPubKeyRotationHistory for tracking rotation k.SetConsPubKeyRotationHistory(ctx, types.ConsPubKeyRotationHistory{ OperatorAddress: validator.OperatorAddress, - OldConsPubKey: oldConsensusPubKey, - NewConsPubKey: validator.ConsensusPubKey, - RotatedHeight: ctx.BlockHeight() + OldConsPubKey: oldConsensusPubKey, + NewConsPubKey: validator.ConsensusPubKey, + RotatedHeight: ctx.BlockHeight(), }) return &types.MsgRotateConsPubKeyResponse{}, nil diff --git a/x/staking/types/expected_keepers.go b/x/staking/types/expected_keepers.go index f4ada4313b1d..b20dcdedda28 100644 --- a/x/staking/types/expected_keepers.go +++ b/x/staking/types/expected_keepers.go @@ -3,6 +3,7 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/tendermint/tendermint/crypto" ) // DistributionKeeper expected distribution keeper (noalias) diff --git a/x/staking/types/hooks.go b/x/staking/types/hooks.go index 574268c752e0..4d11c63fc2fc 100644 --- a/x/staking/types/hooks.go +++ b/x/staking/types/hooks.go @@ -2,6 +2,7 @@ package types import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/tendermint/tendermint/crypto" ) // combine multiple staking hooks, all hook functions are run in array sequence @@ -94,9 +95,9 @@ func (h MultiStakingHooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.V } return nil } -func (h MultiStakingHooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec) error { +func (h MultiStakingHooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { for i := range h { - if err := h[i].AfterConsensusPubKeyUpdate(ctx, valAddr, fraction); err != nil { + if err := h[i].AfterConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey); err != nil { return err } } From 9509af4c1572f9cf72a538cf0ef9444c19907952 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Fri, 20 May 2022 23:05:35 +1000 Subject: [PATCH 07/23] resolve few build errors for historical info store/load --- proto/cosmos/staking/v1beta1/tx.proto | 7 +++---- x/staking/keeper/cons_pubkey.go | 3 +-- x/staking/types/historical_info.go | 27 ++++++++++++++++++++++++++ x/staking/types/keys.go | 28 +++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 6 deletions(-) diff --git a/proto/cosmos/staking/v1beta1/tx.proto b/proto/cosmos/staking/v1beta1/tx.proto index eafb09469ebf..843c31aa34ab 100644 --- a/proto/cosmos/staking/v1beta1/tx.proto +++ b/proto/cosmos/staking/v1beta1/tx.proto @@ -167,10 +167,9 @@ message MsgCancelUnbondingDelegation{ message MsgCancelUnbondingDelegationResponse {} message MsgRotateConsPubKey { - string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - string new_pub_key = 3 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + google.protobuf.Any new_pub_key = 3 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; } message MsgRotateConsPubKeyResponse {} - diff --git a/x/staking/keeper/cons_pubkey.go b/x/staking/keeper/cons_pubkey.go index 441e59534c41..f831114bbb96 100644 --- a/x/staking/keeper/cons_pubkey.go +++ b/x/staking/keeper/cons_pubkey.go @@ -11,7 +11,6 @@ func (k Keeper) SetConsPubKeyRotationHistory(ctx sdk.Context, history types.Cons historyBytes := types.MustMarshalConsPubKeyRotationHistory(k.cdc, history) store.Set(key, historyBytes) - // TODO: only set reference key = types.GetBlockConsPubKeyRotationHistoryKey(history) store.Set(key, historyBytes) } @@ -19,7 +18,7 @@ func (k Keeper) SetConsPubKeyRotationHistory(ctx sdk.Context, history types.Cons func (k Keeper) GetValidatorConsPubKeyRotationHistory(ctx sdk.Context, operatorAddress sdk.ValAddress) (historyObjects []types.ConsPubKeyRotationHistory) { store := ctx.KVStore(k.storeKey) - iterator := sdk.KVStorePrefixIterator(store, types.GetValdiatorConsPubKeyRotationHistoryPrefix(valAddr)) + iterator := sdk.KVStorePrefixIterator(store, types.GetValdiatorConsPubKeyRotationHistoryPrefix(operatorAddress.String())) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { diff --git a/x/staking/types/historical_info.go b/x/staking/types/historical_info.go index 447a559bda7b..a0f49953009d 100644 --- a/x/staking/types/historical_info.go +++ b/x/staking/types/historical_info.go @@ -80,3 +80,30 @@ func (hi HistoricalInfo) UnpackInterfaces(c codectypes.AnyUnpacker) error { } return nil } + +func MustUnmarshalConsPubKeyRotationHistory(cdc codec.BinaryCodec, value []byte) ConsPubKeyRotationHistory { + hi, err := UnmarshalConsPubKeyRotationHistory(cdc, value) + if err != nil { + panic(err) + } + + return hi +} + +func UnmarshalConsPubKeyRotationHistory(cdc codec.BinaryCodec, value []byte) (hi ConsPubKeyRotationHistory, err error) { + err = cdc.Unmarshal(value, &hi) + return hi, err +} + +func MustMarshalConsPubKeyRotationHistory(cdc codec.BinaryCodec, history ConsPubKeyRotationHistory) []byte { + hi, err := MarshalConsPubKeyRotationHistory(cdc, history) + if err != nil { + panic(err) + } + + return hi +} + +func MarshalConsPubKeyRotationHistory(cdc codec.BinaryCodec, hi ConsPubKeyRotationHistory) ([]byte, error) { + return cdc.Marshal(&hi) +} diff --git a/x/staking/types/keys.go b/x/staking/types/keys.go index 74d73bf19c7e..b81f0d9192fc 100644 --- a/x/staking/types/keys.go +++ b/x/staking/types/keys.go @@ -48,6 +48,9 @@ var ( ValidatorQueueKey = []byte{0x43} // prefix for the timestamps in validator queue HistoricalInfoKey = []byte{0x50} // prefix for the historical info + + ValidatorConsPubKeyRotationHistoryKey = []byte{0x60} // prefix for consPubkey rotation history by validator + BlockConsPubKeyRotationHistoryKey = []byte{0x61} // prefix for consPubkey rotation history by height ) // GetValidatorKey creates the key for the validator with address @@ -347,3 +350,28 @@ func GetREDsByDelToValDstIndexKey(delAddr sdk.AccAddress, valDstAddr sdk.ValAddr func GetHistoricalInfoKey(height int64) []byte { return append(HistoricalInfoKey, []byte(strconv.FormatInt(height, 10))...) } + +func GetValidatorConsPubKeyRotationHistoryKey(history ConsPubKeyRotationHistory) []byte { + return append(append( + ValidatorConsPubKeyRotationHistoryKey, + []byte(history.OperatorAddress)...), + sdk.Uint64ToBigEndian(uint64(history.RotatedHeight))...) +} + +func GetBlockConsPubKeyRotationHistoryKey(history ConsPubKeyRotationHistory) []byte { + return append(append( + BlockConsPubKeyRotationHistoryKey, + sdk.Uint64ToBigEndian(uint64(history.RotatedHeight))...), + []byte(history.OperatorAddress)...) +} + +func GetValdiatorConsPubKeyRotationHistoryPrefix(operatorAddress string) []byte { + return append( + ValidatorConsPubKeyRotationHistoryKey, + []byte(operatorAddress)...) +} +func GetBlockConsPubKeyRotationHistoryPrefix(height int64) []byte { + return append( + BlockConsPubKeyRotationHistoryKey, + sdk.Uint64ToBigEndian(uint64(height))...) +} From b77c92dc0f80a968cbd0493de394c25cb7c65eeb Mon Sep 17 00:00:00 2001 From: devstar Date: Fri, 20 May 2022 20:09:32 +0700 Subject: [PATCH 08/23] push generated proto code --- api/cosmos/staking/v1beta1/tx.pulsar.go | 239 +++++++++++++----------- x/staking/types/tx.pb.go | 169 +++++++++-------- 2 files changed, 217 insertions(+), 191 deletions(-) diff --git a/api/cosmos/staking/v1beta1/tx.pulsar.go b/api/cosmos/staking/v1beta1/tx.pulsar.go index 392f42f34fe6..6a9388fa1579 100644 --- a/api/cosmos/staking/v1beta1/tx.pulsar.go +++ b/api/cosmos/staking/v1beta1/tx.pulsar.go @@ -6259,8 +6259,8 @@ func (x *fastReflection_MsgRotateConsPubKey) Range(f func(protoreflect.FieldDesc return } } - if x.NewPubKey != "" { - value := protoreflect.ValueOfString(x.NewPubKey) + if x.NewPubKey != nil { + value := protoreflect.ValueOfMessage(x.NewPubKey.ProtoReflect()) if !f(fd_MsgRotateConsPubKey_new_pub_key, value) { return } @@ -6285,7 +6285,7 @@ func (x *fastReflection_MsgRotateConsPubKey) Has(fd protoreflect.FieldDescriptor case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": return x.ValidatorAddress != "" case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": - return x.NewPubKey != "" + return x.NewPubKey != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) @@ -6307,7 +6307,7 @@ func (x *fastReflection_MsgRotateConsPubKey) Clear(fd protoreflect.FieldDescript case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": x.ValidatorAddress = "" case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": - x.NewPubKey = "" + x.NewPubKey = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) @@ -6332,7 +6332,7 @@ func (x *fastReflection_MsgRotateConsPubKey) Get(descriptor protoreflect.FieldDe return protoreflect.ValueOfString(value) case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": value := x.NewPubKey - return protoreflect.ValueOfString(value) + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) @@ -6358,7 +6358,7 @@ func (x *fastReflection_MsgRotateConsPubKey) Set(fd protoreflect.FieldDescriptor case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": x.ValidatorAddress = value.Interface().(string) case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": - x.NewPubKey = value.Interface().(string) + x.NewPubKey = value.Message().Interface().(*anypb.Any) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) @@ -6379,12 +6379,15 @@ func (x *fastReflection_MsgRotateConsPubKey) Set(fd protoreflect.FieldDescriptor // Mutable is a mutating operation and unsafe for concurrent use. func (x *fastReflection_MsgRotateConsPubKey) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { switch fd.FullName() { + case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": + if x.NewPubKey == nil { + x.NewPubKey = new(anypb.Any) + } + return protoreflect.ValueOfMessage(x.NewPubKey.ProtoReflect()) case "cosmos.staking.v1beta1.MsgRotateConsPubKey.sender": panic(fmt.Errorf("field sender of message cosmos.staking.v1beta1.MsgRotateConsPubKey is not mutable")) case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": panic(fmt.Errorf("field validator_address of message cosmos.staking.v1beta1.MsgRotateConsPubKey is not mutable")) - case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": - panic(fmt.Errorf("field new_pub_key of message cosmos.staking.v1beta1.MsgRotateConsPubKey is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) @@ -6403,7 +6406,8 @@ func (x *fastReflection_MsgRotateConsPubKey) NewField(fd protoreflect.FieldDescr case "cosmos.staking.v1beta1.MsgRotateConsPubKey.validator_address": return protoreflect.ValueOfString("") case "cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key": - return protoreflect.ValueOfString("") + m := new(anypb.Any) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.MsgRotateConsPubKey")) @@ -6481,8 +6485,8 @@ func (x *fastReflection_MsgRotateConsPubKey) ProtoMethods() *protoiface.Methods if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } - l = len(x.NewPubKey) - if l > 0 { + if x.NewPubKey != nil { + l = options.Size(x.NewPubKey) n += 1 + l + runtime.Sov(uint64(l)) } if x.unknownFields != nil { @@ -6514,10 +6518,17 @@ func (x *fastReflection_MsgRotateConsPubKey) ProtoMethods() *protoiface.Methods i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if len(x.NewPubKey) > 0 { - i -= len(x.NewPubKey) - copy(dAtA[i:], x.NewPubKey) - i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NewPubKey))) + if x.NewPubKey != nil { + encoded, err := options.Marshal(x.NewPubKey) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) i-- dAtA[i] = 0x1a } @@ -6652,7 +6663,7 @@ func (x *fastReflection_MsgRotateConsPubKey) ProtoMethods() *protoiface.Methods if wireType != 2 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NewPubKey", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow @@ -6662,23 +6673,27 @@ func (x *fastReflection_MsgRotateConsPubKey) ProtoMethods() *protoiface.Methods } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength } if postIndex > l { return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF } - x.NewPubKey = string(dAtA[iNdEx:postIndex]) + if x.NewPubKey == nil { + x.NewPubKey = &anypb.Any{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.NewPubKey); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } iNdEx = postIndex default: iNdEx = preIndex @@ -7650,9 +7665,9 @@ type MsgRotateConsPubKey struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` - ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - NewPubKey string `protobuf:"bytes,3,opt,name=new_pub_key,json=newPubKey,proto3" json:"new_pub_key,omitempty"` + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + NewPubKey *anypb.Any `protobuf:"bytes,3,opt,name=new_pub_key,json=newPubKey,proto3" json:"new_pub_key,omitempty"` } func (x *MsgRotateConsPubKey) Reset() { @@ -7689,11 +7704,11 @@ func (x *MsgRotateConsPubKey) GetValidatorAddress() string { return "" } -func (x *MsgRotateConsPubKey) GetNewPubKey() string { +func (x *MsgRotateConsPubKey) GetNewPubKey() *anypb.Any { if x != nil { return x.NewPubKey } - return "" + return nil } type MsgRotateConsPubKeyResponse struct { @@ -7897,7 +7912,7 @@ var file_cosmos_staking_v1beta1_tx_proto_rawDesc = []byte{ 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x26, 0x0a, 0x24, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x13, 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x65, 0x22, 0xde, 0x01, 0x0a, 0x13, 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, @@ -7906,77 +7921,78 @@ var file_cosmos_staking_v1beta1_tx_proto_rawDesc = []byte{ 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xd2, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x10, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x12, 0x38, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x75, 0x62, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x18, 0xca, 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, - 0x79, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x22, 0x1d, 0x0a, 0x1b, - 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xa2, 0x06, 0x0a, 0x03, - 0x4d, 0x73, 0x67, 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x73, 0x73, 0x12, 0x4e, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x75, 0x62, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x42, 0x18, 0xca, + 0xb4, 0x2d, 0x14, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x6f, + 0x2e, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x6e, 0x65, 0x77, 0x50, 0x75, 0x62, 0x4b, + 0x65, 0x79, 0x22, 0x1d, 0x0a, 0x1b, 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x32, 0xa2, 0x06, 0x0a, 0x03, 0x4d, 0x73, 0x67, 0x12, 0x71, 0x0a, 0x0f, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x2a, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, + 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6b, 0x0a, 0x0d, + 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x28, 0x2e, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x45, 0x64, - 0x69, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, - 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, - 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, - 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, - 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, - 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, 0x01, 0x0a, 0x19, 0x43, 0x61, 0x6e, - 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x08, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, + 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x2b, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x0f, 0x42, 0x65, 0x67, 0x69, 0x6e, + 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x2e, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, 0x32, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, - 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, 0x63, + 0x4d, 0x73, 0x67, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x62, 0x0a, 0x0a, 0x55, 0x6e, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x1a, + 0x2d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x55, 0x6e, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x8f, + 0x01, 0x0a, 0x19, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x10, 0x52, 0x6f, - 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x12, 0x2b, - 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x1a, 0x33, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0xd7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, - 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, - 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x6f, 0x6e, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x43, + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x74, 0x0a, 0x10, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, + 0x62, 0x4b, 0x65, 0x79, 0x12, 0x2b, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, + 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, + 0x67, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, + 0x79, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x73, 0x67, 0x52, 0x6f, + 0x74, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0xd7, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x07, 0x54, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, + 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, + 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -8025,25 +8041,26 @@ var file_cosmos_staking_v1beta1_tx_proto_depIdxs = []int32{ 17, // 8: cosmos.staking.v1beta1.MsgUndelegate.amount:type_name -> cosmos.base.v1beta1.Coin 18, // 9: cosmos.staking.v1beta1.MsgUndelegateResponse.completion_time:type_name -> google.protobuf.Timestamp 17, // 10: cosmos.staking.v1beta1.MsgCancelUnbondingDelegation.amount:type_name -> cosmos.base.v1beta1.Coin - 0, // 11: cosmos.staking.v1beta1.Msg.CreateValidator:input_type -> cosmos.staking.v1beta1.MsgCreateValidator - 2, // 12: cosmos.staking.v1beta1.Msg.EditValidator:input_type -> cosmos.staking.v1beta1.MsgEditValidator - 4, // 13: cosmos.staking.v1beta1.Msg.Delegate:input_type -> cosmos.staking.v1beta1.MsgDelegate - 6, // 14: cosmos.staking.v1beta1.Msg.BeginRedelegate:input_type -> cosmos.staking.v1beta1.MsgBeginRedelegate - 8, // 15: cosmos.staking.v1beta1.Msg.Undelegate:input_type -> cosmos.staking.v1beta1.MsgUndelegate - 10, // 16: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:input_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegation - 12, // 17: cosmos.staking.v1beta1.Msg.RotateConsPubKey:input_type -> cosmos.staking.v1beta1.MsgRotateConsPubKey - 1, // 18: cosmos.staking.v1beta1.Msg.CreateValidator:output_type -> cosmos.staking.v1beta1.MsgCreateValidatorResponse - 3, // 19: cosmos.staking.v1beta1.Msg.EditValidator:output_type -> cosmos.staking.v1beta1.MsgEditValidatorResponse - 5, // 20: cosmos.staking.v1beta1.Msg.Delegate:output_type -> cosmos.staking.v1beta1.MsgDelegateResponse - 7, // 21: cosmos.staking.v1beta1.Msg.BeginRedelegate:output_type -> cosmos.staking.v1beta1.MsgBeginRedelegateResponse - 9, // 22: cosmos.staking.v1beta1.Msg.Undelegate:output_type -> cosmos.staking.v1beta1.MsgUndelegateResponse - 11, // 23: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:output_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse - 13, // 24: cosmos.staking.v1beta1.Msg.RotateConsPubKey:output_type -> cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse - 18, // [18:25] is the sub-list for method output_type - 11, // [11:18] is the sub-list for method input_type - 11, // [11:11] is the sub-list for extension type_name - 11, // [11:11] is the sub-list for extension extendee - 0, // [0:11] is the sub-list for field type_name + 16, // 11: cosmos.staking.v1beta1.MsgRotateConsPubKey.new_pub_key:type_name -> google.protobuf.Any + 0, // 12: cosmos.staking.v1beta1.Msg.CreateValidator:input_type -> cosmos.staking.v1beta1.MsgCreateValidator + 2, // 13: cosmos.staking.v1beta1.Msg.EditValidator:input_type -> cosmos.staking.v1beta1.MsgEditValidator + 4, // 14: cosmos.staking.v1beta1.Msg.Delegate:input_type -> cosmos.staking.v1beta1.MsgDelegate + 6, // 15: cosmos.staking.v1beta1.Msg.BeginRedelegate:input_type -> cosmos.staking.v1beta1.MsgBeginRedelegate + 8, // 16: cosmos.staking.v1beta1.Msg.Undelegate:input_type -> cosmos.staking.v1beta1.MsgUndelegate + 10, // 17: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:input_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegation + 12, // 18: cosmos.staking.v1beta1.Msg.RotateConsPubKey:input_type -> cosmos.staking.v1beta1.MsgRotateConsPubKey + 1, // 19: cosmos.staking.v1beta1.Msg.CreateValidator:output_type -> cosmos.staking.v1beta1.MsgCreateValidatorResponse + 3, // 20: cosmos.staking.v1beta1.Msg.EditValidator:output_type -> cosmos.staking.v1beta1.MsgEditValidatorResponse + 5, // 21: cosmos.staking.v1beta1.Msg.Delegate:output_type -> cosmos.staking.v1beta1.MsgDelegateResponse + 7, // 22: cosmos.staking.v1beta1.Msg.BeginRedelegate:output_type -> cosmos.staking.v1beta1.MsgBeginRedelegateResponse + 9, // 23: cosmos.staking.v1beta1.Msg.Undelegate:output_type -> cosmos.staking.v1beta1.MsgUndelegateResponse + 11, // 24: cosmos.staking.v1beta1.Msg.CancelUnbondingDelegation:output_type -> cosmos.staking.v1beta1.MsgCancelUnbondingDelegationResponse + 13, // 25: cosmos.staking.v1beta1.Msg.RotateConsPubKey:output_type -> cosmos.staking.v1beta1.MsgRotateConsPubKeyResponse + 19, // [19:26] is the sub-list for method output_type + 12, // [12:19] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_cosmos_staking_v1beta1_tx_proto_init() } diff --git a/x/staking/types/tx.pb.go b/x/staking/types/tx.pb.go index 22f208db2655..fc405cc24197 100644 --- a/x/staking/types/tx.pb.go +++ b/x/staking/types/tx.pb.go @@ -536,9 +536,9 @@ func (m *MsgCancelUnbondingDelegationResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgCancelUnbondingDelegationResponse proto.InternalMessageInfo type MsgRotateConsPubKey struct { - Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` - ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` - NewPubKey string `protobuf:"bytes,3,opt,name=new_pub_key,json=newPubKey,proto3" json:"new_pub_key,omitempty"` + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + NewPubKey *types.Any `protobuf:"bytes,3,opt,name=new_pub_key,json=newPubKey,proto3" json:"new_pub_key,omitempty"` } func (m *MsgRotateConsPubKey) Reset() { *m = MsgRotateConsPubKey{} } @@ -588,11 +588,11 @@ func (m *MsgRotateConsPubKey) GetValidatorAddress() string { return "" } -func (m *MsgRotateConsPubKey) GetNewPubKey() string { +func (m *MsgRotateConsPubKey) GetNewPubKey() *types.Any { if m != nil { return m.NewPubKey } - return "" + return nil } type MsgRotateConsPubKeyResponse struct { @@ -651,71 +651,71 @@ func init() { func init() { proto.RegisterFile("cosmos/staking/v1beta1/tx.proto", fileDescriptor_0926ef28816b35ab) } var fileDescriptor_0926ef28816b35ab = []byte{ - // 1011 bytes of a gzipped FileDescriptorProto + // 1010 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x57, 0x4d, 0x6f, 0x1b, 0x45, 0x18, 0xf6, 0xc6, 0xae, 0x69, 0xdf, 0xa8, 0x4d, 0xba, 0x49, 0xc0, 0x59, 0x8a, 0x5d, 0xb9, 0xa5, - 0x8d, 0x0a, 0x59, 0xb7, 0x69, 0x11, 0x55, 0xd5, 0x4b, 0x1d, 0xb7, 0xa2, 0x2a, 0x96, 0xd0, 0x86, - 0x72, 0x40, 0x48, 0xd6, 0x7e, 0x4c, 0x36, 0x2b, 0x7b, 0x67, 0xb6, 0x3b, 0xe3, 0xb4, 0xbe, 0x72, - 0xe2, 0x46, 0x25, 0xfe, 0x40, 0xc5, 0x0f, 0x40, 0x1c, 0xfa, 0x23, 0x22, 0x4e, 0x51, 0x4f, 0x88, - 0x43, 0x81, 0xe4, 0x00, 0x3f, 0x00, 0x71, 0x46, 0x3b, 0x3b, 0x3b, 0xfe, 0x58, 0x7b, 0xb3, 0x41, - 0xe9, 0x01, 0x71, 0xf2, 0x6a, 0xe6, 0x79, 0x9f, 0x99, 0x79, 0xde, 0x67, 0xde, 0x79, 0x0d, 0x35, - 0x9b, 0x50, 0x9f, 0xd0, 0x06, 0x65, 0x66, 0xd7, 0xc3, 0x6e, 0x63, 0xf7, 0x86, 0x85, 0x98, 0x79, - 0xa3, 0xc1, 0x9e, 0xe9, 0x41, 0x48, 0x18, 0x51, 0xdf, 0x8e, 0x01, 0xba, 0x00, 0xe8, 0x02, 0xa0, - 0xad, 0xba, 0x84, 0xb8, 0x3d, 0xd4, 0xe0, 0x28, 0xab, 0xbf, 0xdd, 0x30, 0xf1, 0x20, 0x0e, 0xd1, - 0x6a, 0x93, 0x53, 0xcc, 0xf3, 0x11, 0x65, 0xa6, 0x1f, 0x08, 0xc0, 0xb2, 0x4b, 0x5c, 0xc2, 0x3f, - 0x1b, 0xd1, 0x97, 0x18, 0x5d, 0x8d, 0x57, 0xea, 0xc4, 0x13, 0x62, 0xd9, 0x78, 0xaa, 0x2a, 0x76, - 0x69, 0x99, 0x14, 0xc9, 0x2d, 0xda, 0xc4, 0xc3, 0x62, 0xfe, 0xf2, 0x8c, 0x53, 0x24, 0x9b, 0x8e, - 0x51, 0xef, 0x08, 0x94, 0x4f, 0x23, 0x44, 0xf4, 0x13, 0x4f, 0xd4, 0x7f, 0x2f, 0x81, 0xda, 0xa6, - 0xee, 0x66, 0x88, 0x4c, 0x86, 0xbe, 0x30, 0x7b, 0x9e, 0x63, 0x32, 0x12, 0xaa, 0x8f, 0x60, 0xde, - 0x41, 0xd4, 0x0e, 0xbd, 0x80, 0x79, 0x04, 0x57, 0x94, 0x8b, 0xca, 0xda, 0xfc, 0xc6, 0x25, 0x7d, - 0xba, 0x20, 0x7a, 0x6b, 0x08, 0x6d, 0x96, 0xf6, 0x5e, 0xd7, 0x0a, 0xc6, 0x68, 0xb4, 0xda, 0x06, - 0xb0, 0x89, 0xef, 0x7b, 0x94, 0x46, 0x5c, 0x73, 0x9c, 0xeb, 0xea, 0x2c, 0xae, 0x4d, 0x89, 0x34, - 0x4c, 0x86, 0xa8, 0xe0, 0x1b, 0x21, 0x50, 0x7b, 0xb0, 0xe4, 0x7b, 0xb8, 0x43, 0x51, 0x6f, 0xbb, - 0xe3, 0xa0, 0x1e, 0x72, 0x4d, 0xbe, 0xc7, 0xe2, 0x45, 0x65, 0xed, 0x4c, 0xf3, 0x6e, 0x04, 0xff, - 0xe5, 0x75, 0xed, 0x8a, 0xeb, 0xb1, 0x9d, 0xbe, 0xa5, 0xdb, 0xc4, 0x17, 0x7a, 0x8a, 0x9f, 0x75, - 0xea, 0x74, 0x1b, 0x6c, 0x10, 0x20, 0xaa, 0x3f, 0xc4, 0xec, 0xd5, 0xcb, 0x75, 0x10, 0x1b, 0x79, - 0x88, 0x99, 0x71, 0xde, 0xf7, 0xf0, 0x16, 0xea, 0x6d, 0xb7, 0x24, 0xad, 0x7a, 0x1f, 0xce, 0x8b, - 0x45, 0x48, 0xd8, 0x31, 0x1d, 0x27, 0x44, 0x94, 0x56, 0x4a, 0x7c, 0xad, 0xca, 0xab, 0x97, 0xeb, - 0xcb, 0x22, 0xfa, 0x5e, 0x3c, 0xb3, 0xc5, 0x42, 0x0f, 0xbb, 0xc6, 0xa2, 0x0c, 0x11, 0xe3, 0x11, - 0xcd, 0x6e, 0xa2, 0xae, 0xa4, 0x39, 0x75, 0x14, 0x8d, 0x0c, 0x49, 0x68, 0x1e, 0x40, 0x39, 0xe8, - 0x5b, 0x5d, 0x34, 0xa8, 0x94, 0xb9, 0x8c, 0xcb, 0x7a, 0x6c, 0x38, 0x3d, 0x31, 0x9c, 0x7e, 0x0f, - 0x0f, 0x9a, 0x95, 0x9f, 0x86, 0x8c, 0x76, 0x38, 0x08, 0x18, 0xd1, 0x3f, 0xeb, 0x5b, 0x8f, 0xd0, - 0xc0, 0x10, 0xd1, 0xea, 0x47, 0x70, 0x6a, 0xd7, 0xec, 0xf5, 0x51, 0xe5, 0x2d, 0x4e, 0xb3, 0x9a, - 0x64, 0x23, 0x72, 0xd9, 0x48, 0x2a, 0xbc, 0x24, 0x9f, 0x31, 0xfa, 0xce, 0xad, 0x6f, 0x5e, 0xd4, - 0x0a, 0x7f, 0xbe, 0xa8, 0x15, 0xbe, 0xfe, 0xe3, 0xc7, 0x6b, 0x69, 0x5d, 0xf8, 0x68, 0xea, 0x98, - 0xf5, 0x0b, 0xa0, 0xa5, 0x2d, 0x66, 0x20, 0x1a, 0x10, 0x4c, 0x51, 0xfd, 0xbb, 0x22, 0x2c, 0xb6, - 0xa9, 0x7b, 0xdf, 0xf1, 0xd8, 0x1b, 0xf2, 0xdf, 0x54, 0xed, 0xe7, 0x8e, 0xad, 0xbd, 0x09, 0x0b, - 0x43, 0x17, 0x76, 0x42, 0x93, 0x21, 0xe1, 0xb9, 0xdb, 0x39, 0xfd, 0xd6, 0x42, 0xf6, 0x88, 0xdf, - 0x5a, 0xc8, 0x36, 0xce, 0xd9, 0x63, 0x6e, 0x57, 0x77, 0xa6, 0x5b, 0xbb, 0x74, 0xac, 0x65, 0xf2, - 0xd8, 0xfa, 0x4e, 0x75, 0x2c, 0x93, 0xe9, 0x9c, 0x69, 0x50, 0x99, 0x4c, 0x8a, 0xcc, 0xd8, 0x5f, - 0x0a, 0xcc, 0xb7, 0xa9, 0x2b, 0xd8, 0xd0, 0xf4, 0x2b, 0xa2, 0x9c, 0xcc, 0x15, 0x39, 0x7e, 0x9a, - 0x3e, 0x86, 0xb2, 0xe9, 0x93, 0x3e, 0x66, 0x3c, 0x3b, 0x39, 0xbc, 0x2d, 0xe0, 0x13, 0x92, 0xa4, - 0x4e, 0x54, 0x5f, 0x81, 0xa5, 0x91, 0x53, 0x4b, 0x35, 0xf6, 0xe7, 0x78, 0x05, 0x6d, 0x22, 0xd7, - 0xc3, 0x06, 0x72, 0x4e, 0x58, 0x94, 0x4f, 0x61, 0x65, 0x28, 0x0a, 0x0d, 0xed, 0xdc, 0xc2, 0x2c, - 0xc9, 0xb0, 0xad, 0xd0, 0x9e, 0xca, 0xe6, 0x50, 0x26, 0xd9, 0x8a, 0xb9, 0xd9, 0x5a, 0x94, 0xa5, - 0x95, 0x2e, 0x9d, 0xac, 0xd2, 0x5d, 0x5e, 0x30, 0x26, 0x14, 0x4d, 0x04, 0x57, 0xdb, 0xfc, 0x1e, - 0x06, 0x3d, 0x14, 0x19, 0xb9, 0x13, 0x3d, 0xb0, 0xa2, 0x3e, 0x68, 0xa9, 0x62, 0xf8, 0x79, 0xf2, - 0xfa, 0x36, 0x4f, 0x47, 0x1b, 0x78, 0xfe, 0x6b, 0x4d, 0xe1, 0x77, 0x4e, 0x04, 0x47, 0xd3, 0xf5, - 0xbf, 0x15, 0x38, 0xdb, 0xa6, 0xee, 0x63, 0xec, 0xfc, 0xcf, 0xfc, 0xbc, 0x0d, 0x2b, 0x63, 0xe7, - 0x7e, 0x53, 0x02, 0xff, 0x30, 0x07, 0x17, 0xa2, 0xfa, 0x6f, 0x62, 0x1b, 0xf5, 0x1e, 0x63, 0x8b, - 0x60, 0xc7, 0xc3, 0xee, 0x51, 0x4f, 0xec, 0x7f, 0x4e, 0x6f, 0xf5, 0x2a, 0x2c, 0xd8, 0xd1, 0x1b, - 0x17, 0x89, 0xb6, 0x83, 0x3c, 0x77, 0x27, 0xbe, 0x17, 0x45, 0xe3, 0x5c, 0x32, 0xfc, 0x09, 0x1f, - 0x3d, 0x32, 0x31, 0x57, 0xe0, 0x72, 0x96, 0x5e, 0xb2, 0xf2, 0xec, 0x29, 0xbc, 0x22, 0x19, 0x84, - 0x99, 0x0c, 0x6d, 0x12, 0x4c, 0xe3, 0x47, 0x5e, 0xbd, 0x0e, 0x65, 0x8a, 0xb0, 0x83, 0xc2, 0x23, - 0x45, 0x14, 0xb8, 0x93, 0x92, 0xee, 0x36, 0xcc, 0x63, 0xf4, 0xb4, 0x13, 0xf4, 0xad, 0x4e, 0xd4, - 0xa2, 0x88, 0xa2, 0x32, 0xb3, 0x19, 0x39, 0x83, 0xd1, 0xd3, 0xf8, 0xb3, 0xfe, 0x1e, 0xbc, 0x3b, - 0xe5, 0x24, 0xc9, 0x49, 0x37, 0xbe, 0x2f, 0x43, 0xb1, 0x4d, 0x5d, 0xf5, 0x09, 0x2c, 0x4c, 0x76, - 0xaa, 0xd7, 0x66, 0x35, 0x05, 0xe9, 0x96, 0x43, 0xdb, 0xc8, 0x8f, 0x95, 0x97, 0xa1, 0x0b, 0x67, - 0xc7, 0x5b, 0x93, 0xb5, 0x0c, 0x92, 0x31, 0xa4, 0x76, 0x3d, 0x2f, 0x52, 0x2e, 0xf6, 0x15, 0x9c, - 0x96, 0xaf, 0xea, 0xa5, 0x8c, 0xe8, 0x04, 0xa4, 0x7d, 0x90, 0x03, 0x24, 0xd9, 0x9f, 0xc0, 0xc2, - 0xe4, 0x2b, 0x95, 0xa5, 0xde, 0x04, 0x36, 0x53, 0xbd, 0x59, 0xb5, 0xda, 0x02, 0x18, 0x29, 0xac, - 0xef, 0x67, 0x30, 0x0c, 0x61, 0xda, 0x7a, 0x2e, 0x98, 0x5c, 0xe3, 0x5b, 0x05, 0x56, 0x67, 0x17, - 0x97, 0x5b, 0x59, 0x39, 0x9f, 0x15, 0xa5, 0xdd, 0xfd, 0x37, 0x51, 0x72, 0x47, 0x0c, 0x16, 0x53, - 0x97, 0x32, 0x2b, 0x53, 0x93, 0x60, 0xed, 0xe6, 0x31, 0xc0, 0xc9, 0xaa, 0xcd, 0x07, 0x7b, 0x07, - 0x55, 0x65, 0xff, 0xa0, 0xaa, 0xfc, 0x76, 0x50, 0x55, 0x9e, 0x1f, 0x56, 0x0b, 0xfb, 0x87, 0xd5, - 0xc2, 0xcf, 0x87, 0xd5, 0xc2, 0x97, 0x1f, 0x66, 0x76, 0x8d, 0xcf, 0xe4, 0x7f, 0x47, 0xde, 0x3f, - 0x5a, 0x65, 0x5e, 0xdd, 0x6f, 0xfe, 0x13, 0x00, 0x00, 0xff, 0xff, 0x19, 0x80, 0x42, 0xc9, 0x20, - 0x0f, 0x00, 0x00, + 0x8d, 0x0a, 0x59, 0xb7, 0x69, 0x11, 0xa8, 0xea, 0xa5, 0x8e, 0x5b, 0x51, 0x15, 0x23, 0xb4, 0xa1, + 0x1c, 0x10, 0x92, 0xb5, 0x1f, 0x93, 0xcd, 0xca, 0xbb, 0x33, 0xdb, 0x9d, 0x71, 0x5a, 0x5f, 0x39, + 0x71, 0xa3, 0x12, 0x7f, 0xa0, 0xe2, 0x07, 0x20, 0x0e, 0xfd, 0x11, 0x15, 0xa7, 0xa8, 0x27, 0xc4, + 0x21, 0x40, 0x72, 0x80, 0x1f, 0x80, 0x38, 0xa3, 0xdd, 0x9d, 0x1d, 0x7f, 0xac, 0xbd, 0xd9, 0x54, + 0xce, 0x01, 0xf5, 0xe4, 0xd5, 0xcc, 0xf3, 0x3e, 0xef, 0xcc, 0xf3, 0x7e, 0xcc, 0x6b, 0xa8, 0x99, + 0x84, 0x7a, 0x84, 0x36, 0x28, 0xd3, 0xbb, 0x0e, 0xb6, 0x1b, 0xbb, 0x37, 0x0c, 0xc4, 0xf4, 0x1b, + 0x0d, 0xf6, 0x54, 0xf5, 0x03, 0xc2, 0x88, 0xfc, 0x76, 0x0c, 0x50, 0x39, 0x40, 0xe5, 0x00, 0x65, + 0xd5, 0x26, 0xc4, 0x76, 0x51, 0x23, 0x42, 0x19, 0xbd, 0xed, 0x86, 0x8e, 0xfb, 0xb1, 0x89, 0x52, + 0x1b, 0xdf, 0x62, 0x8e, 0x87, 0x28, 0xd3, 0x3d, 0x9f, 0x03, 0x96, 0x6d, 0x62, 0x93, 0xe8, 0xb3, + 0x11, 0x7e, 0xf1, 0xd5, 0xd5, 0xd8, 0x53, 0x27, 0xde, 0xe0, 0x6e, 0xe3, 0xad, 0x2a, 0x3f, 0xa5, + 0xa1, 0x53, 0x24, 0x8e, 0x68, 0x12, 0x07, 0xf3, 0xfd, 0xcb, 0x53, 0x6e, 0x91, 0x1c, 0x3a, 0x46, + 0xbd, 0xc3, 0x51, 0x1e, 0x0d, 0x11, 0xe1, 0x4f, 0xbc, 0x51, 0xff, 0xb3, 0x04, 0x72, 0x9b, 0xda, + 0x9b, 0x01, 0xd2, 0x19, 0xfa, 0x4a, 0x77, 0x1d, 0x4b, 0x67, 0x24, 0x90, 0x1f, 0xc2, 0xbc, 0x85, + 0xa8, 0x19, 0x38, 0x3e, 0x73, 0x08, 0xae, 0x48, 0x17, 0xa5, 0xb5, 0xf9, 0x8d, 0x4b, 0xea, 0x64, + 0x41, 0xd4, 0xd6, 0x00, 0xda, 0x2c, 0xbd, 0xdc, 0xaf, 0x15, 0xb4, 0x61, 0x6b, 0xb9, 0x0d, 0x60, + 0x12, 0xcf, 0x73, 0x28, 0x0d, 0xb9, 0xe6, 0x22, 0xae, 0xab, 0xd3, 0xb8, 0x36, 0x05, 0x52, 0xd3, + 0x19, 0xa2, 0x9c, 0x6f, 0x88, 0x40, 0x76, 0x61, 0xc9, 0x73, 0x70, 0x87, 0x22, 0x77, 0xbb, 0x63, + 0x21, 0x17, 0xd9, 0x7a, 0x74, 0xc6, 0xe2, 0x45, 0x69, 0xed, 0x4c, 0xf3, 0x4e, 0x08, 0xff, 0x6d, + 0xbf, 0x76, 0xc5, 0x76, 0xd8, 0x4e, 0xcf, 0x50, 0x4d, 0xe2, 0x71, 0x3d, 0xf9, 0xcf, 0x3a, 0xb5, + 0xba, 0x0d, 0xd6, 0xf7, 0x11, 0x55, 0x1f, 0x60, 0xf6, 0xea, 0xc5, 0x3a, 0xf0, 0x83, 0x3c, 0xc0, + 0x4c, 0x3b, 0xef, 0x39, 0x78, 0x0b, 0xb9, 0xdb, 0x2d, 0x41, 0x2b, 0xdf, 0x83, 0xf3, 0xdc, 0x09, + 0x09, 0x3a, 0xba, 0x65, 0x05, 0x88, 0xd2, 0x4a, 0x29, 0xf2, 0x55, 0x79, 0xf5, 0x62, 0x7d, 0x99, + 0x5b, 0xdf, 0x8d, 0x77, 0xb6, 0x58, 0xe0, 0x60, 0x5b, 0x5b, 0x14, 0x26, 0x7c, 0x3d, 0xa4, 0xd9, + 0x4d, 0xd4, 0x15, 0x34, 0xa7, 0x8e, 0xa2, 0x11, 0x26, 0x09, 0xcd, 0x7d, 0x28, 0xfb, 0x3d, 0xa3, + 0x8b, 0xfa, 0x95, 0x72, 0x24, 0xe3, 0xb2, 0x1a, 0x27, 0x9c, 0x9a, 0x24, 0x9c, 0x7a, 0x17, 0xf7, + 0x9b, 0x95, 0x5f, 0x06, 0x8c, 0x66, 0xd0, 0xf7, 0x19, 0x51, 0xbf, 0xe8, 0x19, 0x0f, 0x51, 0x5f, + 0xe3, 0xd6, 0xf2, 0x47, 0x70, 0x6a, 0x57, 0x77, 0x7b, 0xa8, 0xf2, 0x56, 0x44, 0xb3, 0x9a, 0x44, + 0x23, 0xcc, 0xb2, 0xa1, 0x50, 0x38, 0x49, 0x3c, 0x63, 0xf4, 0xed, 0x5b, 0xdf, 0x3d, 0xaf, 0x15, + 0xfe, 0x7e, 0x5e, 0x2b, 0x7c, 0xfb, 0xd7, 0xcf, 0xd7, 0xd2, 0xba, 0x44, 0xab, 0xa9, 0x6b, 0xd6, + 0x2f, 0x80, 0x92, 0x4e, 0x31, 0x0d, 0x51, 0x9f, 0x60, 0x8a, 0xea, 0x3f, 0x14, 0x61, 0xb1, 0x4d, + 0xed, 0x7b, 0x96, 0xc3, 0x4e, 0x28, 0xff, 0x26, 0x6a, 0x3f, 0x77, 0x6c, 0xed, 0x75, 0x58, 0x18, + 0x64, 0x61, 0x27, 0xd0, 0x19, 0xe2, 0x39, 0xf7, 0x49, 0xce, 0x7c, 0x6b, 0x21, 0x73, 0x28, 0xdf, + 0x5a, 0xc8, 0xd4, 0xce, 0x99, 0x23, 0xd9, 0x2e, 0xef, 0x4c, 0x4e, 0xed, 0xd2, 0xb1, 0xdc, 0xe4, + 0x49, 0xeb, 0xdb, 0xd5, 0x91, 0x48, 0xa6, 0x63, 0xa6, 0x40, 0x65, 0x3c, 0x28, 0x22, 0x62, 0xff, + 0x48, 0x30, 0xdf, 0xa6, 0x36, 0x67, 0x43, 0x93, 0x4b, 0x44, 0x9a, 0x4d, 0x89, 0x1c, 0x3f, 0x4c, + 0x1f, 0x43, 0x59, 0xf7, 0x48, 0x0f, 0xb3, 0x28, 0x3a, 0x39, 0x72, 0x9b, 0xc3, 0xc7, 0x24, 0x49, + 0xdd, 0xa8, 0xbe, 0x02, 0x4b, 0x43, 0xb7, 0x16, 0x6a, 0xec, 0xcd, 0x45, 0x1d, 0xb4, 0x89, 0x6c, + 0x07, 0x6b, 0xc8, 0x9a, 0xb1, 0x28, 0x9f, 0xc1, 0xca, 0x40, 0x14, 0x1a, 0x98, 0xb9, 0x85, 0x59, + 0x12, 0x66, 0x5b, 0x81, 0x39, 0x91, 0xcd, 0xa2, 0x4c, 0xb0, 0x15, 0x73, 0xb3, 0xb5, 0x28, 0x4b, + 0x2b, 0x5d, 0x9a, 0xad, 0xd2, 0xdd, 0xa8, 0x61, 0x8c, 0x29, 0x9a, 0x08, 0x2e, 0xb7, 0xa3, 0x3a, + 0xf4, 0x5d, 0x14, 0x26, 0x72, 0x27, 0x7c, 0x60, 0x79, 0x7f, 0x50, 0x52, 0xcd, 0xf0, 0xcb, 0xe4, + 0xf5, 0x6d, 0x9e, 0x0e, 0x0f, 0xf0, 0xec, 0xf7, 0x9a, 0x14, 0xd5, 0x1c, 0x37, 0x0e, 0xb7, 0xeb, + 0xff, 0x4a, 0x70, 0xb6, 0x4d, 0xed, 0x47, 0xd8, 0x7a, 0xc3, 0xf2, 0x79, 0x1b, 0x56, 0x46, 0xee, + 0x7d, 0x52, 0x02, 0xff, 0x34, 0x07, 0x17, 0xc2, 0xfe, 0xaf, 0x63, 0x13, 0xb9, 0x8f, 0xb0, 0x41, + 0xb0, 0xe5, 0x60, 0xfb, 0xa8, 0x27, 0xf6, 0x7f, 0xa7, 0xb7, 0x7c, 0x15, 0x16, 0xcc, 0xf0, 0x8d, + 0x0b, 0x45, 0xdb, 0x41, 0x8e, 0xbd, 0x13, 0xd7, 0x45, 0x51, 0x3b, 0x97, 0x2c, 0x7f, 0x1a, 0xad, + 0x1e, 0x19, 0x98, 0x2b, 0x70, 0x39, 0x4b, 0x2f, 0xd1, 0x79, 0xf6, 0xa5, 0xa8, 0x23, 0x69, 0x84, + 0xe9, 0x0c, 0x6d, 0x12, 0x4c, 0xe3, 0x47, 0x5e, 0xbe, 0x0e, 0x65, 0x8a, 0xb0, 0x85, 0x82, 0x23, + 0x45, 0xe4, 0xb8, 0x59, 0x49, 0xf7, 0x39, 0xcc, 0x63, 0xf4, 0xa4, 0xe3, 0xf7, 0x8c, 0x4e, 0x38, + 0xa2, 0x14, 0x5f, 0x6b, 0x44, 0x39, 0x83, 0xd1, 0x93, 0xf8, 0xb3, 0xfe, 0x1e, 0xbc, 0x3b, 0xe1, + 0x7e, 0xc9, 0xfd, 0x37, 0x7e, 0x2c, 0x43, 0xb1, 0x4d, 0x6d, 0xf9, 0x31, 0x2c, 0x8c, 0xcf, 0xaf, + 0xd7, 0xa6, 0x8d, 0x0a, 0xe9, 0x41, 0x44, 0xd9, 0xc8, 0x8f, 0x15, 0x25, 0xd2, 0x85, 0xb3, 0xa3, + 0x03, 0xcb, 0x5a, 0x06, 0xc9, 0x08, 0x52, 0xb9, 0x9e, 0x17, 0x29, 0x9c, 0x7d, 0x03, 0xa7, 0xc5, + 0x5b, 0x7b, 0x29, 0xc3, 0x3a, 0x01, 0x29, 0x1f, 0xe4, 0x00, 0x09, 0xf6, 0xc7, 0xb0, 0x30, 0xfe, + 0x76, 0x65, 0xa9, 0x37, 0x86, 0xcd, 0x54, 0x6f, 0x5a, 0x07, 0x37, 0x00, 0x86, 0xda, 0xed, 0xfb, + 0x19, 0x0c, 0x03, 0x98, 0xb2, 0x9e, 0x0b, 0x26, 0x7c, 0x7c, 0x2f, 0xc1, 0xea, 0xf4, 0x96, 0x73, + 0x2b, 0x2b, 0xe6, 0xd3, 0xac, 0x94, 0x3b, 0xaf, 0x63, 0x25, 0x4e, 0xc4, 0x60, 0x31, 0x55, 0xaa, + 0x59, 0x91, 0x1a, 0x07, 0x2b, 0x37, 0x8f, 0x01, 0x4e, 0xbc, 0x36, 0xef, 0xbf, 0x3c, 0xa8, 0x4a, + 0x7b, 0x07, 0x55, 0xe9, 0x8f, 0x83, 0xaa, 0xf4, 0xec, 0xb0, 0x5a, 0xd8, 0x3b, 0xac, 0x16, 0x7e, + 0x3d, 0xac, 0x16, 0xbe, 0xfe, 0x30, 0x73, 0x96, 0x7c, 0x2a, 0xfe, 0x51, 0x46, 0x53, 0xa5, 0x51, + 0x8e, 0xca, 0xf7, 0xe6, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x88, 0x38, 0x9b, 0x36, 0x0f, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1565,10 +1565,15 @@ func (m *MsgRotateConsPubKey) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if len(m.NewPubKey) > 0 { - i -= len(m.NewPubKey) - copy(dAtA[i:], m.NewPubKey) - i = encodeVarintTx(dAtA, i, uint64(len(m.NewPubKey))) + if m.NewPubKey != nil { + { + size, err := m.NewPubKey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x1a } @@ -1830,8 +1835,8 @@ func (m *MsgRotateConsPubKey) Size() (n int) { if l > 0 { n += 1 + l + sovTx(uint64(l)) } - l = len(m.NewPubKey) - if l > 0 { + if m.NewPubKey != nil { + l = m.NewPubKey.Size() n += 1 + l + sovTx(uint64(l)) } return n @@ -3424,7 +3429,7 @@ func (m *MsgRotateConsPubKey) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field NewPubKey", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTx @@ -3434,23 +3439,27 @@ func (m *MsgRotateConsPubKey) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTx } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTx } if postIndex > l { return io.ErrUnexpectedEOF } - m.NewPubKey = string(dAtA[iNdEx:postIndex]) + if m.NewPubKey == nil { + m.NewPubKey = &types.Any{} + } + if err := m.NewPubKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex default: iNdEx = preIndex From 8ee352d2e8d8526c4ea5c5c7772f30150ae96e06 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Fri, 20 May 2022 23:56:35 +1000 Subject: [PATCH 09/23] implement further logic for msg server --- proto/cosmos/staking/v1beta1/staking.proto | 4 ++ x/staking/keeper/msg_server.go | 45 ++++++++---- x/staking/keeper/params.go | 13 ++++ x/staking/keeper/validator.go | 2 +- x/staking/spec/08_params.md | 18 ++--- x/staking/types/errors.go | 80 +++++++++++----------- x/staking/types/params.go | 64 +++++++++++++---- 7 files changed, 151 insertions(+), 75 deletions(-) diff --git a/proto/cosmos/staking/v1beta1/staking.proto b/proto/cosmos/staking/v1beta1/staking.proto index 83d2066f2be5..9c6f47bc3f52 100644 --- a/proto/cosmos/staking/v1beta1/staking.proto +++ b/proto/cosmos/staking/v1beta1/staking.proto @@ -310,6 +310,10 @@ message Params { (gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec", (gogoproto.nullable) = false ]; + // max_cons_pub_key_rotations is maximum number of consensus pubkey rotations + uint64 max_cons_pub_key_rotations = 7; + // cons_pubkey_rotation_fee is fee to be spent when rotating validator's consensus pubkey + cosmos.base.v1beta1.Coin cons_pubkey_rotation_fee = 8 [(gogoproto.nullable) = false]; } // DelegationResponse is equivalent to Delegation except that it contains a diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 2cceed0ab91d..19211289256e 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -506,47 +506,66 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC // return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "expecting cryptotypes.PubKey, got %T", pk) // } - consAddr := sdk.ConsAddress(msg.NewPubKey.Address()) + pk, ok := msg.NewPubKey.GetCachedValue().(cryptotypes.PubKey) + if !ok { + return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "Expecting cryptotypes.PubKey, got %T", pk) + } + + consAddr := sdk.ConsAddress(pk.Address()) // checks if NewPubKey is not duplicated on ValidatorsByConsAddr - validator := k.Keeper.ValidatorByConsAddr(ctx) + validator := k.Keeper.ValidatorByConsAddr(ctx, consAddr) if validator != nil { return nil, types.ErrConsensusPubKeyAlreadyUsedForAValidator } + maxConsPubKeyRotations := k.MaxConsPubKeyRotations(ctx) // checks if the validator is does not exceed parameter MaxConsPubKeyRotations by iterating ConsPubKeyRotationHistory - historyObjects := k.GetValidatorConsPubKeyRotationHistory(ctx, validator.OperatorAddress) - if len(historyObjects) > MaxConsPubKeyRotations { + historyObjects := k.GetValidatorConsPubKeyRotationHistory(ctx, validator.GetOperator()) + if len(historyObjects) > int(maxConsPubKeyRotations) { return nil, types.ErrExceedingMaxConsPubKeyRotations } // checks if the signing account has enough balance to pay KeyRotationFee // pays KeyRotationFee to community fund - err := k.Keeper.FundCommunityPool(ctx, KeyRotationFee, msg.Sender) + rotationFee := k.ConsPubKeyRotationFee(ctx) + err := k.Keeper.FundCommunityPool(ctx, rotationFee, msg.Sender) if err != nil { return nil, err } - validator, found := k.Keeper.GetValidator(ctx, msg.ValidatorAddress) + valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if err != nil { + return nil, err + } + + validator, found := k.Keeper.GetValidator(ctx, valAddr) if !found { return nil, types.ErrNoValidatorFound } // deletes old ValidatorByConsAddr - k.DeleteValidatorByConsAddr(ctx, validator) + err = k.DeleteValidatorByConsAddr(ctx, validator) + if err != nil { + return nil, err + } // overwrites NewPubKey in validator.ConsPubKey - oldConsensusPubKey := validator.ConsensusPubKey - validator.ConsensusPubKey = msg.NewPubKey + val, ok := validator.(types.Validator) + if !ok { + return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "Expecting types.Validator, got %T", validator) + } // SetValidatorByConsAddr for NewPubKey - k.SetValidatorByConsAddr(ctx, validator) + oldConsensusPubKey := val.ConsensusPubkey + val.ConsensusPubkey = msg.NewPubKey + k.SetValidatorByConsAddr(ctx, val) // Add ConsPubKeyRotationHistory for tracking rotation k.SetConsPubKeyRotationHistory(ctx, types.ConsPubKeyRotationHistory{ - OperatorAddress: validator.OperatorAddress, - OldConsPubKey: oldConsensusPubKey, - NewConsPubKey: validator.ConsensusPubKey, + OperatorAddress: validator.GetOperator().String(), + OldConsPubkey: oldConsensusPubKey, + NewConsPubkey: msg.NewPubKey, RotatedHeight: ctx.BlockHeight(), }) diff --git a/x/staking/keeper/params.go b/x/staking/keeper/params.go index 498576fea53f..37734b5d8b19 100644 --- a/x/staking/keeper/params.go +++ b/x/staking/keeper/params.go @@ -53,6 +53,17 @@ func (k Keeper) MinCommissionRate(ctx sdk.Context) (res sdk.Dec) { return } +// MaxConsPubKeyRotations - Maximum consensus pubkey rotations +func (k Keeper) MaxConsPubKeyRotations(ctx sdk.Context) (res uint64) { + k.paramstore.Get(ctx, types.KeyMaxConsPubKeyRotations, &res) + return +} + +func (k Keeper) ConsPubKeyRotationFee(ctx sdk.Context) (res sdk.Coin) { + k.paramstore.Get(ctx, types.KeyConsPubKeyRotationFee, &res) + return +} + // Get all parameters as types.Params func (k Keeper) GetParams(ctx sdk.Context) types.Params { return types.NewParams( @@ -62,6 +73,8 @@ func (k Keeper) GetParams(ctx sdk.Context) types.Params { k.HistoricalEntries(ctx), k.BondDenom(ctx), k.MinCommissionRate(ctx), + k.MaxConsPubKeyRotations(ctx), + k.ConsPubKeyRotationFee(ctx), ) } diff --git a/x/staking/keeper/validator.go b/x/staking/keeper/validator.go index 188ac392d3f1..924725607a8f 100644 --- a/x/staking/keeper/validator.go +++ b/x/staking/keeper/validator.go @@ -72,7 +72,7 @@ func (k Keeper) SetValidatorByConsAddr(ctx sdk.Context, validator types.Validato } // validator index -func (k Keeper) DeleteValidatorByConsAddr(ctx sdk.Context, validator types.Validator) error { +func (k Keeper) DeleteValidatorByConsAddr(ctx sdk.Context, validator types.ValidatorI) error { consPk, err := validator.GetConsAddr() if err != nil { return err diff --git a/x/staking/spec/08_params.md b/x/staking/spec/08_params.md index e4a56ab3fac2..05cc1f1e2fad 100644 --- a/x/staking/spec/08_params.md +++ b/x/staking/spec/08_params.md @@ -6,11 +6,13 @@ order: 8 The staking module contains the following parameters: -| Key | Type | Example | -|-------------------|------------------|------------------------| -| UnbondingTime | string (time ns) | "259200000000000" | -| MaxValidators | uint16 | 100 | -| KeyMaxEntries | uint16 | 7 | -| HistoricalEntries | uint16 | 3 | -| BondDenom | string | "stake" | -| MinCommissionRate | string | "0.000000000000000000" | +| Key | Type | Example | +| ---------------------- | ---------------- | ---------------------- | +| UnbondingTime | string (time ns) | "259200000000000" | +| MaxValidators | uint16 | 100 | +| KeyMaxEntries | uint16 | 7 | +| HistoricalEntries | uint16 | 3 | +| BondDenom | string | "stake" | +| MinCommissionRate | string | "0.000000000000000000" | +| MaxConsPubKeyRotations | uint64 | 10 | +| ConsPubKeyRotationFee | string | "1000000uatom" | diff --git a/x/staking/types/errors.go b/x/staking/types/errors.go index a9a6e43e35b6..d5df09c2f1ff 100644 --- a/x/staking/types/errors.go +++ b/x/staking/types/errors.go @@ -11,43 +11,45 @@ import ( // // REF: https://github.com/cosmos/cosmos-sdk/issues/5450 var ( - ErrEmptyValidatorAddr = sdkerrors.Register(ModuleName, 2, "empty validator address") - ErrNoValidatorFound = sdkerrors.Register(ModuleName, 3, "validator does not exist") - ErrValidatorOwnerExists = sdkerrors.Register(ModuleName, 4, "validator already exist for this operator address; must use new validator operator address") - ErrValidatorPubKeyExists = sdkerrors.Register(ModuleName, 5, "validator already exist for this pubkey; must use new validator pubkey") - ErrValidatorPubKeyTypeNotSupported = sdkerrors.Register(ModuleName, 6, "validator pubkey type is not supported") - ErrValidatorJailed = sdkerrors.Register(ModuleName, 7, "validator for this address is currently jailed") - ErrBadRemoveValidator = sdkerrors.Register(ModuleName, 8, "failed to remove validator") - ErrCommissionNegative = sdkerrors.Register(ModuleName, 9, "commission must be positive") - ErrCommissionHuge = sdkerrors.Register(ModuleName, 10, "commission cannot be more than 100%") - ErrCommissionGTMaxRate = sdkerrors.Register(ModuleName, 11, "commission cannot be more than the max rate") - ErrCommissionUpdateTime = sdkerrors.Register(ModuleName, 12, "commission cannot be changed more than once in 24h") - ErrCommissionChangeRateNegative = sdkerrors.Register(ModuleName, 13, "commission change rate must be positive") - ErrCommissionChangeRateGTMaxRate = sdkerrors.Register(ModuleName, 14, "commission change rate cannot be more than the max rate") - ErrCommissionGTMaxChangeRate = sdkerrors.Register(ModuleName, 15, "commission cannot be changed more than max change rate") - ErrSelfDelegationBelowMinimum = sdkerrors.Register(ModuleName, 16, "validator's self delegation must be greater than their minimum self delegation") - ErrMinSelfDelegationDecreased = sdkerrors.Register(ModuleName, 17, "minimum self delegation cannot be decrease") - ErrEmptyDelegatorAddr = sdkerrors.Register(ModuleName, 18, "empty delegator address") - ErrNoDelegation = sdkerrors.Register(ModuleName, 19, "no delegation for (address, validator) tuple") - ErrBadDelegatorAddr = sdkerrors.Register(ModuleName, 20, "delegator does not exist with address") - ErrNoDelegatorForAddress = sdkerrors.Register(ModuleName, 21, "delegator does not contain delegation") - ErrInsufficientShares = sdkerrors.Register(ModuleName, 22, "insufficient delegation shares") - ErrDelegationValidatorEmpty = sdkerrors.Register(ModuleName, 23, "cannot delegate to an empty validator") - ErrNotEnoughDelegationShares = sdkerrors.Register(ModuleName, 24, "not enough delegation shares") - ErrNotMature = sdkerrors.Register(ModuleName, 25, "entry not mature") - ErrNoUnbondingDelegation = sdkerrors.Register(ModuleName, 26, "no unbonding delegation found") - ErrMaxUnbondingDelegationEntries = sdkerrors.Register(ModuleName, 27, "too many unbonding delegation entries for (delegator, validator) tuple") - ErrNoRedelegation = sdkerrors.Register(ModuleName, 28, "no redelegation found") - ErrSelfRedelegation = sdkerrors.Register(ModuleName, 29, "cannot redelegate to the same validator") - ErrTinyRedelegationAmount = sdkerrors.Register(ModuleName, 30, "too few tokens to redelegate (truncates to zero tokens)") - ErrBadRedelegationDst = sdkerrors.Register(ModuleName, 31, "redelegation destination validator not found") - ErrTransitiveRedelegation = sdkerrors.Register(ModuleName, 32, "redelegation to this validator already in progress; first redelegation to this validator must complete before next redelegation") - ErrMaxRedelegationEntries = sdkerrors.Register(ModuleName, 33, "too many redelegation entries for (delegator, src-validator, dst-validator) tuple") - ErrDelegatorShareExRateInvalid = sdkerrors.Register(ModuleName, 34, "cannot delegate to validators with invalid (zero) ex-rate") - ErrBothShareMsgsGiven = sdkerrors.Register(ModuleName, 35, "both shares amount and shares percent provided") - ErrNeitherShareMsgsGiven = sdkerrors.Register(ModuleName, 36, "neither shares amount nor shares percent provided") - ErrInvalidHistoricalInfo = sdkerrors.Register(ModuleName, 37, "invalid historical info") - ErrNoHistoricalInfo = sdkerrors.Register(ModuleName, 38, "no historical info found") - ErrEmptyValidatorPubKey = sdkerrors.Register(ModuleName, 39, "empty validator public key") - ErrCommissionLTMinRate = sdkerrors.Register(ModuleName, 40, "commission cannot be less than min rate") + ErrEmptyValidatorAddr = sdkerrors.Register(ModuleName, 2, "empty validator address") + ErrNoValidatorFound = sdkerrors.Register(ModuleName, 3, "validator does not exist") + ErrValidatorOwnerExists = sdkerrors.Register(ModuleName, 4, "validator already exist for this operator address; must use new validator operator address") + ErrValidatorPubKeyExists = sdkerrors.Register(ModuleName, 5, "validator already exist for this pubkey; must use new validator pubkey") + ErrValidatorPubKeyTypeNotSupported = sdkerrors.Register(ModuleName, 6, "validator pubkey type is not supported") + ErrValidatorJailed = sdkerrors.Register(ModuleName, 7, "validator for this address is currently jailed") + ErrBadRemoveValidator = sdkerrors.Register(ModuleName, 8, "failed to remove validator") + ErrCommissionNegative = sdkerrors.Register(ModuleName, 9, "commission must be positive") + ErrCommissionHuge = sdkerrors.Register(ModuleName, 10, "commission cannot be more than 100%") + ErrCommissionGTMaxRate = sdkerrors.Register(ModuleName, 11, "commission cannot be more than the max rate") + ErrCommissionUpdateTime = sdkerrors.Register(ModuleName, 12, "commission cannot be changed more than once in 24h") + ErrCommissionChangeRateNegative = sdkerrors.Register(ModuleName, 13, "commission change rate must be positive") + ErrCommissionChangeRateGTMaxRate = sdkerrors.Register(ModuleName, 14, "commission change rate cannot be more than the max rate") + ErrCommissionGTMaxChangeRate = sdkerrors.Register(ModuleName, 15, "commission cannot be changed more than max change rate") + ErrSelfDelegationBelowMinimum = sdkerrors.Register(ModuleName, 16, "validator's self delegation must be greater than their minimum self delegation") + ErrMinSelfDelegationDecreased = sdkerrors.Register(ModuleName, 17, "minimum self delegation cannot be decrease") + ErrEmptyDelegatorAddr = sdkerrors.Register(ModuleName, 18, "empty delegator address") + ErrNoDelegation = sdkerrors.Register(ModuleName, 19, "no delegation for (address, validator) tuple") + ErrBadDelegatorAddr = sdkerrors.Register(ModuleName, 20, "delegator does not exist with address") + ErrNoDelegatorForAddress = sdkerrors.Register(ModuleName, 21, "delegator does not contain delegation") + ErrInsufficientShares = sdkerrors.Register(ModuleName, 22, "insufficient delegation shares") + ErrDelegationValidatorEmpty = sdkerrors.Register(ModuleName, 23, "cannot delegate to an empty validator") + ErrNotEnoughDelegationShares = sdkerrors.Register(ModuleName, 24, "not enough delegation shares") + ErrNotMature = sdkerrors.Register(ModuleName, 25, "entry not mature") + ErrNoUnbondingDelegation = sdkerrors.Register(ModuleName, 26, "no unbonding delegation found") + ErrMaxUnbondingDelegationEntries = sdkerrors.Register(ModuleName, 27, "too many unbonding delegation entries for (delegator, validator) tuple") + ErrNoRedelegation = sdkerrors.Register(ModuleName, 28, "no redelegation found") + ErrSelfRedelegation = sdkerrors.Register(ModuleName, 29, "cannot redelegate to the same validator") + ErrTinyRedelegationAmount = sdkerrors.Register(ModuleName, 30, "too few tokens to redelegate (truncates to zero tokens)") + ErrBadRedelegationDst = sdkerrors.Register(ModuleName, 31, "redelegation destination validator not found") + ErrTransitiveRedelegation = sdkerrors.Register(ModuleName, 32, "redelegation to this validator already in progress; first redelegation to this validator must complete before next redelegation") + ErrMaxRedelegationEntries = sdkerrors.Register(ModuleName, 33, "too many redelegation entries for (delegator, src-validator, dst-validator) tuple") + ErrDelegatorShareExRateInvalid = sdkerrors.Register(ModuleName, 34, "cannot delegate to validators with invalid (zero) ex-rate") + ErrBothShareMsgsGiven = sdkerrors.Register(ModuleName, 35, "both shares amount and shares percent provided") + ErrNeitherShareMsgsGiven = sdkerrors.Register(ModuleName, 36, "neither shares amount nor shares percent provided") + ErrInvalidHistoricalInfo = sdkerrors.Register(ModuleName, 37, "invalid historical info") + ErrNoHistoricalInfo = sdkerrors.Register(ModuleName, 38, "no historical info found") + ErrEmptyValidatorPubKey = sdkerrors.Register(ModuleName, 39, "empty validator public key") + ErrCommissionLTMinRate = sdkerrors.Register(ModuleName, 40, "commission cannot be less than min rate") + ErrConsensusPubKeyAlreadyUsedForAValidator = sdkerrors.Register(ModuleName, 41, "consensus pubkey is already used for a validator") + ErrExceedingMaxConsPubKeyRotations = sdkerrors.Register(ModuleName, 42, "exceeding maximum consensus pubkey rotations") ) diff --git a/x/staking/types/params.go b/x/staking/types/params.go index cb9def63e00e..2beda04a5840 100644 --- a/x/staking/types/params.go +++ b/x/staking/types/params.go @@ -34,16 +34,20 @@ const ( var ( // DefaultMinCommissionRate is set to 0% - DefaultMinCommissionRate = sdk.ZeroDec() + DefaultMinCommissionRate = sdk.ZeroDec() + DefaultMaxConsPubKeyRotations = uint64(10) + DefaultConsPubKeyRotationFee = sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000000) ) var ( - KeyUnbondingTime = []byte("UnbondingTime") - KeyMaxValidators = []byte("MaxValidators") - KeyMaxEntries = []byte("MaxEntries") - KeyBondDenom = []byte("BondDenom") - KeyHistoricalEntries = []byte("HistoricalEntries") - KeyMinCommissionRate = []byte("MinCommissionRate") + KeyUnbondingTime = []byte("UnbondingTime") + KeyMaxValidators = []byte("MaxValidators") + KeyMaxEntries = []byte("MaxEntries") + KeyBondDenom = []byte("BondDenom") + KeyHistoricalEntries = []byte("HistoricalEntries") + KeyMinCommissionRate = []byte("MinCommissionRate") + KeyMaxConsPubKeyRotations = []byte("MaxConsPubKeyRotations") + KeyConsPubKeyRotationFee = []byte("ConsPubKeyRotationFee") ) var _ paramtypes.ParamSet = (*Params)(nil) @@ -54,14 +58,16 @@ func ParamKeyTable() paramtypes.KeyTable { } // NewParams creates a new Params instance -func NewParams(unbondingTime time.Duration, maxValidators, maxEntries, historicalEntries uint32, bondDenom string, minCommissionRate sdk.Dec) Params { +func NewParams(unbondingTime time.Duration, maxValidators, maxEntries, historicalEntries uint32, bondDenom string, minCommissionRate sdk.Dec, maxConsPubKeyRotations uint64, consPubKeyRotationFee sdk.Coin) Params { return Params{ - UnbondingTime: unbondingTime, - MaxValidators: maxValidators, - MaxEntries: maxEntries, - HistoricalEntries: historicalEntries, - BondDenom: bondDenom, - MinCommissionRate: minCommissionRate, + UnbondingTime: unbondingTime, + MaxValidators: maxValidators, + MaxEntries: maxEntries, + HistoricalEntries: historicalEntries, + BondDenom: bondDenom, + MinCommissionRate: minCommissionRate, + MaxConsPubKeyRotations: maxConsPubKeyRotations, + ConsPubKeyRotationFee: consPubKeyRotationFee, } } @@ -74,6 +80,8 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { paramtypes.NewParamSetPair(KeyHistoricalEntries, &p.HistoricalEntries, validateHistoricalEntries), paramtypes.NewParamSetPair(KeyBondDenom, &p.BondDenom, validateBondDenom), paramtypes.NewParamSetPair(KeyMinCommissionRate, &p.MinCommissionRate, validateMinCommissionRate), + paramtypes.NewParamSetPair(KeyMaxConsPubKeyRotations, &p.MaxConsPubKeyRotations, validateMaxConsPubKeyRotations), + paramtypes.NewParamSetPair(KeyConsPubKeyRotationFee, &p.ConsPubKeyRotationFee, validateConsPubKeyRotationFee), } } @@ -86,6 +94,8 @@ func DefaultParams() Params { DefaultHistoricalEntries, sdk.DefaultBondDenom, DefaultMinCommissionRate, + DefaultMaxConsPubKeyRotations, + DefaultConsPubKeyRotationFee, ) } @@ -137,6 +147,14 @@ func (p Params) Validate() error { return err } + if err := validateMaxConsPubKeyRotations(p.MaxConsPubKeyRotations); err != nil { + return err + } + + if err := validateConsPubKeyRotationFee(p.ConsPubKeyRotationFee); err != nil { + return err + } + return nil } @@ -233,3 +251,21 @@ func validateMinCommissionRate(i interface{}) error { return nil } + +func validateMaxConsPubKeyRotations(i interface{}) error { + _, ok := i.(uint64) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + return nil +} + +func validateConsPubKeyRotationFee(i interface{}) error { + _, ok := i.(sdk.Coin) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + return nil +} From 16391fdeb7cea0497ca454ff2c45bad06185f7bd Mon Sep 17 00:00:00 2001 From: devstar Date: Fri, 20 May 2022 22:48:10 +0700 Subject: [PATCH 10/23] add generated proto code --- api/cosmos/staking/v1beta1/staking.pulsar.go | 349 +++-- x/staking/types/staking.pb.go | 1273 ++++++++++-------- 2 files changed, 940 insertions(+), 682 deletions(-) diff --git a/api/cosmos/staking/v1beta1/staking.pulsar.go b/api/cosmos/staking/v1beta1/staking.pulsar.go index fc9ba9bdd6d0..d847ae0f5b01 100644 --- a/api/cosmos/staking/v1beta1/staking.pulsar.go +++ b/api/cosmos/staking/v1beta1/staking.pulsar.go @@ -9613,13 +9613,15 @@ func (x *fastReflection_Redelegation) ProtoMethods() *protoiface.Methods { } var ( - md_Params protoreflect.MessageDescriptor - fd_Params_unbonding_time protoreflect.FieldDescriptor - fd_Params_max_validators protoreflect.FieldDescriptor - fd_Params_max_entries protoreflect.FieldDescriptor - fd_Params_historical_entries protoreflect.FieldDescriptor - fd_Params_bond_denom protoreflect.FieldDescriptor - fd_Params_min_commission_rate protoreflect.FieldDescriptor + md_Params protoreflect.MessageDescriptor + fd_Params_unbonding_time protoreflect.FieldDescriptor + fd_Params_max_validators protoreflect.FieldDescriptor + fd_Params_max_entries protoreflect.FieldDescriptor + fd_Params_historical_entries protoreflect.FieldDescriptor + fd_Params_bond_denom protoreflect.FieldDescriptor + fd_Params_min_commission_rate protoreflect.FieldDescriptor + fd_Params_max_cons_pub_key_rotations protoreflect.FieldDescriptor + fd_Params_cons_pubkey_rotation_fee protoreflect.FieldDescriptor ) func init() { @@ -9631,6 +9633,8 @@ func init() { fd_Params_historical_entries = md_Params.Fields().ByName("historical_entries") fd_Params_bond_denom = md_Params.Fields().ByName("bond_denom") fd_Params_min_commission_rate = md_Params.Fields().ByName("min_commission_rate") + fd_Params_max_cons_pub_key_rotations = md_Params.Fields().ByName("max_cons_pub_key_rotations") + fd_Params_cons_pubkey_rotation_fee = md_Params.Fields().ByName("cons_pubkey_rotation_fee") } var _ protoreflect.Message = (*fastReflection_Params)(nil) @@ -9734,6 +9738,18 @@ func (x *fastReflection_Params) Range(f func(protoreflect.FieldDescriptor, proto return } } + if x.MaxConsPubKeyRotations != uint64(0) { + value := protoreflect.ValueOfUint64(x.MaxConsPubKeyRotations) + if !f(fd_Params_max_cons_pub_key_rotations, value) { + return + } + } + if x.ConsPubkeyRotationFee != nil { + value := protoreflect.ValueOfMessage(x.ConsPubkeyRotationFee.ProtoReflect()) + if !f(fd_Params_cons_pubkey_rotation_fee, value) { + return + } + } } // Has reports whether a field is populated. @@ -9761,6 +9777,10 @@ func (x *fastReflection_Params) Has(fd protoreflect.FieldDescriptor) bool { return x.BondDenom != "" case "cosmos.staking.v1beta1.Params.min_commission_rate": return x.MinCommissionRate != "" + case "cosmos.staking.v1beta1.Params.max_cons_pub_key_rotations": + return x.MaxConsPubKeyRotations != uint64(0) + case "cosmos.staking.v1beta1.Params.cons_pubkey_rotation_fee": + return x.ConsPubkeyRotationFee != nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9789,6 +9809,10 @@ func (x *fastReflection_Params) Clear(fd protoreflect.FieldDescriptor) { x.BondDenom = "" case "cosmos.staking.v1beta1.Params.min_commission_rate": x.MinCommissionRate = "" + case "cosmos.staking.v1beta1.Params.max_cons_pub_key_rotations": + x.MaxConsPubKeyRotations = uint64(0) + case "cosmos.staking.v1beta1.Params.cons_pubkey_rotation_fee": + x.ConsPubkeyRotationFee = nil default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9823,6 +9847,12 @@ func (x *fastReflection_Params) Get(descriptor protoreflect.FieldDescriptor) pro case "cosmos.staking.v1beta1.Params.min_commission_rate": value := x.MinCommissionRate return protoreflect.ValueOfString(value) + case "cosmos.staking.v1beta1.Params.max_cons_pub_key_rotations": + value := x.MaxConsPubKeyRotations + return protoreflect.ValueOfUint64(value) + case "cosmos.staking.v1beta1.Params.cons_pubkey_rotation_fee": + value := x.ConsPubkeyRotationFee + return protoreflect.ValueOfMessage(value.ProtoReflect()) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9855,6 +9885,10 @@ func (x *fastReflection_Params) Set(fd protoreflect.FieldDescriptor, value proto x.BondDenom = value.Interface().(string) case "cosmos.staking.v1beta1.Params.min_commission_rate": x.MinCommissionRate = value.Interface().(string) + case "cosmos.staking.v1beta1.Params.max_cons_pub_key_rotations": + x.MaxConsPubKeyRotations = value.Uint() + case "cosmos.staking.v1beta1.Params.cons_pubkey_rotation_fee": + x.ConsPubkeyRotationFee = value.Message().Interface().(*v1beta1.Coin) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9880,6 +9914,11 @@ func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protore x.UnbondingTime = new(durationpb.Duration) } return protoreflect.ValueOfMessage(x.UnbondingTime.ProtoReflect()) + case "cosmos.staking.v1beta1.Params.cons_pubkey_rotation_fee": + if x.ConsPubkeyRotationFee == nil { + x.ConsPubkeyRotationFee = new(v1beta1.Coin) + } + return protoreflect.ValueOfMessage(x.ConsPubkeyRotationFee.ProtoReflect()) case "cosmos.staking.v1beta1.Params.max_validators": panic(fmt.Errorf("field max_validators of message cosmos.staking.v1beta1.Params is not mutable")) case "cosmos.staking.v1beta1.Params.max_entries": @@ -9890,6 +9929,8 @@ func (x *fastReflection_Params) Mutable(fd protoreflect.FieldDescriptor) protore panic(fmt.Errorf("field bond_denom of message cosmos.staking.v1beta1.Params is not mutable")) case "cosmos.staking.v1beta1.Params.min_commission_rate": panic(fmt.Errorf("field min_commission_rate of message cosmos.staking.v1beta1.Params is not mutable")) + case "cosmos.staking.v1beta1.Params.max_cons_pub_key_rotations": + panic(fmt.Errorf("field max_cons_pub_key_rotations of message cosmos.staking.v1beta1.Params is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -9916,6 +9957,11 @@ func (x *fastReflection_Params) NewField(fd protoreflect.FieldDescriptor) protor return protoreflect.ValueOfString("") case "cosmos.staking.v1beta1.Params.min_commission_rate": return protoreflect.ValueOfString("") + case "cosmos.staking.v1beta1.Params.max_cons_pub_key_rotations": + return protoreflect.ValueOfUint64(uint64(0)) + case "cosmos.staking.v1beta1.Params.cons_pubkey_rotation_fee": + m := new(v1beta1.Coin) + return protoreflect.ValueOfMessage(m.ProtoReflect()) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.Params")) @@ -10006,6 +10052,13 @@ func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { if l > 0 { n += 1 + l + runtime.Sov(uint64(l)) } + if x.MaxConsPubKeyRotations != 0 { + n += 1 + runtime.Sov(uint64(x.MaxConsPubKeyRotations)) + } + if x.ConsPubkeyRotationFee != nil { + l = options.Size(x.ConsPubkeyRotationFee) + n += 1 + l + runtime.Sov(uint64(l)) + } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -10035,6 +10088,25 @@ func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } + if x.ConsPubkeyRotationFee != nil { + encoded, err := options.Marshal(x.ConsPubkeyRotationFee) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0x42 + } + if x.MaxConsPubKeyRotations != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.MaxConsPubKeyRotations)) + i-- + dAtA[i] = 0x38 + } if len(x.MinCommissionRate) > 0 { i -= len(x.MinCommissionRate) copy(dAtA[i:], x.MinCommissionRate) @@ -10284,6 +10356,61 @@ func (x *fastReflection_Params) ProtoMethods() *protoiface.Methods { } x.MinCommissionRate = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 7: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MaxConsPubKeyRotations", wireType) + } + x.MaxConsPubKeyRotations = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.MaxConsPubKeyRotations |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ConsPubkeyRotationFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.ConsPubkeyRotationFee == nil { + x.ConsPubkeyRotationFee = &v1beta1.Coin{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.ConsPubkeyRotationFee); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -13409,6 +13536,10 @@ type Params struct { BondDenom string `protobuf:"bytes,5,opt,name=bond_denom,json=bondDenom,proto3" json:"bond_denom,omitempty"` // min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators MinCommissionRate string `protobuf:"bytes,6,opt,name=min_commission_rate,json=minCommissionRate,proto3" json:"min_commission_rate,omitempty"` + // max_cons_pub_key_rotations is maximum number of consensus pubkey rotations + MaxConsPubKeyRotations uint64 `protobuf:"varint,7,opt,name=max_cons_pub_key_rotations,json=maxConsPubKeyRotations,proto3" json:"max_cons_pub_key_rotations,omitempty"` + // cons_pubkey_rotation_fee is fee to be spent when rotating validator's consensus pubkey + ConsPubkeyRotationFee *v1beta1.Coin `protobuf:"bytes,8,opt,name=cons_pubkey_rotation_fee,json=consPubkeyRotationFee,proto3" json:"cons_pubkey_rotation_fee,omitempty"` } func (x *Params) Reset() { @@ -13473,6 +13604,20 @@ func (x *Params) GetMinCommissionRate() string { return "" } +func (x *Params) GetMaxConsPubKeyRotations() uint64 { + if x != nil { + return x.MaxConsPubKeyRotations + } + return 0 +} + +func (x *Params) GetConsPubkeyRotationFee() *v1beta1.Coin { + if x != nil { + return x.ConsPubkeyRotationFee + } + return nil +} + // DelegationResponse is equivalent to Delegation except that it contains a // balance in addition to shares which is more suitable for client responses. type DelegationResponse struct { @@ -13935,7 +14080,7 @@ var file_cosmos_staking_v1beta1_staking_proto_rawDesc = []byte{ 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x0c, 0x88, 0xa0, - 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xf2, 0x02, 0x0a, 0x06, 0x50, + 0x1f, 0x00, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x88, 0x04, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x4a, 0x0a, 0x0e, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, @@ -13958,86 +14103,95 @@ var file_cosmos_staking_v1beta1_staking_proto_rawDesc = []byte{ 0x2e, 0x44, 0x65, 0x63, 0xf2, 0xde, 0x1f, 0x1a, 0x79, 0x61, 0x6d, 0x6c, 0x3a, 0x22, 0x6d, 0x69, 0x6e, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x22, 0x52, 0x11, 0x6d, 0x69, 0x6e, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x61, 0x74, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, - 0xa3, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, - 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x39, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, - 0x1f, 0x00, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, - 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xd9, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x12, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, - 0x52, 0x11, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x56, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, - 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, - 0x01, 0x22, 0xbf, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x65, + 0x6e, 0x52, 0x61, 0x74, 0x65, 0x12, 0x3a, 0x0a, 0x1a, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, + 0x73, 0x5f, 0x70, 0x75, 0x62, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x16, 0x6d, 0x61, 0x78, 0x43, 0x6f, + 0x6e, 0x73, 0x50, 0x75, 0x62, 0x4b, 0x65, 0x79, 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x58, 0x0a, 0x18, 0x63, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, + 0x5f, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x62, 0x61, 0x73, + 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x69, 0x6e, 0x42, 0x04, + 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x73, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, + 0x52, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x65, 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, + 0x00, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xa3, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0c, 0x72, 0x65, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x07, 0x65, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x04, - 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x04, 0xe8, - 0xa0, 0x1f, 0x00, 0x22, 0x83, 0x02, 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 0x12, 0x7d, 0x0a, 0x11, - 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x51, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, - 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, - 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, - 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x42, - 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x72, 0x0a, 0x0d, 0x62, - 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x4d, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, - 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, - 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, - 0x74, 0x52, 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x3a, - 0x08, 0xe8, 0xa0, 0x1f, 0x01, 0xf0, 0xa0, 0x1f, 0x01, 0x2a, 0xb6, 0x01, 0x0a, 0x0a, 0x42, 0x6f, - 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, 0x17, 0x42, 0x4f, 0x4e, 0x44, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x0f, 0x8a, 0x9d, 0x20, 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, - 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x14, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, - 0x1a, 0x0c, 0x8a, 0x9d, 0x20, 0x08, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, - 0x0a, 0x15, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, - 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x1a, 0x0d, 0x8a, 0x9d, 0x20, 0x09, 0x55, - 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x22, 0x0a, 0x12, 0x42, 0x4f, 0x4e, 0x44, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x03, - 0x1a, 0x0a, 0x8a, 0x9d, 0x20, 0x06, 0x42, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, - 0x1e, 0x00, 0x42, 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x42, 0x0c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, - 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, - 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, - 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, - 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, - 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x3a, 0x08, 0x98, 0xa0, 0x1f, 0x00, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0xd9, 0x01, 0x0a, 0x19, + 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x12, 0x72, 0x65, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, + 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x11, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x56, 0x0a, 0x07, 0x62, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x3c, 0xc8, 0xde, 0x1f, 0x00, + 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, + 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, + 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x07, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x01, 0x22, 0xbf, 0x01, 0x0a, 0x14, 0x52, 0x65, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xc8, 0xde, + 0x1f, 0x00, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x51, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x04, 0xc8, 0xde, 0x1f, 0x00, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x3a, 0x04, 0xe8, 0xa0, 0x1f, 0x00, 0x22, 0x83, 0x02, 0x0a, 0x04, 0x50, 0x6f, + 0x6f, 0x6c, 0x12, 0x7d, 0x0a, 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, + 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x51, 0xc8, + 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, + 0x73, 0x64, 0x6b, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, + 0x11, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, + 0x52, 0x0f, 0x6e, 0x6f, 0x74, 0x42, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x12, 0x72, 0x0a, 0x0d, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x4d, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, + 0x1f, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2d, 0x73, 0x64, 0x6b, 0x2f, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xea, 0xde, 0x1f, 0x0d, 0x62, 0x6f, 0x6e, 0x64, + 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x52, 0x0c, 0x62, 0x6f, 0x6e, 0x64, 0x65, 0x64, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x3a, 0x08, 0xe8, 0xa0, 0x1f, 0x01, 0xf0, 0xa0, 0x1f, 0x01, 0x2a, + 0xb6, 0x01, 0x0a, 0x0a, 0x42, 0x6f, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, + 0x0a, 0x17, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x1a, 0x0f, 0x8a, 0x9d, 0x20, + 0x0b, 0x55, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x64, 0x12, 0x26, 0x0a, 0x14, + 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, + 0x4e, 0x44, 0x45, 0x44, 0x10, 0x01, 0x1a, 0x0c, 0x8a, 0x9d, 0x20, 0x08, 0x55, 0x6e, 0x62, 0x6f, + 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x15, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x42, 0x4f, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x1a, + 0x0d, 0x8a, 0x9d, 0x20, 0x09, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x22, + 0x0a, 0x12, 0x42, 0x4f, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x42, 0x4f, + 0x4e, 0x44, 0x45, 0x44, 0x10, 0x03, 0x1a, 0x0a, 0x8a, 0x9d, 0x20, 0x06, 0x42, 0x6f, 0x6e, 0x64, + 0x65, 0x64, 0x1a, 0x04, 0x88, 0xa3, 0x1e, 0x00, 0x42, 0xdc, 0x01, 0x0a, 0x1a, 0x63, 0x6f, 0x6d, + 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x36, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, + 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x3b, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, + 0x02, 0x03, 0x43, 0x53, 0x58, 0xaa, 0x02, 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x53, + 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, + 0x16, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, + 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x22, 0x43, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x5c, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x18, 0x43, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x3a, 0x3a, 0x53, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -14102,16 +14256,17 @@ var file_cosmos_staking_v1beta1_staking_proto_depIdxs = []int32{ 24, // 15: cosmos.staking.v1beta1.RedelegationEntry.completion_time:type_name -> google.protobuf.Timestamp 15, // 16: cosmos.staking.v1beta1.Redelegation.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntry 25, // 17: cosmos.staking.v1beta1.Params.unbonding_time:type_name -> google.protobuf.Duration - 12, // 18: cosmos.staking.v1beta1.DelegationResponse.delegation:type_name -> cosmos.staking.v1beta1.Delegation - 26, // 19: cosmos.staking.v1beta1.DelegationResponse.balance:type_name -> cosmos.base.v1beta1.Coin - 15, // 20: cosmos.staking.v1beta1.RedelegationEntryResponse.redelegation_entry:type_name -> cosmos.staking.v1beta1.RedelegationEntry - 16, // 21: cosmos.staking.v1beta1.RedelegationResponse.redelegation:type_name -> cosmos.staking.v1beta1.Redelegation - 19, // 22: cosmos.staking.v1beta1.RedelegationResponse.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntryResponse - 23, // [23:23] is the sub-list for method output_type - 23, // [23:23] is the sub-list for method input_type - 23, // [23:23] is the sub-list for extension type_name - 23, // [23:23] is the sub-list for extension extendee - 0, // [0:23] is the sub-list for field type_name + 26, // 18: cosmos.staking.v1beta1.Params.cons_pubkey_rotation_fee:type_name -> cosmos.base.v1beta1.Coin + 12, // 19: cosmos.staking.v1beta1.DelegationResponse.delegation:type_name -> cosmos.staking.v1beta1.Delegation + 26, // 20: cosmos.staking.v1beta1.DelegationResponse.balance:type_name -> cosmos.base.v1beta1.Coin + 15, // 21: cosmos.staking.v1beta1.RedelegationEntryResponse.redelegation_entry:type_name -> cosmos.staking.v1beta1.RedelegationEntry + 16, // 22: cosmos.staking.v1beta1.RedelegationResponse.redelegation:type_name -> cosmos.staking.v1beta1.Redelegation + 19, // 23: cosmos.staking.v1beta1.RedelegationResponse.entries:type_name -> cosmos.staking.v1beta1.RedelegationEntryResponse + 24, // [24:24] is the sub-list for method output_type + 24, // [24:24] is the sub-list for method input_type + 24, // [24:24] is the sub-list for extension type_name + 24, // [24:24] is the sub-list for extension extendee + 0, // [0:24] is the sub-list for field type_name } func init() { file_cosmos_staking_v1beta1_staking_proto_init() } diff --git a/x/staking/types/staking.pb.go b/x/staking/types/staking.pb.go index 1c2d63e89c0a..26fb2c076fd3 100644 --- a/x/staking/types/staking.pb.go +++ b/x/staking/types/staking.pb.go @@ -916,6 +916,10 @@ type Params struct { BondDenom string `protobuf:"bytes,5,opt,name=bond_denom,json=bondDenom,proto3" json:"bond_denom,omitempty"` // min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators MinCommissionRate github_com_cosmos_cosmos_sdk_types.Dec `protobuf:"bytes,6,opt,name=min_commission_rate,json=minCommissionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"min_commission_rate" yaml:"min_commission_rate"` + // max_cons_pub_key_rotations is maximum number of consensus pubkey rotations + MaxConsPubKeyRotations uint64 `protobuf:"varint,7,opt,name=max_cons_pub_key_rotations,json=maxConsPubKeyRotations,proto3" json:"max_cons_pub_key_rotations,omitempty"` + // cons_pubkey_rotation_fee is fee to be spent when rotating validator's consensus pubkey + ConsPubkeyRotationFee types2.Coin `protobuf:"bytes,8,opt,name=cons_pubkey_rotation_fee,json=consPubkeyRotationFee,proto3" json:"cons_pubkey_rotation_fee"` } func (m *Params) Reset() { *m = Params{} } @@ -985,6 +989,20 @@ func (m *Params) GetBondDenom() string { return "" } +func (m *Params) GetMaxConsPubKeyRotations() uint64 { + if m != nil { + return m.MaxConsPubKeyRotations + } + return 0 +} + +func (m *Params) GetConsPubkeyRotationFee() types2.Coin { + if m != nil { + return m.ConsPubkeyRotationFee + } + return types2.Coin{} +} + // DelegationResponse is equivalent to Delegation except that it contains a // balance in addition to shares which is more suitable for client responses. type DelegationResponse struct { @@ -1211,116 +1229,119 @@ func init() { } var fileDescriptor_64c30c6cf92913c9 = []byte{ - // 1737 bytes of a gzipped FileDescriptorProto + // 1792 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x58, 0x4d, 0x6c, 0x1b, 0xc7, - 0x15, 0xe6, 0x52, 0x0c, 0x45, 0x3e, 0x4a, 0xa2, 0x34, 0x56, 0x52, 0x9a, 0x68, 0x49, 0x96, 0xcd, - 0x8f, 0x53, 0xc4, 0x54, 0xed, 0x02, 0x01, 0x2a, 0x14, 0x28, 0x4c, 0x91, 0xa9, 0x55, 0x27, 0xae, - 0xb2, 0x94, 0x55, 0xf4, 0x07, 0x25, 0x86, 0xbb, 0x23, 0x6a, 0xaa, 0xdd, 0x59, 0x62, 0x67, 0x68, - 0x8b, 0x40, 0x0b, 0x14, 0xe8, 0x25, 0xf5, 0x29, 0xc7, 0x5c, 0x0c, 0x18, 0x48, 0x8f, 0x39, 0x06, - 0xed, 0xa1, 0x87, 0x5e, 0xd3, 0x9c, 0x8c, 0x9c, 0x9a, 0xb6, 0x50, 0x0b, 0xfb, 0x52, 0xf4, 0x54, - 0xe4, 0xde, 0xa2, 0x98, 0x9f, 0xfd, 0x11, 0x29, 0x29, 0x92, 0xab, 0x02, 0x01, 0x7c, 0xb1, 0x39, - 0x33, 0xef, 0x7d, 0xf3, 0xde, 0xf7, 0x7e, 0xf4, 0x66, 0xe1, 0x45, 0x27, 0xe0, 0x7e, 0xc0, 0xd7, - 0xb8, 0xc0, 0xfb, 0x94, 0x0d, 0xd7, 0xee, 0x5e, 0x1b, 0x10, 0x81, 0xaf, 0x45, 0xeb, 0xd6, 0x28, - 0x0c, 0x44, 0x80, 0x5e, 0xd0, 0x52, 0xad, 0x68, 0xd7, 0x48, 0x55, 0x57, 0x87, 0xc1, 0x30, 0x50, - 0x22, 0x6b, 0xf2, 0x97, 0x96, 0xae, 0x5e, 0x1e, 0x06, 0xc1, 0xd0, 0x23, 0x6b, 0x6a, 0x35, 0x18, - 0xef, 0xae, 0x61, 0x36, 0x31, 0x47, 0xb5, 0xe9, 0x23, 0x77, 0x1c, 0x62, 0x41, 0x03, 0x66, 0xce, - 0xeb, 0xd3, 0xe7, 0x82, 0xfa, 0x84, 0x0b, 0xec, 0x8f, 0x22, 0x6c, 0x6d, 0x49, 0x5f, 0x5f, 0x6a, - 0xcc, 0x32, 0xd8, 0xc6, 0x95, 0x01, 0xe6, 0x24, 0xf6, 0xc3, 0x09, 0x68, 0x84, 0xfd, 0x65, 0x41, - 0x98, 0x4b, 0x42, 0x9f, 0x32, 0xb1, 0x26, 0x26, 0x23, 0xc2, 0xf5, 0xbf, 0xfa, 0xb4, 0xf9, 0x6b, - 0x0b, 0x96, 0x6e, 0x52, 0x2e, 0x82, 0x90, 0x3a, 0xd8, 0xdb, 0x64, 0xbb, 0x01, 0x7a, 0x1d, 0xf2, - 0x7b, 0x04, 0xbb, 0x24, 0xac, 0x58, 0x0d, 0xeb, 0x4a, 0xe9, 0x7a, 0xa5, 0x95, 0x20, 0xb4, 0xb4, - 0xee, 0x4d, 0x75, 0xde, 0xce, 0x7d, 0x74, 0x58, 0xcf, 0xd8, 0x46, 0x1a, 0x7d, 0x07, 0xf2, 0x77, - 0xb1, 0xc7, 0x89, 0xa8, 0x64, 0x1b, 0x73, 0x57, 0x4a, 0xd7, 0xbf, 0xda, 0x3a, 0x9e, 0xbe, 0xd6, - 0x0e, 0xf6, 0xa8, 0x8b, 0x45, 0x10, 0x03, 0x68, 0xb5, 0xe6, 0xef, 0xb2, 0x70, 0x79, 0x23, 0x60, - 0x7c, 0x6b, 0x3c, 0xb8, 0x45, 0x26, 0x76, 0x20, 0x14, 0x45, 0xda, 0xba, 0x09, 0xda, 0x80, 0xe5, - 0x60, 0x44, 0x42, 0xa9, 0xd7, 0xc7, 0xae, 0x1b, 0x12, 0xce, 0x95, 0x81, 0xc5, 0x76, 0xe5, 0x93, - 0x0f, 0xaf, 0xae, 0x9a, 0xbb, 0x6e, 0xe8, 0x93, 0x9e, 0x08, 0x29, 0x1b, 0xda, 0xe5, 0x48, 0xc3, - 0x6c, 0xa3, 0x1d, 0x28, 0x07, 0x9e, 0xdb, 0x77, 0x02, 0xc6, 0xfb, 0xa3, 0xf1, 0x60, 0x9f, 0x4c, - 0x2a, 0x59, 0xe5, 0xe4, 0x6a, 0x4b, 0x87, 0xa0, 0x15, 0x85, 0xa0, 0x75, 0x83, 0x4d, 0xda, 0x95, - 0x8f, 0x13, 0x64, 0x27, 0x9c, 0x8c, 0x44, 0xd0, 0x32, 0xc6, 0x2d, 0x06, 0x9e, 0x6b, 0x6c, 0xdd, - 0x27, 0x13, 0x89, 0xcb, 0xc8, 0xbd, 0x23, 0xb8, 0x73, 0x4f, 0x87, 0xcb, 0xc8, 0xbd, 0x14, 0xee, - 0x4b, 0xb0, 0x14, 0x4a, 0x1e, 0x88, 0xdb, 0xdf, 0x23, 0x74, 0xb8, 0x27, 0x2a, 0xb9, 0x86, 0x75, - 0x65, 0xce, 0x5e, 0x34, 0xbb, 0x37, 0xd5, 0x66, 0xf3, 0x83, 0x2c, 0x94, 0x37, 0x02, 0xdf, 0xa7, - 0x9c, 0xd3, 0x80, 0xd9, 0x58, 0x10, 0x8e, 0xb6, 0x20, 0x17, 0x62, 0x41, 0x0c, 0x47, 0xdf, 0x96, - 0x4c, 0xff, 0xf9, 0xb0, 0xfe, 0xf2, 0x90, 0x8a, 0xbd, 0xf1, 0xa0, 0xe5, 0x04, 0xbe, 0x49, 0x23, - 0xf3, 0xdf, 0x55, 0xee, 0xee, 0x9b, 0xcc, 0xe8, 0x10, 0xe7, 0x93, 0x0f, 0xaf, 0x82, 0xb1, 0xaf, - 0x43, 0x1c, 0x5b, 0x21, 0xa1, 0x1f, 0x40, 0xc1, 0xc7, 0x07, 0x7d, 0x85, 0x9a, 0xbd, 0x00, 0xd4, - 0x79, 0x1f, 0x1f, 0x48, 0x5b, 0x91, 0x0b, 0x65, 0x09, 0xec, 0xec, 0x61, 0x36, 0x24, 0x1a, 0x7f, - 0xee, 0x02, 0xf0, 0x17, 0x7d, 0x7c, 0xb0, 0xa1, 0x30, 0xe5, 0x2d, 0xeb, 0x85, 0xf7, 0x1e, 0xd6, - 0x33, 0xff, 0x78, 0x58, 0xb7, 0x9a, 0xbf, 0xb7, 0x00, 0x12, 0xba, 0xd0, 0x4f, 0x60, 0xd9, 0x89, - 0x57, 0xea, 0x7a, 0x6e, 0x52, 0xff, 0x95, 0x93, 0x52, 0x78, 0x8a, 0xec, 0x76, 0x41, 0x1a, 0xfa, - 0xe8, 0xb0, 0x6e, 0xd9, 0x65, 0x67, 0x2a, 0x0e, 0x5d, 0x28, 0x8d, 0x47, 0x2e, 0x16, 0xa4, 0x2f, - 0x8b, 0xda, 0xa4, 0x5b, 0x75, 0x26, 0x2d, 0xb6, 0xa3, 0x8a, 0xd7, 0x58, 0xef, 0xfe, 0xad, 0x6e, - 0xd9, 0xa0, 0x15, 0xe5, 0x51, 0xca, 0xfa, 0x0f, 0x2c, 0x28, 0x75, 0x08, 0x77, 0x42, 0x3a, 0x92, - 0xf5, 0x81, 0x2a, 0x30, 0xef, 0x07, 0x8c, 0xee, 0x9b, 0x82, 0x2d, 0xda, 0xd1, 0x12, 0x55, 0xa1, - 0x40, 0x5d, 0xc2, 0x04, 0x15, 0x3a, 0xcd, 0x8b, 0x76, 0xbc, 0x96, 0x5a, 0xf7, 0xc8, 0x80, 0xd3, - 0x88, 0x6b, 0x3b, 0x5a, 0xa2, 0x57, 0x61, 0x99, 0x13, 0x67, 0x1c, 0x52, 0x31, 0x91, 0x09, 0x2d, - 0xb0, 0xa3, 0xb3, 0xae, 0x68, 0x97, 0xa3, 0xfd, 0x0d, 0xbd, 0x2d, 0x41, 0x5c, 0x22, 0x30, 0xf5, - 0x78, 0xe5, 0x39, 0x0d, 0x62, 0x96, 0x29, 0x73, 0xff, 0x98, 0x87, 0x62, 0x5c, 0xf1, 0x17, 0x53, - 0xc5, 0x3f, 0x94, 0x01, 0x63, 0x9c, 0x30, 0x3e, 0xfe, 0x1f, 0xcb, 0xb8, 0x1c, 0xe3, 0x98, 0x82, - 0x7b, 0x01, 0xf2, 0x3f, 0xc3, 0xd4, 0x23, 0xae, 0x62, 0xa5, 0x60, 0x9b, 0x15, 0x5a, 0x87, 0x3c, - 0x17, 0x58, 0x8c, 0xb9, 0xa2, 0x62, 0xe9, 0x7a, 0xf3, 0xa4, 0xcc, 0x68, 0x07, 0xcc, 0xed, 0x29, - 0x49, 0xdb, 0x68, 0xa0, 0x6d, 0xc8, 0x8b, 0x60, 0x9f, 0x30, 0x43, 0xd2, 0xb9, 0xb2, 0x7a, 0x93, - 0x89, 0x54, 0x56, 0x6f, 0x32, 0x61, 0x1b, 0x2c, 0x34, 0x84, 0x65, 0x97, 0x78, 0x64, 0xa8, 0xa8, - 0xe4, 0x7b, 0x38, 0x24, 0xbc, 0x92, 0xbf, 0x80, 0xaa, 0x29, 0xc7, 0xa8, 0x3d, 0x05, 0x8a, 0x6e, - 0x41, 0xc9, 0x4d, 0xd2, 0xad, 0x32, 0xaf, 0x88, 0xfe, 0xda, 0x49, 0xfe, 0xa7, 0x32, 0xd3, 0xb4, - 0xf7, 0xb4, 0xb6, 0x4c, 0xae, 0x31, 0x1b, 0x04, 0xcc, 0xa5, 0x6c, 0x18, 0xb5, 0xb4, 0x82, 0x6a, - 0x69, 0xe5, 0x78, 0x5f, 0x37, 0x35, 0x74, 0x0b, 0x96, 0x12, 0x51, 0x55, 0x3b, 0xc5, 0x73, 0xd4, - 0xce, 0x62, 0xac, 0x2b, 0x4f, 0xd1, 0x4d, 0x80, 0xa4, 0x30, 0x2b, 0xa0, 0x80, 0x9a, 0x9f, 0x5f, - 0xdd, 0xc6, 0x85, 0x94, 0x2e, 0xf2, 0xe0, 0x92, 0x4f, 0x59, 0x9f, 0x13, 0x6f, 0xb7, 0x6f, 0xa8, - 0x92, 0x90, 0xa5, 0x0b, 0x08, 0xed, 0x8a, 0x4f, 0x59, 0x8f, 0x78, 0xbb, 0x9d, 0x18, 0x76, 0x7d, - 0xe1, 0x9d, 0x87, 0xf5, 0x8c, 0xa9, 0xa5, 0x4c, 0x73, 0x0b, 0x16, 0x76, 0xb0, 0x67, 0xca, 0x80, - 0x70, 0xf4, 0x3a, 0x14, 0x71, 0xb4, 0xa8, 0x58, 0x8d, 0xb9, 0x53, 0xcb, 0x28, 0x11, 0xd5, 0xd5, - 0xf9, 0xcb, 0xbf, 0x36, 0xac, 0xe6, 0x6f, 0x2c, 0xc8, 0x77, 0x76, 0xb6, 0x30, 0x0d, 0x51, 0x17, - 0x56, 0x92, 0x84, 0x3a, 0x6b, 0x6d, 0x26, 0x39, 0x18, 0x15, 0x67, 0x17, 0x56, 0xee, 0x46, 0xe5, - 0x1e, 0xc3, 0x64, 0x3f, 0x0f, 0x26, 0x56, 0x31, 0xfb, 0x53, 0x8e, 0x77, 0x61, 0x5e, 0x5b, 0xc9, - 0xd1, 0x3a, 0x3c, 0x37, 0x92, 0x3f, 0x94, 0xbf, 0xa5, 0xeb, 0xb5, 0x13, 0x13, 0x51, 0xc9, 0x9b, - 0x00, 0x6a, 0x95, 0xe6, 0xbf, 0x2d, 0x80, 0xce, 0xce, 0xce, 0x76, 0x48, 0x47, 0x1e, 0x11, 0x17, - 0xe5, 0xf1, 0x9b, 0xf0, 0x7c, 0xe2, 0x31, 0x0f, 0x9d, 0x33, 0x7b, 0x7d, 0x29, 0x56, 0xeb, 0x85, - 0xce, 0xb1, 0x68, 0x2e, 0x17, 0x31, 0xda, 0xdc, 0x99, 0xd1, 0x3a, 0x5c, 0x1c, 0x4f, 0x63, 0x0f, - 0x4a, 0x89, 0xfb, 0x1c, 0x75, 0xa0, 0x20, 0xcc, 0x6f, 0xc3, 0x66, 0xf3, 0x64, 0x36, 0x23, 0x35, - 0xc3, 0x68, 0xac, 0xd9, 0xfc, 0x8f, 0x24, 0x35, 0xce, 0xd8, 0x2f, 0x56, 0x1a, 0xc9, 0xde, 0x6b, - 0x7a, 0xe3, 0x45, 0x4c, 0x14, 0x06, 0x6b, 0x8a, 0xd5, 0x5f, 0x65, 0xe1, 0xd2, 0x9d, 0xa8, 0xdb, - 0x7c, 0x61, 0x99, 0xd8, 0x82, 0x79, 0xc2, 0x44, 0x48, 0x15, 0x15, 0x32, 0xd6, 0xdf, 0x38, 0x29, - 0xd6, 0xc7, 0xf8, 0xd2, 0x65, 0x22, 0x9c, 0x98, 0xc8, 0x47, 0x30, 0x53, 0x2c, 0xfc, 0x25, 0x0b, - 0x95, 0x93, 0x34, 0xd1, 0x2b, 0x50, 0x76, 0x42, 0xa2, 0x36, 0xa2, 0xae, 0x6f, 0xa9, 0xae, 0xbf, - 0x14, 0x6d, 0x9b, 0xa6, 0xff, 0x16, 0xc8, 0x01, 0x4a, 0x26, 0x96, 0x14, 0x3d, 0xf7, 0xc4, 0xb4, - 0x94, 0x28, 0xab, 0xb6, 0x4f, 0xa0, 0x4c, 0x19, 0x15, 0x14, 0x7b, 0xfd, 0x01, 0xf6, 0x30, 0x73, - 0x9e, 0x66, 0xb2, 0x9c, 0x6d, 0xd4, 0x4b, 0x06, 0xb4, 0xad, 0x31, 0xd1, 0x0e, 0xcc, 0x47, 0xf0, - 0xb9, 0x0b, 0x80, 0x8f, 0xc0, 0x52, 0x53, 0xd4, 0xa7, 0x59, 0x58, 0xb1, 0x89, 0xfb, 0x6c, 0xd1, - 0xfa, 0x63, 0x00, 0x5d, 0x70, 0xb2, 0x0f, 0x3e, 0x05, 0xb3, 0xb3, 0x05, 0x5c, 0xd4, 0x78, 0x1d, - 0x2e, 0x52, 0xdc, 0x7e, 0x9c, 0x85, 0x85, 0x34, 0xb7, 0xcf, 0xc0, 0xdf, 0x05, 0xb4, 0x99, 0x74, - 0x83, 0x9c, 0xea, 0x06, 0xaf, 0x9e, 0xd4, 0x0d, 0x66, 0xb2, 0xee, 0xf4, 0x36, 0xf0, 0x59, 0x16, - 0xf2, 0x5b, 0x38, 0xc4, 0x3e, 0x47, 0xdf, 0x9b, 0x19, 0xe0, 0xf4, 0xab, 0xea, 0xf2, 0x4c, 0xce, - 0x75, 0xcc, 0xe7, 0x10, 0x9d, 0x72, 0xef, 0x1d, 0x33, 0xbf, 0xbd, 0x04, 0x4b, 0xf2, 0x89, 0x18, - 0xbb, 0xa2, 0x49, 0x5c, 0x54, 0x6f, 0xbc, 0xf8, 0x75, 0xc1, 0x51, 0x1d, 0x4a, 0x52, 0x2c, 0x69, - 0x74, 0x52, 0x06, 0x7c, 0x7c, 0xd0, 0xd5, 0x3b, 0xe8, 0x2a, 0xa0, 0xbd, 0xf8, 0x73, 0x47, 0x3f, - 0xa1, 0x40, 0xca, 0xad, 0x24, 0x27, 0x91, 0xf8, 0x57, 0x00, 0xa4, 0x15, 0x7d, 0x97, 0xb0, 0xc0, - 0x37, 0x6f, 0x9c, 0xa2, 0xdc, 0xe9, 0xc8, 0x0d, 0xf4, 0x73, 0x3d, 0x0b, 0x4e, 0xbd, 0x1e, 0xcd, - 0x18, 0xfe, 0xe6, 0xf9, 0x32, 0xf5, 0xb3, 0xc3, 0x7a, 0x75, 0x82, 0x7d, 0x6f, 0xbd, 0x79, 0x0c, - 0x64, 0x53, 0xcd, 0x86, 0x47, 0x5f, 0x9d, 0xa9, 0x0c, 0x7e, 0xdf, 0x02, 0x94, 0xb4, 0x5c, 0x9b, - 0xf0, 0x91, 0x7c, 0xd6, 0xc8, 0xa1, 0x37, 0x35, 0xa1, 0x5a, 0xa7, 0x0f, 0xbd, 0x89, 0x7e, 0x34, - 0xf4, 0xa6, 0x2a, 0xe2, 0x5b, 0x49, 0x83, 0xcb, 0x9a, 0x18, 0x1a, 0x98, 0x01, 0xe6, 0x24, 0x35, - 0x38, 0xd3, 0x48, 0x7b, 0xa6, 0x87, 0x65, 0x9a, 0x9f, 0x5a, 0x70, 0x79, 0x26, 0x9b, 0x62, 0x63, - 0x7f, 0x0a, 0x28, 0x4c, 0x1d, 0xaa, 0xd8, 0x4c, 0x8c, 0xd1, 0xe7, 0x4e, 0xce, 0x95, 0x70, 0xa6, - 0x57, 0xfe, 0xbf, 0x7a, 0x74, 0x4e, 0x45, 0xe0, 0x0f, 0x16, 0xac, 0xa6, 0x8d, 0x89, 0xdd, 0xba, - 0x0d, 0x0b, 0x69, 0x5b, 0x8c, 0x43, 0x2f, 0x9e, 0xc5, 0x21, 0xe3, 0xcb, 0x11, 0x7d, 0xf4, 0x76, - 0x52, 0xb8, 0xfa, 0x33, 0xdb, 0xb5, 0x33, 0x73, 0x13, 0xd9, 0x34, 0x5d, 0xc0, 0xb9, 0x68, 0x8a, - 0xc9, 0x6d, 0x05, 0x81, 0x87, 0x7e, 0x01, 0x2b, 0x2c, 0x10, 0x7d, 0x99, 0xe5, 0xc4, 0xed, 0x9b, - 0x97, 0xab, 0xee, 0x7e, 0x6f, 0x9f, 0x8f, 0xb2, 0x7f, 0x1e, 0xd6, 0x67, 0xa1, 0xa6, 0x78, 0x2c, - 0xb3, 0x40, 0xb4, 0xd5, 0xf9, 0xb6, 0x7e, 0xd7, 0x86, 0xb0, 0x78, 0xf4, 0x6a, 0xdd, 0x2d, 0xdf, - 0x3a, 0xf7, 0xd5, 0x8b, 0xa7, 0x5d, 0xbb, 0x30, 0x48, 0xdd, 0xb9, 0x5e, 0x90, 0x31, 0xfc, 0xd7, - 0xc3, 0xba, 0xf5, 0xf5, 0xdf, 0x5a, 0x00, 0xc9, 0x13, 0x1e, 0xbd, 0x06, 0x5f, 0x6a, 0x7f, 0xff, - 0x76, 0xa7, 0xdf, 0xdb, 0xbe, 0xb1, 0x7d, 0xa7, 0xd7, 0xbf, 0x73, 0xbb, 0xb7, 0xd5, 0xdd, 0xd8, - 0x7c, 0x63, 0xb3, 0xdb, 0x59, 0xce, 0x54, 0xcb, 0xf7, 0x1f, 0x34, 0x4a, 0x77, 0x18, 0x1f, 0x11, - 0x87, 0xee, 0x52, 0xe2, 0xa2, 0x97, 0x61, 0xf5, 0xa8, 0xb4, 0x5c, 0x75, 0x3b, 0xcb, 0x56, 0x75, - 0xe1, 0xfe, 0x83, 0x46, 0x41, 0x4f, 0x47, 0xc4, 0x45, 0x57, 0xe0, 0xf9, 0x59, 0xb9, 0xcd, 0xdb, - 0xdf, 0x5d, 0xce, 0x56, 0x17, 0xef, 0x3f, 0x68, 0x14, 0xe3, 0x31, 0x0a, 0x35, 0x01, 0xa5, 0x25, - 0x0d, 0xde, 0x5c, 0x15, 0xee, 0x3f, 0x68, 0xe4, 0x35, 0x6d, 0xd5, 0xdc, 0x3b, 0xef, 0xd7, 0x32, - 0xed, 0x37, 0x3e, 0x7a, 0x5c, 0xb3, 0x1e, 0x3d, 0xae, 0x59, 0x7f, 0x7f, 0x5c, 0xb3, 0xde, 0x7d, - 0x52, 0xcb, 0x3c, 0x7a, 0x52, 0xcb, 0xfc, 0xe9, 0x49, 0x2d, 0xf3, 0xa3, 0xd7, 0x4e, 0x65, 0xec, - 0x20, 0xfe, 0x06, 0xae, 0xb8, 0x1b, 0xe4, 0x55, 0x53, 0xfe, 0xe6, 0x7f, 0x03, 0x00, 0x00, 0xff, - 0xff, 0x69, 0x8a, 0xda, 0x8c, 0x22, 0x17, 0x00, 0x00, + 0x15, 0xe6, 0x52, 0x0c, 0x45, 0x3e, 0x4a, 0xa2, 0x34, 0x96, 0x5d, 0x9a, 0x68, 0x49, 0x96, 0xcd, + 0x8f, 0x53, 0xc4, 0x54, 0xed, 0x02, 0x01, 0x2a, 0x14, 0x28, 0x4c, 0x91, 0xae, 0x55, 0x27, 0xae, + 0xb2, 0x94, 0xd5, 0x5f, 0x74, 0x31, 0xdc, 0x1d, 0x51, 0x5b, 0xed, 0xce, 0x12, 0x3b, 0x43, 0x5b, + 0x04, 0x5a, 0xa0, 0x40, 0x2f, 0xae, 0x4f, 0x39, 0xe6, 0x62, 0xc0, 0x40, 0x7a, 0xcc, 0x31, 0x68, + 0x0f, 0x3d, 0xf4, 0x9a, 0xe6, 0x64, 0xe4, 0xd4, 0xb4, 0x85, 0x5a, 0xd8, 0x97, 0xa2, 0xa7, 0xa2, + 0xf7, 0x16, 0xc5, 0xfc, 0xec, 0x8f, 0x48, 0x49, 0x91, 0x5c, 0x16, 0x08, 0xe0, 0x8b, 0xc4, 0x99, + 0x79, 0xef, 0x9b, 0xf7, 0xbe, 0x79, 0xef, 0xed, 0x9b, 0x81, 0x97, 0xed, 0x80, 0xf9, 0x01, 0x5b, + 0x63, 0x1c, 0xef, 0xbb, 0x74, 0xb0, 0x76, 0xef, 0x5a, 0x9f, 0x70, 0x7c, 0x2d, 0x1a, 0xb7, 0x86, + 0x61, 0xc0, 0x03, 0x74, 0x49, 0x49, 0xb5, 0xa2, 0x59, 0x2d, 0x55, 0x5d, 0x1d, 0x04, 0x83, 0x40, + 0x8a, 0xac, 0x89, 0x5f, 0x4a, 0xba, 0x7a, 0x79, 0x10, 0x04, 0x03, 0x8f, 0xac, 0xc9, 0x51, 0x7f, + 0xb4, 0xbb, 0x86, 0xe9, 0x58, 0x2f, 0xd5, 0x26, 0x97, 0x9c, 0x51, 0x88, 0xb9, 0x1b, 0x50, 0xbd, + 0x5e, 0x9f, 0x5c, 0xe7, 0xae, 0x4f, 0x18, 0xc7, 0xfe, 0x30, 0xc2, 0x56, 0x96, 0x58, 0x6a, 0x53, + 0x6d, 0x96, 0xc6, 0xd6, 0xae, 0xf4, 0x31, 0x23, 0xb1, 0x1f, 0x76, 0xe0, 0x46, 0xd8, 0x5f, 0xe4, + 0x84, 0x3a, 0x24, 0xf4, 0x5d, 0xca, 0xd7, 0xf8, 0x78, 0x48, 0x98, 0xfa, 0xab, 0x56, 0x9b, 0xbf, + 0x32, 0x60, 0xe9, 0x96, 0xcb, 0x78, 0x10, 0xba, 0x36, 0xf6, 0x36, 0xe9, 0x6e, 0x80, 0xde, 0x84, + 0xfc, 0x1e, 0xc1, 0x0e, 0x09, 0x2b, 0x46, 0xc3, 0xb8, 0x52, 0xba, 0x5e, 0x69, 0x25, 0x08, 0x2d, + 0xa5, 0x7b, 0x4b, 0xae, 0xb7, 0x73, 0x1f, 0x1d, 0xd6, 0x33, 0xa6, 0x96, 0x46, 0xdf, 0x82, 0xfc, + 0x3d, 0xec, 0x31, 0xc2, 0x2b, 0xd9, 0xc6, 0xdc, 0x95, 0xd2, 0xf5, 0x2f, 0xb7, 0x8e, 0xa7, 0xaf, + 0xb5, 0x83, 0x3d, 0xd7, 0xc1, 0x3c, 0x88, 0x01, 0x94, 0x5a, 0xf3, 0xb7, 0x59, 0xb8, 0xbc, 0x11, + 0x50, 0xb6, 0x35, 0xea, 0xdf, 0x26, 0x63, 0x33, 0xe0, 0x92, 0x22, 0x65, 0xdd, 0x18, 0x6d, 0xc0, + 0x72, 0x30, 0x24, 0xa1, 0xd0, 0xb3, 0xb0, 0xe3, 0x84, 0x84, 0x31, 0x69, 0x60, 0xb1, 0x5d, 0xf9, + 0xe4, 0xc3, 0xab, 0xab, 0x7a, 0xaf, 0x1b, 0x6a, 0xa5, 0xc7, 0x43, 0x97, 0x0e, 0xcc, 0x72, 0xa4, + 0xa1, 0xa7, 0xd1, 0x0e, 0x94, 0x03, 0xcf, 0xb1, 0xec, 0x80, 0x32, 0x6b, 0x38, 0xea, 0xef, 0x93, + 0x71, 0x25, 0x2b, 0x9d, 0x5c, 0x6d, 0xa9, 0x23, 0x68, 0x45, 0x47, 0xd0, 0xba, 0x41, 0xc7, 0xed, + 0xca, 0xc7, 0x09, 0xb2, 0x1d, 0x8e, 0x87, 0x3c, 0x68, 0x69, 0xe3, 0x16, 0x03, 0xcf, 0xd1, 0xb6, + 0xee, 0x93, 0xb1, 0xc0, 0xa5, 0xe4, 0xfe, 0x11, 0xdc, 0xb9, 0xe7, 0xc3, 0xa5, 0xe4, 0x7e, 0x0a, + 0xf7, 0x15, 0x58, 0x0a, 0x05, 0x0f, 0xc4, 0xb1, 0xf6, 0x88, 0x3b, 0xd8, 0xe3, 0x95, 0x5c, 0xc3, + 0xb8, 0x32, 0x67, 0x2e, 0xea, 0xd9, 0x5b, 0x72, 0xb2, 0xf9, 0x41, 0x16, 0xca, 0x1b, 0x81, 0xef, + 0xbb, 0x8c, 0xb9, 0x01, 0x35, 0x31, 0x27, 0x0c, 0x6d, 0x41, 0x2e, 0xc4, 0x9c, 0x68, 0x8e, 0xbe, + 0x29, 0x98, 0xfe, 0xd3, 0x61, 0xfd, 0xd5, 0x81, 0xcb, 0xf7, 0x46, 0xfd, 0x96, 0x1d, 0xf8, 0x3a, + 0x8c, 0xf4, 0xbf, 0xab, 0xcc, 0xd9, 0xd7, 0x91, 0xd1, 0x21, 0xf6, 0x27, 0x1f, 0x5e, 0x05, 0x6d, + 0x5f, 0x87, 0xd8, 0xa6, 0x44, 0x42, 0xdf, 0x83, 0x82, 0x8f, 0x0f, 0x2c, 0x89, 0x9a, 0x9d, 0x01, + 0xea, 0xbc, 0x8f, 0x0f, 0x84, 0xad, 0xc8, 0x81, 0xb2, 0x00, 0xb6, 0xf7, 0x30, 0x1d, 0x10, 0x85, + 0x3f, 0x37, 0x03, 0xfc, 0x45, 0x1f, 0x1f, 0x6c, 0x48, 0x4c, 0xb1, 0xcb, 0x7a, 0xe1, 0xbd, 0xc7, + 0xf5, 0xcc, 0xdf, 0x1f, 0xd7, 0x8d, 0xe6, 0xef, 0x0c, 0x80, 0x84, 0x2e, 0xf4, 0x63, 0x58, 0xb6, + 0xe3, 0x91, 0xdc, 0x9e, 0xe9, 0xd0, 0x7f, 0xed, 0xa4, 0x10, 0x9e, 0x20, 0xbb, 0x5d, 0x10, 0x86, + 0x3e, 0x39, 0xac, 0x1b, 0x66, 0xd9, 0x9e, 0x38, 0x87, 0x2e, 0x94, 0x46, 0x43, 0x07, 0x73, 0x62, + 0x89, 0xa4, 0xd6, 0xe1, 0x56, 0x9d, 0x0a, 0x8b, 0xed, 0x28, 0xe3, 0x15, 0xd6, 0xbb, 0x7f, 0xad, + 0x1b, 0x26, 0x28, 0x45, 0xb1, 0x94, 0xb2, 0xfe, 0x03, 0x03, 0x4a, 0x1d, 0xc2, 0xec, 0xd0, 0x1d, + 0x8a, 0xfc, 0x40, 0x15, 0x98, 0xf7, 0x03, 0xea, 0xee, 0xeb, 0x84, 0x2d, 0x9a, 0xd1, 0x10, 0x55, + 0xa1, 0xe0, 0x3a, 0x84, 0x72, 0x97, 0xab, 0x30, 0x2f, 0x9a, 0xf1, 0x58, 0x68, 0xdd, 0x27, 0x7d, + 0xe6, 0x46, 0x5c, 0x9b, 0xd1, 0x10, 0xbd, 0x0e, 0xcb, 0x8c, 0xd8, 0xa3, 0xd0, 0xe5, 0x63, 0x11, + 0xd0, 0x1c, 0xdb, 0x2a, 0xea, 0x8a, 0x66, 0x39, 0x9a, 0xdf, 0x50, 0xd3, 0x02, 0xc4, 0x21, 0x1c, + 0xbb, 0x1e, 0xab, 0xbc, 0xa4, 0x40, 0xf4, 0x30, 0x65, 0xee, 0x1f, 0xf2, 0x50, 0x8c, 0x33, 0x7e, + 0x36, 0x59, 0xfc, 0x03, 0x71, 0x60, 0x94, 0x11, 0xca, 0x46, 0xff, 0x63, 0x1a, 0x97, 0x63, 0x1c, + 0x9d, 0x70, 0x97, 0x20, 0xff, 0x53, 0xec, 0x7a, 0xc4, 0x91, 0xac, 0x14, 0x4c, 0x3d, 0x42, 0xeb, + 0x90, 0x67, 0x1c, 0xf3, 0x11, 0x93, 0x54, 0x2c, 0x5d, 0x6f, 0x9e, 0x14, 0x19, 0xed, 0x80, 0x3a, + 0x3d, 0x29, 0x69, 0x6a, 0x0d, 0xb4, 0x0d, 0x79, 0x1e, 0xec, 0x13, 0xaa, 0x49, 0x3a, 0x57, 0x54, + 0x6f, 0x52, 0x9e, 0x8a, 0xea, 0x4d, 0xca, 0x4d, 0x8d, 0x85, 0x06, 0xb0, 0xec, 0x10, 0x8f, 0x0c, + 0x24, 0x95, 0x6c, 0x0f, 0x87, 0x84, 0x55, 0xf2, 0x33, 0xc8, 0x9a, 0x72, 0x8c, 0xda, 0x93, 0xa0, + 0xe8, 0x36, 0x94, 0x9c, 0x24, 0xdc, 0x2a, 0xf3, 0x92, 0xe8, 0xaf, 0x9c, 0xe4, 0x7f, 0x2a, 0x32, + 0x75, 0x79, 0x4f, 0x6b, 0x8b, 0xe0, 0x1a, 0xd1, 0x7e, 0x40, 0x1d, 0x97, 0x0e, 0xa2, 0x92, 0x56, + 0x90, 0x25, 0xad, 0x1c, 0xcf, 0xab, 0xa2, 0x86, 0x6e, 0xc3, 0x52, 0x22, 0x2a, 0x73, 0xa7, 0x78, + 0x8e, 0xdc, 0x59, 0x8c, 0x75, 0xc5, 0x2a, 0xba, 0x05, 0x90, 0x24, 0x66, 0x05, 0x24, 0x50, 0xf3, + 0xb3, 0xb3, 0x5b, 0xbb, 0x90, 0xd2, 0x45, 0x1e, 0x5c, 0xf0, 0x5d, 0x6a, 0x31, 0xe2, 0xed, 0x5a, + 0x9a, 0x2a, 0x01, 0x59, 0x9a, 0xc1, 0xd1, 0xae, 0xf8, 0x2e, 0xed, 0x11, 0x6f, 0xb7, 0x13, 0xc3, + 0xae, 0x2f, 0x3c, 0x78, 0x5c, 0xcf, 0xe8, 0x5c, 0xca, 0x34, 0xb7, 0x60, 0x61, 0x07, 0x7b, 0x3a, + 0x0d, 0x08, 0x43, 0x6f, 0x42, 0x11, 0x47, 0x83, 0x8a, 0xd1, 0x98, 0x3b, 0x35, 0x8d, 0x12, 0x51, + 0x95, 0x9d, 0xbf, 0xf8, 0x4b, 0xc3, 0x68, 0xfe, 0xda, 0x80, 0x7c, 0x67, 0x67, 0x0b, 0xbb, 0x21, + 0xea, 0xc2, 0x4a, 0x12, 0x50, 0x67, 0xcd, 0xcd, 0x24, 0x06, 0xa3, 0xe4, 0xec, 0xc2, 0xca, 0xbd, + 0x28, 0xdd, 0x63, 0x98, 0xec, 0x67, 0xc1, 0xc4, 0x2a, 0x7a, 0x7e, 0xc2, 0xf1, 0x2e, 0xcc, 0x2b, + 0x2b, 0x19, 0x5a, 0x87, 0x97, 0x86, 0xe2, 0x87, 0xf4, 0xb7, 0x74, 0xbd, 0x76, 0x62, 0x20, 0x4a, + 0x79, 0x7d, 0x80, 0x4a, 0xa5, 0xf9, 0x6f, 0x03, 0xa0, 0xb3, 0xb3, 0xb3, 0x1d, 0xba, 0x43, 0x8f, + 0xf0, 0x59, 0x79, 0xfc, 0x16, 0x5c, 0x4c, 0x3c, 0x66, 0xa1, 0x7d, 0x66, 0xaf, 0x2f, 0xc4, 0x6a, + 0xbd, 0xd0, 0x3e, 0x16, 0xcd, 0x61, 0x3c, 0x46, 0x9b, 0x3b, 0x33, 0x5a, 0x87, 0xf1, 0xe3, 0x69, + 0xec, 0x41, 0x29, 0x71, 0x9f, 0xa1, 0x0e, 0x14, 0xb8, 0xfe, 0xad, 0xd9, 0x6c, 0x9e, 0xcc, 0x66, + 0xa4, 0xa6, 0x19, 0x8d, 0x35, 0x9b, 0xff, 0x11, 0xa4, 0xc6, 0x11, 0xfb, 0xf9, 0x0a, 0x23, 0x51, + 0x7b, 0x75, 0x6d, 0x9c, 0x45, 0x47, 0xa1, 0xb1, 0x26, 0x58, 0xfd, 0x65, 0x16, 0x2e, 0xdc, 0x8d, + 0xaa, 0xcd, 0xe7, 0x96, 0x89, 0x2d, 0x98, 0x27, 0x94, 0x87, 0xae, 0xa4, 0x42, 0x9c, 0xf5, 0xd7, + 0x4e, 0x3a, 0xeb, 0x63, 0x7c, 0xe9, 0x52, 0x1e, 0x8e, 0xf5, 0xc9, 0x47, 0x30, 0x13, 0x2c, 0xfc, + 0x39, 0x0b, 0x95, 0x93, 0x34, 0xd1, 0x6b, 0x50, 0xb6, 0x43, 0x22, 0x27, 0xa2, 0xaa, 0x6f, 0xc8, + 0xaa, 0xbf, 0x14, 0x4d, 0xeb, 0xa2, 0xff, 0x36, 0x88, 0x06, 0x4a, 0x04, 0x96, 0x10, 0x3d, 0x77, + 0xc7, 0xb4, 0x94, 0x28, 0xcb, 0xb2, 0x4f, 0xa0, 0xec, 0x52, 0x97, 0xbb, 0xd8, 0xb3, 0xfa, 0xd8, + 0xc3, 0xd4, 0x7e, 0x9e, 0xce, 0x72, 0xba, 0x50, 0x2f, 0x69, 0xd0, 0xb6, 0xc2, 0x44, 0x3b, 0x30, + 0x1f, 0xc1, 0xe7, 0x66, 0x00, 0x1f, 0x81, 0xa5, 0xba, 0xa8, 0x4f, 0xb3, 0xb0, 0x62, 0x12, 0xe7, + 0xc5, 0xa2, 0xf5, 0x47, 0x00, 0x2a, 0xe1, 0x44, 0x1d, 0x7c, 0x0e, 0x66, 0xa7, 0x13, 0xb8, 0xa8, + 0xf0, 0x3a, 0x8c, 0xa7, 0xb8, 0xfd, 0x38, 0x0b, 0x0b, 0x69, 0x6e, 0x5f, 0x80, 0xef, 0x02, 0xda, + 0x4c, 0xaa, 0x41, 0x4e, 0x56, 0x83, 0xd7, 0x4f, 0xaa, 0x06, 0x53, 0x51, 0x77, 0x7a, 0x19, 0x78, + 0x90, 0x83, 0xfc, 0x16, 0x0e, 0xb1, 0xcf, 0xd0, 0x77, 0xa6, 0x1a, 0x38, 0x75, 0xab, 0xba, 0x3c, + 0x15, 0x73, 0x1d, 0xfd, 0x1c, 0xa2, 0x42, 0xee, 0xbd, 0x63, 0xfa, 0xb7, 0x57, 0x60, 0x49, 0x5c, + 0x11, 0x63, 0x57, 0x14, 0x89, 0x8b, 0xf2, 0x8e, 0x17, 0xdf, 0x2e, 0x18, 0xaa, 0x43, 0x49, 0x88, + 0x25, 0x85, 0x4e, 0xc8, 0x80, 0x8f, 0x0f, 0xba, 0x6a, 0x06, 0x5d, 0x05, 0xb4, 0x17, 0x3f, 0x77, + 0x58, 0x09, 0x05, 0x42, 0x6e, 0x25, 0x59, 0x89, 0xc4, 0xbf, 0x04, 0x20, 0xac, 0xb0, 0x1c, 0x42, + 0x03, 0x5f, 0xdf, 0x71, 0x8a, 0x62, 0xa6, 0x23, 0x26, 0xd0, 0xcf, 0x54, 0x2f, 0x38, 0x71, 0x7b, + 0xd4, 0x6d, 0xf8, 0x5b, 0xe7, 0x8b, 0xd4, 0x7f, 0x1d, 0xd6, 0xab, 0x63, 0xec, 0x7b, 0xeb, 0xcd, + 0x63, 0x20, 0x9b, 0xb2, 0x37, 0x3c, 0x7a, 0xeb, 0x44, 0xeb, 0x50, 0x95, 0xd7, 0x66, 0xfd, 0xe8, + 0x60, 0xed, 0x93, 0xb1, 0x15, 0xea, 0x57, 0x13, 0x26, 0xfb, 0xf4, 0x9c, 0x79, 0x49, 0xdc, 0x81, + 0xa7, 0xde, 0x54, 0x18, 0xfa, 0x3e, 0x54, 0x52, 0x8f, 0x15, 0xb1, 0x9a, 0xb5, 0x4b, 0x88, 0xec, + 0xc7, 0xc5, 0x29, 0xe9, 0x80, 0xe8, 0x63, 0x46, 0x52, 0xad, 0xb1, 0x1b, 0x35, 0xc5, 0x17, 0xed, + 0xf8, 0x9d, 0x22, 0xc2, 0xbd, 0x49, 0xd2, 0x35, 0xeb, 0x7d, 0x03, 0x50, 0xf2, 0x21, 0x30, 0x09, + 0x1b, 0x8a, 0xcb, 0x96, 0x68, 0xc5, 0x53, 0x7d, 0xb3, 0x71, 0x7a, 0x2b, 0x9e, 0xe8, 0x47, 0xad, + 0x78, 0x2a, 0x4f, 0xbf, 0x91, 0x94, 0xdd, 0xec, 0xd9, 0x6c, 0x9e, 0xaa, 0xac, 0x99, 0xe6, 0xa7, + 0x06, 0x5c, 0x9e, 0x8a, 0xf1, 0xd8, 0xd8, 0x9f, 0x00, 0x0a, 0x53, 0x8b, 0x32, 0x62, 0xc6, 0xda, + 0xe8, 0x73, 0xa7, 0xcc, 0x4a, 0x38, 0x55, 0xc1, 0xff, 0x5f, 0x5f, 0x8e, 0x9c, 0x3c, 0x81, 0xdf, + 0x1b, 0xb0, 0x9a, 0x36, 0x26, 0x76, 0xeb, 0x0e, 0x2c, 0xa4, 0x6d, 0xd1, 0x0e, 0xbd, 0x7c, 0x16, + 0x87, 0xb4, 0x2f, 0x47, 0xf4, 0xd1, 0x3b, 0x49, 0x39, 0x51, 0x8f, 0x7f, 0xd7, 0xce, 0xcc, 0x4d, + 0x64, 0xd3, 0x64, 0x59, 0xc9, 0x45, 0xbd, 0x55, 0x6e, 0x2b, 0x08, 0x3c, 0xf4, 0x73, 0x58, 0xa1, + 0x01, 0xb7, 0x44, 0xee, 0x11, 0xc7, 0xd2, 0xf7, 0x69, 0x55, 0x93, 0xdf, 0x39, 0x1f, 0x65, 0xff, + 0x38, 0xac, 0x4f, 0x43, 0x4d, 0xf0, 0x58, 0xa6, 0x01, 0x6f, 0xcb, 0xf5, 0x6d, 0x75, 0xdb, 0x0e, + 0x61, 0xf1, 0xe8, 0xd6, 0xaa, 0x86, 0xbf, 0x7d, 0xee, 0xad, 0x17, 0x4f, 0xdb, 0x76, 0xa1, 0x9f, + 0xda, 0x73, 0xbd, 0x20, 0xce, 0xf0, 0x9f, 0x8f, 0xeb, 0xc6, 0x57, 0x7f, 0x63, 0x00, 0x24, 0x0f, + 0x0b, 0xe8, 0x0d, 0xf8, 0x42, 0xfb, 0xbb, 0x77, 0x3a, 0x56, 0x6f, 0xfb, 0xc6, 0xf6, 0xdd, 0x9e, + 0x75, 0xf7, 0x4e, 0x6f, 0xab, 0xbb, 0xb1, 0x79, 0x73, 0xb3, 0xdb, 0x59, 0xce, 0x54, 0xcb, 0x0f, + 0x1f, 0x35, 0x4a, 0x77, 0x29, 0x1b, 0x12, 0xdb, 0xdd, 0x75, 0x89, 0x83, 0x5e, 0x85, 0xd5, 0xa3, + 0xd2, 0x62, 0xd4, 0xed, 0x2c, 0x1b, 0xd5, 0x85, 0x87, 0x8f, 0x1a, 0x05, 0xd5, 0xb3, 0x11, 0x07, + 0x5d, 0x81, 0x8b, 0xd3, 0x72, 0x9b, 0x77, 0xbe, 0xbd, 0x9c, 0xad, 0x2e, 0x3e, 0x7c, 0xd4, 0x28, + 0xc6, 0xcd, 0x1d, 0x6a, 0x02, 0x4a, 0x4b, 0x6a, 0xbc, 0xb9, 0x2a, 0x3c, 0x7c, 0xd4, 0xc8, 0x2b, + 0xda, 0xaa, 0xb9, 0x07, 0xef, 0xd7, 0x32, 0xed, 0x9b, 0x1f, 0x3d, 0xad, 0x19, 0x4f, 0x9e, 0xd6, + 0x8c, 0xbf, 0x3d, 0xad, 0x19, 0xef, 0x3e, 0xab, 0x65, 0x9e, 0x3c, 0xab, 0x65, 0xfe, 0xf8, 0xac, + 0x96, 0xf9, 0xe1, 0x1b, 0xa7, 0x32, 0x76, 0x10, 0xbf, 0xcc, 0x4b, 0xee, 0xfa, 0x79, 0xf9, 0xa9, + 0xf8, 0xfa, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x33, 0x7c, 0x1a, 0x95, 0xb8, 0x17, 0x00, 0x00, } func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { @@ -1329,480 +1350,484 @@ func (this *Pool) Description() (desc *github_com_gogo_protobuf_protoc_gen_gogo_ func StakingDescription() (desc *github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet) { d := &github_com_gogo_protobuf_protoc_gen_gogo_descriptor.FileDescriptorSet{} var gzipped = []byte{ - // 7568 bytes of a gzipped FileDescriptorSet + // 7622 bytes of a gzipped FileDescriptorSet 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7c, 0x6b, 0x70, 0x24, 0xd7, 0x75, 0x1e, 0xe6, 0x81, 0xc1, 0xcc, 0x99, 0xc1, 0x4c, 0xe3, 0x02, 0xbb, 0x3b, 0x0b, 0x92, 0x00, 0x38, 0x7c, 0xec, 0xf2, 0x85, 0x25, 0x97, 0xdc, 0x5d, 0xee, 0xac, 0x25, 0x06, 0xf3, 0x58, 0x10, - 0x4b, 0x3c, 0x86, 0x3d, 0xc0, 0xf2, 0xe1, 0x38, 0x5d, 0x8d, 0x9e, 0x8b, 0x41, 0x13, 0x3d, 0xdd, - 0xed, 0xee, 0x9e, 0xdd, 0x05, 0xcb, 0x49, 0xd1, 0xa5, 0x3c, 0xa4, 0x4d, 0xc5, 0x91, 0xe3, 0x54, - 0x2c, 0xcb, 0x5a, 0x85, 0x92, 0x9c, 0xc8, 0x51, 0x94, 0x87, 0x2d, 0x45, 0x8e, 0xe3, 0x4a, 0xa2, - 0x24, 0x95, 0x44, 0xd6, 0x8f, 0x94, 0xec, 0x1f, 0xb1, 0x9d, 0x07, 0xe3, 0x50, 0xaa, 0x44, 0x51, - 0x94, 0xd8, 0x51, 0x98, 0xaa, 0xa4, 0x54, 0x4a, 0xb9, 0xee, 0xab, 0x1f, 0xf3, 0xc0, 0x0c, 0xd6, - 0x4b, 0xda, 0x55, 0xfa, 0x85, 0xe9, 0x73, 0xcf, 0xf7, 0xf5, 0xb9, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, - 0xb7, 0xbb, 0x01, 0xff, 0xe2, 0x0a, 0x2c, 0xb5, 0x2d, 0xab, 0x6d, 0xe0, 0x73, 0xb6, 0x63, 0x79, - 0xd6, 0x6e, 0x77, 0xef, 0x5c, 0x0b, 0xbb, 0x9a, 0xa3, 0xdb, 0x9e, 0xe5, 0x2c, 0x53, 0x19, 0x2a, - 0x30, 0x8d, 0x65, 0xa1, 0x51, 0xda, 0x80, 0x99, 0xab, 0xba, 0x81, 0x6b, 0xbe, 0x62, 0x13, 0x7b, - 0xe8, 0x79, 0x48, 0xee, 0xe9, 0x06, 0x2e, 0xc6, 0x96, 0x12, 0x67, 0xb3, 0xe7, 0x1f, 0x5e, 0xee, - 0x01, 0x2d, 0x47, 0x11, 0x0d, 0x22, 0x96, 0x29, 0xa2, 0xf4, 0xad, 0x24, 0xcc, 0x0e, 0x68, 0x45, - 0x08, 0x92, 0xa6, 0xda, 0x21, 0x8c, 0xb1, 0xb3, 0x19, 0x99, 0xfe, 0x46, 0x45, 0x98, 0xb2, 0x55, - 0xed, 0x40, 0x6d, 0xe3, 0x62, 0x9c, 0x8a, 0xc5, 0x25, 0x5a, 0x00, 0x68, 0x61, 0x1b, 0x9b, 0x2d, - 0x6c, 0x6a, 0x87, 0xc5, 0xc4, 0x52, 0xe2, 0x6c, 0x46, 0x0e, 0x49, 0xd0, 0x13, 0x30, 0x63, 0x77, - 0x77, 0x0d, 0x5d, 0x53, 0x42, 0x6a, 0xb0, 0x94, 0x38, 0x3b, 0x29, 0x4b, 0xac, 0xa1, 0x16, 0x28, - 0x9f, 0x81, 0xc2, 0x4d, 0xac, 0x1e, 0x84, 0x55, 0xb3, 0x54, 0x35, 0x4f, 0xc4, 0x21, 0xc5, 0x2a, - 0xe4, 0x3a, 0xd8, 0x75, 0xd5, 0x36, 0x56, 0xbc, 0x43, 0x1b, 0x17, 0x93, 0xb4, 0xf7, 0x4b, 0x7d, - 0xbd, 0xef, 0xed, 0x79, 0x96, 0xa3, 0xb6, 0x0f, 0x6d, 0x8c, 0x56, 0x20, 0x83, 0xcd, 0x6e, 0x87, - 0x31, 0x4c, 0x0e, 0xf1, 0x5f, 0xdd, 0xec, 0x76, 0x7a, 0x59, 0xd2, 0x04, 0xc6, 0x29, 0xa6, 0x5c, - 0xec, 0xdc, 0xd0, 0x35, 0x5c, 0x4c, 0x51, 0x82, 0x33, 0x7d, 0x04, 0x4d, 0xd6, 0xde, 0xcb, 0x21, - 0x70, 0xa8, 0x0a, 0x19, 0x7c, 0xcb, 0xc3, 0xa6, 0xab, 0x5b, 0x66, 0x71, 0x8a, 0x92, 0x3c, 0x32, - 0x60, 0x14, 0xb1, 0xd1, 0xea, 0xa5, 0x08, 0x70, 0xe8, 0x22, 0x4c, 0x59, 0xb6, 0xa7, 0x5b, 0xa6, - 0x5b, 0x4c, 0x2f, 0xc5, 0xce, 0x66, 0xcf, 0xdf, 0x3f, 0x30, 0x10, 0xb6, 0x98, 0x8e, 0x2c, 0x94, - 0xd1, 0x1a, 0x48, 0xae, 0xd5, 0x75, 0x34, 0xac, 0x68, 0x56, 0x0b, 0x2b, 0xba, 0xb9, 0x67, 0x15, - 0x33, 0x94, 0x60, 0xb1, 0xbf, 0x23, 0x54, 0xb1, 0x6a, 0xb5, 0xf0, 0x9a, 0xb9, 0x67, 0xc9, 0x79, - 0x37, 0x72, 0x8d, 0x4e, 0x42, 0xca, 0x3d, 0x34, 0x3d, 0xf5, 0x56, 0x31, 0x47, 0x23, 0x84, 0x5f, - 0x95, 0x7e, 0x35, 0x05, 0x85, 0x71, 0x42, 0xec, 0x0a, 0x4c, 0xee, 0x91, 0x5e, 0x16, 0xe3, 0xc7, - 0xf1, 0x01, 0xc3, 0x44, 0x9d, 0x98, 0xba, 0x4b, 0x27, 0xae, 0x40, 0xd6, 0xc4, 0xae, 0x87, 0x5b, - 0x2c, 0x22, 0x12, 0x63, 0xc6, 0x14, 0x30, 0x50, 0x7f, 0x48, 0x25, 0xef, 0x2a, 0xa4, 0x5e, 0x85, - 0x82, 0x6f, 0x92, 0xe2, 0xa8, 0x66, 0x5b, 0xc4, 0xe6, 0xb9, 0x51, 0x96, 0x2c, 0xd7, 0x05, 0x4e, - 0x26, 0x30, 0x39, 0x8f, 0x23, 0xd7, 0xa8, 0x06, 0x60, 0x99, 0xd8, 0xda, 0x53, 0x5a, 0x58, 0x33, - 0x8a, 0xe9, 0x21, 0x5e, 0xda, 0x22, 0x2a, 0x7d, 0x5e, 0xb2, 0x98, 0x54, 0x33, 0xd0, 0xe5, 0x20, - 0xd4, 0xa6, 0x86, 0x44, 0xca, 0x06, 0x9b, 0x64, 0x7d, 0xd1, 0xb6, 0x03, 0x79, 0x07, 0x93, 0xb8, - 0xc7, 0x2d, 0xde, 0xb3, 0x0c, 0x35, 0x62, 0x79, 0x64, 0xcf, 0x64, 0x0e, 0x63, 0x1d, 0x9b, 0x76, - 0xc2, 0x97, 0xe8, 0x21, 0xf0, 0x05, 0x0a, 0x0d, 0x2b, 0xa0, 0x59, 0x28, 0x27, 0x84, 0x9b, 0x6a, - 0x07, 0xcf, 0xbf, 0x09, 0xf9, 0xa8, 0x7b, 0xd0, 0x1c, 0x4c, 0xba, 0x9e, 0xea, 0x78, 0x34, 0x0a, - 0x27, 0x65, 0x76, 0x81, 0x24, 0x48, 0x60, 0xb3, 0x45, 0xb3, 0xdc, 0xa4, 0x4c, 0x7e, 0xa2, 0x3f, - 0x11, 0x74, 0x38, 0x41, 0x3b, 0xfc, 0x68, 0xff, 0x88, 0x46, 0x98, 0x7b, 0xfb, 0x3d, 0x7f, 0x09, - 0xa6, 0x23, 0x1d, 0x18, 0xf7, 0xd6, 0xa5, 0x9f, 0x80, 0x13, 0x03, 0xa9, 0xd1, 0xab, 0x30, 0xd7, - 0x35, 0x75, 0xd3, 0xc3, 0x8e, 0xed, 0x60, 0x12, 0xb1, 0xec, 0x56, 0xc5, 0xff, 0x3a, 0x35, 0x24, - 0xe6, 0x76, 0xc2, 0xda, 0x8c, 0x45, 0x9e, 0xed, 0xf6, 0x0b, 0x1f, 0xcf, 0xa4, 0xbf, 0x3d, 0x25, - 0xbd, 0xf5, 0xd6, 0x5b, 0x6f, 0xc5, 0x4b, 0xff, 0x2c, 0x05, 0x73, 0x83, 0xe6, 0xcc, 0xc0, 0xe9, - 0x7b, 0x12, 0x52, 0x66, 0xb7, 0xb3, 0x8b, 0x1d, 0xea, 0xa4, 0x49, 0x99, 0x5f, 0xa1, 0x15, 0x98, - 0x34, 0xd4, 0x5d, 0x6c, 0x14, 0x93, 0x4b, 0xb1, 0xb3, 0xf9, 0xf3, 0x4f, 0x8c, 0x35, 0x2b, 0x97, - 0xd7, 0x09, 0x44, 0x66, 0x48, 0xf4, 0x61, 0x48, 0xf2, 0x14, 0x4d, 0x18, 0x1e, 0x1f, 0x8f, 0x81, - 0xcc, 0x25, 0x99, 0xe2, 0xd0, 0x7d, 0x90, 0x21, 0x7f, 0x59, 0x6c, 0xa4, 0xa8, 0xcd, 0x69, 0x22, - 0x20, 0x71, 0x81, 0xe6, 0x21, 0x4d, 0xa7, 0x49, 0x0b, 0x8b, 0xa5, 0xcd, 0xbf, 0x26, 0x81, 0xd5, - 0xc2, 0x7b, 0x6a, 0xd7, 0xf0, 0x94, 0x1b, 0xaa, 0xd1, 0xc5, 0x34, 0xe0, 0x33, 0x72, 0x8e, 0x0b, - 0xaf, 0x13, 0x19, 0x5a, 0x84, 0x2c, 0x9b, 0x55, 0xba, 0xd9, 0xc2, 0xb7, 0x68, 0xf6, 0x9c, 0x94, - 0xd9, 0x44, 0x5b, 0x23, 0x12, 0x72, 0xfb, 0x37, 0x5c, 0xcb, 0x14, 0xa1, 0x49, 0x6f, 0x41, 0x04, - 0xf4, 0xf6, 0x97, 0x7a, 0x13, 0xf7, 0x03, 0x83, 0xbb, 0xd7, 0x37, 0x97, 0xce, 0x40, 0x81, 0x6a, - 0x3c, 0xcb, 0x87, 0x5e, 0x35, 0x8a, 0x33, 0x4b, 0xb1, 0xb3, 0x69, 0x39, 0xcf, 0xc4, 0x5b, 0x5c, - 0x5a, 0xfa, 0x4a, 0x1c, 0x92, 0x34, 0xb1, 0x14, 0x20, 0xbb, 0xfd, 0x5a, 0xa3, 0xae, 0xd4, 0xb6, - 0x76, 0x2a, 0xeb, 0x75, 0x29, 0x86, 0xf2, 0x00, 0x54, 0x70, 0x75, 0x7d, 0x6b, 0x65, 0x5b, 0x8a, - 0xfb, 0xd7, 0x6b, 0x9b, 0xdb, 0x17, 0x9f, 0x93, 0x12, 0x3e, 0x60, 0x87, 0x09, 0x92, 0x61, 0x85, - 0x67, 0xcf, 0x4b, 0x93, 0x48, 0x82, 0x1c, 0x23, 0x58, 0x7b, 0xb5, 0x5e, 0xbb, 0xf8, 0x9c, 0x94, - 0x8a, 0x4a, 0x9e, 0x3d, 0x2f, 0x4d, 0xa1, 0x69, 0xc8, 0x50, 0x49, 0x65, 0x6b, 0x6b, 0x5d, 0x4a, - 0xfb, 0x9c, 0xcd, 0x6d, 0x79, 0x6d, 0x73, 0x55, 0xca, 0xf8, 0x9c, 0xab, 0xf2, 0xd6, 0x4e, 0x43, - 0x02, 0x9f, 0x61, 0xa3, 0xde, 0x6c, 0xae, 0xac, 0xd6, 0xa5, 0xac, 0xaf, 0x51, 0x79, 0x6d, 0xbb, - 0xde, 0x94, 0x72, 0x11, 0xb3, 0x9e, 0x3d, 0x2f, 0x4d, 0xfb, 0xb7, 0xa8, 0x6f, 0xee, 0x6c, 0x48, - 0x79, 0x34, 0x03, 0xd3, 0xec, 0x16, 0xc2, 0x88, 0x42, 0x8f, 0xe8, 0xe2, 0x73, 0x92, 0x14, 0x18, - 0xc2, 0x58, 0x66, 0x22, 0x82, 0x8b, 0xcf, 0x49, 0xa8, 0x54, 0x85, 0x49, 0x1a, 0x86, 0x08, 0x41, - 0x7e, 0x7d, 0xa5, 0x52, 0x5f, 0x57, 0xb6, 0x1a, 0xdb, 0x6b, 0x5b, 0x9b, 0x2b, 0xeb, 0x52, 0x2c, - 0x90, 0xc9, 0xf5, 0x97, 0x77, 0xd6, 0xe4, 0x7a, 0x4d, 0x8a, 0x87, 0x65, 0x8d, 0xfa, 0xca, 0x76, - 0xbd, 0x26, 0x25, 0x4a, 0x1a, 0xcc, 0x0d, 0x4a, 0xa8, 0x03, 0xa7, 0x50, 0x28, 0x16, 0xe2, 0x43, - 0x62, 0x81, 0x72, 0xf5, 0xc6, 0x42, 0xe9, 0x9b, 0x71, 0x98, 0x1d, 0xb0, 0xa8, 0x0c, 0xbc, 0xc9, - 0x0b, 0x30, 0xc9, 0x62, 0x99, 0x2d, 0xb3, 0x8f, 0x0d, 0x5c, 0x9d, 0x68, 0x64, 0xf7, 0x2d, 0xb5, - 0x14, 0x17, 0x2e, 0x35, 0x12, 0x43, 0x4a, 0x0d, 0x42, 0xd1, 0x17, 0xb0, 0x3f, 0xd6, 0x97, 0xfc, - 0xd9, 0xfa, 0x78, 0x71, 0x9c, 0xf5, 0x91, 0xca, 0x8e, 0xb7, 0x08, 0x4c, 0x0e, 0x58, 0x04, 0xae, - 0xc0, 0x4c, 0x1f, 0xd1, 0xd8, 0xc9, 0xf8, 0x23, 0x31, 0x28, 0x0e, 0x73, 0xce, 0x88, 0x94, 0x18, - 0x8f, 0xa4, 0xc4, 0x2b, 0xbd, 0x1e, 0x7c, 0x70, 0xf8, 0x20, 0xf4, 0x8d, 0xf5, 0xe7, 0x63, 0x70, - 0x72, 0x70, 0x49, 0x39, 0xd0, 0x86, 0x0f, 0x43, 0xaa, 0x83, 0xbd, 0x7d, 0x4b, 0x94, 0x55, 0x8f, - 0x0e, 0x58, 0xac, 0x49, 0x73, 0xef, 0x60, 0x73, 0x54, 0x78, 0xb5, 0x4f, 0x0c, 0xab, 0x0b, 0x99, - 0x35, 0x7d, 0x96, 0x7e, 0x2c, 0x0e, 0x27, 0x06, 0x92, 0x0f, 0x34, 0xf4, 0x01, 0x00, 0xdd, 0xb4, - 0xbb, 0x1e, 0x2b, 0x9d, 0x58, 0x26, 0xce, 0x50, 0x09, 0x4d, 0x5e, 0x24, 0xcb, 0x76, 0x3d, 0xbf, - 0x3d, 0x41, 0xdb, 0x81, 0x89, 0xa8, 0xc2, 0xf3, 0x81, 0xa1, 0x49, 0x6a, 0xe8, 0xc2, 0x90, 0x9e, - 0xf6, 0x05, 0xe6, 0xd3, 0x20, 0x69, 0x86, 0x8e, 0x4d, 0x4f, 0x71, 0x3d, 0x07, 0xab, 0x1d, 0xdd, - 0x6c, 0xd3, 0xa5, 0x26, 0x5d, 0x9e, 0xdc, 0x53, 0x0d, 0x17, 0xcb, 0x05, 0xd6, 0xdc, 0x14, 0xad, - 0x04, 0x41, 0x03, 0xc8, 0x09, 0x21, 0x52, 0x11, 0x04, 0x6b, 0xf6, 0x11, 0xa5, 0x9f, 0xce, 0x40, - 0x36, 0x54, 0x80, 0xa3, 0x07, 0x21, 0xf7, 0x86, 0x7a, 0x43, 0x55, 0xc4, 0xa6, 0x8a, 0x79, 0x22, - 0x4b, 0x64, 0x0d, 0xbe, 0xb1, 0x7a, 0x1a, 0xe6, 0xa8, 0x8a, 0xd5, 0xf5, 0xb0, 0xa3, 0x68, 0x86, - 0xea, 0xba, 0xd4, 0x69, 0x69, 0xaa, 0x8a, 0x48, 0xdb, 0x16, 0x69, 0xaa, 0x8a, 0x16, 0x74, 0x01, - 0x66, 0x29, 0xa2, 0xd3, 0x35, 0x3c, 0xdd, 0x36, 0xb0, 0x42, 0xb6, 0x79, 0x2e, 0x5d, 0x72, 0x7c, - 0xcb, 0x66, 0x88, 0xc6, 0x06, 0x57, 0x20, 0x16, 0xb9, 0xa8, 0x06, 0x0f, 0x50, 0x58, 0x1b, 0x9b, - 0xd8, 0x51, 0x3d, 0xac, 0xe0, 0x1f, 0xef, 0xaa, 0x86, 0xab, 0xa8, 0x66, 0x4b, 0xd9, 0x57, 0xdd, - 0xfd, 0xe2, 0x1c, 0x21, 0xa8, 0xc4, 0x8b, 0x31, 0xf9, 0x34, 0x51, 0x5c, 0xe5, 0x7a, 0x75, 0xaa, - 0xb6, 0x62, 0xb6, 0x5e, 0x54, 0xdd, 0x7d, 0x54, 0x86, 0x93, 0x94, 0xc5, 0xf5, 0x1c, 0xdd, 0x6c, - 0x2b, 0xda, 0x3e, 0xd6, 0x0e, 0x94, 0xae, 0xb7, 0xf7, 0x7c, 0xf1, 0xbe, 0xf0, 0xfd, 0xa9, 0x85, - 0x4d, 0xaa, 0x53, 0x25, 0x2a, 0x3b, 0xde, 0xde, 0xf3, 0xa8, 0x09, 0x39, 0x32, 0x18, 0x1d, 0xfd, - 0x4d, 0xac, 0xec, 0x59, 0x0e, 0x5d, 0x43, 0xf3, 0x03, 0x52, 0x53, 0xc8, 0x83, 0xcb, 0x5b, 0x1c, - 0xb0, 0x61, 0xb5, 0x70, 0x79, 0xb2, 0xd9, 0xa8, 0xd7, 0x6b, 0x72, 0x56, 0xb0, 0x5c, 0xb5, 0x1c, - 0x12, 0x50, 0x6d, 0xcb, 0x77, 0x70, 0x96, 0x05, 0x54, 0xdb, 0x12, 0xee, 0xbd, 0x00, 0xb3, 0x9a, - 0xc6, 0xfa, 0xac, 0x6b, 0x0a, 0xdf, 0x8c, 0xb9, 0x45, 0x29, 0xe2, 0x2c, 0x4d, 0x5b, 0x65, 0x0a, - 0x3c, 0xc6, 0x5d, 0x74, 0x19, 0x4e, 0x04, 0xce, 0x0a, 0x03, 0x67, 0xfa, 0x7a, 0xd9, 0x0b, 0xbd, - 0x00, 0xb3, 0xf6, 0x61, 0x3f, 0x10, 0x45, 0xee, 0x68, 0x1f, 0xf6, 0xc2, 0x2e, 0xc1, 0x9c, 0xbd, - 0x6f, 0xf7, 0xe3, 0x1e, 0x0f, 0xe3, 0x90, 0xbd, 0x6f, 0xf7, 0x02, 0x1f, 0xa1, 0x3b, 0x73, 0x07, - 0x6b, 0xaa, 0x87, 0x5b, 0xc5, 0x53, 0x61, 0xf5, 0x50, 0x03, 0x5a, 0x06, 0x49, 0xd3, 0x14, 0x6c, - 0xaa, 0xbb, 0x06, 0x56, 0x54, 0x07, 0x9b, 0xaa, 0x5b, 0x5c, 0xa4, 0xca, 0x49, 0xcf, 0xe9, 0x62, - 0x39, 0xaf, 0x69, 0x75, 0xda, 0xb8, 0x42, 0xdb, 0xd0, 0xe3, 0x30, 0x63, 0xed, 0xbe, 0xa1, 0xb1, - 0x88, 0x54, 0x6c, 0x07, 0xef, 0xe9, 0xb7, 0x8a, 0x0f, 0x53, 0xf7, 0x16, 0x48, 0x03, 0x8d, 0xc7, - 0x06, 0x15, 0xa3, 0xc7, 0x40, 0xd2, 0xdc, 0x7d, 0xd5, 0xb1, 0x69, 0x4a, 0x76, 0x6d, 0x55, 0xc3, - 0xc5, 0x47, 0x98, 0x2a, 0x93, 0x6f, 0x0a, 0x31, 0x99, 0x11, 0xee, 0x4d, 0x7d, 0xcf, 0x13, 0x8c, - 0x67, 0xd8, 0x8c, 0xa0, 0x32, 0xce, 0x76, 0x16, 0x24, 0xe2, 0x89, 0xc8, 0x8d, 0xcf, 0x52, 0xb5, - 0xbc, 0xbd, 0x6f, 0x87, 0xef, 0xfb, 0x10, 0x4c, 0x13, 0xcd, 0xe0, 0xa6, 0x8f, 0xb1, 0xc2, 0xcd, - 0xde, 0x0f, 0xdd, 0xf1, 0x39, 0x38, 0x49, 0x94, 0x3a, 0xd8, 0x53, 0x5b, 0xaa, 0xa7, 0x86, 0xb4, - 0x9f, 0xa4, 0xda, 0xc4, 0xed, 0x1b, 0xbc, 0x31, 0x62, 0xa7, 0xd3, 0xdd, 0x3d, 0xf4, 0x03, 0xeb, - 0x29, 0x66, 0x27, 0x91, 0x89, 0xd0, 0x7a, 0xdf, 0x8a, 0xf3, 0x52, 0x19, 0x72, 0xe1, 0xb8, 0x47, - 0x19, 0x60, 0x91, 0x2f, 0xc5, 0x48, 0x11, 0x54, 0xdd, 0xaa, 0x91, 0xf2, 0xe5, 0xf5, 0xba, 0x14, - 0x27, 0x65, 0xd4, 0xfa, 0xda, 0x76, 0x5d, 0x91, 0x77, 0x36, 0xb7, 0xd7, 0x36, 0xea, 0x52, 0x22, - 0x54, 0xd8, 0x5f, 0x4b, 0xa6, 0x1f, 0x95, 0xce, 0x90, 0xaa, 0x21, 0x1f, 0xdd, 0xa9, 0xa1, 0x1f, - 0x81, 0x53, 0xe2, 0x58, 0xc5, 0xc5, 0x9e, 0x72, 0x53, 0x77, 0xe8, 0x84, 0xec, 0xa8, 0x6c, 0x71, - 0xf4, 0xe3, 0x67, 0x8e, 0x6b, 0x35, 0xb1, 0xf7, 0x8a, 0xee, 0x90, 0xe9, 0xd6, 0x51, 0x3d, 0xb4, - 0x0e, 0x8b, 0xa6, 0xa5, 0xb8, 0x9e, 0x6a, 0xb6, 0x54, 0xa7, 0xa5, 0x04, 0x07, 0x5a, 0x8a, 0xaa, - 0x69, 0xd8, 0x75, 0x2d, 0xb6, 0x10, 0xfa, 0x2c, 0xf7, 0x9b, 0x56, 0x93, 0x2b, 0x07, 0x2b, 0xc4, - 0x0a, 0x57, 0xed, 0x09, 0xdf, 0xc4, 0xb0, 0xf0, 0xbd, 0x0f, 0x32, 0x1d, 0xd5, 0x56, 0xb0, 0xe9, - 0x39, 0x87, 0xb4, 0x3e, 0x4f, 0xcb, 0xe9, 0x8e, 0x6a, 0xd7, 0xc9, 0xf5, 0x07, 0xb2, 0x4d, 0xba, - 0x96, 0x4c, 0x27, 0xa5, 0xc9, 0x6b, 0xc9, 0xf4, 0xa4, 0x94, 0xba, 0x96, 0x4c, 0xa7, 0xa4, 0xa9, - 0x6b, 0xc9, 0x74, 0x5a, 0xca, 0x5c, 0x4b, 0xa6, 0x33, 0x12, 0x94, 0xde, 0x4d, 0x40, 0x2e, 0x5c, - 0xc1, 0x93, 0x0d, 0x91, 0x46, 0xd7, 0xb0, 0x18, 0xcd, 0x72, 0x0f, 0x1d, 0x59, 0xef, 0x2f, 0x57, - 0xc9, 0xe2, 0x56, 0x4e, 0xb1, 0x72, 0x59, 0x66, 0x48, 0x52, 0x58, 0x90, 0xf0, 0xc3, 0xac, 0x3c, - 0x49, 0xcb, 0xfc, 0x0a, 0xad, 0x42, 0xea, 0x0d, 0x97, 0x72, 0xa7, 0x28, 0xf7, 0xc3, 0x47, 0x73, - 0x5f, 0x6b, 0x52, 0xf2, 0xcc, 0xb5, 0xa6, 0xb2, 0xb9, 0x25, 0x6f, 0xac, 0xac, 0xcb, 0x1c, 0x8e, - 0x4e, 0x43, 0xd2, 0x50, 0xdf, 0x3c, 0x8c, 0x2e, 0x83, 0x54, 0x34, 0xee, 0xb0, 0x9c, 0x86, 0xe4, - 0x4d, 0xac, 0x1e, 0x44, 0x17, 0x1f, 0x2a, 0x7a, 0x1f, 0xa7, 0xc7, 0x39, 0x98, 0xa4, 0xfe, 0x42, - 0x00, 0xdc, 0x63, 0xd2, 0x04, 0x4a, 0x43, 0xb2, 0xba, 0x25, 0x93, 0x29, 0x22, 0x41, 0x8e, 0x49, - 0x95, 0xc6, 0x5a, 0xbd, 0x5a, 0x97, 0xe2, 0xa5, 0x0b, 0x90, 0x62, 0x4e, 0x20, 0xd3, 0xc7, 0x77, - 0x83, 0x34, 0xc1, 0x2f, 0x39, 0x47, 0x4c, 0xb4, 0xee, 0x6c, 0x54, 0xea, 0xb2, 0x14, 0xef, 0x1b, - 0xfc, 0x92, 0x0b, 0xb9, 0x70, 0x65, 0xfe, 0xc1, 0x6c, 0xcf, 0xbf, 0x1a, 0x83, 0x6c, 0xa8, 0xd2, - 0x26, 0x25, 0x92, 0x6a, 0x18, 0xd6, 0x4d, 0x45, 0x35, 0x74, 0xd5, 0xe5, 0xa1, 0x01, 0x54, 0xb4, - 0x42, 0x24, 0xe3, 0x0e, 0xdd, 0x07, 0x34, 0x69, 0x26, 0xa5, 0x54, 0xe9, 0xd3, 0x31, 0x90, 0x7a, - 0x4b, 0xdd, 0x1e, 0x33, 0x63, 0x7f, 0x94, 0x66, 0x96, 0x3e, 0x15, 0x83, 0x7c, 0xb4, 0xbe, 0xed, - 0x31, 0xef, 0xc1, 0x3f, 0x52, 0xf3, 0x7e, 0x37, 0x0e, 0xd3, 0x91, 0xaa, 0x76, 0x5c, 0xeb, 0x7e, - 0x1c, 0x66, 0xf4, 0x16, 0xee, 0xd8, 0x96, 0x87, 0x4d, 0xed, 0x50, 0x31, 0xf0, 0x0d, 0x6c, 0x14, - 0x4b, 0x34, 0x69, 0x9c, 0x3b, 0xba, 0x6e, 0x5e, 0x5e, 0x0b, 0x70, 0xeb, 0x04, 0x56, 0x9e, 0x5d, - 0xab, 0xd5, 0x37, 0x1a, 0x5b, 0xdb, 0xf5, 0xcd, 0xea, 0x6b, 0xca, 0xce, 0xe6, 0x4b, 0x9b, 0x5b, - 0xaf, 0x6c, 0xca, 0x92, 0xde, 0xa3, 0xf6, 0x3e, 0x4e, 0xfb, 0x06, 0x48, 0xbd, 0x46, 0xa1, 0x53, - 0x30, 0xc8, 0x2c, 0x69, 0x02, 0xcd, 0x42, 0x61, 0x73, 0x4b, 0x69, 0xae, 0xd5, 0xea, 0x4a, 0xfd, - 0xea, 0xd5, 0x7a, 0x75, 0xbb, 0xc9, 0x4e, 0x42, 0x7c, 0xed, 0xed, 0xc8, 0x04, 0x2f, 0x7d, 0x32, - 0x01, 0xb3, 0x03, 0x2c, 0x41, 0x2b, 0x7c, 0x0f, 0xc3, 0xb6, 0x55, 0x4f, 0x8d, 0x63, 0xfd, 0x32, - 0xa9, 0x22, 0x1a, 0xaa, 0xe3, 0xf1, 0x2d, 0xcf, 0x63, 0x40, 0xbc, 0x64, 0x7a, 0xfa, 0x9e, 0x8e, - 0x1d, 0x7e, 0xc2, 0xc4, 0x36, 0x36, 0x85, 0x40, 0xce, 0x0e, 0x99, 0x9e, 0x04, 0x64, 0x5b, 0xae, - 0xee, 0xe9, 0x37, 0xb0, 0xa2, 0x9b, 0xe2, 0x38, 0x8a, 0x6c, 0x74, 0x92, 0xb2, 0x24, 0x5a, 0xd6, - 0x4c, 0xcf, 0xd7, 0x36, 0x71, 0x5b, 0xed, 0xd1, 0x26, 0xc9, 0x3c, 0x21, 0x4b, 0xa2, 0xc5, 0xd7, - 0x7e, 0x10, 0x72, 0x2d, 0xab, 0x4b, 0xaa, 0x3f, 0xa6, 0x47, 0xd6, 0x8e, 0x98, 0x9c, 0x65, 0x32, - 0x5f, 0x85, 0xd7, 0xf5, 0xc1, 0x39, 0x58, 0x4e, 0xce, 0x32, 0x19, 0x53, 0x39, 0x03, 0x05, 0xb5, - 0xdd, 0x76, 0x08, 0xb9, 0x20, 0x62, 0x3b, 0x95, 0xbc, 0x2f, 0xa6, 0x8a, 0xf3, 0xd7, 0x20, 0x2d, - 0xfc, 0x40, 0x16, 0x6f, 0xe2, 0x09, 0xc5, 0x66, 0xdb, 0xef, 0xf8, 0xd9, 0x8c, 0x9c, 0x36, 0x45, - 0xe3, 0x83, 0x90, 0xd3, 0x5d, 0x25, 0x38, 0xd6, 0x8f, 0x2f, 0xc5, 0xcf, 0xa6, 0xe5, 0xac, 0xee, - 0xfa, 0x47, 0xa2, 0xa5, 0xcf, 0xc7, 0x21, 0x1f, 0x7d, 0x2c, 0x81, 0x6a, 0x90, 0x36, 0x2c, 0x4d, - 0xa5, 0xa1, 0xc5, 0x9e, 0x89, 0x9d, 0x1d, 0xf1, 0x24, 0x63, 0x79, 0x9d, 0xeb, 0xcb, 0x3e, 0x72, - 0xfe, 0xdf, 0xc4, 0x20, 0x2d, 0xc4, 0xe8, 0x24, 0x24, 0x6d, 0xd5, 0xdb, 0xa7, 0x74, 0x93, 0x95, - 0xb8, 0x14, 0x93, 0xe9, 0x35, 0x91, 0xbb, 0xb6, 0x6a, 0xd2, 0x10, 0xe0, 0x72, 0x72, 0x4d, 0xc6, - 0xd5, 0xc0, 0x6a, 0x8b, 0x6e, 0x83, 0xac, 0x4e, 0x07, 0x9b, 0x9e, 0x2b, 0xc6, 0x95, 0xcb, 0xab, - 0x5c, 0x8c, 0x9e, 0x80, 0x19, 0xcf, 0x51, 0x75, 0x23, 0xa2, 0x9b, 0xa4, 0xba, 0x92, 0x68, 0xf0, - 0x95, 0xcb, 0x70, 0x5a, 0xf0, 0xb6, 0xb0, 0xa7, 0x6a, 0xfb, 0xb8, 0x15, 0x80, 0x52, 0xf4, 0xb8, - 0xe3, 0x14, 0x57, 0xa8, 0xf1, 0x76, 0x81, 0x2d, 0xfd, 0x46, 0x0c, 0x66, 0xc4, 0xc6, 0xad, 0xe5, - 0x3b, 0x6b, 0x03, 0x40, 0x35, 0x4d, 0xcb, 0x0b, 0xbb, 0xab, 0x3f, 0x94, 0xfb, 0x70, 0xcb, 0x2b, - 0x3e, 0x48, 0x0e, 0x11, 0xcc, 0x77, 0x00, 0x82, 0x96, 0xa1, 0x6e, 0x5b, 0x84, 0x2c, 0x7f, 0xe6, - 0x44, 0x1f, 0x5c, 0xb2, 0xad, 0x3e, 0x30, 0x11, 0xd9, 0xe1, 0xa1, 0x39, 0x98, 0xdc, 0xc5, 0x6d, - 0xdd, 0xe4, 0x27, 0xc9, 0xec, 0x42, 0x1c, 0xc8, 0x24, 0xfd, 0x03, 0x99, 0xca, 0x9f, 0x81, 0x59, - 0xcd, 0xea, 0xf4, 0x9a, 0x5b, 0x91, 0x7a, 0x8e, 0x1b, 0xdc, 0x17, 0x63, 0xaf, 0x3f, 0xc5, 0x95, - 0xda, 0x96, 0xa1, 0x9a, 0xed, 0x65, 0xcb, 0x69, 0x07, 0x0f, 0x5e, 0x49, 0xc5, 0xe3, 0x86, 0x1e, - 0xbf, 0xda, 0xbb, 0xff, 0x37, 0x16, 0xfb, 0x6c, 0x3c, 0xb1, 0xda, 0xa8, 0x7c, 0x21, 0x3e, 0xbf, - 0xca, 0x80, 0x0d, 0xe1, 0x0c, 0x19, 0xef, 0x19, 0x58, 0x23, 0x1d, 0x84, 0xef, 0x3c, 0x01, 0x73, - 0x6d, 0xab, 0x6d, 0x51, 0xa6, 0x73, 0xe4, 0x17, 0x7f, 0x72, 0x9b, 0xf1, 0xa5, 0xf3, 0x23, 0x1f, - 0xf3, 0x96, 0x37, 0x61, 0x96, 0x2b, 0x2b, 0xf4, 0xd1, 0x11, 0xdb, 0xd8, 0xa0, 0x23, 0x4f, 0xd5, - 0x8a, 0xbf, 0xf4, 0x2d, 0xba, 0x7c, 0xcb, 0x33, 0x1c, 0x4a, 0xda, 0xd8, 0xde, 0xa7, 0x2c, 0xc3, - 0x89, 0x08, 0x1f, 0x9b, 0xa4, 0xd8, 0x19, 0xc1, 0xf8, 0x2f, 0x39, 0xe3, 0x6c, 0x88, 0xb1, 0xc9, - 0xa1, 0xe5, 0x2a, 0x4c, 0x1f, 0x87, 0xeb, 0x5f, 0x71, 0xae, 0x1c, 0x0e, 0x93, 0xac, 0x42, 0x81, - 0x92, 0x68, 0x5d, 0xd7, 0xb3, 0x3a, 0x34, 0x03, 0x1e, 0x4d, 0xf3, 0xaf, 0xbf, 0xc5, 0x66, 0x4d, - 0x9e, 0xc0, 0xaa, 0x3e, 0xaa, 0x5c, 0x06, 0xfa, 0xb4, 0xac, 0x85, 0x35, 0x63, 0x04, 0xc3, 0xd7, - 0xb8, 0x21, 0xbe, 0x7e, 0xf9, 0x3a, 0xcc, 0x91, 0xdf, 0x34, 0x41, 0x85, 0x2d, 0x19, 0x7d, 0x04, - 0x57, 0xfc, 0x8d, 0x8f, 0xb0, 0x89, 0x39, 0xeb, 0x13, 0x84, 0x6c, 0x0a, 0x8d, 0x62, 0x1b, 0x7b, - 0x1e, 0x76, 0x5c, 0x45, 0x35, 0x06, 0x99, 0x17, 0x3a, 0xc3, 0x28, 0xfe, 0xdc, 0x77, 0xa3, 0xa3, - 0xb8, 0xca, 0x90, 0x2b, 0x86, 0x51, 0xde, 0x81, 0x53, 0x03, 0xa2, 0x62, 0x0c, 0xce, 0x4f, 0x72, - 0xce, 0xb9, 0xbe, 0xc8, 0x20, 0xb4, 0x0d, 0x10, 0x72, 0x7f, 0x2c, 0xc7, 0xe0, 0xfc, 0x79, 0xce, - 0x89, 0x38, 0x56, 0x0c, 0x29, 0x61, 0xbc, 0x06, 0x33, 0x37, 0xb0, 0xb3, 0x6b, 0xb9, 0xfc, 0xdc, - 0x68, 0x0c, 0xba, 0x4f, 0x71, 0xba, 0x02, 0x07, 0xd2, 0x83, 0x24, 0xc2, 0x75, 0x19, 0xd2, 0x7b, - 0xaa, 0x86, 0xc7, 0xa0, 0xb8, 0xc3, 0x29, 0xa6, 0x88, 0x3e, 0x81, 0xae, 0x40, 0xae, 0x6d, 0xf1, - 0x35, 0x6a, 0x34, 0xfc, 0xd3, 0x1c, 0x9e, 0x15, 0x18, 0x4e, 0x61, 0x5b, 0x76, 0xd7, 0x20, 0x0b, - 0xd8, 0x68, 0x8a, 0xbf, 0x2e, 0x28, 0x04, 0x86, 0x53, 0x1c, 0xc3, 0xad, 0x6f, 0x0b, 0x0a, 0x37, - 0xe4, 0xcf, 0x17, 0x20, 0x6b, 0x99, 0xc6, 0xa1, 0x65, 0x8e, 0x63, 0xc4, 0x67, 0x38, 0x03, 0x70, - 0x08, 0x21, 0xb8, 0x02, 0x99, 0x71, 0x07, 0xe2, 0x6f, 0x7c, 0x57, 0x4c, 0x0f, 0x31, 0x02, 0xab, - 0x50, 0x10, 0x09, 0x4a, 0xb7, 0xcc, 0x31, 0x28, 0xfe, 0x26, 0xa7, 0xc8, 0x87, 0x60, 0xbc, 0x1b, - 0x1e, 0x76, 0xbd, 0x36, 0x1e, 0x87, 0xe4, 0xf3, 0xa2, 0x1b, 0x1c, 0xc2, 0x5d, 0xb9, 0x8b, 0x4d, - 0x6d, 0x7f, 0x3c, 0x86, 0x5f, 0x14, 0xae, 0x14, 0x18, 0x42, 0x51, 0x85, 0xe9, 0x8e, 0xea, 0xb8, - 0xfb, 0xaa, 0x31, 0xd6, 0x70, 0xfc, 0x2d, 0xce, 0x91, 0xf3, 0x41, 0xdc, 0x23, 0x5d, 0xf3, 0x38, - 0x34, 0x5f, 0x10, 0x1e, 0x09, 0xc1, 0xf8, 0xd4, 0x73, 0x3d, 0x7a, 0xc8, 0x76, 0x1c, 0xb6, 0xbf, - 0x2d, 0xa6, 0x1e, 0xc3, 0x6e, 0x84, 0x19, 0xaf, 0x40, 0xc6, 0xd5, 0xdf, 0x1c, 0x8b, 0xe6, 0x8b, - 0x62, 0xa4, 0x29, 0x80, 0x80, 0x5f, 0x83, 0xd3, 0x03, 0x97, 0x89, 0x31, 0xc8, 0xfe, 0x0e, 0x27, - 0x3b, 0x39, 0x60, 0xa9, 0xe0, 0x29, 0xe1, 0xb8, 0x94, 0x7f, 0x57, 0xa4, 0x04, 0xdc, 0xc3, 0xd5, - 0x20, 0xbb, 0x06, 0x57, 0xdd, 0x3b, 0x9e, 0xd7, 0xfe, 0x9e, 0xf0, 0x1a, 0xc3, 0x46, 0xbc, 0xb6, - 0x0d, 0x27, 0x39, 0xe3, 0xf1, 0xc6, 0xf5, 0xef, 0x8b, 0xc4, 0xca, 0xd0, 0x3b, 0xd1, 0xd1, 0xfd, - 0x51, 0x98, 0xf7, 0xdd, 0x29, 0xca, 0x53, 0x57, 0xe9, 0xa8, 0xf6, 0x18, 0xcc, 0xbf, 0xc4, 0x99, - 0x45, 0xc6, 0xf7, 0xeb, 0x5b, 0x77, 0x43, 0xb5, 0x09, 0xf9, 0xab, 0x50, 0x14, 0xe4, 0x5d, 0xd3, - 0xc1, 0x9a, 0xd5, 0x36, 0xf5, 0x37, 0x71, 0x6b, 0x0c, 0xea, 0x5f, 0xee, 0x19, 0xaa, 0x9d, 0x10, - 0x9c, 0x30, 0xaf, 0x81, 0xe4, 0xd7, 0x2a, 0x8a, 0xde, 0xb1, 0x2d, 0xc7, 0x1b, 0xc1, 0xf8, 0x25, - 0x31, 0x52, 0x3e, 0x6e, 0x8d, 0xc2, 0xca, 0x75, 0x60, 0x4f, 0x9e, 0xc7, 0x0d, 0xc9, 0x2f, 0x73, - 0xa2, 0xe9, 0x00, 0xc5, 0x13, 0x87, 0x66, 0x75, 0x6c, 0xd5, 0x19, 0x27, 0xff, 0xfd, 0x03, 0x91, - 0x38, 0x38, 0x84, 0x27, 0x0e, 0x52, 0xd1, 0x91, 0xd5, 0x7e, 0x0c, 0x86, 0xaf, 0x88, 0xc4, 0x21, - 0x30, 0x9c, 0x42, 0x14, 0x0c, 0x63, 0x50, 0xfc, 0x8a, 0xa0, 0x10, 0x18, 0x42, 0xf1, 0x72, 0xb0, - 0xd0, 0x3a, 0xb8, 0xad, 0xbb, 0x9e, 0xc3, 0x8a, 0xe2, 0xa3, 0xa9, 0xfe, 0xe1, 0x77, 0xa3, 0x45, - 0x98, 0x1c, 0x82, 0x92, 0x4c, 0xc4, 0x8f, 0x5d, 0xe9, 0x9e, 0x69, 0xb4, 0x61, 0xbf, 0x2a, 0x32, - 0x51, 0x08, 0x46, 0x6c, 0x0b, 0x55, 0x88, 0xc4, 0xed, 0x1a, 0xd9, 0x29, 0x8c, 0x41, 0xf7, 0x8f, - 0x7a, 0x8c, 0x6b, 0x0a, 0x2c, 0xe1, 0x0c, 0xd5, 0x3f, 0x5d, 0xf3, 0x00, 0x1f, 0x8e, 0x15, 0x9d, - 0xbf, 0xd6, 0x53, 0xff, 0xec, 0x30, 0x24, 0xcb, 0x21, 0x85, 0x9e, 0x7a, 0x0a, 0x8d, 0x7a, 0xcf, - 0xa8, 0xf8, 0x93, 0xef, 0xf1, 0xfe, 0x46, 0xcb, 0xa9, 0xf2, 0x3a, 0x09, 0xf2, 0x68, 0xd1, 0x33, - 0x9a, 0xec, 0x23, 0xef, 0xf9, 0x71, 0x1e, 0xa9, 0x79, 0xca, 0x57, 0x61, 0x3a, 0x52, 0xf0, 0x8c, - 0xa6, 0xfa, 0xb3, 0x9c, 0x2a, 0x17, 0xae, 0x77, 0xca, 0x17, 0x20, 0x49, 0x8a, 0x97, 0xd1, 0xf0, - 0x3f, 0xc7, 0xe1, 0x54, 0xbd, 0xfc, 0x21, 0x48, 0x8b, 0xa2, 0x65, 0x34, 0xf4, 0xcf, 0x73, 0xa8, - 0x0f, 0x21, 0x70, 0x51, 0xb0, 0x8c, 0x86, 0xff, 0x05, 0x01, 0x17, 0x10, 0x02, 0x1f, 0xdf, 0x85, - 0x5f, 0xfd, 0x8b, 0x49, 0xbe, 0xe8, 0x08, 0xdf, 0x5d, 0x81, 0x29, 0x5e, 0xa9, 0x8c, 0x46, 0x7f, - 0x8c, 0xdf, 0x5c, 0x20, 0xca, 0x97, 0x60, 0x72, 0x4c, 0x87, 0xff, 0x25, 0x0e, 0x65, 0xfa, 0xe5, - 0x2a, 0x64, 0x43, 0xd5, 0xc9, 0x68, 0xf8, 0x4f, 0x71, 0x78, 0x18, 0x45, 0x4c, 0xe7, 0xd5, 0xc9, - 0x68, 0x82, 0xbf, 0x2c, 0x4c, 0xe7, 0x08, 0xe2, 0x36, 0x51, 0x98, 0x8c, 0x46, 0x7f, 0x5c, 0x78, - 0x5d, 0x40, 0xca, 0x2f, 0x40, 0xc6, 0x5f, 0x6c, 0x46, 0xe3, 0x7f, 0x9a, 0xe3, 0x03, 0x0c, 0xf1, - 0x40, 0x68, 0xb1, 0x1b, 0x4d, 0xf1, 0x57, 0x84, 0x07, 0x42, 0x28, 0x32, 0x8d, 0x7a, 0x0b, 0x98, - 0xd1, 0x4c, 0x3f, 0x23, 0xa6, 0x51, 0x4f, 0xfd, 0x42, 0x46, 0x93, 0xe6, 0xfc, 0xd1, 0x14, 0x7f, - 0x55, 0x8c, 0x26, 0xd5, 0x27, 0x66, 0xf4, 0x56, 0x04, 0xa3, 0x39, 0x7e, 0x56, 0x98, 0xd1, 0x53, - 0x10, 0x94, 0x1b, 0x80, 0xfa, 0xab, 0x81, 0xd1, 0x7c, 0x9f, 0xe0, 0x7c, 0x33, 0x7d, 0xc5, 0x40, - 0xf9, 0x15, 0x38, 0x39, 0xb8, 0x12, 0x18, 0xcd, 0xfa, 0x73, 0xef, 0xf5, 0xec, 0xdd, 0xc2, 0x85, - 0x40, 0x79, 0x3b, 0x58, 0x52, 0xc2, 0x55, 0xc0, 0x68, 0xda, 0x4f, 0xbe, 0x17, 0x4d, 0xdc, 0xe1, - 0x22, 0xa0, 0xbc, 0x02, 0x10, 0x2c, 0xc0, 0xa3, 0xb9, 0x3e, 0xc5, 0xb9, 0x42, 0x20, 0x32, 0x35, - 0xf8, 0xfa, 0x3b, 0x1a, 0x7f, 0x47, 0x4c, 0x0d, 0x8e, 0x20, 0x53, 0x43, 0x2c, 0xbd, 0xa3, 0xd1, - 0x9f, 0x16, 0x53, 0x43, 0x40, 0x48, 0x64, 0x87, 0x56, 0xb7, 0xd1, 0x0c, 0x9f, 0x11, 0x91, 0x1d, - 0x42, 0x95, 0x37, 0x61, 0xa6, 0x6f, 0x41, 0x1c, 0x4d, 0xf5, 0x59, 0x4e, 0x25, 0xf5, 0xae, 0x87, - 0xe1, 0xc5, 0x8b, 0x2f, 0x86, 0xa3, 0xd9, 0x3e, 0xd7, 0xb3, 0x78, 0xf1, 0xb5, 0xb0, 0x7c, 0x05, - 0xd2, 0x66, 0xd7, 0x30, 0xc8, 0xe4, 0x41, 0x47, 0xbf, 0x1b, 0x58, 0xfc, 0x6f, 0xdf, 0xe7, 0xde, - 0x11, 0x80, 0xf2, 0x05, 0x98, 0xc4, 0x9d, 0x5d, 0xdc, 0x1a, 0x85, 0xfc, 0xce, 0xf7, 0x45, 0xc2, - 0x24, 0xda, 0xe5, 0x17, 0x00, 0xd8, 0xd1, 0x08, 0x7d, 0x18, 0x38, 0x02, 0xfb, 0xdf, 0xbf, 0xcf, - 0x5f, 0xc6, 0x09, 0x20, 0x01, 0x01, 0x7b, 0xb5, 0xe7, 0x68, 0x82, 0xef, 0x46, 0x09, 0xe8, 0x88, - 0x5c, 0x86, 0xa9, 0x37, 0x5c, 0xcb, 0xf4, 0xd4, 0xf6, 0x28, 0xf4, 0xff, 0xe0, 0x68, 0xa1, 0x4f, - 0x1c, 0xd6, 0xb1, 0x1c, 0xec, 0xa9, 0x6d, 0x77, 0x14, 0xf6, 0x7f, 0x72, 0xac, 0x0f, 0x20, 0x60, - 0x4d, 0x75, 0xbd, 0x71, 0xfa, 0xfd, 0x7b, 0x02, 0x2c, 0x00, 0xc4, 0x68, 0xf2, 0xfb, 0x00, 0x1f, - 0x8e, 0xc2, 0xfe, 0xbe, 0x30, 0x9a, 0xeb, 0x97, 0x3f, 0x04, 0x19, 0xf2, 0x93, 0xbd, 0x61, 0x37, - 0x02, 0xfc, 0xbf, 0x38, 0x38, 0x40, 0x90, 0x3b, 0xbb, 0x5e, 0xcb, 0xd3, 0x47, 0x3b, 0xfb, 0x7b, - 0x7c, 0xa4, 0x85, 0x7e, 0x79, 0x05, 0xb2, 0xae, 0xd7, 0x6a, 0x75, 0x79, 0x7d, 0x3a, 0x02, 0xfe, - 0xbf, 0xbf, 0xef, 0x1f, 0x59, 0xf8, 0x18, 0x32, 0xda, 0x37, 0x0f, 0x3c, 0xdb, 0xa2, 0x0f, 0x3c, - 0x46, 0x31, 0xbc, 0xc7, 0x19, 0x42, 0x90, 0x72, 0x15, 0x72, 0xa4, 0x2f, 0x0e, 0xb6, 0x31, 0x7d, - 0x3a, 0x35, 0x82, 0xe2, 0xff, 0x70, 0x07, 0x44, 0x40, 0x95, 0x1f, 0xfb, 0xda, 0xbb, 0x0b, 0xb1, - 0x6f, 0xbc, 0xbb, 0x10, 0xfb, 0xdd, 0x77, 0x17, 0x62, 0x1f, 0xff, 0xe6, 0xc2, 0xc4, 0x37, 0xbe, - 0xb9, 0x30, 0xf1, 0xdb, 0xdf, 0x5c, 0x98, 0x18, 0x7c, 0x4a, 0x0c, 0xab, 0xd6, 0xaa, 0xc5, 0xce, - 0x87, 0x5f, 0x2f, 0xb5, 0x75, 0x6f, 0xbf, 0xbb, 0xbb, 0xac, 0x59, 0x1d, 0x7a, 0x8c, 0x1b, 0x9c, - 0xd6, 0xfa, 0x9b, 0x1c, 0xf8, 0x41, 0x8c, 0x6c, 0x98, 0xa3, 0x67, 0xb9, 0xaa, 0x79, 0x38, 0xec, - 0x5b, 0x9d, 0x8b, 0x90, 0x58, 0x31, 0x0f, 0xd1, 0x69, 0x96, 0xdd, 0x94, 0xae, 0x63, 0xf0, 0x77, - 0xbc, 0xa6, 0xc8, 0xf5, 0x8e, 0x63, 0xa0, 0xb9, 0xe0, 0x45, 0xcc, 0xd8, 0xd9, 0x1c, 0x7f, 0xbb, - 0xb2, 0xf2, 0x53, 0xb1, 0xe3, 0x75, 0x23, 0xbd, 0x62, 0x1e, 0xd2, 0x5e, 0x34, 0x62, 0xaf, 0x3f, - 0x39, 0xf2, 0x90, 0xfb, 0xc0, 0xb4, 0x6e, 0x9a, 0xc4, 0x6c, 0x7b, 0x57, 0x1c, 0x70, 0x2f, 0xf4, - 0x1e, 0x70, 0xbf, 0x82, 0x0d, 0xe3, 0x25, 0xa2, 0xb7, 0x4d, 0x20, 0xbb, 0x29, 0xf6, 0x3a, 0x31, - 0xfc, 0x4c, 0x1c, 0x16, 0xfa, 0xce, 0xb2, 0x79, 0x04, 0x0c, 0x73, 0x42, 0x19, 0xd2, 0x35, 0x11, - 0x58, 0x45, 0x98, 0x72, 0xb1, 0x66, 0x99, 0x2d, 0x97, 0x3a, 0x22, 0x21, 0x8b, 0x4b, 0xe2, 0x08, - 0x53, 0x35, 0x2d, 0x97, 0xbf, 0x25, 0xc9, 0x2e, 0x2a, 0x3f, 0x7f, 0x4c, 0x47, 0x4c, 0x8b, 0x3b, - 0x09, 0x6f, 0x3c, 0x33, 0xa6, 0x37, 0x44, 0x27, 0x22, 0xc7, 0xfe, 0xe3, 0x7a, 0xe5, 0x67, 0xe3, - 0xb0, 0xd8, 0xeb, 0x15, 0x32, 0xad, 0x5c, 0x4f, 0xed, 0xd8, 0xc3, 0xdc, 0x72, 0x05, 0x32, 0xdb, - 0x42, 0xe7, 0xd8, 0x7e, 0xb9, 0x73, 0x4c, 0xbf, 0xe4, 0xfd, 0x5b, 0x09, 0xc7, 0x9c, 0x1f, 0xd3, - 0x31, 0x7e, 0x3f, 0xee, 0xca, 0x33, 0xff, 0x2f, 0x05, 0xa7, 0x35, 0xcb, 0xed, 0x58, 0xae, 0xc2, - 0x9e, 0x8f, 0xb0, 0x0b, 0xee, 0x93, 0x5c, 0xb8, 0x69, 0xf4, 0x43, 0x92, 0xd2, 0x4b, 0x30, 0xbb, - 0x46, 0x52, 0x05, 0xd9, 0x02, 0x05, 0x8f, 0x77, 0x06, 0xbe, 0x48, 0xba, 0x14, 0xa9, 0xf6, 0xf9, - 0xe3, 0xa5, 0xb0, 0xa8, 0xf4, 0x93, 0x31, 0x90, 0x9a, 0x9a, 0x6a, 0xa8, 0xce, 0x1f, 0x96, 0x0a, - 0x5d, 0x02, 0xa0, 0x1f, 0x20, 0x05, 0x5f, 0x0c, 0xe5, 0xcf, 0x17, 0x97, 0xc3, 0x9d, 0x5b, 0x66, - 0x77, 0xa2, 0x9f, 0x23, 0x64, 0xa8, 0x2e, 0xf9, 0xf9, 0xf8, 0xab, 0x00, 0x41, 0x03, 0xba, 0x0f, - 0x4e, 0x35, 0xab, 0x2b, 0xeb, 0x2b, 0xb2, 0xc2, 0xde, 0x6c, 0xdf, 0x6c, 0x36, 0xea, 0xd5, 0xb5, - 0xab, 0x6b, 0xf5, 0x9a, 0x34, 0x81, 0x4e, 0x02, 0x0a, 0x37, 0xfa, 0x2f, 0xa5, 0x9c, 0x80, 0x99, - 0xb0, 0x9c, 0xbd, 0x1e, 0x1f, 0x27, 0x65, 0xa2, 0xde, 0xb1, 0x0d, 0x4c, 0x9f, 0xfb, 0x29, 0xba, - 0xf0, 0xda, 0xe8, 0x0a, 0xe4, 0xd7, 0xff, 0x2d, 0x7b, 0x65, 0x7a, 0x36, 0x80, 0xfb, 0x3e, 0x2f, - 0xaf, 0xc3, 0x8c, 0xaa, 0x69, 0xd8, 0x8e, 0x50, 0x8e, 0xc8, 0xd3, 0x84, 0x90, 0x3e, 0xc9, 0xe4, - 0xc8, 0x80, 0xed, 0x12, 0xa4, 0x5c, 0xda, 0xfb, 0x51, 0x14, 0x5f, 0xe7, 0x14, 0x5c, 0xbd, 0x6c, - 0xc2, 0x0c, 0x29, 0xfb, 0x54, 0x07, 0x87, 0xcc, 0x38, 0xfa, 0x90, 0xe1, 0x1f, 0x7f, 0xe9, 0x69, - 0xfa, 0x5c, 0xf3, 0xc1, 0xe8, 0xb0, 0x0c, 0x08, 0x27, 0x59, 0xe2, 0xdc, 0x81, 0xa1, 0x18, 0xf2, - 0xe2, 0x7e, 0xdc, 0xe0, 0xa3, 0x6f, 0xf6, 0x4f, 0xf8, 0xcd, 0x16, 0x06, 0xc5, 0x40, 0xe8, 0x4e, - 0xd3, 0x9c, 0x95, 0x35, 0x54, 0xea, 0xc3, 0xe6, 0xf4, 0xeb, 0x4f, 0x84, 0x96, 0x26, 0x46, 0xc9, - 0xff, 0x3c, 0x45, 0x99, 0xaf, 0x84, 0x6f, 0xe3, 0xcf, 0xbd, 0xdf, 0x4a, 0xc0, 0x02, 0x57, 0xde, - 0x55, 0x5d, 0x7c, 0xee, 0xc6, 0x33, 0xbb, 0xd8, 0x53, 0x9f, 0x39, 0xa7, 0x59, 0xba, 0xc8, 0xd5, - 0xb3, 0x7c, 0x3a, 0x92, 0xf6, 0x65, 0xde, 0x3e, 0x3f, 0xf0, 0x69, 0xe6, 0xfc, 0xf0, 0x69, 0x5c, - 0xda, 0x81, 0x64, 0xd5, 0xd2, 0x4d, 0x92, 0xaa, 0x5a, 0xd8, 0xb4, 0x3a, 0x7c, 0xf6, 0xb0, 0x0b, - 0xf4, 0x0c, 0xa4, 0xd4, 0x8e, 0xd5, 0x35, 0x3d, 0x36, 0x73, 0x2a, 0xa7, 0xbf, 0xf6, 0xce, 0xe2, - 0xc4, 0xbf, 0x7b, 0x67, 0x31, 0xb1, 0x66, 0x7a, 0xbf, 0xf9, 0xe5, 0xa7, 0x80, 0x53, 0xad, 0x99, - 0x9e, 0xcc, 0x15, 0xcb, 0xc9, 0x6f, 0xbf, 0xbd, 0x18, 0x2b, 0xbd, 0x0a, 0x53, 0x35, 0xac, 0xdd, - 0x0d, 0x73, 0x0d, 0x6b, 0x21, 0xe6, 0x1a, 0xd6, 0x7a, 0x98, 0x2f, 0x41, 0x7a, 0xcd, 0xf4, 0xd8, - 0x5b, 0xe8, 0x4f, 0x40, 0x42, 0x37, 0xd9, 0x8b, 0x8d, 0x47, 0xda, 0x46, 0xb4, 0x08, 0xb0, 0x86, - 0x35, 0x1f, 0xd8, 0xc2, 0x5a, 0x2f, 0xb0, 0xff, 0xd6, 0x44, 0xab, 0x52, 0xfb, 0xed, 0xff, 0xbc, - 0x30, 0xf1, 0xd6, 0xbb, 0x0b, 0x13, 0x43, 0x87, 0xb8, 0x34, 0x74, 0x88, 0xdd, 0xd6, 0x01, 0xcb, - 0xc8, 0xfe, 0xc8, 0x7e, 0x21, 0x09, 0x0f, 0xd0, 0x8f, 0x93, 0x9c, 0x8e, 0x6e, 0x7a, 0xe7, 0x34, - 0xe7, 0xd0, 0xf6, 0x68, 0xb9, 0x62, 0xed, 0xf1, 0x81, 0x9d, 0x09, 0x9a, 0x97, 0x59, 0xf3, 0xe0, - 0x61, 0x2d, 0xed, 0xc1, 0x64, 0x83, 0xe0, 0x88, 0x8b, 0x3d, 0xcb, 0x53, 0x0d, 0xbe, 0xfe, 0xb0, - 0x0b, 0x22, 0x65, 0x1f, 0x34, 0xc5, 0x99, 0x54, 0x17, 0xdf, 0x32, 0x19, 0x58, 0xdd, 0x63, 0xef, - 0x85, 0x27, 0x68, 0xe1, 0x92, 0x26, 0x02, 0xfa, 0x0a, 0xf8, 0x1c, 0x4c, 0xaa, 0x5d, 0xf6, 0x02, - 0x43, 0x82, 0x54, 0x34, 0xf4, 0xa2, 0xf4, 0x12, 0x4c, 0xf1, 0xc7, 0xa8, 0x48, 0x82, 0xc4, 0x01, - 0x3e, 0xa4, 0xf7, 0xc9, 0xc9, 0xe4, 0x27, 0x5a, 0x86, 0x49, 0x6a, 0x3c, 0xff, 0xe0, 0xa5, 0xb8, - 0xdc, 0x67, 0xfd, 0x32, 0x35, 0x52, 0x66, 0x6a, 0xa5, 0x6b, 0x90, 0xae, 0x59, 0x1d, 0xdd, 0xb4, - 0xa2, 0x6c, 0x19, 0xc6, 0x46, 0x6d, 0xb6, 0xbb, 0x3c, 0x2a, 0x64, 0x76, 0x81, 0x4e, 0x42, 0x8a, - 0x7d, 0x27, 0xc0, 0x5f, 0xc2, 0xe0, 0x57, 0xa5, 0x2a, 0x4c, 0x51, 0xee, 0x2d, 0x9b, 0x24, 0x7f, - 0xff, 0x95, 0xcc, 0x0c, 0xff, 0x6a, 0x8c, 0xd3, 0xc7, 0x03, 0x63, 0x11, 0x24, 0x5b, 0xaa, 0xa7, - 0xf2, 0x7e, 0xd3, 0xdf, 0xa5, 0x0f, 0x43, 0x9a, 0x93, 0xb8, 0xe8, 0x3c, 0x24, 0x2c, 0xdb, 0xe5, - 0xaf, 0x51, 0xcc, 0x0f, 0xeb, 0xca, 0x96, 0x5d, 0x49, 0x92, 0x98, 0x91, 0x89, 0x72, 0x45, 0x1e, - 0x1a, 0x16, 0xcf, 0x87, 0xc2, 0x22, 0x34, 0xe4, 0xa1, 0x9f, 0x6c, 0x48, 0xfb, 0xc2, 0xc1, 0x0f, - 0x96, 0xcf, 0xc4, 0x61, 0x21, 0xd4, 0x7a, 0x03, 0x3b, 0xae, 0x6e, 0x99, 0x2c, 0xa2, 0x78, 0xb4, - 0xa0, 0x90, 0x91, 0xbc, 0x7d, 0x48, 0xb8, 0x7c, 0x08, 0x12, 0x2b, 0xb6, 0x8d, 0xe6, 0x21, 0x4d, - 0xaf, 0x35, 0x8b, 0xc5, 0x4b, 0x52, 0xf6, 0xaf, 0x49, 0x9b, 0x6b, 0xed, 0x79, 0x37, 0x55, 0xc7, - 0xff, 0x94, 0x4e, 0x5c, 0x97, 0x2e, 0x43, 0xa6, 0x6a, 0x99, 0x2e, 0x36, 0xdd, 0x2e, 0xad, 0x6c, - 0x76, 0x0d, 0x4b, 0x3b, 0xe0, 0x0c, 0xec, 0x82, 0x38, 0x5c, 0xb5, 0x6d, 0x8a, 0x4c, 0xca, 0xe4, - 0x27, 0x9b, 0xb3, 0x95, 0xe6, 0x50, 0x17, 0x5d, 0x3e, 0xbe, 0x8b, 0x78, 0x27, 0x7d, 0x1f, 0xfd, - 0x20, 0x06, 0xf7, 0xf7, 0x4f, 0xa8, 0x03, 0x7c, 0xe8, 0x1e, 0x77, 0x3e, 0xbd, 0x0a, 0x99, 0x06, - 0xfd, 0x9e, 0xfd, 0x25, 0x7c, 0x88, 0xe6, 0x61, 0x0a, 0xb7, 0xce, 0x5f, 0xb8, 0xf0, 0xcc, 0x65, - 0x16, 0xed, 0x2f, 0x4e, 0xc8, 0x42, 0x80, 0x16, 0x20, 0xe3, 0x62, 0xcd, 0x3e, 0x7f, 0xe1, 0xe2, - 0xc1, 0x33, 0x2c, 0xbc, 0x5e, 0x9c, 0x90, 0x03, 0x51, 0x39, 0x4d, 0x7a, 0xfd, 0xed, 0xcf, 0x2c, - 0xc6, 0x2a, 0x93, 0x90, 0x70, 0xbb, 0x9d, 0xf7, 0x35, 0x46, 0x3e, 0x39, 0x09, 0x4b, 0x61, 0x24, - 0xad, 0xff, 0x6e, 0xa8, 0x86, 0xde, 0x52, 0x83, 0xff, 0x44, 0x20, 0x85, 0x7c, 0x40, 0x35, 0x86, - 0xac, 0x14, 0x47, 0x7a, 0xb2, 0xf4, 0xcb, 0x31, 0xc8, 0x5d, 0x17, 0xcc, 0x4d, 0xec, 0xa1, 0x2b, - 0x00, 0xfe, 0x9d, 0xc4, 0xb4, 0xb9, 0x6f, 0xb9, 0xf7, 0x5e, 0xcb, 0x3e, 0x46, 0x0e, 0xa9, 0xa3, - 0x4b, 0x34, 0x10, 0x6d, 0xcb, 0xe5, 0x9f, 0x57, 0x8d, 0x80, 0xfa, 0xca, 0xe8, 0x49, 0x40, 0x34, - 0xc3, 0x29, 0x37, 0x2c, 0x4f, 0x37, 0xdb, 0x8a, 0x6d, 0xdd, 0xe4, 0x1f, 0xad, 0x26, 0x64, 0x89, - 0xb6, 0x5c, 0xa7, 0x0d, 0x0d, 0x22, 0x27, 0x46, 0x67, 0x7c, 0x16, 0x52, 0xac, 0xab, 0xad, 0x96, - 0x83, 0x5d, 0x97, 0x27, 0x31, 0x71, 0x89, 0xae, 0xc0, 0x94, 0xdd, 0xdd, 0x55, 0x44, 0xc6, 0xc8, - 0x9e, 0xbf, 0x7f, 0xd0, 0xfc, 0x17, 0xf1, 0xc1, 0x33, 0x40, 0xca, 0xee, 0xee, 0x92, 0x68, 0x79, - 0x10, 0x72, 0x03, 0x8c, 0xc9, 0xde, 0x08, 0xec, 0xa0, 0xff, 0x46, 0x81, 0xf7, 0x40, 0xb1, 0x1d, - 0xdd, 0x72, 0x74, 0xef, 0x90, 0xbe, 0x0b, 0x95, 0x90, 0x25, 0xd1, 0xd0, 0xe0, 0xf2, 0xd2, 0x01, - 0x14, 0x9a, 0xb4, 0x88, 0x0b, 0x2c, 0xbf, 0x10, 0xd8, 0x17, 0x1b, 0x6d, 0xdf, 0x50, 0xcb, 0xe2, - 0x7d, 0x96, 0x55, 0x5e, 0x1e, 0x1a, 0x9d, 0x97, 0x8e, 0x1f, 0x9d, 0xd1, 0xd5, 0xee, 0xf7, 0x4e, - 0x47, 0x26, 0x27, 0x0b, 0xce, 0x70, 0xfa, 0x1a, 0x37, 0x30, 0x47, 0xed, 0xd1, 0xe6, 0x8f, 0x5e, - 0x54, 0xe7, 0x47, 0xa4, 0xd1, 0xf9, 0x91, 0x53, 0xa8, 0x74, 0x19, 0xa6, 0x1b, 0xaa, 0xe3, 0x35, - 0xb1, 0xf7, 0x22, 0x56, 0x5b, 0xd8, 0x89, 0xae, 0xba, 0xd3, 0x62, 0xd5, 0x45, 0x90, 0xa4, 0x4b, - 0x2b, 0x5b, 0x75, 0xe8, 0xef, 0xd2, 0x3e, 0x24, 0xe9, 0xfb, 0x90, 0xfe, 0x8a, 0xcc, 0x11, 0x6c, - 0x45, 0x26, 0xb9, 0xf4, 0xd0, 0xc3, 0xae, 0x38, 0x46, 0xa0, 0x17, 0xe8, 0x39, 0xb1, 0xae, 0x26, - 0x8e, 0x5e, 0x57, 0x79, 0x20, 0xf2, 0xd5, 0xd5, 0x80, 0xa9, 0x0a, 0x49, 0xc5, 0x6b, 0x35, 0xdf, - 0x90, 0x58, 0x60, 0x08, 0xda, 0x80, 0x82, 0xad, 0x3a, 0x1e, 0xfd, 0x34, 0x64, 0x9f, 0xf6, 0x82, - 0xc7, 0xfa, 0x62, 0xff, 0xcc, 0x8b, 0x74, 0x96, 0xdf, 0x65, 0xda, 0x0e, 0x0b, 0x4b, 0xff, 0x25, - 0x09, 0x29, 0xee, 0x8c, 0x0f, 0xc1, 0x14, 0x77, 0x2b, 0x8f, 0xce, 0x07, 0x96, 0xfb, 0x17, 0xa6, - 0x65, 0x7f, 0x01, 0xe1, 0x7c, 0x02, 0x83, 0x1e, 0x85, 0xb4, 0xb6, 0xaf, 0xea, 0xa6, 0xa2, 0xb7, - 0x78, 0x41, 0x98, 0x7d, 0xf7, 0x9d, 0xc5, 0xa9, 0x2a, 0x91, 0xad, 0xd5, 0xe4, 0x29, 0xda, 0xb8, - 0xd6, 0x22, 0x95, 0xc0, 0x3e, 0xd6, 0xdb, 0xfb, 0x1e, 0x9f, 0x61, 0xfc, 0x0a, 0x3d, 0x0f, 0x49, - 0x12, 0x10, 0xfc, 0xc3, 0xc1, 0xf9, 0xbe, 0x0a, 0xdf, 0xdf, 0x42, 0x57, 0xd2, 0xe4, 0xc6, 0x1f, - 0xff, 0x4f, 0x8b, 0x31, 0x99, 0x22, 0x50, 0x15, 0xa6, 0x0d, 0xd5, 0xf5, 0x14, 0xba, 0x82, 0x91, - 0xdb, 0x4f, 0x52, 0x8a, 0xd3, 0xfd, 0x0e, 0xe1, 0x8e, 0xe5, 0xa6, 0x67, 0x09, 0x8a, 0x89, 0x5a, - 0xe8, 0x2c, 0x48, 0x94, 0x44, 0xb3, 0x3a, 0x1d, 0xdd, 0x63, 0xb5, 0x55, 0x8a, 0xfa, 0x3d, 0x4f, - 0xe4, 0x55, 0x2a, 0xa6, 0x15, 0xd6, 0x7d, 0x90, 0xa1, 0x9f, 0x2a, 0x51, 0x15, 0xf6, 0x12, 0x6e, - 0x9a, 0x08, 0x68, 0xe3, 0x19, 0x28, 0x04, 0xf9, 0x91, 0xa9, 0xa4, 0x19, 0x4b, 0x20, 0xa6, 0x8a, - 0x4f, 0xc3, 0x9c, 0x89, 0x6f, 0xd1, 0xd7, 0x82, 0x23, 0xda, 0x19, 0xaa, 0x8d, 0x48, 0xdb, 0xf5, - 0x28, 0xe2, 0x11, 0xc8, 0x6b, 0xc2, 0xf9, 0x4c, 0x17, 0xa8, 0xee, 0xb4, 0x2f, 0xa5, 0x6a, 0xa7, - 0x21, 0xad, 0xda, 0x36, 0x53, 0xc8, 0xf2, 0xfc, 0x68, 0xdb, 0xb4, 0xe9, 0x71, 0x98, 0xa1, 0x7d, - 0x74, 0xb0, 0xdb, 0x35, 0x3c, 0x4e, 0x92, 0xa3, 0x3a, 0x05, 0xd2, 0x20, 0x33, 0x39, 0xd5, 0x7d, - 0x08, 0xa6, 0xf1, 0x0d, 0xbd, 0x85, 0x4d, 0x0d, 0x33, 0xbd, 0x69, 0xaa, 0x97, 0x13, 0x42, 0xaa, - 0xf4, 0x18, 0xf8, 0x79, 0x4f, 0x11, 0x39, 0x39, 0xcf, 0xf8, 0x84, 0x7c, 0x85, 0x89, 0x4b, 0x45, - 0x48, 0xd6, 0x54, 0x4f, 0x25, 0x05, 0x86, 0x77, 0x8b, 0x2d, 0x34, 0x39, 0x99, 0xfc, 0x2c, 0x7d, - 0x3b, 0x0e, 0xc9, 0xeb, 0x96, 0x87, 0xd1, 0xb3, 0xa1, 0x02, 0x30, 0x3f, 0x28, 0x9e, 0x9b, 0x7a, - 0xdb, 0xc4, 0xad, 0x0d, 0xb7, 0x1d, 0xfa, 0xbf, 0x02, 0x41, 0x38, 0xc5, 0x23, 0xe1, 0x34, 0x07, - 0x93, 0x8e, 0xd5, 0x35, 0x5b, 0xe2, 0xfd, 0x55, 0x7a, 0x81, 0xea, 0x90, 0xf6, 0xa3, 0x24, 0x39, - 0x2a, 0x4a, 0x0a, 0x24, 0x4a, 0x48, 0x0c, 0x73, 0x81, 0x3c, 0xb5, 0xcb, 0x83, 0xa5, 0x02, 0x19, - 0x3f, 0x79, 0xf1, 0x68, 0x1b, 0x2f, 0x60, 0x03, 0x18, 0x59, 0x4c, 0xfc, 0xb1, 0xf7, 0x9d, 0xc7, - 0x22, 0x4e, 0xf2, 0x1b, 0xb8, 0xf7, 0x22, 0x61, 0xc5, 0xff, 0xc7, 0xc1, 0x14, 0xed, 0x57, 0x10, - 0x56, 0xec, 0xff, 0x1c, 0xdc, 0x0f, 0x19, 0x57, 0x6f, 0x9b, 0xaa, 0xd7, 0x75, 0x30, 0x8f, 0xbc, - 0x40, 0x50, 0xfa, 0x6a, 0x0c, 0x52, 0x2c, 0x92, 0x43, 0x7e, 0x8b, 0x0d, 0xf6, 0x5b, 0x7c, 0x98, - 0xdf, 0x12, 0x77, 0xef, 0xb7, 0x15, 0x00, 0xdf, 0x18, 0x97, 0x7f, 0x7a, 0x3e, 0xa0, 0x62, 0x60, - 0x26, 0x36, 0xf5, 0x36, 0x9f, 0xa8, 0x21, 0x50, 0xe9, 0x3f, 0xc6, 0x48, 0x11, 0xcb, 0xdb, 0xd1, - 0x0a, 0x4c, 0x0b, 0xbb, 0x94, 0x3d, 0x43, 0x6d, 0xf3, 0xd8, 0x79, 0x60, 0xa8, 0x71, 0x57, 0x0d, - 0xb5, 0x2d, 0x67, 0xb9, 0x3d, 0xe4, 0x62, 0xf0, 0x38, 0xc4, 0x87, 0x8c, 0x43, 0x64, 0xe0, 0x13, - 0x77, 0x37, 0xf0, 0x91, 0x21, 0x4a, 0xf6, 0x0e, 0xd1, 0x97, 0xe2, 0x74, 0x33, 0x63, 0x5b, 0xae, - 0x6a, 0x7c, 0x10, 0x33, 0xe2, 0x3e, 0xc8, 0xd8, 0x96, 0xa1, 0xb0, 0x16, 0xf6, 0x5e, 0x77, 0xda, - 0xb6, 0x0c, 0xb9, 0x6f, 0xd8, 0x27, 0xef, 0xd1, 0x74, 0x49, 0xdd, 0x03, 0xaf, 0x4d, 0xf5, 0x7a, - 0xcd, 0x81, 0x1c, 0x73, 0x05, 0x5f, 0xcb, 0x9e, 0x26, 0x3e, 0xa0, 0x8b, 0x63, 0xac, 0x7f, 0xed, - 0x65, 0x66, 0x33, 0x4d, 0x99, 0xeb, 0x11, 0x04, 0x4b, 0xfd, 0x83, 0x76, 0xc1, 0xe1, 0xb0, 0x94, - 0xb9, 0x5e, 0xe9, 0xaf, 0xc5, 0x00, 0xd6, 0x89, 0x67, 0x69, 0x7f, 0xc9, 0x2a, 0xe4, 0x52, 0x13, - 0x94, 0xc8, 0x9d, 0x17, 0x86, 0x0d, 0x1a, 0xbf, 0x7f, 0xce, 0x0d, 0xdb, 0x5d, 0x85, 0xe9, 0x20, - 0x18, 0x5d, 0x2c, 0x8c, 0x59, 0x38, 0xa2, 0xaa, 0x6e, 0x62, 0x4f, 0xce, 0xdd, 0x08, 0x5d, 0x95, - 0xfe, 0x79, 0x0c, 0x32, 0xd4, 0xa6, 0x0d, 0xec, 0xa9, 0x91, 0x31, 0x8c, 0xdd, 0xfd, 0x18, 0x3e, - 0x00, 0xc0, 0x68, 0x5c, 0xfd, 0x4d, 0xcc, 0x23, 0x2b, 0x43, 0x25, 0x4d, 0xfd, 0x4d, 0x8c, 0x2e, - 0xfa, 0x0e, 0x4f, 0x1c, 0xed, 0x70, 0x51, 0x75, 0x73, 0xb7, 0x9f, 0x82, 0x29, 0xfa, 0xaf, 0x9a, - 0x6e, 0xb9, 0xbc, 0x90, 0x4e, 0x99, 0xdd, 0xce, 0xf6, 0x2d, 0xb7, 0xf4, 0x06, 0x4c, 0x6d, 0xdf, - 0x62, 0x67, 0x23, 0xf7, 0x41, 0xc6, 0xb1, 0x2c, 0xbe, 0x26, 0xb3, 0x5a, 0x28, 0x4d, 0x04, 0x74, - 0x09, 0x12, 0xe7, 0x01, 0xf1, 0xe0, 0x3c, 0x20, 0x38, 0xd0, 0x48, 0x8c, 0x75, 0xa0, 0xf1, 0xf8, - 0x6f, 0xc5, 0x20, 0x1b, 0xca, 0x0f, 0xe8, 0x19, 0x38, 0x51, 0x59, 0xdf, 0xaa, 0xbe, 0xa4, 0xac, - 0xd5, 0x94, 0xab, 0xeb, 0x2b, 0xab, 0xc1, 0x97, 0x4b, 0xf3, 0x27, 0x6f, 0xdf, 0x59, 0x42, 0x21, - 0xdd, 0x1d, 0x93, 0x9e, 0xd3, 0xa3, 0x73, 0x30, 0x17, 0x85, 0xac, 0x54, 0x9a, 0xf5, 0xcd, 0x6d, - 0x29, 0x36, 0x7f, 0xe2, 0xf6, 0x9d, 0xa5, 0x99, 0x10, 0x62, 0x65, 0xd7, 0xc5, 0xa6, 0xd7, 0x0f, - 0xa8, 0x6e, 0x6d, 0x6c, 0xac, 0x6d, 0x4b, 0xf1, 0x3e, 0x00, 0x4f, 0xd8, 0x8f, 0xc1, 0x4c, 0x14, - 0xb0, 0xb9, 0xb6, 0x2e, 0x25, 0xe6, 0xd1, 0xed, 0x3b, 0x4b, 0xf9, 0x90, 0xf6, 0xa6, 0x6e, 0xcc, - 0xa7, 0x3f, 0xfa, 0xb9, 0x85, 0x89, 0x5f, 0xfc, 0x85, 0x85, 0x18, 0xe9, 0xd9, 0x74, 0x24, 0x47, - 0xa0, 0x27, 0xe1, 0x54, 0x73, 0x6d, 0x75, 0xb3, 0x5e, 0x53, 0x36, 0x9a, 0xab, 0xe2, 0xa4, 0x5b, - 0xf4, 0xae, 0x70, 0xfb, 0xce, 0x52, 0x96, 0x77, 0x69, 0x98, 0x76, 0x43, 0xae, 0x5f, 0xdf, 0xda, - 0xae, 0x4b, 0x31, 0xa6, 0xdd, 0x70, 0xf0, 0x0d, 0xcb, 0x63, 0xff, 0xcb, 0xed, 0x69, 0x38, 0x3d, - 0x40, 0xdb, 0xef, 0xd8, 0xcc, 0xed, 0x3b, 0x4b, 0xd3, 0x0d, 0x07, 0xb3, 0xf9, 0x43, 0x11, 0xcb, - 0x50, 0xec, 0x47, 0x6c, 0x35, 0xb6, 0x9a, 0x2b, 0xeb, 0xd2, 0xd2, 0xbc, 0x74, 0xfb, 0xce, 0x52, - 0x4e, 0x24, 0x43, 0xa2, 0x1f, 0xf4, 0xec, 0xfd, 0xdc, 0xf1, 0x7c, 0x76, 0x19, 0x1e, 0xe6, 0x67, - 0x80, 0xae, 0xa7, 0x1e, 0xe8, 0x66, 0xdb, 0x3f, 0xbc, 0xe5, 0xd7, 0x7c, 0xe7, 0x73, 0x92, 0x9f, - 0x33, 0x0a, 0xe9, 0x88, 0x23, 0xdc, 0xa1, 0x4f, 0x2e, 0xe7, 0x47, 0x3c, 0xd4, 0x1b, 0xbd, 0x75, - 0x1a, 0x7e, 0x3c, 0x3c, 0x3f, 0xe2, 0x10, 0x7a, 0xfe, 0xc8, 0xcd, 0x5d, 0xe9, 0x63, 0x31, 0xc8, - 0xbf, 0xa8, 0xbb, 0x9e, 0xe5, 0xe8, 0x9a, 0x6a, 0xd0, 0xef, 0x95, 0x2e, 0x8e, 0x9b, 0x5b, 0x7b, - 0xa6, 0xfa, 0x0b, 0x90, 0xba, 0xa1, 0x1a, 0x2c, 0xa9, 0x85, 0x9f, 0x05, 0xf4, 0xba, 0x2f, 0x48, - 0x6d, 0x82, 0x80, 0xc1, 0x4a, 0xbf, 0x12, 0x87, 0xd3, 0x64, 0xfb, 0xd1, 0xa0, 0xdb, 0x62, 0x99, - 0x7f, 0xe2, 0xc4, 0xac, 0x3b, 0x44, 0x55, 0x90, 0x2c, 0x1b, 0x3b, 0x91, 0x65, 0x9c, 0x9d, 0x0e, - 0x17, 0x7f, 0xf3, 0xcb, 0x4f, 0xcd, 0xf1, 0x7b, 0xf1, 0x85, 0x9c, 0xbd, 0x48, 0x28, 0x17, 0x04, - 0x42, 0xac, 0xef, 0xd7, 0xa1, 0x60, 0x19, 0x2d, 0x85, 0x54, 0xd4, 0x8a, 0xdd, 0xdd, 0x0d, 0x4e, - 0x12, 0xe6, 0xfa, 0xd6, 0xab, 0x15, 0xf3, 0xb0, 0x52, 0xfc, 0x7a, 0xc0, 0x1c, 0x6c, 0xdf, 0x89, - 0x71, 0xd3, 0x96, 0xd1, 0xe2, 0xb6, 0x1e, 0xe0, 0x43, 0xc2, 0x6b, 0xe2, 0x9b, 0x11, 0xde, 0xc4, - 0xdd, 0xf1, 0x9a, 0xf8, 0x66, 0x88, 0xf7, 0x11, 0xc8, 0x3b, 0xc4, 0x0f, 0x74, 0xd5, 0xa1, 0x6b, - 0x3e, 0xcb, 0xa2, 0xd3, 0x5c, 0xfa, 0x22, 0x15, 0x96, 0xbe, 0x18, 0x87, 0x02, 0x4d, 0x23, 0x2e, - 0xfb, 0x27, 0x66, 0x64, 0x77, 0xda, 0x80, 0xa4, 0xa3, 0x7a, 0xfc, 0xb8, 0xb5, 0xf2, 0x23, 0xfc, - 0x04, 0xfd, 0xd1, 0xd1, 0xe7, 0xe0, 0xcb, 0xfd, 0x87, 0xec, 0x94, 0x09, 0xbd, 0x02, 0xe9, 0x8e, - 0x7a, 0x4b, 0xa1, 0xac, 0xf1, 0x7b, 0xc0, 0x3a, 0xd5, 0x51, 0x6f, 0x11, 0x5b, 0x51, 0x0b, 0x0a, - 0x84, 0x58, 0xdb, 0x57, 0xcd, 0x36, 0x66, 0xfc, 0x89, 0x7b, 0xc0, 0x3f, 0xdd, 0x51, 0x6f, 0x55, - 0x29, 0x27, 0xb9, 0x4b, 0x39, 0xfd, 0x89, 0xb7, 0x17, 0x27, 0xe8, 0x03, 0x8a, 0x5f, 0x8b, 0x01, - 0x04, 0xee, 0x42, 0x7f, 0x12, 0x24, 0xcd, 0xbf, 0xa2, 0xb7, 0x77, 0x79, 0xe8, 0x9f, 0x19, 0x16, - 0xc2, 0x3d, 0xce, 0x66, 0x25, 0xcd, 0x37, 0xde, 0x59, 0x8c, 0xc9, 0x05, 0xad, 0x67, 0x1c, 0xea, - 0x90, 0xed, 0xda, 0x2d, 0xd5, 0xc3, 0x0a, 0xdd, 0xfe, 0xc6, 0x8f, 0x51, 0x1e, 0x01, 0x03, 0x92, - 0xa6, 0x90, 0xf5, 0x5f, 0x8c, 0x41, 0xb6, 0x16, 0x7a, 0x3c, 0x5a, 0x84, 0xa9, 0x8e, 0x65, 0xea, - 0x07, 0x7c, 0xc2, 0x66, 0x64, 0x71, 0x89, 0xe6, 0x21, 0xcd, 0xbe, 0x71, 0xf5, 0x0e, 0xc5, 0x59, - 0xb1, 0xb8, 0x26, 0xa8, 0x9b, 0x78, 0xd7, 0xd5, 0x85, 0xaf, 0x65, 0x71, 0x49, 0x36, 0x7d, 0x2e, - 0xd6, 0xba, 0x8e, 0xee, 0x1d, 0x92, 0x80, 0xf6, 0x54, 0xcd, 0xe3, 0x5f, 0x4b, 0x16, 0x84, 0xbc, - 0xca, 0xc4, 0x84, 0xa4, 0x85, 0x3d, 0x55, 0x37, 0xdc, 0x22, 0x7b, 0x84, 0x28, 0x2e, 0x43, 0xe6, - 0xfe, 0x7a, 0x2a, 0x7c, 0xb8, 0x77, 0x4f, 0x66, 0xf1, 0x6b, 0x64, 0xc0, 0xc4, 0x4e, 0xf9, 0x0f, - 0x35, 0x8d, 0x0b, 0x3e, 0x0f, 0x9f, 0x70, 0x27, 0x21, 0xf5, 0x86, 0xaa, 0x1b, 0xe2, 0xd3, 0x7d, - 0x99, 0x5f, 0xa1, 0x32, 0xa4, 0x5c, 0x4f, 0xf5, 0xba, 0x2e, 0xff, 0x17, 0x7b, 0xa5, 0x61, 0x91, - 0x51, 0xb1, 0xcc, 0x56, 0x93, 0x6a, 0xca, 0x1c, 0x81, 0xb6, 0x21, 0xe5, 0x59, 0x07, 0xd8, 0xe4, - 0x4e, 0x3a, 0x56, 0x54, 0x0f, 0x78, 0x8a, 0xc7, 0xb8, 0x50, 0x1b, 0xa4, 0x16, 0x36, 0x70, 0x9b, - 0x95, 0x92, 0xfb, 0x2a, 0xd9, 0x71, 0xa5, 0xee, 0xc1, 0xac, 0x29, 0xf8, 0xac, 0x4d, 0x4a, 0x8a, - 0x5e, 0x8a, 0x3e, 0xa0, 0x67, 0xff, 0x8f, 0xf2, 0xa1, 0x61, 0xfd, 0x0f, 0x45, 0xa6, 0x38, 0x86, - 0x09, 0x3f, 0xcb, 0x7f, 0x0c, 0xa4, 0xae, 0xb9, 0x6b, 0x99, 0xf4, 0x03, 0x5b, 0x9e, 0xd2, 0xd2, - 0x34, 0xa5, 0x15, 0x7c, 0x39, 0x4b, 0x6a, 0xe8, 0x25, 0xc8, 0x07, 0xaa, 0x74, 0xee, 0x64, 0x8e, - 0x31, 0x77, 0xa6, 0x7d, 0x2c, 0x69, 0x45, 0x2f, 0x02, 0x04, 0x13, 0x93, 0x1e, 0xac, 0x64, 0x87, - 0x8f, 0x61, 0x30, 0xbb, 0xc5, 0x06, 0x35, 0xc0, 0x22, 0x03, 0x66, 0x3b, 0xba, 0xa9, 0xb8, 0xd8, - 0xd8, 0x53, 0xb8, 0xab, 0x08, 0x65, 0xf6, 0x1e, 0x0c, 0xed, 0x4c, 0x47, 0x37, 0x9b, 0xd8, 0xd8, - 0xab, 0xf9, 0xb4, 0xe5, 0xdc, 0x47, 0xdf, 0x5e, 0x9c, 0xe0, 0x73, 0x69, 0xa2, 0xd4, 0xa0, 0x87, - 0xfb, 0x7c, 0x1a, 0x60, 0x17, 0x5d, 0x84, 0x8c, 0x2a, 0x2e, 0xe8, 0x91, 0xcb, 0x51, 0xd3, 0x28, - 0x50, 0x65, 0xb3, 0xf3, 0xad, 0xff, 0xb0, 0x14, 0x2b, 0xfd, 0x42, 0x0c, 0x52, 0xb5, 0xeb, 0x0d, - 0x55, 0x77, 0x50, 0x1d, 0x66, 0x82, 0x80, 0x1a, 0x77, 0x6e, 0x06, 0x31, 0x28, 0x26, 0x67, 0x7d, - 0xd8, 0x7e, 0xfb, 0x48, 0x9a, 0xde, 0x9d, 0x78, 0x4f, 0xc7, 0xeb, 0x30, 0xc5, 0xac, 0x74, 0x51, - 0x19, 0x26, 0x6d, 0xf2, 0x83, 0x3f, 0xcb, 0x58, 0x18, 0x1a, 0x88, 0x54, 0xdf, 0x3f, 0x7b, 0x25, - 0x90, 0xd2, 0x0f, 0x62, 0x00, 0xb5, 0xeb, 0xd7, 0xb7, 0x1d, 0xdd, 0x36, 0xb0, 0x77, 0xaf, 0x7a, - 0xbc, 0x0e, 0x27, 0x42, 0x9b, 0x3a, 0x47, 0x1b, 0xbb, 0xd7, 0xb3, 0xc1, 0xb6, 0xce, 0xd1, 0x06, - 0xb2, 0xb5, 0x5c, 0xcf, 0x67, 0x4b, 0x8c, 0xcd, 0x56, 0x73, 0xbd, 0xc1, 0x6e, 0x6c, 0x42, 0x36, - 0xe8, 0xbe, 0x8b, 0x6a, 0x90, 0xf6, 0xf8, 0x6f, 0xee, 0xcd, 0xd2, 0x70, 0x6f, 0x0a, 0x18, 0xf7, - 0xa8, 0x8f, 0x2c, 0xfd, 0x7f, 0xe2, 0x54, 0x3f, 0x62, 0xff, 0x78, 0x85, 0x11, 0xc9, 0xbd, 0x3c, - 0x37, 0xde, 0x8b, 0x8a, 0x82, 0x73, 0xf5, 0x78, 0xf5, 0x23, 0x71, 0x98, 0xdd, 0x11, 0xd9, 0xe6, - 0x8f, 0xad, 0x27, 0x1a, 0x30, 0x85, 0x4d, 0xcf, 0xd1, 0xa9, 0x2b, 0xc8, 0x58, 0x3f, 0x3d, 0x6c, - 0xac, 0x07, 0xf4, 0x85, 0xfe, 0xa7, 0x27, 0xf1, 0x44, 0x80, 0xd3, 0xf4, 0x78, 0xe1, 0xdf, 0xc7, - 0xa1, 0x38, 0x0c, 0x89, 0xce, 0x40, 0x41, 0x73, 0x30, 0x15, 0x28, 0x91, 0x63, 0xc9, 0xbc, 0x10, - 0xf3, 0xa4, 0xbf, 0x01, 0xa4, 0x80, 0x22, 0x81, 0x45, 0x54, 0x8f, 0x5d, 0x31, 0xe5, 0x03, 0x30, - 0x4d, 0xfb, 0x18, 0x0a, 0xba, 0xa9, 0x7b, 0xba, 0x6a, 0x28, 0xbb, 0xaa, 0xa1, 0x9a, 0xda, 0xdd, - 0x54, 0x96, 0xfd, 0x89, 0x3a, 0xcf, 0x49, 0x2b, 0x8c, 0x13, 0x5d, 0x87, 0x29, 0x41, 0x9f, 0xbc, - 0x07, 0xf4, 0x82, 0x2c, 0x54, 0x45, 0xfd, 0x4e, 0x1c, 0x66, 0x64, 0xdc, 0xfa, 0xe1, 0x72, 0xeb, - 0x8f, 0x02, 0xb0, 0x09, 0x47, 0xf2, 0xe0, 0x5d, 0x78, 0xb6, 0x7f, 0x02, 0x67, 0x18, 0x5f, 0xcd, - 0xf5, 0x42, 0xbe, 0xfd, 0x7a, 0x1c, 0x72, 0x61, 0xdf, 0xfe, 0x10, 0xac, 0x0b, 0x68, 0x2d, 0xc8, - 0x06, 0x49, 0xfe, 0x3f, 0x6a, 0x87, 0x64, 0x83, 0xbe, 0xa8, 0x3b, 0x3a, 0x0d, 0x7c, 0x2f, 0x0e, - 0xa9, 0x86, 0xea, 0xa8, 0x1d, 0x17, 0x5d, 0xeb, 0x2b, 0xe0, 0xc4, 0xf9, 0x64, 0xdf, 0x7f, 0x22, - 0xe7, 0xc7, 0x21, 0x2c, 0xe4, 0x3e, 0x31, 0xa0, 0x7e, 0x7b, 0x04, 0xf2, 0x64, 0x8b, 0x18, 0x7a, - 0x95, 0x21, 0x4e, 0x1f, 0xd0, 0x92, 0x3d, 0x5e, 0xf0, 0x1c, 0x0d, 0x2d, 0x42, 0x96, 0xa8, 0x05, - 0x89, 0x8e, 0xe8, 0x40, 0x47, 0xbd, 0x55, 0x67, 0x12, 0xf4, 0x14, 0xa0, 0x7d, 0xff, 0xb8, 0x43, - 0x09, 0x5c, 0x40, 0xf4, 0x66, 0x82, 0x16, 0xa1, 0xfe, 0x00, 0x00, 0xb1, 0x42, 0x61, 0xaf, 0xc7, - 0xb1, 0x3d, 0x4e, 0x86, 0x48, 0x6a, 0xf4, 0x15, 0xb9, 0x9f, 0x60, 0xb5, 0x60, 0xcf, 0xee, 0x91, - 0x97, 0xe1, 0xeb, 0xc7, 0x8b, 0xd4, 0xef, 0xbd, 0xb3, 0x38, 0x7f, 0xa8, 0x76, 0x8c, 0x72, 0x69, - 0x00, 0x65, 0x89, 0xd6, 0x86, 0xd1, 0x5d, 0x67, 0x28, 0x82, 0x3f, 0x17, 0x03, 0x14, 0xa4, 0x5c, - 0x19, 0xbb, 0x36, 0xd9, 0xd6, 0x90, 0xa2, 0x37, 0x54, 0xa1, 0xc6, 0x8e, 0x2e, 0x7a, 0x03, 0xbc, - 0x28, 0x7a, 0x43, 0x33, 0xe2, 0x72, 0x90, 0xe0, 0xe2, 0x7c, 0x0c, 0x07, 0xbc, 0xdb, 0xb8, 0x5c, - 0xb5, 0x74, 0x81, 0xee, 0xcb, 0x61, 0x13, 0xa5, 0xdf, 0x89, 0xc1, 0xe9, 0xbe, 0x68, 0xf2, 0x8d, - 0xfd, 0x53, 0x80, 0x9c, 0x50, 0x23, 0xff, 0x67, 0x83, 0xcc, 0xe8, 0x63, 0x07, 0xe7, 0x8c, 0xd3, - 0x97, 0x2b, 0xdf, 0xaf, 0x1c, 0xcd, 0xde, 0x79, 0xfc, 0xa7, 0x31, 0x98, 0x0b, 0x1b, 0xe3, 0x77, - 0x6b, 0x13, 0x72, 0x61, 0x5b, 0x78, 0x87, 0x1e, 0x1e, 0xa7, 0x43, 0xbc, 0x2f, 0x11, 0x3c, 0x7a, - 0x39, 0x98, 0xb8, 0xec, 0x98, 0xed, 0x99, 0xb1, 0x7d, 0x23, 0x6c, 0xea, 0x9d, 0xc0, 0x49, 0x51, - 0xc5, 0x24, 0x1b, 0x96, 0x65, 0xa0, 0x3f, 0x0d, 0x33, 0xa6, 0xe5, 0x29, 0x24, 0xca, 0x71, 0x4b, - 0xe1, 0x3b, 0x57, 0x96, 0xfd, 0x5e, 0x3e, 0x9e, 0xcb, 0xbe, 0xf3, 0xce, 0x62, 0x3f, 0x55, 0x8f, - 0x1f, 0x0b, 0xa6, 0xe5, 0x55, 0x68, 0xfb, 0x36, 0xdb, 0xd7, 0x3a, 0x30, 0x1d, 0xbd, 0x35, 0xcb, - 0x96, 0x1b, 0xc7, 0xbe, 0xf5, 0xf4, 0x51, 0xb7, 0xcd, 0xed, 0x86, 0xee, 0xc9, 0xde, 0x06, 0xfb, - 0xfd, 0xb7, 0x17, 0x63, 0x8f, 0x7f, 0x25, 0x06, 0x10, 0x6c, 0xe1, 0xd1, 0x93, 0x70, 0xaa, 0xb2, - 0xb5, 0x59, 0x53, 0x9a, 0xdb, 0x2b, 0xdb, 0x3b, 0xcd, 0xe8, 0x3b, 0xe3, 0xe2, 0x34, 0xdd, 0xb5, - 0xb1, 0xa6, 0xef, 0xe9, 0xb8, 0x85, 0x1e, 0x85, 0xb9, 0xa8, 0x36, 0xb9, 0xaa, 0xd7, 0xa4, 0xd8, - 0x7c, 0xee, 0xf6, 0x9d, 0xa5, 0x34, 0xab, 0x8e, 0x70, 0x0b, 0x9d, 0x85, 0x13, 0xfd, 0x7a, 0x6b, - 0x9b, 0xab, 0x52, 0x7c, 0x7e, 0xfa, 0xf6, 0x9d, 0xa5, 0x8c, 0x5f, 0x46, 0xa1, 0x12, 0xa0, 0xb0, - 0x26, 0xe7, 0x4b, 0xcc, 0xc3, 0xed, 0x3b, 0x4b, 0x29, 0xe6, 0xb6, 0xf9, 0xe4, 0x47, 0x3f, 0xb7, - 0x30, 0x51, 0xb9, 0x3a, 0xf4, 0xbc, 0xfc, 0xc9, 0x23, 0x3d, 0x76, 0xcb, 0x3f, 0x03, 0x8f, 0x1c, - 0x92, 0xff, 0x41, 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, 0xf6, 0x2d, 0x04, 0x3e, 0x67, 0x00, 0x00, + 0x4b, 0x3c, 0x86, 0x3d, 0xc0, 0x72, 0x49, 0xc7, 0xe9, 0x6a, 0xf4, 0x5c, 0x0c, 0x9a, 0xe8, 0xe9, + 0x6e, 0x77, 0xf7, 0xec, 0x2e, 0x58, 0x4e, 0x8a, 0x2e, 0xe5, 0x21, 0x6d, 0x2a, 0x8e, 0x1c, 0xa7, + 0x62, 0x59, 0xd6, 0x2a, 0x94, 0xe5, 0x44, 0x8e, 0xa2, 0x3c, 0x6c, 0x29, 0xb2, 0x1d, 0x57, 0x12, + 0x25, 0xa9, 0x24, 0xb2, 0x7e, 0xa4, 0x64, 0xff, 0x88, 0xed, 0x3c, 0x18, 0x87, 0x52, 0x25, 0x8a, + 0xa2, 0xc4, 0x8e, 0xc3, 0x54, 0x25, 0xa5, 0x52, 0x2a, 0x75, 0x5f, 0xfd, 0x98, 0x07, 0x66, 0xb0, + 0x5e, 0xca, 0xae, 0xd2, 0x2f, 0xa0, 0xcf, 0x3d, 0xdf, 0xd7, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0xe7, + 0xde, 0xee, 0x1e, 0xf8, 0xe7, 0x57, 0x60, 0xa9, 0x6d, 0x59, 0x6d, 0x03, 0x9f, 0xb3, 0x1d, 0xcb, + 0xb3, 0x76, 0xbb, 0x7b, 0xe7, 0x5a, 0xd8, 0xd5, 0x1c, 0xdd, 0xf6, 0x2c, 0x67, 0x99, 0xca, 0x50, + 0x81, 0x69, 0x2c, 0x0b, 0x8d, 0xd2, 0x06, 0xcc, 0x5c, 0xd5, 0x0d, 0x5c, 0xf3, 0x15, 0x9b, 0xd8, + 0x43, 0x2f, 0x42, 0x72, 0x4f, 0x37, 0x70, 0x31, 0xb6, 0x94, 0x38, 0x9b, 0x3d, 0xff, 0xe8, 0x72, + 0x0f, 0x68, 0x39, 0x8a, 0x68, 0x10, 0xb1, 0x4c, 0x11, 0xa5, 0x6f, 0x26, 0x61, 0x76, 0x40, 0x2b, + 0x42, 0x90, 0x34, 0xd5, 0x0e, 0x61, 0x8c, 0x9d, 0xcd, 0xc8, 0xf4, 0x7f, 0x54, 0x84, 0x29, 0x5b, + 0xd5, 0x0e, 0xd4, 0x36, 0x2e, 0xc6, 0xa9, 0x58, 0x5c, 0xa2, 0x05, 0x80, 0x16, 0xb6, 0xb1, 0xd9, + 0xc2, 0xa6, 0x76, 0x58, 0x4c, 0x2c, 0x25, 0xce, 0x66, 0xe4, 0x90, 0x04, 0x3d, 0x05, 0x33, 0x76, + 0x77, 0xd7, 0xd0, 0x35, 0x25, 0xa4, 0x06, 0x4b, 0x89, 0xb3, 0x93, 0xb2, 0xc4, 0x1a, 0x6a, 0x81, + 0xf2, 0x19, 0x28, 0xdc, 0xc2, 0xea, 0x41, 0x58, 0x35, 0x4b, 0x55, 0xf3, 0x44, 0x1c, 0x52, 0xac, + 0x42, 0xae, 0x83, 0x5d, 0x57, 0x6d, 0x63, 0xc5, 0x3b, 0xb4, 0x71, 0x31, 0x49, 0x7b, 0xbf, 0xd4, + 0xd7, 0xfb, 0xde, 0x9e, 0x67, 0x39, 0x6a, 0xfb, 0xd0, 0xc6, 0x68, 0x05, 0x32, 0xd8, 0xec, 0x76, + 0x18, 0xc3, 0xe4, 0x10, 0xff, 0xd5, 0xcd, 0x6e, 0xa7, 0x97, 0x25, 0x4d, 0x60, 0x9c, 0x62, 0xca, + 0xc5, 0xce, 0x4d, 0x5d, 0xc3, 0xc5, 0x14, 0x25, 0x38, 0xd3, 0x47, 0xd0, 0x64, 0xed, 0xbd, 0x1c, + 0x02, 0x87, 0xaa, 0x90, 0xc1, 0xb7, 0x3d, 0x6c, 0xba, 0xba, 0x65, 0x16, 0xa7, 0x28, 0xc9, 0x63, + 0x03, 0x46, 0x11, 0x1b, 0xad, 0x5e, 0x8a, 0x00, 0x87, 0x2e, 0xc2, 0x94, 0x65, 0x7b, 0xba, 0x65, + 0xba, 0xc5, 0xf4, 0x52, 0xec, 0x6c, 0xf6, 0xfc, 0x83, 0x03, 0x03, 0x61, 0x8b, 0xe9, 0xc8, 0x42, + 0x19, 0xad, 0x81, 0xe4, 0x5a, 0x5d, 0x47, 0xc3, 0x8a, 0x66, 0xb5, 0xb0, 0xa2, 0x9b, 0x7b, 0x56, + 0x31, 0x43, 0x09, 0x16, 0xfb, 0x3b, 0x42, 0x15, 0xab, 0x56, 0x0b, 0xaf, 0x99, 0x7b, 0x96, 0x9c, + 0x77, 0x23, 0xd7, 0xe8, 0x24, 0xa4, 0xdc, 0x43, 0xd3, 0x53, 0x6f, 0x17, 0x73, 0x34, 0x42, 0xf8, + 0x55, 0xe9, 0x57, 0x53, 0x50, 0x18, 0x27, 0xc4, 0xae, 0xc0, 0xe4, 0x1e, 0xe9, 0x65, 0x31, 0x7e, + 0x1c, 0x1f, 0x30, 0x4c, 0xd4, 0x89, 0xa9, 0x7b, 0x74, 0xe2, 0x0a, 0x64, 0x4d, 0xec, 0x7a, 0xb8, + 0xc5, 0x22, 0x22, 0x31, 0x66, 0x4c, 0x01, 0x03, 0xf5, 0x87, 0x54, 0xf2, 0x9e, 0x42, 0xea, 0x06, + 0x14, 0x7c, 0x93, 0x14, 0x47, 0x35, 0xdb, 0x22, 0x36, 0xcf, 0x8d, 0xb2, 0x64, 0xb9, 0x2e, 0x70, + 0x32, 0x81, 0xc9, 0x79, 0x1c, 0xb9, 0x46, 0x35, 0x00, 0xcb, 0xc4, 0xd6, 0x9e, 0xd2, 0xc2, 0x9a, + 0x51, 0x4c, 0x0f, 0xf1, 0xd2, 0x16, 0x51, 0xe9, 0xf3, 0x92, 0xc5, 0xa4, 0x9a, 0x81, 0x2e, 0x07, + 0xa1, 0x36, 0x35, 0x24, 0x52, 0x36, 0xd8, 0x24, 0xeb, 0x8b, 0xb6, 0x1d, 0xc8, 0x3b, 0x98, 0xc4, + 0x3d, 0x6e, 0xf1, 0x9e, 0x65, 0xa8, 0x11, 0xcb, 0x23, 0x7b, 0x26, 0x73, 0x18, 0xeb, 0xd8, 0xb4, + 0x13, 0xbe, 0x44, 0x8f, 0x80, 0x2f, 0x50, 0x68, 0x58, 0x01, 0xcd, 0x42, 0x39, 0x21, 0xdc, 0x54, + 0x3b, 0x78, 0xfe, 0x2d, 0xc8, 0x47, 0xdd, 0x83, 0xe6, 0x60, 0xd2, 0xf5, 0x54, 0xc7, 0xa3, 0x51, + 0x38, 0x29, 0xb3, 0x0b, 0x24, 0x41, 0x02, 0x9b, 0x2d, 0x9a, 0xe5, 0x26, 0x65, 0xf2, 0x2f, 0xfa, + 0x13, 0x41, 0x87, 0x13, 0xb4, 0xc3, 0x8f, 0xf7, 0x8f, 0x68, 0x84, 0xb9, 0xb7, 0xdf, 0xf3, 0x97, + 0x60, 0x3a, 0xd2, 0x81, 0x71, 0x6f, 0x5d, 0xfa, 0x31, 0x38, 0x31, 0x90, 0x1a, 0xdd, 0x80, 0xb9, + 0xae, 0xa9, 0x9b, 0x1e, 0x76, 0x6c, 0x07, 0x93, 0x88, 0x65, 0xb7, 0x2a, 0xfe, 0x97, 0xa9, 0x21, + 0x31, 0xb7, 0x13, 0xd6, 0x66, 0x2c, 0xf2, 0x6c, 0xb7, 0x5f, 0xf8, 0x64, 0x26, 0xfd, 0xad, 0x29, + 0xe9, 0xed, 0xb7, 0xdf, 0x7e, 0x3b, 0x5e, 0xfa, 0xa7, 0x29, 0x98, 0x1b, 0x34, 0x67, 0x06, 0x4e, + 0xdf, 0x93, 0x90, 0x32, 0xbb, 0x9d, 0x5d, 0xec, 0x50, 0x27, 0x4d, 0xca, 0xfc, 0x0a, 0xad, 0xc0, + 0xa4, 0xa1, 0xee, 0x62, 0xa3, 0x98, 0x5c, 0x8a, 0x9d, 0xcd, 0x9f, 0x7f, 0x6a, 0xac, 0x59, 0xb9, + 0xbc, 0x4e, 0x20, 0x32, 0x43, 0xa2, 0x0f, 0x43, 0x92, 0xa7, 0x68, 0xc2, 0xf0, 0xe4, 0x78, 0x0c, + 0x64, 0x2e, 0xc9, 0x14, 0x87, 0x1e, 0x80, 0x0c, 0xf9, 0xcb, 0x62, 0x23, 0x45, 0x6d, 0x4e, 0x13, + 0x01, 0x89, 0x0b, 0x34, 0x0f, 0x69, 0x3a, 0x4d, 0x5a, 0x58, 0x2c, 0x6d, 0xfe, 0x35, 0x09, 0xac, + 0x16, 0xde, 0x53, 0xbb, 0x86, 0xa7, 0xdc, 0x54, 0x8d, 0x2e, 0xa6, 0x01, 0x9f, 0x91, 0x73, 0x5c, + 0x78, 0x9d, 0xc8, 0xd0, 0x22, 0x64, 0xd9, 0xac, 0xd2, 0xcd, 0x16, 0xbe, 0x4d, 0xb3, 0xe7, 0xa4, + 0xcc, 0x26, 0xda, 0x1a, 0x91, 0x90, 0xdb, 0xbf, 0xe9, 0x5a, 0xa6, 0x08, 0x4d, 0x7a, 0x0b, 0x22, + 0xa0, 0xb7, 0xbf, 0xd4, 0x9b, 0xb8, 0x1f, 0x1a, 0xdc, 0xbd, 0xbe, 0xb9, 0x74, 0x06, 0x0a, 0x54, + 0xe3, 0x79, 0x3e, 0xf4, 0xaa, 0x51, 0x9c, 0x59, 0x8a, 0x9d, 0x4d, 0xcb, 0x79, 0x26, 0xde, 0xe2, + 0xd2, 0xd2, 0x97, 0xe3, 0x90, 0xa4, 0x89, 0xa5, 0x00, 0xd9, 0xed, 0xd7, 0x1b, 0x75, 0xa5, 0xb6, + 0xb5, 0x53, 0x59, 0xaf, 0x4b, 0x31, 0x94, 0x07, 0xa0, 0x82, 0xab, 0xeb, 0x5b, 0x2b, 0xdb, 0x52, + 0xdc, 0xbf, 0x5e, 0xdb, 0xdc, 0xbe, 0xf8, 0x82, 0x94, 0xf0, 0x01, 0x3b, 0x4c, 0x90, 0x0c, 0x2b, + 0x3c, 0x7f, 0x5e, 0x9a, 0x44, 0x12, 0xe4, 0x18, 0xc1, 0xda, 0x8d, 0x7a, 0xed, 0xe2, 0x0b, 0x52, + 0x2a, 0x2a, 0x79, 0xfe, 0xbc, 0x34, 0x85, 0xa6, 0x21, 0x43, 0x25, 0x95, 0xad, 0xad, 0x75, 0x29, + 0xed, 0x73, 0x36, 0xb7, 0xe5, 0xb5, 0xcd, 0x55, 0x29, 0xe3, 0x73, 0xae, 0xca, 0x5b, 0x3b, 0x0d, + 0x09, 0x7c, 0x86, 0x8d, 0x7a, 0xb3, 0xb9, 0xb2, 0x5a, 0x97, 0xb2, 0xbe, 0x46, 0xe5, 0xf5, 0xed, + 0x7a, 0x53, 0xca, 0x45, 0xcc, 0x7a, 0xfe, 0xbc, 0x34, 0xed, 0xdf, 0xa2, 0xbe, 0xb9, 0xb3, 0x21, + 0xe5, 0xd1, 0x0c, 0x4c, 0xb3, 0x5b, 0x08, 0x23, 0x0a, 0x3d, 0xa2, 0x8b, 0x2f, 0x48, 0x52, 0x60, + 0x08, 0x63, 0x99, 0x89, 0x08, 0x2e, 0xbe, 0x20, 0xa1, 0x52, 0x15, 0x26, 0x69, 0x18, 0x22, 0x04, + 0xf9, 0xf5, 0x95, 0x4a, 0x7d, 0x5d, 0xd9, 0x6a, 0x6c, 0xaf, 0x6d, 0x6d, 0xae, 0xac, 0x4b, 0xb1, + 0x40, 0x26, 0xd7, 0x5f, 0xdd, 0x59, 0x93, 0xeb, 0x35, 0x29, 0x1e, 0x96, 0x35, 0xea, 0x2b, 0xdb, + 0xf5, 0x9a, 0x94, 0x28, 0x69, 0x30, 0x37, 0x28, 0xa1, 0x0e, 0x9c, 0x42, 0xa1, 0x58, 0x88, 0x0f, + 0x89, 0x05, 0xca, 0xd5, 0x1b, 0x0b, 0xa5, 0x6f, 0xc4, 0x61, 0x76, 0xc0, 0xa2, 0x32, 0xf0, 0x26, + 0x2f, 0xc1, 0x24, 0x8b, 0x65, 0xb6, 0xcc, 0x3e, 0x31, 0x70, 0x75, 0xa2, 0x91, 0xdd, 0xb7, 0xd4, + 0x52, 0x5c, 0xb8, 0xd4, 0x48, 0x0c, 0x29, 0x35, 0x08, 0x45, 0x5f, 0xc0, 0xfe, 0x48, 0x5f, 0xf2, + 0x67, 0xeb, 0xe3, 0xc5, 0x71, 0xd6, 0x47, 0x2a, 0x3b, 0xde, 0x22, 0x30, 0x39, 0x60, 0x11, 0xb8, + 0x02, 0x33, 0x7d, 0x44, 0x63, 0x27, 0xe3, 0x8f, 0xc4, 0xa0, 0x38, 0xcc, 0x39, 0x23, 0x52, 0x62, + 0x3c, 0x92, 0x12, 0xaf, 0xf4, 0x7a, 0xf0, 0xe1, 0xe1, 0x83, 0xd0, 0x37, 0xd6, 0x9f, 0x8b, 0xc1, + 0xc9, 0xc1, 0x25, 0xe5, 0x40, 0x1b, 0x3e, 0x0c, 0xa9, 0x0e, 0xf6, 0xf6, 0x2d, 0x51, 0x56, 0x3d, + 0x3e, 0x60, 0xb1, 0x26, 0xcd, 0xbd, 0x83, 0xcd, 0x51, 0xe1, 0xd5, 0x3e, 0x31, 0xac, 0x2e, 0x64, + 0xd6, 0xf4, 0x59, 0xfa, 0xb1, 0x38, 0x9c, 0x18, 0x48, 0x3e, 0xd0, 0xd0, 0x87, 0x00, 0x74, 0xd3, + 0xee, 0x7a, 0xac, 0x74, 0x62, 0x99, 0x38, 0x43, 0x25, 0x34, 0x79, 0x91, 0x2c, 0xdb, 0xf5, 0xfc, + 0xf6, 0x04, 0x6d, 0x07, 0x26, 0xa2, 0x0a, 0x2f, 0x06, 0x86, 0x26, 0xa9, 0xa1, 0x0b, 0x43, 0x7a, + 0xda, 0x17, 0x98, 0xcf, 0x82, 0xa4, 0x19, 0x3a, 0x36, 0x3d, 0xc5, 0xf5, 0x1c, 0xac, 0x76, 0x74, + 0xb3, 0x4d, 0x97, 0x9a, 0x74, 0x79, 0x72, 0x4f, 0x35, 0x5c, 0x2c, 0x17, 0x58, 0x73, 0x53, 0xb4, + 0x12, 0x04, 0x0d, 0x20, 0x27, 0x84, 0x48, 0x45, 0x10, 0xac, 0xd9, 0x47, 0x94, 0x7e, 0x32, 0x03, + 0xd9, 0x50, 0x01, 0x8e, 0x1e, 0x86, 0xdc, 0x9b, 0xea, 0x4d, 0x55, 0x11, 0x9b, 0x2a, 0xe6, 0x89, + 0x2c, 0x91, 0x35, 0xf8, 0xc6, 0xea, 0x59, 0x98, 0xa3, 0x2a, 0x56, 0xd7, 0xc3, 0x8e, 0xa2, 0x19, + 0xaa, 0xeb, 0x52, 0xa7, 0xa5, 0xa9, 0x2a, 0x22, 0x6d, 0x5b, 0xa4, 0xa9, 0x2a, 0x5a, 0xd0, 0x05, + 0x98, 0xa5, 0x88, 0x4e, 0xd7, 0xf0, 0x74, 0xdb, 0xc0, 0x0a, 0xd9, 0xe6, 0xb9, 0x74, 0xc9, 0xf1, + 0x2d, 0x9b, 0x21, 0x1a, 0x1b, 0x5c, 0x81, 0x58, 0xe4, 0xa2, 0x1a, 0x3c, 0x44, 0x61, 0x6d, 0x6c, + 0x62, 0x47, 0xf5, 0xb0, 0x82, 0x7f, 0xb4, 0xab, 0x1a, 0xae, 0xa2, 0x9a, 0x2d, 0x65, 0x5f, 0x75, + 0xf7, 0x8b, 0x73, 0x84, 0xa0, 0x12, 0x2f, 0xc6, 0xe4, 0xd3, 0x44, 0x71, 0x95, 0xeb, 0xd5, 0xa9, + 0xda, 0x8a, 0xd9, 0x7a, 0x59, 0x75, 0xf7, 0x51, 0x19, 0x4e, 0x52, 0x16, 0xd7, 0x73, 0x74, 0xb3, + 0xad, 0x68, 0xfb, 0x58, 0x3b, 0x50, 0xba, 0xde, 0xde, 0x8b, 0xc5, 0x07, 0xc2, 0xf7, 0xa7, 0x16, + 0x36, 0xa9, 0x4e, 0x95, 0xa8, 0xec, 0x78, 0x7b, 0x2f, 0xa2, 0x26, 0xe4, 0xc8, 0x60, 0x74, 0xf4, + 0xb7, 0xb0, 0xb2, 0x67, 0x39, 0x74, 0x0d, 0xcd, 0x0f, 0x48, 0x4d, 0x21, 0x0f, 0x2e, 0x6f, 0x71, + 0xc0, 0x86, 0xd5, 0xc2, 0xe5, 0xc9, 0x66, 0xa3, 0x5e, 0xaf, 0xc9, 0x59, 0xc1, 0x72, 0xd5, 0x72, + 0x48, 0x40, 0xb5, 0x2d, 0xdf, 0xc1, 0x59, 0x16, 0x50, 0x6d, 0x4b, 0xb8, 0xf7, 0x02, 0xcc, 0x6a, + 0x1a, 0xeb, 0xb3, 0xae, 0x29, 0x7c, 0x33, 0xe6, 0x16, 0xa5, 0x88, 0xb3, 0x34, 0x6d, 0x95, 0x29, + 0xf0, 0x18, 0x77, 0xd1, 0x65, 0x38, 0x11, 0x38, 0x2b, 0x0c, 0x9c, 0xe9, 0xeb, 0x65, 0x2f, 0xf4, + 0x02, 0xcc, 0xda, 0x87, 0xfd, 0x40, 0x14, 0xb9, 0xa3, 0x7d, 0xd8, 0x0b, 0xbb, 0x04, 0x73, 0xf6, + 0xbe, 0xdd, 0x8f, 0x7b, 0x32, 0x8c, 0x43, 0xf6, 0xbe, 0xdd, 0x0b, 0x7c, 0x8c, 0xee, 0xcc, 0x1d, + 0xac, 0xa9, 0x1e, 0x6e, 0x15, 0x4f, 0x85, 0xd5, 0x43, 0x0d, 0x68, 0x19, 0x24, 0x4d, 0x53, 0xb0, + 0xa9, 0xee, 0x1a, 0x58, 0x51, 0x1d, 0x6c, 0xaa, 0x6e, 0x71, 0x91, 0x2a, 0x27, 0x3d, 0xa7, 0x8b, + 0xe5, 0xbc, 0xa6, 0xd5, 0x69, 0xe3, 0x0a, 0x6d, 0x43, 0x4f, 0xc2, 0x8c, 0xb5, 0xfb, 0xa6, 0xc6, + 0x22, 0x52, 0xb1, 0x1d, 0xbc, 0xa7, 0xdf, 0x2e, 0x3e, 0x4a, 0xdd, 0x5b, 0x20, 0x0d, 0x34, 0x1e, + 0x1b, 0x54, 0x8c, 0x9e, 0x00, 0x49, 0x73, 0xf7, 0x55, 0xc7, 0xa6, 0x29, 0xd9, 0xb5, 0x55, 0x0d, + 0x17, 0x1f, 0x63, 0xaa, 0x4c, 0xbe, 0x29, 0xc4, 0x64, 0x46, 0xb8, 0xb7, 0xf4, 0x3d, 0x4f, 0x30, + 0x9e, 0x61, 0x33, 0x82, 0xca, 0x38, 0xdb, 0x59, 0x90, 0x88, 0x27, 0x22, 0x37, 0x3e, 0x4b, 0xd5, + 0xf2, 0xf6, 0xbe, 0x1d, 0xbe, 0xef, 0x23, 0x30, 0x4d, 0x34, 0x83, 0x9b, 0x3e, 0xc1, 0x0a, 0x37, + 0x7b, 0x3f, 0x74, 0xc7, 0x17, 0xe0, 0x24, 0x51, 0xea, 0x60, 0x4f, 0x6d, 0xa9, 0x9e, 0x1a, 0xd2, + 0x7e, 0x9a, 0x6a, 0x13, 0xb7, 0x6f, 0xf0, 0xc6, 0x88, 0x9d, 0x4e, 0x77, 0xf7, 0xd0, 0x0f, 0xac, + 0x67, 0x98, 0x9d, 0x44, 0x26, 0x42, 0xeb, 0x03, 0x2b, 0xce, 0x4b, 0x65, 0xc8, 0x85, 0xe3, 0x1e, + 0x65, 0x80, 0x45, 0xbe, 0x14, 0x23, 0x45, 0x50, 0x75, 0xab, 0x46, 0xca, 0x97, 0x37, 0xea, 0x52, + 0x9c, 0x94, 0x51, 0xeb, 0x6b, 0xdb, 0x75, 0x45, 0xde, 0xd9, 0xdc, 0x5e, 0xdb, 0xa8, 0x4b, 0x89, + 0x50, 0x61, 0x7f, 0x2d, 0x99, 0x7e, 0x5c, 0x3a, 0x43, 0xaa, 0x86, 0x7c, 0x74, 0xa7, 0x86, 0x7e, + 0x08, 0x4e, 0x89, 0x63, 0x15, 0x17, 0x7b, 0xca, 0x2d, 0xdd, 0xa1, 0x13, 0xb2, 0xa3, 0xb2, 0xc5, + 0xd1, 0x8f, 0x9f, 0x39, 0xae, 0xd5, 0xc4, 0xde, 0x6b, 0xba, 0x43, 0xa6, 0x5b, 0x47, 0xf5, 0xd0, + 0x3a, 0x2c, 0x9a, 0x96, 0xe2, 0x7a, 0xaa, 0xd9, 0x52, 0x9d, 0x96, 0x12, 0x1c, 0x68, 0x29, 0xaa, + 0xa6, 0x61, 0xd7, 0xb5, 0xd8, 0x42, 0xe8, 0xb3, 0x3c, 0x68, 0x5a, 0x4d, 0xae, 0x1c, 0xac, 0x10, + 0x2b, 0x5c, 0xb5, 0x27, 0x7c, 0x13, 0xc3, 0xc2, 0xf7, 0x01, 0xc8, 0x74, 0x54, 0x5b, 0xc1, 0xa6, + 0xe7, 0x1c, 0xd2, 0xfa, 0x3c, 0x2d, 0xa7, 0x3b, 0xaa, 0x5d, 0x27, 0xd7, 0xdf, 0x97, 0x6d, 0xd2, + 0xb5, 0x64, 0x3a, 0x29, 0x4d, 0x5e, 0x4b, 0xa6, 0x27, 0xa5, 0xd4, 0xb5, 0x64, 0x3a, 0x25, 0x4d, + 0x5d, 0x4b, 0xa6, 0xd3, 0x52, 0xe6, 0x5a, 0x32, 0x9d, 0x91, 0xa0, 0xf4, 0x5e, 0x02, 0x72, 0xe1, + 0x0a, 0x9e, 0x6c, 0x88, 0x34, 0xba, 0x86, 0xc5, 0x68, 0x96, 0x7b, 0xe4, 0xc8, 0x7a, 0x7f, 0xb9, + 0x4a, 0x16, 0xb7, 0x72, 0x8a, 0x95, 0xcb, 0x32, 0x43, 0x92, 0xc2, 0x82, 0x84, 0x1f, 0x66, 0xe5, + 0x49, 0x5a, 0xe6, 0x57, 0x68, 0x15, 0x52, 0x6f, 0xba, 0x94, 0x3b, 0x45, 0xb9, 0x1f, 0x3d, 0x9a, + 0xfb, 0x5a, 0x93, 0x92, 0x67, 0xae, 0x35, 0x95, 0xcd, 0x2d, 0x79, 0x63, 0x65, 0x5d, 0xe6, 0x70, + 0x74, 0x1a, 0x92, 0x86, 0xfa, 0xd6, 0x61, 0x74, 0x19, 0xa4, 0xa2, 0x71, 0x87, 0xe5, 0x34, 0x24, + 0x6f, 0x61, 0xf5, 0x20, 0xba, 0xf8, 0x50, 0xd1, 0x07, 0x38, 0x3d, 0xce, 0xc1, 0x24, 0xf5, 0x17, + 0x02, 0xe0, 0x1e, 0x93, 0x26, 0x50, 0x1a, 0x92, 0xd5, 0x2d, 0x99, 0x4c, 0x11, 0x09, 0x72, 0x4c, + 0xaa, 0x34, 0xd6, 0xea, 0xd5, 0xba, 0x14, 0x2f, 0x5d, 0x80, 0x14, 0x73, 0x02, 0x99, 0x3e, 0xbe, + 0x1b, 0xa4, 0x09, 0x7e, 0xc9, 0x39, 0x62, 0xa2, 0x75, 0x67, 0xa3, 0x52, 0x97, 0xa5, 0x78, 0xdf, + 0xe0, 0x97, 0x5c, 0xc8, 0x85, 0x2b, 0xf3, 0xef, 0xcf, 0xf6, 0xfc, 0x2b, 0x31, 0xc8, 0x86, 0x2a, + 0x6d, 0x52, 0x22, 0xa9, 0x86, 0x61, 0xdd, 0x52, 0x54, 0x43, 0x57, 0x5d, 0x1e, 0x1a, 0x40, 0x45, + 0x2b, 0x44, 0x32, 0xee, 0xd0, 0x7d, 0x9f, 0x26, 0xcd, 0xa4, 0x94, 0x2a, 0x7d, 0x3a, 0x06, 0x52, + 0x6f, 0xa9, 0xdb, 0x63, 0x66, 0xec, 0x8f, 0xd2, 0xcc, 0xd2, 0xa7, 0x62, 0x90, 0x8f, 0xd6, 0xb7, + 0x3d, 0xe6, 0x3d, 0xfc, 0x47, 0x6a, 0xde, 0xef, 0xc6, 0x61, 0x3a, 0x52, 0xd5, 0x8e, 0x6b, 0xdd, + 0x8f, 0xc2, 0x8c, 0xde, 0xc2, 0x1d, 0xdb, 0xf2, 0xb0, 0xa9, 0x1d, 0x2a, 0x06, 0xbe, 0x89, 0x8d, + 0x62, 0x89, 0x26, 0x8d, 0x73, 0x47, 0xd7, 0xcd, 0xcb, 0x6b, 0x01, 0x6e, 0x9d, 0xc0, 0xca, 0xb3, + 0x6b, 0xb5, 0xfa, 0x46, 0x63, 0x6b, 0xbb, 0xbe, 0x59, 0x7d, 0x5d, 0xd9, 0xd9, 0x7c, 0x65, 0x73, + 0xeb, 0xb5, 0x4d, 0x59, 0xd2, 0x7b, 0xd4, 0x3e, 0xc0, 0x69, 0xdf, 0x00, 0xa9, 0xd7, 0x28, 0x74, + 0x0a, 0x06, 0x99, 0x25, 0x4d, 0xa0, 0x59, 0x28, 0x6c, 0x6e, 0x29, 0xcd, 0xb5, 0x5a, 0x5d, 0xa9, + 0x5f, 0xbd, 0x5a, 0xaf, 0x6e, 0x37, 0xd9, 0x49, 0x88, 0xaf, 0xbd, 0x1d, 0x99, 0xe0, 0xa5, 0x4f, + 0x26, 0x60, 0x76, 0x80, 0x25, 0x68, 0x85, 0xef, 0x61, 0xd8, 0xb6, 0xea, 0x99, 0x71, 0xac, 0x5f, + 0x26, 0x55, 0x44, 0x43, 0x75, 0x3c, 0xbe, 0xe5, 0x79, 0x02, 0x88, 0x97, 0x4c, 0x4f, 0xdf, 0xd3, + 0xb1, 0xc3, 0x4f, 0x98, 0xd8, 0xc6, 0xa6, 0x10, 0xc8, 0xd9, 0x21, 0xd3, 0xd3, 0x80, 0x6c, 0xcb, + 0xd5, 0x3d, 0xfd, 0x26, 0x56, 0x74, 0x53, 0x1c, 0x47, 0x91, 0x8d, 0x4e, 0x52, 0x96, 0x44, 0xcb, + 0x9a, 0xe9, 0xf9, 0xda, 0x26, 0x6e, 0xab, 0x3d, 0xda, 0x24, 0x99, 0x27, 0x64, 0x49, 0xb4, 0xf8, + 0xda, 0x0f, 0x43, 0xae, 0x65, 0x75, 0x49, 0xf5, 0xc7, 0xf4, 0xc8, 0xda, 0x11, 0x93, 0xb3, 0x4c, + 0xe6, 0xab, 0xf0, 0xba, 0x3e, 0x38, 0x07, 0xcb, 0xc9, 0x59, 0x26, 0x63, 0x2a, 0x67, 0xa0, 0xa0, + 0xb6, 0xdb, 0x0e, 0x21, 0x17, 0x44, 0x6c, 0xa7, 0x92, 0xf7, 0xc5, 0x54, 0x71, 0xfe, 0x1a, 0xa4, + 0x85, 0x1f, 0xc8, 0xe2, 0x4d, 0x3c, 0xa1, 0xd8, 0x6c, 0xfb, 0x1d, 0x3f, 0x9b, 0x91, 0xd3, 0xa6, + 0x68, 0x7c, 0x18, 0x72, 0xba, 0xab, 0x04, 0xc7, 0xfa, 0xf1, 0xa5, 0xf8, 0xd9, 0xb4, 0x9c, 0xd5, + 0x5d, 0xff, 0x48, 0xb4, 0xf4, 0xb9, 0x38, 0xe4, 0xa3, 0x8f, 0x25, 0x50, 0x0d, 0xd2, 0x86, 0xa5, + 0xa9, 0x34, 0xb4, 0xd8, 0x33, 0xb1, 0xb3, 0x23, 0x9e, 0x64, 0x2c, 0xaf, 0x73, 0x7d, 0xd9, 0x47, + 0xce, 0xff, 0xeb, 0x18, 0xa4, 0x85, 0x18, 0x9d, 0x84, 0xa4, 0xad, 0x7a, 0xfb, 0x94, 0x6e, 0xb2, + 0x12, 0x97, 0x62, 0x32, 0xbd, 0x26, 0x72, 0xd7, 0x56, 0x4d, 0x1a, 0x02, 0x5c, 0x4e, 0xae, 0xc9, + 0xb8, 0x1a, 0x58, 0x6d, 0xd1, 0x6d, 0x90, 0xd5, 0xe9, 0x60, 0xd3, 0x73, 0xc5, 0xb8, 0x72, 0x79, + 0x95, 0x8b, 0xd1, 0x53, 0x30, 0xe3, 0x39, 0xaa, 0x6e, 0x44, 0x74, 0x93, 0x54, 0x57, 0x12, 0x0d, + 0xbe, 0x72, 0x19, 0x4e, 0x0b, 0xde, 0x16, 0xf6, 0x54, 0x6d, 0x1f, 0xb7, 0x02, 0x50, 0x8a, 0x1e, + 0x77, 0x9c, 0xe2, 0x0a, 0x35, 0xde, 0x2e, 0xb0, 0xa5, 0xdf, 0x88, 0xc1, 0x8c, 0xd8, 0xb8, 0xb5, + 0x7c, 0x67, 0x6d, 0x00, 0xa8, 0xa6, 0x69, 0x79, 0x61, 0x77, 0xf5, 0x87, 0x72, 0x1f, 0x6e, 0x79, + 0xc5, 0x07, 0xc9, 0x21, 0x82, 0xf9, 0x0e, 0x40, 0xd0, 0x32, 0xd4, 0x6d, 0x8b, 0x90, 0xe5, 0xcf, + 0x9c, 0xe8, 0x83, 0x4b, 0xb6, 0xd5, 0x07, 0x26, 0x22, 0x3b, 0x3c, 0x34, 0x07, 0x93, 0xbb, 0xb8, + 0xad, 0x9b, 0xfc, 0x24, 0x99, 0x5d, 0x88, 0x03, 0x99, 0xa4, 0x7f, 0x20, 0x53, 0xf9, 0x33, 0x30, + 0xab, 0x59, 0x9d, 0x5e, 0x73, 0x2b, 0x52, 0xcf, 0x71, 0x83, 0xfb, 0x72, 0xec, 0x8d, 0x67, 0xb8, + 0x52, 0xdb, 0x32, 0x54, 0xb3, 0xbd, 0x6c, 0x39, 0xed, 0xe0, 0xc1, 0x2b, 0xa9, 0x78, 0xdc, 0xd0, + 0xe3, 0x57, 0x7b, 0xf7, 0xff, 0xc4, 0x62, 0x3f, 0x17, 0x4f, 0xac, 0x36, 0x2a, 0x9f, 0x8f, 0xcf, + 0xaf, 0x32, 0x60, 0x43, 0x38, 0x43, 0xc6, 0x7b, 0x06, 0xd6, 0x48, 0x07, 0xe1, 0xdb, 0x4f, 0xc1, + 0x5c, 0xdb, 0x6a, 0x5b, 0x94, 0xe9, 0x1c, 0xf9, 0x8f, 0x3f, 0xb9, 0xcd, 0xf8, 0xd2, 0xf9, 0x91, + 0x8f, 0x79, 0xcb, 0x9b, 0x30, 0xcb, 0x95, 0x15, 0xfa, 0xe8, 0x88, 0x6d, 0x6c, 0xd0, 0x91, 0xa7, + 0x6a, 0xc5, 0x5f, 0xfc, 0x26, 0x5d, 0xbe, 0xe5, 0x19, 0x0e, 0x25, 0x6d, 0x6c, 0xef, 0x53, 0x96, + 0xe1, 0x44, 0x84, 0x8f, 0x4d, 0x52, 0xec, 0x8c, 0x60, 0xfc, 0x17, 0x9c, 0x71, 0x36, 0xc4, 0xd8, + 0xe4, 0xd0, 0x72, 0x15, 0xa6, 0x8f, 0xc3, 0xf5, 0x2f, 0x39, 0x57, 0x0e, 0x87, 0x49, 0x56, 0xa1, + 0x40, 0x49, 0xb4, 0xae, 0xeb, 0x59, 0x1d, 0x9a, 0x01, 0x8f, 0xa6, 0xf9, 0x57, 0xdf, 0x64, 0xb3, + 0x26, 0x4f, 0x60, 0x55, 0x1f, 0x55, 0x2e, 0x03, 0x7d, 0x5a, 0xd6, 0xc2, 0x9a, 0x31, 0x82, 0xe1, + 0xab, 0xdc, 0x10, 0x5f, 0xbf, 0x7c, 0x1d, 0xe6, 0xc8, 0xff, 0x34, 0x41, 0x85, 0x2d, 0x19, 0x7d, + 0x04, 0x57, 0xfc, 0x8d, 0x8f, 0xb0, 0x89, 0x39, 0xeb, 0x13, 0x84, 0x6c, 0x0a, 0x8d, 0x62, 0x1b, + 0x7b, 0x1e, 0x76, 0x5c, 0x45, 0x35, 0x06, 0x99, 0x17, 0x3a, 0xc3, 0x28, 0xfe, 0xcc, 0x77, 0xa2, + 0xa3, 0xb8, 0xca, 0x90, 0x2b, 0x86, 0x51, 0xde, 0x81, 0x53, 0x03, 0xa2, 0x62, 0x0c, 0xce, 0x4f, + 0x72, 0xce, 0xb9, 0xbe, 0xc8, 0x20, 0xb4, 0x0d, 0x10, 0x72, 0x7f, 0x2c, 0xc7, 0xe0, 0xfc, 0x59, + 0xce, 0x89, 0x38, 0x56, 0x0c, 0x29, 0x61, 0xbc, 0x06, 0x33, 0x37, 0xb1, 0xb3, 0x6b, 0xb9, 0xfc, + 0xdc, 0x68, 0x0c, 0xba, 0x4f, 0x71, 0xba, 0x02, 0x07, 0xd2, 0x83, 0x24, 0xc2, 0x75, 0x19, 0xd2, + 0x7b, 0xaa, 0x86, 0xc7, 0xa0, 0xb8, 0xcb, 0x29, 0xa6, 0x88, 0x3e, 0x81, 0xae, 0x40, 0xae, 0x6d, + 0xf1, 0x35, 0x6a, 0x34, 0xfc, 0xd3, 0x1c, 0x9e, 0x15, 0x18, 0x4e, 0x61, 0x5b, 0x76, 0xd7, 0x20, + 0x0b, 0xd8, 0x68, 0x8a, 0xbf, 0x2e, 0x28, 0x04, 0x86, 0x53, 0x1c, 0xc3, 0xad, 0xef, 0x08, 0x0a, + 0x37, 0xe4, 0xcf, 0x97, 0x20, 0x6b, 0x99, 0xc6, 0xa1, 0x65, 0x8e, 0x63, 0xc4, 0x67, 0x38, 0x03, + 0x70, 0x08, 0x21, 0xb8, 0x02, 0x99, 0x71, 0x07, 0xe2, 0x6f, 0x7c, 0x47, 0x4c, 0x0f, 0x31, 0x02, + 0xab, 0x50, 0x10, 0x09, 0x4a, 0xb7, 0xcc, 0x31, 0x28, 0xfe, 0x26, 0xa7, 0xc8, 0x87, 0x60, 0xbc, + 0x1b, 0x1e, 0x76, 0xbd, 0x36, 0x1e, 0x87, 0xe4, 0x73, 0xa2, 0x1b, 0x1c, 0xc2, 0x5d, 0xb9, 0x8b, + 0x4d, 0x6d, 0x7f, 0x3c, 0x86, 0x5f, 0x10, 0xae, 0x14, 0x18, 0x42, 0x51, 0x85, 0xe9, 0x8e, 0xea, + 0xb8, 0xfb, 0xaa, 0x31, 0xd6, 0x70, 0xfc, 0x2d, 0xce, 0x91, 0xf3, 0x41, 0xdc, 0x23, 0x5d, 0xf3, + 0x38, 0x34, 0x9f, 0x17, 0x1e, 0x09, 0xc1, 0xf8, 0xd4, 0x73, 0x3d, 0x7a, 0xc8, 0x76, 0x1c, 0xb6, + 0xbf, 0x2d, 0xa6, 0x1e, 0xc3, 0x6e, 0x84, 0x19, 0xaf, 0x40, 0xc6, 0xd5, 0xdf, 0x1a, 0x8b, 0xe6, + 0x0b, 0x62, 0xa4, 0x29, 0x80, 0x80, 0x5f, 0x87, 0xd3, 0x03, 0x97, 0x89, 0x31, 0xc8, 0xfe, 0x0e, + 0x27, 0x3b, 0x39, 0x60, 0xa9, 0xe0, 0x29, 0xe1, 0xb8, 0x94, 0x7f, 0x57, 0xa4, 0x04, 0xdc, 0xc3, + 0xd5, 0x20, 0xbb, 0x06, 0x57, 0xdd, 0x3b, 0x9e, 0xd7, 0xfe, 0x9e, 0xf0, 0x1a, 0xc3, 0x46, 0xbc, + 0xb6, 0x0d, 0x27, 0x39, 0xe3, 0xf1, 0xc6, 0xf5, 0xef, 0x8b, 0xc4, 0xca, 0xd0, 0x3b, 0xd1, 0xd1, + 0xfd, 0x61, 0x98, 0xf7, 0xdd, 0x29, 0xca, 0x53, 0x57, 0xe9, 0xa8, 0xf6, 0x18, 0xcc, 0xbf, 0xc8, + 0x99, 0x45, 0xc6, 0xf7, 0xeb, 0x5b, 0x77, 0x43, 0xb5, 0x09, 0xf9, 0x0d, 0x28, 0x0a, 0xf2, 0xae, + 0xe9, 0x60, 0xcd, 0x6a, 0x9b, 0xfa, 0x5b, 0xb8, 0x35, 0x06, 0xf5, 0x2f, 0xf5, 0x0c, 0xd5, 0x4e, + 0x08, 0x4e, 0x98, 0xd7, 0x40, 0xf2, 0x6b, 0x15, 0x45, 0xef, 0xd8, 0x96, 0xe3, 0x8d, 0x60, 0xfc, + 0xa2, 0x18, 0x29, 0x1f, 0xb7, 0x46, 0x61, 0xe5, 0x3a, 0xb0, 0x27, 0xcf, 0xe3, 0x86, 0xe4, 0x97, + 0x38, 0xd1, 0x74, 0x80, 0xe2, 0x89, 0x43, 0xb3, 0x3a, 0xb6, 0xea, 0x8c, 0x93, 0xff, 0xfe, 0x81, + 0x48, 0x1c, 0x1c, 0xc2, 0x13, 0x07, 0xa9, 0xe8, 0xc8, 0x6a, 0x3f, 0x06, 0xc3, 0x97, 0x45, 0xe2, + 0x10, 0x18, 0x4e, 0x21, 0x0a, 0x86, 0x31, 0x28, 0x7e, 0x59, 0x50, 0x08, 0x0c, 0xa1, 0x78, 0x35, + 0x58, 0x68, 0x1d, 0xdc, 0xd6, 0x5d, 0xcf, 0x61, 0x45, 0xf1, 0xd1, 0x54, 0xbf, 0xf2, 0x9d, 0x68, + 0x11, 0x26, 0x87, 0xa0, 0x24, 0x13, 0xf1, 0x63, 0x57, 0xba, 0x67, 0x1a, 0x6d, 0xd8, 0xaf, 0x8a, + 0x4c, 0x14, 0x82, 0x11, 0xdb, 0x42, 0x15, 0x22, 0x71, 0xbb, 0x46, 0x76, 0x0a, 0x63, 0xd0, 0xfd, + 0xc3, 0x1e, 0xe3, 0x9a, 0x02, 0x4b, 0x38, 0x43, 0xf5, 0x4f, 0xd7, 0x3c, 0xc0, 0x87, 0x63, 0x45, + 0xe7, 0xaf, 0xf5, 0xd4, 0x3f, 0x3b, 0x0c, 0xc9, 0x72, 0x48, 0xa1, 0xa7, 0x9e, 0x42, 0xa3, 0xde, + 0x33, 0x2a, 0xfe, 0xf8, 0xfb, 0xbc, 0xbf, 0xd1, 0x72, 0xaa, 0xbc, 0x4e, 0x82, 0x3c, 0x5a, 0xf4, + 0x8c, 0x26, 0xfb, 0xc8, 0xfb, 0x7e, 0x9c, 0x47, 0x6a, 0x9e, 0xf2, 0x55, 0x98, 0x8e, 0x14, 0x3c, + 0xa3, 0xa9, 0xfe, 0x2c, 0xa7, 0xca, 0x85, 0xeb, 0x9d, 0xf2, 0x05, 0x48, 0x92, 0xe2, 0x65, 0x34, + 0xfc, 0xcf, 0x71, 0x38, 0x55, 0x2f, 0x7f, 0x08, 0xd2, 0xa2, 0x68, 0x19, 0x0d, 0xfd, 0xf3, 0x1c, + 0xea, 0x43, 0x08, 0x5c, 0x14, 0x2c, 0xa3, 0xe1, 0x7f, 0x41, 0xc0, 0x05, 0x84, 0xc0, 0xc7, 0x77, + 0xe1, 0x57, 0xfe, 0x62, 0x92, 0x2f, 0x3a, 0xc2, 0x77, 0x57, 0x60, 0x8a, 0x57, 0x2a, 0xa3, 0xd1, + 0x1f, 0xe3, 0x37, 0x17, 0x88, 0xf2, 0x25, 0x98, 0x1c, 0xd3, 0xe1, 0x7f, 0x89, 0x43, 0x99, 0x7e, + 0xb9, 0x0a, 0xd9, 0x50, 0x75, 0x32, 0x1a, 0xfe, 0x13, 0x1c, 0x1e, 0x46, 0x11, 0xd3, 0x79, 0x75, + 0x32, 0x9a, 0xe0, 0x2f, 0x0b, 0xd3, 0x39, 0x82, 0xb8, 0x4d, 0x14, 0x26, 0xa3, 0xd1, 0x1f, 0x17, + 0x5e, 0x17, 0x90, 0xf2, 0x4b, 0x90, 0xf1, 0x17, 0x9b, 0xd1, 0xf8, 0x9f, 0xe4, 0xf8, 0x00, 0x43, + 0x3c, 0x10, 0x5a, 0xec, 0x46, 0x53, 0xfc, 0x15, 0xe1, 0x81, 0x10, 0x8a, 0x4c, 0xa3, 0xde, 0x02, + 0x66, 0x34, 0xd3, 0x4f, 0x89, 0x69, 0xd4, 0x53, 0xbf, 0x90, 0xd1, 0xa4, 0x39, 0x7f, 0x34, 0xc5, + 0x5f, 0x15, 0xa3, 0x49, 0xf5, 0x89, 0x19, 0xbd, 0x15, 0xc1, 0x68, 0x8e, 0x9f, 0x16, 0x66, 0xf4, + 0x14, 0x04, 0xe5, 0x06, 0xa0, 0xfe, 0x6a, 0x60, 0x34, 0xdf, 0x27, 0x38, 0xdf, 0x4c, 0x5f, 0x31, + 0x50, 0x7e, 0x0d, 0x4e, 0x0e, 0xae, 0x04, 0x46, 0xb3, 0xfe, 0xcc, 0xfb, 0x3d, 0x7b, 0xb7, 0x70, + 0x21, 0x50, 0xde, 0x0e, 0x96, 0x94, 0x70, 0x15, 0x30, 0x9a, 0xf6, 0x93, 0xef, 0x47, 0x13, 0x77, + 0xb8, 0x08, 0x28, 0xaf, 0x00, 0x04, 0x0b, 0xf0, 0x68, 0xae, 0x4f, 0x71, 0xae, 0x10, 0x88, 0x4c, + 0x0d, 0xbe, 0xfe, 0x8e, 0xc6, 0xdf, 0x15, 0x53, 0x83, 0x23, 0xc8, 0xd4, 0x10, 0x4b, 0xef, 0x68, + 0xf4, 0xa7, 0xc5, 0xd4, 0x10, 0x10, 0x12, 0xd9, 0xa1, 0xd5, 0x6d, 0x34, 0xc3, 0x67, 0x44, 0x64, + 0x87, 0x50, 0xe5, 0x4d, 0x98, 0xe9, 0x5b, 0x10, 0x47, 0x53, 0xfd, 0x1c, 0xa7, 0x92, 0x7a, 0xd7, + 0xc3, 0xf0, 0xe2, 0xc5, 0x17, 0xc3, 0xd1, 0x6c, 0x9f, 0xed, 0x59, 0xbc, 0xf8, 0x5a, 0x58, 0xbe, + 0x02, 0x69, 0xb3, 0x6b, 0x18, 0x64, 0xf2, 0xa0, 0xa3, 0xdf, 0x0d, 0x2c, 0xfe, 0xd7, 0xef, 0x72, + 0xef, 0x08, 0x40, 0xf9, 0x02, 0x4c, 0xe2, 0xce, 0x2e, 0x6e, 0x8d, 0x42, 0x7e, 0xfb, 0xbb, 0x22, + 0x61, 0x12, 0xed, 0xf2, 0x4b, 0x00, 0xec, 0x68, 0x84, 0x3e, 0x0c, 0x1c, 0x81, 0xfd, 0x6f, 0xdf, + 0xe5, 0x2f, 0xe3, 0x04, 0x90, 0x80, 0x80, 0xbd, 0xda, 0x73, 0x34, 0xc1, 0x77, 0xa2, 0x04, 0x74, + 0x44, 0x2e, 0xc3, 0xd4, 0x9b, 0xae, 0x65, 0x7a, 0x6a, 0x7b, 0x14, 0xfa, 0xbf, 0x73, 0xb4, 0xd0, + 0x27, 0x0e, 0xeb, 0x58, 0x0e, 0xf6, 0xd4, 0xb6, 0x3b, 0x0a, 0xfb, 0x3f, 0x38, 0xd6, 0x07, 0x10, + 0xb0, 0xa6, 0xba, 0xde, 0x38, 0xfd, 0xfe, 0x3d, 0x01, 0x16, 0x00, 0x62, 0x34, 0xf9, 0xff, 0x00, + 0x1f, 0x8e, 0xc2, 0xfe, 0xbe, 0x30, 0x9a, 0xeb, 0x97, 0x3f, 0x04, 0x19, 0xf2, 0x2f, 0x7b, 0xc3, + 0x6e, 0x04, 0xf8, 0x7f, 0x72, 0x70, 0x80, 0x20, 0x77, 0x76, 0xbd, 0x96, 0xa7, 0x8f, 0x76, 0xf6, + 0x1f, 0xf0, 0x91, 0x16, 0xfa, 0xe5, 0x15, 0xc8, 0xba, 0x5e, 0xab, 0xd5, 0xe5, 0xf5, 0xe9, 0x08, + 0xf8, 0xff, 0xfa, 0xae, 0x7f, 0x64, 0xe1, 0x63, 0xc8, 0x68, 0xdf, 0x3a, 0xf0, 0x6c, 0x8b, 0x3e, + 0xf0, 0x18, 0xc5, 0xf0, 0x3e, 0x67, 0x08, 0x41, 0xca, 0x55, 0xc8, 0x91, 0xbe, 0x38, 0xd8, 0xc6, + 0xf4, 0xe9, 0xd4, 0x08, 0x8a, 0xff, 0xcd, 0x1d, 0x10, 0x01, 0x55, 0x7e, 0xe4, 0xab, 0xef, 0x2d, + 0xc4, 0xbe, 0xfe, 0xde, 0x42, 0xec, 0x77, 0xdf, 0x5b, 0x88, 0x7d, 0xfc, 0x1b, 0x0b, 0x13, 0x5f, + 0xff, 0xc6, 0xc2, 0xc4, 0x6f, 0x7f, 0x63, 0x61, 0x62, 0xf0, 0x29, 0x31, 0xac, 0x5a, 0xab, 0x16, + 0x3b, 0x1f, 0x7e, 0xa3, 0xd4, 0xd6, 0xbd, 0xfd, 0xee, 0xee, 0xb2, 0x66, 0x75, 0xe8, 0x31, 0x6e, + 0x70, 0x5a, 0xeb, 0x6f, 0x72, 0xe0, 0x7b, 0x31, 0xb2, 0x61, 0x8e, 0x9e, 0xe5, 0xaa, 0xe6, 0xe1, + 0xb0, 0x6f, 0x75, 0x2e, 0x42, 0x62, 0xc5, 0x3c, 0x44, 0xa7, 0x59, 0x76, 0x53, 0xba, 0x8e, 0xc1, + 0xdf, 0xf1, 0x9a, 0x22, 0xd7, 0x3b, 0x8e, 0x81, 0xe6, 0x82, 0x17, 0x31, 0x63, 0x67, 0x73, 0xfc, + 0xed, 0xca, 0xca, 0x4f, 0xc4, 0x8e, 0xd7, 0x8d, 0xf4, 0x8a, 0x79, 0x48, 0x7b, 0xd1, 0x88, 0xbd, + 0xf1, 0xf4, 0xc8, 0x43, 0xee, 0x03, 0xd3, 0xba, 0x65, 0x12, 0xb3, 0xed, 0x5d, 0x71, 0xc0, 0xbd, + 0xd0, 0x7b, 0xc0, 0xfd, 0x1a, 0x36, 0x8c, 0x57, 0x88, 0xde, 0x36, 0x81, 0xec, 0xa6, 0xd8, 0xeb, + 0xc4, 0xf0, 0x53, 0x71, 0x58, 0xe8, 0x3b, 0xcb, 0xe6, 0x11, 0x30, 0xcc, 0x09, 0x65, 0x48, 0xd7, + 0x44, 0x60, 0x15, 0x61, 0xca, 0xc5, 0x9a, 0x65, 0xb6, 0x5c, 0xea, 0x88, 0x84, 0x2c, 0x2e, 0x89, + 0x23, 0x4c, 0xd5, 0xb4, 0x5c, 0xfe, 0x96, 0x24, 0xbb, 0xa8, 0xfc, 0xec, 0x31, 0x1d, 0x31, 0x2d, + 0xee, 0x24, 0xbc, 0xf1, 0xdc, 0x98, 0xde, 0x10, 0x9d, 0x88, 0x1c, 0xfb, 0x8f, 0xeb, 0x95, 0x9f, + 0x8e, 0xc3, 0x62, 0xaf, 0x57, 0xc8, 0xb4, 0x72, 0x3d, 0xb5, 0x63, 0x0f, 0x73, 0xcb, 0x15, 0xc8, + 0x6c, 0x0b, 0x9d, 0x63, 0xfb, 0xe5, 0xee, 0x31, 0xfd, 0x92, 0xf7, 0x6f, 0x25, 0x1c, 0x73, 0x7e, + 0x4c, 0xc7, 0xf8, 0xfd, 0xb8, 0x27, 0xcf, 0xfc, 0xdf, 0x14, 0x9c, 0xd6, 0x2c, 0xb7, 0x63, 0xb9, + 0x0a, 0x7b, 0x3e, 0xc2, 0x2e, 0xb8, 0x4f, 0x72, 0xe1, 0xa6, 0xd1, 0x0f, 0x49, 0x4a, 0xaf, 0xc0, + 0xec, 0x1a, 0x49, 0x15, 0x64, 0x0b, 0x14, 0x3c, 0xde, 0x19, 0xf8, 0x22, 0xe9, 0x52, 0xa4, 0xda, + 0xe7, 0x8f, 0x97, 0xc2, 0xa2, 0xd2, 0x8f, 0xc7, 0x40, 0x6a, 0x6a, 0xaa, 0xa1, 0x3a, 0x7f, 0x58, + 0x2a, 0x74, 0x09, 0x80, 0x7e, 0x80, 0x14, 0x7c, 0x31, 0x94, 0x3f, 0x5f, 0x5c, 0x0e, 0x77, 0x6e, + 0x99, 0xdd, 0x89, 0x7e, 0x8e, 0x90, 0xa1, 0xba, 0xe4, 0xdf, 0x27, 0x6f, 0x00, 0x04, 0x0d, 0xe8, + 0x01, 0x38, 0xd5, 0xac, 0xae, 0xac, 0xaf, 0xc8, 0x0a, 0x7b, 0xb3, 0x7d, 0xb3, 0xd9, 0xa8, 0x57, + 0xd7, 0xae, 0xae, 0xd5, 0x6b, 0xd2, 0x04, 0x3a, 0x09, 0x28, 0xdc, 0xe8, 0xbf, 0x94, 0x72, 0x02, + 0x66, 0xc2, 0x72, 0xf6, 0x7a, 0x7c, 0x9c, 0x94, 0x89, 0x7a, 0xc7, 0x36, 0x30, 0x7d, 0xee, 0xa7, + 0xe8, 0xc2, 0x6b, 0xa3, 0x2b, 0x90, 0x5f, 0xff, 0x37, 0xec, 0x95, 0xe9, 0xd9, 0x00, 0xee, 0xfb, + 0xbc, 0xbc, 0x0e, 0x33, 0xaa, 0xa6, 0x61, 0x3b, 0x42, 0x39, 0x22, 0x4f, 0x13, 0x42, 0xfa, 0x24, + 0x93, 0x23, 0x03, 0xb6, 0x4b, 0x90, 0x72, 0x69, 0xef, 0x47, 0x51, 0x7c, 0x8d, 0x53, 0x70, 0xf5, + 0xb2, 0x09, 0x33, 0xa4, 0xec, 0x53, 0x1d, 0x1c, 0x32, 0xe3, 0xe8, 0x43, 0x86, 0x7f, 0xf4, 0xc5, + 0x67, 0xe9, 0x73, 0xcd, 0x87, 0xa3, 0xc3, 0x32, 0x20, 0x9c, 0x64, 0x89, 0x73, 0x07, 0x86, 0x62, + 0xc8, 0x8b, 0xfb, 0x71, 0x83, 0x8f, 0xbe, 0xd9, 0x3f, 0xe6, 0x37, 0x5b, 0x18, 0x14, 0x03, 0xa1, + 0x3b, 0x4d, 0x73, 0x56, 0xd6, 0x50, 0xa9, 0x0f, 0x9b, 0xd3, 0x6f, 0x3c, 0x15, 0x5a, 0x9a, 0x18, + 0x25, 0xff, 0xf3, 0x0c, 0x65, 0xbe, 0x12, 0xbe, 0x8d, 0x3f, 0xf7, 0x7e, 0x2b, 0x01, 0x0b, 0x5c, + 0x79, 0x57, 0x75, 0xf1, 0xb9, 0x9b, 0xcf, 0xed, 0x62, 0x4f, 0x7d, 0xee, 0x9c, 0x66, 0xe9, 0x22, + 0x57, 0xcf, 0xf2, 0xe9, 0x48, 0xda, 0x97, 0x79, 0xfb, 0xfc, 0xc0, 0xa7, 0x99, 0xf3, 0xc3, 0xa7, + 0x71, 0x69, 0x07, 0x92, 0x55, 0x4b, 0x37, 0x49, 0xaa, 0x6a, 0x61, 0xd3, 0xea, 0xf0, 0xd9, 0xc3, + 0x2e, 0xd0, 0x73, 0x90, 0x52, 0x3b, 0x56, 0xd7, 0xf4, 0xd8, 0xcc, 0xa9, 0x9c, 0xfe, 0xea, 0xbb, + 0x8b, 0x13, 0xff, 0xf6, 0xdd, 0xc5, 0xc4, 0x9a, 0xe9, 0xfd, 0xe6, 0x97, 0x9e, 0x01, 0x4e, 0xb5, + 0x66, 0x7a, 0x32, 0x57, 0x2c, 0x27, 0xbf, 0xf5, 0xce, 0x62, 0xac, 0x74, 0x03, 0xa6, 0x6a, 0x58, + 0xbb, 0x17, 0xe6, 0x1a, 0xd6, 0x42, 0xcc, 0x35, 0xac, 0xf5, 0x30, 0x5f, 0x82, 0xf4, 0x9a, 0xe9, + 0xb1, 0xb7, 0xd0, 0x9f, 0x82, 0x84, 0x6e, 0xb2, 0x17, 0x1b, 0x8f, 0xb4, 0x8d, 0x68, 0x11, 0x60, + 0x0d, 0x6b, 0x3e, 0xb0, 0x85, 0xb5, 0x5e, 0x60, 0xff, 0xad, 0x89, 0x56, 0xa5, 0xf6, 0xdb, 0xff, + 0x69, 0x61, 0xe2, 0xed, 0xf7, 0x16, 0x26, 0x86, 0x0e, 0x71, 0x69, 0xe8, 0x10, 0xbb, 0xad, 0x03, + 0x96, 0x91, 0xfd, 0x91, 0xfd, 0x7c, 0x12, 0x1e, 0xa2, 0x1f, 0x27, 0x39, 0x1d, 0xdd, 0xf4, 0xce, + 0x69, 0xce, 0xa1, 0xed, 0xd1, 0x72, 0xc5, 0xda, 0xe3, 0x03, 0x3b, 0x13, 0x34, 0x2f, 0xb3, 0xe6, + 0xc1, 0xc3, 0x5a, 0xda, 0x83, 0xc9, 0x06, 0xc1, 0x11, 0x17, 0x7b, 0x96, 0xa7, 0x1a, 0x7c, 0xfd, + 0x61, 0x17, 0x44, 0xca, 0x3e, 0x68, 0x8a, 0x33, 0xa9, 0x2e, 0xbe, 0x65, 0x32, 0xb0, 0xba, 0xc7, + 0xde, 0x0b, 0x4f, 0xd0, 0xc2, 0x25, 0x4d, 0x04, 0xf4, 0x15, 0xf0, 0x39, 0x98, 0x54, 0xbb, 0xec, + 0x05, 0x86, 0x04, 0xa9, 0x68, 0xe8, 0x45, 0xe9, 0x15, 0x98, 0xe2, 0x8f, 0x51, 0x91, 0x04, 0x89, + 0x03, 0x7c, 0x48, 0xef, 0x93, 0x93, 0xc9, 0xbf, 0x68, 0x19, 0x26, 0xa9, 0xf1, 0xfc, 0x83, 0x97, + 0xe2, 0x72, 0x9f, 0xf5, 0xcb, 0xd4, 0x48, 0x99, 0xa9, 0x95, 0xae, 0x41, 0xba, 0x66, 0x75, 0x74, + 0xd3, 0x8a, 0xb2, 0x65, 0x18, 0x1b, 0xb5, 0xd9, 0xee, 0xf2, 0xa8, 0x90, 0xd9, 0x05, 0x3a, 0x09, + 0x29, 0xf6, 0x9d, 0x00, 0x7f, 0x09, 0x83, 0x5f, 0x95, 0xaa, 0x30, 0x45, 0xb9, 0xb7, 0x6c, 0x92, + 0xfc, 0xfd, 0x57, 0x32, 0x33, 0xfc, 0xab, 0x31, 0x4e, 0x1f, 0x0f, 0x8c, 0x45, 0x90, 0x6c, 0xa9, + 0x9e, 0xca, 0xfb, 0x4d, 0xff, 0x2f, 0x7d, 0x18, 0xd2, 0x9c, 0xc4, 0x45, 0xe7, 0x21, 0x61, 0xd9, + 0x2e, 0x7f, 0x8d, 0x62, 0x7e, 0x58, 0x57, 0xb6, 0xec, 0x4a, 0x92, 0xc4, 0x8c, 0x4c, 0x94, 0x2b, + 0xf2, 0xd0, 0xb0, 0x78, 0x31, 0x14, 0x16, 0xa1, 0x21, 0x0f, 0xfd, 0xcb, 0x86, 0xb4, 0x2f, 0x1c, + 0xfc, 0x60, 0xf9, 0x4c, 0x1c, 0x16, 0x42, 0xad, 0x37, 0xb1, 0xe3, 0xea, 0x96, 0xc9, 0x22, 0x8a, + 0x47, 0x0b, 0x0a, 0x19, 0xc9, 0xdb, 0x87, 0x84, 0xcb, 0x87, 0x20, 0xb1, 0x62, 0xdb, 0x68, 0x1e, + 0xd2, 0xf4, 0x5a, 0xb3, 0x58, 0xbc, 0x24, 0x65, 0xff, 0x9a, 0xb4, 0xb9, 0xd6, 0x9e, 0x77, 0x4b, + 0x75, 0xfc, 0x4f, 0xe9, 0xc4, 0x75, 0xe9, 0x32, 0x64, 0xaa, 0x96, 0xe9, 0x62, 0xd3, 0xed, 0xd2, + 0xca, 0x66, 0xd7, 0xb0, 0xb4, 0x03, 0xce, 0xc0, 0x2e, 0x88, 0xc3, 0x55, 0xdb, 0xa6, 0xc8, 0xa4, + 0x4c, 0xfe, 0x65, 0x73, 0xb6, 0xd2, 0x1c, 0xea, 0xa2, 0xcb, 0xc7, 0x77, 0x11, 0xef, 0xa4, 0xef, + 0xa3, 0xef, 0xc5, 0xe0, 0xc1, 0xfe, 0x09, 0x75, 0x80, 0x0f, 0xdd, 0xe3, 0xce, 0xa7, 0x1b, 0x90, + 0x69, 0xd0, 0xef, 0xd9, 0x5f, 0xc1, 0x87, 0x68, 0x1e, 0xa6, 0x70, 0xeb, 0xfc, 0x85, 0x0b, 0xcf, + 0x5d, 0x66, 0xd1, 0xfe, 0xf2, 0x84, 0x2c, 0x04, 0x68, 0x01, 0x32, 0x2e, 0xd6, 0xec, 0xf3, 0x17, + 0x2e, 0x1e, 0x3c, 0xc7, 0xc2, 0xeb, 0xe5, 0x09, 0x39, 0x10, 0x95, 0xd3, 0xa4, 0xd7, 0xdf, 0xfa, + 0xcc, 0x62, 0xac, 0x32, 0x09, 0x09, 0xb7, 0xdb, 0xf9, 0x40, 0x63, 0xe4, 0x93, 0x93, 0xb0, 0x14, + 0x46, 0xd2, 0xfa, 0xef, 0xa6, 0x6a, 0xe8, 0x2d, 0x35, 0xf8, 0x25, 0x02, 0x29, 0xe4, 0x03, 0xaa, + 0x31, 0x64, 0xa5, 0x38, 0xd2, 0x93, 0xa5, 0x5f, 0x8a, 0x41, 0xee, 0xba, 0x60, 0x6e, 0x62, 0x0f, + 0x5d, 0x01, 0xf0, 0xef, 0x24, 0xa6, 0xcd, 0x03, 0xcb, 0xbd, 0xf7, 0x5a, 0xf6, 0x31, 0x72, 0x48, + 0x1d, 0x5d, 0xa2, 0x81, 0x68, 0x5b, 0x2e, 0xff, 0xbc, 0x6a, 0x04, 0xd4, 0x57, 0x46, 0x4f, 0x03, + 0xa2, 0x19, 0x4e, 0xb9, 0x69, 0x79, 0xba, 0xd9, 0x56, 0x6c, 0xeb, 0x16, 0xff, 0x68, 0x35, 0x21, + 0x4b, 0xb4, 0xe5, 0x3a, 0x6d, 0x68, 0x10, 0x39, 0x31, 0x3a, 0xe3, 0xb3, 0x90, 0x62, 0x5d, 0x6d, + 0xb5, 0x1c, 0xec, 0xba, 0x3c, 0x89, 0x89, 0x4b, 0x74, 0x05, 0xa6, 0xec, 0xee, 0xae, 0x22, 0x32, + 0x46, 0xf6, 0xfc, 0x83, 0x83, 0xe6, 0xbf, 0x88, 0x0f, 0x9e, 0x01, 0x52, 0x76, 0x77, 0x97, 0x44, + 0xcb, 0xc3, 0x90, 0x1b, 0x60, 0x4c, 0xf6, 0x66, 0x60, 0x07, 0xfd, 0x19, 0x05, 0xde, 0x03, 0xc5, + 0x76, 0x74, 0xcb, 0xd1, 0xbd, 0x43, 0xfa, 0x2e, 0x54, 0x42, 0x96, 0x44, 0x43, 0x83, 0xcb, 0x4b, + 0x07, 0x50, 0x68, 0xd2, 0x22, 0x2e, 0xb0, 0xfc, 0x42, 0x60, 0x5f, 0x6c, 0xb4, 0x7d, 0x43, 0x2d, + 0x8b, 0xf7, 0x59, 0x56, 0x79, 0x75, 0x68, 0x74, 0x5e, 0x3a, 0x7e, 0x74, 0x46, 0x57, 0xbb, 0xdf, + 0x3b, 0x1d, 0x99, 0x9c, 0x2c, 0x38, 0xc3, 0xe9, 0x6b, 0xdc, 0xc0, 0x1c, 0xb5, 0x47, 0x9b, 0x3f, + 0x7a, 0x51, 0x9d, 0x1f, 0x91, 0x46, 0xe7, 0x47, 0x4e, 0xa1, 0xd2, 0x65, 0x98, 0x6e, 0xa8, 0x8e, + 0xd7, 0xc4, 0xde, 0xcb, 0x58, 0x6d, 0x61, 0x27, 0xba, 0xea, 0x4e, 0x8b, 0x55, 0x17, 0x41, 0x92, + 0x2e, 0xad, 0x6c, 0xd5, 0xa1, 0xff, 0x97, 0xf6, 0x21, 0x49, 0xdf, 0x87, 0xf4, 0x57, 0x64, 0x8e, + 0x60, 0x2b, 0x32, 0xc9, 0xa5, 0x87, 0x1e, 0x76, 0xc5, 0x31, 0x02, 0xbd, 0x40, 0x2f, 0x88, 0x75, + 0x35, 0x71, 0xf4, 0xba, 0xca, 0x03, 0x91, 0xaf, 0xae, 0x06, 0x4c, 0x55, 0x48, 0x2a, 0x5e, 0xab, + 0xf9, 0x86, 0xc4, 0x02, 0x43, 0xd0, 0x06, 0x14, 0x6c, 0xd5, 0xf1, 0xe8, 0xa7, 0x21, 0xfb, 0xb4, + 0x17, 0x3c, 0xd6, 0x17, 0xfb, 0x67, 0x5e, 0xa4, 0xb3, 0xfc, 0x2e, 0xd3, 0x76, 0x58, 0x58, 0xfa, + 0xcf, 0x49, 0x48, 0x71, 0x67, 0x7c, 0x08, 0xa6, 0xb8, 0x5b, 0x79, 0x74, 0x3e, 0xb4, 0xdc, 0xbf, + 0x30, 0x2d, 0xfb, 0x0b, 0x08, 0xe7, 0x13, 0x18, 0xf4, 0x38, 0xa4, 0xb5, 0x7d, 0x55, 0x37, 0x15, + 0xbd, 0xc5, 0x0b, 0xc2, 0xec, 0x7b, 0xef, 0x2e, 0x4e, 0x55, 0x89, 0x6c, 0xad, 0x26, 0x4f, 0xd1, + 0xc6, 0xb5, 0x16, 0xa9, 0x04, 0xf6, 0xb1, 0xde, 0xde, 0xf7, 0xf8, 0x0c, 0xe3, 0x57, 0xe8, 0x45, + 0x48, 0x92, 0x80, 0xe0, 0x1f, 0x0e, 0xce, 0xf7, 0x55, 0xf8, 0xfe, 0x16, 0xba, 0x92, 0x26, 0x37, + 0xfe, 0xf8, 0x7f, 0x5c, 0x8c, 0xc9, 0x14, 0x81, 0xaa, 0x30, 0x6d, 0xa8, 0xae, 0xa7, 0xd0, 0x15, + 0x8c, 0xdc, 0x7e, 0x92, 0x52, 0x9c, 0xee, 0x77, 0x08, 0x77, 0x2c, 0x37, 0x3d, 0x4b, 0x50, 0x4c, + 0xd4, 0x42, 0x67, 0x41, 0xa2, 0x24, 0x9a, 0xd5, 0xe9, 0xe8, 0x1e, 0xab, 0xad, 0x52, 0xd4, 0xef, + 0x79, 0x22, 0xaf, 0x52, 0x31, 0xad, 0xb0, 0x1e, 0x80, 0x0c, 0xfd, 0x54, 0x89, 0xaa, 0xb0, 0x97, + 0x70, 0xd3, 0x44, 0x40, 0x1b, 0xcf, 0x40, 0x21, 0xc8, 0x8f, 0x4c, 0x25, 0xcd, 0x58, 0x02, 0x31, + 0x55, 0x7c, 0x16, 0xe6, 0x4c, 0x7c, 0x9b, 0xbe, 0x16, 0x1c, 0xd1, 0xce, 0x50, 0x6d, 0x44, 0xda, + 0xae, 0x47, 0x11, 0x8f, 0x41, 0x5e, 0x13, 0xce, 0x67, 0xba, 0x40, 0x75, 0xa7, 0x7d, 0x29, 0x55, + 0x3b, 0x0d, 0x69, 0xd5, 0xb6, 0x99, 0x42, 0x96, 0xe7, 0x47, 0xdb, 0xa6, 0x4d, 0x4f, 0xc2, 0x0c, + 0xed, 0xa3, 0x83, 0xdd, 0xae, 0xe1, 0x71, 0x92, 0x1c, 0xd5, 0x29, 0x90, 0x06, 0x99, 0xc9, 0xa9, + 0xee, 0x23, 0x30, 0x8d, 0x6f, 0xea, 0x2d, 0x6c, 0x6a, 0x98, 0xe9, 0x4d, 0x53, 0xbd, 0x9c, 0x10, + 0x52, 0xa5, 0x27, 0xc0, 0xcf, 0x7b, 0x8a, 0xc8, 0xc9, 0x79, 0xc6, 0x27, 0xe4, 0x2b, 0x4c, 0x5c, + 0x2a, 0x42, 0xb2, 0xa6, 0x7a, 0x2a, 0x29, 0x30, 0xbc, 0xdb, 0x6c, 0xa1, 0xc9, 0xc9, 0xe4, 0xdf, + 0xd2, 0xb7, 0xe2, 0x90, 0xbc, 0x6e, 0x79, 0x18, 0x3d, 0x1f, 0x2a, 0x00, 0xf3, 0x83, 0xe2, 0xb9, + 0xa9, 0xb7, 0x4d, 0xdc, 0xda, 0x70, 0xdb, 0xa1, 0xdf, 0x15, 0x08, 0xc2, 0x29, 0x1e, 0x09, 0xa7, + 0x39, 0x98, 0x74, 0xac, 0xae, 0xd9, 0x12, 0xef, 0xaf, 0xd2, 0x0b, 0x54, 0x87, 0xb4, 0x1f, 0x25, + 0xc9, 0x51, 0x51, 0x52, 0x20, 0x51, 0x42, 0x62, 0x98, 0x0b, 0xe4, 0xa9, 0x5d, 0x1e, 0x2c, 0x15, + 0xc8, 0xf8, 0xc9, 0x8b, 0x47, 0xdb, 0x78, 0x01, 0x1b, 0xc0, 0xc8, 0x62, 0xe2, 0x8f, 0xbd, 0xef, + 0x3c, 0x16, 0x71, 0x92, 0xdf, 0xc0, 0xbd, 0x17, 0x09, 0x2b, 0xfe, 0x1b, 0x07, 0x53, 0xb4, 0x5f, + 0x41, 0x58, 0xb1, 0xdf, 0x39, 0x78, 0x10, 0x32, 0xae, 0xde, 0x36, 0x55, 0xaf, 0xeb, 0x60, 0x1e, + 0x79, 0x81, 0xa0, 0xf4, 0x95, 0x18, 0xa4, 0x58, 0x24, 0x87, 0xfc, 0x16, 0x1b, 0xec, 0xb7, 0xf8, + 0x30, 0xbf, 0x25, 0xee, 0xdd, 0x6f, 0x2b, 0x00, 0xbe, 0x31, 0x2e, 0xff, 0xf4, 0x7c, 0x40, 0xc5, + 0xc0, 0x4c, 0x6c, 0xea, 0x6d, 0x3e, 0x51, 0x43, 0xa0, 0xd2, 0x7f, 0x88, 0x91, 0x22, 0x96, 0xb7, + 0xa3, 0x15, 0x98, 0x16, 0x76, 0x29, 0x7b, 0x86, 0xda, 0xe6, 0xb1, 0xf3, 0xd0, 0x50, 0xe3, 0xae, + 0x1a, 0x6a, 0x5b, 0xce, 0x72, 0x7b, 0xc8, 0xc5, 0xe0, 0x71, 0x88, 0x0f, 0x19, 0x87, 0xc8, 0xc0, + 0x27, 0xee, 0x6d, 0xe0, 0x23, 0x43, 0x94, 0xec, 0x1d, 0xa2, 0x2f, 0xc6, 0xe9, 0x66, 0xc6, 0xb6, + 0x5c, 0xd5, 0xf8, 0x7e, 0xcc, 0x88, 0x07, 0x20, 0x63, 0x5b, 0x86, 0xc2, 0x5a, 0xd8, 0x7b, 0xdd, + 0x69, 0xdb, 0x32, 0xe4, 0xbe, 0x61, 0x9f, 0xbc, 0x4f, 0xd3, 0x25, 0x75, 0x1f, 0xbc, 0x36, 0xd5, + 0xeb, 0x35, 0x07, 0x72, 0xcc, 0x15, 0x7c, 0x2d, 0x7b, 0x96, 0xf8, 0x80, 0x2e, 0x8e, 0xb1, 0xfe, + 0xb5, 0x97, 0x99, 0xcd, 0x34, 0x65, 0xae, 0x47, 0x10, 0x2c, 0xf5, 0x0f, 0xda, 0x05, 0x87, 0xc3, + 0x52, 0xe6, 0x7a, 0xa5, 0xbf, 0x16, 0x03, 0x58, 0x27, 0x9e, 0xa5, 0xfd, 0x25, 0xab, 0x90, 0x4b, + 0x4d, 0x50, 0x22, 0x77, 0x5e, 0x18, 0x36, 0x68, 0xfc, 0xfe, 0x39, 0x37, 0x6c, 0x77, 0x15, 0xa6, + 0x83, 0x60, 0x74, 0xb1, 0x30, 0x66, 0xe1, 0x88, 0xaa, 0xba, 0x89, 0x3d, 0x39, 0x77, 0x33, 0x74, + 0x55, 0xfa, 0x67, 0x31, 0xc8, 0x50, 0x9b, 0x36, 0xb0, 0xa7, 0x46, 0xc6, 0x30, 0x76, 0xef, 0x63, + 0xf8, 0x10, 0x00, 0xa3, 0x71, 0xf5, 0xb7, 0x30, 0x8f, 0xac, 0x0c, 0x95, 0x34, 0xf5, 0xb7, 0x30, + 0xba, 0xe8, 0x3b, 0x3c, 0x71, 0xb4, 0xc3, 0x45, 0xd5, 0xcd, 0xdd, 0x7e, 0x0a, 0xa6, 0xe8, 0x4f, + 0x35, 0xdd, 0x76, 0x79, 0x21, 0x9d, 0x32, 0xbb, 0x9d, 0xed, 0xdb, 0x6e, 0xe9, 0x4d, 0x98, 0xda, + 0xbe, 0xcd, 0xce, 0x46, 0x1e, 0x80, 0x8c, 0x63, 0x59, 0x7c, 0x4d, 0x66, 0xb5, 0x50, 0x9a, 0x08, + 0xe8, 0x12, 0x24, 0xce, 0x03, 0xe2, 0xc1, 0x79, 0x40, 0x70, 0xa0, 0x91, 0x18, 0xeb, 0x40, 0xe3, + 0xc9, 0xdf, 0x8a, 0x41, 0x36, 0x94, 0x1f, 0xd0, 0x73, 0x70, 0xa2, 0xb2, 0xbe, 0x55, 0x7d, 0x45, + 0x59, 0xab, 0x29, 0x57, 0xd7, 0x57, 0x56, 0x83, 0x2f, 0x97, 0xe6, 0x4f, 0xde, 0xb9, 0xbb, 0x84, + 0x42, 0xba, 0x3b, 0x26, 0x3d, 0xa7, 0x47, 0xe7, 0x60, 0x2e, 0x0a, 0x59, 0xa9, 0x34, 0xeb, 0x9b, + 0xdb, 0x52, 0x6c, 0xfe, 0xc4, 0x9d, 0xbb, 0x4b, 0x33, 0x21, 0xc4, 0xca, 0xae, 0x8b, 0x4d, 0xaf, + 0x1f, 0x50, 0xdd, 0xda, 0xd8, 0x58, 0xdb, 0x96, 0xe2, 0x7d, 0x00, 0x9e, 0xb0, 0x9f, 0x80, 0x99, + 0x28, 0x60, 0x73, 0x6d, 0x5d, 0x4a, 0xcc, 0xa3, 0x3b, 0x77, 0x97, 0xf2, 0x21, 0xed, 0x4d, 0xdd, + 0x98, 0x4f, 0x7f, 0xf4, 0xb3, 0x0b, 0x13, 0xbf, 0xf0, 0xf3, 0x0b, 0x31, 0xd2, 0xb3, 0xe9, 0x48, + 0x8e, 0x40, 0x4f, 0xc3, 0xa9, 0xe6, 0xda, 0xea, 0x66, 0xbd, 0xa6, 0x6c, 0x34, 0x57, 0xc5, 0x49, + 0xb7, 0xe8, 0x5d, 0xe1, 0xce, 0xdd, 0xa5, 0x2c, 0xef, 0xd2, 0x30, 0xed, 0x86, 0x5c, 0xbf, 0xbe, + 0xb5, 0x5d, 0x97, 0x62, 0x4c, 0xbb, 0xe1, 0xe0, 0x9b, 0x96, 0xc7, 0x7e, 0xcb, 0xed, 0x59, 0x38, + 0x3d, 0x40, 0xdb, 0xef, 0xd8, 0xcc, 0x9d, 0xbb, 0x4b, 0xd3, 0x0d, 0x07, 0xb3, 0xf9, 0x43, 0x11, + 0xcb, 0x50, 0xec, 0x47, 0x6c, 0x35, 0xb6, 0x9a, 0x2b, 0xeb, 0xd2, 0xd2, 0xbc, 0x74, 0xe7, 0xee, + 0x52, 0x4e, 0x24, 0x43, 0xa2, 0x1f, 0xf4, 0xec, 0x83, 0xdc, 0xf1, 0xfc, 0xca, 0x39, 0x78, 0x94, + 0x9f, 0x01, 0xba, 0x9e, 0x7a, 0xa0, 0x9b, 0x6d, 0xff, 0xf0, 0x96, 0x5f, 0xf3, 0x9d, 0xcf, 0x49, + 0x7e, 0xce, 0x28, 0xa4, 0x23, 0x8e, 0x70, 0x87, 0x3e, 0xb9, 0x9c, 0x1f, 0xf1, 0x50, 0x6f, 0xf4, + 0xd6, 0x69, 0xf8, 0xf1, 0xf0, 0xfc, 0x88, 0x43, 0xe8, 0xf9, 0x23, 0x37, 0x77, 0xa5, 0x8f, 0xc5, + 0x20, 0xff, 0xb2, 0xee, 0x7a, 0x96, 0xa3, 0x6b, 0xaa, 0x41, 0xbf, 0x57, 0xba, 0x38, 0x6e, 0x6e, + 0xed, 0x99, 0xea, 0x2f, 0x41, 0xea, 0xa6, 0x6a, 0xb0, 0xa4, 0x16, 0x7e, 0x16, 0xd0, 0xeb, 0xbe, + 0x20, 0xb5, 0x09, 0x02, 0x06, 0x2b, 0xfd, 0x72, 0x1c, 0x4e, 0x93, 0xed, 0x47, 0x83, 0x6e, 0x8b, + 0x65, 0xfe, 0x89, 0x13, 0xb3, 0xee, 0x10, 0x55, 0x41, 0xb2, 0x6c, 0xec, 0x44, 0x96, 0x71, 0x76, + 0x3a, 0x5c, 0xfc, 0xcd, 0x2f, 0x3d, 0x33, 0xc7, 0xef, 0xc5, 0x17, 0x72, 0xf6, 0x22, 0xa1, 0x5c, + 0x10, 0x08, 0xb1, 0xbe, 0x5f, 0x87, 0x82, 0x65, 0xb4, 0x14, 0x52, 0x51, 0x2b, 0x76, 0x77, 0x37, + 0x38, 0x49, 0x98, 0xeb, 0x5b, 0xaf, 0x56, 0xcc, 0xc3, 0x4a, 0xf1, 0x6b, 0x01, 0x73, 0xb0, 0x7d, + 0x27, 0xc6, 0x4d, 0x5b, 0x46, 0x8b, 0xdb, 0x7a, 0x80, 0x0f, 0x09, 0xaf, 0x89, 0x6f, 0x45, 0x78, + 0x13, 0xf7, 0xc6, 0x6b, 0xe2, 0x5b, 0x21, 0xde, 0xc7, 0x20, 0xef, 0x10, 0x3f, 0xd0, 0x55, 0x87, + 0xae, 0xf9, 0x2c, 0x8b, 0x4e, 0x73, 0xe9, 0xcb, 0x54, 0x58, 0xfa, 0x42, 0x1c, 0x0a, 0x34, 0x8d, + 0xb8, 0xec, 0x47, 0xcc, 0xc8, 0xee, 0xb4, 0x01, 0x49, 0x47, 0xf5, 0xf8, 0x71, 0x6b, 0xe5, 0x87, + 0xf8, 0x09, 0xfa, 0xe3, 0xa3, 0xcf, 0xc1, 0x97, 0xfb, 0x0f, 0xd9, 0x29, 0x13, 0x7a, 0x0d, 0xd2, + 0x1d, 0xf5, 0xb6, 0x42, 0x59, 0xe3, 0xf7, 0x81, 0x75, 0xaa, 0xa3, 0xde, 0x26, 0xb6, 0xa2, 0x16, + 0x14, 0x08, 0xb1, 0xb6, 0xaf, 0x9a, 0x6d, 0xcc, 0xf8, 0x13, 0xf7, 0x81, 0x7f, 0xba, 0xa3, 0xde, + 0xae, 0x52, 0x4e, 0x72, 0x97, 0x72, 0xfa, 0x13, 0xef, 0x2c, 0x4e, 0xd0, 0x07, 0x14, 0xbf, 0x16, + 0x03, 0x08, 0xdc, 0x85, 0xfe, 0x24, 0x48, 0x9a, 0x7f, 0x45, 0x6f, 0xef, 0xf2, 0xd0, 0x3f, 0x33, + 0x2c, 0x84, 0x7b, 0x9c, 0xcd, 0x4a, 0x9a, 0xaf, 0xbf, 0xbb, 0x18, 0x93, 0x0b, 0x5a, 0xcf, 0x38, + 0xd4, 0x21, 0xdb, 0xb5, 0x5b, 0xaa, 0x87, 0x15, 0xba, 0xfd, 0x8d, 0x1f, 0xa3, 0x3c, 0x02, 0x06, + 0x24, 0x4d, 0x21, 0xeb, 0xbf, 0x10, 0x83, 0x6c, 0x2d, 0xf4, 0x78, 0xb4, 0x08, 0x53, 0x1d, 0xcb, + 0xd4, 0x0f, 0xf8, 0x84, 0xcd, 0xc8, 0xe2, 0x12, 0xcd, 0x43, 0x9a, 0x7d, 0xe3, 0xea, 0x1d, 0x8a, + 0xb3, 0x62, 0x71, 0x4d, 0x50, 0xb7, 0xf0, 0xae, 0xab, 0x0b, 0x5f, 0xcb, 0xe2, 0x92, 0x6c, 0xfa, + 0x5c, 0xac, 0x75, 0x1d, 0xdd, 0x3b, 0x24, 0x01, 0xed, 0xa9, 0x9a, 0xc7, 0xbf, 0x96, 0x2c, 0x08, + 0x79, 0x95, 0x89, 0x09, 0x49, 0x0b, 0x7b, 0xaa, 0x6e, 0xb8, 0x45, 0xf6, 0x08, 0x51, 0x5c, 0x86, + 0xcc, 0xfd, 0xf5, 0x54, 0xf8, 0x70, 0xef, 0xbe, 0xcc, 0xe2, 0xd7, 0xc9, 0x80, 0x89, 0x9d, 0xf2, + 0x1f, 0x6a, 0x1a, 0x17, 0x7c, 0x1e, 0x3e, 0xe1, 0x4e, 0x42, 0xea, 0x4d, 0x55, 0x37, 0xc4, 0xa7, + 0xfb, 0x32, 0xbf, 0x42, 0x65, 0x48, 0xb9, 0x9e, 0xea, 0x75, 0x5d, 0xfe, 0x13, 0x7b, 0xa5, 0x61, + 0x91, 0x51, 0xb1, 0xcc, 0x56, 0x93, 0x6a, 0xca, 0x1c, 0x81, 0xb6, 0x21, 0xe5, 0x59, 0x07, 0xd8, + 0xe4, 0x4e, 0x3a, 0x56, 0x54, 0x0f, 0x78, 0x8a, 0xc7, 0xb8, 0x50, 0x1b, 0xa4, 0x16, 0x36, 0x70, + 0x9b, 0x95, 0x92, 0xfb, 0x2a, 0xd9, 0x71, 0xa5, 0xee, 0xc3, 0xac, 0x29, 0xf8, 0xac, 0x4d, 0x4a, + 0x8a, 0x5e, 0x89, 0x3e, 0xa0, 0x67, 0xbf, 0x47, 0xf9, 0xc8, 0xb0, 0xfe, 0x87, 0x22, 0x53, 0x1c, + 0xc3, 0x84, 0x9f, 0xe5, 0x3f, 0x01, 0x52, 0xd7, 0xdc, 0xb5, 0x4c, 0xfa, 0x81, 0x2d, 0x4f, 0x69, + 0x69, 0x9a, 0xd2, 0x0a, 0xbe, 0x9c, 0x25, 0x35, 0xf4, 0x0a, 0xe4, 0x03, 0x55, 0x3a, 0x77, 0x32, + 0xc7, 0x98, 0x3b, 0xd3, 0x3e, 0x96, 0xb4, 0xa2, 0x97, 0x01, 0x82, 0x89, 0x49, 0x0f, 0x56, 0xb2, + 0xc3, 0xc7, 0x30, 0x98, 0xdd, 0x62, 0x83, 0x1a, 0x60, 0x91, 0x01, 0xb3, 0x1d, 0xdd, 0x54, 0x5c, + 0x6c, 0xec, 0x29, 0xdc, 0x55, 0x84, 0x32, 0x7b, 0x1f, 0x86, 0x76, 0xa6, 0xa3, 0x9b, 0x4d, 0x6c, + 0xec, 0xd5, 0x7c, 0xda, 0x72, 0xee, 0xa3, 0xef, 0x2c, 0x4e, 0xf0, 0xb9, 0x34, 0x51, 0x6a, 0xd0, + 0xc3, 0x7d, 0x3e, 0x0d, 0xb0, 0x8b, 0x2e, 0x42, 0x46, 0x15, 0x17, 0xf4, 0xc8, 0xe5, 0xa8, 0x69, + 0x14, 0xa8, 0xb2, 0xd9, 0xf9, 0xf6, 0xbf, 0x5f, 0x8a, 0x95, 0x7e, 0x3e, 0x06, 0xa9, 0xda, 0xf5, + 0x86, 0xaa, 0x3b, 0xa8, 0x0e, 0x33, 0x41, 0x40, 0x8d, 0x3b, 0x37, 0x83, 0x18, 0x14, 0x93, 0xb3, + 0x3e, 0x6c, 0xbf, 0x7d, 0x24, 0x4d, 0xef, 0x4e, 0xbc, 0xa7, 0xe3, 0x75, 0x98, 0x62, 0x56, 0xba, + 0xa8, 0x0c, 0x93, 0x36, 0xf9, 0x87, 0x3f, 0xcb, 0x58, 0x18, 0x1a, 0x88, 0x54, 0xdf, 0x3f, 0x7b, + 0x25, 0x90, 0xd2, 0xf7, 0x62, 0x00, 0xb5, 0xeb, 0xd7, 0xb7, 0x1d, 0xdd, 0x36, 0xb0, 0x77, 0xbf, + 0x7a, 0xbc, 0x0e, 0x27, 0x42, 0x9b, 0x3a, 0x47, 0x1b, 0xbb, 0xd7, 0xb3, 0xc1, 0xb6, 0xce, 0xd1, + 0x06, 0xb2, 0xb5, 0x5c, 0xcf, 0x67, 0x4b, 0x8c, 0xcd, 0x56, 0x73, 0xbd, 0xc1, 0x6e, 0x6c, 0x42, + 0x36, 0xe8, 0xbe, 0x8b, 0x6a, 0x90, 0xf6, 0xf8, 0xff, 0xdc, 0x9b, 0xa5, 0xe1, 0xde, 0x14, 0x30, + 0xee, 0x51, 0x1f, 0x59, 0xfa, 0x7f, 0xc4, 0xa9, 0x7e, 0xc4, 0xfe, 0xf1, 0x0a, 0x23, 0x92, 0x7b, + 0x79, 0x6e, 0xbc, 0x1f, 0x15, 0x05, 0xe7, 0xea, 0xf1, 0xea, 0x47, 0xe2, 0x30, 0xbb, 0x23, 0xb2, + 0xcd, 0x1f, 0x5b, 0x4f, 0x34, 0x60, 0x0a, 0x9b, 0x9e, 0xa3, 0x53, 0x57, 0x90, 0xb1, 0x7e, 0x76, + 0xd8, 0x58, 0x0f, 0xe8, 0x0b, 0xfd, 0xa5, 0x27, 0xf1, 0x44, 0x80, 0xd3, 0xf4, 0x78, 0xe1, 0xdf, + 0xc5, 0xa1, 0x38, 0x0c, 0x89, 0xce, 0x40, 0x41, 0x73, 0x30, 0x15, 0x28, 0x91, 0x63, 0xc9, 0xbc, + 0x10, 0xf3, 0xa4, 0xbf, 0x01, 0xa4, 0x80, 0x22, 0x81, 0x45, 0x54, 0x8f, 0x5d, 0x31, 0xe5, 0x03, + 0x30, 0x4d, 0xfb, 0x18, 0x0a, 0xba, 0xa9, 0x7b, 0xba, 0x6a, 0x28, 0xbb, 0xaa, 0xa1, 0x9a, 0xda, + 0xbd, 0x54, 0x96, 0xfd, 0x89, 0x3a, 0xcf, 0x49, 0x2b, 0x8c, 0x13, 0x5d, 0x87, 0x29, 0x41, 0x9f, + 0xbc, 0x0f, 0xf4, 0x82, 0x2c, 0x54, 0x45, 0xfd, 0x4e, 0x1c, 0x66, 0x64, 0xdc, 0xfa, 0xc1, 0x72, + 0xeb, 0x0f, 0x03, 0xb0, 0x09, 0x47, 0xf2, 0xe0, 0x3d, 0x78, 0xb6, 0x7f, 0x02, 0x67, 0x18, 0x5f, + 0xcd, 0xf5, 0x42, 0xbe, 0xfd, 0x5a, 0x1c, 0x72, 0x61, 0xdf, 0xfe, 0x00, 0xac, 0x0b, 0x68, 0x2d, + 0xc8, 0x06, 0x49, 0xfe, 0x1b, 0xb5, 0x43, 0xb2, 0x41, 0x5f, 0xd4, 0x1d, 0x9d, 0x06, 0x3e, 0x9a, + 0x84, 0x54, 0x43, 0x75, 0xd4, 0x8e, 0x8b, 0xae, 0xf5, 0x15, 0x70, 0xe2, 0x7c, 0xb2, 0xef, 0x97, + 0xc8, 0xf9, 0x71, 0x08, 0x0b, 0xb9, 0x4f, 0x0c, 0xa8, 0xdf, 0x1e, 0x83, 0x3c, 0xd9, 0x22, 0x86, + 0x5e, 0x65, 0x88, 0xd3, 0x07, 0xb4, 0x64, 0x8f, 0x17, 0x3c, 0x47, 0x43, 0x8b, 0x90, 0x25, 0x6a, + 0x41, 0xa2, 0x23, 0x3a, 0xd0, 0x51, 0x6f, 0xd7, 0x99, 0x04, 0x3d, 0x03, 0x68, 0xdf, 0x3f, 0xee, + 0x50, 0x02, 0x17, 0x10, 0xbd, 0x99, 0xa0, 0x45, 0xa8, 0x3f, 0x04, 0x40, 0xac, 0x50, 0xd8, 0xeb, + 0x71, 0x6c, 0x8f, 0x93, 0x21, 0x92, 0x1a, 0x7d, 0x45, 0xee, 0xc7, 0x58, 0x2d, 0xd8, 0xb3, 0x7b, + 0xe4, 0x65, 0xf8, 0xfa, 0xf1, 0x22, 0xf5, 0x0f, 0xde, 0x5d, 0x9c, 0x3f, 0x54, 0x3b, 0x46, 0xb9, + 0x34, 0x80, 0xb2, 0x44, 0x6b, 0xc3, 0xe8, 0xae, 0x13, 0x95, 0x61, 0x9e, 0x6e, 0x9b, 0xf9, 0xa1, + 0x83, 0x72, 0x80, 0x0f, 0x15, 0x87, 0x9f, 0x9a, 0xb0, 0xdf, 0x8d, 0x4f, 0xca, 0x27, 0xc9, 0x1e, + 0xb8, 0xef, 0x4c, 0xc5, 0x45, 0x37, 0xa0, 0x18, 0x3a, 0xac, 0xf0, 0x61, 0xca, 0x1e, 0xc6, 0xfc, + 0x37, 0xb2, 0x4f, 0x2f, 0x0f, 0x78, 0x7b, 0x71, 0xb9, 0x6a, 0xe9, 0xa2, 0x28, 0x3e, 0xa1, 0xf9, + 0xe7, 0x14, 0x82, 0xf7, 0x2a, 0x0e, 0xe7, 0xac, 0xcf, 0xc6, 0x00, 0x05, 0x0b, 0x81, 0x8c, 0x5d, + 0x9b, 0x6c, 0xb6, 0x48, 0x29, 0x1e, 0xaa, 0x9b, 0x63, 0x47, 0x97, 0xe2, 0x01, 0x5e, 0x94, 0xe2, + 0xa1, 0x79, 0x7a, 0x39, 0x48, 0xbb, 0xf1, 0xf1, 0x6c, 0xee, 0xcb, 0xac, 0x13, 0xa5, 0xdf, 0x89, + 0xc1, 0xe9, 0xbe, 0x18, 0xf7, 0x8d, 0xfd, 0x53, 0x80, 0x9c, 0x50, 0x23, 0xff, 0x09, 0x44, 0x66, + 0xf4, 0xb1, 0xa7, 0xcc, 0x8c, 0xd3, 0x97, 0xc1, 0x3f, 0xa8, 0x95, 0x83, 0xbd, 0x89, 0xf9, 0x4f, + 0x62, 0x30, 0x17, 0x36, 0xc6, 0xef, 0xd6, 0x26, 0xe4, 0xc2, 0xb6, 0xf0, 0x0e, 0x3d, 0x3a, 0x4e, + 0x87, 0x78, 0x5f, 0x22, 0x78, 0xf4, 0x6a, 0x90, 0x4e, 0xd8, 0xe1, 0xdf, 0x73, 0x63, 0xfb, 0x46, + 0xd8, 0xd4, 0x9b, 0x56, 0x92, 0xa2, 0xb6, 0x4a, 0x36, 0x2c, 0xcb, 0x40, 0x7f, 0x1a, 0x66, 0x4c, + 0xcb, 0x53, 0xc8, 0xdc, 0xc3, 0x2d, 0x85, 0xef, 0xa7, 0x59, 0x4e, 0x7e, 0xf5, 0x78, 0x2e, 0xfb, + 0xf6, 0xbb, 0x8b, 0xfd, 0x54, 0x3d, 0x7e, 0x2c, 0x98, 0x96, 0x57, 0xa1, 0xed, 0xdb, 0x6c, 0xb7, + 0xed, 0xc0, 0x74, 0xf4, 0xd6, 0x2c, 0x87, 0x6f, 0x1c, 0xfb, 0xd6, 0xd3, 0x47, 0xdd, 0x36, 0xb7, + 0x1b, 0xba, 0x27, 0x7b, 0x47, 0xed, 0xf7, 0xdf, 0x59, 0x8c, 0x3d, 0xf9, 0xe5, 0x18, 0x40, 0x70, + 0xb0, 0x80, 0x9e, 0x86, 0x53, 0x95, 0xad, 0xcd, 0x9a, 0xd2, 0xdc, 0x5e, 0xd9, 0xde, 0x69, 0x46, + 0xdf, 0x64, 0x17, 0x67, 0xfc, 0xae, 0x8d, 0x35, 0x7d, 0x4f, 0xc7, 0x2d, 0xf4, 0x38, 0xcc, 0x45, + 0xb5, 0xc9, 0x55, 0xbd, 0x26, 0xc5, 0xe6, 0x73, 0x77, 0xee, 0x2e, 0xa5, 0x59, 0xcd, 0x86, 0x5b, + 0xe8, 0x2c, 0x9c, 0xe8, 0xd7, 0x5b, 0xdb, 0x5c, 0x95, 0xe2, 0xf3, 0xd3, 0x77, 0xee, 0x2e, 0x65, + 0xfc, 0xe2, 0x0e, 0x95, 0x00, 0x85, 0x35, 0x39, 0x5f, 0x62, 0x1e, 0xee, 0xdc, 0x5d, 0x4a, 0x31, + 0xb7, 0xcd, 0x27, 0x3f, 0xfa, 0xd9, 0x85, 0x89, 0xca, 0xd5, 0xa1, 0xa7, 0xf8, 0x4f, 0x1f, 0xe9, + 0xb1, 0xdb, 0xfe, 0xc9, 0x7c, 0xe4, 0xe8, 0xfe, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x13, 0x5c, + 0x16, 0x16, 0xd4, 0x67, 0x00, 0x00, } r := bytes.NewReader(gzipped) gzipr, err := compress_gzip.NewReader(r) @@ -2014,6 +2039,12 @@ func (this *Params) Equal(that interface{}) bool { if !this.MinCommissionRate.Equal(that1.MinCommissionRate) { return false } + if this.MaxConsPubKeyRotations != that1.MaxConsPubKeyRotations { + return false + } + if !this.ConsPubkeyRotationFee.Equal(&that1.ConsPubkeyRotationFee) { + return false + } return true } func (this *RedelegationEntryResponse) Equal(that interface{}) bool { @@ -2923,6 +2954,21 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + { + size, err := m.ConsPubkeyRotationFee.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintStaking(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + if m.MaxConsPubKeyRotations != 0 { + i = encodeVarintStaking(dAtA, i, uint64(m.MaxConsPubKeyRotations)) + i-- + dAtA[i] = 0x38 + } { size := m.MinCommissionRate.Size() i -= size @@ -2955,12 +3001,12 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x10 } - n12, err12 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime):]) - if err12 != nil { - return 0, err12 + n13, err13 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.UnbondingTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.UnbondingTime):]) + if err13 != nil { + return 0, err13 } - i -= n12 - i = encodeVarintStaking(dAtA, i, uint64(n12)) + i -= n13 + i = encodeVarintStaking(dAtA, i, uint64(n13)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -3500,6 +3546,11 @@ func (m *Params) Size() (n int) { } l = m.MinCommissionRate.Size() n += 1 + l + sovStaking(uint64(l)) + if m.MaxConsPubKeyRotations != 0 { + n += 1 + sovStaking(uint64(m.MaxConsPubKeyRotations)) + } + l = m.ConsPubkeyRotationFee.Size() + n += 1 + l + sovStaking(uint64(l)) return n } @@ -6239,6 +6290,58 @@ func (m *Params) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxConsPubKeyRotations", wireType) + } + m.MaxConsPubKeyRotations = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxConsPubKeyRotations |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsPubkeyRotationFee", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStaking + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStaking + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthStaking + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ConsPubkeyRotationFee.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStaking(dAtA[iNdEx:]) From b612dce6f1cf95dd47f28fd6cd0a833852cf986a Mon Sep 17 00:00:00 2001 From: junkai121 Date: Wed, 1 Jun 2022 03:08:41 +1000 Subject: [PATCH 11/23] add hook for community pool increase --- x/distribution/keeper/hooks.go | 5 ++++- x/slashing/keeper/hooks.go | 2 +- x/staking/keeper/hooks.go | 4 ++-- x/staking/keeper/msg_server.go | 8 +++++++- x/staking/keeper/val_state_change.go | 3 ++- x/staking/types/expected_keepers.go | 3 ++- x/staking/types/hooks.go | 4 ++-- 7 files changed, 20 insertions(+), 9 deletions(-) diff --git a/x/distribution/keeper/hooks.go b/x/distribution/keeper/hooks.go index b9cd07ff3273..c3846ae2999d 100644 --- a/x/distribution/keeper/hooks.go +++ b/x/distribution/keeper/hooks.go @@ -110,7 +110,10 @@ func (h Hooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, f return nil } -func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { +func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error { + feePool := h.k.GetFeePool(ctx) + feePool.CommunityPool = feePool.CommunityPool.Add(sdk.NewDecCoinsFromCoins(rotationFee)...) + h.k.SetFeePool(ctx, feePool) return nil } diff --git a/x/slashing/keeper/hooks.go b/x/slashing/keeper/hooks.go index 579e4dcee2e3..ff9ad94502cb 100644 --- a/x/slashing/keeper/hooks.go +++ b/x/slashing/keeper/hooks.go @@ -88,6 +88,6 @@ func (h Hooks) AfterDelegationModified(_ sdk.Context, _ sdk.AccAddress, _ sdk.Va return nil } func (h Hooks) BeforeValidatorSlashed(_ sdk.Context, _ sdk.ValAddress, _ sdk.Dec) error { return nil } -func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { +func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error { return h.k.PerformConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey) } diff --git a/x/staking/keeper/hooks.go b/x/staking/keeper/hooks.go index 61b41626df6f..bc67b55468c9 100644 --- a/x/staking/keeper/hooks.go +++ b/x/staking/keeper/hooks.go @@ -89,9 +89,9 @@ func (k Keeper) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, return nil } -func (k Keeper) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { +func (k Keeper) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error { if k.hooks != nil { - return k.hooks.AfterConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey) + return k.hooks.AfterConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey, rotationFee) } return nil } diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 19211289256e..c81b2a8d2cb2 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -15,6 +15,7 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -529,7 +530,12 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC // checks if the signing account has enough balance to pay KeyRotationFee // pays KeyRotationFee to community fund rotationFee := k.ConsPubKeyRotationFee(ctx) - err := k.Keeper.FundCommunityPool(ctx, rotationFee, msg.Sender) + sender, err := sdk.AccAddressFromBech32(msg.Sender) + if err != nil { + return nil, err + } + + err = k.Keeper.bankKeeper.SendCoinsFromAccountToModule(ctx, sender, distrtypes.ModuleName, sdk.Coins{rotationFee}) if err != nil { return nil, err } diff --git a/x/staking/keeper/val_state_change.go b/x/staking/keeper/val_state_change.go index b0ec9f185a74..650e403d2212 100644 --- a/x/staking/keeper/val_state_change.go +++ b/x/staking/keeper/val_state_change.go @@ -202,6 +202,7 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx sdk.Context) (updates []ab updates = append(updates, validator.ABCIValidatorUpdateZero()) } + rotationFee := k.ConsPubKeyRotationFee(ctx) // ApplyAndReturnValidatorSetUpdates checks if there is ConsPubKeyRotationHistory // with ConsPubKeyRotationHistory.RotatedHeight == ctx.BlockHeight() and if so, generates 2 ValidatorUpdate, // one for a remove validator and one for create new validator @@ -217,7 +218,7 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx sdk.Context) (updates []ab PubKey: tmtypes.TM2PB.PubKey(history.NewConsPubKey), Power: v.ConsensusPower(), }) - err := k.AfterConsensusPubKeyUpdate(ctx, history.OldConsPubKey, history.NewConsPubKey) + err := k.AfterConsensusPubKeyUpdate(ctx, history.OldConsPubKey, history.NewConsPubKey, rotationFee) if err != nil { return nil, err } diff --git a/x/staking/types/expected_keepers.go b/x/staking/types/expected_keepers.go index b20dcdedda28..fb6136369cdd 100644 --- a/x/staking/types/expected_keepers.go +++ b/x/staking/types/expected_keepers.go @@ -33,6 +33,7 @@ type BankKeeper interface { GetSupply(ctx sdk.Context, denom string) sdk.Coin + SendCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error SendCoinsFromModuleToModule(ctx sdk.Context, senderPool, recipientPool string, amt sdk.Coins) error UndelegateCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error DelegateCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error @@ -102,5 +103,5 @@ type StakingHooks interface { BeforeDelegationRemoved(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error // Must be called when a delegation is removed AfterDelegationModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec) error - AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error + AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error } diff --git a/x/staking/types/hooks.go b/x/staking/types/hooks.go index 4d11c63fc2fc..3f98e89de227 100644 --- a/x/staking/types/hooks.go +++ b/x/staking/types/hooks.go @@ -95,9 +95,9 @@ func (h MultiStakingHooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.V } return nil } -func (h MultiStakingHooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { +func (h MultiStakingHooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error { for i := range h { - if err := h[i].AfterConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey); err != nil { + if err := h[i].AfterConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey, rotationFee); err != nil { return err } } From 168ba302d6a40579c1a93ea3926dddfd0adaaade Mon Sep 17 00:00:00 2001 From: junkai121 Date: Wed, 1 Jun 2022 03:47:05 +1000 Subject: [PATCH 12/23] implement hook for community pool increase & resolve build errors --- x/distribution/keeper/hooks.go | 4 ++-- x/slashing/keeper/hooks.go | 3 ++- x/slashing/keeper/signing_info.go | 17 +++++++++-------- x/staking/keeper/hooks.go | 4 ++-- x/staking/keeper/val_state_change.go | 24 ++++++++++++++++++++---- x/staking/simulation/genesis.go | 2 +- x/staking/types/expected_keepers.go | 4 ++-- x/staking/types/hooks.go | 4 ++-- x/staking/types/params.go | 6 +++--- 9 files changed, 43 insertions(+), 25 deletions(-) diff --git a/x/distribution/keeper/hooks.go b/x/distribution/keeper/hooks.go index c3846ae2999d..61d8e265f7dc 100644 --- a/x/distribution/keeper/hooks.go +++ b/x/distribution/keeper/hooks.go @@ -1,10 +1,10 @@ package keeper import ( + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/distribution/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/tendermint/tendermint/crypto" ) // Wrapper struct @@ -110,7 +110,7 @@ func (h Hooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, f return nil } -func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error { +func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptotypes.PubKey, newPubKey cryptotypes.PubKey, rotationFee sdk.Coin) error { feePool := h.k.GetFeePool(ctx) feePool.CommunityPool = feePool.CommunityPool.Add(sdk.NewDecCoinsFromCoins(rotationFee)...) h.k.SetFeePool(ctx, feePool) diff --git a/x/slashing/keeper/hooks.go b/x/slashing/keeper/hooks.go index ff9ad94502cb..e77334d0a8f6 100644 --- a/x/slashing/keeper/hooks.go +++ b/x/slashing/keeper/hooks.go @@ -5,6 +5,7 @@ import ( "github.com/tendermint/tendermint/crypto" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/slashing/types" ) @@ -88,6 +89,6 @@ func (h Hooks) AfterDelegationModified(_ sdk.Context, _ sdk.AccAddress, _ sdk.Va return nil } func (h Hooks) BeforeValidatorSlashed(_ sdk.Context, _ sdk.ValAddress, _ sdk.Dec) error { return nil } -func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error { +func (h Hooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptotypes.PubKey, newPubKey cryptotypes.PubKey, rotationFee sdk.Coin) error { return h.k.PerformConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey) } diff --git a/x/slashing/keeper/signing_info.go b/x/slashing/keeper/signing_info.go index 40077c5427c9..59cc2c9760bd 100644 --- a/x/slashing/keeper/signing_info.go +++ b/x/slashing/keeper/signing_info.go @@ -5,6 +5,7 @@ import ( gogotypes "github.com/gogo/protobuf/types" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/slashing/types" ) @@ -163,23 +164,23 @@ func (k Keeper) clearValidatorMissedBlockBitArray(ctx sdk.Context, address sdk.C } } -func (k Keeper) PerformConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey) error { +func (k Keeper) PerformConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptotypes.PubKey, newPubKey cryptotypes.PubKey) error { // Connect new consensus address with PubKey k.AddPubkey(ctx, newPubKey) // Migrate ValidatorSigningInfo from oldPubKey to newPubKey - signingInfo, found := h.k.GetValidatorSigningInfo(ctx, oldPubKey.Address()) + signingInfo, found := k.GetValidatorSigningInfo(ctx, sdk.ConsAddress(oldPubKey.Address())) if !found { return nil } - k.RemoveValidatorSigningInfo(ctx, oldPubKey.Address()) - k.SetValidatorSigningInfo(ctx, newPubKey.Address(), signingInfo) + k.RemoveValidatorSigningInfo(ctx, sdk.ConsAddress(oldPubKey.Address())) + k.SetValidatorSigningInfo(ctx, sdk.ConsAddress(newPubKey.Address()), signingInfo) // Migrate ValidatorMissedBlockBitArray from oldPubKey to newPubKey - k.clearValidatorMissedBlockBitArray(ctx, oldPubKey.Address()) - missedBlocks := h.k.GetValidatorMissedBlocks(ctx, oldPubKey.Address()) - for _, missed := range array.MissedBlocks { - k.SetValidatorMissedBlockBitArray(ctx, newPubKey.Address(), missed.Index, missed.Missed) + k.clearValidatorMissedBlockBitArray(ctx, sdk.ConsAddress(oldPubKey.Address())) + missedBlocks := k.GetValidatorMissedBlocks(ctx, sdk.ConsAddress(oldPubKey.Address())) + for _, missed := range missedBlocks { + k.SetValidatorMissedBlockBitArray(ctx, sdk.ConsAddress(newPubKey.Address()), missed.Index, missed.Missed) } return nil diff --git a/x/staking/keeper/hooks.go b/x/staking/keeper/hooks.go index bc67b55468c9..700efa310aee 100644 --- a/x/staking/keeper/hooks.go +++ b/x/staking/keeper/hooks.go @@ -1,9 +1,9 @@ package keeper import ( + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/types" - "github.com/tendermint/tendermint/crypto" ) // Implements StakingHooks interface @@ -89,7 +89,7 @@ func (k Keeper) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, return nil } -func (k Keeper) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error { +func (k Keeper) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptotypes.PubKey, newPubKey cryptotypes.PubKey, rotationFee sdk.Coin) error { if k.hooks != nil { return k.hooks.AfterConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey, rotationFee) } diff --git a/x/staking/keeper/val_state_change.go b/x/staking/keeper/val_state_change.go index 650e403d2212..0123e8d6d0f0 100644 --- a/x/staking/keeper/val_state_change.go +++ b/x/staking/keeper/val_state_change.go @@ -8,6 +8,8 @@ import ( gogotypes "github.com/gogo/protobuf/types" abci "github.com/tendermint/tendermint/abci/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -210,15 +212,29 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx sdk.Context) (updates []ab // changed on this block historyObjects := k.GetBlockConsPubKeyRotationHistory(ctx, ctx.BlockHeight()) for _, history := range historyObjects { + valAddr, err := sdk.ValAddressFromBech32(history.OperatorAddress) + if err != nil { + return nil, err + } + + validator := k.mustGetValidator(ctx, valAddr) + + oldPk := history.OldConsPubkey.GetCachedValue().(cryptotypes.PubKey) + oldTmPk, err := cryptocodec.ToTmProtoPublicKey(oldPk) + + newPk := history.NewConsPubkey.GetCachedValue().(cryptotypes.PubKey) + newTmPk, err := cryptocodec.ToTmProtoPublicKey(newPk) + updates = append(updates, abci.ValidatorUpdate{ - PubKey: tmtypes.TM2PB.PubKey(history.OldConsPubKey), + PubKey: oldTmPk, Power: 0, }) updates = append(updates, abci.ValidatorUpdate{ - PubKey: tmtypes.TM2PB.PubKey(history.NewConsPubKey), - Power: v.ConsensusPower(), + PubKey: newTmPk, + Power: validator.ConsensusPower(powerReduction), }) - err := k.AfterConsensusPubKeyUpdate(ctx, history.OldConsPubKey, history.NewConsPubKey, rotationFee) + + err = k.AfterConsensusPubKeyUpdate(ctx, oldPk, newPk, rotationFee) if err != nil { return nil, err } diff --git a/x/staking/simulation/genesis.go b/x/staking/simulation/genesis.go index afd393c1c778..d4c3a875a2b2 100644 --- a/x/staking/simulation/genesis.go +++ b/x/staking/simulation/genesis.go @@ -64,7 +64,7 @@ func RandomizedGenState(simState *module.SimulationState) { // NOTE: the slashing module need to be defined after the staking module on the // NewSimulationManager constructor for this to work simState.UnbondTime = unbondTime - params := types.NewParams(simState.UnbondTime, maxVals, 7, histEntries, sdk.DefaultBondDenom, minCommissionRate) + params := types.NewParams(simState.UnbondTime, maxVals, 7, histEntries, sdk.DefaultBondDenom, minCommissionRate, 0, sdk.Coin{}) // validators & delegations var ( diff --git a/x/staking/types/expected_keepers.go b/x/staking/types/expected_keepers.go index fb6136369cdd..b79a3324251b 100644 --- a/x/staking/types/expected_keepers.go +++ b/x/staking/types/expected_keepers.go @@ -1,9 +1,9 @@ package types import ( + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - "github.com/tendermint/tendermint/crypto" ) // DistributionKeeper expected distribution keeper (noalias) @@ -103,5 +103,5 @@ type StakingHooks interface { BeforeDelegationRemoved(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error // Must be called when a delegation is removed AfterDelegationModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec) error - AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error + AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptotypes.PubKey, newPubKey cryptotypes.PubKey, rotationFee sdk.Coin) error } diff --git a/x/staking/types/hooks.go b/x/staking/types/hooks.go index 3f98e89de227..5fa968f62ef8 100644 --- a/x/staking/types/hooks.go +++ b/x/staking/types/hooks.go @@ -1,8 +1,8 @@ package types import ( + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/tendermint/tendermint/crypto" ) // combine multiple staking hooks, all hook functions are run in array sequence @@ -95,7 +95,7 @@ func (h MultiStakingHooks) BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.V } return nil } -func (h MultiStakingHooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey crypto.PubKey, newPubKey crypto.PubKey, rotationFee sdk.Coin) error { +func (h MultiStakingHooks) AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptotypes.PubKey, newPubKey cryptotypes.PubKey, rotationFee sdk.Coin) error { for i := range h { if err := h[i].AfterConsensusPubKeyUpdate(ctx, oldPubKey, newPubKey, rotationFee); err != nil { return err diff --git a/x/staking/types/params.go b/x/staking/types/params.go index 2beda04a5840..9fc74fa7c525 100644 --- a/x/staking/types/params.go +++ b/x/staking/types/params.go @@ -67,7 +67,7 @@ func NewParams(unbondingTime time.Duration, maxValidators, maxEntries, historica BondDenom: bondDenom, MinCommissionRate: minCommissionRate, MaxConsPubKeyRotations: maxConsPubKeyRotations, - ConsPubKeyRotationFee: consPubKeyRotationFee, + ConsPubkeyRotationFee: consPubKeyRotationFee, } } @@ -81,7 +81,7 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { paramtypes.NewParamSetPair(KeyBondDenom, &p.BondDenom, validateBondDenom), paramtypes.NewParamSetPair(KeyMinCommissionRate, &p.MinCommissionRate, validateMinCommissionRate), paramtypes.NewParamSetPair(KeyMaxConsPubKeyRotations, &p.MaxConsPubKeyRotations, validateMaxConsPubKeyRotations), - paramtypes.NewParamSetPair(KeyConsPubKeyRotationFee, &p.ConsPubKeyRotationFee, validateConsPubKeyRotationFee), + paramtypes.NewParamSetPair(KeyConsPubKeyRotationFee, &p.ConsPubkeyRotationFee, validateConsPubKeyRotationFee), } } @@ -151,7 +151,7 @@ func (p Params) Validate() error { return err } - if err := validateConsPubKeyRotationFee(p.ConsPubKeyRotationFee); err != nil { + if err := validateConsPubKeyRotationFee(p.ConsPubkeyRotationFee); err != nil { return err } From 729f08af281080f21424b0f51178dadb600784cb Mon Sep 17 00:00:00 2001 From: junkai121 Date: Wed, 8 Jun 2022 02:17:01 +1000 Subject: [PATCH 13/23] add cli command for rotate cons-pubkey, message utility functions addition, codec registration, test validator --- startnode.sh | 16 +++++++++ validator/node_key.json | 1 + validator/priv_validator_key.json | 11 ++++++ validator/pubKey.json | 1 + x/staking/client/cli/tx.go | 58 +++++++++++++++++++++++++++++++ x/staking/types/codec.go | 2 ++ x/staking/types/msg.go | 45 ++++++++++++++++++++++++ 7 files changed, 134 insertions(+) create mode 100644 startnode.sh create mode 100644 validator/node_key.json create mode 100644 validator/priv_validator_key.json create mode 100644 validator/pubKey.json diff --git a/startnode.sh b/startnode.sh new file mode 100644 index 000000000000..65d0bb1307f9 --- /dev/null +++ b/startnode.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +rm -rf $HOME/.simd + +set -o errexit -o nounset + +simd init --chain-id test test --home=$HOME/.simd +simd keys add validator --keyring-backend="test" --home=$HOME/.simd +simd add-genesis-account $(simd keys show validator -a --keyring-backend="test" --home=$HOME/.simd) 100000000000000stake --home=$HOME/.simd +simd gentx validator 100000000stake --keyring-backend="test" --chain-id test --home=$HOME/.simd +simd collect-gentxs --home=$HOME/.simd + +# Start node +simd start --pruning=nothing --home=$HOME/.simd --mode=validator + +# simd tx staking rotate-cons-pubkey --home=$HOME/.simd --chain-id=test --keyring-backend=test --from=validator --pubkey='{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/bjz9vxsyxzyTiGjG289dBn/4G4Bu6U1pI1dL17MbIY="}' -y --broadcast-mode=block diff --git a/validator/node_key.json b/validator/node_key.json new file mode 100644 index 000000000000..59a6ec763435 --- /dev/null +++ b/validator/node_key.json @@ -0,0 +1 @@ +{"id":"fa8cc8ac4f99accdb0c8a7b6245cbe1aa4721425","priv_key":{"type":"tendermint/PrivKeyEd25519","value":"Gzrgsin0NNXi8aeE5mmPs7agxIli3IBkRRCMRZMANlZEQFv/5HW36SrNyz+VKYODqq2PijruXiEPPLpJUpAPgw=="}} \ No newline at end of file diff --git a/validator/priv_validator_key.json b/validator/priv_validator_key.json new file mode 100644 index 000000000000..34e47f573391 --- /dev/null +++ b/validator/priv_validator_key.json @@ -0,0 +1,11 @@ +{ + "address": "51CCD98D491829A4F0C9DA2DC38030BC72954FEA", + "pub_key": { + "type": "tendermint/PubKeyEd25519", + "value": "/bjz9vxsyxzyTiGjG289dBn/4G4Bu6U1pI1dL17MbIY=" + }, + "priv_key": { + "type": "tendermint/PrivKeyEd25519", + "value": "aGpgq75JHCIEBYCTFKULAijfu8YT8E5gLZQRI/upAf79uPP2/GzLHPJOIaMbbz10Gf/gbgG7pTWkjV0vXsxshg==" + } +} diff --git a/validator/pubKey.json b/validator/pubKey.json new file mode 100644 index 000000000000..454ac747d7f6 --- /dev/null +++ b/validator/pubKey.json @@ -0,0 +1 @@ +{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/bjz9vxsyxzyTiGjG289dBn/4G4Bu6U1pI1dL17MbIY="} \ No newline at end of file diff --git a/x/staking/client/cli/tx.go b/x/staking/client/cli/tx.go index 6a9d5393120f..7402ba9be42f 100644 --- a/x/staking/client/cli/tx.go +++ b/x/staking/client/cli/tx.go @@ -42,6 +42,7 @@ func NewTxCmd() *cobra.Command { stakingTxCmd.AddCommand( NewCreateValidatorCmd(), NewEditValidatorCmd(), + NewRotateConsensusKeyCmd(), NewDelegateCmd(), NewRedelegateCmd(), NewUnbondCmd(), @@ -145,6 +146,37 @@ func NewEditValidatorCmd() *cobra.Command { return cmd } +func NewRotateConsensusKeyCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "rotate-cons-pubkey", + Short: "rotate validator consensus pub key", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()). + WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever) + txf, msg, err := newBuildRotateConsPubKeyMsg(clientCtx, txf, cmd.Flags()) + if err != nil { + return err + } + + return tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg) + }, + } + + cmd.Flags().AddFlagSet(FlagSetPublicKey()) + + flags.AddTxFlagsToCmd(cmd) + + _ = cmd.MarkFlagRequired(flags.FlagFrom) + _ = cmd.MarkFlagRequired(FlagPubKey) + + return cmd +} + func NewDelegateCmd() *cobra.Command { bech32PrefixValAddr := sdk.GetConfig().GetBech32ValidatorAddrPrefix() @@ -401,6 +433,32 @@ func newBuildCreateValidatorMsg(clientCtx client.Context, txf tx.Factory, fs *fl return txf, msg, nil } +func newBuildRotateConsPubKeyMsg(clientCtx client.Context, txf tx.Factory, fs *flag.FlagSet) (tx.Factory, *types.MsgRotateConsPubKey, error) { + + valAddr := clientCtx.GetFromAddress() + pkStr, err := fs.GetString(FlagPubKey) + if err != nil { + return txf, nil, err + } + + var pk cryptotypes.PubKey + if err := clientCtx.Codec.UnmarshalInterfaceJSON([]byte(pkStr), &pk); err != nil { + return txf, nil, err + } + + msg, err := types.NewMsgRotateConsPubKey( + valAddr, sdk.ValAddress(valAddr), pk, + ) + if err != nil { + return txf, nil, err + } + if err := msg.ValidateBasic(); err != nil { + return txf, nil, err + } + + return txf, msg, nil +} + // Return the flagset, particular flags, and a description of defaults // this is anticipated to be used with the gen-tx func CreateValidatorMsgFlagSet(ipDefault string) (fs *flag.FlagSet, defaultsDesc string) { diff --git a/x/staking/types/codec.go b/x/staking/types/codec.go index 558f2eb038ad..df58db029251 100644 --- a/x/staking/types/codec.go +++ b/x/staking/types/codec.go @@ -20,6 +20,7 @@ func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { legacy.RegisterAminoMsg(cdc, &MsgUndelegate{}, "cosmos-sdk/MsgUndelegate") legacy.RegisterAminoMsg(cdc, &MsgBeginRedelegate{}, "cosmos-sdk/MsgBeginRedelegate") legacy.RegisterAminoMsg(cdc, &MsgCancelUnbondingDelegation{}, "cosmos-sdk/MsgCancelUnbondingDelegation") + legacy.RegisterAminoMsg(cdc, &MsgRotateConsPubKey{}, "cosmos-sdk/MsgRotateConsPubKey") cdc.RegisterInterface((*isStakeAuthorization_Validators)(nil), nil) cdc.RegisterConcrete(&StakeAuthorization_AllowList{}, "cosmos-sdk/StakeAuthorization/AllowList", nil) @@ -36,6 +37,7 @@ func RegisterInterfaces(registry types.InterfaceRegistry) { &MsgUndelegate{}, &MsgBeginRedelegate{}, &MsgCancelUnbondingDelegation{}, + &MsgRotateConsPubKey{}, ) registry.RegisterImplementations( (*authz.Authorization)(nil), diff --git a/x/staking/types/msg.go b/x/staking/types/msg.go index a1ae89d15751..2268005fe461 100644 --- a/x/staking/types/msg.go +++ b/x/staking/types/msg.go @@ -392,3 +392,48 @@ func (msg MsgCancelUnbondingDelegation) ValidateBasic() error { return nil } + +// NewMsgRotateConsPubKey creates a new MsgRotateConsPubKey instance. +func NewMsgRotateConsPubKey(sender sdk.AccAddress, valAddr sdk.ValAddress, pubKey cryptotypes.PubKey) (*MsgRotateConsPubKey, error) { + var pkAny *codectypes.Any + if pubKey != nil { + var err error + if pkAny, err = codectypes.NewAnyWithValue(pubKey); err != nil { + return nil, err + } + } + return &MsgRotateConsPubKey{ + Sender: sender.String(), + ValidatorAddress: valAddr.String(), + NewPubKey: pkAny, + }, nil +} + +// Route implements the sdk.Msg interface. +func (msg MsgRotateConsPubKey) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. +func (msg MsgRotateConsPubKey) Type() string { return TypeMsgCancelUnbondingDelegation } + +// GetSigners implements the sdk.Msg interface. +func (msg MsgRotateConsPubKey) GetSigners() []sdk.AccAddress { + sender, _ := sdk.AccAddressFromBech32(msg.Sender) + return []sdk.AccAddress{sender} +} + +// GetSignBytes implements the sdk.Msg interface. +func (msg MsgRotateConsPubKey) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg MsgRotateConsPubKey) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err) + } + if _, err := sdk.ValAddressFromBech32(msg.ValidatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) + } + + return nil +} From a404bc31d98f2d7e258275d4172d7a7cf5beb9da Mon Sep 17 00:00:00 2001 From: junkai121 Date: Sat, 11 Jun 2022 00:15:11 +1000 Subject: [PATCH 14/23] resolve panics for unpack interfaces of pubkey, invalid use of nil validator object --- x/staking/keeper/msg_server.go | 12 ++++++------ x/staking/types/historical_info.go | 12 ++++++++++++ x/staking/types/msg.go | 6 ++++++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index c81b2a8d2cb2..e12a268817d2 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -521,8 +521,13 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC } maxConsPubKeyRotations := k.MaxConsPubKeyRotations(ctx) + valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) + if err != nil { + return nil, err + } + // checks if the validator is does not exceed parameter MaxConsPubKeyRotations by iterating ConsPubKeyRotationHistory - historyObjects := k.GetValidatorConsPubKeyRotationHistory(ctx, validator.GetOperator()) + historyObjects := k.GetValidatorConsPubKeyRotationHistory(ctx, valAddr) if len(historyObjects) > int(maxConsPubKeyRotations) { return nil, types.ErrExceedingMaxConsPubKeyRotations } @@ -540,11 +545,6 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC return nil, err } - valAddr, err := sdk.ValAddressFromBech32(msg.ValidatorAddress) - if err != nil { - return nil, err - } - validator, found := k.Keeper.GetValidator(ctx, valAddr) if !found { return nil, types.ErrNoValidatorFound diff --git a/x/staking/types/historical_info.go b/x/staking/types/historical_info.go index a0f49953009d..4903063ce1f5 100644 --- a/x/staking/types/historical_info.go +++ b/x/staking/types/historical_info.go @@ -8,6 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -107,3 +108,14 @@ func MustMarshalConsPubKeyRotationHistory(cdc codec.BinaryCodec, history ConsPub func MarshalConsPubKeyRotationHistory(cdc codec.BinaryCodec, hi ConsPubKeyRotationHistory) ([]byte, error) { return cdc.Marshal(&hi) } + +// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces +func (hi ConsPubKeyRotationHistory) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + var oldPubKey cryptotypes.PubKey + err := unpacker.UnpackAny(hi.OldConsPubkey, &oldPubKey) + if err != nil { + return err + } + var newPubKey cryptotypes.PubKey + return unpacker.UnpackAny(hi.NewConsPubkey, &newPubKey) +} diff --git a/x/staking/types/msg.go b/x/staking/types/msg.go index 2268005fe461..a8be4af06526 100644 --- a/x/staking/types/msg.go +++ b/x/staking/types/msg.go @@ -437,3 +437,9 @@ func (msg MsgRotateConsPubKey) ValidateBasic() error { return nil } + +// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces +func (msg MsgRotateConsPubKey) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + var pubKey cryptotypes.PubKey + return unpacker.UnpackAny(msg.NewPubKey, &pubKey) +} From ec7ea5815072b5fe15e61018a4d62dce2d693b1f Mon Sep 17 00:00:00 2001 From: junkai121 Date: Fri, 17 Jun 2022 01:23:02 +0800 Subject: [PATCH 15/23] disable DeleteValidatorByConsAddr and RemoveValidatorSigningInfo --- x/slashing/keeper/signing_info.go | 2 +- x/staking/keeper/msg_server.go | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/x/slashing/keeper/signing_info.go b/x/slashing/keeper/signing_info.go index 59cc2c9760bd..4e3a1cebb717 100644 --- a/x/slashing/keeper/signing_info.go +++ b/x/slashing/keeper/signing_info.go @@ -173,7 +173,7 @@ func (k Keeper) PerformConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptoty if !found { return nil } - k.RemoveValidatorSigningInfo(ctx, sdk.ConsAddress(oldPubKey.Address())) + // k.RemoveValidatorSigningInfo(ctx, sdk.ConsAddress(oldPubKey.Address())) k.SetValidatorSigningInfo(ctx, sdk.ConsAddress(newPubKey.Address()), signingInfo) // Migrate ValidatorMissedBlockBitArray from oldPubKey to newPubKey diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index e12a268817d2..0f6c37e06580 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -551,10 +551,10 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC } // deletes old ValidatorByConsAddr - err = k.DeleteValidatorByConsAddr(ctx, validator) - if err != nil { - return nil, err - } + // err = k.DeleteValidatorByConsAddr(ctx, validator) + // if err != nil { + // return nil, err + // } // overwrites NewPubKey in validator.ConsPubKey val, ok := validator.(types.Validator) From 0a2854dfe0bc02557b65e7e8caf775ab0d44f981 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Fri, 17 Jun 2022 09:43:38 +0800 Subject: [PATCH 16/23] add todo tests --- x/slashing/keeper/signing_info_test.go | 2 ++ x/staking/client/testutil/suite.go | 2 ++ x/staking/keeper/cons_pubkey_test.go | 5 +++++ x/staking/keeper/hooks_test.go | 5 +++++ x/staking/keeper/msg_server.go | 6 ------ x/staking/keeper/msg_server_test.go | 2 ++ x/staking/keeper/validator_test.go | 2 ++ x/staking/types/params_test.go | 3 +++ 8 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 x/staking/keeper/cons_pubkey_test.go create mode 100644 x/staking/keeper/hooks_test.go diff --git a/x/slashing/keeper/signing_info_test.go b/x/slashing/keeper/signing_info_test.go index cee32a0d54c4..780a25f9caba 100644 --- a/x/slashing/keeper/signing_info_test.go +++ b/x/slashing/keeper/signing_info_test.go @@ -94,3 +94,5 @@ func TestJailUntil(t *testing.T) { require.True(t, ok) require.Equal(t, time.Unix(253402300799, 0).UTC(), info.JailedUntil) } + +// TODO: add test for PerformConsensusPubKeyUpdate diff --git a/x/staking/client/testutil/suite.go b/x/staking/client/testutil/suite.go index 879808868eb9..316f65e7d1f8 100644 --- a/x/staking/client/testutil/suite.go +++ b/x/staking/client/testutil/suite.go @@ -1547,3 +1547,5 @@ func (s *IntegrationTestSuite) TestEditValidatorMoniker() { require.NoError(val.ClientCtx.Codec.UnmarshalJSON(res.Bytes(), &result)) require.Equal(result.GetMoniker(), moniker) } + +// TODO: add test for NewRotateConsensusKeyCmd diff --git a/x/staking/keeper/cons_pubkey_test.go b/x/staking/keeper/cons_pubkey_test.go new file mode 100644 index 000000000000..4d89918ee65e --- /dev/null +++ b/x/staking/keeper/cons_pubkey_test.go @@ -0,0 +1,5 @@ +package keeper_test + +// TODO: add test for SetConsPubKeyRotationHistory +// TODO: add test for GetValidatorConsPubKeyRotationHistory +// TODO: add test for GetBlockConsPubKeyRotationHistory diff --git a/x/staking/keeper/hooks_test.go b/x/staking/keeper/hooks_test.go new file mode 100644 index 000000000000..f1c6e302bb97 --- /dev/null +++ b/x/staking/keeper/hooks_test.go @@ -0,0 +1,5 @@ +package keeper_test + +// TODO: test AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptotypes.PubKey, newPubKey cryptotypes.PubKey, rotationFee sdk.Coin) +// - Check community pool is added after this +// - Check slashing hook is called correctly diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 0f6c37e06580..d1568a46530b 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -501,12 +501,6 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC // Implementation is based on this ADR // https://docs.cosmos.network/master/architecture/adr-016-validator-consensus-key-rotation.html - // TODO: to consider - // pk, ok := v.ConsensusPubkey.GetCachedValue().(cryptotypes.PubKey) - // if !ok { - // return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "expecting cryptotypes.PubKey, got %T", pk) - // } - pk, ok := msg.NewPubKey.GetCachedValue().(cryptotypes.PubKey) if !ok { return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "Expecting cryptotypes.PubKey, got %T", pk) diff --git a/x/staking/keeper/msg_server_test.go b/x/staking/keeper/msg_server_test.go index 44538be4d4ae..8780f16044c3 100644 --- a/x/staking/keeper/msg_server_test.go +++ b/x/staking/keeper/msg_server_test.go @@ -144,3 +144,5 @@ func TestCancelUnbondingDelegation(t *testing.T) { }) } } + +// TODO: add test for RotateConsPubKey diff --git a/x/staking/keeper/validator_test.go b/x/staking/keeper/validator_test.go index 585897ca7929..110327468cac 100644 --- a/x/staking/keeper/validator_test.go +++ b/x/staking/keeper/validator_test.go @@ -1111,6 +1111,8 @@ func TestUpdateValidatorCommission(t *testing.T) { } } +// TODO: add test for TestValidatorConsPubKeyUpdate case apply validatr set update + func applyValidatorSetUpdates(t *testing.T, ctx sdk.Context, k keeper.Keeper, expectedUpdatesLen int) []abci.ValidatorUpdate { updates, err := k.ApplyAndReturnValidatorSetUpdates(ctx) require.NoError(t, err) diff --git a/x/staking/types/params_test.go b/x/staking/types/params_test.go index ead0266759b5..6b8e82682def 100644 --- a/x/staking/types/params_test.go +++ b/x/staking/types/params_test.go @@ -35,4 +35,7 @@ func Test_validateParams(t *testing.T) { params.MinCommissionRate = sdk.NewDec(2) require.Error(t, params.Validate()) + + // TODO: add test for validateMaxConsPubKeyRotations + // TODO: add test for validateConsPubKeyRotationFee } From e3c172e9239d4f5f83e0be95059e1f9da28d8e9c Mon Sep 17 00:00:00 2001 From: junkai121 Date: Tue, 21 Jun 2022 23:46:23 +0800 Subject: [PATCH 17/23] resolve MissedBlocks moving on consensus pubkey rotation & add test for PerformConsensusPubKeyUpdate --- x/slashing/keeper/signing_info.go | 2 +- x/slashing/keeper/signing_info_test.go | 41 +++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/x/slashing/keeper/signing_info.go b/x/slashing/keeper/signing_info.go index 4e3a1cebb717..52297c478942 100644 --- a/x/slashing/keeper/signing_info.go +++ b/x/slashing/keeper/signing_info.go @@ -177,8 +177,8 @@ func (k Keeper) PerformConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptoty k.SetValidatorSigningInfo(ctx, sdk.ConsAddress(newPubKey.Address()), signingInfo) // Migrate ValidatorMissedBlockBitArray from oldPubKey to newPubKey - k.clearValidatorMissedBlockBitArray(ctx, sdk.ConsAddress(oldPubKey.Address())) missedBlocks := k.GetValidatorMissedBlocks(ctx, sdk.ConsAddress(oldPubKey.Address())) + k.clearValidatorMissedBlockBitArray(ctx, sdk.ConsAddress(oldPubKey.Address())) for _, missed := range missedBlocks { k.SetValidatorMissedBlockBitArray(ctx, sdk.ConsAddress(newPubKey.Address()), missed.Index, missed.Missed) } diff --git a/x/slashing/keeper/signing_info_test.go b/x/slashing/keeper/signing_info_test.go index 780a25f9caba..5e3680da05f2 100644 --- a/x/slashing/keeper/signing_info_test.go +++ b/x/slashing/keeper/signing_info_test.go @@ -95,4 +95,43 @@ func TestJailUntil(t *testing.T) { require.Equal(t, time.Unix(253402300799, 0).UTC(), info.JailedUntil) } -// TODO: add test for PerformConsensusPubKeyUpdate +func TestPerformConsensusPubKeyUpdate(t *testing.T) { + app := simapp.Setup(t, false) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + + pks := simapp.CreateTestPubKeys(2) + simapp.AddTestAddrsFromPubKeys(app, ctx, pks, app.StakingKeeper.TokensFromConsensusPower(ctx, 200)) + + oldConsAddr := sdk.ConsAddress(pks[0].Address()) + newConsAddr := sdk.ConsAddress(pks[1].Address()) + newInfo := types.NewValidatorSigningInfo( + sdk.ConsAddress(oldConsAddr), + int64(4), + int64(3), + time.Unix(2, 0).UTC(), + false, + int64(10), + ) + app.SlashingKeeper.SetValidatorSigningInfo(ctx, oldConsAddr, newInfo) + app.SlashingKeeper.SetValidatorMissedBlockBitArray(ctx, oldConsAddr, 10, true) + err := app.SlashingKeeper.PerformConsensusPubKeyUpdate(ctx, pks[0], pks[1]) + require.NoError(t, err) + + // check pubkey relation is set properly + savedPubKey, err := app.SlashingKeeper.GetPubkey(ctx, newConsAddr.Bytes()) + require.NoError(t, err) + require.Equal(t, savedPubKey, pks[1]) + + // check validator SigningInfo is set properly to new consensus pubkey + signingInfo, found := app.SlashingKeeper.GetValidatorSigningInfo(ctx, newConsAddr) + require.True(t, found) + require.Equal(t, signingInfo, newInfo) + + // check missed blocks array is removed on old consensus pubkey + missedBlocks := app.SlashingKeeper.GetValidatorMissedBlocks(ctx, oldConsAddr) + require.Len(t, missedBlocks, 0) + + // check missed blocks are set correctly for new pubkey + missedBlocks = app.SlashingKeeper.GetValidatorMissedBlocks(ctx, newConsAddr) + require.Len(t, missedBlocks, 1) +} From be8b3142c3e3a77d5ef7f215f174ff941dd14ea8 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Thu, 23 Jun 2022 21:08:54 +0800 Subject: [PATCH 18/23] add CLI test for consensus pubkey rotation command --- x/staking/client/testutil/suite.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/x/staking/client/testutil/suite.go b/x/staking/client/testutil/suite.go index 316f65e7d1f8..db34f684c213 100644 --- a/x/staking/client/testutil/suite.go +++ b/x/staking/client/testutil/suite.go @@ -1548,4 +1548,18 @@ func (s *IntegrationTestSuite) TestEditValidatorMoniker() { require.Equal(result.GetMoniker(), moniker) } -// TODO: add test for NewRotateConsensusKeyCmd +func (s *IntegrationTestSuite) TestRotateConsensusKey() { + val := s.network.Validators[0] + require := s.Require() + + txCmd := cli.NewRotateConsensusKeyCmd() + _, err := clitestutil.ExecTestCLICmd(val.ClientCtx, txCmd, []string{ + val.ValAddress.String(), + fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), + fmt.Sprintf("--%s=%s", cli.FlagPubKey, `{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/bjz9vxsyxzyTiGjG289dBn/4G4Bu6U1pI1dL17MbIY="}`), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + }) + require.NoError(err) +} From 0258ef17b33d0bf1bb444bdbd95e3e661b688b26 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Thu, 23 Jun 2022 21:19:31 +0800 Subject: [PATCH 19/23] add test for ConsPubKeyRotationHistory set/get --- x/staking/keeper/cons_pubkey_test.go | 57 ++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/x/staking/keeper/cons_pubkey_test.go b/x/staking/keeper/cons_pubkey_test.go index 4d89918ee65e..cccfb62e0fdb 100644 --- a/x/staking/keeper/cons_pubkey_test.go +++ b/x/staking/keeper/cons_pubkey_test.go @@ -1,5 +1,56 @@ package keeper_test -// TODO: add test for SetConsPubKeyRotationHistory -// TODO: add test for GetValidatorConsPubKeyRotationHistory -// TODO: add test for GetBlockConsPubKeyRotationHistory +import ( + "testing" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/stretchr/testify/require" +) + +func TestConsPubKeyRotationHistory(t *testing.T) { + app, ctx, _ := bootstrapGenesisTest(t, 10) + + validators := app.StakingKeeper.GetAllValidators(ctx) + require.Len(t, validators, 1) + + validator := validators[0] + valAddr, err := sdk.ValAddressFromBech32(validator.OperatorAddress) + require.NoError(t, err) + + historyObjects := app.StakingKeeper.GetValidatorConsPubKeyRotationHistory(ctx, valAddr) + require.Len(t, historyObjects, 0) + + newConsPub, err := codectypes.NewAnyWithValue(PKs[1]) + require.NoError(t, err) + + newConsPub2, err := codectypes.NewAnyWithValue(PKs[2]) + require.NoError(t, err) + + app.StakingKeeper.SetConsPubKeyRotationHistory(ctx, types.ConsPubKeyRotationHistory{ + OperatorAddress: valAddr.String(), + OldConsPubkey: validator.ConsensusPubkey, + NewConsPubkey: newConsPub, + RotatedHeight: ctx.BlockHeight(), + }) + + historyObjects = app.StakingKeeper.GetValidatorConsPubKeyRotationHistory(ctx, valAddr) + require.Len(t, historyObjects, 1) + + historyObjects = app.StakingKeeper.GetBlockConsPubKeyRotationHistory(ctx, ctx.BlockHeight()) + require.Len(t, historyObjects, 1) + + app.StakingKeeper.SetConsPubKeyRotationHistory(ctx, types.ConsPubKeyRotationHistory{ + OperatorAddress: valAddr.String(), + OldConsPubkey: newConsPub, + NewConsPubkey: newConsPub2, + RotatedHeight: ctx.BlockHeight() + 1, + }) + + historyObjects = app.StakingKeeper.GetValidatorConsPubKeyRotationHistory(ctx, valAddr) + require.Len(t, historyObjects, 2) + + historyObjects = app.StakingKeeper.GetBlockConsPubKeyRotationHistory(ctx, ctx.BlockHeight()) + require.Len(t, historyObjects, 1) +} From bca6ef0ce258b15c004144af37f8a7ae8cd32a9b Mon Sep 17 00:00:00 2001 From: junkai121 Date: Thu, 23 Jun 2022 21:46:55 +0800 Subject: [PATCH 20/23] add test for AfterConsensusPubKeyUpdate --- x/staking/keeper/hooks_test.go | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/x/staking/keeper/hooks_test.go b/x/staking/keeper/hooks_test.go index f1c6e302bb97..60b445fb84af 100644 --- a/x/staking/keeper/hooks_test.go +++ b/x/staking/keeper/hooks_test.go @@ -1,5 +1,27 @@ package keeper_test -// TODO: test AfterConsensusPubKeyUpdate(ctx sdk.Context, oldPubKey cryptotypes.PubKey, newPubKey cryptotypes.PubKey, rotationFee sdk.Coin) -// - Check community pool is added after this -// - Check slashing hook is called correctly +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" +) + +func TestHookAfterConsensusPubKeyUpdate(t *testing.T) { + app, ctx, _ := bootstrapGenesisTest(t, 10) + + oldCommunityPoolCoins := app.DistrKeeper.GetFeePoolCommunityCoins(ctx) + + rotationFee := sdk.NewInt64Coin("stake", 1000000) + err := app.StakingKeeper.AfterConsensusPubKeyUpdate(ctx, PKs[0], PKs[1], rotationFee) + require.NoError(t, err) + + // Check community pool is added after this + newCommunityPoolCoins := app.DistrKeeper.GetFeePoolCommunityCoins(ctx) + require.Equal(t, newCommunityPoolCoins, oldCommunityPoolCoins.Add(sdk.NewDecCoinsFromCoins(rotationFee)...)) + + // Check slashing hook is called correctly + savedPubKey, err := app.SlashingKeeper.GetPubkey(ctx, PKs[1].Address().Bytes()) + require.NoError(t, err) + require.Equal(t, savedPubKey, PKs[1]) +} From a7f18c4356cce5543c901407a337316dc1319620 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Mon, 27 Jun 2022 23:34:54 +0800 Subject: [PATCH 21/23] add more test for validateParams --- x/staking/types/params_test.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/x/staking/types/params_test.go b/x/staking/types/params_test.go index 6b8e82682def..3ec056036756 100644 --- a/x/staking/types/params_test.go +++ b/x/staking/types/params_test.go @@ -29,6 +29,14 @@ func Test_validateParams(t *testing.T) { // default params have no error require.NoError(t, params.Validate()) + // check MaxConsPubKeyRotations + params.MaxConsPubKeyRotations = 0 + require.NoError(t, params.Validate()) + + // check ConsPubkeyRotationFee + params.ConsPubkeyRotationFee = sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000000) + require.NoError(t, params.Validate()) + // validate mincommision params.MinCommissionRate = sdk.NewDec(-1) require.Error(t, params.Validate()) @@ -36,6 +44,4 @@ func Test_validateParams(t *testing.T) { params.MinCommissionRate = sdk.NewDec(2) require.Error(t, params.Validate()) - // TODO: add test for validateMaxConsPubKeyRotations - // TODO: add test for validateConsPubKeyRotationFee } From 45d58848732c3b19f3a9b1bf60f6bbee2f04b05f Mon Sep 17 00:00:00 2001 From: junkai121 Date: Tue, 28 Jun 2022 00:27:21 +0800 Subject: [PATCH 22/23] add test for RotateConsPubKey and resolve issues on implementation --- x/staking/keeper/msg_server.go | 7 +- x/staking/keeper/msg_server_test.go | 101 +++++++++++++++++++++++++++- 2 files changed, 106 insertions(+), 2 deletions(-) diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index d1568a46530b..c55d7ebff89b 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -522,7 +522,7 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC // checks if the validator is does not exceed parameter MaxConsPubKeyRotations by iterating ConsPubKeyRotationHistory historyObjects := k.GetValidatorConsPubKeyRotationHistory(ctx, valAddr) - if len(historyObjects) > int(maxConsPubKeyRotations) { + if len(historyObjects) >= int(maxConsPubKeyRotations) { return nil, types.ErrExceedingMaxConsPubKeyRotations } @@ -544,6 +544,10 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC return nil, types.ErrNoValidatorFound } + if sdk.AccAddress(validator.GetOperator()).String() != msg.Sender { + return nil, sdkerrors.ErrorInvalidSigner + } + // deletes old ValidatorByConsAddr // err = k.DeleteValidatorByConsAddr(ctx, validator) // if err != nil { @@ -560,6 +564,7 @@ func (k msgServer) RotateConsPubKey(goCtx context.Context, msg *types.MsgRotateC oldConsensusPubKey := val.ConsensusPubkey val.ConsensusPubkey = msg.NewPubKey k.SetValidatorByConsAddr(ctx, val) + k.SetValidator(ctx, val) // Add ConsPubKeyRotationHistory for tracking rotation k.SetConsPubKeyRotationHistory(ctx, types.ConsPubKeyRotationHistory{ diff --git a/x/staking/keeper/msg_server_test.go b/x/staking/keeper/msg_server_test.go index 8780f16044c3..2b8434eabaeb 100644 --- a/x/staking/keeper/msg_server_test.go +++ b/x/staking/keeper/msg_server_test.go @@ -4,10 +4,13 @@ import ( "testing" "time" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/simapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/bank/testutil" + distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" "github.com/cosmos/cosmos-sdk/x/staking/keeper" + "github.com/cosmos/cosmos-sdk/x/staking/teststaking" "github.com/cosmos/cosmos-sdk/x/staking/types" "github.com/stretchr/testify/require" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -145,4 +148,100 @@ func TestCancelUnbondingDelegation(t *testing.T) { } } -// TODO: add test for RotateConsPubKey +func TestRotateConsPubKey(t *testing.T) { + // setup the app + app := simapp.Setup(t, false) + ctx := app.BaseApp.NewContext(false, tmproto.Header{}) + msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + valTokens := sdk.TokensFromConsensusPower(1, sdk.DefaultPowerReduction) + addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, valTokens) + valAddrs := simapp.ConvertAddrsToValAddrs(addrs) + + val1 := teststaking.NewValidator(t, valAddrs[0], PKs[0]) + app.StakingKeeper.SetValidator(ctx, val1) + + testCases := []struct { + Name string + Pass bool + sender sdk.AccAddress + validator sdk.ValAddress + newPubKey cryptotypes.PubKey + rotationLimit uint64 + }{ + { + Name: "not existing validator check", + sender: addrs[0], + validator: valAddrs[1], + newPubKey: PKs[1], + rotationLimit: 10, + Pass: false, + }, + { + Name: "not validator owner check", + sender: addrs[1], + validator: val1.GetOperator(), + newPubKey: PKs[1], + rotationLimit: 10, + Pass: false, + }, + { + Name: "consensus pubkey rotation limit check", + sender: addrs[0], + validator: val1.GetOperator(), + newPubKey: PKs[1], + rotationLimit: 0, + Pass: false, + }, + { + Name: "successful consensus pubkey rotation", + sender: addrs[0], + validator: val1.GetOperator(), + newPubKey: PKs[1], + rotationLimit: 10, + Pass: true, + }, + } + + for _, testCase := range testCases { + t.Run(testCase.Name, func(t *testing.T) { + params := app.StakingKeeper.GetParams(ctx) + params.ConsPubkeyRotationFee = sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000) + params.MaxConsPubKeyRotations = testCase.rotationLimit + app.StakingKeeper.SetParams(ctx, params) + + oldDistrBalance := app.BankKeeper.GetBalance(ctx, app.AccountKeeper.GetModuleAddress(distrtypes.ModuleName), sdk.DefaultBondDenom) + msg, err := types.NewMsgRotateConsPubKey( + testCase.sender, + testCase.validator, + testCase.newPubKey, + ) + require.NoError(t, err) + + _, err = msgServer.RotateConsPubKey(ctx, msg) + if testCase.Pass { + require.NoError(t, err) + + // rotation fee payment from sender to distrtypes + newDistrBalance := app.BankKeeper.GetBalance(ctx, app.AccountKeeper.GetModuleAddress(distrtypes.ModuleName), sdk.DefaultBondDenom) + require.Equal(t, newDistrBalance, oldDistrBalance.Add(params.ConsPubkeyRotationFee)) + + // validator consensus pubkey update check + validator, found := app.StakingKeeper.GetValidator(ctx, testCase.validator) + require.True(t, found) + + consAddr, err := validator.GetConsAddr() + require.NoError(t, err) + require.Equal(t, consAddr.String(), sdk.ConsAddress(testCase.newPubKey.Address()).String()) + + // consensus rotation history set check + historyObjects := app.StakingKeeper.GetValidatorConsPubKeyRotationHistory(ctx, testCase.validator) + require.Len(t, historyObjects, 1) + historyObjects = app.StakingKeeper.GetBlockConsPubKeyRotationHistory(ctx, ctx.BlockHeight()) + require.Len(t, historyObjects, 1) + } else { + require.Error(t, err) + } + }) + } +} From 3eef35c30473e10932bc08517a00384af46cc979 Mon Sep 17 00:00:00 2001 From: junkai121 Date: Wed, 29 Jun 2022 00:45:45 +0800 Subject: [PATCH 23/23] add test for validator set updates on tendermint power on consensus key rotation --- x/staking/keeper/validator_test.go | 40 +++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/x/staking/keeper/validator_test.go b/x/staking/keeper/validator_test.go index 110327468cac..68ca4881c914 100644 --- a/x/staking/keeper/validator_test.go +++ b/x/staking/keeper/validator_test.go @@ -1111,7 +1111,45 @@ func TestUpdateValidatorCommission(t *testing.T) { } } -// TODO: add test for TestValidatorConsPubKeyUpdate case apply validatr set update +func TestValidatorConsPubKeyUpdate(t *testing.T) { + powers := []int64{10, 20} + app, ctx, addrs, valAddrs, validators := initValidators(t, 1000, 20, powers) + msgServer := keeper.NewMsgServerImpl(app.StakingKeeper) + + validators[0] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[0], false) + validators[1] = keeper.TestingUpdateValidator(app.StakingKeeper, ctx, validators[1], false) + applyValidatorSetUpdates(t, ctx, app.StakingKeeper, 2) + + params := app.StakingKeeper.GetParams(ctx) + params.ConsPubkeyRotationFee = sdk.NewInt64Coin(sdk.DefaultBondDenom, 1000) + app.StakingKeeper.SetParams(ctx, params) + + msg, err := types.NewMsgRotateConsPubKey( + addrs[0], + valAddrs[0], + PKs[1], + ) + require.NoError(t, err) + + _, err = msgServer.RotateConsPubKey(ctx, msg) + require.NoError(t, err) + + updates := applyValidatorSetUpdates(t, ctx, app.StakingKeeper, 2) + + originalPubKey, err := validators[0].TmConsPublicKey() + require.NoError(t, err) + + validator, found := app.StakingKeeper.GetValidator(ctx, valAddrs[0]) + require.True(t, found) + + newPubKey, err := validator.TmConsPublicKey() + require.NoError(t, err) + + require.Equal(t, int64(0), updates[0].Power) + require.Equal(t, originalPubKey, updates[0].PubKey) + require.Equal(t, int64(10), updates[1].Power) + require.Equal(t, newPubKey, updates[1].PubKey) +} func applyValidatorSetUpdates(t *testing.T, ctx sdk.Context, k keeper.Keeper, expectedUpdatesLen int) []abci.ValidatorUpdate { updates, err := k.ApplyAndReturnValidatorSetUpdates(ctx)