diff --git a/agent/client/client.go b/agent/client/client.go index 5058598862..8a1829b7b7 100644 --- a/agent/client/client.go +++ b/agent/client/client.go @@ -49,6 +49,7 @@ type Client struct { pollListener func(context.Context, *proto.PollingRequest) error shutdownListener func(context.Context, *proto.ShutdownRequest) error dataStoreConnectionListener func(context.Context, *proto.DataStoreConnectionTestRequest) error + otlpConnectionTestListener func(context.Context, *proto.OTLPConnectionTestRequest) error } func (c *Client) Start(ctx context.Context) error { @@ -92,6 +93,11 @@ func (c *Client) Start(ctx context.Context) error { return err } + err = c.startOTLPConnectionTestListener(ctx) + if err != nil { + return err + } + err = c.startHearthBeat(ctx) if err != nil { return err @@ -134,6 +140,10 @@ func (c *Client) OnPollingRequest(listener func(context.Context, *proto.PollingR c.pollListener = listener } +func (c *Client) OnOTLPConnectionTest(listener func(context.Context, *proto.OTLPConnectionTestRequest) error) { + c.otlpConnectionTestListener = listener +} + func (c *Client) OnConnectionClosed(listener func(context.Context, *proto.ShutdownRequest) error) { c.shutdownListener = listener } diff --git a/agent/client/mocks/grpc_server.go b/agent/client/mocks/grpc_server.go index f7ca894d1a..ca6dca7b38 100644 --- a/agent/client/mocks/grpc_server.go +++ b/agent/client/mocks/grpc_server.go @@ -15,24 +15,28 @@ import ( type GrpcServerMock struct { proto.UnimplementedOrchestratorServer - port int - triggerChannel chan *proto.TriggerRequest - pollingChannel chan *proto.PollingRequest - terminationChannel chan *proto.ShutdownRequest - dataStoreTestChannel chan *proto.DataStoreConnectionTestRequest - - lastTriggerResponse *proto.TriggerResponse - lastPollingResponse *proto.PollingResponse + port int + triggerChannel chan *proto.TriggerRequest + pollingChannel chan *proto.PollingRequest + otlpConnectionTestChannel chan *proto.OTLPConnectionTestRequest + terminationChannel chan *proto.ShutdownRequest + dataStoreTestChannel chan *proto.DataStoreConnectionTestRequest + + lastTriggerResponse *proto.TriggerResponse + lastPollingResponse *proto.PollingResponse + lastOtlpConnectionResponse *proto.OTLPConnectionTestResponse + lastDataStoreConnectionResponse *proto.DataStoreConnectionTestResponse server *grpc.Server } func NewGrpcServer() *GrpcServerMock { server := &GrpcServerMock{ - triggerChannel: make(chan *proto.TriggerRequest), - pollingChannel: make(chan *proto.PollingRequest), - terminationChannel: make(chan *proto.ShutdownRequest), - dataStoreTestChannel: make(chan *proto.DataStoreConnectionTestRequest), + triggerChannel: make(chan *proto.TriggerRequest), + pollingChannel: make(chan *proto.PollingRequest), + terminationChannel: make(chan *proto.ShutdownRequest), + dataStoreTestChannel: make(chan *proto.DataStoreConnectionTestRequest), + otlpConnectionTestChannel: make(chan *proto.OTLPConnectionTestRequest), } var wg sync.WaitGroup wg.Add(1) @@ -148,6 +152,38 @@ func (s *GrpcServerMock) RegisterDataStoreConnectionTestAgent(id *proto.AgentIde } } +func (s *GrpcServerMock) RegisterOTLPConnectionTestListener(id *proto.AgentIdentification, stream proto.Orchestrator_RegisterOTLPConnectionTestListenerServer) error { + if id.Token != "token" { + return fmt.Errorf("could not validate token") + } + + for { + testRequest := <-s.otlpConnectionTestChannel + err := stream.Send(testRequest) + if err != nil { + log.Println("could not send polling request to agent: %w", err) + } + } +} + +func (s *GrpcServerMock) SendOTLPConnectionTestResult(ctx context.Context, result *proto.OTLPConnectionTestResponse) (*proto.Empty, error) { + if result.AgentIdentification == nil || result.AgentIdentification.Token != "token" { + return nil, fmt.Errorf("could not validate token") + } + + s.lastOtlpConnectionResponse = result + return &proto.Empty{}, nil +} + +func (s *GrpcServerMock) SendDataStoreConnectionTestResult(ctx context.Context, result *proto.DataStoreConnectionTestResponse) (*proto.Empty, error) { + if result.AgentIdentification == nil || result.AgentIdentification.Token != "token" { + return nil, fmt.Errorf("could not validate token") + } + + s.lastDataStoreConnectionResponse = result + return &proto.Empty{}, nil +} + func (s *GrpcServerMock) SendPolledSpans(ctx context.Context, result *proto.PollingResponse) (*proto.Empty, error) { if result.AgentIdentification == nil || result.AgentIdentification.Token != "token" { return nil, fmt.Errorf("could not validate token") @@ -177,6 +213,14 @@ func (s *GrpcServerMock) SendPollingRequest(request *proto.PollingRequest) { s.pollingChannel <- request } +func (s *GrpcServerMock) SendDataStoreConnectionTestRequest(request *proto.DataStoreConnectionTestRequest) { + s.dataStoreTestChannel <- request +} + +func (s *GrpcServerMock) SendOTLPConnectionTestRequest(request *proto.OTLPConnectionTestRequest) { + s.otlpConnectionTestChannel <- request +} + func (s *GrpcServerMock) GetLastTriggerResponse() *proto.TriggerResponse { return s.lastTriggerResponse } @@ -185,6 +229,14 @@ func (s *GrpcServerMock) GetLastPollingResponse() *proto.PollingResponse { return s.lastPollingResponse } +func (s *GrpcServerMock) GetLastOTLPConnectionResponse() *proto.OTLPConnectionTestResponse { + return s.lastOtlpConnectionResponse +} + +func (s *GrpcServerMock) GetLastDataStoreConnectionResponse() *proto.DataStoreConnectionTestResponse { + return s.lastDataStoreConnectionResponse +} + func (s *GrpcServerMock) TerminateConnection(reason string) { s.terminationChannel <- &proto.ShutdownRequest{ Reason: reason, diff --git a/agent/client/workflow_listen_for_ds_connection_tests_test.go b/agent/client/workflow_listen_for_ds_connection_tests_test.go new file mode 100644 index 0000000000..7aa5090b83 --- /dev/null +++ b/agent/client/workflow_listen_for_ds_connection_tests_test.go @@ -0,0 +1,42 @@ +package client_test + +import ( + "context" + "testing" + "time" + + "github.com/kubeshop/tracetest/agent/client" + "github.com/kubeshop/tracetest/agent/client/mocks" + "github.com/kubeshop/tracetest/agent/proto" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestDataStoreConnectionTestWorkflow(t *testing.T) { + server := mocks.NewGrpcServer() + defer server.Stop() + + client, err := client.Connect(context.Background(), server.Addr()) + require.NoError(t, err) + + var receivedConnectionTestRequest *proto.DataStoreConnectionTestRequest + client.OnDataStoreTestConnectionRequest(func(ctx context.Context, otr *proto.DataStoreConnectionTestRequest) error { + receivedConnectionTestRequest = otr + return nil + }) + + err = client.Start(context.Background()) + require.NoError(t, err) + + connectionTestRequest := &proto.DataStoreConnectionTestRequest{ + RequestID: "request-id", + } + + server.SendDataStoreConnectionTestRequest(connectionTestRequest) + + // ensures there's enough time for networking between server and client + time.Sleep(1 * time.Second) + + assert.NotNil(t, receivedConnectionTestRequest) + assert.Equal(t, connectionTestRequest.RequestID, "request-id") +} diff --git a/agent/client/workflow_listen_for_otlp_connection_tests.go b/agent/client/workflow_listen_for_otlp_connection_tests.go new file mode 100644 index 0000000000..04b534a5db --- /dev/null +++ b/agent/client/workflow_listen_for_otlp_connection_tests.go @@ -0,0 +1,47 @@ +package client + +import ( + "context" + "fmt" + "log" + "time" + + "github.com/kubeshop/tracetest/agent/proto" +) + +func (c *Client) startOTLPConnectionTestListener(ctx context.Context) error { + client := proto.NewOrchestratorClient(c.conn) + + stream, err := client.RegisterOTLPConnectionTestListener(ctx, c.sessionConfig.AgentIdentification) + if err != nil { + return fmt.Errorf("could not open agent stream: %w", err) + } + + go func() { + for { + req := proto.OTLPConnectionTestRequest{} + err := stream.RecvMsg(&req) + if isEndOfFileError(err) || isCancelledError(err) { + return + } + + reconnected, err := c.handleDisconnectionError(err) + if reconnected { + return + } + + if err != nil { + log.Println("could not get message from otlp connection stream: %w", err) + time.Sleep(1 * time.Second) + continue + } + + // TODO: Get ctx from request + err = c.otlpConnectionTestListener(context.Background(), &req) + if err != nil { + fmt.Println(err.Error()) + } + } + }() + return nil +} diff --git a/agent/client/workflow_listen_for_otlp_connection_tests_test.go b/agent/client/workflow_listen_for_otlp_connection_tests_test.go new file mode 100644 index 0000000000..9041a13457 --- /dev/null +++ b/agent/client/workflow_listen_for_otlp_connection_tests_test.go @@ -0,0 +1,42 @@ +package client_test + +import ( + "context" + "testing" + "time" + + "github.com/kubeshop/tracetest/agent/client" + "github.com/kubeshop/tracetest/agent/client/mocks" + "github.com/kubeshop/tracetest/agent/proto" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestOtlpConnectionTestWorkflow(t *testing.T) { + server := mocks.NewGrpcServer() + defer server.Stop() + + client, err := client.Connect(context.Background(), server.Addr()) + require.NoError(t, err) + + var receivedConnectionTestRequest *proto.OTLPConnectionTestRequest + client.OnOTLPConnectionTest(func(ctx context.Context, otr *proto.OTLPConnectionTestRequest) error { + receivedConnectionTestRequest = otr + return nil + }) + + err = client.Start(context.Background()) + require.NoError(t, err) + + connectionTestRequest := &proto.OTLPConnectionTestRequest{ + RequestID: "request-id", + } + + server.SendOTLPConnectionTestRequest(connectionTestRequest) + + // ensures there's enough time for networking between server and client + time.Sleep(1 * time.Second) + + assert.NotNil(t, receivedConnectionTestRequest) + assert.Equal(t, connectionTestRequest.RequestID, "request-id") +} diff --git a/agent/client/workflow_send_ds_connection_result.go b/agent/client/workflow_send_ds_connection_result.go index b6cc546e17..9f6f45e8f5 100644 --- a/agent/client/workflow_send_ds_connection_result.go +++ b/agent/client/workflow_send_ds_connection_result.go @@ -14,7 +14,7 @@ func (c *Client) SendDataStoreConnectionResult(ctx context.Context, response *pr _, err := client.SendDataStoreConnectionTestResult(ctx, response) if err != nil { - return fmt.Errorf("could not send data store connection result request: %w", err) + return fmt.Errorf("could not send otlp connection result request: %w", err) } return nil diff --git a/agent/client/workflow_send_ds_connection_result_test.go b/agent/client/workflow_send_ds_connection_result_test.go new file mode 100644 index 0000000000..648a714c08 --- /dev/null +++ b/agent/client/workflow_send_ds_connection_result_test.go @@ -0,0 +1,43 @@ +package client_test + +import ( + "context" + "testing" + + "github.com/kubeshop/tracetest/agent/client" + "github.com/kubeshop/tracetest/agent/client/mocks" + "github.com/kubeshop/tracetest/agent/proto" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestDataStoreConnectionResult(t *testing.T) { + server := mocks.NewGrpcServer() + defer server.Stop() + + client, err := client.Connect(context.Background(), server.Addr()) + require.NoError(t, err) + + err = client.Start(context.Background()) + require.NoError(t, err) + + result := &proto.DataStoreConnectionTestResponse{ + RequestID: "request-id", + AgentIdentification: &proto.AgentIdentification{}, + Successful: true, + Steps: &proto.DataStoreConnectionTestSteps{ + PortCheck: &proto.DataStoreConnectionTestStep{ + Passed: true, + }, + }, + } + + err = client.SendDataStoreConnectionResult(context.Background(), result) + require.NoError(t, err) + + receivedResponse := server.GetLastDataStoreConnectionResponse() + + assert.Equal(t, result.RequestID, receivedResponse.RequestID) + assert.True(t, result.Successful) + assert.True(t, result.Steps.PortCheck.Passed) +} diff --git a/agent/client/workflow_send_otlp_connection_result.go b/agent/client/workflow_send_otlp_connection_result.go new file mode 100644 index 0000000000..0ac65017d7 --- /dev/null +++ b/agent/client/workflow_send_otlp_connection_result.go @@ -0,0 +1,21 @@ +package client + +import ( + "context" + "fmt" + + "github.com/kubeshop/tracetest/agent/proto" +) + +func (c *Client) SendOTLPConnectionResult(ctx context.Context, response *proto.OTLPConnectionTestResponse) error { + client := proto.NewOrchestratorClient(c.conn) + + response.AgentIdentification = c.sessionConfig.AgentIdentification + + _, err := client.SendOTLPConnectionTestResult(ctx, response) + if err != nil { + return fmt.Errorf("could not send otlp connection result request: %w", err) + } + + return nil +} diff --git a/agent/client/workflow_send_otlp_connection_result_test.go b/agent/client/workflow_send_otlp_connection_result_test.go new file mode 100644 index 0000000000..9fdd739ddf --- /dev/null +++ b/agent/client/workflow_send_otlp_connection_result_test.go @@ -0,0 +1,41 @@ +package client_test + +import ( + "context" + "testing" + "time" + + "github.com/kubeshop/tracetest/agent/client" + "github.com/kubeshop/tracetest/agent/client/mocks" + "github.com/kubeshop/tracetest/agent/proto" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestOTLPConnectionResultTrace(t *testing.T) { + server := mocks.NewGrpcServer() + defer server.Stop() + + client, err := client.Connect(context.Background(), server.Addr()) + require.NoError(t, err) + + err = client.Start(context.Background()) + require.NoError(t, err) + + now := time.Now() + result := &proto.OTLPConnectionTestResponse{ + RequestID: "request-id", + AgentIdentification: &proto.AgentIdentification{}, + SpanCount: 10, + LastSpanTimestamp: now.UnixMilli(), + } + + err = client.SendOTLPConnectionResult(context.Background(), result) + require.NoError(t, err) + + receivedResponse := server.GetLastOTLPConnectionResponse() + + assert.Equal(t, result.RequestID, receivedResponse.RequestID) + assert.Equal(t, result.SpanCount, receivedResponse.SpanCount) + assert.Equal(t, result.LastSpanTimestamp, receivedResponse.LastSpanTimestamp) +} diff --git a/agent/collector/collector.go b/agent/collector/collector.go index 5328b17f1a..7989a728d3 100644 --- a/agent/collector/collector.go +++ b/agent/collector/collector.go @@ -51,6 +51,15 @@ func WithObserver(observer event.Observer) CollectorOption { type collector struct { grpcServer stoppable httpServer stoppable + + ingester ingester +} + +type Collector interface { + stoppable + + Statistics() Statistics + ResetStatistics() } // Stop implements stoppable. @@ -59,7 +68,15 @@ func (c *collector) Stop() { c.httpServer.Stop() } -func Start(ctx context.Context, config Config, tracer trace.Tracer, opts ...CollectorOption) (stoppable, error) { +func (c *collector) Statistics() Statistics { + return c.ingester.Statistics() +} + +func (c *collector) ResetStatistics() { + c.ingester.ResetStatistics() +} + +func Start(ctx context.Context, config Config, tracer trace.Tracer, opts ...CollectorOption) (Collector, error) { ingesterConfig := remoteIngesterConfig{ URL: config.RemoteServerURL, Token: config.RemoteServerToken, @@ -98,7 +115,7 @@ func Start(ctx context.Context, config Config, tracer trace.Tracer, opts ...Coll return nil, fmt.Errorf("could not start HTTP OTLP listener: %w", err) } - return &collector{grpcServer: grpcServer, httpServer: httpServer}, nil + return &collector{grpcServer: grpcServer, httpServer: httpServer, ingester: ingester}, nil } func onProcessTermination(callback func()) { diff --git a/agent/collector/collector_test.go b/agent/collector/collector_test.go index 18496d12bb..6c948d6d04 100644 --- a/agent/collector/collector_test.go +++ b/agent/collector/collector_test.go @@ -56,6 +56,11 @@ func TestCollector(t *testing.T) { // Now after waiting the timeout, it should contain all spans time.Sleep(4 * time.Second) assert.Len(t, targetServer.ReceivedSpans(), 10) + assert.Equal(t, int64(10), c.Statistics().SpanCount) + + c.ResetStatistics() + + assert.Equal(t, int64(0), c.Statistics().SpanCount) } func TestCollectorWatchingSpansFromTest(t *testing.T) { diff --git a/agent/collector/ingester.go b/agent/collector/ingester.go index 682c49de9c..56b98e8704 100644 --- a/agent/collector/ingester.go +++ b/agent/collector/ingester.go @@ -21,7 +21,15 @@ type stoppable interface { Stop() } -func newForwardIngester(ctx context.Context, batchTimeout time.Duration, cfg remoteIngesterConfig, startRemoteServer bool) (otlp.Ingester, error) { +type ingester interface { + otlp.Ingester + stoppable + + Statistics() Statistics + ResetStatistics() +} + +func newForwardIngester(ctx context.Context, batchTimeout time.Duration, cfg remoteIngesterConfig, startRemoteServer bool) (ingester, error) { ingester := &forwardIngester{ BatchTimeout: batchTimeout, RemoteIngester: cfg, @@ -43,6 +51,11 @@ func newForwardIngester(ctx context.Context, batchTimeout time.Duration, cfg rem return ingester, nil } +type Statistics struct { + SpanCount int64 + LastSpanTimestamp time.Time +} + // forwardIngester forwards all incoming spans to a remote ingester. It also batches those // spans to reduce network traffic. type forwardIngester struct { @@ -53,6 +66,8 @@ type forwardIngester struct { done chan bool traceCache TraceCache logger *zap.Logger + + statistics Statistics } type remoteIngesterConfig struct { @@ -69,11 +84,24 @@ type buffer struct { spans []*v1.ResourceSpans } +func (i *forwardIngester) Statistics() Statistics { + return i.statistics +} + +func (i *forwardIngester) ResetStatistics() { + i.statistics = Statistics{} +} + func (i *forwardIngester) Ingest(ctx context.Context, request *pb.ExportTraceServiceRequest, requestType otlp.RequestType) (*pb.ExportTraceServiceResponse, error) { + spanCount := countSpans(request) i.buffer.mutex.Lock() + i.buffer.spans = append(i.buffer.spans, request.ResourceSpans...) + i.statistics.SpanCount += int64(spanCount) + i.statistics.LastSpanTimestamp = time.Now() + i.buffer.mutex.Unlock() - i.logger.Debug("received spans", zap.Int("count", len(request.ResourceSpans))) + i.logger.Debug("received spans", zap.Int("count", spanCount)) if i.traceCache != nil { i.logger.Debug("caching test spans") @@ -89,6 +117,17 @@ func (i *forwardIngester) Ingest(ctx context.Context, request *pb.ExportTraceSer }, nil } +func countSpans(request *pb.ExportTraceServiceRequest) int { + count := 0 + for _, resourceSpan := range request.ResourceSpans { + for _, scopeSpan := range resourceSpan.ScopeSpans { + count += len(scopeSpan.Spans) + } + } + + return count +} + func (i *forwardIngester) connectToRemoteServer(ctx context.Context) error { conn, err := grpc.DialContext(ctx, i.RemoteIngester.URL, grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { diff --git a/agent/proto/orchestrator.pb.go b/agent/proto/orchestrator.pb.go index 894c846b4b..0993deaa21 100644 --- a/agent/proto/orchestrator.pb.go +++ b/agent/proto/orchestrator.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v4.25.1 +// protoc v4.23.4 // source: proto/orchestrator.proto package proto @@ -1505,6 +1505,134 @@ func (x *Error) GetMessage() string { return "" } +type OTLPConnectionTestRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RequestID string `protobuf:"bytes,1,opt,name=requestID,proto3" json:"requestID,omitempty"` + // If set as true, the agent needs to reset the span counter and doesn't need to + // report the number of spans back to the server. + ResetCounter bool `protobuf:"varint,2,opt,name=resetCounter,proto3" json:"resetCounter,omitempty"` +} + +func (x *OTLPConnectionTestRequest) Reset() { + *x = OTLPConnectionTestRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_orchestrator_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OTLPConnectionTestRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OTLPConnectionTestRequest) ProtoMessage() {} + +func (x *OTLPConnectionTestRequest) ProtoReflect() protoreflect.Message { + mi := &file_proto_orchestrator_proto_msgTypes[24] + 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 OTLPConnectionTestRequest.ProtoReflect.Descriptor instead. +func (*OTLPConnectionTestRequest) Descriptor() ([]byte, []int) { + return file_proto_orchestrator_proto_rawDescGZIP(), []int{24} +} + +func (x *OTLPConnectionTestRequest) GetRequestID() string { + if x != nil { + return x.RequestID + } + return "" +} + +func (x *OTLPConnectionTestRequest) GetResetCounter() bool { + if x != nil { + return x.ResetCounter + } + return false +} + +type OTLPConnectionTestResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RequestID string `protobuf:"bytes,1,opt,name=requestID,proto3" json:"requestID,omitempty"` + AgentIdentification *AgentIdentification `protobuf:"bytes,2,opt,name=agentIdentification,proto3" json:"agentIdentification,omitempty"` + SpanCount int64 `protobuf:"varint,3,opt,name=spanCount,proto3" json:"spanCount,omitempty"` + LastSpanTimestamp int64 `protobuf:"varint,4,opt,name=lastSpanTimestamp,proto3" json:"lastSpanTimestamp,omitempty"` +} + +func (x *OTLPConnectionTestResponse) Reset() { + *x = OTLPConnectionTestResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_proto_orchestrator_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OTLPConnectionTestResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OTLPConnectionTestResponse) ProtoMessage() {} + +func (x *OTLPConnectionTestResponse) ProtoReflect() protoreflect.Message { + mi := &file_proto_orchestrator_proto_msgTypes[25] + 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 OTLPConnectionTestResponse.ProtoReflect.Descriptor instead. +func (*OTLPConnectionTestResponse) Descriptor() ([]byte, []int) { + return file_proto_orchestrator_proto_rawDescGZIP(), []int{25} +} + +func (x *OTLPConnectionTestResponse) GetRequestID() string { + if x != nil { + return x.RequestID + } + return "" +} + +func (x *OTLPConnectionTestResponse) GetAgentIdentification() *AgentIdentification { + if x != nil { + return x.AgentIdentification + } + return nil +} + +func (x *OTLPConnectionTestResponse) GetSpanCount() int64 { + if x != nil { + return x.SpanCount + } + return 0 +} + +func (x *OTLPConnectionTestResponse) GetLastSpanTimestamp() int64 { + if x != nil { + return x.LastSpanTimestamp + } + return 0 +} + type DataStoreConnectionTestRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1517,7 +1645,7 @@ type DataStoreConnectionTestRequest struct { func (x *DataStoreConnectionTestRequest) Reset() { *x = DataStoreConnectionTestRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[24] + mi := &file_proto_orchestrator_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1530,7 +1658,7 @@ func (x *DataStoreConnectionTestRequest) String() string { func (*DataStoreConnectionTestRequest) ProtoMessage() {} func (x *DataStoreConnectionTestRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[24] + mi := &file_proto_orchestrator_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1543,7 +1671,7 @@ func (x *DataStoreConnectionTestRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DataStoreConnectionTestRequest.ProtoReflect.Descriptor instead. func (*DataStoreConnectionTestRequest) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{24} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{26} } func (x *DataStoreConnectionTestRequest) GetRequestID() string { @@ -1574,7 +1702,7 @@ type DataStoreConnectionTestResponse struct { func (x *DataStoreConnectionTestResponse) Reset() { *x = DataStoreConnectionTestResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[25] + mi := &file_proto_orchestrator_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1587,7 +1715,7 @@ func (x *DataStoreConnectionTestResponse) String() string { func (*DataStoreConnectionTestResponse) ProtoMessage() {} func (x *DataStoreConnectionTestResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[25] + mi := &file_proto_orchestrator_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1600,7 +1728,7 @@ func (x *DataStoreConnectionTestResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DataStoreConnectionTestResponse.ProtoReflect.Descriptor instead. func (*DataStoreConnectionTestResponse) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{25} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{27} } func (x *DataStoreConnectionTestResponse) GetRequestID() string { @@ -1645,7 +1773,7 @@ type DataStoreConnectionTestSteps struct { func (x *DataStoreConnectionTestSteps) Reset() { *x = DataStoreConnectionTestSteps{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[26] + mi := &file_proto_orchestrator_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1658,7 +1786,7 @@ func (x *DataStoreConnectionTestSteps) String() string { func (*DataStoreConnectionTestSteps) ProtoMessage() {} func (x *DataStoreConnectionTestSteps) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[26] + mi := &file_proto_orchestrator_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1671,7 +1799,7 @@ func (x *DataStoreConnectionTestSteps) ProtoReflect() protoreflect.Message { // Deprecated: Use DataStoreConnectionTestSteps.ProtoReflect.Descriptor instead. func (*DataStoreConnectionTestSteps) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{26} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{28} } func (x *DataStoreConnectionTestSteps) GetPortCheck() *DataStoreConnectionTestStep { @@ -1716,7 +1844,7 @@ type DataStoreConnectionTestStep struct { func (x *DataStoreConnectionTestStep) Reset() { *x = DataStoreConnectionTestStep{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[27] + mi := &file_proto_orchestrator_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1729,7 +1857,7 @@ func (x *DataStoreConnectionTestStep) String() string { func (*DataStoreConnectionTestStep) ProtoMessage() {} func (x *DataStoreConnectionTestStep) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[27] + mi := &file_proto_orchestrator_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1742,7 +1870,7 @@ func (x *DataStoreConnectionTestStep) ProtoReflect() protoreflect.Message { // Deprecated: Use DataStoreConnectionTestStep.ProtoReflect.Descriptor instead. func (*DataStoreConnectionTestStep) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{27} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{29} } func (x *DataStoreConnectionTestStep) GetPassed() bool { @@ -1788,7 +1916,7 @@ type PollingRequest struct { func (x *PollingRequest) Reset() { *x = PollingRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[28] + mi := &file_proto_orchestrator_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1801,7 +1929,7 @@ func (x *PollingRequest) String() string { func (*PollingRequest) ProtoMessage() {} func (x *PollingRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[28] + mi := &file_proto_orchestrator_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1814,7 +1942,7 @@ func (x *PollingRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PollingRequest.ProtoReflect.Descriptor instead. func (*PollingRequest) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{28} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{30} } func (x *PollingRequest) GetRequestID() string { @@ -1871,7 +1999,7 @@ type DataStore struct { func (x *DataStore) Reset() { *x = DataStore{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[29] + mi := &file_proto_orchestrator_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1884,7 +2012,7 @@ func (x *DataStore) String() string { func (*DataStore) ProtoMessage() {} func (x *DataStore) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[29] + mi := &file_proto_orchestrator_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1897,7 +2025,7 @@ func (x *DataStore) ProtoReflect() protoreflect.Message { // Deprecated: Use DataStore.ProtoReflect.Descriptor instead. func (*DataStore) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{29} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{31} } func (x *DataStore) GetType() string { @@ -1974,7 +2102,7 @@ type JaegerConfig struct { func (x *JaegerConfig) Reset() { *x = JaegerConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[30] + mi := &file_proto_orchestrator_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1987,7 +2115,7 @@ func (x *JaegerConfig) String() string { func (*JaegerConfig) ProtoMessage() {} func (x *JaegerConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[30] + mi := &file_proto_orchestrator_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2000,7 +2128,7 @@ func (x *JaegerConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use JaegerConfig.ProtoReflect.Descriptor instead. func (*JaegerConfig) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{30} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{32} } func (x *JaegerConfig) GetGrpc() *GrpcClientSettings { @@ -2023,7 +2151,7 @@ type TempoConfig struct { func (x *TempoConfig) Reset() { *x = TempoConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[31] + mi := &file_proto_orchestrator_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2036,7 +2164,7 @@ func (x *TempoConfig) String() string { func (*TempoConfig) ProtoMessage() {} func (x *TempoConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[31] + mi := &file_proto_orchestrator_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2049,7 +2177,7 @@ func (x *TempoConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use TempoConfig.ProtoReflect.Descriptor instead. func (*TempoConfig) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{31} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{33} } func (x *TempoConfig) GetType() string { @@ -2089,7 +2217,7 @@ type ElasticConfig struct { func (x *ElasticConfig) Reset() { *x = ElasticConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[32] + mi := &file_proto_orchestrator_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2102,7 +2230,7 @@ func (x *ElasticConfig) String() string { func (*ElasticConfig) ProtoMessage() {} func (x *ElasticConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[32] + mi := &file_proto_orchestrator_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2115,7 +2243,7 @@ func (x *ElasticConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ElasticConfig.ProtoReflect.Descriptor instead. func (*ElasticConfig) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{32} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{34} } func (x *ElasticConfig) GetAddresses() []string { @@ -2172,7 +2300,7 @@ type SignalfxConfig struct { func (x *SignalfxConfig) Reset() { *x = SignalfxConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[33] + mi := &file_proto_orchestrator_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2185,7 +2313,7 @@ func (x *SignalfxConfig) String() string { func (*SignalfxConfig) ProtoMessage() {} func (x *SignalfxConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[33] + mi := &file_proto_orchestrator_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2198,7 +2326,7 @@ func (x *SignalfxConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SignalfxConfig.ProtoReflect.Descriptor instead. func (*SignalfxConfig) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{33} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{35} } func (x *SignalfxConfig) GetRealm() string { @@ -2230,7 +2358,7 @@ type AwsXRayConfig struct { func (x *AwsXRayConfig) Reset() { *x = AwsXRayConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[34] + mi := &file_proto_orchestrator_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2243,7 +2371,7 @@ func (x *AwsXRayConfig) String() string { func (*AwsXRayConfig) ProtoMessage() {} func (x *AwsXRayConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[34] + mi := &file_proto_orchestrator_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2256,7 +2384,7 @@ func (x *AwsXRayConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AwsXRayConfig.ProtoReflect.Descriptor instead. func (*AwsXRayConfig) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{34} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{36} } func (x *AwsXRayConfig) GetRegion() string { @@ -2308,7 +2436,7 @@ type AzureAppInsightsConfig struct { func (x *AzureAppInsightsConfig) Reset() { *x = AzureAppInsightsConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[35] + mi := &file_proto_orchestrator_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2321,7 +2449,7 @@ func (x *AzureAppInsightsConfig) String() string { func (*AzureAppInsightsConfig) ProtoMessage() {} func (x *AzureAppInsightsConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[35] + mi := &file_proto_orchestrator_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2334,7 +2462,7 @@ func (x *AzureAppInsightsConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AzureAppInsightsConfig.ProtoReflect.Descriptor instead. func (*AzureAppInsightsConfig) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{35} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{37} } func (x *AzureAppInsightsConfig) GetUseAzureActiveDirectoryAuth() bool { @@ -2378,7 +2506,7 @@ type SumoLogicConfig struct { func (x *SumoLogicConfig) Reset() { *x = SumoLogicConfig{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[36] + mi := &file_proto_orchestrator_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2391,7 +2519,7 @@ func (x *SumoLogicConfig) String() string { func (*SumoLogicConfig) ProtoMessage() {} func (x *SumoLogicConfig) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[36] + mi := &file_proto_orchestrator_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2404,7 +2532,7 @@ func (x *SumoLogicConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SumoLogicConfig.ProtoReflect.Descriptor instead. func (*SumoLogicConfig) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{36} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{38} } func (x *SumoLogicConfig) GetURL() string { @@ -2442,7 +2570,7 @@ type HttpClientSettings struct { func (x *HttpClientSettings) Reset() { *x = HttpClientSettings{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[37] + mi := &file_proto_orchestrator_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2455,7 +2583,7 @@ func (x *HttpClientSettings) String() string { func (*HttpClientSettings) ProtoMessage() {} func (x *HttpClientSettings) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[37] + mi := &file_proto_orchestrator_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2468,7 +2596,7 @@ func (x *HttpClientSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use HttpClientSettings.ProtoReflect.Descriptor instead. func (*HttpClientSettings) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{37} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{39} } func (x *HttpClientSettings) GetUrl() string { @@ -2518,7 +2646,7 @@ type GrpcClientSettings struct { func (x *GrpcClientSettings) Reset() { *x = GrpcClientSettings{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[38] + mi := &file_proto_orchestrator_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2531,7 +2659,7 @@ func (x *GrpcClientSettings) String() string { func (*GrpcClientSettings) ProtoMessage() {} func (x *GrpcClientSettings) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[38] + mi := &file_proto_orchestrator_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2544,7 +2672,7 @@ func (x *GrpcClientSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use GrpcClientSettings.ProtoReflect.Descriptor instead. func (*GrpcClientSettings) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{38} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{40} } func (x *GrpcClientSettings) GetEndpoint() string { @@ -2624,7 +2752,7 @@ type TLS struct { func (x *TLS) Reset() { *x = TLS{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[39] + mi := &file_proto_orchestrator_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2637,7 +2765,7 @@ func (x *TLS) String() string { func (*TLS) ProtoMessage() {} func (x *TLS) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[39] + mi := &file_proto_orchestrator_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2650,7 +2778,7 @@ func (x *TLS) ProtoReflect() protoreflect.Message { // Deprecated: Use TLS.ProtoReflect.Descriptor instead. func (*TLS) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{39} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{41} } func (x *TLS) GetInsecure() bool { @@ -2696,7 +2824,7 @@ type TLSSetting struct { func (x *TLSSetting) Reset() { *x = TLSSetting{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[40] + mi := &file_proto_orchestrator_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2709,7 +2837,7 @@ func (x *TLSSetting) String() string { func (*TLSSetting) ProtoMessage() {} func (x *TLSSetting) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[40] + mi := &file_proto_orchestrator_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2722,7 +2850,7 @@ func (x *TLSSetting) ProtoReflect() protoreflect.Message { // Deprecated: Use TLSSetting.ProtoReflect.Descriptor instead. func (*TLSSetting) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{40} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{42} } func (x *TLSSetting) GetCAFile() string { @@ -2778,7 +2906,7 @@ type PollingResponse struct { func (x *PollingResponse) Reset() { *x = PollingResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[41] + mi := &file_proto_orchestrator_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2791,7 +2919,7 @@ func (x *PollingResponse) String() string { func (*PollingResponse) ProtoMessage() {} func (x *PollingResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[41] + mi := &file_proto_orchestrator_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2804,7 +2932,7 @@ func (x *PollingResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PollingResponse.ProtoReflect.Descriptor instead. func (*PollingResponse) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{41} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{43} } func (x *PollingResponse) GetRequestID() string { @@ -2880,7 +3008,7 @@ type Span struct { func (x *Span) Reset() { *x = Span{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[42] + mi := &file_proto_orchestrator_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2893,7 +3021,7 @@ func (x *Span) String() string { func (*Span) ProtoMessage() {} func (x *Span) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[42] + mi := &file_proto_orchestrator_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2906,7 +3034,7 @@ func (x *Span) ProtoReflect() protoreflect.Message { // Deprecated: Use Span.ProtoReflect.Descriptor instead. func (*Span) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{42} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{44} } func (x *Span) GetId() string { @@ -2970,7 +3098,7 @@ type KeyValuePair struct { func (x *KeyValuePair) Reset() { *x = KeyValuePair{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[43] + mi := &file_proto_orchestrator_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2983,7 +3111,7 @@ func (x *KeyValuePair) String() string { func (*KeyValuePair) ProtoMessage() {} func (x *KeyValuePair) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[43] + mi := &file_proto_orchestrator_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2996,7 +3124,7 @@ func (x *KeyValuePair) ProtoReflect() protoreflect.Message { // Deprecated: Use KeyValuePair.ProtoReflect.Descriptor instead. func (*KeyValuePair) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{43} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{45} } func (x *KeyValuePair) GetKey() string { @@ -3030,7 +3158,7 @@ type KafkaRequest struct { func (x *KafkaRequest) Reset() { *x = KafkaRequest{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[44] + mi := &file_proto_orchestrator_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3043,7 +3171,7 @@ func (x *KafkaRequest) String() string { func (*KafkaRequest) ProtoMessage() {} func (x *KafkaRequest) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[44] + mi := &file_proto_orchestrator_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3056,7 +3184,7 @@ func (x *KafkaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KafkaRequest.ProtoReflect.Descriptor instead. func (*KafkaRequest) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{44} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{46} } func (x *KafkaRequest) GetBrokerUrls() []string { @@ -3120,7 +3248,7 @@ type KafkaAuthentication struct { func (x *KafkaAuthentication) Reset() { *x = KafkaAuthentication{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[45] + mi := &file_proto_orchestrator_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3133,7 +3261,7 @@ func (x *KafkaAuthentication) String() string { func (*KafkaAuthentication) ProtoMessage() {} func (x *KafkaAuthentication) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[45] + mi := &file_proto_orchestrator_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3146,7 +3274,7 @@ func (x *KafkaAuthentication) ProtoReflect() protoreflect.Message { // Deprecated: Use KafkaAuthentication.ProtoReflect.Descriptor instead. func (*KafkaAuthentication) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{45} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{47} } func (x *KafkaAuthentication) GetType() string { @@ -3175,7 +3303,7 @@ type KafkaPlainAuthentication struct { func (x *KafkaPlainAuthentication) Reset() { *x = KafkaPlainAuthentication{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[46] + mi := &file_proto_orchestrator_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3188,7 +3316,7 @@ func (x *KafkaPlainAuthentication) String() string { func (*KafkaPlainAuthentication) ProtoMessage() {} func (x *KafkaPlainAuthentication) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[46] + mi := &file_proto_orchestrator_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3201,7 +3329,7 @@ func (x *KafkaPlainAuthentication) ProtoReflect() protoreflect.Message { // Deprecated: Use KafkaPlainAuthentication.ProtoReflect.Descriptor instead. func (*KafkaPlainAuthentication) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{46} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{48} } func (x *KafkaPlainAuthentication) GetUsername() string { @@ -3230,7 +3358,7 @@ type KafkaResponse struct { func (x *KafkaResponse) Reset() { *x = KafkaResponse{} if protoimpl.UnsafeEnabled { - mi := &file_proto_orchestrator_proto_msgTypes[47] + mi := &file_proto_orchestrator_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3243,7 +3371,7 @@ func (x *KafkaResponse) String() string { func (*KafkaResponse) ProtoMessage() {} func (x *KafkaResponse) ProtoReflect() protoreflect.Message { - mi := &file_proto_orchestrator_proto_msgTypes[47] + mi := &file_proto_orchestrator_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3256,7 +3384,7 @@ func (x *KafkaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KafkaResponse.ProtoReflect.Descriptor instead. func (*KafkaResponse) Descriptor() ([]byte, []int) { - return file_proto_orchestrator_proto_rawDescGZIP(), []int{47} + return file_proto_orchestrator_proto_rawDescGZIP(), []int{49} } func (x *KafkaResponse) GetPartition() string { @@ -3444,330 +3572,361 @@ var file_proto_orchestrator_proto_rawDesc = []byte{ 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x21, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x6e, 0x0a, 0x1e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x1f, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x66, 0x75, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x66, 0x75, 0x6c, 0x12, 0x4c, 0x0a, 0x13, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, - 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, - 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x52, 0x05, 0x73, 0x74, 0x65, 0x70, 0x73, 0x22, 0xba, - 0x02, 0x0a, 0x1c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, - 0x40, 0x0a, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, - 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, - 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x0c, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x4a, 0x0a, 0x0e, 0x61, 0x75, 0x74, - 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, - 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, - 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0b, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x72, - 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x0b, - 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x22, 0x7d, 0x0a, 0x1b, 0x44, - 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, - 0x73, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, - 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x0e, 0x50, - 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x61, 0x67, 0x65, 0x22, 0x5d, 0x0a, 0x19, 0x4f, 0x54, 0x4c, 0x50, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x22, + 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x65, 0x72, 0x22, 0xd4, 0x01, 0x0a, 0x1a, 0x4f, 0x54, 0x4c, 0x50, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, + 0x4c, 0x0a, 0x13, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, + 0x09, 0x73, 0x70, 0x61, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x73, 0x70, 0x61, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x6c, + 0x61, 0x73, 0x74, 0x53, 0x70, 0x61, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x70, 0x61, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x6e, 0x0a, 0x1e, 0x44, 0x61, 0x74, + 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x09, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x09, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0xe8, 0x01, 0x0a, 0x1f, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x74, - 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, - 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, - 0x63, 0x65, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, - 0x65, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, - 0x6f, 0x72, 0x65, 0x22, 0xc6, 0x03, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x6a, 0x61, 0x65, 0x67, 0x65, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4a, 0x61, - 0x65, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x6a, 0x61, 0x65, 0x67, - 0x65, 0x72, 0x12, 0x28, 0x0a, 0x05, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x12, 0x34, 0x0a, 0x0a, - 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x61, 0x72, - 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0a, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x61, 0x70, 0x6d, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, - 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x65, 0x6c, - 0x61, 0x73, 0x74, 0x69, 0x63, 0x61, 0x70, 0x6d, 0x12, 0x31, 0x0a, 0x08, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x6c, 0x66, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x08, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, 0x78, 0x12, 0x2e, 0x0a, 0x07, 0x61, - 0x77, 0x73, 0x78, 0x72, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x77, 0x73, 0x58, 0x52, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x07, 0x61, 0x77, 0x73, 0x78, 0x72, 0x61, 0x79, 0x12, 0x49, 0x0a, 0x10, 0x61, - 0x7a, 0x75, 0x72, 0x65, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x7a, - 0x75, 0x72, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x73, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x09, 0x73, 0x75, 0x6d, 0x6f, 0x6c, 0x6f, - 0x67, 0x69, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x53, 0x75, 0x6d, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x09, 0x73, 0x75, 0x6d, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x22, 0x3d, 0x0a, 0x0c, - 0x4a, 0x61, 0x65, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x04, - 0x67, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x67, 0x72, 0x70, 0x63, 0x22, 0x7f, 0x0a, 0x0b, 0x54, - 0x65, 0x6d, 0x70, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2d, - 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x12, 0x2d, 0x0a, - 0x04, 0x67, 0x72, 0x70, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x67, 0x72, 0x70, 0x63, 0x22, 0xcd, 0x01, 0x0a, - 0x0d, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, - 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, - 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, - 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, + 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x73, + 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x12, 0x4c, 0x0a, 0x13, 0x61, + 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x05, 0x73, 0x74, 0x65, + 0x70, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x73, 0x52, 0x05, 0x73, + 0x74, 0x65, 0x70, 0x73, 0x22, 0xba, 0x02, 0x0a, 0x1c, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x74, 0x65, 0x70, 0x73, 0x12, 0x40, 0x0a, 0x09, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x09, 0x70, 0x6f, + 0x72, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x46, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, + 0x70, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, + 0x4a, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, 0x52, 0x0e, 0x61, 0x75, 0x74, + 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x0b, 0x66, + 0x65, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, + 0x53, 0x74, 0x65, 0x70, 0x52, 0x0b, 0x66, 0x65, 0x74, 0x63, 0x68, 0x54, 0x72, 0x61, 0x63, 0x65, + 0x73, 0x22, 0x7d, 0x0a, 0x1b, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x74, 0x65, 0x70, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0xa6, 0x01, 0x0a, 0x0e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, + 0x44, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, + 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, + 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x09, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x09, + 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0xc6, 0x03, 0x0a, 0x09, 0x44, 0x61, + 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x6a, + 0x61, 0x65, 0x67, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x4a, 0x61, 0x65, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x06, 0x6a, 0x61, 0x65, 0x67, 0x65, 0x72, 0x12, 0x28, 0x0a, 0x05, 0x74, 0x65, 0x6d, 0x70, + 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x74, 0x65, 0x6d, + 0x70, 0x6f, 0x12, 0x34, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, + 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x6f, 0x70, + 0x65, 0x6e, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x34, 0x0a, 0x0a, 0x65, 0x6c, 0x61, 0x73, + 0x74, 0x69, 0x63, 0x61, 0x70, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x0a, 0x65, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x61, 0x70, 0x6d, 0x12, 0x31, + 0x0a, 0x08, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, + 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x08, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, + 0x78, 0x12, 0x2e, 0x0a, 0x07, 0x61, 0x77, 0x73, 0x78, 0x72, 0x61, 0x79, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x77, 0x73, 0x58, 0x52, + 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x61, 0x77, 0x73, 0x78, 0x72, 0x61, + 0x79, 0x12, 0x49, 0x0a, 0x10, 0x61, 0x7a, 0x75, 0x72, 0x65, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x73, + 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x69, + 0x67, 0x68, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x10, 0x61, 0x7a, 0x75, 0x72, + 0x65, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x09, + 0x73, 0x75, 0x6d, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x75, 0x6d, 0x6f, 0x4c, 0x6f, 0x67, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x73, 0x75, 0x6d, 0x6f, 0x6c, 0x6f, 0x67, + 0x69, 0x63, 0x22, 0x3d, 0x0a, 0x0c, 0x4a, 0x61, 0x65, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x04, 0x67, 0x72, 0x70, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x67, 0x72, 0x70, + 0x63, 0x22, 0x7f, 0x0a, 0x0b, 0x54, 0x65, 0x6d, 0x70, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x68, + 0x74, 0x74, 0x70, 0x12, 0x2d, 0x0a, 0x04, 0x67, 0x72, 0x70, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x67, 0x72, + 0x70, 0x63, 0x22, 0xcd, 0x01, 0x0a, 0x0d, 0x45, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x63, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, + 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x3c, 0x0a, 0x0e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, 0x78, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, - 0x0a, 0x05, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, - 0x65, 0x61, 0x6c, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xbf, 0x01, 0x0a, 0x0d, 0x41, - 0x77, 0x73, 0x58, 0x52, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, - 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, - 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x41, 0x75, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x75, 0x73, - 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x75, 0x74, 0x68, 0x22, 0xca, 0x01, 0x0a, - 0x16, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x70, 0x70, 0x49, 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, - 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, 0x1b, 0x75, 0x73, 0x65, 0x41, 0x7a, - 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x79, 0x41, 0x75, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1b, 0x75, 0x73, - 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, - 0x72, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x41, 0x72, 0x6d, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x0f, 0x53, 0x75, 0x6d, - 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, - 0x55, 0x52, 0x4c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x55, 0x52, 0x4c, 0x12, 0x1a, - 0x0a, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x22, 0xb4, 0x01, 0x0a, 0x12, 0x48, 0x74, 0x74, - 0x70, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, - 0x6c, 0x12, 0x2b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1c, - 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, 0x41, 0x0a, 0x0e, - 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, - 0x70, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0xe6, 0x02, 0x0a, 0x12, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, - 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, - 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, - 0x65, 0x61, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, - 0x46, 0x6f, 0x72, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x2b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, - 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x03, 0x74, - 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x54, 0x4c, 0x53, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, 0x2d, 0x0a, 0x04, 0x61, 0x75, 0x74, - 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x48, 0x74, 0x74, 0x70, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x22, 0xa0, 0x01, 0x0a, 0x03, 0x54, 0x4c, 0x53, - 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x2e, 0x0a, 0x12, + 0x66, 0x79, 0x22, 0x3c, 0x0a, 0x0e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x66, 0x78, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x72, 0x65, 0x61, 0x6c, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x22, 0xbf, 0x01, 0x0a, 0x0d, 0x41, 0x77, 0x73, 0x58, 0x52, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x0f, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x75, 0x73, + 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x75, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x75, + 0x74, 0x68, 0x22, 0xca, 0x01, 0x0a, 0x16, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x70, 0x70, 0x49, + 0x6e, 0x73, 0x69, 0x67, 0x68, 0x74, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x40, 0x0a, + 0x1b, 0x75, 0x73, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x75, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x1b, 0x75, 0x73, 0x65, 0x41, 0x7a, 0x75, 0x72, 0x65, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x41, 0x75, 0x74, 0x68, 0x12, + 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x72, 0x6d, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x72, 0x6d, 0x49, 0x64, 0x22, + 0x5d, 0x0a, 0x0f, 0x53, 0x75, 0x6d, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x55, 0x52, 0x4c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x55, 0x52, 0x4c, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x44, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x49, 0x44, + 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x22, 0xb4, + 0x01, 0x0a, 0x12, 0x48, 0x74, 0x74, 0x70, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x2b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x48, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x52, 0x03, 0x74, + 0x6c, 0x73, 0x12, 0x41, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe6, 0x02, 0x0a, 0x12, 0x47, 0x72, 0x70, 0x63, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, + 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x28, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, + 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x61, + 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x61, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x77, 0x61, 0x69, 0x74, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x2b, + 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x1c, 0x0a, 0x03, 0x74, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x12, + 0x2d, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x48, 0x74, 0x74, 0x70, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x22, 0xa0, + 0x01, 0x0a, 0x03, 0x54, 0x4c, 0x53, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, + 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, + 0x72, 0x65, 0x12, 0x2e, 0x0a, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, + 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x12, 0x1e, 0x0a, 0x0a, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x08, - 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x9a, 0x01, 0x0a, 0x0a, - 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x41, - 0x46, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x41, 0x46, 0x69, - 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x65, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x65, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6b, 0x65, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, - 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, - 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xac, 0x02, 0x0a, 0x0f, 0x50, 0x6f, 0x6c, - 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x4c, 0x0a, 0x13, 0x61, 0x67, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x66, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x4c, 0x53, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x22, 0x9a, 0x01, 0x0a, 0x0a, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x12, 0x16, 0x0a, 0x06, 0x63, 0x41, 0x46, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x63, 0x41, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x65, 0x72, 0x74, + 0x46, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x65, 0x72, 0x74, + 0x46, 0x69, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1e, + 0x0a, 0x0a, 0x6d, 0x69, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x69, 0x6e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, + 0x0a, 0x0a, 0x6d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xac, + 0x02, 0x0a, 0x0f, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, + 0x12, 0x4c, 0x0a, 0x13, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x74, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, + 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x49, 0x44, 0x12, 0x21, 0x0a, 0x05, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x70, + 0x61, 0x6e, 0x52, 0x05, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x72, 0x61, + 0x63, 0x65, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x74, + 0x72, 0x61, 0x63, 0x65, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xc7, 0x01, + 0x0a, 0x04, 0x53, 0x70, 0x61, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, + 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, + 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x36, 0x0a, 0x0c, 0x4b, 0x65, 0x79, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 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, 0x22, + 0xa5, 0x02, 0x0a, 0x0c, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x42, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x41, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x73, + 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, 0x73, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, + 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, + 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x60, 0x0a, 0x13, 0x4b, 0x61, 0x66, 0x6b, 0x61, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x50, + 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x05, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x22, 0x52, 0x0a, 0x18, 0x4b, 0x61, 0x66, + 0x6b, 0x61, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x45, 0x0a, + 0x0d, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x32, 0xc1, 0x07, 0x0a, 0x0c, 0x4f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x3d, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, + 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, + 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x12, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x00, 0x30, 0x01, 0x12, 0x4d, 0x0a, 0x14, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, + 0x12, 0x4c, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x6c, + 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x73, 0x74, - 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x73, 0x74, 0x49, 0x44, - 0x12, 0x14, 0x0a, 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x05, 0x72, 0x75, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, - 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x72, 0x61, 0x63, 0x65, 0x49, 0x44, - 0x12, 0x21, 0x0a, 0x05, 0x73, 0x70, 0x61, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x70, 0x61, 0x6e, 0x52, 0x05, 0x73, 0x70, - 0x61, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x63, 0x65, 0x46, 0x6f, 0x75, 0x6e, - 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x74, 0x72, 0x61, 0x63, 0x65, 0x46, 0x6f, - 0x75, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0xc7, 0x01, 0x0a, 0x04, 0x53, 0x70, 0x61, 0x6e, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, - 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x0a, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x22, 0x36, 0x0a, 0x0c, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, - 0x72, 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, 0x22, 0xa5, 0x02, 0x0a, 0x0c, 0x4b, 0x61, - 0x66, 0x6b, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, - 0x6f, 0x6b, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x12, 0x42, 0x0a, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x2e, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x28, 0x0a, 0x0f, 0x73, 0x73, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x73, - 0x73, 0x6c, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, - 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x0a, - 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x22, 0x0a, - 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x60, 0x0a, 0x13, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x35, 0x0a, 0x05, - 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x41, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x70, 0x6c, - 0x61, 0x69, 0x6e, 0x22, 0x52, 0x0a, 0x18, 0x4b, 0x61, 0x66, 0x6b, 0x61, 0x50, 0x6c, 0x61, 0x69, - 0x6e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x45, 0x0a, 0x0d, 0x4b, 0x61, 0x66, 0x6b, 0x61, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x32, 0x86, - 0x06, 0x0a, 0x0c, 0x4f, 0x72, 0x63, 0x68, 0x65, 0x73, 0x74, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, - 0x3d, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x00, 0x12, 0x4e, - 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x12, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x4d, - 0x0a, 0x14, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, - 0x72, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, - 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3b, 0x0a, - 0x11, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x72, 0x69, 0x67, 0x67, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x13, 0x52, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x41, 0x67, 0x65, 0x6e, - 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x15, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, - 0x50, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x53, 0x70, 0x61, 0x6e, 0x73, 0x12, 0x16, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x18, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, - 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x16, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, - 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x0c, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x24, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x67, - 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, + 0x69, 0x6f, 0x6e, 0x1a, 0x15, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x39, + 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x50, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x53, 0x70, 0x61, 0x6e, + 0x73, 0x12, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x18, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x4c, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x1a, 0x16, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, + 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x66, 0x0a, + 0x22, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4f, 0x54, 0x4c, 0x50, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, - 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x21, 0x53, 0x65, - 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, - 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x2b, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x73, 0x68, 0x6f, 0x70, 0x2f, 0x74, - 0x72, 0x61, 0x63, 0x65, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x54, 0x4c, 0x50, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x1c, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x54, 0x4c, + 0x50, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x21, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x4f, 0x54, + 0x4c, 0x50, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x32, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, + 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x0c, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x24, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, + 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x41, + 0x67, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x41, 0x67, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x1a, 0x25, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x21, 0x53, + 0x65, 0x6e, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x53, 0x74, 0x6f, + 0x72, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x73, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0x0c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x42, 0x2b, 0x5a, 0x29, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x73, 0x68, 0x6f, 0x70, 0x2f, + 0x74, 0x72, 0x61, 0x63, 0x65, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3782,7 +3941,7 @@ func file_proto_orchestrator_proto_rawDescGZIP() []byte { return file_proto_orchestrator_proto_rawDescData } -var file_proto_orchestrator_proto_msgTypes = make([]protoimpl.MessageInfo, 48) +var file_proto_orchestrator_proto_msgTypes = make([]protoimpl.MessageInfo, 50) var file_proto_orchestrator_proto_goTypes = []interface{}{ (*Empty)(nil), // 0: proto.Empty (*StopRequest)(nil), // 1: proto.StopRequest @@ -3808,30 +3967,32 @@ var file_proto_orchestrator_proto_goTypes = []interface{}{ (*GrpcResponse)(nil), // 21: proto.GrpcResponse (*TraceIdResponse)(nil), // 22: proto.TraceIdResponse (*Error)(nil), // 23: proto.Error - (*DataStoreConnectionTestRequest)(nil), // 24: proto.DataStoreConnectionTestRequest - (*DataStoreConnectionTestResponse)(nil), // 25: proto.DataStoreConnectionTestResponse - (*DataStoreConnectionTestSteps)(nil), // 26: proto.DataStoreConnectionTestSteps - (*DataStoreConnectionTestStep)(nil), // 27: proto.DataStoreConnectionTestStep - (*PollingRequest)(nil), // 28: proto.PollingRequest - (*DataStore)(nil), // 29: proto.DataStore - (*JaegerConfig)(nil), // 30: proto.JaegerConfig - (*TempoConfig)(nil), // 31: proto.TempoConfig - (*ElasticConfig)(nil), // 32: proto.ElasticConfig - (*SignalfxConfig)(nil), // 33: proto.SignalfxConfig - (*AwsXRayConfig)(nil), // 34: proto.AwsXRayConfig - (*AzureAppInsightsConfig)(nil), // 35: proto.AzureAppInsightsConfig - (*SumoLogicConfig)(nil), // 36: proto.SumoLogicConfig - (*HttpClientSettings)(nil), // 37: proto.HttpClientSettings - (*GrpcClientSettings)(nil), // 38: proto.GrpcClientSettings - (*TLS)(nil), // 39: proto.TLS - (*TLSSetting)(nil), // 40: proto.TLSSetting - (*PollingResponse)(nil), // 41: proto.PollingResponse - (*Span)(nil), // 42: proto.Span - (*KeyValuePair)(nil), // 43: proto.KeyValuePair - (*KafkaRequest)(nil), // 44: proto.KafkaRequest - (*KafkaAuthentication)(nil), // 45: proto.KafkaAuthentication - (*KafkaPlainAuthentication)(nil), // 46: proto.KafkaPlainAuthentication - (*KafkaResponse)(nil), // 47: proto.KafkaResponse + (*OTLPConnectionTestRequest)(nil), // 24: proto.OTLPConnectionTestRequest + (*OTLPConnectionTestResponse)(nil), // 25: proto.OTLPConnectionTestResponse + (*DataStoreConnectionTestRequest)(nil), // 26: proto.DataStoreConnectionTestRequest + (*DataStoreConnectionTestResponse)(nil), // 27: proto.DataStoreConnectionTestResponse + (*DataStoreConnectionTestSteps)(nil), // 28: proto.DataStoreConnectionTestSteps + (*DataStoreConnectionTestStep)(nil), // 29: proto.DataStoreConnectionTestStep + (*PollingRequest)(nil), // 30: proto.PollingRequest + (*DataStore)(nil), // 31: proto.DataStore + (*JaegerConfig)(nil), // 32: proto.JaegerConfig + (*TempoConfig)(nil), // 33: proto.TempoConfig + (*ElasticConfig)(nil), // 34: proto.ElasticConfig + (*SignalfxConfig)(nil), // 35: proto.SignalfxConfig + (*AwsXRayConfig)(nil), // 36: proto.AwsXRayConfig + (*AzureAppInsightsConfig)(nil), // 37: proto.AzureAppInsightsConfig + (*SumoLogicConfig)(nil), // 38: proto.SumoLogicConfig + (*HttpClientSettings)(nil), // 39: proto.HttpClientSettings + (*GrpcClientSettings)(nil), // 40: proto.GrpcClientSettings + (*TLS)(nil), // 41: proto.TLS + (*TLSSetting)(nil), // 42: proto.TLSSetting + (*PollingResponse)(nil), // 43: proto.PollingResponse + (*Span)(nil), // 44: proto.Span + (*KeyValuePair)(nil), // 45: proto.KeyValuePair + (*KafkaRequest)(nil), // 46: proto.KafkaRequest + (*KafkaAuthentication)(nil), // 47: proto.KafkaAuthentication + (*KafkaPlainAuthentication)(nil), // 48: proto.KafkaPlainAuthentication + (*KafkaResponse)(nil), // 49: proto.KafkaResponse } var file_proto_orchestrator_proto_depIdxs = []int32{ 4, // 0: proto.AgentConfiguration.configuration:type_name -> proto.SessionConfiguration @@ -3840,7 +4001,7 @@ var file_proto_orchestrator_proto_depIdxs = []int32{ 9, // 3: proto.Trigger.http:type_name -> proto.HttpRequest 15, // 4: proto.Trigger.grpc:type_name -> proto.GrpcRequest 17, // 5: proto.Trigger.traceID:type_name -> proto.TraceIDRequest - 44, // 6: proto.Trigger.kafka:type_name -> proto.KafkaRequest + 46, // 6: proto.Trigger.kafka:type_name -> proto.KafkaRequest 10, // 7: proto.HttpRequest.headers:type_name -> proto.HttpHeader 11, // 8: proto.HttpRequest.authentication:type_name -> proto.HttpAuthentication 12, // 9: proto.HttpAuthentication.apiKey:type_name -> proto.ApiKeyAuthentication @@ -3853,68 +4014,73 @@ var file_proto_orchestrator_proto_depIdxs = []int32{ 20, // 16: proto.TriggerResult.http:type_name -> proto.HttpResponse 21, // 17: proto.TriggerResult.grpc:type_name -> proto.GrpcResponse 22, // 18: proto.TriggerResult.traceID:type_name -> proto.TraceIdResponse - 47, // 19: proto.TriggerResult.kafka:type_name -> proto.KafkaResponse + 49, // 19: proto.TriggerResult.kafka:type_name -> proto.KafkaResponse 23, // 20: proto.TriggerResult.error:type_name -> proto.Error 10, // 21: proto.HttpResponse.headers:type_name -> proto.HttpHeader 16, // 22: proto.GrpcResponse.metadata:type_name -> proto.GrpcHeader - 29, // 23: proto.DataStoreConnectionTestRequest.datastore:type_name -> proto.DataStore - 6, // 24: proto.DataStoreConnectionTestResponse.agentIdentification:type_name -> proto.AgentIdentification - 26, // 25: proto.DataStoreConnectionTestResponse.steps:type_name -> proto.DataStoreConnectionTestSteps - 27, // 26: proto.DataStoreConnectionTestSteps.portCheck:type_name -> proto.DataStoreConnectionTestStep - 27, // 27: proto.DataStoreConnectionTestSteps.connectivity:type_name -> proto.DataStoreConnectionTestStep - 27, // 28: proto.DataStoreConnectionTestSteps.authentication:type_name -> proto.DataStoreConnectionTestStep - 27, // 29: proto.DataStoreConnectionTestSteps.fetchTraces:type_name -> proto.DataStoreConnectionTestStep - 29, // 30: proto.PollingRequest.datastore:type_name -> proto.DataStore - 30, // 31: proto.DataStore.jaeger:type_name -> proto.JaegerConfig - 31, // 32: proto.DataStore.tempo:type_name -> proto.TempoConfig - 32, // 33: proto.DataStore.opensearch:type_name -> proto.ElasticConfig - 32, // 34: proto.DataStore.elasticapm:type_name -> proto.ElasticConfig - 33, // 35: proto.DataStore.signalfx:type_name -> proto.SignalfxConfig - 34, // 36: proto.DataStore.awsxray:type_name -> proto.AwsXRayConfig - 35, // 37: proto.DataStore.azureappinsights:type_name -> proto.AzureAppInsightsConfig - 36, // 38: proto.DataStore.sumologic:type_name -> proto.SumoLogicConfig - 38, // 39: proto.JaegerConfig.grpc:type_name -> proto.GrpcClientSettings - 37, // 40: proto.TempoConfig.http:type_name -> proto.HttpClientSettings - 38, // 41: proto.TempoConfig.grpc:type_name -> proto.GrpcClientSettings - 10, // 42: proto.HttpClientSettings.headers:type_name -> proto.HttpHeader - 39, // 43: proto.HttpClientSettings.tls:type_name -> proto.TLS - 11, // 44: proto.HttpClientSettings.authentication:type_name -> proto.HttpAuthentication - 10, // 45: proto.GrpcClientSettings.headers:type_name -> proto.HttpHeader - 39, // 46: proto.GrpcClientSettings.tls:type_name -> proto.TLS - 11, // 47: proto.GrpcClientSettings.auth:type_name -> proto.HttpAuthentication - 40, // 48: proto.TLS.settings:type_name -> proto.TLSSetting - 6, // 49: proto.PollingResponse.agentIdentification:type_name -> proto.AgentIdentification - 42, // 50: proto.PollingResponse.spans:type_name -> proto.Span - 23, // 51: proto.PollingResponse.error:type_name -> proto.Error - 43, // 52: proto.Span.attributes:type_name -> proto.KeyValuePair - 45, // 53: proto.KafkaRequest.authentication:type_name -> proto.KafkaAuthentication - 43, // 54: proto.KafkaRequest.headers:type_name -> proto.KeyValuePair - 46, // 55: proto.KafkaAuthentication.plain:type_name -> proto.KafkaPlainAuthentication - 2, // 56: proto.Orchestrator.Connect:input_type -> proto.ConnectRequest - 6, // 57: proto.Orchestrator.RegisterStopRequestAgent:input_type -> proto.AgentIdentification - 6, // 58: proto.Orchestrator.RegisterTriggerAgent:input_type -> proto.AgentIdentification - 18, // 59: proto.Orchestrator.SendTriggerResult:input_type -> proto.TriggerResponse - 6, // 60: proto.Orchestrator.RegisterPollerAgent:input_type -> proto.AgentIdentification - 41, // 61: proto.Orchestrator.SendPolledSpans:input_type -> proto.PollingResponse - 6, // 62: proto.Orchestrator.RegisterShutdownListener:input_type -> proto.AgentIdentification - 6, // 63: proto.Orchestrator.Ping:input_type -> proto.AgentIdentification - 6, // 64: proto.Orchestrator.RegisterDataStoreConnectionTestAgent:input_type -> proto.AgentIdentification - 25, // 65: proto.Orchestrator.SendDataStoreConnectionTestResult:input_type -> proto.DataStoreConnectionTestResponse - 3, // 66: proto.Orchestrator.Connect:output_type -> proto.AgentConfiguration - 1, // 67: proto.Orchestrator.RegisterStopRequestAgent:output_type -> proto.StopRequest - 7, // 68: proto.Orchestrator.RegisterTriggerAgent:output_type -> proto.TriggerRequest - 0, // 69: proto.Orchestrator.SendTriggerResult:output_type -> proto.Empty - 28, // 70: proto.Orchestrator.RegisterPollerAgent:output_type -> proto.PollingRequest - 0, // 71: proto.Orchestrator.SendPolledSpans:output_type -> proto.Empty - 5, // 72: proto.Orchestrator.RegisterShutdownListener:output_type -> proto.ShutdownRequest - 0, // 73: proto.Orchestrator.Ping:output_type -> proto.Empty - 24, // 74: proto.Orchestrator.RegisterDataStoreConnectionTestAgent:output_type -> proto.DataStoreConnectionTestRequest - 0, // 75: proto.Orchestrator.SendDataStoreConnectionTestResult:output_type -> proto.Empty - 66, // [66:76] is the sub-list for method output_type - 56, // [56:66] is the sub-list for method input_type - 56, // [56:56] is the sub-list for extension type_name - 56, // [56:56] is the sub-list for extension extendee - 0, // [0:56] is the sub-list for field type_name + 6, // 23: proto.OTLPConnectionTestResponse.agentIdentification:type_name -> proto.AgentIdentification + 31, // 24: proto.DataStoreConnectionTestRequest.datastore:type_name -> proto.DataStore + 6, // 25: proto.DataStoreConnectionTestResponse.agentIdentification:type_name -> proto.AgentIdentification + 28, // 26: proto.DataStoreConnectionTestResponse.steps:type_name -> proto.DataStoreConnectionTestSteps + 29, // 27: proto.DataStoreConnectionTestSteps.portCheck:type_name -> proto.DataStoreConnectionTestStep + 29, // 28: proto.DataStoreConnectionTestSteps.connectivity:type_name -> proto.DataStoreConnectionTestStep + 29, // 29: proto.DataStoreConnectionTestSteps.authentication:type_name -> proto.DataStoreConnectionTestStep + 29, // 30: proto.DataStoreConnectionTestSteps.fetchTraces:type_name -> proto.DataStoreConnectionTestStep + 31, // 31: proto.PollingRequest.datastore:type_name -> proto.DataStore + 32, // 32: proto.DataStore.jaeger:type_name -> proto.JaegerConfig + 33, // 33: proto.DataStore.tempo:type_name -> proto.TempoConfig + 34, // 34: proto.DataStore.opensearch:type_name -> proto.ElasticConfig + 34, // 35: proto.DataStore.elasticapm:type_name -> proto.ElasticConfig + 35, // 36: proto.DataStore.signalfx:type_name -> proto.SignalfxConfig + 36, // 37: proto.DataStore.awsxray:type_name -> proto.AwsXRayConfig + 37, // 38: proto.DataStore.azureappinsights:type_name -> proto.AzureAppInsightsConfig + 38, // 39: proto.DataStore.sumologic:type_name -> proto.SumoLogicConfig + 40, // 40: proto.JaegerConfig.grpc:type_name -> proto.GrpcClientSettings + 39, // 41: proto.TempoConfig.http:type_name -> proto.HttpClientSettings + 40, // 42: proto.TempoConfig.grpc:type_name -> proto.GrpcClientSettings + 10, // 43: proto.HttpClientSettings.headers:type_name -> proto.HttpHeader + 41, // 44: proto.HttpClientSettings.tls:type_name -> proto.TLS + 11, // 45: proto.HttpClientSettings.authentication:type_name -> proto.HttpAuthentication + 10, // 46: proto.GrpcClientSettings.headers:type_name -> proto.HttpHeader + 41, // 47: proto.GrpcClientSettings.tls:type_name -> proto.TLS + 11, // 48: proto.GrpcClientSettings.auth:type_name -> proto.HttpAuthentication + 42, // 49: proto.TLS.settings:type_name -> proto.TLSSetting + 6, // 50: proto.PollingResponse.agentIdentification:type_name -> proto.AgentIdentification + 44, // 51: proto.PollingResponse.spans:type_name -> proto.Span + 23, // 52: proto.PollingResponse.error:type_name -> proto.Error + 45, // 53: proto.Span.attributes:type_name -> proto.KeyValuePair + 47, // 54: proto.KafkaRequest.authentication:type_name -> proto.KafkaAuthentication + 45, // 55: proto.KafkaRequest.headers:type_name -> proto.KeyValuePair + 48, // 56: proto.KafkaAuthentication.plain:type_name -> proto.KafkaPlainAuthentication + 2, // 57: proto.Orchestrator.Connect:input_type -> proto.ConnectRequest + 6, // 58: proto.Orchestrator.RegisterStopRequestAgent:input_type -> proto.AgentIdentification + 6, // 59: proto.Orchestrator.RegisterTriggerAgent:input_type -> proto.AgentIdentification + 18, // 60: proto.Orchestrator.SendTriggerResult:input_type -> proto.TriggerResponse + 6, // 61: proto.Orchestrator.RegisterPollerAgent:input_type -> proto.AgentIdentification + 43, // 62: proto.Orchestrator.SendPolledSpans:input_type -> proto.PollingResponse + 6, // 63: proto.Orchestrator.RegisterShutdownListener:input_type -> proto.AgentIdentification + 6, // 64: proto.Orchestrator.RegisterOTLPConnectionTestListener:input_type -> proto.AgentIdentification + 25, // 65: proto.Orchestrator.SendOTLPConnectionTestResult:input_type -> proto.OTLPConnectionTestResponse + 6, // 66: proto.Orchestrator.Ping:input_type -> proto.AgentIdentification + 6, // 67: proto.Orchestrator.RegisterDataStoreConnectionTestAgent:input_type -> proto.AgentIdentification + 27, // 68: proto.Orchestrator.SendDataStoreConnectionTestResult:input_type -> proto.DataStoreConnectionTestResponse + 3, // 69: proto.Orchestrator.Connect:output_type -> proto.AgentConfiguration + 1, // 70: proto.Orchestrator.RegisterStopRequestAgent:output_type -> proto.StopRequest + 7, // 71: proto.Orchestrator.RegisterTriggerAgent:output_type -> proto.TriggerRequest + 0, // 72: proto.Orchestrator.SendTriggerResult:output_type -> proto.Empty + 30, // 73: proto.Orchestrator.RegisterPollerAgent:output_type -> proto.PollingRequest + 0, // 74: proto.Orchestrator.SendPolledSpans:output_type -> proto.Empty + 5, // 75: proto.Orchestrator.RegisterShutdownListener:output_type -> proto.ShutdownRequest + 24, // 76: proto.Orchestrator.RegisterOTLPConnectionTestListener:output_type -> proto.OTLPConnectionTestRequest + 0, // 77: proto.Orchestrator.SendOTLPConnectionTestResult:output_type -> proto.Empty + 0, // 78: proto.Orchestrator.Ping:output_type -> proto.Empty + 26, // 79: proto.Orchestrator.RegisterDataStoreConnectionTestAgent:output_type -> proto.DataStoreConnectionTestRequest + 0, // 80: proto.Orchestrator.SendDataStoreConnectionTestResult:output_type -> proto.Empty + 69, // [69:81] is the sub-list for method output_type + 57, // [57:69] is the sub-list for method input_type + 57, // [57:57] is the sub-list for extension type_name + 57, // [57:57] is the sub-list for extension extendee + 0, // [0:57] is the sub-list for field type_name } func init() { file_proto_orchestrator_proto_init() } @@ -4212,7 +4378,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataStoreConnectionTestRequest); i { + switch v := v.(*OTLPConnectionTestRequest); i { case 0: return &v.state case 1: @@ -4224,7 +4390,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataStoreConnectionTestResponse); i { + switch v := v.(*OTLPConnectionTestResponse); i { case 0: return &v.state case 1: @@ -4236,7 +4402,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataStoreConnectionTestSteps); i { + switch v := v.(*DataStoreConnectionTestRequest); i { case 0: return &v.state case 1: @@ -4248,7 +4414,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataStoreConnectionTestStep); i { + switch v := v.(*DataStoreConnectionTestResponse); i { case 0: return &v.state case 1: @@ -4260,7 +4426,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PollingRequest); i { + switch v := v.(*DataStoreConnectionTestSteps); i { case 0: return &v.state case 1: @@ -4272,7 +4438,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DataStore); i { + switch v := v.(*DataStoreConnectionTestStep); i { case 0: return &v.state case 1: @@ -4284,7 +4450,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JaegerConfig); i { + switch v := v.(*PollingRequest); i { case 0: return &v.state case 1: @@ -4296,7 +4462,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TempoConfig); i { + switch v := v.(*DataStore); i { case 0: return &v.state case 1: @@ -4308,7 +4474,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ElasticConfig); i { + switch v := v.(*JaegerConfig); i { case 0: return &v.state case 1: @@ -4320,7 +4486,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SignalfxConfig); i { + switch v := v.(*TempoConfig); i { case 0: return &v.state case 1: @@ -4332,7 +4498,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AwsXRayConfig); i { + switch v := v.(*ElasticConfig); i { case 0: return &v.state case 1: @@ -4344,7 +4510,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AzureAppInsightsConfig); i { + switch v := v.(*SignalfxConfig); i { case 0: return &v.state case 1: @@ -4356,7 +4522,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SumoLogicConfig); i { + switch v := v.(*AwsXRayConfig); i { case 0: return &v.state case 1: @@ -4368,7 +4534,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HttpClientSettings); i { + switch v := v.(*AzureAppInsightsConfig); i { case 0: return &v.state case 1: @@ -4380,7 +4546,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrpcClientSettings); i { + switch v := v.(*SumoLogicConfig); i { case 0: return &v.state case 1: @@ -4392,7 +4558,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TLS); i { + switch v := v.(*HttpClientSettings); i { case 0: return &v.state case 1: @@ -4404,7 +4570,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TLSSetting); i { + switch v := v.(*GrpcClientSettings); i { case 0: return &v.state case 1: @@ -4416,7 +4582,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PollingResponse); i { + switch v := v.(*TLS); i { case 0: return &v.state case 1: @@ -4428,7 +4594,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Span); i { + switch v := v.(*TLSSetting); i { case 0: return &v.state case 1: @@ -4440,7 +4606,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KeyValuePair); i { + switch v := v.(*PollingResponse); i { case 0: return &v.state case 1: @@ -4452,7 +4618,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KafkaRequest); i { + switch v := v.(*Span); i { case 0: return &v.state case 1: @@ -4464,7 +4630,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KafkaAuthentication); i { + switch v := v.(*KeyValuePair); i { case 0: return &v.state case 1: @@ -4476,7 +4642,7 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KafkaPlainAuthentication); i { + switch v := v.(*KafkaRequest); i { case 0: return &v.state case 1: @@ -4488,6 +4654,30 @@ func file_proto_orchestrator_proto_init() { } } file_proto_orchestrator_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KafkaAuthentication); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_orchestrator_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KafkaPlainAuthentication); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_proto_orchestrator_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*KafkaResponse); i { case 0: return &v.state @@ -4506,7 +4696,7 @@ func file_proto_orchestrator_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_proto_orchestrator_proto_rawDesc, NumEnums: 0, - NumMessages: 48, + NumMessages: 50, NumExtensions: 0, NumServices: 1, }, diff --git a/agent/proto/orchestrator.proto b/agent/proto/orchestrator.proto index f070536b12..7ae5f31f9f 100644 --- a/agent/proto/orchestrator.proto +++ b/agent/proto/orchestrator.proto @@ -29,6 +29,12 @@ service Orchestrator { // Register an agent to listen for shutdown commands rpc RegisterShutdownListener(AgentIdentification) returns (stream ShutdownRequest) {} + // Register an agent to listen for connection test commands + rpc RegisterOTLPConnectionTestListener(AgentIdentification) returns (stream OTLPConnectionTestRequest) {} + + // Send the OTLP connection test response + rpc SendOTLPConnectionTestResult(OTLPConnectionTestResponse) returns (Empty) {} + // Ping is used to check if the agent is still connected rpc Ping(AgentIdentification) returns (Empty) {} @@ -191,6 +197,20 @@ message Error { string message = 1; } +message OTLPConnectionTestRequest { + string requestID = 1; + // If set as true, the agent needs to reset the span counter and doesn't need to + // report the number of spans back to the server. + bool resetCounter = 2; +} + +message OTLPConnectionTestResponse { + string requestID = 1; + AgentIdentification agentIdentification = 2; + int64 spanCount = 3; + int64 lastSpanTimestamp = 4; +} + message DataStoreConnectionTestRequest { string requestID = 1; DataStore datastore = 2; diff --git a/agent/proto/orchestrator_grpc.pb.go b/agent/proto/orchestrator_grpc.pb.go index d2a2774640..f8daa29a80 100644 --- a/agent/proto/orchestrator_grpc.pb.go +++ b/agent/proto/orchestrator_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.23.4 // source: proto/orchestrator.proto package proto @@ -26,6 +26,8 @@ const ( Orchestrator_RegisterPollerAgent_FullMethodName = "/proto.Orchestrator/RegisterPollerAgent" Orchestrator_SendPolledSpans_FullMethodName = "/proto.Orchestrator/SendPolledSpans" Orchestrator_RegisterShutdownListener_FullMethodName = "/proto.Orchestrator/RegisterShutdownListener" + Orchestrator_RegisterOTLPConnectionTestListener_FullMethodName = "/proto.Orchestrator/RegisterOTLPConnectionTestListener" + Orchestrator_SendOTLPConnectionTestResult_FullMethodName = "/proto.Orchestrator/SendOTLPConnectionTestResult" Orchestrator_Ping_FullMethodName = "/proto.Orchestrator/Ping" Orchestrator_RegisterDataStoreConnectionTestAgent_FullMethodName = "/proto.Orchestrator/RegisterDataStoreConnectionTestAgent" Orchestrator_SendDataStoreConnectionTestResult_FullMethodName = "/proto.Orchestrator/SendDataStoreConnectionTestResult" @@ -51,6 +53,10 @@ type OrchestratorClient interface { SendPolledSpans(ctx context.Context, in *PollingResponse, opts ...grpc.CallOption) (*Empty, error) // Register an agent to listen for shutdown commands RegisterShutdownListener(ctx context.Context, in *AgentIdentification, opts ...grpc.CallOption) (Orchestrator_RegisterShutdownListenerClient, error) + // Register an agent to listen for connection test commands + RegisterOTLPConnectionTestListener(ctx context.Context, in *AgentIdentification, opts ...grpc.CallOption) (Orchestrator_RegisterOTLPConnectionTestListenerClient, error) + // Send the OTLP connection test response + SendOTLPConnectionTestResult(ctx context.Context, in *OTLPConnectionTestResponse, opts ...grpc.CallOption) (*Empty, error) // Ping is used to check if the agent is still connected Ping(ctx context.Context, in *AgentIdentification, opts ...grpc.CallOption) (*Empty, error) // Register an agent to listen for datastore connection test requests @@ -222,6 +228,47 @@ func (x *orchestratorRegisterShutdownListenerClient) Recv() (*ShutdownRequest, e return m, nil } +func (c *orchestratorClient) RegisterOTLPConnectionTestListener(ctx context.Context, in *AgentIdentification, opts ...grpc.CallOption) (Orchestrator_RegisterOTLPConnectionTestListenerClient, error) { + stream, err := c.cc.NewStream(ctx, &Orchestrator_ServiceDesc.Streams[4], Orchestrator_RegisterOTLPConnectionTestListener_FullMethodName, opts...) + if err != nil { + return nil, err + } + x := &orchestratorRegisterOTLPConnectionTestListenerClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Orchestrator_RegisterOTLPConnectionTestListenerClient interface { + Recv() (*OTLPConnectionTestRequest, error) + grpc.ClientStream +} + +type orchestratorRegisterOTLPConnectionTestListenerClient struct { + grpc.ClientStream +} + +func (x *orchestratorRegisterOTLPConnectionTestListenerClient) Recv() (*OTLPConnectionTestRequest, error) { + m := new(OTLPConnectionTestRequest) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *orchestratorClient) SendOTLPConnectionTestResult(ctx context.Context, in *OTLPConnectionTestResponse, opts ...grpc.CallOption) (*Empty, error) { + out := new(Empty) + err := c.cc.Invoke(ctx, Orchestrator_SendOTLPConnectionTestResult_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *orchestratorClient) Ping(ctx context.Context, in *AgentIdentification, opts ...grpc.CallOption) (*Empty, error) { out := new(Empty) err := c.cc.Invoke(ctx, Orchestrator_Ping_FullMethodName, in, out, opts...) @@ -232,7 +279,7 @@ func (c *orchestratorClient) Ping(ctx context.Context, in *AgentIdentification, } func (c *orchestratorClient) RegisterDataStoreConnectionTestAgent(ctx context.Context, in *AgentIdentification, opts ...grpc.CallOption) (Orchestrator_RegisterDataStoreConnectionTestAgentClient, error) { - stream, err := c.cc.NewStream(ctx, &Orchestrator_ServiceDesc.Streams[4], Orchestrator_RegisterDataStoreConnectionTestAgent_FullMethodName, opts...) + stream, err := c.cc.NewStream(ctx, &Orchestrator_ServiceDesc.Streams[5], Orchestrator_RegisterDataStoreConnectionTestAgent_FullMethodName, opts...) if err != nil { return nil, err } @@ -292,6 +339,10 @@ type OrchestratorServer interface { SendPolledSpans(context.Context, *PollingResponse) (*Empty, error) // Register an agent to listen for shutdown commands RegisterShutdownListener(*AgentIdentification, Orchestrator_RegisterShutdownListenerServer) error + // Register an agent to listen for connection test commands + RegisterOTLPConnectionTestListener(*AgentIdentification, Orchestrator_RegisterOTLPConnectionTestListenerServer) error + // Send the OTLP connection test response + SendOTLPConnectionTestResult(context.Context, *OTLPConnectionTestResponse) (*Empty, error) // Ping is used to check if the agent is still connected Ping(context.Context, *AgentIdentification) (*Empty, error) // Register an agent to listen for datastore connection test requests @@ -326,6 +377,12 @@ func (UnimplementedOrchestratorServer) SendPolledSpans(context.Context, *Polling func (UnimplementedOrchestratorServer) RegisterShutdownListener(*AgentIdentification, Orchestrator_RegisterShutdownListenerServer) error { return status.Errorf(codes.Unimplemented, "method RegisterShutdownListener not implemented") } +func (UnimplementedOrchestratorServer) RegisterOTLPConnectionTestListener(*AgentIdentification, Orchestrator_RegisterOTLPConnectionTestListenerServer) error { + return status.Errorf(codes.Unimplemented, "method RegisterOTLPConnectionTestListener not implemented") +} +func (UnimplementedOrchestratorServer) SendOTLPConnectionTestResult(context.Context, *OTLPConnectionTestResponse) (*Empty, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendOTLPConnectionTestResult not implemented") +} func (UnimplementedOrchestratorServer) Ping(context.Context, *AgentIdentification) (*Empty, error) { return nil, status.Errorf(codes.Unimplemented, "method Ping not implemented") } @@ -486,6 +543,45 @@ func (x *orchestratorRegisterShutdownListenerServer) Send(m *ShutdownRequest) er return x.ServerStream.SendMsg(m) } +func _Orchestrator_RegisterOTLPConnectionTestListener_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(AgentIdentification) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(OrchestratorServer).RegisterOTLPConnectionTestListener(m, &orchestratorRegisterOTLPConnectionTestListenerServer{stream}) +} + +type Orchestrator_RegisterOTLPConnectionTestListenerServer interface { + Send(*OTLPConnectionTestRequest) error + grpc.ServerStream +} + +type orchestratorRegisterOTLPConnectionTestListenerServer struct { + grpc.ServerStream +} + +func (x *orchestratorRegisterOTLPConnectionTestListenerServer) Send(m *OTLPConnectionTestRequest) error { + return x.ServerStream.SendMsg(m) +} + +func _Orchestrator_SendOTLPConnectionTestResult_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(OTLPConnectionTestResponse) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(OrchestratorServer).SendOTLPConnectionTestResult(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Orchestrator_SendOTLPConnectionTestResult_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(OrchestratorServer).SendOTLPConnectionTestResult(ctx, req.(*OTLPConnectionTestResponse)) + } + return interceptor(ctx, in, info, handler) +} + func _Orchestrator_Ping_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(AgentIdentification) if err := dec(in); err != nil { @@ -562,6 +658,10 @@ var Orchestrator_ServiceDesc = grpc.ServiceDesc{ MethodName: "SendPolledSpans", Handler: _Orchestrator_SendPolledSpans_Handler, }, + { + MethodName: "SendOTLPConnectionTestResult", + Handler: _Orchestrator_SendOTLPConnectionTestResult_Handler, + }, { MethodName: "Ping", Handler: _Orchestrator_Ping_Handler, @@ -592,6 +692,11 @@ var Orchestrator_ServiceDesc = grpc.ServiceDesc{ Handler: _Orchestrator_RegisterShutdownListener_Handler, ServerStreams: true, }, + { + StreamName: "RegisterOTLPConnectionTestListener", + Handler: _Orchestrator_RegisterOTLPConnectionTestListener_Handler, + ServerStreams: true, + }, { StreamName: "RegisterDataStoreConnectionTestAgent", Handler: _Orchestrator_RegisterDataStoreConnectionTestAgent_Handler, diff --git a/agent/runner/session.go b/agent/runner/session.go index 2c6b37ea75..78fddedbb3 100644 --- a/agent/runner/session.go +++ b/agent/runner/session.go @@ -47,18 +47,33 @@ func StartSession(ctx context.Context, cfg config.Config, observer event.Observe return nil, err } - err = StartCollector(ctx, cfg, traceCache, observer, logger) + agentCollector, err := StartCollector(ctx, cfg, traceCache, observer, logger) if err != nil { return nil, err } + controlPlaneClient.OnOTLPConnectionTest(func(ctx context.Context, otr *proto.OTLPConnectionTestRequest) error { + if otr.ResetCounter { + agentCollector.ResetStatistics() + return nil + } + + statistics := agentCollector.Statistics() + controlPlaneClient.SendOTLPConnectionResult(ctx, &proto.OTLPConnectionTestResponse{ + RequestID: otr.RequestID, + SpanCount: int64(statistics.SpanCount), + LastSpanTimestamp: statistics.LastSpanTimestamp.UnixMilli(), + }) + return nil + }) + return &Session{ client: controlPlaneClient, Token: controlPlaneClient.SessionConfiguration().AgentIdentification.Token, }, nil } -func StartCollector(ctx context.Context, config config.Config, traceCache collector.TraceCache, observer event.Observer, logger *zap.Logger) error { +func StartCollector(ctx context.Context, config config.Config, traceCache collector.TraceCache, observer event.Observer, logger *zap.Logger) (collector.Collector, error) { noopTracer := trace.NewNoopTracerProvider().Tracer("noop") collectorConfig := collector.Config{ HTTPPort: config.OTLPServer.HTTPPort, @@ -72,17 +87,17 @@ func StartCollector(ctx context.Context, config config.Config, traceCache collec collector.WithLogger(logger), } - _, err := collector.Start( + collector, err := collector.Start( ctx, collectorConfig, noopTracer, opts..., ) if err != nil { - return ErrOtlpServerStart + return nil, ErrOtlpServerStart } - return nil + return collector, nil } func newControlPlaneClient(ctx context.Context, config config.Config, traceCache collector.TraceCache, observer event.Observer, logger *zap.Logger) (*client.Client, error) {