refactor(staking): change historicalinfo to contain minimal set of data (#17655)

Co-authored-by: Aleksandr Bezobchuk <alexanderbez@users.noreply.github.com>
This commit is contained in:
Marko 2023-09-19 12:59:04 +02:00 committed by GitHub
parent 4ef0130bcd
commit c05ff14a97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 2556 additions and 1444 deletions

View File

@ -153,6 +153,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
* (types) [#17738](https://github.com/cosmos/cosmos-sdk/pull/17738) `WithBlockTime()` was removed & `BlockTime()` were deprecated in favor of `WithHeaderInfo()` & `HeaderInfo()`. `BlockTime` now gets data from `HeaderInfo()` instead of `BlockHeader()`.
* (client) [#17746](https://github.com/cosmos/cosmos-sdk/pull/17746) `txEncodeAmino` & `txDecodeAmino` txs via grpc and rest were removed
* `RegisterLegacyAmino` was removed from `AppModuleBasic`
* (x/staking) [#17655](https://github.com/cosmos/cosmos-sdk/pull/17655) `QueryHistoricalInfo` was adjusted to return `HistoricalRecord` and marked `Hist` as deprecated.
### CLI Breaking Changes
@ -160,6 +161,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
* (x/distribution) [#17115](https://github.com/cosmos/cosmos-sdk/pull/17115) Migrate `PreviousProposer` to collections.
* (x/upgrade) [#16244](https://github.com/cosmos/cosmos-sdk/pull/16244) upgrade module no longer stores the app version but gets and sets the app version stored in the `ParamStore` of baseapp.
* (x/staking) [#17655](https://github.com/cosmos/cosmos-sdk/pull/17655) `HistoricalInfo` was replaced with `HistoricalRecord`, it removes the validator set and comet header and only keep what is needed for IBC.
## [v0.50.0-rc.0](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.50.0-rc.0) - 2023-08-18

View File

@ -11667,14 +11667,16 @@ func (x *fastReflection_QueryHistoricalInfoRequest) ProtoMethods() *protoiface.M
}
var (
md_QueryHistoricalInfoResponse protoreflect.MessageDescriptor
fd_QueryHistoricalInfoResponse_hist protoreflect.FieldDescriptor
md_QueryHistoricalInfoResponse protoreflect.MessageDescriptor
fd_QueryHistoricalInfoResponse_hist protoreflect.FieldDescriptor
fd_QueryHistoricalInfoResponse_historical_record protoreflect.FieldDescriptor
)
func init() {
file_cosmos_staking_v1beta1_query_proto_init()
md_QueryHistoricalInfoResponse = File_cosmos_staking_v1beta1_query_proto.Messages().ByName("QueryHistoricalInfoResponse")
fd_QueryHistoricalInfoResponse_hist = md_QueryHistoricalInfoResponse.Fields().ByName("hist")
fd_QueryHistoricalInfoResponse_historical_record = md_QueryHistoricalInfoResponse.Fields().ByName("historical_record")
}
var _ protoreflect.Message = (*fastReflection_QueryHistoricalInfoResponse)(nil)
@ -11748,6 +11750,12 @@ func (x *fastReflection_QueryHistoricalInfoResponse) Range(f func(protoreflect.F
return
}
}
if x.HistoricalRecord != nil {
value := protoreflect.ValueOfMessage(x.HistoricalRecord.ProtoReflect())
if !f(fd_QueryHistoricalInfoResponse_historical_record, value) {
return
}
}
}
// Has reports whether a field is populated.
@ -11765,6 +11773,8 @@ func (x *fastReflection_QueryHistoricalInfoResponse) Has(fd protoreflect.FieldDe
switch fd.FullName() {
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.hist":
return x.Hist != nil
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.historical_record":
return x.HistoricalRecord != nil
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryHistoricalInfoResponse"))
@ -11783,6 +11793,8 @@ func (x *fastReflection_QueryHistoricalInfoResponse) Clear(fd protoreflect.Field
switch fd.FullName() {
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.hist":
x.Hist = nil
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.historical_record":
x.HistoricalRecord = nil
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryHistoricalInfoResponse"))
@ -11802,6 +11814,9 @@ func (x *fastReflection_QueryHistoricalInfoResponse) Get(descriptor protoreflect
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.hist":
value := x.Hist
return protoreflect.ValueOfMessage(value.ProtoReflect())
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.historical_record":
value := x.HistoricalRecord
return protoreflect.ValueOfMessage(value.ProtoReflect())
default:
if descriptor.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryHistoricalInfoResponse"))
@ -11824,6 +11839,8 @@ func (x *fastReflection_QueryHistoricalInfoResponse) Set(fd protoreflect.FieldDe
switch fd.FullName() {
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.hist":
x.Hist = value.Message().Interface().(*HistoricalInfo)
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.historical_record":
x.HistoricalRecord = value.Message().Interface().(*HistoricalRecord)
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryHistoricalInfoResponse"))
@ -11849,6 +11866,11 @@ func (x *fastReflection_QueryHistoricalInfoResponse) Mutable(fd protoreflect.Fie
x.Hist = new(HistoricalInfo)
}
return protoreflect.ValueOfMessage(x.Hist.ProtoReflect())
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.historical_record":
if x.HistoricalRecord == nil {
x.HistoricalRecord = new(HistoricalRecord)
}
return protoreflect.ValueOfMessage(x.HistoricalRecord.ProtoReflect())
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryHistoricalInfoResponse"))
@ -11865,6 +11887,9 @@ func (x *fastReflection_QueryHistoricalInfoResponse) NewField(fd protoreflect.Fi
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.hist":
m := new(HistoricalInfo)
return protoreflect.ValueOfMessage(m.ProtoReflect())
case "cosmos.staking.v1beta1.QueryHistoricalInfoResponse.historical_record":
m := new(HistoricalRecord)
return protoreflect.ValueOfMessage(m.ProtoReflect())
default:
if fd.IsExtension() {
panic(fmt.Errorf("proto3 declared messages do not support extensions: cosmos.staking.v1beta1.QueryHistoricalInfoResponse"))
@ -11938,6 +11963,10 @@ func (x *fastReflection_QueryHistoricalInfoResponse) ProtoMethods() *protoiface.
l = options.Size(x.Hist)
n += 1 + l + runtime.Sov(uint64(l))
}
if x.HistoricalRecord != nil {
l = options.Size(x.HistoricalRecord)
n += 1 + l + runtime.Sov(uint64(l))
}
if x.unknownFields != nil {
n += len(x.unknownFields)
}
@ -11967,6 +11996,20 @@ func (x *fastReflection_QueryHistoricalInfoResponse) ProtoMethods() *protoiface.
i -= len(x.unknownFields)
copy(dAtA[i:], x.unknownFields)
}
if x.HistoricalRecord != nil {
encoded, err := options.Marshal(x.HistoricalRecord)
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 x.Hist != nil {
encoded, err := options.Marshal(x.Hist)
if err != nil {
@ -12066,6 +12109,42 @@ func (x *fastReflection_QueryHistoricalInfoResponse) ProtoMethods() *protoiface.
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field HistoricalRecord", 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.HistoricalRecord == nil {
x.HistoricalRecord = &HistoricalRecord{}
}
if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.HistoricalRecord); err != nil {
return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := runtime.Skip(dAtA[iNdEx:])
@ -14739,7 +14818,10 @@ type QueryHistoricalInfoResponse struct {
unknownFields protoimpl.UnknownFields
// hist defines the historical info at the given height.
Hist *HistoricalInfo `protobuf:"bytes,1,opt,name=hist,proto3" json:"hist,omitempty"`
//
// Deprecated: Do not use.
Hist *HistoricalInfo `protobuf:"bytes,1,opt,name=hist,proto3" json:"hist,omitempty"`
HistoricalRecord *HistoricalRecord `protobuf:"bytes,2,opt,name=historical_record,json=historicalRecord,proto3" json:"historical_record,omitempty"`
}
func (x *QueryHistoricalInfoResponse) Reset() {
@ -14762,6 +14844,7 @@ func (*QueryHistoricalInfoResponse) Descriptor() ([]byte, []int) {
return file_cosmos_staking_v1beta1_query_proto_rawDescGZIP(), []int{23}
}
// Deprecated: Do not use.
func (x *QueryHistoricalInfoResponse) GetHist() *HistoricalInfo {
if x != nil {
return x.Hist
@ -14769,6 +14852,13 @@ func (x *QueryHistoricalInfoResponse) GetHist() *HistoricalInfo {
return nil
}
func (x *QueryHistoricalInfoResponse) GetHistoricalRecord() *HistoricalRecord {
if x != nil {
return x.HistoricalRecord
}
return nil
}
// QueryPoolRequest is request type for the Query/Pool RPC method.
type QueryPoolRequest struct {
state protoimpl.MessageState
@ -15167,220 +15257,226 @@ var file_cosmos_staking_v1beta1_query_proto_rawDesc = []byte{
0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x34, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48,
0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01,
0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x59, 0x0a, 0x1b,
0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49,
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x04, 0x68,
0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73, 0x6d,
0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74,
0x61, 0x31, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66,
0x6f, 0x52, 0x04, 0x68, 0x69, 0x73, 0x74, 0x22, 0x12, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79,
0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x50, 0x0a, 0x11, 0x51,
0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x3b, 0x0a, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c,
0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e,
0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x09, 0xc8, 0xde,
0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x22, 0x14, 0x0a,
0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x22, 0x58, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61,
0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61,
0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x73,
0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xb4, 0x01, 0x0a,
0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c,
0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x04,
0x68, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x73,
0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65,
0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00,
0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x32, 0xb0, 0x16,
0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x69,
0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e,
0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e,
0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74,
0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61,
0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x6c,
0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 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,
0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73,
0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51,
0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x35, 0x12, 0x33, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b,
0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69,
0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0xd9, 0x01, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69,
0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x12, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e,
0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56,
0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x73,
0x74, 0x61, 0x31, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e,
0x66, 0x6f, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x68, 0x69, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x11,
0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 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, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x63, 0x6f, 0x72,
0x64, 0x52, 0x10, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x52, 0x65, 0x63,
0x6f, 0x72, 0x64, 0x22, 0x12, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x50, 0x0a, 0x11, 0x51, 0x75, 0x65, 0x72, 0x79,
0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x04,
0x70, 0x6f, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x73,
0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65,
0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93,
0x02, 0x41, 0x12, 0x3f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b,
0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69,
0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73,
0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51,
0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62,
0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x6f, 0x6c, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7,
0xb0, 0x2a, 0x01, 0x52, 0x04, 0x70, 0x6f, 0x6f, 0x6c, 0x22, 0x14, 0x0a, 0x12, 0x51, 0x75, 0x65,
0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22,
0x58, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65,
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
0x18, 0x01, 0x20, 0x01, 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,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a,
0x01, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x32, 0xb0, 0x16, 0x0a, 0x05, 0x51, 0x75,
0x65, 0x72, 0x79, 0x12, 0x9e, 0x01, 0x0a, 0x0a, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
0x72, 0x73, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b,
0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72,
0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b,
0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72,
0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x2f, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24,
0x12, 0x22, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e,
0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61,
0x74, 0x6f, 0x72, 0x73, 0x12, 0xac, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
0x6f, 0x72, 0x12, 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, 0x51, 0x75, 0x65, 0x72,
0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x22, 0x40, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33,
0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f,
0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64,
0x64, 0x72, 0x7d, 0x12, 0xd9, 0x01, 0x0a, 0x14, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x63,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64,
0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e,
0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65,
0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x22, 0x4c, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x41, 0x12, 0x3f,
0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f,
0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64,
0x64, 0x72, 0x7d, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
0xfe, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62,
0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72,
0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7,
0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6f, 0x73, 0x6d,
0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74,
0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76,
0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75,
0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61,
0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65,
0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61,
0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65,
0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x52, 0x12, 0x50, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69,
0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64,
0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72,
0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64,
0x64, 0x72, 0x7d, 0x12, 0xfc, 0x01, 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e,
0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x63, 0x6f,
0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64,
0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74,
0x73, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69,
0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74,
0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75,
0x65, 0x72, 0x79, 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, 0x72,
0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x67, 0x12, 0x65, 0x2f, 0x63, 0x6f,
0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f,
0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d,
0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x65,
0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e,
0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0xce, 0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72,
0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x6f,
0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62,
0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61,
0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73,
0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51,
0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c,
0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x41, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f,
0x65, 0x72, 0x79, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f,
0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73,
0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76,
0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64,
0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e, 0x62, 0x6f, 0x6e,
0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x12, 0xcc, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x2e, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67,
0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65,
0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
0x2f, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67,
0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65,
0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x5d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x52, 0x12, 0x50, 0x2f,
0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76,
0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64,
0x64, 0x72, 0x7d, 0x12, 0xfe, 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f,
0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73,
0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51,
0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62,
0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72,
0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7,
0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6f, 0x73, 0x6d,
0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72,
0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64,
0x72, 0x7d, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b,
0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12,
0xfc, 0x01, 0x0a, 0x13, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c,
0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44,
0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e,
0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 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, 0x72, 0x88, 0xe7, 0xb0, 0x2a,
0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x67, 0x12, 0x65, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c,
0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x64, 0x65, 0x6c,
0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61,
0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e, 0x62, 0x6f, 0x6e, 0x64,
0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xce,
0x01, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65,
0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73,
0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31,
0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x44,
0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x88, 0xe7,
0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x63, 0x6f, 0x73, 0x6d,
0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74,
0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64,
0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75,
0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x73, 0x12, 0xc6, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 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,
0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x88,
0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, 0x63, 0x6f, 0x73,
0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65,
0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b,
0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f,
0x72, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd5, 0x01,
0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64,
0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73,
0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51,
0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c,
0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38,
0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e,
0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c,
0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x40, 0x12, 0x3e, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73,
0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x7b,
0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12,
0xfe, 0x01, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62,
0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x12, 0x41, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f, 0x6e, 0x64, 0x69,
0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74,
0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75,
0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x55, 0x6e, 0x62, 0x6f,
0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82,
0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73,
0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64,
0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67,
0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64,
0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0xe3, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61,
0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x36, 0x2e, 0x63,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67,
0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71,
0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74,
0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75,
0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69,
0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x88,
0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x63, 0x6f, 0x73,
0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65,
0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b,
0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f,
0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69,
0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x0e,
0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x32,
0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x75, 0x6e, 0x62, 0x6f, 0x6e,
0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
0x12, 0xc6, 0x01, 0x0a, 0x0d, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x73, 0x12, 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, 0x51, 0x75, 0x65, 0x72,
0x79, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x51,
0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x88, 0xe7, 0xb0, 0x2a, 0x01,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f,
0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f,
0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65,
0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x72, 0x65, 0x64, 0x65,
0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xd5, 0x01, 0x0a, 0x13, 0x44, 0x65,
0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72,
0x73, 0x12, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69,
0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x63, 0x6f, 0x73,
0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65,
0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74,
0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x40, 0x12, 0x3e, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69,
0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67,
0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72,
0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72,
0x73, 0x12, 0xe3, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56,
0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f,
0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72,
0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x1a, 0x37, 0x2e, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e,
0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44,
0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5c, 0x88, 0xe7, 0xb0, 0x2a, 0x01,
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x51, 0x12, 0x4f, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f,
0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f,
0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65,
0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x2f, 0x76, 0x61, 0x6c, 0x69,
0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x7b, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f,
0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0xb8, 0x01, 0x0a, 0x0e, 0x48, 0x69, 0x73, 0x74,
0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 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, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69,
0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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, 0x51, 0x75, 0x65, 0x72, 0x79, 0x48, 0x69, 0x73,
0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 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, 0x51, 0x75, 0x65, 0x72,
0x79, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3,
0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74,
0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x68, 0x69,
0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x7b, 0x68,
0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0x86, 0x01, 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 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, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f,
0x6f, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 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, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02,
0x1e, 0x12, 0x1c, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69,
0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6f, 0x6c, 0x12,
0x8e, 0x01, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 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, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 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,
0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x2b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20,
0x12, 0x1e, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e,
0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
0x42, 0xda, 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,
0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 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,
0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x22, 0x3d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32,
0x12, 0x30, 0x2f, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e,
0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x72,
0x69, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x2f, 0x7b, 0x68, 0x65, 0x69, 0x67, 0x68,
0x74, 0x7d, 0x12, 0x86, 0x01, 0x0a, 0x04, 0x50, 0x6f, 0x6f, 0x6c, 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, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65,
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 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, 0x51,
0x75, 0x65, 0x72, 0x79, 0x50, 0x6f, 0x6f, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x22, 0x29, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x12, 0x1c, 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,
0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x6f, 0x6f, 0x6c, 0x12, 0x8e, 0x01, 0x0a, 0x06,
0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 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,
0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 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, 0x51, 0x75, 0x65, 0x72,
0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
0x2b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x63,
0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31,
0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x42, 0xda, 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, 0x0a, 0x51, 0x75, 0x65,
0x72, 0x79, 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 (
@ -15432,8 +15528,9 @@ var file_cosmos_staking_v1beta1_query_proto_goTypes = []interface{}{
(*UnbondingDelegation)(nil), // 32: cosmos.staking.v1beta1.UnbondingDelegation
(*RedelegationResponse)(nil), // 33: cosmos.staking.v1beta1.RedelegationResponse
(*HistoricalInfo)(nil), // 34: cosmos.staking.v1beta1.HistoricalInfo
(*Pool)(nil), // 35: cosmos.staking.v1beta1.Pool
(*Params)(nil), // 36: cosmos.staking.v1beta1.Params
(*HistoricalRecord)(nil), // 35: cosmos.staking.v1beta1.HistoricalRecord
(*Pool)(nil), // 36: cosmos.staking.v1beta1.Pool
(*Params)(nil), // 37: cosmos.staking.v1beta1.Params
}
var file_cosmos_staking_v1beta1_query_proto_depIdxs = []int32{
28, // 0: cosmos.staking.v1beta1.QueryValidatorsRequest.pagination:type_name -> cosmos.base.query.v1beta1.PageRequest
@ -15462,41 +15559,42 @@ var file_cosmos_staking_v1beta1_query_proto_depIdxs = []int32{
30, // 23: cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse.pagination:type_name -> cosmos.base.query.v1beta1.PageResponse
29, // 24: cosmos.staking.v1beta1.QueryDelegatorValidatorResponse.validator:type_name -> cosmos.staking.v1beta1.Validator
34, // 25: cosmos.staking.v1beta1.QueryHistoricalInfoResponse.hist:type_name -> cosmos.staking.v1beta1.HistoricalInfo
35, // 26: cosmos.staking.v1beta1.QueryPoolResponse.pool:type_name -> cosmos.staking.v1beta1.Pool
36, // 27: cosmos.staking.v1beta1.QueryParamsResponse.params:type_name -> cosmos.staking.v1beta1.Params
0, // 28: cosmos.staking.v1beta1.Query.Validators:input_type -> cosmos.staking.v1beta1.QueryValidatorsRequest
2, // 29: cosmos.staking.v1beta1.Query.Validator:input_type -> cosmos.staking.v1beta1.QueryValidatorRequest
4, // 30: cosmos.staking.v1beta1.Query.ValidatorDelegations:input_type -> cosmos.staking.v1beta1.QueryValidatorDelegationsRequest
6, // 31: cosmos.staking.v1beta1.Query.ValidatorUnbondingDelegations:input_type -> cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest
8, // 32: cosmos.staking.v1beta1.Query.Delegation:input_type -> cosmos.staking.v1beta1.QueryDelegationRequest
10, // 33: cosmos.staking.v1beta1.Query.UnbondingDelegation:input_type -> cosmos.staking.v1beta1.QueryUnbondingDelegationRequest
12, // 34: cosmos.staking.v1beta1.Query.DelegatorDelegations:input_type -> cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest
14, // 35: cosmos.staking.v1beta1.Query.DelegatorUnbondingDelegations:input_type -> cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest
16, // 36: cosmos.staking.v1beta1.Query.Redelegations:input_type -> cosmos.staking.v1beta1.QueryRedelegationsRequest
18, // 37: cosmos.staking.v1beta1.Query.DelegatorValidators:input_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest
20, // 38: cosmos.staking.v1beta1.Query.DelegatorValidator:input_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorRequest
22, // 39: cosmos.staking.v1beta1.Query.HistoricalInfo:input_type -> cosmos.staking.v1beta1.QueryHistoricalInfoRequest
24, // 40: cosmos.staking.v1beta1.Query.Pool:input_type -> cosmos.staking.v1beta1.QueryPoolRequest
26, // 41: cosmos.staking.v1beta1.Query.Params:input_type -> cosmos.staking.v1beta1.QueryParamsRequest
1, // 42: cosmos.staking.v1beta1.Query.Validators:output_type -> cosmos.staking.v1beta1.QueryValidatorsResponse
3, // 43: cosmos.staking.v1beta1.Query.Validator:output_type -> cosmos.staking.v1beta1.QueryValidatorResponse
5, // 44: cosmos.staking.v1beta1.Query.ValidatorDelegations:output_type -> cosmos.staking.v1beta1.QueryValidatorDelegationsResponse
7, // 45: cosmos.staking.v1beta1.Query.ValidatorUnbondingDelegations:output_type -> cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse
9, // 46: cosmos.staking.v1beta1.Query.Delegation:output_type -> cosmos.staking.v1beta1.QueryDelegationResponse
11, // 47: cosmos.staking.v1beta1.Query.UnbondingDelegation:output_type -> cosmos.staking.v1beta1.QueryUnbondingDelegationResponse
13, // 48: cosmos.staking.v1beta1.Query.DelegatorDelegations:output_type -> cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse
15, // 49: cosmos.staking.v1beta1.Query.DelegatorUnbondingDelegations:output_type -> cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse
17, // 50: cosmos.staking.v1beta1.Query.Redelegations:output_type -> cosmos.staking.v1beta1.QueryRedelegationsResponse
19, // 51: cosmos.staking.v1beta1.Query.DelegatorValidators:output_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse
21, // 52: cosmos.staking.v1beta1.Query.DelegatorValidator:output_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorResponse
23, // 53: cosmos.staking.v1beta1.Query.HistoricalInfo:output_type -> cosmos.staking.v1beta1.QueryHistoricalInfoResponse
25, // 54: cosmos.staking.v1beta1.Query.Pool:output_type -> cosmos.staking.v1beta1.QueryPoolResponse
27, // 55: cosmos.staking.v1beta1.Query.Params:output_type -> cosmos.staking.v1beta1.QueryParamsResponse
42, // [42:56] is the sub-list for method output_type
28, // [28:42] is the sub-list for method input_type
28, // [28:28] is the sub-list for extension type_name
28, // [28:28] is the sub-list for extension extendee
0, // [0:28] is the sub-list for field type_name
35, // 26: cosmos.staking.v1beta1.QueryHistoricalInfoResponse.historical_record:type_name -> cosmos.staking.v1beta1.HistoricalRecord
36, // 27: cosmos.staking.v1beta1.QueryPoolResponse.pool:type_name -> cosmos.staking.v1beta1.Pool
37, // 28: cosmos.staking.v1beta1.QueryParamsResponse.params:type_name -> cosmos.staking.v1beta1.Params
0, // 29: cosmos.staking.v1beta1.Query.Validators:input_type -> cosmos.staking.v1beta1.QueryValidatorsRequest
2, // 30: cosmos.staking.v1beta1.Query.Validator:input_type -> cosmos.staking.v1beta1.QueryValidatorRequest
4, // 31: cosmos.staking.v1beta1.Query.ValidatorDelegations:input_type -> cosmos.staking.v1beta1.QueryValidatorDelegationsRequest
6, // 32: cosmos.staking.v1beta1.Query.ValidatorUnbondingDelegations:input_type -> cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsRequest
8, // 33: cosmos.staking.v1beta1.Query.Delegation:input_type -> cosmos.staking.v1beta1.QueryDelegationRequest
10, // 34: cosmos.staking.v1beta1.Query.UnbondingDelegation:input_type -> cosmos.staking.v1beta1.QueryUnbondingDelegationRequest
12, // 35: cosmos.staking.v1beta1.Query.DelegatorDelegations:input_type -> cosmos.staking.v1beta1.QueryDelegatorDelegationsRequest
14, // 36: cosmos.staking.v1beta1.Query.DelegatorUnbondingDelegations:input_type -> cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsRequest
16, // 37: cosmos.staking.v1beta1.Query.Redelegations:input_type -> cosmos.staking.v1beta1.QueryRedelegationsRequest
18, // 38: cosmos.staking.v1beta1.Query.DelegatorValidators:input_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorsRequest
20, // 39: cosmos.staking.v1beta1.Query.DelegatorValidator:input_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorRequest
22, // 40: cosmos.staking.v1beta1.Query.HistoricalInfo:input_type -> cosmos.staking.v1beta1.QueryHistoricalInfoRequest
24, // 41: cosmos.staking.v1beta1.Query.Pool:input_type -> cosmos.staking.v1beta1.QueryPoolRequest
26, // 42: cosmos.staking.v1beta1.Query.Params:input_type -> cosmos.staking.v1beta1.QueryParamsRequest
1, // 43: cosmos.staking.v1beta1.Query.Validators:output_type -> cosmos.staking.v1beta1.QueryValidatorsResponse
3, // 44: cosmos.staking.v1beta1.Query.Validator:output_type -> cosmos.staking.v1beta1.QueryValidatorResponse
5, // 45: cosmos.staking.v1beta1.Query.ValidatorDelegations:output_type -> cosmos.staking.v1beta1.QueryValidatorDelegationsResponse
7, // 46: cosmos.staking.v1beta1.Query.ValidatorUnbondingDelegations:output_type -> cosmos.staking.v1beta1.QueryValidatorUnbondingDelegationsResponse
9, // 47: cosmos.staking.v1beta1.Query.Delegation:output_type -> cosmos.staking.v1beta1.QueryDelegationResponse
11, // 48: cosmos.staking.v1beta1.Query.UnbondingDelegation:output_type -> cosmos.staking.v1beta1.QueryUnbondingDelegationResponse
13, // 49: cosmos.staking.v1beta1.Query.DelegatorDelegations:output_type -> cosmos.staking.v1beta1.QueryDelegatorDelegationsResponse
15, // 50: cosmos.staking.v1beta1.Query.DelegatorUnbondingDelegations:output_type -> cosmos.staking.v1beta1.QueryDelegatorUnbondingDelegationsResponse
17, // 51: cosmos.staking.v1beta1.Query.Redelegations:output_type -> cosmos.staking.v1beta1.QueryRedelegationsResponse
19, // 52: cosmos.staking.v1beta1.Query.DelegatorValidators:output_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorsResponse
21, // 53: cosmos.staking.v1beta1.Query.DelegatorValidator:output_type -> cosmos.staking.v1beta1.QueryDelegatorValidatorResponse
23, // 54: cosmos.staking.v1beta1.Query.HistoricalInfo:output_type -> cosmos.staking.v1beta1.QueryHistoricalInfoResponse
25, // 55: cosmos.staking.v1beta1.Query.Pool:output_type -> cosmos.staking.v1beta1.QueryPoolResponse
27, // 56: cosmos.staking.v1beta1.Query.Params:output_type -> cosmos.staking.v1beta1.QueryParamsResponse
43, // [43:57] is the sub-list for method output_type
29, // [29:43] is the sub-list for method input_type
29, // [29:29] is the sub-list for extension type_name
29, // [29:29] is the sub-list for extension extendee
0, // [0:29] is the sub-list for field type_name
}
func init() { file_cosmos_staking_v1beta1_query_proto_init() }

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,7 @@
* 26 November 2019: Start of first version
* 2 December 2019: Final draft of first version
* 7 September 2023: Reduce HistoricalInfo type
## Context
@ -16,10 +17,11 @@ The application MUST store the most recent `n` headers in a persistent store. At
The application MUST store this information by storing new headers immediately when handling `abci.RequestBeginBlock`:
```go
func BeginBlock(ctx sdk.Context, keeper HistoricalHeaderKeeper, req abci.RequestBeginBlock) abci.ResponseBeginBlock {
func BeginBlock(ctx sdk.Context, keeper HistoricalHeaderKeeper) error {
info := HistoricalInfo{
Header: ctx.BlockHeader(),
ValSet: keeper.StakingKeeper.GetAllValidators(ctx), // note that this must be stored in a canonical order
apphash: ctx.HeaderInfo().AppHash,
Time: ctx.HeaderInfo().Time,
NextValidatorsHash: ctx.CometInfo().NextValidatorsHash,
}
keeper.SetHistoricalInfo(ctx, ctx.BlockHeight(), info)
n := keeper.GetParamRecentHeadersToStore()

View File

@ -365,7 +365,8 @@ message QueryHistoricalInfoRequest {
// method.
message QueryHistoricalInfoResponse {
// hist defines the historical info at the given height.
HistoricalInfo hist = 1;
HistoricalInfo hist = 1 [deprecated = true];
HistoricalRecord historical_record = 2;
}
// QueryPoolRequest is request type for the Query/Pool RPC method.

View File

@ -19,10 +19,22 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types";
// recent HistoricalInfo
// (`n` is set by the staking module's `historical_entries` parameter).
message HistoricalInfo {
option deprecated = true;
tendermint.types.Header header = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
repeated Validator valset = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true];
}
// Historical contains a set of minimum values needed for evaluating historical validator sets and blocks.
// It is stored as part of staking module's state, which persists the `n` most
// recent HistoricalInfo
// (`n` is set by the staking module's `historical_entries` parameter).
message HistoricalRecord {
bytes apphash = 1;
google.protobuf.Timestamp time = 2 [(gogoproto.stdtime) = true];
bytes validator_hash = 3;
}
// CommissionRates defines the initial commission rates to be used for creating
// a validator.
message CommissionRates {

View File

@ -4,7 +4,6 @@ import (
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"gotest.tools/v3/assert"
"pgregory.net/rapid"
@ -662,24 +661,14 @@ func TestGRPCHistoricalInfo(t *testing.T) {
f := initDeterministicFixture(t)
rapid.Check(t, func(rt *rapid.T) {
numVals := rapid.IntRange(1, 5).Draw(rt, "num-vals")
vals := stakingtypes.Validators{}
for i := 0; i < numVals; i++ {
validator := createAndSetValidatorWithStatus(t, rt, f, stakingtypes.Bonded)
vals.Validators = append(vals.Validators, validator)
}
historicalInfo := stakingtypes.HistoricalInfo{
Header: cmtproto.Header{},
Valset: vals.Validators,
}
historical := stakingtypes.HistoricalRecord{}
height := rapid.Int64Min(0).Draw(rt, "height")
assert.NilError(t, f.stakingKeeper.HistoricalInfo.Set(
f.ctx,
uint64(height),
historicalInfo,
historical,
))
req := &stakingtypes.QueryHistoricalInfoRequest{
@ -691,12 +680,7 @@ func TestGRPCHistoricalInfo(t *testing.T) {
f = initDeterministicFixture(t) // reset
validator := getStaticValidator(t, f)
historicalInfo := stakingtypes.HistoricalInfo{
Header: cmtproto.Header{},
Valset: []stakingtypes.Validator{validator},
}
historicalInfo := stakingtypes.HistoricalRecord{}
height := int64(127)
@ -710,7 +694,7 @@ func TestGRPCHistoricalInfo(t *testing.T) {
Height: height,
}
testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.HistoricalInfo, 1945, false)
testdata.DeterministicIterations(f.ctx, t, req, f.queryClient.HistoricalInfo, 1027, false)
}
func TestGRPCDelegatorValidators(t *testing.T) {

View File

@ -29,7 +29,7 @@ func createValidatorAccs(t *testing.T, f *fixture) ([]sdk.AccAddress, []types.Va
// have its order changed
sortedVals := make([]types.Validator, len(validators))
copy(sortedVals, validators)
hi := types.NewHistoricalInfo(header, types.Validators{Validators: sortedVals}, f.stakingKeeper.PowerReduction(f.sdkCtx))
hi := types.HistoricalRecord{Time: &header.Time, Apphash: header.AppHash, ValidatorHash: header.NextValidatorsHash}
assert.NilError(t, f.stakingKeeper.HistoricalInfo.Set(f.sdkCtx, uint64(5), hi))
return addrs, validators
@ -783,7 +783,7 @@ func TestGRPCQueryHistoricalInfo(t *testing.T) {
if tc.expPass {
assert.NilError(t, err)
assert.Assert(t, res != nil)
assert.Assert(t, hi.Equal(res.Hist))
assert.DeepEqual(t, &hi, res.HistoricalRecord)
} else {
assert.ErrorContains(t, err, tc.expErrMsg)
assert.Assert(t, res == nil)

View File

@ -402,7 +402,7 @@ func (k Querier) HistoricalInfo(ctx context.Context, req *types.QueryHistoricalI
return nil, status.Errorf(codes.NotFound, "historical info for height %d not found", req.Height)
}
return &types.QueryHistoricalInfoResponse{Hist: &hi}, nil
return &types.QueryHistoricalInfoResponse{HistoricalRecord: &hi}, nil
}
// Redelegations queries redelegations of given address

View File

@ -24,7 +24,7 @@ func (k Keeper) TrackHistoricalInfo(ctx context.Context) error {
// Since the entries to be deleted are always in a continuous range, we can iterate
// over the historical entries starting from the most recent version to be pruned
// and then return at the first empty entry.
for i := sdkCtx.BlockHeight() - int64(entryNum); i >= 0; i-- {
for i := sdkCtx.HeaderInfo().Height - int64(entryNum); i >= 0; i-- {
has, err := k.HistoricalInfo.Has(ctx, uint64(i))
if err != nil {
return err
@ -42,14 +42,14 @@ func (k Keeper) TrackHistoricalInfo(ctx context.Context) error {
return nil
}
// Create HistoricalInfo struct
lastVals, err := k.GetLastValidators(ctx)
if err != nil {
return err
time := sdkCtx.HeaderInfo().Time
historicalEntry := types.HistoricalRecord{
Time: &time,
ValidatorHash: sdkCtx.CometInfo().ValidatorsHash,
Apphash: sdkCtx.HeaderInfo().AppHash,
}
historicalEntry := types.NewHistoricalInfo(sdkCtx.BlockHeader(), types.Validators{Validators: lastVals, ValidatorCodec: k.validatorAddressCodec}, k.PowerReduction(ctx))
// Set latest HistoricalInfo at current height
return k.HistoricalInfo.Set(ctx, uint64(sdkCtx.BlockHeight()), historicalEntry)
return k.HistoricalInfo.Set(ctx, uint64(sdkCtx.HeaderInfo().Height), historicalEntry)
}

View File

@ -1,7 +1,7 @@
package keeper_test
import (
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"time"
"cosmossdk.io/collections"
coreheader "cosmossdk.io/core/header"
@ -34,19 +34,23 @@ func (s *KeeperTestSuite) TestHistoricalInfo() {
validators[i] = testutil.NewValidator(s.T(), valAddr, PKs[i])
}
hi := stakingtypes.NewHistoricalInfo(ctx.BlockHeader(), stakingtypes.Validators{Validators: validators}, keeper.PowerReduction(ctx))
time := ctx.BlockTime()
hi := stakingtypes.HistoricalRecord{
Time: &time,
ValidatorHash: ctx.CometInfo().ValidatorsHash,
Apphash: ctx.HeaderInfo().AppHash,
}
require.NoError(keeper.HistoricalInfo.Set(ctx, uint64(2), hi))
recv, err := keeper.HistoricalInfo.Get(ctx, uint64(2))
require.NoError(err, "HistoricalInfo found after set")
require.Equal(hi, recv, "HistoricalInfo not equal")
require.True(IsValSetSorted(recv.Valset, keeper.PowerReduction(ctx)), "HistoricalInfo validators is not sorted")
require.NoError(keeper.HistoricalInfo.Remove(ctx, uint64(2)))
recv, err = keeper.HistoricalInfo.Get(ctx, uint64(2))
require.ErrorIs(err, collections.ErrNotFound, "HistoricalInfo not found after delete")
require.Equal(stakingtypes.HistoricalInfo{}, recv, "HistoricalInfo is not empty")
require.Equal(stakingtypes.HistoricalRecord{}, recv, "HistoricalInfo is not empty")
}
func (s *KeeperTestSuite) TestTrackHistoricalInfo() {
@ -62,20 +66,19 @@ func (s *KeeperTestSuite) TestTrackHistoricalInfo() {
// set historical info at 5, 4 which should be pruned
// and check that it has been stored
h4 := cmtproto.Header{
ChainID: "HelloChain",
Height: 4,
t := time.Now().Round(0).UTC()
hi4 := stakingtypes.HistoricalRecord{
Time: &t,
ValidatorHash: []byte("validatorHash"),
Apphash: []byte("AppHash"),
}
h5 := cmtproto.Header{
ChainID: "HelloChain",
Height: 5,
hi5 := stakingtypes.HistoricalRecord{
Time: &t,
ValidatorHash: []byte("validatorHash"),
Apphash: []byte("AppHash"),
}
valSet := []stakingtypes.Validator{
testutil.NewValidator(s.T(), addrVals[0], PKs[0]),
testutil.NewValidator(s.T(), addrVals[1], PKs[1]),
}
hi4 := stakingtypes.NewHistoricalInfo(h4, stakingtypes.Validators{Validators: valSet}, keeper.PowerReduction(ctx))
hi5 := stakingtypes.NewHistoricalInfo(h5, stakingtypes.Validators{Validators: valSet}, keeper.PowerReduction(ctx))
require.NoError(keeper.HistoricalInfo.Set(ctx, uint64(4), hi4))
require.NoError(keeper.HistoricalInfo.Set(ctx, uint64(5), hi5))
recv, err := keeper.HistoricalInfo.Get(ctx, uint64(4))
@ -105,18 +108,19 @@ func (s *KeeperTestSuite) TestTrackHistoricalInfo() {
require.True(IsValSetSorted(vals, keeper.PowerReduction(ctx)))
// Set Header for BeginBlock context
header := cmtproto.Header{
ctx = ctx.WithHeaderInfo(coreheader.Info{
ChainID: "HelloChain",
Height: 10,
}
ctx = ctx.WithBlockHeader(header).WithHeaderInfo(coreheader.Info{ChainID: header.ChainID, Height: header.Height})
Time: t,
})
require.NoError(keeper.TrackHistoricalInfo(ctx))
// Check HistoricalInfo at height 10 is persisted
expected := stakingtypes.HistoricalInfo{
Header: header,
Valset: vals,
expected := stakingtypes.HistoricalRecord{
Time: &t,
ValidatorHash: ctx.CometInfo().ValidatorsHash,
Apphash: ctx.HeaderInfo().AppHash,
}
recv, err = keeper.HistoricalInfo.Get(ctx, uint64(10))
require.NoError(err, "GetHistoricalInfo failed after BeginBlock")
@ -125,39 +129,42 @@ func (s *KeeperTestSuite) TestTrackHistoricalInfo() {
// Check HistoricalInfo at height 5, 4 is pruned
recv, err = keeper.HistoricalInfo.Get(ctx, uint64(4))
require.ErrorIs(err, collections.ErrNotFound, "GetHistoricalInfo did not prune earlier height")
require.Equal(stakingtypes.HistoricalInfo{}, recv, "GetHistoricalInfo at height 4 is not empty after prune")
require.Equal(stakingtypes.HistoricalRecord{}, recv, "GetHistoricalInfo at height 4 is not empty after prune")
recv, err = keeper.HistoricalInfo.Get(ctx, uint64(5))
require.ErrorIs(err, collections.ErrNotFound, "GetHistoricalInfo did not prune first prune height")
require.Equal(stakingtypes.HistoricalInfo{}, recv, "GetHistoricalInfo at height 5 is not empty after prune")
require.Equal(stakingtypes.HistoricalRecord{}, recv, "GetHistoricalInfo at height 5 is not empty after prune")
}
func (s *KeeperTestSuite) TestGetAllHistoricalInfo() {
ctx, keeper := s.ctx, s.stakingKeeper
require := s.Require()
_, addrVals := createValAddrs(50)
t := time.Now().Round(0).UTC()
valSet := []stakingtypes.Validator{
testutil.NewValidator(s.T(), addrVals[0], PKs[0]),
testutil.NewValidator(s.T(), addrVals[1], PKs[1]),
hist1 := stakingtypes.HistoricalRecord{
Time: &t,
ValidatorHash: nil,
Apphash: nil,
}
hist2 := stakingtypes.HistoricalRecord{
Time: &t,
ValidatorHash: nil,
Apphash: nil,
}
hist3 := stakingtypes.HistoricalRecord{
Time: &t,
ValidatorHash: nil,
Apphash: nil,
}
header1 := cmtproto.Header{ChainID: "HelloChain", Height: 9}
header2 := cmtproto.Header{ChainID: "HelloChain", Height: 10}
header3 := cmtproto.Header{ChainID: "HelloChain", Height: 11}
hist1 := stakingtypes.HistoricalInfo{Header: header1, Valset: valSet}
hist2 := stakingtypes.HistoricalInfo{Header: header2, Valset: valSet}
hist3 := stakingtypes.HistoricalInfo{Header: header3, Valset: valSet}
expHistInfos := []stakingtypes.HistoricalInfo{hist1, hist2, hist3}
expHistInfos := []stakingtypes.HistoricalRecord{hist1, hist2, hist3}
for i, hi := range expHistInfos {
require.NoError(keeper.HistoricalInfo.Set(ctx, uint64(int64(9+i)), hi))
}
var infos []stakingtypes.HistoricalInfo
err := keeper.HistoricalInfo.Walk(ctx, nil, func(key uint64, info stakingtypes.HistoricalInfo) (stop bool, err error) {
var infos []stakingtypes.HistoricalRecord
err := keeper.HistoricalInfo.Walk(ctx, nil, func(key uint64, info stakingtypes.HistoricalRecord) (stop bool, err error) {
infos = append(infos, info)
return false, nil
})

View File

@ -25,6 +25,22 @@ var _ types.ValidatorSet = Keeper{}
// Implements DelegationSet interface
var _ types.DelegationSet = Keeper{}
func HistoricalInfoCodec(cdc codec.BinaryCodec) collcodec.ValueCodec[types.HistoricalRecord] {
return collcodec.NewAltValueCodec(codec.CollValue[types.HistoricalRecord](cdc), func(b []byte) (types.HistoricalRecord, error) {
historicalinfo := types.HistoricalInfo{} //nolint: staticcheck // HistoricalInfo is deprecated
err := historicalinfo.Unmarshal(b)
if err != nil {
return types.HistoricalRecord{}, err
}
return types.HistoricalRecord{
Apphash: historicalinfo.Header.AppHash,
Time: &historicalinfo.Header.Time,
ValidatorHash: historicalinfo.Header.NextValidatorsHash,
}, nil
})
}
// Keeper of the x/staking store
type Keeper struct {
storeService storetypes.KVStoreService
@ -37,8 +53,9 @@ type Keeper struct {
consensusAddressCodec addresscodec.Codec
Schema collections.Schema
// HistoricalInfo key: Height | value: HistoricalInfo
HistoricalInfo collections.Map[uint64, types.HistoricalInfo]
HistoricalInfo collections.Map[uint64, types.HistoricalRecord]
// LastTotalPower value: LastTotalPower
LastTotalPower collections.Item[math.Int]
// ValidatorUpdates value: ValidatorUpdates
@ -117,7 +134,7 @@ func NewKeeper(
validatorAddressCodec: validatorAddressCodec,
consensusAddressCodec: consensusAddressCodec,
LastTotalPower: collections.NewItem(sb, types.LastTotalPowerKey, "last_total_power", sdk.IntValue),
HistoricalInfo: collections.NewMap(sb, types.HistoricalInfoKey, "historical_info", collections.Uint64Key, codec.CollValue[types.HistoricalInfo](cdc)),
HistoricalInfo: collections.NewMap(sb, types.HistoricalInfoKey, "historical_info", collections.Uint64Key, HistoricalInfoCodec(cdc)),
ValidatorUpdates: collections.NewItem(sb, types.ValidatorUpdatesKey, "validator_updates", codec.CollValue[types.ValidatorUpdates](cdc)),
Delegations: collections.NewMap(
sb, types.DelegationKey, "delegations",

View File

@ -4,7 +4,6 @@ import (
"sort"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"github.com/cosmos/gogoproto/proto"
"cosmossdk.io/core/address"
"cosmossdk.io/errors"
@ -40,22 +39,6 @@ func ValidateBasic(hi HistoricalInfo, valAc address.Codec) error {
return nil
}
// Equal checks if receiver is equal to the parameter
func (hi *HistoricalInfo) Equal(hi2 *HistoricalInfo) bool {
if !proto.Equal(&hi.Header, &hi2.Header) {
return false
}
if len(hi.Valset) != len(hi2.Valset) {
return false
}
for i := range hi.Valset {
if !hi.Valset[i].Equal(&hi2.Valset[i]) {
return false
}
}
return true
}
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
func (hi HistoricalInfo) UnpackInterfaces(c codectypes.AnyUnpacker) error {
for i := range hi.Valset {

View File

@ -1182,7 +1182,8 @@ func (m *QueryHistoricalInfoRequest) GetHeight() int64 {
// method.
type QueryHistoricalInfoResponse struct {
// hist defines the historical info at the given height.
Hist *HistoricalInfo `protobuf:"bytes,1,opt,name=hist,proto3" json:"hist,omitempty"`
Hist *HistoricalInfo `protobuf:"bytes,1,opt,name=hist,proto3" json:"hist,omitempty"` // Deprecated: Do not use.
HistoricalRecord *HistoricalRecord `protobuf:"bytes,2,opt,name=historical_record,json=historicalRecord,proto3" json:"historical_record,omitempty"`
}
func (m *QueryHistoricalInfoResponse) Reset() { *m = QueryHistoricalInfoResponse{} }
@ -1218,6 +1219,7 @@ func (m *QueryHistoricalInfoResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_QueryHistoricalInfoResponse proto.InternalMessageInfo
// Deprecated: Do not use.
func (m *QueryHistoricalInfoResponse) GetHist() *HistoricalInfo {
if m != nil {
return m.Hist
@ -1225,6 +1227,13 @@ func (m *QueryHistoricalInfoResponse) GetHist() *HistoricalInfo {
return nil
}
func (m *QueryHistoricalInfoResponse) GetHistoricalRecord() *HistoricalRecord {
if m != nil {
return m.HistoricalRecord
}
return nil
}
// QueryPoolRequest is request type for the Query/Pool RPC method.
type QueryPoolRequest struct {
}
@ -1427,94 +1436,96 @@ func init() {
}
var fileDescriptor_f270127f442bbcd8 = []byte{
// 1390 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xdb, 0x6b, 0x1c, 0x65,
0x1b, 0xdf, 0x37, 0xcd, 0x17, 0xbe, 0x3c, 0xa5, 0xa1, 0x7d, 0x77, 0x1b, 0xd3, 0x69, 0xba, 0xd9,
0x0c, 0xa5, 0xe6, 0xd0, 0xec, 0x98, 0xa4, 0xb6, 0xb1, 0xa2, 0xed, 0xc6, 0x52, 0x5b, 0x5b, 0x6a,
0xba, 0x62, 0xf0, 0x48, 0x98, 0x64, 0xa6, 0xb3, 0x43, 0x37, 0x33, 0xdb, 0x79, 0x27, 0xa1, 0x25,
0x04, 0xc1, 0x0b, 0xe9, 0x95, 0x08, 0xde, 0x4b, 0x2f, 0x45, 0x14, 0x72, 0x91, 0x8a, 0x5e, 0xd8,
0x4b, 0xe9, 0x85, 0x48, 0xa9, 0x54, 0xf4, 0xa6, 0x4a, 0x22, 0xe8, 0x8d, 0xff, 0x81, 0x88, 0xec,
0xcc, 0x33, 0xa7, 0xcc, 0x61, 0x67, 0x37, 0x1b, 0x48, 0x6e, 0xda, 0xdd, 0x77, 0x9e, 0xc3, 0xef,
0xf7, 0x1c, 0xde, 0x79, 0x9e, 0x0d, 0xf0, 0x0b, 0x3a, 0x5b, 0xd4, 0x99, 0xc0, 0x4c, 0xf1, 0xa6,
0xaa, 0x29, 0xc2, 0xf2, 0xf8, 0xbc, 0x6c, 0x8a, 0xe3, 0xc2, 0xad, 0x25, 0xd9, 0xb8, 0x53, 0xac,
0x19, 0xba, 0xa9, 0xd3, 0x5e, 0x5b, 0xa6, 0x88, 0x32, 0x45, 0x94, 0xe1, 0x46, 0x50, 0x77, 0x5e,
0x64, 0xb2, 0xad, 0xe0, 0xaa, 0xd7, 0x44, 0x45, 0xd5, 0x44, 0x53, 0xd5, 0x35, 0xdb, 0x06, 0x97,
0x53, 0x74, 0x45, 0xb7, 0x3e, 0x0a, 0xf5, 0x4f, 0x78, 0xda, 0xaf, 0xe8, 0xba, 0x52, 0x95, 0x05,
0xb1, 0xa6, 0x0a, 0xa2, 0xa6, 0xe9, 0xa6, 0xa5, 0xc2, 0xf0, 0xe9, 0xf1, 0x18, 0x6c, 0x0e, 0x0e,
0x5b, 0xea, 0x88, 0x2d, 0x35, 0x67, 0x1b, 0x47, 0xa8, 0xf6, 0xa3, 0xa3, 0x68, 0xc0, 0xc1, 0xe6,
0x67, 0xc5, 0x1d, 0x12, 0x17, 0x55, 0x4d, 0x17, 0xac, 0x7f, 0xed, 0x23, 0xfe, 0x36, 0xf4, 0x5e,
0xaf, 0x4b, 0xcc, 0x8a, 0x55, 0x55, 0x12, 0x4d, 0xdd, 0x60, 0x65, 0xf9, 0xd6, 0x92, 0xcc, 0x4c,
0xda, 0x0b, 0x5d, 0xcc, 0x14, 0xcd, 0x25, 0xd6, 0x47, 0x0a, 0x64, 0xa8, 0xbb, 0x8c, 0xdf, 0xe8,
0x45, 0x00, 0x8f, 0x6a, 0x5f, 0x47, 0x81, 0x0c, 0xed, 0x9f, 0x38, 0x51, 0x44, 0x10, 0xf5, 0xb8,
0x14, 0x6d, 0x97, 0x08, 0xbd, 0x38, 0x23, 0x2a, 0x32, 0xda, 0x2c, 0xfb, 0x34, 0xf9, 0x35, 0x02,
0xcf, 0x84, 0x5c, 0xb3, 0x9a, 0xae, 0x31, 0x99, 0x5e, 0x05, 0x58, 0x76, 0x4f, 0xfb, 0x48, 0x61,
0xdf, 0xd0, 0xfe, 0x89, 0xc1, 0x62, 0x74, 0x4e, 0x8a, 0xae, 0xfe, 0x74, 0xf7, 0xc3, 0xa7, 0x03,
0x99, 0xcf, 0xff, 0x5c, 0x1b, 0x21, 0x65, 0x9f, 0x3e, 0x7d, 0x35, 0x02, 0xf1, 0xb3, 0x0d, 0x11,
0xdb, 0x50, 0x02, 0x90, 0x45, 0x38, 0x1c, 0x44, 0xec, 0xc4, 0xea, 0x12, 0xf4, 0xb8, 0xfe, 0xe6,
0x44, 0x49, 0x32, 0xec, 0x98, 0x4d, 0x0f, 0x3e, 0x5e, 0x1f, 0x3b, 0x86, 0x8e, 0x5c, 0xa5, 0x92,
0x24, 0x19, 0x32, 0x63, 0x6f, 0x98, 0x86, 0xaa, 0x29, 0xe5, 0x03, 0xcb, 0xfe, 0x73, 0x5e, 0xda,
0x9a, 0x0f, 0x37, 0x26, 0xaf, 0x41, 0xb7, 0x2b, 0x6a, 0x99, 0x6f, 0x36, 0x24, 0x9e, 0x3a, 0xbf,
0x4e, 0xa0, 0x10, 0x74, 0x73, 0x41, 0xae, 0xca, 0x8a, 0x5d, 0x8a, 0x6d, 0x27, 0xd5, 0xb6, 0x92,
0xf9, 0x9b, 0xc0, 0x60, 0x02, 0x6c, 0x0c, 0xd4, 0x07, 0x90, 0x93, 0xdc, 0xe3, 0x39, 0x03, 0x8f,
0x9d, 0x32, 0x1a, 0x89, 0x8b, 0x99, 0x67, 0xca, 0xb1, 0x34, 0x5d, 0xa8, 0x07, 0xef, 0x8b, 0xdf,
0x06, 0xb2, 0xe1, 0x67, 0xcc, 0x8e, 0x69, 0x56, 0x0a, 0x3f, 0x69, 0x5f, 0xbd, 0x7d, 0x47, 0x60,
0x38, 0xc8, 0xf7, 0x4d, 0x6d, 0x5e, 0xd7, 0x24, 0x55, 0x53, 0xf6, 0x44, 0xbe, 0x9e, 0x12, 0x18,
0x49, 0x83, 0x1f, 0x13, 0xa7, 0x40, 0x76, 0xc9, 0x79, 0x1e, 0xca, 0xdb, 0x68, 0x5c, 0xde, 0x22,
0x4c, 0xfa, 0xab, 0x9e, 0xba, 0x26, 0x77, 0x20, 0x41, 0x5f, 0x11, 0x6c, 0x57, 0x7f, 0x81, 0xd8,
0xd9, 0x38, 0x07, 0x3d, 0x58, 0x1b, 0xc1, 0x6c, 0xf4, 0x3d, 0x5e, 0x1f, 0xcb, 0xa1, 0xab, 0x2d,
0x49, 0x70, 0xe5, 0xad, 0x24, 0x84, 0xd3, 0xd9, 0xd1, 0x5a, 0x3a, 0xcf, 0xfe, 0xff, 0xee, 0xbd,
0x81, 0xcc, 0x5f, 0xf7, 0x06, 0x32, 0xfc, 0x32, 0x5e, 0xb9, 0xe1, 0x7a, 0xa6, 0xef, 0x42, 0x36,
0xa2, 0x6b, 0xf0, 0xa2, 0x69, 0xa2, 0x69, 0xca, 0x34, 0xdc, 0x12, 0xfc, 0xd7, 0x04, 0x06, 0x2c,
0xc7, 0x11, 0xc9, 0xda, 0xd5, 0x01, 0x33, 0xf0, 0x9e, 0x8c, 0xc4, 0x8d, 0x91, 0xbb, 0x06, 0x5d,
0x76, 0x8d, 0x61, 0xb0, 0x5a, 0xad, 0x54, 0xb4, 0xc2, 0xdf, 0x77, 0x2e, 0xe7, 0x0b, 0x0e, 0xbd,
0x88, 0x66, 0xdf, 0x76, 0xb4, 0xda, 0xd4, 0xe3, 0xbe, 0x58, 0xfd, 0xec, 0xdc, 0xce, 0xd1, 0xb8,
0x31, 0x5a, 0x95, 0xb6, 0xdd, 0xce, 0xbe, 0xd0, 0xed, 0xec, 0x35, 0xfc, 0xc0, 0xb9, 0x86, 0x5d,
0x62, 0x49, 0xd7, 0xf0, 0x2e, 0xcc, 0x8c, 0x7b, 0x0f, 0x37, 0x20, 0xb0, 0x67, 0xef, 0xe1, 0x07,
0x1d, 0x70, 0xc4, 0x22, 0x58, 0x96, 0xa5, 0x1d, 0xc9, 0x08, 0x65, 0xc6, 0xc2, 0x5c, 0xe4, 0xed,
0x12, 0x6f, 0xe4, 0x20, 0x33, 0x16, 0x66, 0xb7, 0xbc, 0x57, 0xa9, 0xc4, 0xcc, 0xad, 0x76, 0xf6,
0x35, 0xb2, 0x23, 0x31, 0x73, 0x36, 0xe1, 0xfd, 0xdc, 0xd9, 0x86, 0x0a, 0x79, 0x42, 0x80, 0x8b,
0x0a, 0x20, 0x56, 0x84, 0x06, 0xbd, 0x86, 0x9c, 0xd0, 0xb6, 0x27, 0xe3, 0x8a, 0xc2, 0x6f, 0x2e,
0xaa, 0x71, 0x0f, 0x1b, 0xf2, 0x8e, 0xb6, 0xee, 0xba, 0xf3, 0xe2, 0x71, 0x2b, 0x3f, 0xbc, 0xe8,
0xec, 0xc2, 0x86, 0xfd, 0x36, 0xf4, 0x0a, 0xd8, 0x3b, 0x4b, 0xd2, 0x7d, 0x02, 0xf9, 0x18, 0xec,
0xbb, 0xfa, 0x55, 0xbf, 0x18, 0x5b, 0x29, 0x3b, 0xb2, 0x82, 0x9d, 0xc2, 0x86, 0xbb, 0xa4, 0x32,
0x53, 0x37, 0xd4, 0x05, 0xb1, 0x7a, 0x59, 0xbb, 0xa1, 0xfb, 0x96, 0xef, 0x8a, 0xac, 0x2a, 0x15,
0xd3, 0x72, 0xb3, 0xaf, 0x8c, 0xdf, 0xf8, 0xb7, 0xe1, 0x68, 0xa4, 0x16, 0x02, 0x3c, 0x0b, 0x9d,
0x15, 0x95, 0x99, 0x88, 0xed, 0x44, 0x1c, 0xb6, 0x2d, 0xda, 0x96, 0x0e, 0x4f, 0xe1, 0xa0, 0x65,
0x7a, 0x46, 0xd7, 0xab, 0x08, 0x83, 0x9f, 0x81, 0x43, 0xbe, 0x33, 0x74, 0xf2, 0x22, 0x74, 0xd6,
0x74, 0xbd, 0x8a, 0x4e, 0xfa, 0xe3, 0x9c, 0xd4, 0x75, 0xfc, 0xdc, 0x2d, 0x25, 0x3e, 0x07, 0xd4,
0xb6, 0x28, 0x1a, 0xe2, 0xa2, 0xd3, 0x82, 0xfc, 0x5b, 0x90, 0x0d, 0x9c, 0xa2, 0xa7, 0x12, 0x74,
0xd5, 0xac, 0x13, 0xf4, 0x95, 0x8f, 0xf5, 0x65, 0x49, 0x05, 0x86, 0x29, 0x5b, 0x71, 0x62, 0xad,
0x17, 0xfe, 0x67, 0x99, 0xa6, 0x9f, 0x11, 0x00, 0xaf, 0x8b, 0x68, 0x31, 0xce, 0x56, 0xf4, 0xcf,
0x21, 0x9c, 0x90, 0x5a, 0x1e, 0x67, 0x5e, 0xe1, 0x6e, 0x1d, 0xc8, 0x87, 0x3f, 0xfd, 0xf1, 0x69,
0xc7, 0x71, 0xca, 0x0b, 0x31, 0x3f, 0xec, 0xf8, 0x3a, 0xf0, 0x4b, 0x02, 0xdd, 0xae, 0x1d, 0x3a,
0x96, 0xce, 0x9f, 0x03, 0xaf, 0x98, 0x56, 0x1c, 0xd1, 0x9d, 0xf7, 0xd0, 0x3d, 0x4f, 0x27, 0x1b,
0xa3, 0x13, 0x56, 0x82, 0x0d, 0xb7, 0x4a, 0x7f, 0x25, 0x90, 0x8b, 0xda, 0xc3, 0xe9, 0x54, 0x3a,
0x28, 0xe1, 0xd1, 0x89, 0x7b, 0xa1, 0x05, 0x4d, 0xe4, 0x73, 0xd5, 0xe3, 0x53, 0xa2, 0xe7, 0x5a,
0xe0, 0x23, 0xf8, 0xde, 0x7b, 0xf4, 0x5f, 0x02, 0xc7, 0x12, 0x77, 0x56, 0x5a, 0x4a, 0x07, 0x35,
0x61, 0x50, 0xe4, 0xa6, 0xb7, 0x63, 0x02, 0x69, 0xcf, 0x7a, 0xb4, 0xaf, 0xd0, 0xcb, 0xad, 0xd0,
0xf6, 0x26, 0x3d, 0x7f, 0x00, 0x7e, 0x20, 0x00, 0x9e, 0xbf, 0x06, 0xcd, 0x12, 0xda, 0xe5, 0x1a,
0x34, 0x4b, 0x78, 0x96, 0xe7, 0xdf, 0xf7, 0x78, 0x94, 0xe9, 0xcc, 0x36, 0xd3, 0x27, 0xac, 0x04,
0xdf, 0x2e, 0xab, 0xf4, 0x1f, 0x02, 0xd9, 0x88, 0x38, 0xd2, 0x33, 0x89, 0x38, 0xe3, 0x97, 0x55,
0x6e, 0xaa, 0x79, 0x45, 0x64, 0x6a, 0x78, 0x4c, 0x15, 0x2a, 0xb7, 0x9b, 0x69, 0x64, 0x3a, 0xe9,
0x8f, 0x04, 0x72, 0x51, 0x4b, 0x59, 0x83, 0x56, 0x4d, 0xd8, 0x3f, 0x1b, 0xb4, 0x6a, 0xd2, 0x06,
0xc8, 0x97, 0xbc, 0x08, 0x9c, 0xa6, 0xa7, 0xe2, 0x22, 0x90, 0x98, 0xcf, 0x7a, 0x7f, 0x26, 0xee,
0x32, 0x0d, 0xfa, 0x33, 0xcd, 0x22, 0xd7, 0xa0, 0x3f, 0x53, 0xad, 0x52, 0x29, 0xfb, 0xd3, 0xa5,
0x97, 0x32, 0xa1, 0x8c, 0x7e, 0x4f, 0xe0, 0x40, 0x60, 0x54, 0xa7, 0xe3, 0x89, 0x68, 0xa3, 0xf6,
0x22, 0x6e, 0xa2, 0x19, 0x15, 0x24, 0x74, 0xcd, 0x23, 0xf4, 0x0a, 0x2d, 0xb5, 0x42, 0xc8, 0x08,
0xc0, 0x7e, 0x42, 0x20, 0x1b, 0x31, 0xe4, 0x36, 0xe8, 0xcc, 0xf8, 0x69, 0x9e, 0x9b, 0x6a, 0x5e,
0x11, 0xa9, 0x5d, 0xf1, 0xa8, 0x9d, 0xa7, 0x2f, 0xb7, 0x42, 0xcd, 0xf7, 0x32, 0xdf, 0x24, 0x40,
0xc3, 0xce, 0xe8, 0xe9, 0x26, 0xd1, 0x39, 0xac, 0xce, 0x34, 0xad, 0x87, 0xa4, 0xde, 0xf3, 0x48,
0x5d, 0xa7, 0xaf, 0x6f, 0x8f, 0x54, 0x78, 0x06, 0xf8, 0x86, 0x40, 0x4f, 0x70, 0x98, 0xa4, 0xc9,
0x45, 0x15, 0x39, 0xed, 0x72, 0x93, 0x4d, 0xe9, 0x20, 0xb3, 0x97, 0x3c, 0x66, 0x13, 0xf4, 0xb9,
0x38, 0x66, 0x15, 0x57, 0x79, 0x4e, 0xd5, 0x6e, 0xe8, 0xc2, 0x8a, 0x3d, 0x48, 0xaf, 0xd2, 0x8f,
0x08, 0x74, 0xd6, 0x47, 0x54, 0x3a, 0x94, 0xe8, 0xdc, 0x37, 0x0d, 0x73, 0xc3, 0x29, 0x24, 0x11,
0xdc, 0xb0, 0x07, 0x2e, 0x4f, 0xfb, 0xe3, 0xc0, 0xd5, 0x27, 0x62, 0xfa, 0x31, 0x81, 0x2e, 0x7b,
0x7e, 0xa5, 0x23, 0xc9, 0x0e, 0xfc, 0x23, 0x33, 0x37, 0x9a, 0x4a, 0x16, 0xe1, 0x8c, 0x7a, 0x70,
0x0a, 0x34, 0x1f, 0x0b, 0xc7, 0x9e, 0xa2, 0x2f, 0x3e, 0xdc, 0xc8, 0x93, 0x47, 0x1b, 0x79, 0xf2,
0xfb, 0x46, 0x9e, 0x7c, 0xb2, 0x99, 0xcf, 0x3c, 0xda, 0xcc, 0x67, 0x7e, 0xd9, 0xcc, 0x67, 0xde,
0x39, 0xa9, 0xa8, 0x66, 0x65, 0x69, 0xbe, 0xb8, 0xa0, 0x2f, 0x3a, 0x36, 0xec, 0xff, 0xc6, 0x98,
0x74, 0x53, 0xb8, 0xed, 0x1a, 0x34, 0xef, 0xd4, 0x64, 0x36, 0xdf, 0x65, 0xfd, 0x85, 0x71, 0xf2,
0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x88, 0x69, 0x9e, 0x5b, 0x70, 0x1d, 0x00, 0x00,
// 1417 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x59, 0xdb, 0x6f, 0x14, 0xf5,
0x17, 0xdf, 0x6f, 0xe9, 0xaf, 0xf9, 0xf5, 0x10, 0x08, 0x7c, 0x77, 0xa9, 0x65, 0x80, 0xed, 0x76,
0x42, 0xb0, 0x17, 0xba, 0x63, 0x5b, 0x84, 0xaa, 0x11, 0xd8, 0x4a, 0x10, 0x84, 0x60, 0x19, 0x43,
0x63, 0xbc, 0xa4, 0x99, 0xee, 0x0c, 0xb3, 0x13, 0xb6, 0x33, 0xcb, 0xcc, 0xb4, 0x81, 0x34, 0x8d,
0x89, 0x0f, 0x86, 0x27, 0x63, 0xe2, 0xbb, 0xe1, 0xd1, 0x18, 0x4d, 0xfa, 0x50, 0x8c, 0x3e, 0xc8,
0xa3, 0xe1, 0xc1, 0x18, 0x82, 0xc1, 0xe8, 0x0b, 0x9a, 0xd6, 0x44, 0x5f, 0xfc, 0x0f, 0x8c, 0x31,
0x3b, 0x73, 0xe6, 0xd6, 0xb9, 0xee, 0x76, 0x9b, 0xb4, 0x2f, 0xb0, 0xfb, 0x9d, 0x73, 0xf9, 0x7c,
0xce, 0xe5, 0x3b, 0xe7, 0x6c, 0x81, 0xad, 0x6a, 0xc6, 0x82, 0x66, 0x70, 0x86, 0x29, 0xdc, 0x52,
0x54, 0x99, 0x5b, 0x1a, 0x9f, 0x97, 0x4c, 0x61, 0x9c, 0xbb, 0xbd, 0x28, 0xe9, 0x77, 0xcb, 0x0d,
0x5d, 0x33, 0x35, 0xda, 0x67, 0xcb, 0x94, 0x51, 0xa6, 0x8c, 0x32, 0xcc, 0x08, 0xea, 0xce, 0x0b,
0x86, 0x64, 0x2b, 0xb8, 0xea, 0x0d, 0x41, 0x56, 0x54, 0xc1, 0x54, 0x34, 0xd5, 0xb6, 0xc1, 0x14,
0x64, 0x4d, 0xd6, 0xac, 0x8f, 0x5c, 0xf3, 0x13, 0x9e, 0x1e, 0x95, 0x35, 0x4d, 0xae, 0x4b, 0x9c,
0xd0, 0x50, 0x38, 0x41, 0x55, 0x35, 0xd3, 0x52, 0x31, 0xf0, 0xe9, 0xf1, 0x18, 0x6c, 0x0e, 0x0e,
0x5b, 0xea, 0xb0, 0x2d, 0x35, 0x67, 0x1b, 0x47, 0xa8, 0xf6, 0xa3, 0x23, 0x68, 0xc0, 0xc1, 0xe6,
0x67, 0xc5, 0x1c, 0x14, 0x16, 0x14, 0x55, 0xe3, 0xac, 0x7f, 0xed, 0x23, 0xf6, 0x0e, 0xf4, 0x5d,
0x6f, 0x4a, 0xcc, 0x0a, 0x75, 0x45, 0x14, 0x4c, 0x4d, 0x37, 0x78, 0xe9, 0xf6, 0xa2, 0x64, 0x98,
0xb4, 0x0f, 0x7a, 0x0c, 0x53, 0x30, 0x17, 0x8d, 0x7e, 0x52, 0x22, 0x43, 0xbd, 0x3c, 0x7e, 0xa3,
0x17, 0x01, 0x3c, 0xaa, 0xfd, 0x5d, 0x25, 0x32, 0xb4, 0x77, 0xe2, 0x44, 0x19, 0x41, 0x34, 0xe3,
0x52, 0xb6, 0x5d, 0x22, 0xf4, 0xf2, 0x8c, 0x20, 0x4b, 0x68, 0x93, 0xf7, 0x69, 0xb2, 0xab, 0x04,
0x9e, 0x0b, 0xb9, 0x36, 0x1a, 0x9a, 0x6a, 0x48, 0xf4, 0x2a, 0xc0, 0x92, 0x7b, 0xda, 0x4f, 0x4a,
0x7b, 0x86, 0xf6, 0x4e, 0x0c, 0x96, 0xa3, 0x73, 0x52, 0x76, 0xf5, 0xa7, 0x7b, 0x1f, 0x3d, 0x1b,
0xc8, 0x7d, 0xfe, 0xe7, 0xea, 0x08, 0xe1, 0x7d, 0xfa, 0xf4, 0xf5, 0x08, 0xc4, 0xcf, 0xa7, 0x22,
0xb6, 0xa1, 0x04, 0x20, 0x0b, 0x70, 0x28, 0x88, 0xd8, 0x89, 0xd5, 0x25, 0xd8, 0xef, 0xfa, 0x9b,
0x13, 0x44, 0x51, 0xb7, 0x63, 0x36, 0x3d, 0xf8, 0x64, 0x6d, 0xec, 0x18, 0x3a, 0x72, 0x95, 0x2a,
0xa2, 0xa8, 0x4b, 0x86, 0xf1, 0x96, 0xa9, 0x2b, 0xaa, 0xcc, 0xef, 0x5b, 0xf2, 0x9f, 0xb3, 0xe2,
0xe6, 0x7c, 0xb8, 0x31, 0x79, 0x03, 0x7a, 0x5d, 0x51, 0xcb, 0x7c, 0xab, 0x21, 0xf1, 0xd4, 0xd9,
0x35, 0x02, 0xa5, 0xa0, 0x9b, 0x0b, 0x52, 0x5d, 0x92, 0xed, 0x52, 0xec, 0x38, 0xa9, 0x8e, 0x95,
0xcc, 0xdf, 0x04, 0x06, 0x13, 0x60, 0x63, 0xa0, 0x3e, 0x80, 0x82, 0xe8, 0x1e, 0xcf, 0xe9, 0x78,
0xec, 0x94, 0xd1, 0x48, 0x5c, 0xcc, 0x3c, 0x53, 0x8e, 0xa5, 0xe9, 0x52, 0x33, 0x78, 0x5f, 0xfc,
0x36, 0x90, 0x0f, 0x3f, 0x33, 0xec, 0x98, 0xe6, 0xc5, 0xf0, 0x93, 0xce, 0xd5, 0xdb, 0x77, 0x04,
0x86, 0x83, 0x7c, 0x6f, 0xa8, 0xf3, 0x9a, 0x2a, 0x2a, 0xaa, 0xbc, 0x2b, 0xf2, 0xf5, 0x8c, 0xc0,
0x48, 0x16, 0xfc, 0x98, 0x38, 0x19, 0xf2, 0x8b, 0xce, 0xf3, 0x50, 0xde, 0x46, 0xe3, 0xf2, 0x16,
0x61, 0xd2, 0x5f, 0xf5, 0xd4, 0x35, 0xb9, 0x0d, 0x09, 0xfa, 0x8a, 0x60, 0xbb, 0xfa, 0x0b, 0xc4,
0xce, 0xc6, 0x39, 0xd8, 0x8f, 0xb5, 0x11, 0xcc, 0x46, 0xff, 0x93, 0xb5, 0xb1, 0x02, 0xba, 0xda,
0x94, 0x04, 0x57, 0xde, 0x4a, 0x42, 0x38, 0x9d, 0x5d, 0xed, 0xa5, 0xf3, 0xe5, 0xff, 0xdf, 0xbb,
0x3f, 0x90, 0xfb, 0xeb, 0xfe, 0x40, 0x8e, 0x5d, 0xc2, 0x2b, 0x37, 0x5c, 0xcf, 0xf4, 0x5d, 0xc8,
0x47, 0x74, 0x0d, 0x5e, 0x34, 0x2d, 0x34, 0x0d, 0x4f, 0xc3, 0x2d, 0xc1, 0x7e, 0x4d, 0x60, 0xc0,
0x72, 0x1c, 0x91, 0xac, 0x1d, 0x1d, 0x30, 0x1d, 0xef, 0xc9, 0x48, 0xdc, 0x18, 0xb9, 0x6b, 0xd0,
0x63, 0xd7, 0x18, 0x06, 0xab, 0xdd, 0x4a, 0x45, 0x2b, 0xec, 0x03, 0xe7, 0x72, 0xbe, 0xe0, 0xd0,
0x8b, 0x68, 0xf6, 0x2d, 0x47, 0xab, 0x43, 0x3d, 0xee, 0x8b, 0xd5, 0xcf, 0xce, 0xed, 0x1c, 0x8d,
0x1b, 0xa3, 0x55, 0xeb, 0xd8, 0xed, 0xec, 0x0b, 0xdd, 0xf6, 0x5e, 0xc3, 0x0f, 0x9d, 0x6b, 0xd8,
0x25, 0x96, 0x74, 0x0d, 0xef, 0xc0, 0xcc, 0xb8, 0xf7, 0x70, 0x0a, 0x81, 0x5d, 0x7b, 0x0f, 0x3f,
0xec, 0x82, 0xc3, 0x16, 0x41, 0x5e, 0x12, 0xb7, 0x25, 0x23, 0xd4, 0xd0, 0xab, 0x73, 0x91, 0xb7,
0x4b, 0xbc, 0x91, 0x03, 0x86, 0x5e, 0x9d, 0xdd, 0xf4, 0x5e, 0xa5, 0xa2, 0x61, 0x6e, 0xb6, 0xb3,
0x27, 0xcd, 0x8e, 0x68, 0x98, 0xb3, 0x09, 0xef, 0xe7, 0xee, 0x0e, 0x54, 0xc8, 0x53, 0x02, 0x4c,
0x54, 0x00, 0xb1, 0x22, 0x54, 0xe8, 0xd3, 0xa5, 0x84, 0xb6, 0x3d, 0x19, 0x57, 0x14, 0x7e, 0x73,
0x51, 0x8d, 0x7b, 0x48, 0x97, 0xb6, 0xb5, 0x75, 0xd7, 0x9c, 0x17, 0x8f, 0x5b, 0xf9, 0xe1, 0x45,
0x67, 0x07, 0x36, 0xec, 0xb7, 0xa1, 0x57, 0xc0, 0xee, 0x59, 0x92, 0x1e, 0x10, 0x28, 0xc6, 0x60,
0xdf, 0xd1, 0xaf, 0xfa, 0x85, 0xd8, 0x4a, 0xd9, 0x96, 0x15, 0xec, 0x14, 0x36, 0xdc, 0x25, 0xc5,
0x30, 0x35, 0x5d, 0xa9, 0x0a, 0xf5, 0xcb, 0xea, 0x4d, 0xcd, 0xb7, 0x7c, 0xd7, 0x24, 0x45, 0xae,
0x99, 0x96, 0x9b, 0x3d, 0x3c, 0x7e, 0x6b, 0xd6, 0xf3, 0x91, 0x48, 0x35, 0x44, 0x78, 0x16, 0xba,
0x6b, 0x8a, 0x61, 0x22, 0xb8, 0x13, 0x71, 0xe0, 0x82, 0xda, 0xd3, 0x5d, 0xfd, 0x84, 0xb7, 0xf4,
0xe8, 0x0d, 0x38, 0x58, 0x73, 0x9f, 0xcd, 0xe9, 0x52, 0x55, 0xd3, 0x45, 0x2c, 0x86, 0xa1, 0x74,
0x63, 0xbc, 0x25, 0xcf, 0x1f, 0xa8, 0x6d, 0x3a, 0x61, 0x29, 0x1c, 0xb0, 0x50, 0xcf, 0x68, 0x5a,
0x1d, 0x29, 0xb2, 0x33, 0x70, 0xd0, 0x77, 0x86, 0xf8, 0x5f, 0x81, 0xee, 0x86, 0xa6, 0xd5, 0x11,
0xff, 0xd1, 0x38, 0x97, 0x4d, 0x1d, 0x7f, 0x5c, 0x2d, 0x25, 0xb6, 0x00, 0xd4, 0xb6, 0x28, 0xe8,
0xc2, 0x82, 0xd3, 0xde, 0xec, 0xdb, 0x90, 0x0f, 0x9c, 0xa2, 0xa7, 0x0a, 0xf4, 0x34, 0xac, 0x13,
0xf4, 0x55, 0x8c, 0xf5, 0x65, 0x49, 0x05, 0x06, 0x35, 0x5b, 0x71, 0x62, 0xb5, 0x0f, 0xfe, 0x67,
0x99, 0xa6, 0x9f, 0x11, 0x00, 0xaf, 0x43, 0x69, 0x39, 0xce, 0x56, 0xf4, 0x4f, 0x2d, 0x0c, 0x97,
0x59, 0x1e, 0xe7, 0x69, 0xee, 0x5e, 0x13, 0xc8, 0x87, 0x3f, 0xfd, 0xf1, 0x69, 0xd7, 0x71, 0xca,
0x72, 0x31, 0x3f, 0x1a, 0xf9, 0xba, 0xfb, 0x4b, 0x02, 0xbd, 0xae, 0x1d, 0x3a, 0x96, 0xcd, 0x9f,
0x03, 0xaf, 0x9c, 0x55, 0x1c, 0xd1, 0x9d, 0xf7, 0xd0, 0xbd, 0x48, 0x27, 0xd3, 0xd1, 0x71, 0xcb,
0xc1, 0x66, 0x5e, 0xa1, 0xbf, 0x12, 0x28, 0x44, 0xed, 0xf8, 0x74, 0x2a, 0x1b, 0x94, 0xf0, 0x58,
0xc6, 0xbc, 0xd4, 0x86, 0x26, 0xf2, 0xb9, 0xea, 0xf1, 0xa9, 0xd0, 0x73, 0x6d, 0xf0, 0xe1, 0x7c,
0xef, 0x54, 0xfa, 0x2f, 0x81, 0x63, 0x89, 0xfb, 0x30, 0xad, 0x64, 0x83, 0x9a, 0x30, 0x84, 0x32,
0xd3, 0x5b, 0x31, 0x81, 0xb4, 0x67, 0x3d, 0xda, 0x57, 0xe8, 0xe5, 0x76, 0x68, 0x7b, 0x53, 0xa4,
0x3f, 0x00, 0x3f, 0x10, 0x00, 0xcf, 0x5f, 0x4a, 0xb3, 0x84, 0xf6, 0xc4, 0x94, 0x66, 0x09, 0xef,
0x09, 0xec, 0xfb, 0x1e, 0x0f, 0x9e, 0xce, 0x6c, 0x31, 0x7d, 0xdc, 0x72, 0xf0, 0xcd, 0xb5, 0x42,
0xff, 0x21, 0x90, 0x8f, 0x88, 0x23, 0x3d, 0x93, 0x88, 0x33, 0x7e, 0x11, 0x66, 0xa6, 0x5a, 0x57,
0x44, 0xa6, 0xba, 0xc7, 0x54, 0xa6, 0x52, 0xa7, 0x99, 0x46, 0xa6, 0x93, 0xfe, 0x48, 0xa0, 0x10,
0xb5, 0xf0, 0xa5, 0xb4, 0x6a, 0xc2, 0x6e, 0x9b, 0xd2, 0xaa, 0x49, 0xdb, 0x25, 0x5b, 0xf1, 0x22,
0x70, 0x9a, 0x9e, 0x8a, 0x8b, 0x40, 0x62, 0x3e, 0x9b, 0xfd, 0x99, 0xb8, 0x27, 0xa5, 0xf4, 0x67,
0x96, 0x25, 0x31, 0xa5, 0x3f, 0x33, 0xad, 0x69, 0x19, 0xfb, 0xd3, 0xa5, 0x97, 0x31, 0xa1, 0x06,
0xfd, 0x9e, 0xc0, 0xbe, 0xc0, 0x1a, 0x40, 0xc7, 0x13, 0xd1, 0x46, 0xed, 0x5c, 0xcc, 0x44, 0x2b,
0x2a, 0x48, 0xe8, 0x9a, 0x47, 0xe8, 0x35, 0x5a, 0x69, 0x87, 0x90, 0x1e, 0x80, 0xfd, 0x94, 0x40,
0x3e, 0x62, 0x80, 0x4e, 0xe9, 0xcc, 0xf8, 0x4d, 0x81, 0x99, 0x6a, 0x5d, 0x11, 0xa9, 0x5d, 0xf1,
0xa8, 0x9d, 0xa7, 0x67, 0xdb, 0xa1, 0xe6, 0x7b, 0x99, 0x6f, 0x10, 0xa0, 0x61, 0x67, 0xf4, 0x74,
0x8b, 0xe8, 0x1c, 0x56, 0x67, 0x5a, 0xd6, 0x43, 0x52, 0xef, 0x79, 0xa4, 0xae, 0xd3, 0x37, 0xb7,
0x46, 0x2a, 0x3c, 0x03, 0x7c, 0x43, 0x60, 0x7f, 0x70, 0x4e, 0xa5, 0xc9, 0x45, 0x15, 0x39, 0x49,
0x33, 0x93, 0x2d, 0xe9, 0x20, 0xb3, 0x57, 0x3d, 0x66, 0x13, 0xf4, 0x85, 0x38, 0x66, 0xbe, 0x49,
0x59, 0x51, 0x6f, 0x6a, 0xdc, 0xb2, 0x3d, 0xa4, 0xaf, 0xd0, 0x8f, 0x08, 0x74, 0x37, 0x47, 0x54,
0x3a, 0x94, 0xe8, 0xdc, 0x37, 0x0d, 0x33, 0xc3, 0x19, 0x24, 0x11, 0xdc, 0xb0, 0x07, 0xae, 0x48,
0x8f, 0xc6, 0x81, 0x6b, 0x4e, 0xc4, 0xf4, 0x63, 0x02, 0x3d, 0xf6, 0xfc, 0x4a, 0x47, 0x92, 0x1d,
0xf8, 0x47, 0x66, 0x66, 0x34, 0x93, 0x2c, 0xc2, 0x19, 0xf5, 0xe0, 0x94, 0x68, 0x31, 0x16, 0x8e,
0x3d, 0x45, 0x5f, 0x7c, 0xb4, 0x5e, 0x24, 0x8f, 0xd7, 0x8b, 0xe4, 0xf7, 0xf5, 0x22, 0xf9, 0x64,
0xa3, 0x98, 0x7b, 0xbc, 0x51, 0xcc, 0xfd, 0xb2, 0x51, 0xcc, 0xbd, 0x73, 0x52, 0x56, 0xcc, 0xda,
0xe2, 0x7c, 0xb9, 0xaa, 0x2d, 0x38, 0x36, 0xec, 0xff, 0xc6, 0x0c, 0xf1, 0x16, 0x77, 0xc7, 0x35,
0x68, 0xde, 0x6d, 0x48, 0xc6, 0x7c, 0x8f, 0xf5, 0xd7, 0xcb, 0xc9, 0xff, 0x02, 0x00, 0x00, 0xff,
0xff, 0xcd, 0x26, 0x9b, 0x20, 0xcc, 0x1d, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -3117,6 +3128,18 @@ func (m *QueryHistoricalInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, er
_ = i
var l int
_ = l
if m.HistoricalRecord != nil {
{
size, err := m.HistoricalRecord.MarshalToSizedBuffer(dAtA[:i])
if err != nil {
return 0, err
}
i -= size
i = encodeVarintQuery(dAtA, i, uint64(size))
}
i--
dAtA[i] = 0x12
}
if m.Hist != nil {
{
size, err := m.Hist.MarshalToSizedBuffer(dAtA[:i])
@ -3647,6 +3670,10 @@ func (m *QueryHistoricalInfoResponse) Size() (n int) {
l = m.Hist.Size()
n += 1 + l + sovQuery(uint64(l))
}
if m.HistoricalRecord != nil {
l = m.HistoricalRecord.Size()
n += 1 + l + sovQuery(uint64(l))
}
return n
}
@ -6319,6 +6346,42 @@ func (m *QueryHistoricalInfoResponse) Unmarshal(dAtA []byte) error {
return err
}
iNdEx = postIndex
case 2:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field HistoricalRecord", wireType)
}
var msglen int
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowQuery
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
return ErrInvalidLengthQuery
}
postIndex := iNdEx + msglen
if postIndex < 0 {
return ErrInvalidLengthQuery
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if m.HistoricalRecord == nil {
m.HistoricalRecord = &HistoricalRecord{}
}
if err := m.HistoricalRecord.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
return err
}
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipQuery(dAtA[iNdEx:])

File diff suppressed because it is too large Load Diff