From dc56ecac74064739703e7d62eec8068191488a44 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Wed, 1 Feb 2023 11:51:37 +0100 Subject: [PATCH 01/40] update go version --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 9b6f7ff..9d5d317 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/elastic/elastic-agent-client/v7 -go 1.17 +go 1.18 require ( github.com/gofrs/uuid v4.2.0+incompatible From 228782cff5328b5d5df049cff5808d2c1d176d53 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Wed, 1 Feb 2023 14:11:05 +0100 Subject: [PATCH 02/40] add feature flag to control protocol --- elastic-agent-client.proto | 2 + pkg/proto/elastic-agent-client.pb.go | 538 ++++++++++++++------------- 2 files changed, 278 insertions(+), 262 deletions(-) diff --git a/elastic-agent-client.proto b/elastic-agent-client.proto index 5a6b437..b0e53d1 100644 --- a/elastic-agent-client.proto +++ b/elastic-agent-client.proto @@ -261,6 +261,8 @@ message UnitExpectedConfig { DataStream data_stream = 7; // Multiple streams per unit. repeated Stream streams = 8; + // Features configure, enable and disable optional features. + google.protobuf.Struct features = 9; } // A unit that is part of a collector/shipper. diff --git a/pkg/proto/elastic-agent-client.pb.go b/pkg/proto/elastic-agent-client.pb.go index ee57c92..178a344 100644 --- a/pkg/proto/elastic-agent-client.pb.go +++ b/pkg/proto/elastic-agent-client.pb.go @@ -11,13 +11,14 @@ package proto import ( + reflect "reflect" + sync "sync" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" emptypb "google.golang.org/protobuf/types/known/emptypb" structpb "google.golang.org/protobuf/types/known/structpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" ) const ( @@ -1406,6 +1407,8 @@ type UnitExpectedConfig struct { DataStream *DataStream `protobuf:"bytes,7,opt,name=data_stream,json=dataStream,proto3" json:"data_stream,omitempty"` // Multiple streams per unit. Streams []*Stream `protobuf:"bytes,8,rep,name=streams,proto3" json:"streams,omitempty"` + // Features configure, enable and disable optional features. + Features *structpb.Struct `protobuf:"bytes,9,opt,name=features,proto3" json:"features,omitempty"` } func (x *UnitExpectedConfig) Reset() { @@ -1496,6 +1499,13 @@ func (x *UnitExpectedConfig) GetStreams() []*Stream { return nil } +func (x *UnitExpectedConfig) GetFeatures() *structpb.Struct { + if x != nil { + return x.Features + } + return nil +} + // A unit that is part of a collector/shipper. type UnitExpected struct { state protoimpl.MessageState @@ -3078,7 +3088,7 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x69, 0x64, 0x12, 0x32, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x97, 0x02, 0x0a, 0x12, 0x55, 0x6e, 0x69, 0x74, 0x45, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0xcc, 0x02, 0x0a, 0x12, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, @@ -3096,227 +3106,230 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x27, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x22, 0xf6, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x49, 0x64, 0x78, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, - 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, - 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x58, 0x0a, 0x10, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x22, 0x74, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, - 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, - 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, - 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x12, 0x33, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xf6, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, - 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, - 0x00, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, - 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, - 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x69, 0x64, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x0a, 0x09, + 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, + 0x65, 0x76, 0x65, 0x6c, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x58, + 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x74, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, + 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, + 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xde, + 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, + 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, + 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, + 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, - 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x26, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, - 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x09, 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, - 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, - 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, - 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x41, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, - 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, - 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, + 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, + 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, + 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, + 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, - 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, - 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, - 0x6e, 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, - 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, - 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, - 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, - 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, - 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, - 0x2a, 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, - 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, - 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, - 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, - 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, - 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, - 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, - 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, - 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, - 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, - 0x32, 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, - 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, - 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, - 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, - 0x42, 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, + 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, + 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, + 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, + 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, + 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, + 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, + 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, + 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, + 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, + 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, + 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, + 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, + 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, + 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, + 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, + 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, + 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, + 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, + 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, + 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, + 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, + 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, + 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, + 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, + 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, + 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, + 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, + 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, + 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x45, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, - 0x64, 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, - 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x32, 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, - 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, - 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, - 0x0a, 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, - 0x67, 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, - 0x0f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, + 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, + 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3402,51 +3415,52 @@ var file_elastic_agent_client_proto_depIdxs = []int32{ 17, // 15: proto.UnitExpectedConfig.meta:type_name -> proto.Meta 18, // 16: proto.UnitExpectedConfig.data_stream:type_name -> proto.DataStream 19, // 17: proto.UnitExpectedConfig.streams:type_name -> proto.Stream - 2, // 18: proto.UnitExpected.type:type_name -> proto.UnitType - 1, // 19: proto.UnitExpected.state:type_name -> proto.State - 20, // 20: proto.UnitExpected.config:type_name -> proto.UnitExpectedConfig - 3, // 21: proto.UnitExpected.log_level:type_name -> proto.UnitLogLevel - 21, // 22: proto.CheckinExpected.units:type_name -> proto.UnitExpected - 22, // 23: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo - 2, // 24: proto.UnitObserved.type:type_name -> proto.UnitType - 1, // 25: proto.UnitObserved.state:type_name -> proto.State - 46, // 26: proto.UnitObserved.payload:type_name -> google.protobuf.Struct - 44, // 27: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry - 24, // 28: proto.CheckinObserved.units:type_name -> proto.UnitObserved - 25, // 29: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo - 2, // 30: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType - 4, // 31: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType - 9, // 32: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status - 47, // 33: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty - 2, // 34: proto.LogMessage.unit_type:type_name -> proto.UnitType - 41, // 35: proto.LogMessageRequest.messages:type_name -> proto.LogMessage - 11, // 36: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved - 26, // 37: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved - 15, // 38: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse - 27, // 39: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest - 29, // 40: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest - 31, // 41: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest - 33, // 42: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest - 35, // 43: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest - 37, // 44: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest - 39, // 45: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest - 42, // 46: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest - 12, // 47: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected - 23, // 48: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected - 13, // 49: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest - 28, // 50: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse - 30, // 51: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse - 32, // 52: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse - 34, // 53: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse - 36, // 54: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse - 38, // 55: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse - 40, // 56: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse - 43, // 57: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse - 47, // [47:58] is the sub-list for method output_type - 36, // [36:47] is the sub-list for method input_type - 36, // [36:36] is the sub-list for extension type_name - 36, // [36:36] is the sub-list for extension extendee - 0, // [0:36] is the sub-list for field type_name + 46, // 18: proto.UnitExpectedConfig.features:type_name -> google.protobuf.Struct + 2, // 19: proto.UnitExpected.type:type_name -> proto.UnitType + 1, // 20: proto.UnitExpected.state:type_name -> proto.State + 20, // 21: proto.UnitExpected.config:type_name -> proto.UnitExpectedConfig + 3, // 22: proto.UnitExpected.log_level:type_name -> proto.UnitLogLevel + 21, // 23: proto.CheckinExpected.units:type_name -> proto.UnitExpected + 22, // 24: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo + 2, // 25: proto.UnitObserved.type:type_name -> proto.UnitType + 1, // 26: proto.UnitObserved.state:type_name -> proto.State + 46, // 27: proto.UnitObserved.payload:type_name -> google.protobuf.Struct + 44, // 28: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry + 24, // 29: proto.CheckinObserved.units:type_name -> proto.UnitObserved + 25, // 30: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo + 2, // 31: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType + 4, // 32: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType + 9, // 33: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status + 47, // 34: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty + 2, // 35: proto.LogMessage.unit_type:type_name -> proto.UnitType + 41, // 36: proto.LogMessageRequest.messages:type_name -> proto.LogMessage + 11, // 37: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved + 26, // 38: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved + 15, // 39: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse + 27, // 40: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest + 29, // 41: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest + 31, // 42: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest + 33, // 43: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest + 35, // 44: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest + 37, // 45: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest + 39, // 46: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest + 42, // 47: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest + 12, // 48: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected + 23, // 49: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected + 13, // 50: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest + 28, // 51: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse + 30, // 52: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse + 32, // 53: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse + 34, // 54: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse + 36, // 55: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse + 38, // 56: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse + 40, // 57: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse + 43, // 58: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse + 48, // [48:59] is the sub-list for method output_type + 37, // [37:48] is the sub-list for method input_type + 37, // [37:37] is the sub-list for extension type_name + 37, // [37:37] is the sub-list for extension extendee + 0, // [0:37] is the sub-list for field type_name } func init() { file_elastic_agent_client_proto_init() } From 9faa3f23124b29afa9dad5285527e2265f6b5a82 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Tue, 7 Feb 2023 08:38:35 +0100 Subject: [PATCH 03/40] wip --- elastic-agent-client.proto | 9 + pkg/client/client_v2.go | 1 + pkg/proto/elastic-agent-client.pb.go | 811 +++++++++++++++------------ 3 files changed, 464 insertions(+), 357 deletions(-) diff --git a/elastic-agent-client.proto b/elastic-agent-client.proto index b0e53d1..0eb310b 100644 --- a/elastic-agent-client.proto +++ b/elastic-agent-client.proto @@ -294,12 +294,21 @@ message CheckinAgentInfo { bool snapshot = 3; } +message Feature { + // The original unparsed configuration + google.protobuf.Struct source = 1; + // Pull out the enabled flag for convenience since it is always necessary. + bool enabled = 2; +} + // A set of units and their expected states and configuration. message CheckinExpected { // Units is the expected units the component should be running. repeated UnitExpected units = 1; // Agent info is provided only on first CheckinExpected response to the component. CheckinAgentInfo agent_info = 2; + + map features = 3; } // Observed status for a unit. diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 3c9cdad..ca0a927 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -356,6 +356,7 @@ func (c *clientV2) sendObserved(client proto.ElasticAgent_CheckinV2Client) error // syncUnits syncs the expected units with the current state. func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { + // here!!! send hapens here c.unitsMu.Lock() defer c.unitsMu.Unlock() i := 0 diff --git a/pkg/proto/elastic-agent-client.pb.go b/pkg/proto/elastic-agent-client.pb.go index 178a344..816d953 100644 --- a/pkg/proto/elastic-agent-client.pb.go +++ b/pkg/proto/elastic-agent-client.pb.go @@ -571,7 +571,7 @@ func (x StoreGetKeyResponse_Status) Number() protoreflect.EnumNumber { // Deprecated: Use StoreGetKeyResponse_Status.Descriptor instead. func (StoreGetKeyResponse_Status) EnumDescriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{20, 0} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{21, 0} } // Connection information sent to the application on startup so it knows how to connected back to the Elastic Agent. @@ -1670,6 +1670,63 @@ func (x *CheckinAgentInfo) GetSnapshot() bool { return false } +type Feature struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The original unparsed configuration + Source *structpb.Struct `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` + // Pull out the enabled flag for convenience since it is always necessary. + Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *Feature) Reset() { + *x = Feature{} + if protoimpl.UnsafeEnabled { + mi := &file_elastic_agent_client_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Feature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Feature) ProtoMessage() {} + +func (x *Feature) ProtoReflect() protoreflect.Message { + mi := &file_elastic_agent_client_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Feature.ProtoReflect.Descriptor instead. +func (*Feature) Descriptor() ([]byte, []int) { + return file_elastic_agent_client_proto_rawDescGZIP(), []int{13} +} + +func (x *Feature) GetSource() *structpb.Struct { + if x != nil { + return x.Source + } + return nil +} + +func (x *Feature) GetEnabled() bool { + if x != nil { + return x.Enabled + } + return false +} + // A set of units and their expected states and configuration. type CheckinExpected struct { state protoimpl.MessageState @@ -1679,13 +1736,14 @@ type CheckinExpected struct { // Units is the expected units the component should be running. Units []*UnitExpected `protobuf:"bytes,1,rep,name=units,proto3" json:"units,omitempty"` // Agent info is provided only on first CheckinExpected response to the component. - AgentInfo *CheckinAgentInfo `protobuf:"bytes,2,opt,name=agent_info,json=agentInfo,proto3" json:"agent_info,omitempty"` + AgentInfo *CheckinAgentInfo `protobuf:"bytes,2,opt,name=agent_info,json=agentInfo,proto3" json:"agent_info,omitempty"` + Features map[string]*Feature `protobuf:"bytes,3,rep,name=features,proto3" json:"features,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *CheckinExpected) Reset() { *x = CheckinExpected{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[13] + mi := &file_elastic_agent_client_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1698,7 +1756,7 @@ func (x *CheckinExpected) String() string { func (*CheckinExpected) ProtoMessage() {} func (x *CheckinExpected) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[13] + mi := &file_elastic_agent_client_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1711,7 +1769,7 @@ func (x *CheckinExpected) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckinExpected.ProtoReflect.Descriptor instead. func (*CheckinExpected) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{13} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{14} } func (x *CheckinExpected) GetUnits() []*UnitExpected { @@ -1728,6 +1786,13 @@ func (x *CheckinExpected) GetAgentInfo() *CheckinAgentInfo { return nil } +func (x *CheckinExpected) GetFeatures() map[string]*Feature { + if x != nil { + return x.Features + } + return nil +} + // Observed status for a unit. // // Contains the currently applied `config_state_idx` (0 in the case of initial start, 1 is the first @@ -1757,7 +1822,7 @@ type UnitObserved struct { func (x *UnitObserved) Reset() { *x = UnitObserved{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[14] + mi := &file_elastic_agent_client_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1770,7 +1835,7 @@ func (x *UnitObserved) String() string { func (*UnitObserved) ProtoMessage() {} func (x *UnitObserved) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[14] + mi := &file_elastic_agent_client_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1783,7 +1848,7 @@ func (x *UnitObserved) ProtoReflect() protoreflect.Message { // Deprecated: Use UnitObserved.ProtoReflect.Descriptor instead. func (*UnitObserved) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{14} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{15} } func (x *UnitObserved) GetId() string { @@ -1845,7 +1910,7 @@ type CheckinObservedVersionInfo struct { func (x *CheckinObservedVersionInfo) Reset() { *x = CheckinObservedVersionInfo{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[15] + mi := &file_elastic_agent_client_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1858,7 +1923,7 @@ func (x *CheckinObservedVersionInfo) String() string { func (*CheckinObservedVersionInfo) ProtoMessage() {} func (x *CheckinObservedVersionInfo) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[15] + mi := &file_elastic_agent_client_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1871,7 +1936,7 @@ func (x *CheckinObservedVersionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckinObservedVersionInfo.ProtoReflect.Descriptor instead. func (*CheckinObservedVersionInfo) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{15} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{16} } func (x *CheckinObservedVersionInfo) GetName() string { @@ -1916,7 +1981,7 @@ type CheckinObserved struct { func (x *CheckinObserved) Reset() { *x = CheckinObserved{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[16] + mi := &file_elastic_agent_client_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1929,7 +1994,7 @@ func (x *CheckinObserved) String() string { func (*CheckinObserved) ProtoMessage() {} func (x *CheckinObserved) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[16] + mi := &file_elastic_agent_client_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1942,7 +2007,7 @@ func (x *CheckinObserved) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckinObserved.ProtoReflect.Descriptor instead. func (*CheckinObserved) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{16} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{17} } func (x *CheckinObserved) GetToken() string { @@ -1987,7 +2052,7 @@ type StoreBeginTxRequest struct { func (x *StoreBeginTxRequest) Reset() { *x = StoreBeginTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[17] + mi := &file_elastic_agent_client_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2000,7 +2065,7 @@ func (x *StoreBeginTxRequest) String() string { func (*StoreBeginTxRequest) ProtoMessage() {} func (x *StoreBeginTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[17] + mi := &file_elastic_agent_client_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2013,7 +2078,7 @@ func (x *StoreBeginTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreBeginTxRequest.ProtoReflect.Descriptor instead. func (*StoreBeginTxRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{17} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{18} } func (x *StoreBeginTxRequest) GetToken() string { @@ -2057,7 +2122,7 @@ type StoreBeginTxResponse struct { func (x *StoreBeginTxResponse) Reset() { *x = StoreBeginTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[18] + mi := &file_elastic_agent_client_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2070,7 +2135,7 @@ func (x *StoreBeginTxResponse) String() string { func (*StoreBeginTxResponse) ProtoMessage() {} func (x *StoreBeginTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[18] + mi := &file_elastic_agent_client_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2083,7 +2148,7 @@ func (x *StoreBeginTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreBeginTxResponse.ProtoReflect.Descriptor instead. func (*StoreBeginTxResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{18} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{19} } func (x *StoreBeginTxResponse) GetId() string { @@ -2110,7 +2175,7 @@ type StoreGetKeyRequest struct { func (x *StoreGetKeyRequest) Reset() { *x = StoreGetKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[19] + mi := &file_elastic_agent_client_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2123,7 +2188,7 @@ func (x *StoreGetKeyRequest) String() string { func (*StoreGetKeyRequest) ProtoMessage() {} func (x *StoreGetKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[19] + mi := &file_elastic_agent_client_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2136,7 +2201,7 @@ func (x *StoreGetKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreGetKeyRequest.ProtoReflect.Descriptor instead. func (*StoreGetKeyRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{19} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{20} } func (x *StoreGetKeyRequest) GetToken() string { @@ -2174,7 +2239,7 @@ type StoreGetKeyResponse struct { func (x *StoreGetKeyResponse) Reset() { *x = StoreGetKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[20] + mi := &file_elastic_agent_client_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2187,7 +2252,7 @@ func (x *StoreGetKeyResponse) String() string { func (*StoreGetKeyResponse) ProtoMessage() {} func (x *StoreGetKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[20] + mi := &file_elastic_agent_client_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2200,7 +2265,7 @@ func (x *StoreGetKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreGetKeyResponse.ProtoReflect.Descriptor instead. func (*StoreGetKeyResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{20} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{21} } func (x *StoreGetKeyResponse) GetStatus() StoreGetKeyResponse_Status { @@ -2240,7 +2305,7 @@ type StoreSetKeyRequest struct { func (x *StoreSetKeyRequest) Reset() { *x = StoreSetKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[21] + mi := &file_elastic_agent_client_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2253,7 +2318,7 @@ func (x *StoreSetKeyRequest) String() string { func (*StoreSetKeyRequest) ProtoMessage() {} func (x *StoreSetKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[21] + mi := &file_elastic_agent_client_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2266,7 +2331,7 @@ func (x *StoreSetKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreSetKeyRequest.ProtoReflect.Descriptor instead. func (*StoreSetKeyRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{21} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{22} } func (x *StoreSetKeyRequest) GetToken() string { @@ -2314,7 +2379,7 @@ type StoreSetKeyResponse struct { func (x *StoreSetKeyResponse) Reset() { *x = StoreSetKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[22] + mi := &file_elastic_agent_client_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2327,7 +2392,7 @@ func (x *StoreSetKeyResponse) String() string { func (*StoreSetKeyResponse) ProtoMessage() {} func (x *StoreSetKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[22] + mi := &file_elastic_agent_client_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2340,7 +2405,7 @@ func (x *StoreSetKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreSetKeyResponse.ProtoReflect.Descriptor instead. func (*StoreSetKeyResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{22} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{23} } // Deletes a key in the store. @@ -2364,7 +2429,7 @@ type StoreDeleteKeyRequest struct { func (x *StoreDeleteKeyRequest) Reset() { *x = StoreDeleteKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[23] + mi := &file_elastic_agent_client_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2377,7 +2442,7 @@ func (x *StoreDeleteKeyRequest) String() string { func (*StoreDeleteKeyRequest) ProtoMessage() {} func (x *StoreDeleteKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[23] + mi := &file_elastic_agent_client_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2390,7 +2455,7 @@ func (x *StoreDeleteKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDeleteKeyRequest.ProtoReflect.Descriptor instead. func (*StoreDeleteKeyRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{23} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{24} } func (x *StoreDeleteKeyRequest) GetToken() string { @@ -2424,7 +2489,7 @@ type StoreDeleteKeyResponse struct { func (x *StoreDeleteKeyResponse) Reset() { *x = StoreDeleteKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[24] + mi := &file_elastic_agent_client_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2437,7 +2502,7 @@ func (x *StoreDeleteKeyResponse) String() string { func (*StoreDeleteKeyResponse) ProtoMessage() {} func (x *StoreDeleteKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[24] + mi := &file_elastic_agent_client_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2450,7 +2515,7 @@ func (x *StoreDeleteKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDeleteKeyResponse.ProtoReflect.Descriptor instead. func (*StoreDeleteKeyResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{24} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{25} } // Commits the transaction in the store. @@ -2470,7 +2535,7 @@ type StoreCommitTxRequest struct { func (x *StoreCommitTxRequest) Reset() { *x = StoreCommitTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[25] + mi := &file_elastic_agent_client_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2483,7 +2548,7 @@ func (x *StoreCommitTxRequest) String() string { func (*StoreCommitTxRequest) ProtoMessage() {} func (x *StoreCommitTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[25] + mi := &file_elastic_agent_client_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2496,7 +2561,7 @@ func (x *StoreCommitTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCommitTxRequest.ProtoReflect.Descriptor instead. func (*StoreCommitTxRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{25} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{26} } func (x *StoreCommitTxRequest) GetToken() string { @@ -2523,7 +2588,7 @@ type StoreCommitTxResponse struct { func (x *StoreCommitTxResponse) Reset() { *x = StoreCommitTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[26] + mi := &file_elastic_agent_client_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2536,7 +2601,7 @@ func (x *StoreCommitTxResponse) String() string { func (*StoreCommitTxResponse) ProtoMessage() {} func (x *StoreCommitTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[26] + mi := &file_elastic_agent_client_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2549,7 +2614,7 @@ func (x *StoreCommitTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCommitTxResponse.ProtoReflect.Descriptor instead. func (*StoreCommitTxResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{26} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{27} } // Discards the transaction in the store. @@ -2567,7 +2632,7 @@ type StoreDiscardTxRequest struct { func (x *StoreDiscardTxRequest) Reset() { *x = StoreDiscardTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[27] + mi := &file_elastic_agent_client_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2580,7 +2645,7 @@ func (x *StoreDiscardTxRequest) String() string { func (*StoreDiscardTxRequest) ProtoMessage() {} func (x *StoreDiscardTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[27] + mi := &file_elastic_agent_client_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2593,7 +2658,7 @@ func (x *StoreDiscardTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDiscardTxRequest.ProtoReflect.Descriptor instead. func (*StoreDiscardTxRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{27} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{28} } func (x *StoreDiscardTxRequest) GetToken() string { @@ -2620,7 +2685,7 @@ type StoreDiscardTxResponse struct { func (x *StoreDiscardTxResponse) Reset() { *x = StoreDiscardTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[28] + mi := &file_elastic_agent_client_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2633,7 +2698,7 @@ func (x *StoreDiscardTxResponse) String() string { func (*StoreDiscardTxResponse) ProtoMessage() {} func (x *StoreDiscardTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[28] + mi := &file_elastic_agent_client_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2646,7 +2711,7 @@ func (x *StoreDiscardTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDiscardTxResponse.ProtoReflect.Descriptor instead. func (*StoreDiscardTxResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{28} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{29} } // Requests an artifact from the Elastic Agent. @@ -2667,7 +2732,7 @@ type ArtifactFetchRequest struct { func (x *ArtifactFetchRequest) Reset() { *x = ArtifactFetchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[29] + mi := &file_elastic_agent_client_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2680,7 +2745,7 @@ func (x *ArtifactFetchRequest) String() string { func (*ArtifactFetchRequest) ProtoMessage() {} func (x *ArtifactFetchRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[29] + mi := &file_elastic_agent_client_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2693,7 +2758,7 @@ func (x *ArtifactFetchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ArtifactFetchRequest.ProtoReflect.Descriptor instead. func (*ArtifactFetchRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{29} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{30} } func (x *ArtifactFetchRequest) GetToken() string { @@ -2733,7 +2798,7 @@ type ArtifactFetchResponse struct { func (x *ArtifactFetchResponse) Reset() { *x = ArtifactFetchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[30] + mi := &file_elastic_agent_client_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2746,7 +2811,7 @@ func (x *ArtifactFetchResponse) String() string { func (*ArtifactFetchResponse) ProtoMessage() {} func (x *ArtifactFetchResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[30] + mi := &file_elastic_agent_client_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2759,7 +2824,7 @@ func (x *ArtifactFetchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ArtifactFetchResponse.ProtoReflect.Descriptor instead. func (*ArtifactFetchResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{30} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{31} } func (m *ArtifactFetchResponse) GetContentEof() isArtifactFetchResponse_ContentEof { @@ -2817,7 +2882,7 @@ type LogMessage struct { func (x *LogMessage) Reset() { *x = LogMessage{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[31] + mi := &file_elastic_agent_client_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2830,7 +2895,7 @@ func (x *LogMessage) String() string { func (*LogMessage) ProtoMessage() {} func (x *LogMessage) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[31] + mi := &file_elastic_agent_client_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2843,7 +2908,7 @@ func (x *LogMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessage.ProtoReflect.Descriptor instead. func (*LogMessage) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{31} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{32} } func (x *LogMessage) GetUnitId() string { @@ -2881,7 +2946,7 @@ type LogMessageRequest struct { func (x *LogMessageRequest) Reset() { *x = LogMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[32] + mi := &file_elastic_agent_client_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2894,7 +2959,7 @@ func (x *LogMessageRequest) String() string { func (*LogMessageRequest) ProtoMessage() {} func (x *LogMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[32] + mi := &file_elastic_agent_client_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2907,7 +2972,7 @@ func (x *LogMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessageRequest.ProtoReflect.Descriptor instead. func (*LogMessageRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{32} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{33} } func (x *LogMessageRequest) GetToken() string { @@ -2933,7 +2998,7 @@ type LogMessageResponse struct { func (x *LogMessageResponse) Reset() { *x = LogMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[33] + mi := &file_elastic_agent_client_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2946,7 +3011,7 @@ func (x *LogMessageResponse) String() string { func (*LogMessageResponse) ProtoMessage() {} func (x *LogMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[33] + mi := &file_elastic_agent_client_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2959,7 +3024,7 @@ func (x *LogMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessageResponse.ProtoReflect.Descriptor instead. func (*LogMessageResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{33} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{34} } var File_elastic_agent_client_proto protoreflect.FileDescriptor @@ -3130,206 +3195,221 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x74, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, - 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xde, - 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, - 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x54, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x83, + 0x02, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x36, 0x0a, + 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, + 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x66, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0x4b, 0x0a, 0x0d, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, - 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, - 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, + 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, + 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, + 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, + 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, + 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, + 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, + 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, + 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, + 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, + 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, + 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, + 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, - 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, + 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, - 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, - 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, - 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, - 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, - 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, - 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, - 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, - 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, - 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, - 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, - 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, - 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, - 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, - 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, - 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, - 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, - 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, - 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, - 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, - 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, - 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, - 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, - 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, - 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, - 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, - 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, - 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, - 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, - 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, - 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, - 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, - 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, - 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, - 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, + 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, + 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, + 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, + 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, + 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, + 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, + 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, + 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, + 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, + 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, + 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, + 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, + 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, + 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, + 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, + 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, + 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, + 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, + 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, + 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, + 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, + 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, + 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3345,7 +3425,7 @@ func file_elastic_agent_client_proto_rawDescGZIP() []byte { } var file_elastic_agent_client_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -var file_elastic_agent_client_proto_msgTypes = make([]protoimpl.MessageInfo, 35) +var file_elastic_agent_client_proto_msgTypes = make([]protoimpl.MessageInfo, 37) var file_elastic_agent_client_proto_goTypes = []interface{}{ (ConnInfoServices)(0), // 0: proto.ConnInfoServices (State)(0), // 1: proto.State @@ -3370,31 +3450,33 @@ var file_elastic_agent_client_proto_goTypes = []interface{}{ (*UnitExpectedConfig)(nil), // 20: proto.UnitExpectedConfig (*UnitExpected)(nil), // 21: proto.UnitExpected (*CheckinAgentInfo)(nil), // 22: proto.CheckinAgentInfo - (*CheckinExpected)(nil), // 23: proto.CheckinExpected - (*UnitObserved)(nil), // 24: proto.UnitObserved - (*CheckinObservedVersionInfo)(nil), // 25: proto.CheckinObservedVersionInfo - (*CheckinObserved)(nil), // 26: proto.CheckinObserved - (*StoreBeginTxRequest)(nil), // 27: proto.StoreBeginTxRequest - (*StoreBeginTxResponse)(nil), // 28: proto.StoreBeginTxResponse - (*StoreGetKeyRequest)(nil), // 29: proto.StoreGetKeyRequest - (*StoreGetKeyResponse)(nil), // 30: proto.StoreGetKeyResponse - (*StoreSetKeyRequest)(nil), // 31: proto.StoreSetKeyRequest - (*StoreSetKeyResponse)(nil), // 32: proto.StoreSetKeyResponse - (*StoreDeleteKeyRequest)(nil), // 33: proto.StoreDeleteKeyRequest - (*StoreDeleteKeyResponse)(nil), // 34: proto.StoreDeleteKeyResponse - (*StoreCommitTxRequest)(nil), // 35: proto.StoreCommitTxRequest - (*StoreCommitTxResponse)(nil), // 36: proto.StoreCommitTxResponse - (*StoreDiscardTxRequest)(nil), // 37: proto.StoreDiscardTxRequest - (*StoreDiscardTxResponse)(nil), // 38: proto.StoreDiscardTxResponse - (*ArtifactFetchRequest)(nil), // 39: proto.ArtifactFetchRequest - (*ArtifactFetchResponse)(nil), // 40: proto.ArtifactFetchResponse - (*LogMessage)(nil), // 41: proto.LogMessage - (*LogMessageRequest)(nil), // 42: proto.LogMessageRequest - (*LogMessageResponse)(nil), // 43: proto.LogMessageResponse - nil, // 44: proto.CheckinObservedVersionInfo.MetaEntry - (*timestamppb.Timestamp)(nil), // 45: google.protobuf.Timestamp - (*structpb.Struct)(nil), // 46: google.protobuf.Struct - (*emptypb.Empty)(nil), // 47: google.protobuf.Empty + (*Feature)(nil), // 23: proto.Feature + (*CheckinExpected)(nil), // 24: proto.CheckinExpected + (*UnitObserved)(nil), // 25: proto.UnitObserved + (*CheckinObservedVersionInfo)(nil), // 26: proto.CheckinObservedVersionInfo + (*CheckinObserved)(nil), // 27: proto.CheckinObserved + (*StoreBeginTxRequest)(nil), // 28: proto.StoreBeginTxRequest + (*StoreBeginTxResponse)(nil), // 29: proto.StoreBeginTxResponse + (*StoreGetKeyRequest)(nil), // 30: proto.StoreGetKeyRequest + (*StoreGetKeyResponse)(nil), // 31: proto.StoreGetKeyResponse + (*StoreSetKeyRequest)(nil), // 32: proto.StoreSetKeyRequest + (*StoreSetKeyResponse)(nil), // 33: proto.StoreSetKeyResponse + (*StoreDeleteKeyRequest)(nil), // 34: proto.StoreDeleteKeyRequest + (*StoreDeleteKeyResponse)(nil), // 35: proto.StoreDeleteKeyResponse + (*StoreCommitTxRequest)(nil), // 36: proto.StoreCommitTxRequest + (*StoreCommitTxResponse)(nil), // 37: proto.StoreCommitTxResponse + (*StoreDiscardTxRequest)(nil), // 38: proto.StoreDiscardTxRequest + (*StoreDiscardTxResponse)(nil), // 39: proto.StoreDiscardTxResponse + (*ArtifactFetchRequest)(nil), // 40: proto.ArtifactFetchRequest + (*ArtifactFetchResponse)(nil), // 41: proto.ArtifactFetchResponse + (*LogMessage)(nil), // 42: proto.LogMessage + (*LogMessageRequest)(nil), // 43: proto.LogMessageRequest + (*LogMessageResponse)(nil), // 44: proto.LogMessageResponse + nil, // 45: proto.CheckinExpected.FeaturesEntry + nil, // 46: proto.CheckinObservedVersionInfo.MetaEntry + (*timestamppb.Timestamp)(nil), // 47: google.protobuf.Timestamp + (*structpb.Struct)(nil), // 48: google.protobuf.Struct + (*emptypb.Empty)(nil), // 49: google.protobuf.Empty } var file_elastic_agent_client_proto_depIdxs = []int32{ 0, // 0: proto.ConnInfo.services:type_name -> proto.ConnInfoServices @@ -3402,65 +3484,68 @@ var file_elastic_agent_client_proto_depIdxs = []int32{ 6, // 2: proto.StateExpected.state:type_name -> proto.StateExpected.State 2, // 3: proto.ActionRequest.unit_type:type_name -> proto.UnitType 7, // 4: proto.ActionRequest.type:type_name -> proto.ActionRequest.Type - 45, // 5: proto.ActionDiagnosticUnitResult.generated:type_name -> google.protobuf.Timestamp + 47, // 5: proto.ActionDiagnosticUnitResult.generated:type_name -> google.protobuf.Timestamp 8, // 6: proto.ActionResponse.status:type_name -> proto.ActionResponse.Status 14, // 7: proto.ActionResponse.diagnostic:type_name -> proto.ActionDiagnosticUnitResult - 46, // 8: proto.Package.source:type_name -> google.protobuf.Struct - 46, // 9: proto.Meta.source:type_name -> google.protobuf.Struct + 48, // 8: proto.Package.source:type_name -> google.protobuf.Struct + 48, // 9: proto.Meta.source:type_name -> google.protobuf.Struct 16, // 10: proto.Meta.package:type_name -> proto.Package - 46, // 11: proto.DataStream.source:type_name -> google.protobuf.Struct - 46, // 12: proto.Stream.source:type_name -> google.protobuf.Struct + 48, // 11: proto.DataStream.source:type_name -> google.protobuf.Struct + 48, // 12: proto.Stream.source:type_name -> google.protobuf.Struct 18, // 13: proto.Stream.data_stream:type_name -> proto.DataStream - 46, // 14: proto.UnitExpectedConfig.source:type_name -> google.protobuf.Struct + 48, // 14: proto.UnitExpectedConfig.source:type_name -> google.protobuf.Struct 17, // 15: proto.UnitExpectedConfig.meta:type_name -> proto.Meta 18, // 16: proto.UnitExpectedConfig.data_stream:type_name -> proto.DataStream 19, // 17: proto.UnitExpectedConfig.streams:type_name -> proto.Stream - 46, // 18: proto.UnitExpectedConfig.features:type_name -> google.protobuf.Struct + 48, // 18: proto.UnitExpectedConfig.features:type_name -> google.protobuf.Struct 2, // 19: proto.UnitExpected.type:type_name -> proto.UnitType 1, // 20: proto.UnitExpected.state:type_name -> proto.State 20, // 21: proto.UnitExpected.config:type_name -> proto.UnitExpectedConfig 3, // 22: proto.UnitExpected.log_level:type_name -> proto.UnitLogLevel - 21, // 23: proto.CheckinExpected.units:type_name -> proto.UnitExpected - 22, // 24: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo - 2, // 25: proto.UnitObserved.type:type_name -> proto.UnitType - 1, // 26: proto.UnitObserved.state:type_name -> proto.State - 46, // 27: proto.UnitObserved.payload:type_name -> google.protobuf.Struct - 44, // 28: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry - 24, // 29: proto.CheckinObserved.units:type_name -> proto.UnitObserved - 25, // 30: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo - 2, // 31: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType - 4, // 32: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType - 9, // 33: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status - 47, // 34: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty - 2, // 35: proto.LogMessage.unit_type:type_name -> proto.UnitType - 41, // 36: proto.LogMessageRequest.messages:type_name -> proto.LogMessage - 11, // 37: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved - 26, // 38: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved - 15, // 39: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse - 27, // 40: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest - 29, // 41: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest - 31, // 42: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest - 33, // 43: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest - 35, // 44: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest - 37, // 45: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest - 39, // 46: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest - 42, // 47: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest - 12, // 48: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected - 23, // 49: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected - 13, // 50: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest - 28, // 51: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse - 30, // 52: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse - 32, // 53: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse - 34, // 54: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse - 36, // 55: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse - 38, // 56: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse - 40, // 57: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse - 43, // 58: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse - 48, // [48:59] is the sub-list for method output_type - 37, // [37:48] is the sub-list for method input_type - 37, // [37:37] is the sub-list for extension type_name - 37, // [37:37] is the sub-list for extension extendee - 0, // [0:37] is the sub-list for field type_name + 48, // 23: proto.Feature.source:type_name -> google.protobuf.Struct + 21, // 24: proto.CheckinExpected.units:type_name -> proto.UnitExpected + 22, // 25: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo + 45, // 26: proto.CheckinExpected.features:type_name -> proto.CheckinExpected.FeaturesEntry + 2, // 27: proto.UnitObserved.type:type_name -> proto.UnitType + 1, // 28: proto.UnitObserved.state:type_name -> proto.State + 48, // 29: proto.UnitObserved.payload:type_name -> google.protobuf.Struct + 46, // 30: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry + 25, // 31: proto.CheckinObserved.units:type_name -> proto.UnitObserved + 26, // 32: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo + 2, // 33: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType + 4, // 34: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType + 9, // 35: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status + 49, // 36: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty + 2, // 37: proto.LogMessage.unit_type:type_name -> proto.UnitType + 42, // 38: proto.LogMessageRequest.messages:type_name -> proto.LogMessage + 23, // 39: proto.CheckinExpected.FeaturesEntry.value:type_name -> proto.Feature + 11, // 40: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved + 27, // 41: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved + 15, // 42: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse + 28, // 43: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest + 30, // 44: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest + 32, // 45: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest + 34, // 46: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest + 36, // 47: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest + 38, // 48: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest + 40, // 49: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest + 43, // 50: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest + 12, // 51: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected + 24, // 52: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected + 13, // 53: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest + 29, // 54: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse + 31, // 55: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse + 33, // 56: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse + 35, // 57: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse + 37, // 58: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse + 39, // 59: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse + 41, // 60: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse + 44, // 61: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse + 51, // [51:62] is the sub-list for method output_type + 40, // [40:51] is the sub-list for method input_type + 40, // [40:40] is the sub-list for extension type_name + 40, // [40:40] is the sub-list for extension extendee + 0, // [0:40] is the sub-list for field type_name } func init() { file_elastic_agent_client_proto_init() } @@ -3626,7 +3711,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckinExpected); i { + switch v := v.(*Feature); i { case 0: return &v.state case 1: @@ -3638,7 +3723,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnitObserved); i { + switch v := v.(*CheckinExpected); i { case 0: return &v.state case 1: @@ -3650,7 +3735,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckinObservedVersionInfo); i { + switch v := v.(*UnitObserved); i { case 0: return &v.state case 1: @@ -3662,7 +3747,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckinObserved); i { + switch v := v.(*CheckinObservedVersionInfo); i { case 0: return &v.state case 1: @@ -3674,7 +3759,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreBeginTxRequest); i { + switch v := v.(*CheckinObserved); i { case 0: return &v.state case 1: @@ -3686,7 +3771,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreBeginTxResponse); i { + switch v := v.(*StoreBeginTxRequest); i { case 0: return &v.state case 1: @@ -3698,7 +3783,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreGetKeyRequest); i { + switch v := v.(*StoreBeginTxResponse); i { case 0: return &v.state case 1: @@ -3710,7 +3795,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreGetKeyResponse); i { + switch v := v.(*StoreGetKeyRequest); i { case 0: return &v.state case 1: @@ -3722,7 +3807,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreSetKeyRequest); i { + switch v := v.(*StoreGetKeyResponse); i { case 0: return &v.state case 1: @@ -3734,7 +3819,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreSetKeyResponse); i { + switch v := v.(*StoreSetKeyRequest); i { case 0: return &v.state case 1: @@ -3746,7 +3831,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDeleteKeyRequest); i { + switch v := v.(*StoreSetKeyResponse); i { case 0: return &v.state case 1: @@ -3758,7 +3843,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDeleteKeyResponse); i { + switch v := v.(*StoreDeleteKeyRequest); i { case 0: return &v.state case 1: @@ -3770,7 +3855,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCommitTxRequest); i { + switch v := v.(*StoreDeleteKeyResponse); i { case 0: return &v.state case 1: @@ -3782,7 +3867,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCommitTxResponse); i { + switch v := v.(*StoreCommitTxRequest); i { case 0: return &v.state case 1: @@ -3794,7 +3879,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDiscardTxRequest); i { + switch v := v.(*StoreCommitTxResponse); i { case 0: return &v.state case 1: @@ -3806,7 +3891,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDiscardTxResponse); i { + switch v := v.(*StoreDiscardTxRequest); i { case 0: return &v.state case 1: @@ -3818,7 +3903,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArtifactFetchRequest); i { + switch v := v.(*StoreDiscardTxResponse); i { case 0: return &v.state case 1: @@ -3830,7 +3915,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArtifactFetchResponse); i { + switch v := v.(*ArtifactFetchRequest); i { case 0: return &v.state case 1: @@ -3842,7 +3927,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogMessage); i { + switch v := v.(*ArtifactFetchResponse); i { case 0: return &v.state case 1: @@ -3854,7 +3939,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogMessageRequest); i { + switch v := v.(*LogMessage); i { case 0: return &v.state case 1: @@ -3866,6 +3951,18 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogMessageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_elastic_agent_client_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogMessageResponse); i { case 0: return &v.state @@ -3878,8 +3975,8 @@ func file_elastic_agent_client_proto_init() { } } } - file_elastic_agent_client_proto_msgTypes[16].OneofWrappers = []interface{}{} - file_elastic_agent_client_proto_msgTypes[30].OneofWrappers = []interface{}{ + file_elastic_agent_client_proto_msgTypes[17].OneofWrappers = []interface{}{} + file_elastic_agent_client_proto_msgTypes[31].OneofWrappers = []interface{}{ (*ArtifactFetchResponse_Content)(nil), (*ArtifactFetchResponse_Eof)(nil), } @@ -3889,7 +3986,7 @@ func file_elastic_agent_client_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_elastic_agent_client_proto_rawDesc, NumEnums: 10, - NumMessages: 35, + NumMessages: 37, NumExtensions: 0, NumServices: 4, }, From 460fc3f1a9c5a64f81f56302ec291178d24ebce1 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Tue, 7 Feb 2023 10:29:52 +0100 Subject: [PATCH 04/40] wip --- elastic-agent-client.proto | 13 +- go.sum | 3 +- pkg/client/client_v2.go | 18 +- pkg/client/client_v2_test.go | 6 +- pkg/client/unit.go | 36 +- pkg/client/unit_test.go | 11 +- pkg/proto/elastic-agent-client.pb.go | 788 ++++++++++++++------------- 7 files changed, 476 insertions(+), 399 deletions(-) diff --git a/elastic-agent-client.proto b/elastic-agent-client.proto index 0eb310b..da07b0f 100644 --- a/elastic-agent-client.proto +++ b/elastic-agent-client.proto @@ -294,11 +294,12 @@ message CheckinAgentInfo { bool snapshot = 3; } -message Feature { - // The original unparsed configuration - google.protobuf.Struct source = 1; - // Pull out the enabled flag for convenience since it is always necessary. - bool enabled = 2; +message Features { + FQDNFeature fqdn = 1; +} + +message FQDNFeature { + bool enabled = 1; } // A set of units and their expected states and configuration. @@ -308,7 +309,7 @@ message CheckinExpected { // Agent info is provided only on first CheckinExpected response to the component. CheckinAgentInfo agent_info = 2; - map features = 3; + Features features = 3; } // Observed status for a unit. diff --git a/go.sum b/go.sum index 966114e..976bc2a 100644 --- a/go.sum +++ b/go.sum @@ -114,13 +114,14 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 h1:xHms4gcpe1YE7A3yIllJXP16CMAGuqwO2lX1mTyyRRc= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index ca0a927..f2403c4 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -356,7 +356,7 @@ func (c *clientV2) sendObserved(client proto.ElasticAgent_CheckinV2Client) error // syncUnits syncs the expected units with the current state. func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { - // here!!! send hapens here + // here!!! send happens here c.unitsMu.Lock() defer c.unitsMu.Unlock() i := 0 @@ -379,7 +379,14 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { unit := c.findUnit(agentUnit.Id, UnitType(agentUnit.Type)) if unit == nil { // new unit - unit = newUnit(agentUnit.Id, UnitType(agentUnit.Type), UnitState(agentUnit.State), UnitLogLevel(agentUnit.LogLevel), agentUnit.Config, agentUnit.ConfigStateIdx, c) + unit = newUnit( + agentUnit.Id, + UnitType(agentUnit.Type), + UnitState(agentUnit.State), + UnitLogLevel(agentUnit.LogLevel), + expected.Features, + agentUnit.Config, + agentUnit.ConfigStateIdx, c) c.units = append(c.units, unit) c.changesCh <- UnitChanged{ Type: UnitChangedAdded, @@ -387,7 +394,12 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { } } else { // existing unit - if unit.updateState(UnitState(agentUnit.State), UnitLogLevel(agentUnit.LogLevel), agentUnit.Config, agentUnit.ConfigStateIdx) { + if unit.updateState( + UnitState(agentUnit.State), + UnitLogLevel(agentUnit.LogLevel), + expected.Features, + agentUnit.Config, + agentUnit.ConfigStateIdx) { c.changesCh <- UnitChanged{ Type: UnitChangedModified, Unit: unit, diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index 5de6c7d..2fcc78f 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -185,8 +185,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { var m sync.Mutex token := mock.NewID() connected := false - unitOne := newUnit(mock.NewID(), UnitTypeOutput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) - unitTwo := newUnit(mock.NewID(), UnitTypeInput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) + unitOne := newUnit(mock.NewID(), UnitTypeOutput, UnitStateStarting, UnitLogLevelInfo, nil, nil, 0, nil) + unitTwo := newUnit(mock.NewID(), UnitTypeInput, UnitStateStarting, UnitLogLevelInfo, nil, nil, 0, nil) srv := mock.StubServerV2{ CheckinV2Impl: func(observed *proto.CheckinObserved) *proto.CheckinExpected { m.Lock() @@ -299,7 +299,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { "custom": "payload", }) case UnitChangedModified: - state, _, _ := change.Unit.Expected() + state, _, _, _ := change.Unit.Expected() if state == UnitStateStopped { change.Unit.UpdateState(UnitStateStopping, "Stopping", nil) go func() { diff --git a/pkg/client/unit.go b/pkg/client/unit.go index 1ebbbe1..611519a 100644 --- a/pkg/client/unit.go +++ b/pkg/client/unit.go @@ -121,6 +121,7 @@ type Unit struct { logLevel UnitLogLevel config *proto.UnitExpectedConfig configIdx uint64 + features *proto.Features stateMu sync.RWMutex state UnitState @@ -146,11 +147,11 @@ func (u *Unit) Type() UnitType { return u.unitType } -// Expected returns the expected state and config for the unit. -func (u *Unit) Expected() (UnitState, UnitLogLevel, *proto.UnitExpectedConfig) { +// Expected returns the expected state, log leve, features and config for the unit. +func (u *Unit) Expected() (UnitState, UnitLogLevel, *proto.Features, *proto.UnitExpectedConfig) { u.expectedStateMu.RLock() defer u.expectedStateMu.RUnlock() - return u.expectedState, u.logLevel, u.config + return u.expectedState, u.logLevel, u.features, u.config } // State returns the currently reported state for the unit. @@ -252,31 +253,40 @@ func (u *Unit) RegisterDiagnosticHook(name string, description string, filename } } -// updateState updates the configuration for this unit, triggering the delegate -// function if set. +// updateState updates the configuration for this unit, triggering the delegate function if set. func (u *Unit) updateState( exp UnitState, logLevel UnitLogLevel, + features *proto.Features, cfg *proto.UnitExpectedConfig, - cfgIdx uint64) bool { + cfgIdx uint64, +) bool { + u.expectedStateMu.Lock() defer u.expectedStateMu.Unlock() changed := false + if u.expectedState != exp { u.expectedState = exp changed = true } + if u.logLevel != logLevel { u.logLevel = logLevel changed = true } + if u.configIdx != cfgIdx { u.configIdx = cfgIdx - if !gproto.Equal(u.config.GetSource(), cfg.GetSource()) { + if !gproto.Equal(u.config.GetSource(), cfg.GetSource()) || + !gproto.Equal(u.features, features) { u.config = cfg + u.features = features + changed = true } } + return changed } @@ -298,12 +308,22 @@ func (u *Unit) toObserved() *proto.UnitObserved { } // newUnit creates a new unit that needs to be created in this process. -func newUnit(id string, unitType UnitType, exp UnitState, logLevel UnitLogLevel, cfg *proto.UnitExpectedConfig, cfgIdx uint64, client *clientV2) *Unit { +func newUnit( + id string, + unitType UnitType, + exp UnitState, + logLevel UnitLogLevel, + features *proto.Features, + cfg *proto.UnitExpectedConfig, + cfgIdx uint64, + client *clientV2) *Unit { + return &Unit{ id: id, unitType: unitType, config: cfg, configIdx: cfgIdx, + features: features, expectedState: exp, logLevel: logLevel, state: UnitStateStarting, diff --git a/pkg/client/unit_test.go b/pkg/client/unit_test.go index d7a5b93..efc471a 100644 --- a/pkg/client/unit_test.go +++ b/pkg/client/unit_test.go @@ -6,10 +6,11 @@ package client import ( "testing" - "github.com/elastic/elastic-agent-client/v7/pkg/proto" "github.com/stretchr/testify/require" gproto "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/structpb" + + "github.com/elastic/elastic-agent-client/v7/pkg/proto" ) var defaultTest = Unit{ @@ -35,7 +36,7 @@ func TestUnitUpdateWithSameMap(t *testing.T) { require.NoError(t, err) // This should return false, as the two underlying maps in `source` are the same - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) + result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, nil, newUnit, 2) require.False(t, result) } @@ -55,16 +56,16 @@ func TestUnitUpdateWithNewMap(t *testing.T) { require.NoError(t, err) // This should return true, as we have an actually new map - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) + result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, nil, newUnit, 2) require.True(t, result) } func TestUnitUpdateLog(t *testing.T) { - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) + result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, nil, &proto.UnitExpectedConfig{}, 2) require.True(t, result) } func TestUnitUpdateState(t *testing.T) { - result := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) + result := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, nil, &proto.UnitExpectedConfig{}, 2) require.True(t, result) } diff --git a/pkg/proto/elastic-agent-client.pb.go b/pkg/proto/elastic-agent-client.pb.go index 816d953..87b555b 100644 --- a/pkg/proto/elastic-agent-client.pb.go +++ b/pkg/proto/elastic-agent-client.pb.go @@ -571,7 +571,7 @@ func (x StoreGetKeyResponse_Status) Number() protoreflect.EnumNumber { // Deprecated: Use StoreGetKeyResponse_Status.Descriptor instead. func (StoreGetKeyResponse_Status) EnumDescriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{21, 0} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{22, 0} } // Connection information sent to the application on startup so it knows how to connected back to the Elastic Agent. @@ -1670,19 +1670,16 @@ func (x *CheckinAgentInfo) GetSnapshot() bool { return false } -type Feature struct { +type Features struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The original unparsed configuration - Source *structpb.Struct `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` - // Pull out the enabled flag for convenience since it is always necessary. - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Fqdn *FQDNFeature `protobuf:"bytes,1,opt,name=fqdn,proto3" json:"fqdn,omitempty"` } -func (x *Feature) Reset() { - *x = Feature{} +func (x *Features) Reset() { + *x = Features{} if protoimpl.UnsafeEnabled { mi := &file_elastic_agent_client_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1690,13 +1687,13 @@ func (x *Feature) Reset() { } } -func (x *Feature) String() string { +func (x *Features) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Feature) ProtoMessage() {} +func (*Features) ProtoMessage() {} -func (x *Feature) ProtoReflect() protoreflect.Message { +func (x *Features) ProtoReflect() protoreflect.Message { mi := &file_elastic_agent_client_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1708,19 +1705,59 @@ func (x *Feature) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Feature.ProtoReflect.Descriptor instead. -func (*Feature) Descriptor() ([]byte, []int) { +// Deprecated: Use Features.ProtoReflect.Descriptor instead. +func (*Features) Descriptor() ([]byte, []int) { return file_elastic_agent_client_proto_rawDescGZIP(), []int{13} } -func (x *Feature) GetSource() *structpb.Struct { +func (x *Features) GetFqdn() *FQDNFeature { if x != nil { - return x.Source + return x.Fqdn } return nil } -func (x *Feature) GetEnabled() bool { +type FQDNFeature struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FQDNFeature) Reset() { + *x = FQDNFeature{} + if protoimpl.UnsafeEnabled { + mi := &file_elastic_agent_client_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FQDNFeature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FQDNFeature) ProtoMessage() {} + +func (x *FQDNFeature) ProtoReflect() protoreflect.Message { + mi := &file_elastic_agent_client_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FQDNFeature.ProtoReflect.Descriptor instead. +func (*FQDNFeature) Descriptor() ([]byte, []int) { + return file_elastic_agent_client_proto_rawDescGZIP(), []int{14} +} + +func (x *FQDNFeature) GetEnabled() bool { if x != nil { return x.Enabled } @@ -1736,14 +1773,14 @@ type CheckinExpected struct { // Units is the expected units the component should be running. Units []*UnitExpected `protobuf:"bytes,1,rep,name=units,proto3" json:"units,omitempty"` // Agent info is provided only on first CheckinExpected response to the component. - AgentInfo *CheckinAgentInfo `protobuf:"bytes,2,opt,name=agent_info,json=agentInfo,proto3" json:"agent_info,omitempty"` - Features map[string]*Feature `protobuf:"bytes,3,rep,name=features,proto3" json:"features,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + AgentInfo *CheckinAgentInfo `protobuf:"bytes,2,opt,name=agent_info,json=agentInfo,proto3" json:"agent_info,omitempty"` + Features *Features `protobuf:"bytes,3,opt,name=features,proto3" json:"features,omitempty"` } func (x *CheckinExpected) Reset() { *x = CheckinExpected{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[14] + mi := &file_elastic_agent_client_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1756,7 +1793,7 @@ func (x *CheckinExpected) String() string { func (*CheckinExpected) ProtoMessage() {} func (x *CheckinExpected) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[14] + mi := &file_elastic_agent_client_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1769,7 +1806,7 @@ func (x *CheckinExpected) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckinExpected.ProtoReflect.Descriptor instead. func (*CheckinExpected) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{14} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{15} } func (x *CheckinExpected) GetUnits() []*UnitExpected { @@ -1786,7 +1823,7 @@ func (x *CheckinExpected) GetAgentInfo() *CheckinAgentInfo { return nil } -func (x *CheckinExpected) GetFeatures() map[string]*Feature { +func (x *CheckinExpected) GetFeatures() *Features { if x != nil { return x.Features } @@ -1822,7 +1859,7 @@ type UnitObserved struct { func (x *UnitObserved) Reset() { *x = UnitObserved{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[15] + mi := &file_elastic_agent_client_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1835,7 +1872,7 @@ func (x *UnitObserved) String() string { func (*UnitObserved) ProtoMessage() {} func (x *UnitObserved) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[15] + mi := &file_elastic_agent_client_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1848,7 +1885,7 @@ func (x *UnitObserved) ProtoReflect() protoreflect.Message { // Deprecated: Use UnitObserved.ProtoReflect.Descriptor instead. func (*UnitObserved) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{15} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{16} } func (x *UnitObserved) GetId() string { @@ -1910,7 +1947,7 @@ type CheckinObservedVersionInfo struct { func (x *CheckinObservedVersionInfo) Reset() { *x = CheckinObservedVersionInfo{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[16] + mi := &file_elastic_agent_client_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1923,7 +1960,7 @@ func (x *CheckinObservedVersionInfo) String() string { func (*CheckinObservedVersionInfo) ProtoMessage() {} func (x *CheckinObservedVersionInfo) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[16] + mi := &file_elastic_agent_client_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1936,7 +1973,7 @@ func (x *CheckinObservedVersionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckinObservedVersionInfo.ProtoReflect.Descriptor instead. func (*CheckinObservedVersionInfo) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{16} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{17} } func (x *CheckinObservedVersionInfo) GetName() string { @@ -1981,7 +2018,7 @@ type CheckinObserved struct { func (x *CheckinObserved) Reset() { *x = CheckinObserved{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[17] + mi := &file_elastic_agent_client_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1994,7 +2031,7 @@ func (x *CheckinObserved) String() string { func (*CheckinObserved) ProtoMessage() {} func (x *CheckinObserved) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[17] + mi := &file_elastic_agent_client_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2007,7 +2044,7 @@ func (x *CheckinObserved) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckinObserved.ProtoReflect.Descriptor instead. func (*CheckinObserved) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{17} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{18} } func (x *CheckinObserved) GetToken() string { @@ -2052,7 +2089,7 @@ type StoreBeginTxRequest struct { func (x *StoreBeginTxRequest) Reset() { *x = StoreBeginTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[18] + mi := &file_elastic_agent_client_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2065,7 +2102,7 @@ func (x *StoreBeginTxRequest) String() string { func (*StoreBeginTxRequest) ProtoMessage() {} func (x *StoreBeginTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[18] + mi := &file_elastic_agent_client_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2078,7 +2115,7 @@ func (x *StoreBeginTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreBeginTxRequest.ProtoReflect.Descriptor instead. func (*StoreBeginTxRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{18} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{19} } func (x *StoreBeginTxRequest) GetToken() string { @@ -2122,7 +2159,7 @@ type StoreBeginTxResponse struct { func (x *StoreBeginTxResponse) Reset() { *x = StoreBeginTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[19] + mi := &file_elastic_agent_client_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2135,7 +2172,7 @@ func (x *StoreBeginTxResponse) String() string { func (*StoreBeginTxResponse) ProtoMessage() {} func (x *StoreBeginTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[19] + mi := &file_elastic_agent_client_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2148,7 +2185,7 @@ func (x *StoreBeginTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreBeginTxResponse.ProtoReflect.Descriptor instead. func (*StoreBeginTxResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{19} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{20} } func (x *StoreBeginTxResponse) GetId() string { @@ -2175,7 +2212,7 @@ type StoreGetKeyRequest struct { func (x *StoreGetKeyRequest) Reset() { *x = StoreGetKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[20] + mi := &file_elastic_agent_client_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2188,7 +2225,7 @@ func (x *StoreGetKeyRequest) String() string { func (*StoreGetKeyRequest) ProtoMessage() {} func (x *StoreGetKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[20] + mi := &file_elastic_agent_client_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2201,7 +2238,7 @@ func (x *StoreGetKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreGetKeyRequest.ProtoReflect.Descriptor instead. func (*StoreGetKeyRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{20} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{21} } func (x *StoreGetKeyRequest) GetToken() string { @@ -2239,7 +2276,7 @@ type StoreGetKeyResponse struct { func (x *StoreGetKeyResponse) Reset() { *x = StoreGetKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[21] + mi := &file_elastic_agent_client_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2252,7 +2289,7 @@ func (x *StoreGetKeyResponse) String() string { func (*StoreGetKeyResponse) ProtoMessage() {} func (x *StoreGetKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[21] + mi := &file_elastic_agent_client_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2265,7 +2302,7 @@ func (x *StoreGetKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreGetKeyResponse.ProtoReflect.Descriptor instead. func (*StoreGetKeyResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{21} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{22} } func (x *StoreGetKeyResponse) GetStatus() StoreGetKeyResponse_Status { @@ -2305,7 +2342,7 @@ type StoreSetKeyRequest struct { func (x *StoreSetKeyRequest) Reset() { *x = StoreSetKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[22] + mi := &file_elastic_agent_client_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2318,7 +2355,7 @@ func (x *StoreSetKeyRequest) String() string { func (*StoreSetKeyRequest) ProtoMessage() {} func (x *StoreSetKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[22] + mi := &file_elastic_agent_client_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2331,7 +2368,7 @@ func (x *StoreSetKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreSetKeyRequest.ProtoReflect.Descriptor instead. func (*StoreSetKeyRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{22} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{23} } func (x *StoreSetKeyRequest) GetToken() string { @@ -2379,7 +2416,7 @@ type StoreSetKeyResponse struct { func (x *StoreSetKeyResponse) Reset() { *x = StoreSetKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[23] + mi := &file_elastic_agent_client_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2392,7 +2429,7 @@ func (x *StoreSetKeyResponse) String() string { func (*StoreSetKeyResponse) ProtoMessage() {} func (x *StoreSetKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[23] + mi := &file_elastic_agent_client_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2405,7 +2442,7 @@ func (x *StoreSetKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreSetKeyResponse.ProtoReflect.Descriptor instead. func (*StoreSetKeyResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{23} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{24} } // Deletes a key in the store. @@ -2429,7 +2466,7 @@ type StoreDeleteKeyRequest struct { func (x *StoreDeleteKeyRequest) Reset() { *x = StoreDeleteKeyRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[24] + mi := &file_elastic_agent_client_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2442,7 +2479,7 @@ func (x *StoreDeleteKeyRequest) String() string { func (*StoreDeleteKeyRequest) ProtoMessage() {} func (x *StoreDeleteKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[24] + mi := &file_elastic_agent_client_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2455,7 +2492,7 @@ func (x *StoreDeleteKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDeleteKeyRequest.ProtoReflect.Descriptor instead. func (*StoreDeleteKeyRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{24} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{25} } func (x *StoreDeleteKeyRequest) GetToken() string { @@ -2489,7 +2526,7 @@ type StoreDeleteKeyResponse struct { func (x *StoreDeleteKeyResponse) Reset() { *x = StoreDeleteKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[25] + mi := &file_elastic_agent_client_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2502,7 +2539,7 @@ func (x *StoreDeleteKeyResponse) String() string { func (*StoreDeleteKeyResponse) ProtoMessage() {} func (x *StoreDeleteKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[25] + mi := &file_elastic_agent_client_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2515,7 +2552,7 @@ func (x *StoreDeleteKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDeleteKeyResponse.ProtoReflect.Descriptor instead. func (*StoreDeleteKeyResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{25} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{26} } // Commits the transaction in the store. @@ -2535,7 +2572,7 @@ type StoreCommitTxRequest struct { func (x *StoreCommitTxRequest) Reset() { *x = StoreCommitTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[26] + mi := &file_elastic_agent_client_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2548,7 +2585,7 @@ func (x *StoreCommitTxRequest) String() string { func (*StoreCommitTxRequest) ProtoMessage() {} func (x *StoreCommitTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[26] + mi := &file_elastic_agent_client_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2561,7 +2598,7 @@ func (x *StoreCommitTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCommitTxRequest.ProtoReflect.Descriptor instead. func (*StoreCommitTxRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{26} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{27} } func (x *StoreCommitTxRequest) GetToken() string { @@ -2588,7 +2625,7 @@ type StoreCommitTxResponse struct { func (x *StoreCommitTxResponse) Reset() { *x = StoreCommitTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[27] + mi := &file_elastic_agent_client_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2601,7 +2638,7 @@ func (x *StoreCommitTxResponse) String() string { func (*StoreCommitTxResponse) ProtoMessage() {} func (x *StoreCommitTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[27] + mi := &file_elastic_agent_client_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2614,7 +2651,7 @@ func (x *StoreCommitTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreCommitTxResponse.ProtoReflect.Descriptor instead. func (*StoreCommitTxResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{27} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{28} } // Discards the transaction in the store. @@ -2632,7 +2669,7 @@ type StoreDiscardTxRequest struct { func (x *StoreDiscardTxRequest) Reset() { *x = StoreDiscardTxRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[28] + mi := &file_elastic_agent_client_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2645,7 +2682,7 @@ func (x *StoreDiscardTxRequest) String() string { func (*StoreDiscardTxRequest) ProtoMessage() {} func (x *StoreDiscardTxRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[28] + mi := &file_elastic_agent_client_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2658,7 +2695,7 @@ func (x *StoreDiscardTxRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDiscardTxRequest.ProtoReflect.Descriptor instead. func (*StoreDiscardTxRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{28} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{29} } func (x *StoreDiscardTxRequest) GetToken() string { @@ -2685,7 +2722,7 @@ type StoreDiscardTxResponse struct { func (x *StoreDiscardTxResponse) Reset() { *x = StoreDiscardTxResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[29] + mi := &file_elastic_agent_client_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2698,7 +2735,7 @@ func (x *StoreDiscardTxResponse) String() string { func (*StoreDiscardTxResponse) ProtoMessage() {} func (x *StoreDiscardTxResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[29] + mi := &file_elastic_agent_client_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2711,7 +2748,7 @@ func (x *StoreDiscardTxResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StoreDiscardTxResponse.ProtoReflect.Descriptor instead. func (*StoreDiscardTxResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{29} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{30} } // Requests an artifact from the Elastic Agent. @@ -2732,7 +2769,7 @@ type ArtifactFetchRequest struct { func (x *ArtifactFetchRequest) Reset() { *x = ArtifactFetchRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[30] + mi := &file_elastic_agent_client_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2745,7 +2782,7 @@ func (x *ArtifactFetchRequest) String() string { func (*ArtifactFetchRequest) ProtoMessage() {} func (x *ArtifactFetchRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[30] + mi := &file_elastic_agent_client_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2758,7 +2795,7 @@ func (x *ArtifactFetchRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ArtifactFetchRequest.ProtoReflect.Descriptor instead. func (*ArtifactFetchRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{30} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{31} } func (x *ArtifactFetchRequest) GetToken() string { @@ -2798,7 +2835,7 @@ type ArtifactFetchResponse struct { func (x *ArtifactFetchResponse) Reset() { *x = ArtifactFetchResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[31] + mi := &file_elastic_agent_client_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2811,7 +2848,7 @@ func (x *ArtifactFetchResponse) String() string { func (*ArtifactFetchResponse) ProtoMessage() {} func (x *ArtifactFetchResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[31] + mi := &file_elastic_agent_client_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2824,7 +2861,7 @@ func (x *ArtifactFetchResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ArtifactFetchResponse.ProtoReflect.Descriptor instead. func (*ArtifactFetchResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{31} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{32} } func (m *ArtifactFetchResponse) GetContentEof() isArtifactFetchResponse_ContentEof { @@ -2882,7 +2919,7 @@ type LogMessage struct { func (x *LogMessage) Reset() { *x = LogMessage{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[32] + mi := &file_elastic_agent_client_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2895,7 +2932,7 @@ func (x *LogMessage) String() string { func (*LogMessage) ProtoMessage() {} func (x *LogMessage) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[32] + mi := &file_elastic_agent_client_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2908,7 +2945,7 @@ func (x *LogMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessage.ProtoReflect.Descriptor instead. func (*LogMessage) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{32} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{33} } func (x *LogMessage) GetUnitId() string { @@ -2946,7 +2983,7 @@ type LogMessageRequest struct { func (x *LogMessageRequest) Reset() { *x = LogMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[33] + mi := &file_elastic_agent_client_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2959,7 +2996,7 @@ func (x *LogMessageRequest) String() string { func (*LogMessageRequest) ProtoMessage() {} func (x *LogMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[33] + mi := &file_elastic_agent_client_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2972,7 +3009,7 @@ func (x *LogMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessageRequest.ProtoReflect.Descriptor instead. func (*LogMessageRequest) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{33} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{34} } func (x *LogMessageRequest) GetToken() string { @@ -2998,7 +3035,7 @@ type LogMessageResponse struct { func (x *LogMessageResponse) Reset() { *x = LogMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_elastic_agent_client_proto_msgTypes[34] + mi := &file_elastic_agent_client_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3011,7 +3048,7 @@ func (x *LogMessageResponse) String() string { func (*LogMessageResponse) ProtoMessage() {} func (x *LogMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_elastic_agent_client_proto_msgTypes[34] + mi := &file_elastic_agent_client_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3024,7 +3061,7 @@ func (x *LogMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LogMessageResponse.ProtoReflect.Descriptor instead. func (*LogMessageResponse) Descriptor() ([]byte, []int) { - return file_elastic_agent_client_proto_rawDescGZIP(), []int{34} + return file_elastic_agent_client_proto_rawDescGZIP(), []int{35} } var File_elastic_agent_client_proto protoreflect.FileDescriptor @@ -3195,221 +3232,215 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x54, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x83, - 0x02, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x36, 0x0a, - 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, - 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x40, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2e, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0x4b, 0x0a, 0x0d, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, - 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, - 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, - 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, - 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, - 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, - 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, - 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, - 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x32, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x51, 0x44, 0x4e, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x22, 0x27, 0x0a, 0x0b, + 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, + 0x6e, 0x69, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x08, + 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, + 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, + 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, + 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, + 0x6e, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, + 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, + 0x00, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, + 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, + 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, - 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, - 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, - 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, + 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, + 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, + 0x26, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, + 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x09, 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, - 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, - 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, - 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, - 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, - 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, - 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, - 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, - 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, - 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, - 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, - 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, - 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, - 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, - 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, - 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, - 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, - 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, - 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, - 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, - 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, - 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, + 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, + 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, + 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x41, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, + 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, + 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, + 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, + 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, + 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, + 0x6e, 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, + 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, + 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, + 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, + 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, + 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, + 0x0d, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, + 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, + 0x2a, 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, + 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, + 0x47, 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, + 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, + 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, + 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, + 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, + 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, + 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, + 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, + 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, + 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, + 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, + 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, + 0x32, 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, + 0x74, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, + 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, + 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, + 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, + 0x42, 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x45, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, + 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, + 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, + 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, + 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, + 0x0a, 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, + 0x67, 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, + 0x0f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3450,29 +3481,29 @@ var file_elastic_agent_client_proto_goTypes = []interface{}{ (*UnitExpectedConfig)(nil), // 20: proto.UnitExpectedConfig (*UnitExpected)(nil), // 21: proto.UnitExpected (*CheckinAgentInfo)(nil), // 22: proto.CheckinAgentInfo - (*Feature)(nil), // 23: proto.Feature - (*CheckinExpected)(nil), // 24: proto.CheckinExpected - (*UnitObserved)(nil), // 25: proto.UnitObserved - (*CheckinObservedVersionInfo)(nil), // 26: proto.CheckinObservedVersionInfo - (*CheckinObserved)(nil), // 27: proto.CheckinObserved - (*StoreBeginTxRequest)(nil), // 28: proto.StoreBeginTxRequest - (*StoreBeginTxResponse)(nil), // 29: proto.StoreBeginTxResponse - (*StoreGetKeyRequest)(nil), // 30: proto.StoreGetKeyRequest - (*StoreGetKeyResponse)(nil), // 31: proto.StoreGetKeyResponse - (*StoreSetKeyRequest)(nil), // 32: proto.StoreSetKeyRequest - (*StoreSetKeyResponse)(nil), // 33: proto.StoreSetKeyResponse - (*StoreDeleteKeyRequest)(nil), // 34: proto.StoreDeleteKeyRequest - (*StoreDeleteKeyResponse)(nil), // 35: proto.StoreDeleteKeyResponse - (*StoreCommitTxRequest)(nil), // 36: proto.StoreCommitTxRequest - (*StoreCommitTxResponse)(nil), // 37: proto.StoreCommitTxResponse - (*StoreDiscardTxRequest)(nil), // 38: proto.StoreDiscardTxRequest - (*StoreDiscardTxResponse)(nil), // 39: proto.StoreDiscardTxResponse - (*ArtifactFetchRequest)(nil), // 40: proto.ArtifactFetchRequest - (*ArtifactFetchResponse)(nil), // 41: proto.ArtifactFetchResponse - (*LogMessage)(nil), // 42: proto.LogMessage - (*LogMessageRequest)(nil), // 43: proto.LogMessageRequest - (*LogMessageResponse)(nil), // 44: proto.LogMessageResponse - nil, // 45: proto.CheckinExpected.FeaturesEntry + (*Features)(nil), // 23: proto.Features + (*FQDNFeature)(nil), // 24: proto.FQDNFeature + (*CheckinExpected)(nil), // 25: proto.CheckinExpected + (*UnitObserved)(nil), // 26: proto.UnitObserved + (*CheckinObservedVersionInfo)(nil), // 27: proto.CheckinObservedVersionInfo + (*CheckinObserved)(nil), // 28: proto.CheckinObserved + (*StoreBeginTxRequest)(nil), // 29: proto.StoreBeginTxRequest + (*StoreBeginTxResponse)(nil), // 30: proto.StoreBeginTxResponse + (*StoreGetKeyRequest)(nil), // 31: proto.StoreGetKeyRequest + (*StoreGetKeyResponse)(nil), // 32: proto.StoreGetKeyResponse + (*StoreSetKeyRequest)(nil), // 33: proto.StoreSetKeyRequest + (*StoreSetKeyResponse)(nil), // 34: proto.StoreSetKeyResponse + (*StoreDeleteKeyRequest)(nil), // 35: proto.StoreDeleteKeyRequest + (*StoreDeleteKeyResponse)(nil), // 36: proto.StoreDeleteKeyResponse + (*StoreCommitTxRequest)(nil), // 37: proto.StoreCommitTxRequest + (*StoreCommitTxResponse)(nil), // 38: proto.StoreCommitTxResponse + (*StoreDiscardTxRequest)(nil), // 39: proto.StoreDiscardTxRequest + (*StoreDiscardTxResponse)(nil), // 40: proto.StoreDiscardTxResponse + (*ArtifactFetchRequest)(nil), // 41: proto.ArtifactFetchRequest + (*ArtifactFetchResponse)(nil), // 42: proto.ArtifactFetchResponse + (*LogMessage)(nil), // 43: proto.LogMessage + (*LogMessageRequest)(nil), // 44: proto.LogMessageRequest + (*LogMessageResponse)(nil), // 45: proto.LogMessageResponse nil, // 46: proto.CheckinObservedVersionInfo.MetaEntry (*timestamppb.Timestamp)(nil), // 47: google.protobuf.Timestamp (*structpb.Struct)(nil), // 48: google.protobuf.Struct @@ -3502,50 +3533,49 @@ var file_elastic_agent_client_proto_depIdxs = []int32{ 1, // 20: proto.UnitExpected.state:type_name -> proto.State 20, // 21: proto.UnitExpected.config:type_name -> proto.UnitExpectedConfig 3, // 22: proto.UnitExpected.log_level:type_name -> proto.UnitLogLevel - 48, // 23: proto.Feature.source:type_name -> google.protobuf.Struct + 24, // 23: proto.Features.fqdn:type_name -> proto.FQDNFeature 21, // 24: proto.CheckinExpected.units:type_name -> proto.UnitExpected 22, // 25: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo - 45, // 26: proto.CheckinExpected.features:type_name -> proto.CheckinExpected.FeaturesEntry + 23, // 26: proto.CheckinExpected.features:type_name -> proto.Features 2, // 27: proto.UnitObserved.type:type_name -> proto.UnitType 1, // 28: proto.UnitObserved.state:type_name -> proto.State 48, // 29: proto.UnitObserved.payload:type_name -> google.protobuf.Struct 46, // 30: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry - 25, // 31: proto.CheckinObserved.units:type_name -> proto.UnitObserved - 26, // 32: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo + 26, // 31: proto.CheckinObserved.units:type_name -> proto.UnitObserved + 27, // 32: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo 2, // 33: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType 4, // 34: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType 9, // 35: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status 49, // 36: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty 2, // 37: proto.LogMessage.unit_type:type_name -> proto.UnitType - 42, // 38: proto.LogMessageRequest.messages:type_name -> proto.LogMessage - 23, // 39: proto.CheckinExpected.FeaturesEntry.value:type_name -> proto.Feature - 11, // 40: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved - 27, // 41: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved - 15, // 42: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse - 28, // 43: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest - 30, // 44: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest - 32, // 45: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest - 34, // 46: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest - 36, // 47: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest - 38, // 48: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest - 40, // 49: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest - 43, // 50: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest - 12, // 51: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected - 24, // 52: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected - 13, // 53: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest - 29, // 54: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse - 31, // 55: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse - 33, // 56: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse - 35, // 57: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse - 37, // 58: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse - 39, // 59: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse - 41, // 60: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse - 44, // 61: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse - 51, // [51:62] is the sub-list for method output_type - 40, // [40:51] is the sub-list for method input_type - 40, // [40:40] is the sub-list for extension type_name - 40, // [40:40] is the sub-list for extension extendee - 0, // [0:40] is the sub-list for field type_name + 43, // 38: proto.LogMessageRequest.messages:type_name -> proto.LogMessage + 11, // 39: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved + 28, // 40: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved + 15, // 41: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse + 29, // 42: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest + 31, // 43: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest + 33, // 44: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest + 35, // 45: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest + 37, // 46: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest + 39, // 47: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest + 41, // 48: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest + 44, // 49: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest + 12, // 50: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected + 25, // 51: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected + 13, // 52: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest + 30, // 53: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse + 32, // 54: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse + 34, // 55: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse + 36, // 56: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse + 38, // 57: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse + 40, // 58: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse + 42, // 59: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse + 45, // 60: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse + 50, // [50:61] is the sub-list for method output_type + 39, // [39:50] is the sub-list for method input_type + 39, // [39:39] is the sub-list for extension type_name + 39, // [39:39] is the sub-list for extension extendee + 0, // [0:39] is the sub-list for field type_name } func init() { file_elastic_agent_client_proto_init() } @@ -3711,7 +3741,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Feature); i { + switch v := v.(*Features); i { case 0: return &v.state case 1: @@ -3723,7 +3753,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckinExpected); i { + switch v := v.(*FQDNFeature); i { case 0: return &v.state case 1: @@ -3735,7 +3765,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnitObserved); i { + switch v := v.(*CheckinExpected); i { case 0: return &v.state case 1: @@ -3747,7 +3777,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckinObservedVersionInfo); i { + switch v := v.(*UnitObserved); i { case 0: return &v.state case 1: @@ -3759,7 +3789,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckinObserved); i { + switch v := v.(*CheckinObservedVersionInfo); i { case 0: return &v.state case 1: @@ -3771,7 +3801,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreBeginTxRequest); i { + switch v := v.(*CheckinObserved); i { case 0: return &v.state case 1: @@ -3783,7 +3813,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreBeginTxResponse); i { + switch v := v.(*StoreBeginTxRequest); i { case 0: return &v.state case 1: @@ -3795,7 +3825,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreGetKeyRequest); i { + switch v := v.(*StoreBeginTxResponse); i { case 0: return &v.state case 1: @@ -3807,7 +3837,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreGetKeyResponse); i { + switch v := v.(*StoreGetKeyRequest); i { case 0: return &v.state case 1: @@ -3819,7 +3849,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreSetKeyRequest); i { + switch v := v.(*StoreGetKeyResponse); i { case 0: return &v.state case 1: @@ -3831,7 +3861,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreSetKeyResponse); i { + switch v := v.(*StoreSetKeyRequest); i { case 0: return &v.state case 1: @@ -3843,7 +3873,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDeleteKeyRequest); i { + switch v := v.(*StoreSetKeyResponse); i { case 0: return &v.state case 1: @@ -3855,7 +3885,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDeleteKeyResponse); i { + switch v := v.(*StoreDeleteKeyRequest); i { case 0: return &v.state case 1: @@ -3867,7 +3897,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCommitTxRequest); i { + switch v := v.(*StoreDeleteKeyResponse); i { case 0: return &v.state case 1: @@ -3879,7 +3909,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreCommitTxResponse); i { + switch v := v.(*StoreCommitTxRequest); i { case 0: return &v.state case 1: @@ -3891,7 +3921,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDiscardTxRequest); i { + switch v := v.(*StoreCommitTxResponse); i { case 0: return &v.state case 1: @@ -3903,7 +3933,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StoreDiscardTxResponse); i { + switch v := v.(*StoreDiscardTxRequest); i { case 0: return &v.state case 1: @@ -3915,7 +3945,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArtifactFetchRequest); i { + switch v := v.(*StoreDiscardTxResponse); i { case 0: return &v.state case 1: @@ -3927,7 +3957,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ArtifactFetchResponse); i { + switch v := v.(*ArtifactFetchRequest); i { case 0: return &v.state case 1: @@ -3939,7 +3969,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogMessage); i { + switch v := v.(*ArtifactFetchResponse); i { case 0: return &v.state case 1: @@ -3951,7 +3981,7 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogMessageRequest); i { + switch v := v.(*LogMessage); i { case 0: return &v.state case 1: @@ -3963,6 +3993,18 @@ func file_elastic_agent_client_proto_init() { } } file_elastic_agent_client_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LogMessageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_elastic_agent_client_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LogMessageResponse); i { case 0: return &v.state @@ -3975,8 +4017,8 @@ func file_elastic_agent_client_proto_init() { } } } - file_elastic_agent_client_proto_msgTypes[17].OneofWrappers = []interface{}{} - file_elastic_agent_client_proto_msgTypes[31].OneofWrappers = []interface{}{ + file_elastic_agent_client_proto_msgTypes[18].OneofWrappers = []interface{}{} + file_elastic_agent_client_proto_msgTypes[32].OneofWrappers = []interface{}{ (*ArtifactFetchResponse_Content)(nil), (*ArtifactFetchResponse_Eof)(nil), } From ce6494455d7d8a02785d8232c86fbcec145076df Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Tue, 7 Feb 2023 14:16:35 +0100 Subject: [PATCH 05/40] . --- elastic-agent-client.proto | 2 - pkg/client/client_v2.go | 1 - pkg/proto/elastic-agent-client.pb.go | 561 +++++++++++++-------------- 3 files changed, 274 insertions(+), 290 deletions(-) diff --git a/elastic-agent-client.proto b/elastic-agent-client.proto index da07b0f..81c19b4 100644 --- a/elastic-agent-client.proto +++ b/elastic-agent-client.proto @@ -261,8 +261,6 @@ message UnitExpectedConfig { DataStream data_stream = 7; // Multiple streams per unit. repeated Stream streams = 8; - // Features configure, enable and disable optional features. - google.protobuf.Struct features = 9; } // A unit that is part of a collector/shipper. diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index f2403c4..e2155d1 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -356,7 +356,6 @@ func (c *clientV2) sendObserved(client proto.ElasticAgent_CheckinV2Client) error // syncUnits syncs the expected units with the current state. func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { - // here!!! send happens here c.unitsMu.Lock() defer c.unitsMu.Unlock() i := 0 diff --git a/pkg/proto/elastic-agent-client.pb.go b/pkg/proto/elastic-agent-client.pb.go index 87b555b..7e470ca 100644 --- a/pkg/proto/elastic-agent-client.pb.go +++ b/pkg/proto/elastic-agent-client.pb.go @@ -1407,8 +1407,6 @@ type UnitExpectedConfig struct { DataStream *DataStream `protobuf:"bytes,7,opt,name=data_stream,json=dataStream,proto3" json:"data_stream,omitempty"` // Multiple streams per unit. Streams []*Stream `protobuf:"bytes,8,rep,name=streams,proto3" json:"streams,omitempty"` - // Features configure, enable and disable optional features. - Features *structpb.Struct `protobuf:"bytes,9,opt,name=features,proto3" json:"features,omitempty"` } func (x *UnitExpectedConfig) Reset() { @@ -1499,13 +1497,6 @@ func (x *UnitExpectedConfig) GetStreams() []*Stream { return nil } -func (x *UnitExpectedConfig) GetFeatures() *structpb.Struct { - if x != nil { - return x.Features - } - return nil -} - // A unit that is part of a collector/shipper. type UnitExpected struct { state protoimpl.MessageState @@ -3190,7 +3181,7 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x69, 0x64, 0x12, 0x32, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0xcc, 0x02, 0x0a, 0x12, 0x55, 0x6e, 0x69, 0x74, 0x45, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x97, 0x02, 0x0a, 0x12, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, @@ -3208,239 +3199,236 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x61, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x27, 0x0a, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73, - 0x12, 0x33, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xf6, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x0a, 0x09, - 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x58, - 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x22, 0x32, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x51, 0x44, 0x4e, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x22, 0x27, 0x0a, 0x0b, - 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x08, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, - 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, - 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x22, 0xf6, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x49, 0x64, 0x78, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, + 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x30, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, + 0x65, 0x76, 0x65, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, + 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x58, 0x0a, 0x10, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, - 0x6e, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, - 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, - 0x00, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, - 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, - 0x66, 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, - 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x22, 0x32, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x22, 0x27, 0x0a, 0x0b, 0x46, 0x51, 0x44, 0x4e, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, + 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, + 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, + 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, + 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, + 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, + 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, + 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, + 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, + 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, + 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, + 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, + 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, - 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, - 0x26, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, - 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x09, 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, + 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, + 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, - 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, - 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, - 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x41, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, - 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, - 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, - 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, - 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, - 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, - 0x6e, 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, - 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, - 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, - 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, - 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, - 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, - 0x69, 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, - 0x2a, 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, - 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, - 0x47, 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, - 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, - 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, - 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, - 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, - 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, - 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, - 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, - 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, - 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, - 0x32, 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, - 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, - 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, - 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, - 0x42, 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x45, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, - 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, - 0x64, 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, - 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x32, 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, - 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, - 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, - 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, - 0x0a, 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, - 0x67, 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, - 0x0f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, + 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, + 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, + 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, + 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, + 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, + 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, + 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, + 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, + 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, + 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, + 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, + 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, + 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, + 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, + 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, + 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, + 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, + 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, + 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, + 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, + 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, + 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3528,54 +3516,53 @@ var file_elastic_agent_client_proto_depIdxs = []int32{ 17, // 15: proto.UnitExpectedConfig.meta:type_name -> proto.Meta 18, // 16: proto.UnitExpectedConfig.data_stream:type_name -> proto.DataStream 19, // 17: proto.UnitExpectedConfig.streams:type_name -> proto.Stream - 48, // 18: proto.UnitExpectedConfig.features:type_name -> google.protobuf.Struct - 2, // 19: proto.UnitExpected.type:type_name -> proto.UnitType - 1, // 20: proto.UnitExpected.state:type_name -> proto.State - 20, // 21: proto.UnitExpected.config:type_name -> proto.UnitExpectedConfig - 3, // 22: proto.UnitExpected.log_level:type_name -> proto.UnitLogLevel - 24, // 23: proto.Features.fqdn:type_name -> proto.FQDNFeature - 21, // 24: proto.CheckinExpected.units:type_name -> proto.UnitExpected - 22, // 25: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo - 23, // 26: proto.CheckinExpected.features:type_name -> proto.Features - 2, // 27: proto.UnitObserved.type:type_name -> proto.UnitType - 1, // 28: proto.UnitObserved.state:type_name -> proto.State - 48, // 29: proto.UnitObserved.payload:type_name -> google.protobuf.Struct - 46, // 30: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry - 26, // 31: proto.CheckinObserved.units:type_name -> proto.UnitObserved - 27, // 32: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo - 2, // 33: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType - 4, // 34: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType - 9, // 35: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status - 49, // 36: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty - 2, // 37: proto.LogMessage.unit_type:type_name -> proto.UnitType - 43, // 38: proto.LogMessageRequest.messages:type_name -> proto.LogMessage - 11, // 39: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved - 28, // 40: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved - 15, // 41: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse - 29, // 42: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest - 31, // 43: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest - 33, // 44: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest - 35, // 45: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest - 37, // 46: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest - 39, // 47: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest - 41, // 48: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest - 44, // 49: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest - 12, // 50: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected - 25, // 51: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected - 13, // 52: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest - 30, // 53: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse - 32, // 54: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse - 34, // 55: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse - 36, // 56: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse - 38, // 57: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse - 40, // 58: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse - 42, // 59: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse - 45, // 60: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse - 50, // [50:61] is the sub-list for method output_type - 39, // [39:50] is the sub-list for method input_type - 39, // [39:39] is the sub-list for extension type_name - 39, // [39:39] is the sub-list for extension extendee - 0, // [0:39] is the sub-list for field type_name + 2, // 18: proto.UnitExpected.type:type_name -> proto.UnitType + 1, // 19: proto.UnitExpected.state:type_name -> proto.State + 20, // 20: proto.UnitExpected.config:type_name -> proto.UnitExpectedConfig + 3, // 21: proto.UnitExpected.log_level:type_name -> proto.UnitLogLevel + 24, // 22: proto.Features.fqdn:type_name -> proto.FQDNFeature + 21, // 23: proto.CheckinExpected.units:type_name -> proto.UnitExpected + 22, // 24: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo + 23, // 25: proto.CheckinExpected.features:type_name -> proto.Features + 2, // 26: proto.UnitObserved.type:type_name -> proto.UnitType + 1, // 27: proto.UnitObserved.state:type_name -> proto.State + 48, // 28: proto.UnitObserved.payload:type_name -> google.protobuf.Struct + 46, // 29: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry + 26, // 30: proto.CheckinObserved.units:type_name -> proto.UnitObserved + 27, // 31: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo + 2, // 32: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType + 4, // 33: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType + 9, // 34: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status + 49, // 35: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty + 2, // 36: proto.LogMessage.unit_type:type_name -> proto.UnitType + 43, // 37: proto.LogMessageRequest.messages:type_name -> proto.LogMessage + 11, // 38: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved + 28, // 39: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved + 15, // 40: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse + 29, // 41: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest + 31, // 42: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest + 33, // 43: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest + 35, // 44: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest + 37, // 45: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest + 39, // 46: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest + 41, // 47: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest + 44, // 48: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest + 12, // 49: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected + 25, // 50: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected + 13, // 51: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest + 30, // 52: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse + 32, // 53: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse + 34, // 54: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse + 36, // 55: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse + 38, // 56: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse + 40, // 57: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse + 42, // 58: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse + 45, // 59: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse + 49, // [49:60] is the sub-list for method output_type + 38, // [38:49] is the sub-list for method input_type + 38, // [38:38] is the sub-list for extension type_name + 38, // [38:38] is the sub-list for extension extendee + 0, // [0:38] is the sub-list for field type_name } func init() { file_elastic_agent_client_proto_init() } From 4492e9849151ce28e45ed337852ffe29a55e592a Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Wed, 8 Feb 2023 11:56:21 +0100 Subject: [PATCH 06/40] Feature flags and Units are a "change" Generalize the unit changed to a general change that can come from a unit or feature flag --- elastic-agent-client.proto | 11 +- magefile.go | 43 ++- pkg/client/artifact_test.go | 4 +- pkg/client/client_v2.go | 81 +++-- pkg/client/client_v2_strings.go | 30 ++ pkg/client/client_v2_test.go | 26 +- pkg/client/log_test.go | 4 +- pkg/client/store_test.go | 4 +- pkg/client/unit.go | 8 +- pkg/client/unit_test.go | 8 +- pkg/proto/elastic-agent-client.pb.go | 429 ++++++++++++++------------- 11 files changed, 375 insertions(+), 273 deletions(-) create mode 100644 pkg/client/client_v2_strings.go diff --git a/elastic-agent-client.proto b/elastic-agent-client.proto index 81c19b4..23b34ed 100644 --- a/elastic-agent-client.proto +++ b/elastic-agent-client.proto @@ -292,10 +292,17 @@ message CheckinAgentInfo { bool snapshot = 3; } +// Feature flags configurations. +// Added on Elastic Agent v8.7.1. message Features { - FQDNFeature fqdn = 1; + // Index of the either current configuration or new configuration provided. + uint64 config_state_idx = 1; + + FQDNFeature fqdn = 2; } +// FQDN feature flag indicates to use FQDN for host.name instead of hostname. +// Added on Elastic Agent v8.7.1. message FQDNFeature { bool enabled = 1; } @@ -307,6 +314,8 @@ message CheckinExpected { // Agent info is provided only on first CheckinExpected response to the component. CheckinAgentInfo agent_info = 2; + // Features are the expected feature flags configurations. + // Added on Elastic Agent v8.7.1. Features features = 3; } diff --git a/magefile.go b/magefile.go index b3fb77f..45f39e2 100644 --- a/magefile.go +++ b/magefile.go @@ -8,6 +8,7 @@ package main import ( + "fmt" "os" "strings" @@ -21,6 +22,7 @@ const ( goLicenserRepo = "github.com/elastic/go-licenser" goProtocGenGo = "google.golang.org/protobuf/cmd/protoc-gen-go@v1.28" goProtocGenGoGRPC = "google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2" + stringerRepo = "golang.org/x/tools/cmd/stringer@v0.5.0" ) // Aliases for commands required by master makefile @@ -54,9 +56,14 @@ func (Prepare) InstallGoLint() error { return GoGet(goLintRepo) } -// All runs prepare:installGoLicenser and prepare:installGoLint. +// InstallStringer install go stringer to generate String methods for constants. +func (Prepare) InstallStringer() error { + return GoInstall(stringerRepo) +} + +// All runs prepare:installGoLicenser, prepare:installGoLint and prepare:installGoLint. func (Prepare) All() { - mg.SerialDeps(Prepare.InstallGoLicenser, Prepare.InstallGoLint) + mg.SerialDeps(Prepare.InstallGoLicenser, Prepare.InstallGoLint, Prepare.InstallStringer) } // Prepare installs the required GRPC tools for generation to occur. @@ -67,14 +74,38 @@ func (Update) Prepare() error { return GoInstall(goProtocGenGoGRPC) } -// Generate generates the GRPC code. +// Generate generates the necessary GRPC and Go code. It generates both, +// then reports all errors if any. func (Update) Generate() error { defer mg.SerialDeps(Format.All) - return sh.RunV( + + errGRPC := sh.RunV( "protoc", - "--go_out=pkg/proto", "--go_opt=paths=source_relative", - "--go-grpc_out=pkg/proto", "--go-grpc_opt=paths=source_relative", + "--go_out=pkg/proto", + "--go_opt=paths=source_relative", + "--go-grpc_out=pkg/proto", + "--go-grpc_opt=paths=source_relative", "elastic-agent-client.proto") + if errGRPC != nil { + errGRPC = fmt.Errorf("failed to generate GRPC code: %w") + } + + errGenerate := sh.RunV("go", "generate", "./...") + if errGenerate != nil { + errGenerate = fmt.Errorf("failed to run go generate: %w") + } + + switch { + case errGRPC != nil && errGenerate != nil: + return fmt.Errorf("all code generation failed: '%v' and '%v'", + errGRPC, errGenerate) + case errGRPC != nil: + return errGRPC + case errGenerate != nil: + return errGenerate + } + + return nil } // All runs update:prepare then update:generate. diff --git a/pkg/client/artifact_test.go b/pkg/client/artifact_test.go index 3fc109d..c7ae448 100644 --- a/pkg/client/artifact_test.go +++ b/pkg/client/artifact_test.go @@ -65,9 +65,9 @@ func TestArtifact(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanges(): + case change := <-client.Changes(): switch change.Type { - case UnitChangedAdded: + case ChangeUnitAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index e2155d1..bdd5c53 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -16,41 +16,37 @@ import ( "time" "google.golang.org/grpc" + gproto "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/timestamppb" "github.com/elastic/elastic-agent-client/v7/pkg/proto" "github.com/elastic/elastic-agent-client/v7/pkg/utils" ) -// UnitChangedType defines types for when units are adjusted. -type UnitChangedType int +// ChangeType defines types for when units are adjusted. +type ChangeType int +//go:generate stringer -type=ChangeType -linecomment -output client_v2_strings.go const ( - // UnitChangedAdded is when a new unit is added. - UnitChangedAdded UnitChangedType = 1 - // UnitChangedModified is when an existing unit is modified. - UnitChangedModified UnitChangedType = 2 - // UnitChangedRemoved is when an existing unit is removed. - UnitChangedRemoved UnitChangedType = 3 + // ChangeUnitAdded is when a new unit is added. + ChangeUnitAdded ChangeType = iota // unit_added + // ChangeUnitModified is when an existing unit is modified. + ChangeUnitModified // unit_modified + // ChangeUnitRemoved is when an existing unit is removed. + ChangeUnitRemoved // unit_removed + // ChangeFeatureModified is when a feature flag is modified. + ChangeFeatureModified // feature_modified ) -// String returns string representation for the unit changed type. -func (t UnitChangedType) String() string { - switch t { - case UnitChangedAdded: - return "added" - case UnitChangedModified: - return "modified" - case UnitChangedRemoved: - return "removed" - } - return "unknown" -} - -// UnitChanged is what is sent over the UnitChanges channel any time a unit is added, modified, or removed. -type UnitChanged struct { - Type UnitChangedType +// Changes is what is sent over the Changes channel any time a change happens: +// - a unit is added, modified, or removed +// - a feature flag config or state changes +type Changes struct { + Type ChangeType + // Unit is any change in a unit. Unit *Unit + // Features are all the feature flags and their configs. + Features *proto.Features } // AgentInfo is the information about the running Elastic Agent that the client is connected to. @@ -82,7 +78,7 @@ type V2 interface { // UnitChanges returns the channel the client sends change notifications to. // // User of this client must read from this channel, or it will block the client. - UnitChanges() <-chan UnitChanged + Changes() <-chan Changes // Errors returns channel of errors that occurred during communication. // // User of this client must read from this channel, or it will block the client. @@ -121,6 +117,8 @@ type clientV2 struct { kickSendObservedCh chan struct{} errCh chan error changesCh chan UnitChanged + featuresMu sync.Mutex + features *proto.Features unitsMu sync.RWMutex units []*Unit @@ -147,6 +145,7 @@ func NewV2(target string, token string, versionInfo VersionInfo, opts ...grpc.Di changesCh: make(chan UnitChanged), diagHooks: make(map[string]diagHook), minCheckTimeout: CheckinMinimumTimeout, + features: &proto.Features{}, } c.registerDefaultDiagnostics() return c @@ -280,7 +279,7 @@ func (c *clientV2) checkinRoundTrip() { } c.agentInfoMu.Unlock() } - c.syncUnits(expected) + c.sync(expected) } }() @@ -354,7 +353,29 @@ func (c *clientV2) sendObserved(client proto.ElasticAgent_CheckinV2Client) error return client.Send(msg) } -// syncUnits syncs the expected units with the current state. +// sync syncs the expected state with the current state. +func (c *clientV2) sync(expected *proto.CheckinExpected) { + c.syncUnits(expected) + +} +func (c *clientV2) syncFeatures(expected *proto.CheckinExpected) { + c.featuresMu.Lock() + defer c.featuresMu.Unlock() + + if c.features.ConfigStateIdx != expected.Features.ConfigStateIdx { + c.features.ConfigStateIdx = expected.Features.ConfigStateIdx + + if !gproto.Equal(c.features, expected.Features) { + c.features = expected.Features + + c.changesCh <- Changes{ + Type: ChangeFeatureModified, + Features: expected.Features, + } + } + } +} + func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { c.unitsMu.Lock() defer c.unitsMu.Unlock() @@ -372,6 +393,7 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { removed = true } } + // resize so units that no longer exist are removed from the slice c.units = c.units[:i] for _, agentUnit := range expected.Units { @@ -383,9 +405,9 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { UnitType(agentUnit.Type), UnitState(agentUnit.State), UnitLogLevel(agentUnit.LogLevel), - expected.Features, agentUnit.Config, - agentUnit.ConfigStateIdx, c) + agentUnit.ConfigStateIdx, + c) c.units = append(c.units, unit) c.changesCh <- UnitChanged{ Type: UnitChangedAdded, @@ -396,7 +418,6 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { if unit.updateState( UnitState(agentUnit.State), UnitLogLevel(agentUnit.LogLevel), - expected.Features, agentUnit.Config, agentUnit.ConfigStateIdx) { c.changesCh <- UnitChanged{ diff --git a/pkg/client/client_v2_strings.go b/pkg/client/client_v2_strings.go new file mode 100644 index 0000000..f06a8f8 --- /dev/null +++ b/pkg/client/client_v2_strings.go @@ -0,0 +1,30 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// Code generated by "stringer -type=ChangeType -linecomment -output client_v2_strings.go"; DO NOT EDIT. + +package client + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[ChangeUnitAdded-0] + _ = x[ChangeUnitModified-1] + _ = x[ChangeUnitRemoved-2] + _ = x[ChangeFeatureModified-3] +} + +const _ChangeType_name = "unit_addedunit_modifiedunit_removedfeature_modified" + +var _ChangeType_index = [...]uint8{0, 10, 23, 35, 51} + +func (i ChangeType) String() string { + if i < 0 || i >= ChangeType(len(_ChangeType_index)-1) { + return "ChangeType(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _ChangeType_name[_ChangeType_index[i]:_ChangeType_index[i+1]] +} diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index 2fcc78f..06203d0 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -130,9 +130,9 @@ func TestClientV2_Checkin_Initial(t *testing.T) { select { case <-ctx.Done(): return - case change := <-validClient.UnitChanges(): + case change := <-validClient.Changes(): switch change.Type { - case UnitChangedAdded: + case ChangeUnitAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() @@ -185,8 +185,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { var m sync.Mutex token := mock.NewID() connected := false - unitOne := newUnit(mock.NewID(), UnitTypeOutput, UnitStateStarting, UnitLogLevelInfo, nil, nil, 0, nil) - unitTwo := newUnit(mock.NewID(), UnitTypeInput, UnitStateStarting, UnitLogLevelInfo, nil, nil, 0, nil) + unitOne := newUnit(mock.NewID(), UnitTypeOutput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) + unitTwo := newUnit(mock.NewID(), UnitTypeInput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) srv := mock.StubServerV2{ CheckinV2Impl: func(observed *proto.CheckinObserved) *proto.CheckinExpected { m.Lock() @@ -289,17 +289,17 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanges(): + case change := <-client.Changes(): switch change.Type { - case UnitChangedAdded: + case ChangeUnitAdded: unitsMu.Lock() units[change.Unit.ID()] = change.Unit unitsMu.Unlock() change.Unit.UpdateState(UnitStateHealthy, "Healthy", map[string]interface{}{ "custom": "payload", }) - case UnitChangedModified: - state, _, _, _ := change.Unit.Expected() + case ChangeUnitModified: + state, _, _ := change.Unit.Expected() if state == UnitStateStopped { change.Unit.UpdateState(UnitStateStopping, "Stopping", nil) go func() { @@ -307,7 +307,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { change.Unit.UpdateState(UnitStateStopped, "Stopped", nil) }() } - case UnitChangedRemoved: + case ChangeUnitRemoved: unitsMu.Lock() delete(units, change.Unit.ID()) unitsMu.Unlock() @@ -408,9 +408,9 @@ func TestClientV2_Actions(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanges(): + case change := <-client.Changes(): switch change.Type { - case UnitChangedAdded: + case ChangeUnitAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() @@ -527,9 +527,9 @@ func TestClientV2_DiagnosticAction(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanges(): + case change := <-client.Changes(): switch change.Type { - case UnitChangedAdded: + case ChangeUnitAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() diff --git a/pkg/client/log_test.go b/pkg/client/log_test.go index 26a1a12..d4d2efc 100644 --- a/pkg/client/log_test.go +++ b/pkg/client/log_test.go @@ -63,9 +63,9 @@ func TestLog(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanges(): + case change := <-client.Changes(): switch change.Type { - case UnitChangedAdded: + case ChangeUnitAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() diff --git a/pkg/client/store_test.go b/pkg/client/store_test.go index 690c98d..95c3d9d 100644 --- a/pkg/client/store_test.go +++ b/pkg/client/store_test.go @@ -65,9 +65,9 @@ func TestStore(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanges(): + case change := <-client.Changes(): switch change.Type { - case UnitChangedAdded: + case ChangeUnitAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() diff --git a/pkg/client/unit.go b/pkg/client/unit.go index 611519a..d883626 100644 --- a/pkg/client/unit.go +++ b/pkg/client/unit.go @@ -257,7 +257,6 @@ func (u *Unit) RegisterDiagnosticHook(name string, description string, filename func (u *Unit) updateState( exp UnitState, logLevel UnitLogLevel, - features *proto.Features, cfg *proto.UnitExpectedConfig, cfgIdx uint64, ) bool { @@ -278,11 +277,8 @@ func (u *Unit) updateState( if u.configIdx != cfgIdx { u.configIdx = cfgIdx - if !gproto.Equal(u.config.GetSource(), cfg.GetSource()) || - !gproto.Equal(u.features, features) { + if !gproto.Equal(u.config.GetSource(), cfg.GetSource()) { u.config = cfg - u.features = features - changed = true } } @@ -313,7 +309,6 @@ func newUnit( unitType UnitType, exp UnitState, logLevel UnitLogLevel, - features *proto.Features, cfg *proto.UnitExpectedConfig, cfgIdx uint64, client *clientV2) *Unit { @@ -323,7 +318,6 @@ func newUnit( unitType: unitType, config: cfg, configIdx: cfgIdx, - features: features, expectedState: exp, logLevel: logLevel, state: UnitStateStarting, diff --git a/pkg/client/unit_test.go b/pkg/client/unit_test.go index efc471a..df5bc9e 100644 --- a/pkg/client/unit_test.go +++ b/pkg/client/unit_test.go @@ -36,7 +36,7 @@ func TestUnitUpdateWithSameMap(t *testing.T) { require.NoError(t, err) // This should return false, as the two underlying maps in `source` are the same - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, nil, newUnit, 2) + result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) require.False(t, result) } @@ -56,16 +56,16 @@ func TestUnitUpdateWithNewMap(t *testing.T) { require.NoError(t, err) // This should return true, as we have an actually new map - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, nil, newUnit, 2) + result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) require.True(t, result) } func TestUnitUpdateLog(t *testing.T) { - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, nil, &proto.UnitExpectedConfig{}, 2) + result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) require.True(t, result) } func TestUnitUpdateState(t *testing.T) { - result := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, nil, &proto.UnitExpectedConfig{}, 2) + result := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) require.True(t, result) } diff --git a/pkg/proto/elastic-agent-client.pb.go b/pkg/proto/elastic-agent-client.pb.go index 7e470ca..16f99ae 100644 --- a/pkg/proto/elastic-agent-client.pb.go +++ b/pkg/proto/elastic-agent-client.pb.go @@ -1661,12 +1661,16 @@ func (x *CheckinAgentInfo) GetSnapshot() bool { return false } +// Feature flags configurations. +// Added on Elastic Agent v8.7.1. type Features struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Fqdn *FQDNFeature `protobuf:"bytes,1,opt,name=fqdn,proto3" json:"fqdn,omitempty"` + // Index of the either current configuration or new configuration provided. + ConfigStateIdx uint64 `protobuf:"varint,1,opt,name=config_state_idx,json=configStateIdx,proto3" json:"config_state_idx,omitempty"` + Fqdn *FQDNFeature `protobuf:"bytes,2,opt,name=fqdn,proto3" json:"fqdn,omitempty"` } func (x *Features) Reset() { @@ -1701,6 +1705,13 @@ func (*Features) Descriptor() ([]byte, []int) { return file_elastic_agent_client_proto_rawDescGZIP(), []int{13} } +func (x *Features) GetConfigStateIdx() uint64 { + if x != nil { + return x.ConfigStateIdx + } + return 0 +} + func (x *Features) GetFqdn() *FQDNFeature { if x != nil { return x.Fqdn @@ -1708,6 +1719,8 @@ func (x *Features) GetFqdn() *FQDNFeature { return nil } +// FQDN feature flag indicates to use FQDN for host.name instead of hostname. +// Added on Elastic Agent v8.7.1. type FQDNFeature struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1765,7 +1778,9 @@ type CheckinExpected struct { Units []*UnitExpected `protobuf:"bytes,1,rep,name=units,proto3" json:"units,omitempty"` // Agent info is provided only on first CheckinExpected response to the component. AgentInfo *CheckinAgentInfo `protobuf:"bytes,2,opt,name=agent_info,json=agentInfo,proto3" json:"agent_info,omitempty"` - Features *Features `protobuf:"bytes,3,opt,name=features,proto3" json:"features,omitempty"` + // Features are the expected feature flags configurations. + // Added on Elastic Agent v8.7.1. + Features *Features `protobuf:"bytes,3,opt,name=features,proto3" json:"features,omitempty"` } func (x *CheckinExpected) Reset() { @@ -3220,215 +3235,217 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x22, 0x32, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x22, 0x27, 0x0a, 0x0b, 0x46, 0x51, 0x44, 0x4e, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, - 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, - 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, - 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, - 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, - 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, - 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, - 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, - 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, - 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x68, 0x6f, 0x74, 0x22, 0x5c, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, + 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, + 0x6e, 0x22, 0x27, 0x0a, 0x0b, 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, + 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xde, + 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, + 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, + 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, + 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, + 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, - 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, + 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, + 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, - 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, - 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, + 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, + 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, - 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, - 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, - 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, - 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, - 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, - 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, - 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, - 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, - 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, - 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, - 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, - 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, - 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, - 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, - 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, - 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, - 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, - 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, - 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, - 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, - 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, + 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, + 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, + 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, + 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, + 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, + 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, + 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, + 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, + 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, + 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, + 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, + 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, + 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, + 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, + 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, + 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, + 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, + 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, + 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, + 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, + 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, + 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, + 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, + 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, + 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, + 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, + 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, + 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, + 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, + 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, + 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, + 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, + 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, + 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( From 698cf1def625a57ae3d834d3c33db5d5dcee1621 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Thu, 9 Feb 2023 15:45:24 +0100 Subject: [PATCH 07/40] using a Trigger to indicate what changed --- elastic-agent-client.proto | 3 - pkg/client/artifact_test.go | 4 +- pkg/client/client_v2.go | 88 +++--- pkg/client/client_v2_strings.go | 32 +- pkg/client/client_v2_test.go | 20 +- pkg/client/log_test.go | 4 +- pkg/client/store_test.go | 4 +- pkg/client/unit.go | 17 +- pkg/proto/elastic-agent-client.pb.go | 421 +++++++++++++-------------- 9 files changed, 300 insertions(+), 293 deletions(-) diff --git a/elastic-agent-client.proto b/elastic-agent-client.proto index 23b34ed..c012753 100644 --- a/elastic-agent-client.proto +++ b/elastic-agent-client.proto @@ -295,9 +295,6 @@ message CheckinAgentInfo { // Feature flags configurations. // Added on Elastic Agent v8.7.1. message Features { - // Index of the either current configuration or new configuration provided. - uint64 config_state_idx = 1; - FQDNFeature fqdn = 2; } diff --git a/pkg/client/artifact_test.go b/pkg/client/artifact_test.go index c7ae448..6770c34 100644 --- a/pkg/client/artifact_test.go +++ b/pkg/client/artifact_test.go @@ -65,9 +65,9 @@ func TestArtifact(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.Changes(): + case change := <-client.UnitChanged(): switch change.Type { - case ChangeUnitAdded: + case UnitChangedAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index bdd5c53..c58684c 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -16,33 +16,46 @@ import ( "time" "google.golang.org/grpc" - gproto "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/timestamppb" "github.com/elastic/elastic-agent-client/v7/pkg/proto" "github.com/elastic/elastic-agent-client/v7/pkg/utils" ) -// ChangeType defines types for when units are adjusted. -type ChangeType int +//go:generate stringer -type=ChangeType,Trigger -linecomment -output client_v2_strings.go +type ( + // ChangeType defines types for when units are adjusted. + ChangeType int + // Trigger indicates what triggered a change + Trigger int +) -//go:generate stringer -type=ChangeType -linecomment -output client_v2_strings.go const ( - // ChangeUnitAdded is when a new unit is added. - ChangeUnitAdded ChangeType = iota // unit_added - // ChangeUnitModified is when an existing unit is modified. - ChangeUnitModified // unit_modified - // ChangeUnitRemoved is when an existing unit is removed. - ChangeUnitRemoved // unit_removed - // ChangeFeatureModified is when a feature flag is modified. - ChangeFeatureModified // feature_modified + // UnitChangedAdded is when a new unit is added. + UnitChangedAdded ChangeType = iota // unit_added + // UnitChangedModified is when an existing unit is modified. + UnitChangedModified // unit_modified + // UnitChangedRemoved is when an existing unit is removed. + UnitChangedRemoved // unit_removed ) -// Changes is what is sent over the Changes channel any time a change happens: +const ( + // TriggerConfig indicates a change in config triggered the change. + TriggerConfig Trigger = iota // config_change_triggered + // TriggerFeature indicates a change in the features triggered the change. + TriggerFeature // feature_change_triggered + // TriggerLogLevel indicates a change the log level triggered the change. + TriggerLogLevel // log_level_triggered + // TriggerStateChange indicates when a unit state has ganged. + TriggerStateChange // state_change_triggered +) + +// UnitChanged is what is sent over the UnitChanged channel any time a change happens: // - a unit is added, modified, or removed // - a feature flag config or state changes -type Changes struct { - Type ChangeType +type UnitChanged struct { + Type ChangeType + Triggers []Trigger // Unit is any change in a unit. Unit *Unit // Features are all the feature flags and their configs. @@ -78,7 +91,7 @@ type V2 interface { // UnitChanges returns the channel the client sends change notifications to. // // User of this client must read from this channel, or it will block the client. - Changes() <-chan Changes + UnitChanged() <-chan UnitChanged // Errors returns channel of errors that occurred during communication. // // User of this client must read from this channel, or it will block the client. @@ -270,15 +283,6 @@ func (c *clientV2) checkinRoundTrip() { close(done) return } - if expected.AgentInfo != nil { - c.agentInfoMu.Lock() - c.agentInfo = &AgentInfo{ - ID: expected.AgentInfo.Id, - Version: expected.AgentInfo.Version, - Snapshot: expected.AgentInfo.Snapshot, - } - c.agentInfoMu.Unlock() - } c.sync(expected) } }() @@ -355,25 +359,23 @@ func (c *clientV2) sendObserved(client proto.ElasticAgent_CheckinV2Client) error // sync syncs the expected state with the current state. func (c *clientV2) sync(expected *proto.CheckinExpected) { - c.syncUnits(expected) - -} -func (c *clientV2) syncFeatures(expected *proto.CheckinExpected) { - c.featuresMu.Lock() - defer c.featuresMu.Unlock() - - if c.features.ConfigStateIdx != expected.Features.ConfigStateIdx { - c.features.ConfigStateIdx = expected.Features.ConfigStateIdx - - if !gproto.Equal(c.features, expected.Features) { - c.features = expected.Features - - c.changesCh <- Changes{ - Type: ChangeFeatureModified, - Features: expected.Features, - } + if expected.AgentInfo != nil { + c.agentInfoMu.Lock() + c.agentInfo = &AgentInfo{ + ID: expected.AgentInfo.Id, + Version: expected.AgentInfo.Version, + Snapshot: expected.AgentInfo.Snapshot, } + c.agentInfoMu.Unlock() } + + if expected.Features != nil { + c.featuresMu.Lock() + c.features = &proto.Features{Fqdn: expected.Features.Fqdn} + c.featuresMu.Unlock() + } + + c.syncUnits(expected) } func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { @@ -415,7 +417,7 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { } } else { // existing unit - if unit.updateState( + triggers := unit.updateState( UnitState(agentUnit.State), UnitLogLevel(agentUnit.LogLevel), agentUnit.Config, diff --git a/pkg/client/client_v2_strings.go b/pkg/client/client_v2_strings.go index f06a8f8..3302234 100644 --- a/pkg/client/client_v2_strings.go +++ b/pkg/client/client_v2_strings.go @@ -2,7 +2,7 @@ // or more contributor license agreements. Licensed under the Elastic License; // you may not use this file except in compliance with the Elastic License. -// Code generated by "stringer -type=ChangeType -linecomment -output client_v2_strings.go"; DO NOT EDIT. +// Code generated by "stringer -type=ChangeType,Trigger -linecomment -output client_v2_strings.go"; DO NOT EDIT. package client @@ -12,15 +12,14 @@ func _() { // An "invalid array index" compiler error signifies that the constant values have changed. // Re-run the stringer command to generate them again. var x [1]struct{} - _ = x[ChangeUnitAdded-0] - _ = x[ChangeUnitModified-1] - _ = x[ChangeUnitRemoved-2] - _ = x[ChangeFeatureModified-3] + _ = x[UnitChangedAdded-0] + _ = x[UnitChangedModified-1] + _ = x[UnitChangedRemoved-2] } -const _ChangeType_name = "unit_addedunit_modifiedunit_removedfeature_modified" +const _ChangeType_name = "unit_addedunit_modifiedunit_removed" -var _ChangeType_index = [...]uint8{0, 10, 23, 35, 51} +var _ChangeType_index = [...]uint8{0, 10, 23, 35} func (i ChangeType) String() string { if i < 0 || i >= ChangeType(len(_ChangeType_index)-1) { @@ -28,3 +27,22 @@ func (i ChangeType) String() string { } return _ChangeType_name[_ChangeType_index[i]:_ChangeType_index[i+1]] } +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[TriggerConfig-0] + _ = x[TriggerFeature-1] + _ = x[TriggerLogLevel-2] +} + +const _Trigger_name = "config_change_triggeredfeature_change_triggeredlog_level_triggered" + +var _Trigger_index = [...]uint8{0, 23, 47, 66} + +func (i Trigger) String() string { + if i < 0 || i >= Trigger(len(_Trigger_index)-1) { + return "Trigger(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _Trigger_name[_Trigger_index[i]:_Trigger_index[i+1]] +} diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index 06203d0..991b0b1 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -130,9 +130,9 @@ func TestClientV2_Checkin_Initial(t *testing.T) { select { case <-ctx.Done(): return - case change := <-validClient.Changes(): + case change := <-validClient.UnitChanged(): switch change.Type { - case ChangeUnitAdded: + case UnitChangedAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() @@ -289,16 +289,16 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.Changes(): + case change := <-client.UnitChanged(): switch change.Type { - case ChangeUnitAdded: + case UnitChangedAdded: unitsMu.Lock() units[change.Unit.ID()] = change.Unit unitsMu.Unlock() change.Unit.UpdateState(UnitStateHealthy, "Healthy", map[string]interface{}{ "custom": "payload", }) - case ChangeUnitModified: + case UnitChangedModified: state, _, _ := change.Unit.Expected() if state == UnitStateStopped { change.Unit.UpdateState(UnitStateStopping, "Stopping", nil) @@ -307,7 +307,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { change.Unit.UpdateState(UnitStateStopped, "Stopped", nil) }() } - case ChangeUnitRemoved: + case UnitChangedRemoved: unitsMu.Lock() delete(units, change.Unit.ID()) unitsMu.Unlock() @@ -408,9 +408,9 @@ func TestClientV2_Actions(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.Changes(): + case change := <-client.UnitChanged(): switch change.Type { - case ChangeUnitAdded: + case UnitChangedAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() @@ -527,9 +527,9 @@ func TestClientV2_DiagnosticAction(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.Changes(): + case change := <-client.UnitChanged(): switch change.Type { - case ChangeUnitAdded: + case UnitChangedAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() diff --git a/pkg/client/log_test.go b/pkg/client/log_test.go index d4d2efc..249e6c0 100644 --- a/pkg/client/log_test.go +++ b/pkg/client/log_test.go @@ -63,9 +63,9 @@ func TestLog(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.Changes(): + case change := <-client.UnitChanged(): switch change.Type { - case ChangeUnitAdded: + case UnitChangedAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() diff --git a/pkg/client/store_test.go b/pkg/client/store_test.go index 95c3d9d..d0a8dcc 100644 --- a/pkg/client/store_test.go +++ b/pkg/client/store_test.go @@ -65,9 +65,9 @@ func TestStore(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.Changes(): + case change := <-client.UnitChanged(): switch change.Type { - case ChangeUnitAdded: + case UnitChangedAdded: unitsMu.Lock() units = append(units, change.Unit) unitsMu.Unlock() diff --git a/pkg/client/unit.go b/pkg/client/unit.go index d883626..add8a1e 100644 --- a/pkg/client/unit.go +++ b/pkg/client/unit.go @@ -253,37 +253,38 @@ func (u *Unit) RegisterDiagnosticHook(name string, description string, filename } } -// updateState updates the configuration for this unit, triggering the delegate function if set. +// updateState updates the configuration for this unit, triggering the delegate +// function if set. func (u *Unit) updateState( exp UnitState, logLevel UnitLogLevel, cfg *proto.UnitExpectedConfig, cfgIdx uint64, -) bool { +) Trigger { + + var triggers Trigger u.expectedStateMu.Lock() defer u.expectedStateMu.Unlock() - changed := false - if u.expectedState != exp { u.expectedState = exp - changed = true + triggers |= TriggerStateChange } if u.logLevel != logLevel { u.logLevel = logLevel - changed = true + triggers |= TriggerLogLevel } if u.configIdx != cfgIdx { u.configIdx = cfgIdx if !gproto.Equal(u.config.GetSource(), cfg.GetSource()) { u.config = cfg - changed = true + triggers |= TriggerConfig } } - return changed + return triggers } // toObserved returns the observed unit protocol to send over the stream. diff --git a/pkg/proto/elastic-agent-client.pb.go b/pkg/proto/elastic-agent-client.pb.go index 16f99ae..2d8290f 100644 --- a/pkg/proto/elastic-agent-client.pb.go +++ b/pkg/proto/elastic-agent-client.pb.go @@ -1668,9 +1668,7 @@ type Features struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Index of the either current configuration or new configuration provided. - ConfigStateIdx uint64 `protobuf:"varint,1,opt,name=config_state_idx,json=configStateIdx,proto3" json:"config_state_idx,omitempty"` - Fqdn *FQDNFeature `protobuf:"bytes,2,opt,name=fqdn,proto3" json:"fqdn,omitempty"` + Fqdn *FQDNFeature `protobuf:"bytes,2,opt,name=fqdn,proto3" json:"fqdn,omitempty"` } func (x *Features) Reset() { @@ -1705,13 +1703,6 @@ func (*Features) Descriptor() ([]byte, []int) { return file_elastic_agent_client_proto_rawDescGZIP(), []int{13} } -func (x *Features) GetConfigStateIdx() uint64 { - if x != nil { - return x.ConfigStateIdx - } - return 0 -} - func (x *Features) GetFqdn() *FQDNFeature { if x != nil { return x.Fqdn @@ -3235,217 +3226,215 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x22, 0x5c, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x69, 0x64, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, - 0x6e, 0x22, 0x27, 0x0a, 0x0b, 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, - 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, - 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xde, - 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, - 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, - 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, - 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, + 0x68, 0x6f, 0x74, 0x22, 0x32, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x22, 0x27, 0x0a, 0x0b, 0x46, 0x51, 0x44, 0x4e, 0x46, + 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, + 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, + 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, + 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, - 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, - 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, + 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, + 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, + 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, + 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, + 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, + 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, + 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, + 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, + 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, + 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, + 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, + 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, - 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, + 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, - 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, - 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, - 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, - 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, - 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, - 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, - 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, - 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, - 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, - 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, - 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, - 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, - 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, - 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, - 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, - 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, - 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, - 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, - 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, - 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, - 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, - 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, - 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, - 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, - 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, - 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, - 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, - 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, - 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, - 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, - 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, - 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, - 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, - 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, - 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, - 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, - 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, + 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, + 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, + 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, + 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, + 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, + 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, + 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, + 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, + 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, + 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, + 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, + 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, + 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, + 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, + 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, + 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, + 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, + 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, + 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, + 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, + 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, + 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, + 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, + 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, + 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, + 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, + 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, + 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, + 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, + 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, + 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, + 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( From 40b1fda7089576ffd94a5c802995f42e83d70cac Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Thu, 9 Feb 2023 15:49:04 +0100 Subject: [PATCH 08/40] update generated code --- pkg/client/client_v2_strings.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/client/client_v2_strings.go b/pkg/client/client_v2_strings.go index 3302234..648695d 100644 --- a/pkg/client/client_v2_strings.go +++ b/pkg/client/client_v2_strings.go @@ -34,11 +34,12 @@ func _() { _ = x[TriggerConfig-0] _ = x[TriggerFeature-1] _ = x[TriggerLogLevel-2] + _ = x[TriggerStateChange-3] } -const _Trigger_name = "config_change_triggeredfeature_change_triggeredlog_level_triggered" +const _Trigger_name = "config_change_triggeredfeature_change_triggeredlog_level_triggeredstate_change_triggered" -var _Trigger_index = [...]uint8{0, 23, 47, 66} +var _Trigger_index = [...]uint8{0, 23, 47, 66, 88} func (i Trigger) String() string { if i < 0 || i >= Trigger(len(_Trigger_index)-1) { From 9a53e5ab82b2b387e0f9bb2893263e769f50a442 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Thu, 9 Feb 2023 17:32:18 +0100 Subject: [PATCH 09/40] fix tests --- pkg/client/unit_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/client/unit_test.go b/pkg/client/unit_test.go index df5bc9e..7aad41b 100644 --- a/pkg/client/unit_test.go +++ b/pkg/client/unit_test.go @@ -37,7 +37,7 @@ func TestUnitUpdateWithSameMap(t *testing.T) { // This should return false, as the two underlying maps in `source` are the same result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) - require.False(t, result) + require.Empty(t, result) } func TestUnitUpdateWithNewMap(t *testing.T) { @@ -57,15 +57,15 @@ func TestUnitUpdateWithNewMap(t *testing.T) { // This should return true, as we have an actually new map result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) - require.True(t, result) + require.NotEmpty(t, result) } func TestUnitUpdateLog(t *testing.T) { result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) - require.True(t, result) + require.NotEmpty(t, result) } func TestUnitUpdateState(t *testing.T) { result := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) - require.True(t, result) + require.NotEmpty(t, result) } From e5d4cbc76f1801b4ff45f247845c6551ed62e685 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Fri, 10 Feb 2023 14:13:30 +0100 Subject: [PATCH 10/40] don't use prot.Features, send on 1st checkin, adjust tests --- pkg/client/client_v2.go | 60 +++++++++++++++++++++++++++--------- pkg/client/client_v2_test.go | 30 ++++++++++++++++++ 2 files changed, 76 insertions(+), 14 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index c58684c..ed22598 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -50,6 +50,13 @@ const ( TriggerStateChange // state_change_triggered ) +type FeatureFQDN struct { + Enabled bool +} +type Features struct { + FQDN FeatureFQDN +} + // UnitChanged is what is sent over the UnitChanged channel any time a change happens: // - a unit is added, modified, or removed // - a feature flag config or state changes @@ -59,7 +66,7 @@ type UnitChanged struct { // Unit is any change in a unit. Unit *Unit // Features are all the feature flags and their configs. - Features *proto.Features + Features Features } // AgentInfo is the information about the running Elastic Agent that the client is connected to. @@ -131,7 +138,7 @@ type clientV2 struct { errCh chan error changesCh chan UnitChanged featuresMu sync.Mutex - features *proto.Features + features Features unitsMu sync.RWMutex units []*Unit @@ -158,7 +165,6 @@ func NewV2(target string, token string, versionInfo VersionInfo, opts ...grpc.Di changesCh: make(chan UnitChanged), diagHooks: make(map[string]diagHook), minCheckTimeout: CheckinMinimumTimeout, - features: &proto.Features{}, } c.registerDefaultDiagnostics() return c @@ -369,12 +375,6 @@ func (c *clientV2) sync(expected *proto.CheckinExpected) { c.agentInfoMu.Unlock() } - if expected.Features != nil { - c.featuresMu.Lock() - c.features = &proto.Features{Fqdn: expected.Features.Fqdn} - c.featuresMu.Unlock() - } - c.syncUnits(expected) } @@ -388,10 +388,14 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { c.units[i] = unit i++ } else { - c.changesCh <- UnitChanged{ + changed := UnitChanged{ Type: UnitChangedRemoved, Unit: unit, } + + changed = c.syncFeatures(expected, changed) + + c.changesCh <- changed removed = true } } @@ -411,10 +415,15 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { agentUnit.ConfigStateIdx, c) c.units = append(c.units, unit) - c.changesCh <- UnitChanged{ + + changed := UnitChanged{ Type: UnitChangedAdded, Unit: unit, } + + changed = c.syncFeatures(expected, changed) + + c.changesCh <- changed } else { // existing unit triggers := unit.updateState( @@ -422,13 +431,20 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { UnitLogLevel(agentUnit.LogLevel), agentUnit.Config, agentUnit.ConfigStateIdx) { - c.changesCh <- UnitChanged{ - Type: UnitChangedModified, - Unit: unit, + + changed := UnitChanged{ + Triggers: triggers, + Type: UnitChangedModified, + Unit: unit, } + + changed = c.syncFeatures(expected, changed) + + c.changesCh <- changed } } } + if removed { // unit removed send updated observed change so agent is notified now // otherwise it will not be notified until the next checkin timeout @@ -436,6 +452,22 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { } } +func (c *clientV2) syncFeatures( + expected *proto.CheckinExpected, changed UnitChanged) UnitChanged { + + c.featuresMu.Lock() + defer c.featuresMu.Unlock() + + if expected.Features != nil && + c.features.FQDN.Enabled != expected.Features.Fqdn.Enabled { + c.features.FQDN.Enabled = expected.Features.Fqdn.Enabled + changed.Features.FQDN.Enabled = c.features.FQDN.Enabled + changed.Triggers = append(changed.Triggers, TriggerFeature) + } + + return changed +} + // findUnit finds an existing unit. func (c *clientV2) findUnit(id string, unitType UnitType) *Unit { for _, unit := range c.units { diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index 991b0b1..11d1be9 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -37,6 +37,7 @@ func TestClientV2_Checkin_Initial(t *testing.T) { gotValid := false unitOneID := mock.NewID() unitTwoID := mock.NewID() + wantFQDN := true reportedVersion := VersionInfo{} srv := mock.StubServerV2{ CheckinV2Impl: func(observed *proto.CheckinObserved) *proto.CheckinExpected { @@ -54,6 +55,9 @@ func TestClientV2_Checkin_Initial(t *testing.T) { Version: "8.5.0", Snapshot: true, }, + Features: &proto.Features{ + Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}, + }, Units: []*proto.UnitExpected{ { Id: unitOneID, @@ -125,12 +129,19 @@ func TestClientV2_Checkin_Initial(t *testing.T) { // receive the units var unitsMu sync.Mutex var units []*Unit + var gotFQDN bool go func() { for { select { case <-ctx.Done(): return case change := <-validClient.UnitChanged(): + for _, t := range change.Triggers { + if t == TriggerFeature { + gotFQDN = change.Features.FQDN.Enabled + } + } + switch change.Type { case UnitChangedAdded: unitsMu.Lock() @@ -170,10 +181,13 @@ func TestClientV2_Checkin_Initial(t *testing.T) { assert.Equal(t, agentInfo.Version, "8.5.0") assert.True(t, agentInfo.Snapshot) + assert.Equal(t, wantFQDN, gotFQDN) + assert.Equal(t, units[0].ID(), unitOneID) assert.Equal(t, units[0].Type(), UnitTypeOutput) assert.Equal(t, units[1].ID(), unitTwoID) assert.Equal(t, units[1].Type(), UnitTypeInput) + assert.Equal(t, reportedVersion.Name, "program") assert.Equal(t, reportedVersion.Version, "v1.0.0") assert.Equal(t, reportedVersion.Meta, map[string]string{ @@ -187,6 +201,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { connected := false unitOne := newUnit(mock.NewID(), UnitTypeOutput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) unitTwo := newUnit(mock.NewID(), UnitTypeInput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) + wantFQDN := true srv := mock.StubServerV2{ CheckinV2Impl: func(observed *proto.CheckinObserved) *proto.CheckinExpected { m.Lock() @@ -224,6 +239,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { } else if (unitOne.state == UnitStateHealthy && unitTwo.state == UnitStateHealthy) || (unitOne.state == UnitStateHealthy && unitTwo.state == UnitStateStopping) { // stop second input return &proto.CheckinExpected{ + Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, Units: []*proto.UnitExpected{ { Id: unitOne.id, @@ -246,6 +262,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { } else if unitOne.state == UnitStateHealthy && unitTwo.state == UnitStateStopped { // input stopped, remove the unit return &proto.CheckinExpected{ + Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, Units: []*proto.UnitExpected{ { Id: unitOne.id, @@ -284,12 +301,20 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { // receive the units var unitsMu sync.Mutex units := make(map[string]*Unit) + var gotFQDN bool + var gotTriggers []Trigger go func() { for { select { case <-ctx.Done(): return case change := <-client.UnitChanged(): + for _, t := range change.Triggers { + if t == TriggerFeature { + gotFQDN = change.Features.FQDN.Enabled + } + } + switch change.Type { case UnitChangedAdded: unitsMu.Lock() @@ -300,6 +325,9 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { }) case UnitChangedModified: state, _, _ := change.Unit.Expected() + gotFQDN = change.Features.FQDN.Enabled + gotTriggers = change.Triggers + if state == UnitStateStopped { change.Unit.UpdateState(UnitStateStopping, "Stopping", nil) go func() { @@ -347,6 +375,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { return nil })) + assert.Equal(t, wantFQDN, gotFQDN) + assert.Contains(t, gotTriggers, TriggerFeature) assert.Equal(t, UnitStateHealthy, unitOne.state) assert.Equal(t, "Healthy", unitOne.stateMsg) assert.Equal(t, UnitStateStopped, unitTwo.state) From b06264504c2ac730ae9001f6a6e9a2e882bd8bff Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Fri, 10 Feb 2023 16:55:33 +0100 Subject: [PATCH 11/40] . --- pkg/client/client_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/client/client_test.go b/pkg/client/client_test.go index 0024c7b..3e78a7c 100644 --- a/pkg/client/client_test.go +++ b/pkg/client/client_test.go @@ -427,14 +427,16 @@ func (c *StubClientImpl) OnError(err error) { } func waitFor(check func() error) error { + timeout := 5 * time.Minute started := time.Now() for { err := check() if err == nil { return nil } - if time.Now().Sub(started) >= 5*time.Second { - return fmt.Errorf("check timed out after 1 second: %s", err) + if time.Now().Sub(started) >= timeout { + return fmt.Errorf("check timed out after %s: %s", + 5*time.Minute, err) } time.Sleep(10 * time.Millisecond) } From 5635875895ddb93a597defae7733179d204e3964 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Fri, 10 Feb 2023 18:03:14 +0100 Subject: [PATCH 12/40] always send features --- pkg/client/client_v2.go | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index ed22598..8ed52fd 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -50,16 +50,21 @@ const ( TriggerStateChange // state_change_triggered ) +// FeatureFQDN indicates if the FQDN should be used instead of hostname for host.name. +// See proto.FQDNFeature for details. type FeatureFQDN struct { Enabled bool } + +// Features are configurations for all the features (flag) available. +// See proto.Features for details. type Features struct { FQDN FeatureFQDN } // UnitChanged is what is sent over the UnitChanged channel any time a change happens: // - a unit is added, modified, or removed -// - a feature flag config or state changes +// - a feature changes type UnitChanged struct { Type ChangeType Triggers []Trigger @@ -458,12 +463,16 @@ func (c *clientV2) syncFeatures( c.featuresMu.Lock() defer c.featuresMu.Unlock() - if expected.Features != nil && - c.features.FQDN.Enabled != expected.Features.Fqdn.Enabled { - c.features.FQDN.Enabled = expected.Features.Fqdn.Enabled - changed.Features.FQDN.Enabled = c.features.FQDN.Enabled - changed.Triggers = append(changed.Triggers, TriggerFeature) - } + // Why did it not work?! + // the agent should be sending it every time... and I think it's + // it works for metricbeat, and there are mora than one unit on metricbeat as well + + // if expected.Features != nil && + // c.features.FQDN.Enabled != expected.Features.Fqdn.Enabled { + c.features.FQDN.Enabled = expected.Features.Fqdn.Enabled + changed.Features.FQDN.Enabled = c.features.FQDN.Enabled + changed.Triggers = append(changed.Triggers, TriggerFeature) + // } return changed } From 7c7d74ce003b413b041d7a5950fba3aa4e0ed5cd Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Mon, 13 Feb 2023 16:08:06 +0100 Subject: [PATCH 13/40] use feature change to determine if unit changed --- pkg/client/client_v2.go | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 8ed52fd..4d3b3fa 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -443,8 +443,13 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { Unit: unit, } - changed = c.syncFeatures(expected, changed) + changed := c.syncFeatures(expected, UnitChanged{ + Triggers: triggers, + Type: UnitChangedModified, + Unit: unit, + }) + if len(changed.Triggers) >= 0 { // a.k.a something changed c.changesCh <- changed } } @@ -466,13 +471,13 @@ func (c *clientV2) syncFeatures( // Why did it not work?! // the agent should be sending it every time... and I think it's // it works for metricbeat, and there are mora than one unit on metricbeat as well - - // if expected.Features != nil && - // c.features.FQDN.Enabled != expected.Features.Fqdn.Enabled { - c.features.FQDN.Enabled = expected.Features.Fqdn.Enabled - changed.Features.FQDN.Enabled = c.features.FQDN.Enabled - changed.Triggers = append(changed.Triggers, TriggerFeature) - // } + + if expected.Features != nil && + c.features.FQDN.Enabled != expected.Features.Fqdn.Enabled { + c.features.FQDN.Enabled = expected.Features.Fqdn.Enabled + changed.Features.FQDN.Enabled = c.features.FQDN.Enabled + changed.Triggers = append(changed.Triggers, TriggerFeature) + } return changed } From 496759f4cc2fe71d1150966cbcfd8d8c74191935 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Mon, 13 Feb 2023 17:22:50 +0100 Subject: [PATCH 14/40] always send feature changed trigger --- pkg/client/client_v2.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 4d3b3fa..d6a37e7 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -472,12 +472,14 @@ func (c *clientV2) syncFeatures( // the agent should be sending it every time... and I think it's // it works for metricbeat, and there are mora than one unit on metricbeat as well - if expected.Features != nil && - c.features.FQDN.Enabled != expected.Features.Fqdn.Enabled { - c.features.FQDN.Enabled = expected.Features.Fqdn.Enabled - changed.Features.FQDN.Enabled = c.features.FQDN.Enabled - changed.Triggers = append(changed.Triggers, TriggerFeature) - } + // if expected.Features != nil && + // c.features.FQDN.Enabled != expected.Features.Fqdn.Enabled { + + c.features.FQDN.Enabled = expected.Features.Fqdn.Enabled + changed.Features.FQDN.Enabled = c.features.FQDN.Enabled + changed.Triggers = append(changed.Triggers, TriggerFeature) + + // } return changed } From 0a0b3d0dca17dccec3cec7f44d3eff3462b14590 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Wed, 15 Feb 2023 17:21:01 +0100 Subject: [PATCH 15/40] add featuresIdx, triggers is a bitmask --- elastic-agent-client.proto | 12 + pkg/client/artifact_test.go | 2 +- pkg/client/client_v2.go | 57 +-- pkg/client/client_v2_strings.go | 29 +- pkg/client/client_v2_test.go | 24 +- pkg/client/log_test.go | 2 +- pkg/client/store_test.go | 2 +- pkg/client/unit.go | 9 +- pkg/proto/elastic-agent-client.pb.go | 552 +++++++++++++++------------ 9 files changed, 371 insertions(+), 318 deletions(-) diff --git a/elastic-agent-client.proto b/elastic-agent-client.proto index c012753..7b25ef2 100644 --- a/elastic-agent-client.proto +++ b/elastic-agent-client.proto @@ -295,6 +295,10 @@ message CheckinAgentInfo { // Feature flags configurations. // Added on Elastic Agent v8.7.1. message Features { + // Source is the original source of the features. All values from the features + // are included here even if other concrete fields are defined for this message. + google.protobuf.Struct source = 1; + FQDNFeature fqdn = 2; } @@ -314,6 +318,8 @@ message CheckinExpected { // Features are the expected feature flags configurations. // Added on Elastic Agent v8.7.1. Features features = 3; + // Index of the either current features configuration or new the configuration provided. + uint64 features_idx = 4; } // Observed status for a unit. @@ -360,6 +366,12 @@ message CheckinObserved { // Version information about the running program. Should always be included on first checkin, and not again unless // one of the values have changed. optional CheckinObservedVersionInfo version_info = 3; + + // Features are the expected feature flags configurations. + // Added on Elastic Agent v8.7.1. + Features features = 4; + // Index of the either current features configuration or new the configuration provided. + uint64 features_idx = 5; } service ElasticAgent { diff --git a/pkg/client/artifact_test.go b/pkg/client/artifact_test.go index 6770c34..3fc109d 100644 --- a/pkg/client/artifact_test.go +++ b/pkg/client/artifact_test.go @@ -65,7 +65,7 @@ func TestArtifact(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanged(): + case change := <-client.UnitChanges(): switch change.Type { case UnitChangedAdded: unitsMu.Lock() diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index d6a37e7..259eec7 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -27,7 +27,7 @@ type ( // ChangeType defines types for when units are adjusted. ChangeType int // Trigger indicates what triggered a change - Trigger int + Trigger uint ) const ( @@ -40,38 +40,26 @@ const ( ) const ( - // TriggerConfig indicates a change in config triggered the change. - TriggerConfig Trigger = iota // config_change_triggered - // TriggerFeature indicates a change in the features triggered the change. - TriggerFeature // feature_change_triggered - // TriggerLogLevel indicates a change the log level triggered the change. - TriggerLogLevel // log_level_triggered - // TriggerStateChange indicates when a unit state has ganged. - TriggerStateChange // state_change_triggered + // TriggeredConfigChange indicates a change in config triggered the change. + TriggeredConfigChange Trigger = 1 << iota // config_change_triggered + // TriggeredFeatureChange indicates a change in the features triggered the change. + TriggeredFeatureChange // feature_change_triggered + // TriggeredLogLevelChange indicates a change the log level triggered the change. + TriggeredLogLevelChange // log_level_triggered + // TriggeredStateChange indicates when a unit state has ganged. + TriggeredStateChange // state_change_triggered ) -// FeatureFQDN indicates if the FQDN should be used instead of hostname for host.name. -// See proto.FQDNFeature for details. -type FeatureFQDN struct { - Enabled bool -} - -// Features are configurations for all the features (flag) available. -// See proto.Features for details. -type Features struct { - FQDN FeatureFQDN -} - // UnitChanged is what is sent over the UnitChanged channel any time a change happens: // - a unit is added, modified, or removed // - a feature changes type UnitChanged struct { Type ChangeType - Triggers []Trigger + Triggers Trigger // Unit is any change in a unit. Unit *Unit // Features are all the feature flags and their configs. - Features Features + Features *proto.Features } // AgentInfo is the information about the running Elastic Agent that the client is connected to. @@ -103,7 +91,7 @@ type V2 interface { // UnitChanges returns the channel the client sends change notifications to. // // User of this client must read from this channel, or it will block the client. - UnitChanged() <-chan UnitChanged + UnitChanges() <-chan UnitChanged // Errors returns channel of errors that occurred during communication. // // User of this client must read from this channel, or it will block the client. @@ -143,7 +131,7 @@ type clientV2 struct { errCh chan error changesCh chan UnitChanged featuresMu sync.Mutex - features Features + features *proto.Features unitsMu sync.RWMutex units []*Unit @@ -449,7 +437,7 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { Unit: unit, }) - if len(changed.Triggers) >= 0 { // a.k.a something changed + if changed.Triggers > 0 { // a.k.a something changed c.changesCh <- changed } } @@ -468,18 +456,13 @@ func (c *clientV2) syncFeatures( c.featuresMu.Lock() defer c.featuresMu.Unlock() - // Why did it not work?! - // the agent should be sending it every time... and I think it's - // it works for metricbeat, and there are mora than one unit on metricbeat as well - - // if expected.Features != nil && - // c.features.FQDN.Enabled != expected.Features.Fqdn.Enabled { + if expected.Features != nil && + c.features.Fqdn.Enabled != expected.Features.Fqdn.Enabled { - c.features.FQDN.Enabled = expected.Features.Fqdn.Enabled - changed.Features.FQDN.Enabled = c.features.FQDN.Enabled - changed.Triggers = append(changed.Triggers, TriggerFeature) - - // } + c.features.Fqdn.Enabled = expected.Features.Fqdn.Enabled + changed.Features.Fqdn.Enabled = c.features.Fqdn.Enabled + changed.Triggers |= TriggeredFeatureChange + } return changed } diff --git a/pkg/client/client_v2_strings.go b/pkg/client/client_v2_strings.go index 648695d..604ef76 100644 --- a/pkg/client/client_v2_strings.go +++ b/pkg/client/client_v2_strings.go @@ -31,19 +31,32 @@ func _() { // An "invalid array index" compiler error signifies that the constant values have changed. // Re-run the stringer command to generate them again. var x [1]struct{} - _ = x[TriggerConfig-0] - _ = x[TriggerFeature-1] - _ = x[TriggerLogLevel-2] - _ = x[TriggerStateChange-3] + _ = x[TriggeredConfigChange-1] + _ = x[TriggeredFeatureChange-2] + _ = x[TriggeredLogLevelChange-4] + _ = x[TriggeredStateChange-8] } -const _Trigger_name = "config_change_triggeredfeature_change_triggeredlog_level_triggeredstate_change_triggered" +const ( + _Trigger_name_0 = "config_change_triggeredfeature_change_triggered" + _Trigger_name_1 = "log_level_triggered" + _Trigger_name_2 = "state_change_triggered" +) -var _Trigger_index = [...]uint8{0, 23, 47, 66, 88} +var ( + _Trigger_index_0 = [...]uint8{0, 23, 47} +) func (i Trigger) String() string { - if i < 0 || i >= Trigger(len(_Trigger_index)-1) { + switch { + case 1 <= i && i <= 2: + i -= 1 + return _Trigger_name_0[_Trigger_index_0[i]:_Trigger_index_0[i+1]] + case i == 4: + return _Trigger_name_1 + case i == 8: + return _Trigger_name_2 + default: return "Trigger(" + strconv.FormatInt(int64(i), 10) + ")" } - return _Trigger_name[_Trigger_index[i]:_Trigger_index[i+1]] } diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index 11d1be9..4991768 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -135,11 +135,9 @@ func TestClientV2_Checkin_Initial(t *testing.T) { select { case <-ctx.Done(): return - case change := <-validClient.UnitChanged(): - for _, t := range change.Triggers { - if t == TriggerFeature { - gotFQDN = change.Features.FQDN.Enabled - } + case change := <-validClient.UnitChanges(): + if change.Triggers&TriggeredFeatureChange == TriggeredFeatureChange { + gotFQDN = change.Features.FQDN.Enabled } switch change.Type { @@ -302,17 +300,15 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { var unitsMu sync.Mutex units := make(map[string]*Unit) var gotFQDN bool - var gotTriggers []Trigger + var gotTriggers Trigger go func() { for { select { case <-ctx.Done(): return - case change := <-client.UnitChanged(): - for _, t := range change.Triggers { - if t == TriggerFeature { - gotFQDN = change.Features.FQDN.Enabled - } + case change := <-client.UnitChanges(): + if change.Triggers&TriggeredFeatureChange == TriggeredFeatureChange { + gotFQDN = change.Features.FQDN.Enabled } switch change.Type { @@ -376,7 +372,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { })) assert.Equal(t, wantFQDN, gotFQDN) - assert.Contains(t, gotTriggers, TriggerFeature) + assert.Contains(t, gotTriggers, TriggeredFeatureChange) assert.Equal(t, UnitStateHealthy, unitOne.state) assert.Equal(t, "Healthy", unitOne.stateMsg) assert.Equal(t, UnitStateStopped, unitTwo.state) @@ -438,7 +434,7 @@ func TestClientV2_Actions(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanged(): + case change := <-client.UnitChanges(): switch change.Type { case UnitChangedAdded: unitsMu.Lock() @@ -557,7 +553,7 @@ func TestClientV2_DiagnosticAction(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanged(): + case change := <-client.UnitChanges(): switch change.Type { case UnitChangedAdded: unitsMu.Lock() diff --git a/pkg/client/log_test.go b/pkg/client/log_test.go index 249e6c0..26a1a12 100644 --- a/pkg/client/log_test.go +++ b/pkg/client/log_test.go @@ -63,7 +63,7 @@ func TestLog(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanged(): + case change := <-client.UnitChanges(): switch change.Type { case UnitChangedAdded: unitsMu.Lock() diff --git a/pkg/client/store_test.go b/pkg/client/store_test.go index d0a8dcc..690c98d 100644 --- a/pkg/client/store_test.go +++ b/pkg/client/store_test.go @@ -65,7 +65,7 @@ func TestStore(t *testing.T) { select { case <-ctx.Done(): return - case change := <-client.UnitChanged(): + case change := <-client.UnitChanges(): switch change.Type { case UnitChangedAdded: unitsMu.Lock() diff --git a/pkg/client/unit.go b/pkg/client/unit.go index add8a1e..6fe780e 100644 --- a/pkg/client/unit.go +++ b/pkg/client/unit.go @@ -259,8 +259,7 @@ func (u *Unit) updateState( exp UnitState, logLevel UnitLogLevel, cfg *proto.UnitExpectedConfig, - cfgIdx uint64, -) Trigger { + cfgIdx uint64) Trigger { var triggers Trigger @@ -268,19 +267,19 @@ func (u *Unit) updateState( defer u.expectedStateMu.Unlock() if u.expectedState != exp { u.expectedState = exp - triggers |= TriggerStateChange + triggers |= TriggeredStateChange } if u.logLevel != logLevel { u.logLevel = logLevel - triggers |= TriggerLogLevel + triggers |= TriggeredLogLevelChange } if u.configIdx != cfgIdx { u.configIdx = cfgIdx if !gproto.Equal(u.config.GetSource(), cfg.GetSource()) { u.config = cfg - triggers |= TriggerConfig + triggers |= TriggeredConfigChange } } diff --git a/pkg/proto/elastic-agent-client.pb.go b/pkg/proto/elastic-agent-client.pb.go index 2d8290f..029fc71 100644 --- a/pkg/proto/elastic-agent-client.pb.go +++ b/pkg/proto/elastic-agent-client.pb.go @@ -1668,7 +1668,10 @@ type Features struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Fqdn *FQDNFeature `protobuf:"bytes,2,opt,name=fqdn,proto3" json:"fqdn,omitempty"` + // Source is the original source of the features. All values from the features + // are included here even if other concrete fields are defined for this message. + Source *structpb.Struct `protobuf:"bytes,1,opt,name=source,proto3" json:"source,omitempty"` + Fqdn *FQDNFeature `protobuf:"bytes,2,opt,name=fqdn,proto3" json:"fqdn,omitempty"` } func (x *Features) Reset() { @@ -1703,6 +1706,13 @@ func (*Features) Descriptor() ([]byte, []int) { return file_elastic_agent_client_proto_rawDescGZIP(), []int{13} } +func (x *Features) GetSource() *structpb.Struct { + if x != nil { + return x.Source + } + return nil +} + func (x *Features) GetFqdn() *FQDNFeature { if x != nil { return x.Fqdn @@ -1772,6 +1782,8 @@ type CheckinExpected struct { // Features are the expected feature flags configurations. // Added on Elastic Agent v8.7.1. Features *Features `protobuf:"bytes,3,opt,name=features,proto3" json:"features,omitempty"` + // Index of the either current features configuration or new the configuration provided. + FeaturesIdx uint64 `protobuf:"varint,4,opt,name=features_idx,json=featuresIdx,proto3" json:"features_idx,omitempty"` } func (x *CheckinExpected) Reset() { @@ -1827,6 +1839,13 @@ func (x *CheckinExpected) GetFeatures() *Features { return nil } +func (x *CheckinExpected) GetFeaturesIdx() uint64 { + if x != nil { + return x.FeaturesIdx + } + return 0 +} + // Observed status for a unit. // // Contains the currently applied `config_state_idx` (0 in the case of initial start, 1 is the first @@ -2010,6 +2029,11 @@ type CheckinObserved struct { // Version information about the running program. Should always be included on first checkin, and not again unless // one of the values have changed. VersionInfo *CheckinObservedVersionInfo `protobuf:"bytes,3,opt,name=version_info,json=versionInfo,proto3,oneof" json:"version_info,omitempty"` + // Features are the expected feature flags configurations. + // Added on Elastic Agent v8.7.1. + Features *Features `protobuf:"bytes,4,opt,name=features,proto3" json:"features,omitempty"` + // Index of the either current features configuration or new the configuration provided. + FeaturesIdx uint64 `protobuf:"varint,5,opt,name=features_idx,json=featuresIdx,proto3" json:"features_idx,omitempty"` } func (x *CheckinObserved) Reset() { @@ -2065,6 +2089,20 @@ func (x *CheckinObserved) GetVersionInfo() *CheckinObservedVersionInfo { return nil } +func (x *CheckinObserved) GetFeatures() *Features { + if x != nil { + return x.Features + } + return nil +} + +func (x *CheckinObserved) GetFeaturesIdx() uint64 { + if x != nil { + return x.FeaturesIdx + } + return 0 +} + // Begins a new transaction. // // A started transaction must either have commit or discard called. @@ -3226,215 +3264,225 @@ var file_elastic_agent_client_proto_rawDesc = []byte{ 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x22, 0x32, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x22, 0x27, 0x0a, 0x0b, 0x46, 0x51, 0x44, 0x4e, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, - 0x22, 0xa1, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, - 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, - 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x07, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, - 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, - 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, - 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, - 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6d, - 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, - 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, - 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, - 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, - 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x9a, 0x01, - 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, - 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, - 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, 0x0a, 0x14, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, - 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, - 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x74, 0x74, - 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x0a, 0x14, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x17, 0x0a, - 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, - 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x68, 0x6f, 0x74, 0x22, 0x63, 0x0a, 0x08, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x2f, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x26, 0x0a, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x51, 0x44, 0x4e, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x04, 0x66, 0x71, 0x64, 0x6e, 0x22, 0x27, 0x0a, 0x0b, 0x46, 0x51, 0x44, 0x4e, + 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, + 0x74, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, + 0x12, 0x36, 0x0a, 0x0a, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x65, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x73, 0x49, 0x64, 0x78, 0x22, 0xde, 0x01, 0x0a, 0x0c, 0x55, 0x6e, 0x69, + 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, + 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x69, + 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x64, 0x78, 0x12, 0x22, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xc4, 0x01, 0x0a, 0x1a, 0x43, 0x68, + 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x04, 0x6d, 0x65, 0x74, 0x61, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xfe, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, + 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x05, + 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, + 0x52, 0x0b, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x88, 0x01, 0x01, + 0x12, 0x2b, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x73, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, + 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x49, 0x64, 0x78, + 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, + 0x6f, 0x22, 0x9a, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, + 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, + 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x26, + 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, + 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, 0x0a, 0x15, 0x41, 0x72, - 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, 0x0d, 0x0a, 0x0b, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, 0x0a, 0x0a, 0x4c, 0x6f, - 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x74, 0x49, - 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x55, 0x6e, 0x69, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, 0x11, 0x4c, 0x6f, 0x67, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, + 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x13, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x09, + 0x0a, 0x05, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, + 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x7b, 0x0a, 0x12, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, - 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, 0x10, 0x43, 0x6f, 0x6e, - 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x0b, 0x0a, - 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, - 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, 0x68, 0x0a, 0x05, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, 0x54, 0x49, 0x4e, 0x47, - 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x55, 0x52, 0x49, 0x4e, - 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, 0x48, 0x59, 0x10, 0x02, - 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0x03, 0x12, 0x0a, - 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, - 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, - 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, 0x55, 0x6e, 0x69, 0x74, - 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x01, 0x12, 0x08, 0x0a, - 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x45, 0x42, 0x55, 0x47, - 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, 0x04, 0x2a, 0x2c, 0x0a, - 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0d, 0x0a, 0x09, - 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x52, - 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, 0xc6, 0x01, 0x0a, 0x0c, - 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x07, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x14, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x78, 0x70, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x1a, 0x16, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x45, 0x78, 0x70, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, - 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, 0x0a, 0x07, 0x42, 0x65, - 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, - 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, - 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, - 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x12, 0x1c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, - 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, - 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x5c, 0x0a, 0x14, 0x45, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, 0x12, 0x1b, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, 0x0f, 0x45, 0x6c, 0x61, - 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x12, 0x3a, 0x0a, 0x03, - 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, 0x70, 0x6b, 0x67, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, 0x01, 0x01, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x74, 0x74, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x03, 0x74, 0x74, 0x6c, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, + 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x0a, 0x15, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, + 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, + 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, + 0x74, 0x78, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, + 0x64, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x0a, 0x15, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x13, 0x0a, 0x05, 0x74, 0x78, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x78, 0x49, 0x64, 0x22, 0x18, + 0x0a, 0x16, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x14, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x22, 0x6e, + 0x0a, 0x15, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x03, 0x65, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x65, 0x6f, 0x66, 0x42, + 0x0d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6f, 0x66, 0x22, 0x6d, + 0x0a, 0x0a, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, + 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, + 0x6e, 0x69, 0x74, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x09, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x55, 0x6e, 0x69, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x75, 0x6e, 0x69, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x58, 0x0a, + 0x11, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x6f, 0x67, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x50, 0x0a, + 0x10, 0x43, 0x6f, 0x6e, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x10, 0x00, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x10, 0x01, 0x12, 0x09, 0x0a, + 0x05, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x72, 0x74, 0x69, + 0x66, 0x61, 0x63, 0x74, 0x10, 0x03, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x10, 0x04, 0x2a, + 0x68, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x41, 0x52, + 0x54, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, + 0x55, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x45, 0x41, 0x4c, 0x54, + 0x48, 0x59, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x45, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, + 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12, 0x0c, + 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, + 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x21, 0x0a, 0x08, 0x55, 0x6e, 0x69, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x10, 0x01, 0x2a, 0x43, 0x0a, 0x0c, + 0x55, 0x6e, 0x69, 0x74, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x09, 0x0a, 0x05, + 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x57, 0x41, 0x52, 0x4e, 0x10, + 0x01, 0x12, 0x08, 0x0a, 0x04, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x44, + 0x45, 0x42, 0x55, 0x47, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x54, 0x52, 0x41, 0x43, 0x45, 0x10, + 0x04, 0x2a, 0x2c, 0x0a, 0x0b, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x78, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0d, 0x0a, 0x09, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, + 0x0e, 0x0a, 0x0a, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x57, 0x52, 0x49, 0x54, 0x45, 0x10, 0x01, 0x32, + 0xc6, 0x01, 0x0a, 0x0c, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x12, 0x39, 0x0a, 0x07, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x12, 0x14, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x64, 0x1a, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x09, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x56, 0x32, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, + 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x69, 0x6e, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x28, 0x01, 0x30, 0x01, 0x12, 0x3a, 0x0a, 0x07, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x14, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x28, 0x01, 0x30, 0x01, 0x32, 0xb4, 0x03, 0x0a, 0x11, 0x45, 0x6c, 0x61, + 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x42, + 0x0a, 0x07, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, + 0x6f, 0x72, 0x65, 0x42, 0x65, 0x67, 0x69, 0x6e, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x19, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x53, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, + 0x79, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, + 0x0a, 0x08, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x78, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, + 0x54, 0x78, 0x12, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, + 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x44, 0x69, + 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x78, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, + 0x5c, 0x0a, 0x14, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x12, 0x44, 0x0a, 0x05, 0x46, 0x65, 0x74, 0x63, 0x68, + 0x12, 0x1b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, + 0x74, 0x46, 0x65, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x46, 0x65, + 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x32, 0x4d, 0x0a, + 0x0f, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, + 0x12, 0x3a, 0x0a, 0x03, 0x4c, 0x6f, 0x67, 0x12, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x6f, 0x67, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x14, 0x5a, 0x0f, + 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0xf8, + 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3526,49 +3574,51 @@ var file_elastic_agent_client_proto_depIdxs = []int32{ 1, // 19: proto.UnitExpected.state:type_name -> proto.State 20, // 20: proto.UnitExpected.config:type_name -> proto.UnitExpectedConfig 3, // 21: proto.UnitExpected.log_level:type_name -> proto.UnitLogLevel - 24, // 22: proto.Features.fqdn:type_name -> proto.FQDNFeature - 21, // 23: proto.CheckinExpected.units:type_name -> proto.UnitExpected - 22, // 24: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo - 23, // 25: proto.CheckinExpected.features:type_name -> proto.Features - 2, // 26: proto.UnitObserved.type:type_name -> proto.UnitType - 1, // 27: proto.UnitObserved.state:type_name -> proto.State - 48, // 28: proto.UnitObserved.payload:type_name -> google.protobuf.Struct - 46, // 29: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry - 26, // 30: proto.CheckinObserved.units:type_name -> proto.UnitObserved - 27, // 31: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo - 2, // 32: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType - 4, // 33: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType - 9, // 34: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status - 49, // 35: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty - 2, // 36: proto.LogMessage.unit_type:type_name -> proto.UnitType - 43, // 37: proto.LogMessageRequest.messages:type_name -> proto.LogMessage - 11, // 38: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved - 28, // 39: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved - 15, // 40: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse - 29, // 41: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest - 31, // 42: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest - 33, // 43: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest - 35, // 44: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest - 37, // 45: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest - 39, // 46: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest - 41, // 47: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest - 44, // 48: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest - 12, // 49: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected - 25, // 50: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected - 13, // 51: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest - 30, // 52: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse - 32, // 53: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse - 34, // 54: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse - 36, // 55: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse - 38, // 56: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse - 40, // 57: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse - 42, // 58: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse - 45, // 59: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse - 49, // [49:60] is the sub-list for method output_type - 38, // [38:49] is the sub-list for method input_type - 38, // [38:38] is the sub-list for extension type_name - 38, // [38:38] is the sub-list for extension extendee - 0, // [0:38] is the sub-list for field type_name + 48, // 22: proto.Features.source:type_name -> google.protobuf.Struct + 24, // 23: proto.Features.fqdn:type_name -> proto.FQDNFeature + 21, // 24: proto.CheckinExpected.units:type_name -> proto.UnitExpected + 22, // 25: proto.CheckinExpected.agent_info:type_name -> proto.CheckinAgentInfo + 23, // 26: proto.CheckinExpected.features:type_name -> proto.Features + 2, // 27: proto.UnitObserved.type:type_name -> proto.UnitType + 1, // 28: proto.UnitObserved.state:type_name -> proto.State + 48, // 29: proto.UnitObserved.payload:type_name -> google.protobuf.Struct + 46, // 30: proto.CheckinObservedVersionInfo.meta:type_name -> proto.CheckinObservedVersionInfo.MetaEntry + 26, // 31: proto.CheckinObserved.units:type_name -> proto.UnitObserved + 27, // 32: proto.CheckinObserved.version_info:type_name -> proto.CheckinObservedVersionInfo + 23, // 33: proto.CheckinObserved.features:type_name -> proto.Features + 2, // 34: proto.StoreBeginTxRequest.unit_type:type_name -> proto.UnitType + 4, // 35: proto.StoreBeginTxRequest.type:type_name -> proto.StoreTxType + 9, // 36: proto.StoreGetKeyResponse.status:type_name -> proto.StoreGetKeyResponse.Status + 49, // 37: proto.ArtifactFetchResponse.eof:type_name -> google.protobuf.Empty + 2, // 38: proto.LogMessage.unit_type:type_name -> proto.UnitType + 43, // 39: proto.LogMessageRequest.messages:type_name -> proto.LogMessage + 11, // 40: proto.ElasticAgent.Checkin:input_type -> proto.StateObserved + 28, // 41: proto.ElasticAgent.CheckinV2:input_type -> proto.CheckinObserved + 15, // 42: proto.ElasticAgent.Actions:input_type -> proto.ActionResponse + 29, // 43: proto.ElasticAgentStore.BeginTx:input_type -> proto.StoreBeginTxRequest + 31, // 44: proto.ElasticAgentStore.GetKey:input_type -> proto.StoreGetKeyRequest + 33, // 45: proto.ElasticAgentStore.SetKey:input_type -> proto.StoreSetKeyRequest + 35, // 46: proto.ElasticAgentStore.DeleteKey:input_type -> proto.StoreDeleteKeyRequest + 37, // 47: proto.ElasticAgentStore.CommitTx:input_type -> proto.StoreCommitTxRequest + 39, // 48: proto.ElasticAgentStore.DiscardTx:input_type -> proto.StoreDiscardTxRequest + 41, // 49: proto.ElasticAgentArtifact.Fetch:input_type -> proto.ArtifactFetchRequest + 44, // 50: proto.ElasticAgentLog.Log:input_type -> proto.LogMessageRequest + 12, // 51: proto.ElasticAgent.Checkin:output_type -> proto.StateExpected + 25, // 52: proto.ElasticAgent.CheckinV2:output_type -> proto.CheckinExpected + 13, // 53: proto.ElasticAgent.Actions:output_type -> proto.ActionRequest + 30, // 54: proto.ElasticAgentStore.BeginTx:output_type -> proto.StoreBeginTxResponse + 32, // 55: proto.ElasticAgentStore.GetKey:output_type -> proto.StoreGetKeyResponse + 34, // 56: proto.ElasticAgentStore.SetKey:output_type -> proto.StoreSetKeyResponse + 36, // 57: proto.ElasticAgentStore.DeleteKey:output_type -> proto.StoreDeleteKeyResponse + 38, // 58: proto.ElasticAgentStore.CommitTx:output_type -> proto.StoreCommitTxResponse + 40, // 59: proto.ElasticAgentStore.DiscardTx:output_type -> proto.StoreDiscardTxResponse + 42, // 60: proto.ElasticAgentArtifact.Fetch:output_type -> proto.ArtifactFetchResponse + 45, // 61: proto.ElasticAgentLog.Log:output_type -> proto.LogMessageResponse + 51, // [51:62] is the sub-list for method output_type + 40, // [40:51] is the sub-list for method input_type + 40, // [40:40] is the sub-list for extension type_name + 40, // [40:40] is the sub-list for extension extendee + 0, // [0:40] is the sub-list for field type_name } func init() { file_elastic_agent_client_proto_init() } From 40b9cd2ed2ad6f75692d739c972fe5c2f317c593 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Thu, 16 Feb 2023 18:21:50 +0100 Subject: [PATCH 16/40] WIP: changes as I tested the agent with the fake inut --- pkg/client/client_v2.go | 20 ++++++++++++++++-- pkg/client/client_v2_strings.go | 34 ++++++++++++++++--------------- pkg/client/unit.go | 36 ++++++++++++++++++++++++++------- 3 files changed, 65 insertions(+), 25 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 259eec7..0d3d816 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -16,6 +16,7 @@ import ( "time" "google.golang.org/grpc" + gproto "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/timestamppb" "github.com/elastic/elastic-agent-client/v7/pkg/proto" @@ -40,6 +41,10 @@ const ( ) const ( + // TriggeredNothing is Trigger zero value, nothing was triggered. + // It exists only for completeness and documentation purposes. + TriggeredNothing Trigger = 0 // nothing_triggered + // TriggeredConfigChange indicates a change in config triggered the change. TriggeredConfigChange Trigger = 1 << iota // config_change_triggered // TriggeredFeatureChange indicates a change in the features triggered the change. @@ -132,6 +137,7 @@ type clientV2 struct { changesCh chan UnitChanged featuresMu sync.Mutex features *proto.Features + featuresIdx uint64 unitsMu sync.RWMutex units []*Unit @@ -158,6 +164,7 @@ func NewV2(target string, token string, versionInfo VersionInfo, opts ...grpc.Di changesCh: make(chan UnitChanged), diagHooks: make(map[string]diagHook), minCheckTimeout: CheckinMinimumTimeout, + features: &proto.Features{Fqdn: &proto.FQDNFeature{}}, } c.registerDefaultDiagnostics() return c @@ -431,11 +438,20 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { Unit: unit, } - changed := c.syncFeatures(expected, UnitChanged{ + changed := UnitChanged{ Triggers: triggers, Type: UnitChangedModified, Unit: unit, - }) + } + + if unit.featuresIdx != c.featuresIdx { + unit.featuresIdx = c.featuresIdx + + if !gproto.Equal(unit.features, c.features) { + unit.features = c.features + changed.Triggers |= TriggeredFeatureChange + } + } if changed.Triggers > 0 { // a.k.a something changed c.changesCh <- changed diff --git a/pkg/client/client_v2_strings.go b/pkg/client/client_v2_strings.go index 604ef76..6124ad3 100644 --- a/pkg/client/client_v2_strings.go +++ b/pkg/client/client_v2_strings.go @@ -31,31 +31,33 @@ func _() { // An "invalid array index" compiler error signifies that the constant values have changed. // Re-run the stringer command to generate them again. var x [1]struct{} - _ = x[TriggeredConfigChange-1] - _ = x[TriggeredFeatureChange-2] - _ = x[TriggeredLogLevelChange-4] - _ = x[TriggeredStateChange-8] + _ = x[TriggeredNothing-0] + _ = x[TriggeredConfigChange-2] + _ = x[TriggeredFeatureChange-4] + _ = x[TriggeredLogLevelChange-8] + _ = x[TriggeredStateChange-16] } const ( - _Trigger_name_0 = "config_change_triggeredfeature_change_triggered" - _Trigger_name_1 = "log_level_triggered" - _Trigger_name_2 = "state_change_triggered" -) - -var ( - _Trigger_index_0 = [...]uint8{0, 23, 47} + _Trigger_name_0 = "nothing_triggered" + _Trigger_name_1 = "config_change_triggered" + _Trigger_name_2 = "feature_change_triggered" + _Trigger_name_3 = "log_level_triggered" + _Trigger_name_4 = "state_change_triggered" ) func (i Trigger) String() string { switch { - case 1 <= i && i <= 2: - i -= 1 - return _Trigger_name_0[_Trigger_index_0[i]:_Trigger_index_0[i+1]] - case i == 4: + case i == 0: + return _Trigger_name_0 + case i == 2: return _Trigger_name_1 - case i == 8: + case i == 4: return _Trigger_name_2 + case i == 8: + return _Trigger_name_3 + case i == 16: + return _Trigger_name_4 default: return "Trigger(" + strconv.FormatInt(int64(i), 10) + ")" } diff --git a/pkg/client/unit.go b/pkg/client/unit.go index 6fe780e..c373cd7 100644 --- a/pkg/client/unit.go +++ b/pkg/client/unit.go @@ -118,10 +118,14 @@ type Unit struct { expectedStateMu sync.RWMutex expectedState UnitState - logLevel UnitLogLevel - config *proto.UnitExpectedConfig - configIdx uint64 - features *proto.Features + + logLevel UnitLogLevel + config *proto.UnitExpectedConfig + configIdx uint64 + + // do I need a mutex? + features *proto.Features + featuresIdx uint64 // do I really need it? stateMu sync.RWMutex state UnitState @@ -147,11 +151,24 @@ func (u *Unit) Type() UnitType { return u.unitType } +type Expected struct { + Config *proto.UnitExpectedConfig + Features *proto.Features + LogLevel UnitLogLevel + State UnitState +} + // Expected returns the expected state, log leve, features and config for the unit. -func (u *Unit) Expected() (UnitState, UnitLogLevel, *proto.Features, *proto.UnitExpectedConfig) { +func (u *Unit) Expected() Expected { u.expectedStateMu.RLock() defer u.expectedStateMu.RUnlock() - return u.expectedState, u.logLevel, u.features, u.config + + return Expected{ + Config: u.config, + Features: u.features, + LogLevel: u.logLevel, + State: u.expectedState, + } } // State returns the currently reported state for the unit. @@ -313,7 +330,7 @@ func newUnit( cfgIdx uint64, client *clientV2) *Unit { - return &Unit{ + unit := Unit{ id: id, unitType: unitType, config: cfg, @@ -326,4 +343,9 @@ func newUnit( actions: make(map[string]Action), diagHooks: make(map[string]diagHook), } + + if client != nil { + unit.features = client.features + } + return &unit } From 24b65f042f2d1cf0bd12ceaa3b963162c41f93a2 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Tue, 21 Feb 2023 10:50:57 +0100 Subject: [PATCH 17/40] mage check --- pkg/client/unit.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/client/unit.go b/pkg/client/unit.go index c373cd7..8fad072 100644 --- a/pkg/client/unit.go +++ b/pkg/client/unit.go @@ -151,6 +151,7 @@ func (u *Unit) Type() UnitType { return u.unitType } +// Expected contains the expected state, log level, features and config for a unit. type Expected struct { Config *proto.UnitExpectedConfig Features *proto.Features @@ -158,7 +159,7 @@ type Expected struct { State UnitState } -// Expected returns the expected state, log leve, features and config for the unit. +// Expected returns the expected state, log level, features and config for the unit. func (u *Unit) Expected() Expected { u.expectedStateMu.RLock() defer u.expectedStateMu.RUnlock() From 4c970c2f42479b39f244526e79da8f4fb3db187d Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Tue, 21 Feb 2023 15:21:03 +0100 Subject: [PATCH 18/40] remove client.syncFeatures --- pkg/client/client_v2.go | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 0d3d816..374ab27 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -375,6 +375,11 @@ func (c *clientV2) sync(expected *proto.CheckinExpected) { c.agentInfoMu.Unlock() } + if expected.Features != nil { + c.features = expected.Features + c.featuresIdx = expected.FeaturesIdx + } + c.syncUnits(expected) } @@ -393,8 +398,6 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { Unit: unit, } - changed = c.syncFeatures(expected, changed) - c.changesCh <- changed removed = true } @@ -417,12 +420,12 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { c.units = append(c.units, unit) changed := UnitChanged{ - Type: UnitChangedAdded, - Unit: unit, + Type: UnitChangedAdded, + Unit: unit, + Triggers: TriggeredFeatureChange, + Features: expected.Features, } - changed = c.syncFeatures(expected, changed) - c.changesCh <- changed } else { // existing unit @@ -444,11 +447,10 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { Unit: unit, } - if unit.featuresIdx != c.featuresIdx { - unit.featuresIdx = c.featuresIdx - - if !gproto.Equal(unit.features, c.features) { - unit.features = c.features + if unit.featuresIdx != expected.FeaturesIdx { + unit.featuresIdx = expected.FeaturesIdx + if !gproto.Equal(unit.features, expected.Features) { + unit.features = expected.Features changed.Triggers |= TriggeredFeatureChange } } @@ -466,23 +468,6 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { } } -func (c *clientV2) syncFeatures( - expected *proto.CheckinExpected, changed UnitChanged) UnitChanged { - - c.featuresMu.Lock() - defer c.featuresMu.Unlock() - - if expected.Features != nil && - c.features.Fqdn.Enabled != expected.Features.Fqdn.Enabled { - - c.features.Fqdn.Enabled = expected.Features.Fqdn.Enabled - changed.Features.Fqdn.Enabled = c.features.Fqdn.Enabled - changed.Triggers |= TriggeredFeatureChange - } - - return changed -} - // findUnit finds an existing unit. func (c *clientV2) findUnit(id string, unitType UnitType) *Unit { for _, unit := range c.units { From 44c52ae67a43534811304b2dadf84bde05001f95 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Tue, 21 Feb 2023 16:33:49 +0100 Subject: [PATCH 19/40] send features on unit removed and change Trigger.String --- pkg/client/client_v2.go | 38 ++++++++++++++++++++++++++++++++- pkg/client/client_v2_strings.go | 25 ---------------------- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 374ab27..2b59185 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -12,6 +12,7 @@ import ( "fmt" "io" "runtime/pprof" + "strings" "sync" "time" @@ -23,7 +24,7 @@ import ( "github.com/elastic/elastic-agent-client/v7/pkg/utils" ) -//go:generate stringer -type=ChangeType,Trigger -linecomment -output client_v2_strings.go +//go:generate stringer -type=ChangeType -linecomment -output client_v2_strings.go type ( // ChangeType defines types for when units are adjusted. ChangeType int @@ -55,6 +56,37 @@ const ( TriggeredStateChange // state_change_triggered ) +func (t Trigger) String() string { + var triggers []string + if t == 0 { + return "nothing_triggered" + } + + if t&TriggeredConfigChange == TriggeredConfigChange { + t &= ^TriggeredConfigChange + triggers = append(triggers, "config_change_triggered") + } + if t&TriggeredFeatureChange == TriggeredFeatureChange { + t &= ^TriggeredConfigChange + triggers = append(triggers, "feature_change_triggered") + } + if t&TriggeredLogLevelChange == TriggeredLogLevelChange { + t &= ^TriggeredConfigChange + triggers = append(triggers, "log_level_triggered") + } + if t&TriggeredStateChange == TriggeredStateChange { + t &= ^TriggeredConfigChange + triggers = append(triggers, "state_change_triggered") + } + + if t != 0 { + return fmt.Sprintf("invalid triggers: %s and %d leftover", + strings.Join(triggers, ", "), t) + } + + return strings.Join(triggers, ", ") +} + // UnitChanged is what is sent over the UnitChanged channel any time a change happens: // - a unit is added, modified, or removed // - a feature changes @@ -396,6 +428,10 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { changed := UnitChanged{ Type: UnitChangedRemoved, Unit: unit, + // When a unity is removed, no change to other units but the + // features changed as well. + Triggers: TriggeredFeatureChange, + Features: expected.Features, } c.changesCh <- changed diff --git a/pkg/client/client_v2_strings.go b/pkg/client/client_v2_strings.go index 6124ad3..e65d3ca 100644 --- a/pkg/client/client_v2_strings.go +++ b/pkg/client/client_v2_strings.go @@ -37,28 +37,3 @@ func _() { _ = x[TriggeredLogLevelChange-8] _ = x[TriggeredStateChange-16] } - -const ( - _Trigger_name_0 = "nothing_triggered" - _Trigger_name_1 = "config_change_triggered" - _Trigger_name_2 = "feature_change_triggered" - _Trigger_name_3 = "log_level_triggered" - _Trigger_name_4 = "state_change_triggered" -) - -func (i Trigger) String() string { - switch { - case i == 0: - return _Trigger_name_0 - case i == 2: - return _Trigger_name_1 - case i == 4: - return _Trigger_name_2 - case i == 8: - return _Trigger_name_3 - case i == 16: - return _Trigger_name_4 - default: - return "Trigger(" + strconv.FormatInt(int64(i), 10) + ")" - } -} From c23dd0956cd49aec41749f9cc548d2174edfc6df Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Tue, 21 Feb 2023 19:30:07 +0100 Subject: [PATCH 20/40] Adjust Trigger String method --- pkg/client/client_v2.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 2b59185..48f5d90 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -62,26 +62,26 @@ func (t Trigger) String() string { return "nothing_triggered" } - if t&TriggeredConfigChange == TriggeredConfigChange { - t &= ^TriggeredConfigChange + current := t + if current&TriggeredConfigChange == TriggeredConfigChange { + current &= ^TriggeredConfigChange triggers = append(triggers, "config_change_triggered") } - if t&TriggeredFeatureChange == TriggeredFeatureChange { - t &= ^TriggeredConfigChange + if current&TriggeredFeatureChange == TriggeredFeatureChange { + current &= ^TriggeredFeatureChange triggers = append(triggers, "feature_change_triggered") } - if t&TriggeredLogLevelChange == TriggeredLogLevelChange { - t &= ^TriggeredConfigChange + if current&TriggeredLogLevelChange == TriggeredLogLevelChange { + current &= ^TriggeredLogLevelChange triggers = append(triggers, "log_level_triggered") } - if t&TriggeredStateChange == TriggeredStateChange { - t &= ^TriggeredConfigChange + if current&TriggeredStateChange == TriggeredStateChange { + current &= ^TriggeredStateChange triggers = append(triggers, "state_change_triggered") } - if t != 0 { - return fmt.Sprintf("invalid triggers: %s and %d leftover", - strings.Join(triggers, ", "), t) + if current != 0 { + return fmt.Sprintf("invalid trigger value: %d", t) } return strings.Join(triggers, ", ") From e416270f8c0d77af33f7432f4e10317720e1907c Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Wed, 22 Feb 2023 07:39:25 +0100 Subject: [PATCH 21/40] fix tests --- pkg/client/client_v2_test.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index 4991768..c7ad814 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -137,7 +137,7 @@ func TestClientV2_Checkin_Initial(t *testing.T) { return case change := <-validClient.UnitChanges(): if change.Triggers&TriggeredFeatureChange == TriggeredFeatureChange { - gotFQDN = change.Features.FQDN.Enabled + gotFQDN = change.Features.Fqdn.Enabled } switch change.Type { @@ -308,7 +308,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { return case change := <-client.UnitChanges(): if change.Triggers&TriggeredFeatureChange == TriggeredFeatureChange { - gotFQDN = change.Features.FQDN.Enabled + gotFQDN = change.Features.Fqdn.Enabled } switch change.Type { @@ -320,11 +320,11 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { "custom": "payload", }) case UnitChangedModified: - state, _, _ := change.Unit.Expected() - gotFQDN = change.Features.FQDN.Enabled + expected := change.Unit.Expected() + gotFQDN = change.Features.Fqdn.Enabled gotTriggers = change.Triggers - if state == UnitStateStopped { + if expected.State == UnitStateStopped { change.Unit.UpdateState(UnitStateStopping, "Stopping", nil) go func() { time.Sleep(100 * time.Millisecond) @@ -608,6 +608,10 @@ func TestClientV2_DiagnosticAction(t *testing.T) { assert.ElementsMatch(t, names, []string{"goroutine", "heap", "allocs", "threadcreate", "block", "mutex", "custom_component", "custom_unit"}) } +func TestTrigger_String(t *testing.T) { + +} + func storeErrors(ctx context.Context, client V2, errs *[]error, lock *sync.Mutex) { go func() { for { From e31ef9e7e6d9a721c2de755056719bedc5b5c12a Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Thu, 23 Feb 2023 14:57:52 +0100 Subject: [PATCH 22/40] add feature flags to UnitChange --- pkg/client/client_v2.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 48f5d90..800393f 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -483,10 +483,12 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { Unit: unit, } + // the problem seems to be here if unit.featuresIdx != expected.FeaturesIdx { unit.featuresIdx = expected.FeaturesIdx if !gproto.Equal(unit.features, expected.Features) { unit.features = expected.Features + changed.Features = expected.Features changed.Triggers |= TriggeredFeatureChange } } From 320d333131e7d0829407d461d1dc7004e77c0683 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Thu, 23 Feb 2023 16:13:56 +0100 Subject: [PATCH 23/40] . --- pkg/client/client_v2.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 800393f..ae8caf2 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -483,7 +483,6 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { Unit: unit, } - // the problem seems to be here if unit.featuresIdx != expected.FeaturesIdx { unit.featuresIdx = expected.FeaturesIdx if !gproto.Equal(unit.features, expected.Features) { From 201094ed6a52291b9a29020428d3c8dee85244f4 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Fri, 24 Feb 2023 10:50:22 +0100 Subject: [PATCH 24/40] add and fix tests, some PR and small changes --- elastic-agent-client.proto | 2 -- pkg/client/client_test.go | 2 +- pkg/client/client_v2.go | 8 +------ pkg/client/client_v2_strings.go | 12 +---------- pkg/client/client_v2_test.go | 31 ++++++++++++++++++++++++++++ pkg/client/unit_test.go | 21 ++++++++++--------- pkg/proto/elastic-agent-client.pb.go | 2 -- 7 files changed, 45 insertions(+), 33 deletions(-) diff --git a/elastic-agent-client.proto b/elastic-agent-client.proto index 7b25ef2..3a29bc6 100644 --- a/elastic-agent-client.proto +++ b/elastic-agent-client.proto @@ -293,7 +293,6 @@ message CheckinAgentInfo { } // Feature flags configurations. -// Added on Elastic Agent v8.7.1. message Features { // Source is the original source of the features. All values from the features // are included here even if other concrete fields are defined for this message. @@ -303,7 +302,6 @@ message Features { } // FQDN feature flag indicates to use FQDN for host.name instead of hostname. -// Added on Elastic Agent v8.7.1. message FQDNFeature { bool enabled = 1; } diff --git a/pkg/client/client_test.go b/pkg/client/client_test.go index 3e78a7c..7cb36d2 100644 --- a/pkg/client/client_test.go +++ b/pkg/client/client_test.go @@ -436,7 +436,7 @@ func waitFor(check func() error) error { } if time.Now().Sub(started) >= timeout { return fmt.Errorf("check timed out after %s: %s", - 5*time.Minute, err) + timeout, err) } time.Sleep(10 * time.Millisecond) } diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index ae8caf2..08bf7d1 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -425,16 +425,10 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { c.units[i] = unit i++ } else { - changed := UnitChanged{ + c.changesCh <- UnitChanged{ Type: UnitChangedRemoved, Unit: unit, - // When a unity is removed, no change to other units but the - // features changed as well. - Triggers: TriggeredFeatureChange, - Features: expected.Features, } - - c.changesCh <- changed removed = true } } diff --git a/pkg/client/client_v2_strings.go b/pkg/client/client_v2_strings.go index e65d3ca..e48cd94 100644 --- a/pkg/client/client_v2_strings.go +++ b/pkg/client/client_v2_strings.go @@ -2,7 +2,7 @@ // or more contributor license agreements. Licensed under the Elastic License; // you may not use this file except in compliance with the Elastic License. -// Code generated by "stringer -type=ChangeType,Trigger -linecomment -output client_v2_strings.go"; DO NOT EDIT. +// Code generated by "stringer -type=ChangeType -linecomment -output client_v2_strings.go"; DO NOT EDIT. package client @@ -27,13 +27,3 @@ func (i ChangeType) String() string { } return _ChangeType_name[_ChangeType_index[i]:_ChangeType_index[i+1]] } -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[TriggeredNothing-0] - _ = x[TriggeredConfigChange-2] - _ = x[TriggeredFeatureChange-4] - _ = x[TriggeredLogLevelChange-8] - _ = x[TriggeredStateChange-16] -} diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index c7ad814..f8c1a13 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -609,7 +609,38 @@ func TestClientV2_DiagnosticAction(t *testing.T) { } func TestTrigger_String(t *testing.T) { + tcs := []struct { + Name string + Trigger Trigger + Want string + }{ + { + Name: "nothing triggered, zero value", + Want: "nothing_triggered", + }, + { + Name: "one change: feature_change_triggered", + Trigger: TriggeredFeatureChange, + Want: "feature_change_triggered", + }, + { + Name: "two changes: feature_change_triggered, state_change_triggered", + Trigger: TriggeredFeatureChange | TriggeredStateChange, + Want: "feature_change_triggered, state_change_triggered", + }, + { + Name: "invalid trigger value", + Trigger: 1618, + Want: "invalid trigger value: 1618", + }, + } + for _, tc := range tcs { + t.Run(tc.Name, func(t *testing.T) { + got := tc.Trigger.String() + assert.Equal(t, got, tc.Want) + }) + } } func storeErrors(ctx context.Context, client V2, errs *[]error, lock *sync.Mutex) { diff --git a/pkg/client/unit_test.go b/pkg/client/unit_test.go index 7aad41b..1e5a4bc 100644 --- a/pkg/client/unit_test.go +++ b/pkg/client/unit_test.go @@ -6,6 +6,7 @@ package client import ( "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" gproto "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/structpb" @@ -35,9 +36,9 @@ func TestUnitUpdateWithSameMap(t *testing.T) { _, err = gproto.Marshal(newUnit) require.NoError(t, err) - // This should return false, as the two underlying maps in `source` are the same - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) - require.Empty(t, result) + // This should return TriggeredNothing, as the two underlying maps in `source` are the same + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) + assert.Equal(t, TriggeredNothing, got) } func TestUnitUpdateWithNewMap(t *testing.T) { @@ -55,17 +56,17 @@ func TestUnitUpdateWithNewMap(t *testing.T) { _, err = gproto.Marshal(newUnit) require.NoError(t, err) - // This should return true, as we have an actually new map - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) - require.NotEmpty(t, result) + // This should return TriggeredConfigChange, as we have an actually new map + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) + assert.Equal(t, TriggeredConfigChange, got) } func TestUnitUpdateLog(t *testing.T) { - result := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) - require.NotEmpty(t, result) + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) + assert.Equal(t, TriggeredLogLevelChange, got) } func TestUnitUpdateState(t *testing.T) { - result := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) - require.NotEmpty(t, result) + got := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) + assert.Equal(t, TriggeredStateChange, got) } diff --git a/pkg/proto/elastic-agent-client.pb.go b/pkg/proto/elastic-agent-client.pb.go index 029fc71..a1d245a 100644 --- a/pkg/proto/elastic-agent-client.pb.go +++ b/pkg/proto/elastic-agent-client.pb.go @@ -1662,7 +1662,6 @@ func (x *CheckinAgentInfo) GetSnapshot() bool { } // Feature flags configurations. -// Added on Elastic Agent v8.7.1. type Features struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1721,7 +1720,6 @@ func (x *Features) GetFqdn() *FQDNFeature { } // FQDN feature flag indicates to use FQDN for host.name instead of hostname. -// Added on Elastic Agent v8.7.1. type FQDNFeature struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache From feba3f017bb8801f7fcdfe46750c80e2189f17bc Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Fri, 24 Feb 2023 12:37:17 +0100 Subject: [PATCH 25/40] remove stringer usage --- pkg/client/client_v2.go | 23 ++++++++++++++++++----- pkg/client/client_v2_strings.go | 29 ----------------------------- 2 files changed, 18 insertions(+), 34 deletions(-) delete mode 100644 pkg/client/client_v2_strings.go diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 08bf7d1..abfd310 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -24,17 +24,16 @@ import ( "github.com/elastic/elastic-agent-client/v7/pkg/utils" ) -//go:generate stringer -type=ChangeType -linecomment -output client_v2_strings.go type ( - // ChangeType defines types for when units are adjusted. - ChangeType int + // UnitChangedType defines types for when units are adjusted. + UnitChangedType int // Trigger indicates what triggered a change Trigger uint ) const ( // UnitChangedAdded is when a new unit is added. - UnitChangedAdded ChangeType = iota // unit_added + UnitChangedAdded UnitChangedType = iota // unit_added // UnitChangedModified is when an existing unit is modified. UnitChangedModified // unit_modified // UnitChangedRemoved is when an existing unit is removed. @@ -87,11 +86,25 @@ func (t Trigger) String() string { return strings.Join(triggers, ", ") } +// String returns a string representation for the unit changed type. +func (t UnitChangedType) String() string { + switch t { + case UnitChangedAdded: + return "added" + case UnitChangedModified: + return "modified" + case UnitChangedRemoved: + return "removed" + } + + return "unknown" +} + // UnitChanged is what is sent over the UnitChanged channel any time a change happens: // - a unit is added, modified, or removed // - a feature changes type UnitChanged struct { - Type ChangeType + Type UnitChangedType Triggers Trigger // Unit is any change in a unit. Unit *Unit diff --git a/pkg/client/client_v2_strings.go b/pkg/client/client_v2_strings.go deleted file mode 100644 index e48cd94..0000000 --- a/pkg/client/client_v2_strings.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one -// or more contributor license agreements. Licensed under the Elastic License; -// you may not use this file except in compliance with the Elastic License. - -// Code generated by "stringer -type=ChangeType -linecomment -output client_v2_strings.go"; DO NOT EDIT. - -package client - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[UnitChangedAdded-0] - _ = x[UnitChangedModified-1] - _ = x[UnitChangedRemoved-2] -} - -const _ChangeType_name = "unit_addedunit_modifiedunit_removed" - -var _ChangeType_index = [...]uint8{0, 10, 23, 35} - -func (i ChangeType) String() string { - if i < 0 || i >= ChangeType(len(_ChangeType_index)-1) { - return "ChangeType(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _ChangeType_name[_ChangeType_index[i]:_ChangeType_index[i+1]] -} From 40bdac0d74707bda3c50e94bcb0ba5846a859a36 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Mon, 27 Feb 2023 20:00:27 +0100 Subject: [PATCH 26/40] rebase and go mod tidy --- go.sum | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/go.sum b/go.sum index 976bc2a..11afa8e 100644 --- a/go.sum +++ b/go.sum @@ -73,38 +73,30 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -114,18 +106,12 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 h1:xHms4gcpe1YE7A3yIllJXP16CMAGuqwO2lX1mTyyRRc= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -133,9 +119,6 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 39ca1747cc0539380efaaceb8779ed047744df5c Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Mon, 27 Feb 2023 22:03:49 +0100 Subject: [PATCH 27/40] fix test --- pkg/client/client_v2_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index f8c1a13..dbee206 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -211,6 +211,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { if unitOne.state == UnitStateStarting && unitTwo.state == UnitStateStarting { // first checkin; create units return &proto.CheckinExpected{ + Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, Units: []*proto.UnitExpected{ { Id: unitOne.id, From 35b9f3b2beec54837c6eab0e00adb0413e10287e Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Mon, 27 Feb 2023 22:21:00 +0100 Subject: [PATCH 28/40] tests fixed --- pkg/client/client_v2_test.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index dbee206..6030fb9 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -211,7 +211,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { if unitOne.state == UnitStateStarting && unitTwo.state == UnitStateStarting { // first checkin; create units return &proto.CheckinExpected{ - Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, + Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: false}}, + FeaturesIdx: 1, Units: []*proto.UnitExpected{ { Id: unitOne.id, @@ -238,7 +239,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { } else if (unitOne.state == UnitStateHealthy && unitTwo.state == UnitStateHealthy) || (unitOne.state == UnitStateHealthy && unitTwo.state == UnitStateStopping) { // stop second input return &proto.CheckinExpected{ - Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, + Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, + FeaturesIdx: 1, Units: []*proto.UnitExpected{ { Id: unitOne.id, @@ -261,7 +263,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { } else if unitOne.state == UnitStateHealthy && unitTwo.state == UnitStateStopped { // input stopped, remove the unit return &proto.CheckinExpected{ - Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, + Features: &proto.Features{Fqdn: &proto.FQDNFeature{Enabled: wantFQDN}}, + FeaturesIdx: 1, Units: []*proto.UnitExpected{ { Id: unitOne.id, @@ -373,7 +376,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { })) assert.Equal(t, wantFQDN, gotFQDN) - assert.Contains(t, gotTriggers, TriggeredFeatureChange) + assert.Equal(t, gotTriggers&TriggeredFeatureChange, TriggeredFeatureChange) assert.Equal(t, UnitStateHealthy, unitOne.state) assert.Equal(t, "Healthy", unitOne.stateMsg) assert.Equal(t, UnitStateStopped, unitTwo.state) From d8975ea13720e4eba9f4647c0a0abc6e4f950afc Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Tue, 28 Feb 2023 22:58:08 +0100 Subject: [PATCH 29/40] add GoString and don't send nil FeatureFlags --- pkg/client/client_v2.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index abfd310..6f6a5b6 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -86,6 +86,8 @@ func (t Trigger) String() string { return strings.Join(triggers, ", ") } +func (t Trigger) GoString() string { return t.String() } + // String returns a string representation for the unit changed type. func (t UnitChangedType) String() string { switch t { @@ -100,6 +102,10 @@ func (t UnitChangedType) String() string { return "unknown" } +func (t UnitChangedType) GoString() string { + return t.String() +} + // UnitChanged is what is sent over the UnitChanged channel any time a change happens: // - a unit is added, modified, or removed // - a feature changes @@ -463,10 +469,13 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { c.units = append(c.units, unit) changed := UnitChanged{ - Type: UnitChangedAdded, - Unit: unit, - Triggers: TriggeredFeatureChange, - Features: expected.Features, + Type: UnitChangedAdded, + Unit: unit, + } + + if expected.Features != nil { + changed.Triggers = TriggeredFeatureChange + changed.Features = expected.Features } c.changesCh <- changed From 56d8b4a5f83ef263bc3f8336fd02e0603623fc0b Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Wed, 1 Mar 2023 21:15:06 +0100 Subject: [PATCH 30/40] . --- pkg/client/client_v2.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 6f6a5b6..06d6e8b 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -501,7 +501,8 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { if unit.featuresIdx != expected.FeaturesIdx { unit.featuresIdx = expected.FeaturesIdx - if !gproto.Equal(unit.features, expected.Features) { + if expected.Features != nil && + !gproto.Equal(unit.features, expected.Features) { unit.features = expected.Features changed.Features = expected.Features changed.Triggers |= TriggeredFeatureChange From acba3c0b08cdb2b3d5c957b99f18a14a21bf38a1 Mon Sep 17 00:00:00 2001 From: Anderson Queiroz Date: Wed, 1 Mar 2023 22:50:25 +0100 Subject: [PATCH 31/40] making linter happy --- pkg/client/client_v2.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 06d6e8b..794a75a 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -86,6 +86,7 @@ func (t Trigger) String() string { return strings.Join(triggers, ", ") } +// GoString is the same as String, but for the %#v format. func (t Trigger) GoString() string { return t.String() } // String returns a string representation for the unit changed type. @@ -102,6 +103,7 @@ func (t UnitChangedType) String() string { return "unknown" } +// GoString is the same as String, but for the %#v format. func (t UnitChangedType) GoString() string { return t.String() } From 1bb9fcf5511adf7debcf57c5d62db295d79e3e51 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Tue, 7 Mar 2023 00:44:36 -0500 Subject: [PATCH 32/40] Remove stringer setup from magefile --- magefile.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/magefile.go b/magefile.go index 45f39e2..7a1464e 100644 --- a/magefile.go +++ b/magefile.go @@ -22,7 +22,6 @@ const ( goLicenserRepo = "github.com/elastic/go-licenser" goProtocGenGo = "google.golang.org/protobuf/cmd/protoc-gen-go@v1.28" goProtocGenGoGRPC = "google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2" - stringerRepo = "golang.org/x/tools/cmd/stringer@v0.5.0" ) // Aliases for commands required by master makefile @@ -56,14 +55,9 @@ func (Prepare) InstallGoLint() error { return GoGet(goLintRepo) } -// InstallStringer install go stringer to generate String methods for constants. -func (Prepare) InstallStringer() error { - return GoInstall(stringerRepo) -} - // All runs prepare:installGoLicenser, prepare:installGoLint and prepare:installGoLint. func (Prepare) All() { - mg.SerialDeps(Prepare.InstallGoLicenser, Prepare.InstallGoLint, Prepare.InstallStringer) + mg.SerialDeps(Prepare.InstallGoLicenser, Prepare.InstallGoLint) } // Prepare installs the required GRPC tools for generation to occur. From b9b4996a42cd912464e9d287c0ebf91ef528f966 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Tue, 7 Mar 2023 13:14:43 -0500 Subject: [PATCH 33/40] Fixing rebase errors --- pkg/client/client_v2.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 794a75a..b139e93 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -487,13 +487,7 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { UnitState(agentUnit.State), UnitLogLevel(agentUnit.LogLevel), agentUnit.Config, - agentUnit.ConfigStateIdx) { - - changed := UnitChanged{ - Triggers: triggers, - Type: UnitChangedModified, - Unit: unit, - } + agentUnit.ConfigStateIdx) changed := UnitChanged{ Triggers: triggers, From 09474efd7d87ba0e69c9916f0175f1820ed5496b Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Tue, 7 Mar 2023 13:17:36 -0500 Subject: [PATCH 34/40] Fixing duplicate mention in comment --- magefile.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/magefile.go b/magefile.go index 7a1464e..e6b684a 100644 --- a/magefile.go +++ b/magefile.go @@ -55,7 +55,7 @@ func (Prepare) InstallGoLint() error { return GoGet(goLintRepo) } -// All runs prepare:installGoLicenser, prepare:installGoLint and prepare:installGoLint. +// All runs prepare:installGoLicenser and prepare:installGoLint. func (Prepare) All() { mg.SerialDeps(Prepare.InstallGoLicenser, Prepare.InstallGoLint) } From ee7eef805d30082b5e421a86f6e9fc994f1c3cbc Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 8 Mar 2023 13:04:21 -0500 Subject: [PATCH 35/40] Pass unit features to unit constructor --- pkg/client/client_v2.go | 1 + pkg/client/client_v2_test.go | 4 ++-- pkg/client/unit.go | 5 ++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index b139e93..bc0af7e 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -467,6 +467,7 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { UnitLogLevel(agentUnit.LogLevel), agentUnit.Config, agentUnit.ConfigStateIdx, + expected.Features, c) c.units = append(c.units, unit) diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index 6030fb9..6a2dd80 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -197,8 +197,8 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { var m sync.Mutex token := mock.NewID() connected := false - unitOne := newUnit(mock.NewID(), UnitTypeOutput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) - unitTwo := newUnit(mock.NewID(), UnitTypeInput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil) + unitOne := newUnit(mock.NewID(), UnitTypeOutput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil, nil) + unitTwo := newUnit(mock.NewID(), UnitTypeInput, UnitStateStarting, UnitLogLevelInfo, nil, 0, nil, nil) wantFQDN := true srv := mock.StubServerV2{ CheckinV2Impl: func(observed *proto.CheckinObserved) *proto.CheckinExpected { diff --git a/pkg/client/unit.go b/pkg/client/unit.go index 8fad072..6cc81ad 100644 --- a/pkg/client/unit.go +++ b/pkg/client/unit.go @@ -329,6 +329,7 @@ func newUnit( logLevel UnitLogLevel, cfg *proto.UnitExpectedConfig, cfgIdx uint64, + features *proto.Features, client *clientV2) *Unit { unit := Unit{ @@ -338,6 +339,7 @@ func newUnit( configIdx: cfgIdx, expectedState: exp, logLevel: logLevel, + features: features, state: UnitStateStarting, stateMsg: "Starting", client: client, @@ -345,8 +347,5 @@ func newUnit( diagHooks: make(map[string]diagHook), } - if client != nil { - unit.features = client.features - } return &unit } From 29534aa8504df081e17cfd51d3dfc975eb4a4224 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 8 Mar 2023 13:12:55 -0500 Subject: [PATCH 36/40] Remove features information from client --- pkg/client/client_v2.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index bc0af7e..dc44662 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -188,9 +188,6 @@ type clientV2 struct { kickSendObservedCh chan struct{} errCh chan error changesCh chan UnitChanged - featuresMu sync.Mutex - features *proto.Features - featuresIdx uint64 unitsMu sync.RWMutex units []*Unit @@ -217,7 +214,6 @@ func NewV2(target string, token string, versionInfo VersionInfo, opts ...grpc.Di changesCh: make(chan UnitChanged), diagHooks: make(map[string]diagHook), minCheckTimeout: CheckinMinimumTimeout, - features: &proto.Features{Fqdn: &proto.FQDNFeature{}}, } c.registerDefaultDiagnostics() return c @@ -428,11 +424,6 @@ func (c *clientV2) sync(expected *proto.CheckinExpected) { c.agentInfoMu.Unlock() } - if expected.Features != nil { - c.features = expected.Features - c.featuresIdx = expected.FeaturesIdx - } - c.syncUnits(expected) } From 02662bf293e1428b5daac2aa3531691721a59908 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 8 Mar 2023 14:10:45 -0500 Subject: [PATCH 37/40] Remove features from UnitChanged as they are already part of Unit inside UnitChanged --- pkg/client/client_v2.go | 18 +++--------------- pkg/client/unit.go | 11 +++++++++++ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index dc44662..4bd9b50 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -17,7 +17,6 @@ import ( "time" "google.golang.org/grpc" - gproto "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/timestamppb" "github.com/elastic/elastic-agent-client/v7/pkg/proto" @@ -116,8 +115,6 @@ type UnitChanged struct { Triggers Trigger // Unit is any change in a unit. Unit *Unit - // Features are all the feature flags and their configs. - Features *proto.Features } // AgentInfo is the information about the running Elastic Agent that the client is connected to. @@ -469,7 +466,6 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { if expected.Features != nil { changed.Triggers = TriggeredFeatureChange - changed.Features = expected.Features } c.changesCh <- changed @@ -478,6 +474,8 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { triggers := unit.updateState( UnitState(agentUnit.State), UnitLogLevel(agentUnit.LogLevel), + expected.FeaturesIdx, + expected.Features, agentUnit.Config, agentUnit.ConfigStateIdx) @@ -487,17 +485,7 @@ func (c *clientV2) syncUnits(expected *proto.CheckinExpected) { Unit: unit, } - if unit.featuresIdx != expected.FeaturesIdx { - unit.featuresIdx = expected.FeaturesIdx - if expected.Features != nil && - !gproto.Equal(unit.features, expected.Features) { - unit.features = expected.Features - changed.Features = expected.Features - changed.Triggers |= TriggeredFeatureChange - } - } - - if changed.Triggers > 0 { // a.k.a something changed + if changed.Triggers > TriggeredNothing { // a.k.a something changed c.changesCh <- changed } } diff --git a/pkg/client/unit.go b/pkg/client/unit.go index 6cc81ad..895e778 100644 --- a/pkg/client/unit.go +++ b/pkg/client/unit.go @@ -276,6 +276,8 @@ func (u *Unit) RegisterDiagnosticHook(name string, description string, filename func (u *Unit) updateState( exp UnitState, logLevel UnitLogLevel, + expFeaturesIdx uint64, + expFeatures *proto.Features, cfg *proto.UnitExpectedConfig, cfgIdx uint64) Trigger { @@ -293,6 +295,15 @@ func (u *Unit) updateState( triggers |= TriggeredLogLevelChange } + if u.featuresIdx != expFeaturesIdx { + u.featuresIdx = expFeaturesIdx + if expFeatures != nil && + !gproto.Equal(u.features, expFeatures) { + u.features = expFeatures + triggers |= TriggeredFeatureChange + } + } + if u.configIdx != cfgIdx { u.configIdx = cfgIdx if !gproto.Equal(u.config.GetSource(), cfg.GetSource()) { From d7d45d93d0dad8f65d6b7da921d48744214b0157 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Wed, 8 Mar 2023 14:19:52 -0500 Subject: [PATCH 38/40] Fixing up tests --- pkg/client/client_v2_test.go | 6 +++--- pkg/client/unit_test.go | 15 +++++++++++---- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/pkg/client/client_v2_test.go b/pkg/client/client_v2_test.go index 6a2dd80..94a362e 100644 --- a/pkg/client/client_v2_test.go +++ b/pkg/client/client_v2_test.go @@ -137,7 +137,7 @@ func TestClientV2_Checkin_Initial(t *testing.T) { return case change := <-validClient.UnitChanges(): if change.Triggers&TriggeredFeatureChange == TriggeredFeatureChange { - gotFQDN = change.Features.Fqdn.Enabled + gotFQDN = change.Unit.Expected().Features.Fqdn.Enabled } switch change.Type { @@ -312,7 +312,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { return case change := <-client.UnitChanges(): if change.Triggers&TriggeredFeatureChange == TriggeredFeatureChange { - gotFQDN = change.Features.Fqdn.Enabled + gotFQDN = change.Unit.Expected().Features.Fqdn.Enabled } switch change.Type { @@ -325,7 +325,7 @@ func TestClientV2_Checkin_UnitState(t *testing.T) { }) case UnitChangedModified: expected := change.Unit.Expected() - gotFQDN = change.Features.Fqdn.Enabled + gotFQDN = expected.Features.Fqdn.Enabled gotTriggers = change.Triggers if expected.State == UnitStateStopped { diff --git a/pkg/client/unit_test.go b/pkg/client/unit_test.go index 1e5a4bc..f4d12b0 100644 --- a/pkg/client/unit_test.go +++ b/pkg/client/unit_test.go @@ -17,6 +17,8 @@ import ( var defaultTest = Unit{ expectedState: UnitStateHealthy, logLevel: UnitLogLevelDebug, + featuresIdx: 0, + features: nil, configIdx: 1, config: &proto.UnitExpectedConfig{}, } @@ -37,7 +39,7 @@ func TestUnitUpdateWithSameMap(t *testing.T) { require.NoError(t, err) // This should return TriggeredNothing, as the two underlying maps in `source` are the same - got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, 0, nil, newUnit, 2) assert.Equal(t, TriggeredNothing, got) } @@ -57,16 +59,21 @@ func TestUnitUpdateWithNewMap(t *testing.T) { require.NoError(t, err) // This should return TriggeredConfigChange, as we have an actually new map - got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, newUnit, 2) + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelDebug, 0, nil, newUnit, 2) assert.Equal(t, TriggeredConfigChange, got) } func TestUnitUpdateLog(t *testing.T) { - got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, 0, nil, &proto.UnitExpectedConfig{}, 2) assert.Equal(t, TriggeredLogLevelChange, got) } +func TestUnitUpdateFeatureFlags(t *testing.T) { + got := defaultTest.updateState(UnitStateHealthy, UnitLogLevelInfo, 1, &proto.Features{}, &proto.UnitExpectedConfig{}, 2) + assert.Equal(t, TriggeredFeatureChange, got) +} + func TestUnitUpdateState(t *testing.T) { - got := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, &proto.UnitExpectedConfig{}, 2) + got := defaultTest.updateState(UnitStateStopped, UnitLogLevelInfo, 1, &proto.Features{}, &proto.UnitExpectedConfig{}, 2) assert.Equal(t, TriggeredStateChange, got) } From b70d208d6143e7691bf3c91ae28dd0617e46ff57 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Thu, 9 Mar 2023 06:45:04 -0500 Subject: [PATCH 39/40] Start UnitChangedType constants' numbering at 1 --- pkg/client/client_v2.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index 4bd9b50..ffadf23 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -32,7 +32,7 @@ type ( const ( // UnitChangedAdded is when a new unit is added. - UnitChangedAdded UnitChangedType = iota // unit_added + UnitChangedAdded UnitChangedType = iota + 1 // unit_added // UnitChangedModified is when an existing unit is modified. UnitChangedModified // unit_modified // UnitChangedRemoved is when an existing unit is removed. From 5cfba1d93da082b701cd096ea5a07133030b0092 Mon Sep 17 00:00:00 2001 From: Shaunak Kashyap Date: Thu, 9 Mar 2023 06:50:09 -0500 Subject: [PATCH 40/40] Add comments about Trigger values being bitmasks --- pkg/client/client_v2.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkg/client/client_v2.go b/pkg/client/client_v2.go index ffadf23..a96feb3 100644 --- a/pkg/client/client_v2.go +++ b/pkg/client/client_v2.go @@ -26,7 +26,8 @@ import ( type ( // UnitChangedType defines types for when units are adjusted. UnitChangedType int - // Trigger indicates what triggered a change + // Trigger indicates what triggered a change. This is a bitmask as + // a unit change can have one or more triggers that caused the change. Trigger uint ) @@ -45,12 +46,16 @@ const ( TriggeredNothing Trigger = 0 // nothing_triggered // TriggeredConfigChange indicates a change in config triggered the change. + // This constant represents a single bit in a bitmask. @see Trigger. TriggeredConfigChange Trigger = 1 << iota // config_change_triggered // TriggeredFeatureChange indicates a change in the features triggered the change. + // This constant represents a single bit in a bitmask. @see Trigger. TriggeredFeatureChange // feature_change_triggered // TriggeredLogLevelChange indicates a change the log level triggered the change. + // This constant represents a single bit in a bitmask. @see Trigger. TriggeredLogLevelChange // log_level_triggered // TriggeredStateChange indicates when a unit state has ganged. + // This constant represents a single bit in a bitmask. @see Trigger. TriggeredStateChange // state_change_triggered )