From 156d381665559df46ddd8e9c117287d9925b7d69 Mon Sep 17 00:00:00 2001 From: Parthiba-Hazra Date: Fri, 26 Sep 2025 23:18:52 +0530 Subject: [PATCH 1/5] kubeflow notebook collector --- Makefile | 2 +- .../bases/devzero.io_collectionpolicies.yaml | 2 +- config/rbac/role.yaml | 64 +- .../apiv1connect/metrics_collector.connect.go | 27 + gen/api/v1/common.pb.go | 16068 ++++++++++++++++ gen/api/v1/metrics_collector.pb.go | 1861 +- gen/api/v1/metrics_collector_grpc.pb.go | 37 + gen/google/type/money.pb.go | 195 + internal/collector/interface.go | 4 + .../collector/kubeflow_notebook_collector.go | 408 + internal/collector/types.go | 4 +- .../controller/collectionpolicy_controller.go | 40 + proto/dakr_proto_descriptor.bin | Bin 49515 -> 183650 bytes proto/metrics_collector.proto | 16 +- 14 files changed, 17847 insertions(+), 881 deletions(-) create mode 100644 gen/api/v1/common.pb.go create mode 100644 gen/google/type/money.pb.go create mode 100644 internal/collector/kubeflow_notebook_collector.go diff --git a/Makefile b/Makefile index e32711f1..7ea5db2c 100644 --- a/Makefile +++ b/Makefile @@ -502,7 +502,7 @@ HELMIFY ?= helmify ## Tool Versions KUSTOMIZE_VERSION ?= v5.4.3 -CONTROLLER_TOOLS_VERSION ?= v0.16.1 +CONTROLLER_TOOLS_VERSION ?= v0.16.5 ENVTEST_VERSION ?= release-0.19 GOLANGCI_LINT_VERSION ?= v1.59.1 HELM_VERSION ?= v3.14.2 diff --git a/config/crd/bases/devzero.io_collectionpolicies.yaml b/config/crd/bases/devzero.io_collectionpolicies.yaml index 3027f935..bc771836 100644 --- a/config/crd/bases/devzero.io_collectionpolicies.yaml +++ b/config/crd/bases/devzero.io_collectionpolicies.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.1 + controller-gen.kubebuilder.io/version: v0.16.5 name: collectionpolicies.devzero.io spec: group: devzero.io diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 8e7250b8..af73ec76 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -4,6 +4,34 @@ kind: ClusterRole metadata: name: manager-role rules: +- apiGroups: + - "" + resources: + - configmaps + - endpoints + - events + - limitranges + - namespaces + - nodes + - persistentvolumeclaims + - persistentvolumes + - pods + - replicationcontrollers + - resourcequotas + - serviceaccounts + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - nodes/metrics + - nodes/status + - pods/status + verbs: + - get - apiGroups: - apiextensions.k8s.io resources: @@ -66,34 +94,6 @@ rules: - get - list - watch -- apiGroups: - - "" - resources: - - configmaps - - endpoints - - events - - limitranges - - namespaces - - nodes - - persistentvolumeclaims - - persistentvolumes - - pods - - replicationcontrollers - - resourcequotas - - serviceaccounts - - services - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - nodes/metrics - - nodes/status - - pods/status - verbs: - - get - apiGroups: - datadoghq.com resources: @@ -159,6 +159,14 @@ rules: - get - list - watch +- apiGroups: + - kubeflow.org + resources: + - notebooks + verbs: + - get + - list + - watch - apiGroups: - metrics.k8s.io resources: diff --git a/gen/api/v1/apiv1connect/metrics_collector.connect.go b/gen/api/v1/apiv1connect/metrics_collector.connect.go index 32de5447..84a775e9 100644 --- a/gen/api/v1/apiv1connect/metrics_collector.connect.go +++ b/gen/api/v1/apiv1connect/metrics_collector.connect.go @@ -48,6 +48,9 @@ const ( // MetricsCollectorServiceSendTelemetryLogsProcedure is the fully-qualified name of the // MetricsCollectorService's SendTelemetryLogs RPC. MetricsCollectorServiceSendTelemetryLogsProcedure = "/api.v1.MetricsCollectorService/SendTelemetryLogs" + // MetricsCollectorServiceNodeMetadataProcedure is the fully-qualified name of the + // MetricsCollectorService's NodeMetadata RPC. + MetricsCollectorServiceNodeMetadataProcedure = "/api.v1.MetricsCollectorService/NodeMetadata" ) // MetricsCollectorServiceClient is a client for the api.v1.MetricsCollectorService service. @@ -62,6 +65,7 @@ type MetricsCollectorServiceClient interface { SendClusterSnapshotStream(context.Context) *connect.ClientStreamForClient[v1.ClusterSnapshotChunk, v1.SendClusterSnapshotStreamResponse] // SendTelemetryLogs ingests a batch of log messages from the cluster. SendTelemetryLogs(context.Context, *connect.Request[v1.SendTelemetryLogsRequest]) (*connect.Response[v1.SendTelemetryLogsResponse], error) + NodeMetadata(context.Context, *connect.Request[v1.NodeMetadataRequest]) (*connect.Response[v1.NodeMetadataResponse], error) } // NewMetricsCollectorServiceClient constructs a client for the api.v1.MetricsCollectorService @@ -99,6 +103,11 @@ func NewMetricsCollectorServiceClient(httpClient connect.HTTPClient, baseURL str baseURL+MetricsCollectorServiceSendTelemetryLogsProcedure, opts..., ), + nodeMetadata: connect.NewClient[v1.NodeMetadataRequest, v1.NodeMetadataResponse]( + httpClient, + baseURL+MetricsCollectorServiceNodeMetadataProcedure, + opts..., + ), } } @@ -109,6 +118,7 @@ type metricsCollectorServiceClient struct { sendTelemetryMetrics *connect.Client[v1.SendTelemetryMetricsRequest, v1.SendTelemetryMetricsResponse] sendClusterSnapshotStream *connect.Client[v1.ClusterSnapshotChunk, v1.SendClusterSnapshotStreamResponse] sendTelemetryLogs *connect.Client[v1.SendTelemetryLogsRequest, v1.SendTelemetryLogsResponse] + nodeMetadata *connect.Client[v1.NodeMetadataRequest, v1.NodeMetadataResponse] } // SendResource calls api.v1.MetricsCollectorService.SendResource. @@ -136,6 +146,11 @@ func (c *metricsCollectorServiceClient) SendTelemetryLogs(ctx context.Context, r return c.sendTelemetryLogs.CallUnary(ctx, req) } +// NodeMetadata calls api.v1.MetricsCollectorService.NodeMetadata. +func (c *metricsCollectorServiceClient) NodeMetadata(ctx context.Context, req *connect.Request[v1.NodeMetadataRequest]) (*connect.Response[v1.NodeMetadataResponse], error) { + return c.nodeMetadata.CallUnary(ctx, req) +} + // MetricsCollectorServiceHandler is an implementation of the api.v1.MetricsCollectorService // service. type MetricsCollectorServiceHandler interface { @@ -149,6 +164,7 @@ type MetricsCollectorServiceHandler interface { SendClusterSnapshotStream(context.Context, *connect.ClientStream[v1.ClusterSnapshotChunk]) (*connect.Response[v1.SendClusterSnapshotStreamResponse], error) // SendTelemetryLogs ingests a batch of log messages from the cluster. SendTelemetryLogs(context.Context, *connect.Request[v1.SendTelemetryLogsRequest]) (*connect.Response[v1.SendTelemetryLogsResponse], error) + NodeMetadata(context.Context, *connect.Request[v1.NodeMetadataRequest]) (*connect.Response[v1.NodeMetadataResponse], error) } // NewMetricsCollectorServiceHandler builds an HTTP handler from the service implementation. It @@ -182,6 +198,11 @@ func NewMetricsCollectorServiceHandler(svc MetricsCollectorServiceHandler, opts svc.SendTelemetryLogs, opts..., ) + metricsCollectorServiceNodeMetadataHandler := connect.NewUnaryHandler( + MetricsCollectorServiceNodeMetadataProcedure, + svc.NodeMetadata, + opts..., + ) return "/api.v1.MetricsCollectorService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case MetricsCollectorServiceSendResourceProcedure: @@ -194,6 +215,8 @@ func NewMetricsCollectorServiceHandler(svc MetricsCollectorServiceHandler, opts metricsCollectorServiceSendClusterSnapshotStreamHandler.ServeHTTP(w, r) case MetricsCollectorServiceSendTelemetryLogsProcedure: metricsCollectorServiceSendTelemetryLogsHandler.ServeHTTP(w, r) + case MetricsCollectorServiceNodeMetadataProcedure: + metricsCollectorServiceNodeMetadataHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -222,3 +245,7 @@ func (UnimplementedMetricsCollectorServiceHandler) SendClusterSnapshotStream(con func (UnimplementedMetricsCollectorServiceHandler) SendTelemetryLogs(context.Context, *connect.Request[v1.SendTelemetryLogsRequest]) (*connect.Response[v1.SendTelemetryLogsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("api.v1.MetricsCollectorService.SendTelemetryLogs is not implemented")) } + +func (UnimplementedMetricsCollectorServiceHandler) NodeMetadata(context.Context, *connect.Request[v1.NodeMetadataRequest]) (*connect.Response[v1.NodeMetadataResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("api.v1.MetricsCollectorService.NodeMetadata is not implemented")) +} diff --git a/gen/api/v1/common.pb.go b/gen/api/v1/common.pb.go new file mode 100644 index 00000000..971561df --- /dev/null +++ b/gen/api/v1/common.pb.go @@ -0,0 +1,16068 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc (unknown) +// source: api/v1/common.proto + +package apiv1 + +import ( + money "google.golang.org/genproto/googleapis/type/money" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Enums +type K8SObjectKind int32 + +const ( + K8SObjectKind_K8S_OBJECT_KIND_UNSPECIFIED K8SObjectKind = 0 + K8SObjectKind_K8S_OBJECT_KIND_DEPLOYMENT K8SObjectKind = 1 + K8SObjectKind_K8S_OBJECT_KIND_REPLICA_SET K8SObjectKind = 2 + K8SObjectKind_K8S_OBJECT_KIND_STATEFUL_SET K8SObjectKind = 3 + K8SObjectKind_K8S_OBJECT_KIND_DAEMON_SET K8SObjectKind = 4 + K8SObjectKind_K8S_OBJECT_KIND_JOB K8SObjectKind = 5 + K8SObjectKind_K8S_OBJECT_KIND_CRON_JOB K8SObjectKind = 6 + K8SObjectKind_K8S_OBJECT_KIND_REPLICATION_CONTROLLER K8SObjectKind = 7 + K8SObjectKind_K8S_OBJECT_KIND_POD K8SObjectKind = 8 + K8SObjectKind_K8S_OBJECT_KIND_NAMESPACE K8SObjectKind = 9 + K8SObjectKind_K8S_OBJECT_KIND_NODE K8SObjectKind = 10 + K8SObjectKind_K8S_OBJECT_KIND_INGRESS K8SObjectKind = 11 + K8SObjectKind_K8S_OBJECT_KIND_CONTAINER K8SObjectKind = 12 + K8SObjectKind_K8S_OBJECT_KIND_SERVICE K8SObjectKind = 13 + K8SObjectKind_K8S_OBJECT_KIND_CONFIG_MAP K8SObjectKind = 14 + K8SObjectKind_K8S_OBJECT_KIND_PERSISTENT_VOLUME K8SObjectKind = 15 + K8SObjectKind_K8S_OBJECT_KIND_PERSISTENT_VOLUME_CLAIM K8SObjectKind = 16 + K8SObjectKind_K8S_OBJECT_KIND_STORAGE_CLASS K8SObjectKind = 17 + K8SObjectKind_K8S_OBJECT_KIND_ARGO_ROLLOUT K8SObjectKind = 18 + K8SObjectKind_K8S_OBJECT_KIND_HORIZONTAL_POD_AUTOSCALER K8SObjectKind = 19 + K8SObjectKind_K8S_OBJECT_KIND_VERTICAL_POD_AUTOSCALER K8SObjectKind = 20 + K8SObjectKind_K8S_OBJECT_KIND_LIMIT_RANGE K8SObjectKind = 21 + K8SObjectKind_K8S_OBJECT_KIND_SERVICE_ACCOUNT K8SObjectKind = 22 + K8SObjectKind_K8S_OBJECT_KIND_ROLE K8SObjectKind = 23 + K8SObjectKind_K8S_OBJECT_KIND_ROLE_BINDING K8SObjectKind = 24 + K8SObjectKind_K8S_OBJECT_KIND_KEDA_SCALED_OBJECT K8SObjectKind = 25 + K8SObjectKind_K8S_OBJECT_KIND_KARPENTER_RESOURCE K8SObjectKind = 26 + K8SObjectKind_K8S_OBJECT_KIND_POD_DISRUPTION_BUDGET K8SObjectKind = 27 + K8SObjectKind_K8S_OBJECT_KIND_RESOURCE_QUOTA K8SObjectKind = 28 +) + +// Enum value maps for K8SObjectKind. +var ( + K8SObjectKind_name = map[int32]string{ + 0: "K8S_OBJECT_KIND_UNSPECIFIED", + 1: "K8S_OBJECT_KIND_DEPLOYMENT", + 2: "K8S_OBJECT_KIND_REPLICA_SET", + 3: "K8S_OBJECT_KIND_STATEFUL_SET", + 4: "K8S_OBJECT_KIND_DAEMON_SET", + 5: "K8S_OBJECT_KIND_JOB", + 6: "K8S_OBJECT_KIND_CRON_JOB", + 7: "K8S_OBJECT_KIND_REPLICATION_CONTROLLER", + 8: "K8S_OBJECT_KIND_POD", + 9: "K8S_OBJECT_KIND_NAMESPACE", + 10: "K8S_OBJECT_KIND_NODE", + 11: "K8S_OBJECT_KIND_INGRESS", + 12: "K8S_OBJECT_KIND_CONTAINER", + 13: "K8S_OBJECT_KIND_SERVICE", + 14: "K8S_OBJECT_KIND_CONFIG_MAP", + 15: "K8S_OBJECT_KIND_PERSISTENT_VOLUME", + 16: "K8S_OBJECT_KIND_PERSISTENT_VOLUME_CLAIM", + 17: "K8S_OBJECT_KIND_STORAGE_CLASS", + 18: "K8S_OBJECT_KIND_ARGO_ROLLOUT", + 19: "K8S_OBJECT_KIND_HORIZONTAL_POD_AUTOSCALER", + 20: "K8S_OBJECT_KIND_VERTICAL_POD_AUTOSCALER", + 21: "K8S_OBJECT_KIND_LIMIT_RANGE", + 22: "K8S_OBJECT_KIND_SERVICE_ACCOUNT", + 23: "K8S_OBJECT_KIND_ROLE", + 24: "K8S_OBJECT_KIND_ROLE_BINDING", + 25: "K8S_OBJECT_KIND_KEDA_SCALED_OBJECT", + 26: "K8S_OBJECT_KIND_KARPENTER_RESOURCE", + 27: "K8S_OBJECT_KIND_POD_DISRUPTION_BUDGET", + 28: "K8S_OBJECT_KIND_RESOURCE_QUOTA", + } + K8SObjectKind_value = map[string]int32{ + "K8S_OBJECT_KIND_UNSPECIFIED": 0, + "K8S_OBJECT_KIND_DEPLOYMENT": 1, + "K8S_OBJECT_KIND_REPLICA_SET": 2, + "K8S_OBJECT_KIND_STATEFUL_SET": 3, + "K8S_OBJECT_KIND_DAEMON_SET": 4, + "K8S_OBJECT_KIND_JOB": 5, + "K8S_OBJECT_KIND_CRON_JOB": 6, + "K8S_OBJECT_KIND_REPLICATION_CONTROLLER": 7, + "K8S_OBJECT_KIND_POD": 8, + "K8S_OBJECT_KIND_NAMESPACE": 9, + "K8S_OBJECT_KIND_NODE": 10, + "K8S_OBJECT_KIND_INGRESS": 11, + "K8S_OBJECT_KIND_CONTAINER": 12, + "K8S_OBJECT_KIND_SERVICE": 13, + "K8S_OBJECT_KIND_CONFIG_MAP": 14, + "K8S_OBJECT_KIND_PERSISTENT_VOLUME": 15, + "K8S_OBJECT_KIND_PERSISTENT_VOLUME_CLAIM": 16, + "K8S_OBJECT_KIND_STORAGE_CLASS": 17, + "K8S_OBJECT_KIND_ARGO_ROLLOUT": 18, + "K8S_OBJECT_KIND_HORIZONTAL_POD_AUTOSCALER": 19, + "K8S_OBJECT_KIND_VERTICAL_POD_AUTOSCALER": 20, + "K8S_OBJECT_KIND_LIMIT_RANGE": 21, + "K8S_OBJECT_KIND_SERVICE_ACCOUNT": 22, + "K8S_OBJECT_KIND_ROLE": 23, + "K8S_OBJECT_KIND_ROLE_BINDING": 24, + "K8S_OBJECT_KIND_KEDA_SCALED_OBJECT": 25, + "K8S_OBJECT_KIND_KARPENTER_RESOURCE": 26, + "K8S_OBJECT_KIND_POD_DISRUPTION_BUDGET": 27, + "K8S_OBJECT_KIND_RESOURCE_QUOTA": 28, + } +) + +func (x K8SObjectKind) Enum() *K8SObjectKind { + p := new(K8SObjectKind) + *p = x + return p +} + +func (x K8SObjectKind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (K8SObjectKind) Descriptor() protoreflect.EnumDescriptor { + return file_api_v1_common_proto_enumTypes[0].Descriptor() +} + +func (K8SObjectKind) Type() protoreflect.EnumType { + return &file_api_v1_common_proto_enumTypes[0] +} + +func (x K8SObjectKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use K8SObjectKind.Descriptor instead. +func (K8SObjectKind) EnumDescriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{0} +} + +// Enum listing order by directions +type OrderByEnum int32 + +const ( + OrderByEnum_ORDER_BY_ENUM_DESC_UNSPECIFIED OrderByEnum = 0 + OrderByEnum_ORDER_BY_ENUM_ASC OrderByEnum = 1 +) + +// Enum value maps for OrderByEnum. +var ( + OrderByEnum_name = map[int32]string{ + 0: "ORDER_BY_ENUM_DESC_UNSPECIFIED", + 1: "ORDER_BY_ENUM_ASC", + } + OrderByEnum_value = map[string]int32{ + "ORDER_BY_ENUM_DESC_UNSPECIFIED": 0, + "ORDER_BY_ENUM_ASC": 1, + } +) + +func (x OrderByEnum) Enum() *OrderByEnum { + p := new(OrderByEnum) + *p = x + return p +} + +func (x OrderByEnum) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (OrderByEnum) Descriptor() protoreflect.EnumDescriptor { + return file_api_v1_common_proto_enumTypes[1].Descriptor() +} + +func (OrderByEnum) Type() protoreflect.EnumType { + return &file_api_v1_common_proto_enumTypes[1] +} + +func (x OrderByEnum) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use OrderByEnum.Descriptor instead. +func (OrderByEnum) EnumDescriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{1} +} + +// LabelSelectorOperator is the set of operators that can be used in a selector requirement. +type LabelSelectorOperator int32 + +const ( + LabelSelectorOperator_LABEL_SELECTOR_OPERATOR_UNSPECIFIED LabelSelectorOperator = 0 + LabelSelectorOperator_LABEL_SELECTOR_OPERATOR_IN LabelSelectorOperator = 1 // In + LabelSelectorOperator_LABEL_SELECTOR_OPERATOR_NOT_IN LabelSelectorOperator = 2 // NotIn + LabelSelectorOperator_LABEL_SELECTOR_OPERATOR_EXISTS LabelSelectorOperator = 3 // Exists + LabelSelectorOperator_LABEL_SELECTOR_OPERATOR_DOES_NOT_EXIST LabelSelectorOperator = 4 // DoesNotExist +) + +// Enum value maps for LabelSelectorOperator. +var ( + LabelSelectorOperator_name = map[int32]string{ + 0: "LABEL_SELECTOR_OPERATOR_UNSPECIFIED", + 1: "LABEL_SELECTOR_OPERATOR_IN", + 2: "LABEL_SELECTOR_OPERATOR_NOT_IN", + 3: "LABEL_SELECTOR_OPERATOR_EXISTS", + 4: "LABEL_SELECTOR_OPERATOR_DOES_NOT_EXIST", + } + LabelSelectorOperator_value = map[string]int32{ + "LABEL_SELECTOR_OPERATOR_UNSPECIFIED": 0, + "LABEL_SELECTOR_OPERATOR_IN": 1, + "LABEL_SELECTOR_OPERATOR_NOT_IN": 2, + "LABEL_SELECTOR_OPERATOR_EXISTS": 3, + "LABEL_SELECTOR_OPERATOR_DOES_NOT_EXIST": 4, + } +) + +func (x LabelSelectorOperator) Enum() *LabelSelectorOperator { + p := new(LabelSelectorOperator) + *p = x + return p +} + +func (x LabelSelectorOperator) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (LabelSelectorOperator) Descriptor() protoreflect.EnumDescriptor { + return file_api_v1_common_proto_enumTypes[2].Descriptor() +} + +func (LabelSelectorOperator) Type() protoreflect.EnumType { + return &file_api_v1_common_proto_enumTypes[2] +} + +func (x LabelSelectorOperator) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use LabelSelectorOperator.Descriptor instead. +func (LabelSelectorOperator) EnumDescriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{2} +} + +// Filter to select ACTIVE, DELETED, or BOTH types of workloads. +type WorkloadStatusFilter int32 + +const ( + WorkloadStatusFilter_WORKLOAD_STATUS_FILTER_UNSPECIFIED WorkloadStatusFilter = 0 + WorkloadStatusFilter_WORKLOAD_STATUS_FILTER_ACTIVE WorkloadStatusFilter = 1 // Only active (non-deleted) workloads + WorkloadStatusFilter_WORKLOAD_STATUS_FILTER_DELETED WorkloadStatusFilter = 2 // Only deleted workloads + WorkloadStatusFilter_WORKLOAD_STATUS_FILTER_BOTH WorkloadStatusFilter = 3 // Both active and deleted workloads +) + +// Enum value maps for WorkloadStatusFilter. +var ( + WorkloadStatusFilter_name = map[int32]string{ + 0: "WORKLOAD_STATUS_FILTER_UNSPECIFIED", + 1: "WORKLOAD_STATUS_FILTER_ACTIVE", + 2: "WORKLOAD_STATUS_FILTER_DELETED", + 3: "WORKLOAD_STATUS_FILTER_BOTH", + } + WorkloadStatusFilter_value = map[string]int32{ + "WORKLOAD_STATUS_FILTER_UNSPECIFIED": 0, + "WORKLOAD_STATUS_FILTER_ACTIVE": 1, + "WORKLOAD_STATUS_FILTER_DELETED": 2, + "WORKLOAD_STATUS_FILTER_BOTH": 3, + } +) + +func (x WorkloadStatusFilter) Enum() *WorkloadStatusFilter { + p := new(WorkloadStatusFilter) + *p = x + return p +} + +func (x WorkloadStatusFilter) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (WorkloadStatusFilter) Descriptor() protoreflect.EnumDescriptor { + return file_api_v1_common_proto_enumTypes[3].Descriptor() +} + +func (WorkloadStatusFilter) Type() protoreflect.EnumType { + return &file_api_v1_common_proto_enumTypes[3] +} + +func (x WorkloadStatusFilter) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use WorkloadStatusFilter.Descriptor instead. +func (WorkloadStatusFilter) EnumDescriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{3} +} + +// Represents a single audit log entry +type AuditLogEntry struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + TeamId string `protobuf:"bytes,2,opt,name=team_id,json=teamId,proto3" json:"team_id,omitempty"` + ClusterId string `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` + NodeId string `protobuf:"bytes,4,opt,name=node_id,json=nodeId,proto3" json:"node_id,omitempty"` + WorkloadId string `protobuf:"bytes,5,opt,name=workload_id,json=workloadId,proto3" json:"workload_id,omitempty"` + WorkloadType K8SObjectKind `protobuf:"varint,6,opt,name=workload_type,json=workloadType,proto3,enum=api.v1.K8SObjectKind" json:"workload_type,omitempty"` // only going to be deployment, replicaset, statefulset, daemonset, job, cronjob, pod + RecommendationPolicyId string `protobuf:"bytes,7,opt,name=recommendation_policy_id,json=recommendationPolicyId,proto3" json:"recommendation_policy_id,omitempty"` + RecommendationId string `protobuf:"bytes,8,opt,name=recommendation_id,json=recommendationId,proto3" json:"recommendation_id,omitempty"` + OriginatingUserId string `protobuf:"bytes,9,opt,name=originating_user_id,json=originatingUserId,proto3" json:"originating_user_id,omitempty"` + OriginatingUserEmail string `protobuf:"bytes,10,opt,name=originating_user_email,json=originatingUserEmail,proto3" json:"originating_user_email,omitempty"` + ImpersonatedUserId string `protobuf:"bytes,11,opt,name=impersonated_user_id,json=impersonatedUserId,proto3" json:"impersonated_user_id,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,12,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,13,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + Event string `protobuf:"bytes,14,opt,name=event,proto3" json:"event,omitempty"` + Message string `protobuf:"bytes,15,opt,name=message,proto3" json:"message,omitempty"` + Metadata []byte `protobuf:"bytes,16,opt,name=metadata,proto3" json:"metadata,omitempty"` + NodeGroupNames []string `protobuf:"bytes,17,rep,name=node_group_names,json=nodeGroupNames,proto3" json:"node_group_names,omitempty"` +} + +func (x *AuditLogEntry) Reset() { + *x = AuditLogEntry{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AuditLogEntry) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AuditLogEntry) ProtoMessage() {} + +func (x *AuditLogEntry) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[0] + 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 AuditLogEntry.ProtoReflect.Descriptor instead. +func (*AuditLogEntry) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{0} +} + +func (x *AuditLogEntry) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *AuditLogEntry) GetTeamId() string { + if x != nil { + return x.TeamId + } + return "" +} + +func (x *AuditLogEntry) GetClusterId() string { + if x != nil { + return x.ClusterId + } + return "" +} + +func (x *AuditLogEntry) GetNodeId() string { + if x != nil { + return x.NodeId + } + return "" +} + +func (x *AuditLogEntry) GetWorkloadId() string { + if x != nil { + return x.WorkloadId + } + return "" +} + +func (x *AuditLogEntry) GetWorkloadType() K8SObjectKind { + if x != nil { + return x.WorkloadType + } + return K8SObjectKind_K8S_OBJECT_KIND_UNSPECIFIED +} + +func (x *AuditLogEntry) GetRecommendationPolicyId() string { + if x != nil { + return x.RecommendationPolicyId + } + return "" +} + +func (x *AuditLogEntry) GetRecommendationId() string { + if x != nil { + return x.RecommendationId + } + return "" +} + +func (x *AuditLogEntry) GetOriginatingUserId() string { + if x != nil { + return x.OriginatingUserId + } + return "" +} + +func (x *AuditLogEntry) GetOriginatingUserEmail() string { + if x != nil { + return x.OriginatingUserEmail + } + return "" +} + +func (x *AuditLogEntry) GetImpersonatedUserId() string { + if x != nil { + return x.ImpersonatedUserId + } + return "" +} + +func (x *AuditLogEntry) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *AuditLogEntry) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +func (x *AuditLogEntry) GetEvent() string { + if x != nil { + return x.Event + } + return "" +} + +func (x *AuditLogEntry) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *AuditLogEntry) GetMetadata() []byte { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *AuditLogEntry) GetNodeGroupNames() []string { + if x != nil { + return x.NodeGroupNames + } + return nil +} + +// Pagination is used in "get-all" type RPCs that yield a large number of results. +type Pagination struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Page int32 `protobuf:"varint,1,opt,name=page,proto3" json:"page,omitempty"` + PageSize int32 `protobuf:"varint,2,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + OrderByColumn string `protobuf:"bytes,3,opt,name=order_by_column,json=orderByColumn,proto3" json:"order_by_column,omitempty"` + OrderBy OrderByEnum `protobuf:"varint,4,opt,name=order_by,json=orderBy,proto3,enum=api.v1.OrderByEnum" json:"order_by,omitempty"` + Total int32 `protobuf:"varint,5,opt,name=total,proto3" json:"total,omitempty"` + TotalPages int32 `protobuf:"varint,6,opt,name=total_pages,json=totalPages,proto3" json:"total_pages,omitempty"` + OverridePagination bool `protobuf:"varint,7,opt,name=override_pagination,json=overridePagination,proto3" json:"override_pagination,omitempty"` +} + +func (x *Pagination) Reset() { + *x = Pagination{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Pagination) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Pagination) ProtoMessage() {} + +func (x *Pagination) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Pagination.ProtoReflect.Descriptor instead. +func (*Pagination) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{1} +} + +func (x *Pagination) GetPage() int32 { + if x != nil { + return x.Page + } + return 0 +} + +func (x *Pagination) GetPageSize() int32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *Pagination) GetOrderByColumn() string { + if x != nil { + return x.OrderByColumn + } + return "" +} + +func (x *Pagination) GetOrderBy() OrderByEnum { + if x != nil { + return x.OrderBy + } + return OrderByEnum_ORDER_BY_ENUM_DESC_UNSPECIFIED +} + +func (x *Pagination) GetTotal() int32 { + if x != nil { + return x.Total + } + return 0 +} + +func (x *Pagination) GetTotalPages() int32 { + if x != nil { + return x.TotalPages + } + return 0 +} + +func (x *Pagination) GetOverridePagination() bool { + if x != nil { + return x.OverridePagination + } + return false +} + +// CostInfo contains cost estimates and optimized cost projections. +type CostInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CpuCostPerHour float64 `protobuf:"fixed64,1,opt,name=cpu_cost_per_hour,json=cpuCostPerHour,proto3" json:"cpu_cost_per_hour,omitempty"` // Estimated CPU cost per hour. + MemoryCostPerHour float64 `protobuf:"fixed64,2,opt,name=memory_cost_per_hour,json=memoryCostPerHour,proto3" json:"memory_cost_per_hour,omitempty"` // Estimated memory cost per hour. + TotalCostPerHour float64 `protobuf:"fixed64,3,opt,name=total_cost_per_hour,json=totalCostPerHour,proto3" json:"total_cost_per_hour,omitempty"` // Total estimated cost per hour. + TotalCostPerMonth float64 `protobuf:"fixed64,4,opt,name=total_cost_per_month,json=totalCostPerMonth,proto3" json:"total_cost_per_month,omitempty"` // Total estimated cost per month. + TotalCostPerYear float64 `protobuf:"fixed64,5,opt,name=total_cost_per_year,json=totalCostPerYear,proto3" json:"total_cost_per_year,omitempty"` // Total estimated cost per year. + OptimizedCpuCostPerHour float64 `protobuf:"fixed64,6,opt,name=optimized_cpu_cost_per_hour,json=optimizedCpuCostPerHour,proto3" json:"optimized_cpu_cost_per_hour,omitempty"` // Optimized CPU cost per hour. + OptimizedMemoryCostPerHour float64 `protobuf:"fixed64,7,opt,name=optimized_memory_cost_per_hour,json=optimizedMemoryCostPerHour,proto3" json:"optimized_memory_cost_per_hour,omitempty"` // Optimized memory cost per hour. + OptimizedTotalCostPerHour float64 `protobuf:"fixed64,8,opt,name=optimized_total_cost_per_hour,json=optimizedTotalCostPerHour,proto3" json:"optimized_total_cost_per_hour,omitempty"` // Optimized total cost per hour. + OptimizedTotalCostPerMonth float64 `protobuf:"fixed64,9,opt,name=optimized_total_cost_per_month,json=optimizedTotalCostPerMonth,proto3" json:"optimized_total_cost_per_month,omitempty"` // Optimized total cost per month. + OptimizedTotalCostPerYear float64 `protobuf:"fixed64,10,opt,name=optimized_total_cost_per_year,json=optimizedTotalCostPerYear,proto3" json:"optimized_total_cost_per_year,omitempty"` // Optimized total cost per year. + CpuCostForTimePeriod float64 `protobuf:"fixed64,11,opt,name=cpu_cost_for_time_period,json=cpuCostForTimePeriod,proto3" json:"cpu_cost_for_time_period,omitempty"` // CPU cost for selected time period + MemoryCostForTimePeriod float64 `protobuf:"fixed64,12,opt,name=memory_cost_for_time_period,json=memoryCostForTimePeriod,proto3" json:"memory_cost_for_time_period,omitempty"` // Memory cost for selected time period + TotalCostForTimePeriod float64 `protobuf:"fixed64,13,opt,name=total_cost_for_time_period,json=totalCostForTimePeriod,proto3" json:"total_cost_for_time_period,omitempty"` // Total cost for selected time period + OptimizedCpuCostForTimePeriod float64 `protobuf:"fixed64,14,opt,name=optimized_cpu_cost_for_time_period,json=optimizedCpuCostForTimePeriod,proto3" json:"optimized_cpu_cost_for_time_period,omitempty"` // Optimized CPU cost for selected time period + OptimizedMemoryCostForTimePeriod float64 `protobuf:"fixed64,15,opt,name=optimized_memory_cost_for_time_period,json=optimizedMemoryCostForTimePeriod,proto3" json:"optimized_memory_cost_for_time_period,omitempty"` // Optimized Memory cost for selected time period + OptimizedTotalCostForTimePeriod float64 `protobuf:"fixed64,16,opt,name=optimized_total_cost_for_time_period,json=optimizedTotalCostForTimePeriod,proto3" json:"optimized_total_cost_for_time_period,omitempty"` // Optimized total cost for selected time period + OptimizedGpuCostForTimePeriod float64 `protobuf:"fixed64,17,opt,name=optimized_gpu_cost_for_time_period,json=optimizedGpuCostForTimePeriod,proto3" json:"optimized_gpu_cost_for_time_period,omitempty"` // Optimized GPU cost for selected time period + GpuCostForTimePeriod float64 `protobuf:"fixed64,18,opt,name=gpu_cost_for_time_period,json=gpuCostForTimePeriod,proto3" json:"gpu_cost_for_time_period,omitempty"` // GPU cost for time period + GpuCostPerHour float64 `protobuf:"fixed64,19,opt,name=gpu_cost_per_hour,json=gpuCostPerHour,proto3" json:"gpu_cost_per_hour,omitempty"` // GPU cost per hour + OptimizedGpuCostPerHour float64 `protobuf:"fixed64,20,opt,name=optimized_gpu_cost_per_hour,json=optimizedGpuCostPerHour,proto3" json:"optimized_gpu_cost_per_hour,omitempty"` // Optimized GPU cost per hour + CpuCostPerVcpuPerHour float64 `protobuf:"fixed64,21,opt,name=cpu_cost_per_vcpu_per_hour,json=cpuCostPerVcpuPerHour,proto3" json:"cpu_cost_per_vcpu_per_hour,omitempty"` // Estimated CPU cost per vcpu per hour. + MemoryCostPerGibPerHour float64 `protobuf:"fixed64,22,opt,name=memory_cost_per_gib_per_hour,json=memoryCostPerGibPerHour,proto3" json:"memory_cost_per_gib_per_hour,omitempty"` // Estimated memory cost per gib per hour. + NodeRecommendationSavedCostLastMonth *money.Money `protobuf:"bytes,23,opt,name=node_recommendation_saved_cost_last_month,json=nodeRecommendationSavedCostLastMonth,proto3" json:"node_recommendation_saved_cost_last_month,omitempty"` // Estimated cost saved by node recommendations in the last month. +} + +func (x *CostInfo) Reset() { + *x = CostInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CostInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CostInfo) ProtoMessage() {} + +func (x *CostInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[2] + 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 CostInfo.ProtoReflect.Descriptor instead. +func (*CostInfo) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{2} +} + +func (x *CostInfo) GetCpuCostPerHour() float64 { + if x != nil { + return x.CpuCostPerHour + } + return 0 +} + +func (x *CostInfo) GetMemoryCostPerHour() float64 { + if x != nil { + return x.MemoryCostPerHour + } + return 0 +} + +func (x *CostInfo) GetTotalCostPerHour() float64 { + if x != nil { + return x.TotalCostPerHour + } + return 0 +} + +func (x *CostInfo) GetTotalCostPerMonth() float64 { + if x != nil { + return x.TotalCostPerMonth + } + return 0 +} + +func (x *CostInfo) GetTotalCostPerYear() float64 { + if x != nil { + return x.TotalCostPerYear + } + return 0 +} + +func (x *CostInfo) GetOptimizedCpuCostPerHour() float64 { + if x != nil { + return x.OptimizedCpuCostPerHour + } + return 0 +} + +func (x *CostInfo) GetOptimizedMemoryCostPerHour() float64 { + if x != nil { + return x.OptimizedMemoryCostPerHour + } + return 0 +} + +func (x *CostInfo) GetOptimizedTotalCostPerHour() float64 { + if x != nil { + return x.OptimizedTotalCostPerHour + } + return 0 +} + +func (x *CostInfo) GetOptimizedTotalCostPerMonth() float64 { + if x != nil { + return x.OptimizedTotalCostPerMonth + } + return 0 +} + +func (x *CostInfo) GetOptimizedTotalCostPerYear() float64 { + if x != nil { + return x.OptimizedTotalCostPerYear + } + return 0 +} + +func (x *CostInfo) GetCpuCostForTimePeriod() float64 { + if x != nil { + return x.CpuCostForTimePeriod + } + return 0 +} + +func (x *CostInfo) GetMemoryCostForTimePeriod() float64 { + if x != nil { + return x.MemoryCostForTimePeriod + } + return 0 +} + +func (x *CostInfo) GetTotalCostForTimePeriod() float64 { + if x != nil { + return x.TotalCostForTimePeriod + } + return 0 +} + +func (x *CostInfo) GetOptimizedCpuCostForTimePeriod() float64 { + if x != nil { + return x.OptimizedCpuCostForTimePeriod + } + return 0 +} + +func (x *CostInfo) GetOptimizedMemoryCostForTimePeriod() float64 { + if x != nil { + return x.OptimizedMemoryCostForTimePeriod + } + return 0 +} + +func (x *CostInfo) GetOptimizedTotalCostForTimePeriod() float64 { + if x != nil { + return x.OptimizedTotalCostForTimePeriod + } + return 0 +} + +func (x *CostInfo) GetOptimizedGpuCostForTimePeriod() float64 { + if x != nil { + return x.OptimizedGpuCostForTimePeriod + } + return 0 +} + +func (x *CostInfo) GetGpuCostForTimePeriod() float64 { + if x != nil { + return x.GpuCostForTimePeriod + } + return 0 +} + +func (x *CostInfo) GetGpuCostPerHour() float64 { + if x != nil { + return x.GpuCostPerHour + } + return 0 +} + +func (x *CostInfo) GetOptimizedGpuCostPerHour() float64 { + if x != nil { + return x.OptimizedGpuCostPerHour + } + return 0 +} + +func (x *CostInfo) GetCpuCostPerVcpuPerHour() float64 { + if x != nil { + return x.CpuCostPerVcpuPerHour + } + return 0 +} + +func (x *CostInfo) GetMemoryCostPerGibPerHour() float64 { + if x != nil { + return x.MemoryCostPerGibPerHour + } + return 0 +} + +func (x *CostInfo) GetNodeRecommendationSavedCostLastMonth() *money.Money { + if x != nil { + return x.NodeRecommendationSavedCostLastMonth + } + return nil +} + +// ResourceMetrics encapsulates CPU and memory capacity, usage, and utilization for nodes and containers. +type ResourceMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NodeCpuCapacity float64 `protobuf:"fixed64,1,opt,name=node_cpu_capacity,json=nodeCpuCapacity,proto3" json:"node_cpu_capacity,omitempty"` // Total CPU capacity of nodes. + NodeMemoryCapacity float64 `protobuf:"fixed64,2,opt,name=node_memory_capacity,json=nodeMemoryCapacity,proto3" json:"node_memory_capacity,omitempty"` // Total memory capacity of nodes. + NodeCpuUsage float64 `protobuf:"fixed64,3,opt,name=node_cpu_usage,json=nodeCpuUsage,proto3" json:"node_cpu_usage,omitempty"` // Current CPU usage of nodes. + NodeMemoryUsage float64 `protobuf:"fixed64,4,opt,name=node_memory_usage,json=nodeMemoryUsage,proto3" json:"node_memory_usage,omitempty"` // Current memory usage of nodes. + NodeCpuUtilization float64 `protobuf:"fixed64,5,opt,name=node_cpu_utilization,json=nodeCpuUtilization,proto3" json:"node_cpu_utilization,omitempty"` // CPU utilization percentage of nodes. + NodeMemoryUtilization float64 `protobuf:"fixed64,6,opt,name=node_memory_utilization,json=nodeMemoryUtilization,proto3" json:"node_memory_utilization,omitempty"` // Memory utilization percentage of nodes. + ContainerCpuUsage float64 `protobuf:"fixed64,7,opt,name=container_cpu_usage,json=containerCpuUsage,proto3" json:"container_cpu_usage,omitempty"` // Current CPU usage of containers. + ContainerMemoryUsage float64 `protobuf:"fixed64,8,opt,name=container_memory_usage,json=containerMemoryUsage,proto3" json:"container_memory_usage,omitempty"` // Current memory usage of containers. + ContainerCpuUtilization float64 `protobuf:"fixed64,9,opt,name=container_cpu_utilization,json=containerCpuUtilization,proto3" json:"container_cpu_utilization,omitempty"` // CPU utilization percentage of containers. + ContainerMemoryUtilization float64 `protobuf:"fixed64,10,opt,name=container_memory_utilization,json=containerMemoryUtilization,proto3" json:"container_memory_utilization,omitempty"` // Memory utilization percentage of containers. + ContainerCpuRequested float64 `protobuf:"fixed64,11,opt,name=container_cpu_requested,json=containerCpuRequested,proto3" json:"container_cpu_requested,omitempty"` // CPU requested by containers. + ContainerMemoryRequested float64 `protobuf:"fixed64,12,opt,name=container_memory_requested,json=containerMemoryRequested,proto3" json:"container_memory_requested,omitempty"` // Memory requested by containers. + ContainerCpuLimits float64 `protobuf:"fixed64,13,opt,name=container_cpu_limits,json=containerCpuLimits,proto3" json:"container_cpu_limits,omitempty"` // CPU limits of containers. + ContainerMemoryLimits float64 `protobuf:"fixed64,14,opt,name=container_memory_limits,json=containerMemoryLimits,proto3" json:"container_memory_limits,omitempty"` // Memory limits of containers. + ContainerGpuUsage float64 `protobuf:"fixed64,15,opt,name=container_gpu_usage,json=containerGpuUsage,proto3" json:"container_gpu_usage,omitempty"` // GPU usage of containers. + ContainerGpuRequested float64 `protobuf:"fixed64,16,opt,name=container_gpu_requested,json=containerGpuRequested,proto3" json:"container_gpu_requested,omitempty"` // GPU requests of containers. + ContainerGpuLimits float64 `protobuf:"fixed64,17,opt,name=container_gpu_limits,json=containerGpuLimits,proto3" json:"container_gpu_limits,omitempty"` // GPU limits of containers. + ContainerGpuUtilization float64 `protobuf:"fixed64,18,opt,name=container_gpu_utilization,json=containerGpuUtilization,proto3" json:"container_gpu_utilization,omitempty"` // GPU utilization of containers. + NodeGpuCapacity float64 `protobuf:"fixed64,19,opt,name=node_gpu_capacity,json=nodeGpuCapacity,proto3" json:"node_gpu_capacity,omitempty"` // GPU capcity of nodes. + NodeGpuUsage float64 `protobuf:"fixed64,20,opt,name=node_gpu_usage,json=nodeGpuUsage,proto3" json:"node_gpu_usage,omitempty"` // GPU usage of nodes. + NodeGpuUtilization float64 `protobuf:"fixed64,21,opt,name=node_gpu_utilization,json=nodeGpuUtilization,proto3" json:"node_gpu_utilization,omitempty"` // GPU utilization of nodes. + NodeGpuVramUsage float64 `protobuf:"fixed64,22,opt,name=node_gpu_vram_usage,json=nodeGpuVramUsage,proto3" json:"node_gpu_vram_usage,omitempty"` // GPU VRAM usage of nodes. + ContainerGpuVramUsage float64 `protobuf:"fixed64,23,opt,name=container_gpu_vram_usage,json=containerGpuVramUsage,proto3" json:"container_gpu_vram_usage,omitempty"` // GPU VRAM usage of containers. + NodeGpuVramCapacity float64 `protobuf:"fixed64,24,opt,name=node_gpu_vram_capacity,json=nodeGpuVramCapacity,proto3" json:"node_gpu_vram_capacity,omitempty"` // GPU VRAM capacity of nodes. + NodeGpuVramUtilization float64 `protobuf:"fixed64,25,opt,name=node_gpu_vram_utilization,json=nodeGpuVramUtilization,proto3" json:"node_gpu_vram_utilization,omitempty"` // GPU VRAM utilization of nodes. + NormalizedNodeMemoryCapacity float64 `protobuf:"fixed64,26,opt,name=normalized_node_memory_capacity,json=normalizedNodeMemoryCapacity,proto3" json:"normalized_node_memory_capacity,omitempty"` // Total memory capacity of nodes, normalized to cover for missing bytes. + NormalizedGpuVramCapacity float64 `protobuf:"fixed64,27,opt,name=normalized_gpu_vram_capacity,json=normalizedGpuVramCapacity,proto3" json:"normalized_gpu_vram_capacity,omitempty"` // Normalized GPU VRAM capacity of nodes. + // network bits TODO: node-level + ContainerNetRcv float64 `protobuf:"fixed64,41,opt,name=container_net_rcv,json=containerNetRcv,proto3" json:"container_net_rcv,omitempty"` // in bytes + ContainerNetTransmit float64 `protobuf:"fixed64,46,opt,name=container_net_transmit,json=containerNetTransmit,proto3" json:"container_net_transmit,omitempty"` // in bytes + ContainerNetRcvPckts float64 `protobuf:"fixed64,51,opt,name=container_net_rcv_pckts,json=containerNetRcvPckts,proto3" json:"container_net_rcv_pckts,omitempty"` // number of packets + ContainerNetTransmitPckts float64 `protobuf:"fixed64,56,opt,name=container_net_transmit_pckts,json=containerNetTransmitPckts,proto3" json:"container_net_transmit_pckts,omitempty"` // number of packets + // fs bits TODO: node-level + ContainerFsReadBytes float64 `protobuf:"fixed64,71,opt,name=container_fs_read_bytes,json=containerFsReadBytes,proto3" json:"container_fs_read_bytes,omitempty"` // in bytes + ContainerFsWriteBytes float64 `protobuf:"fixed64,76,opt,name=container_fs_write_bytes,json=containerFsWriteBytes,proto3" json:"container_fs_write_bytes,omitempty"` // in bytes + ContainerFsReads float64 `protobuf:"fixed64,81,opt,name=container_fs_reads,json=containerFsReads,proto3" json:"container_fs_reads,omitempty"` // float + ContainerFsWrites float64 `protobuf:"fixed64,86,opt,name=container_fs_writes,json=containerFsWrites,proto3" json:"container_fs_writes,omitempty"` // float +} + +func (x *ResourceMetrics) Reset() { + *x = ResourceMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceMetrics) ProtoMessage() {} + +func (x *ResourceMetrics) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[3] + 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 ResourceMetrics.ProtoReflect.Descriptor instead. +func (*ResourceMetrics) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{3} +} + +func (x *ResourceMetrics) GetNodeCpuCapacity() float64 { + if x != nil { + return x.NodeCpuCapacity + } + return 0 +} + +func (x *ResourceMetrics) GetNodeMemoryCapacity() float64 { + if x != nil { + return x.NodeMemoryCapacity + } + return 0 +} + +func (x *ResourceMetrics) GetNodeCpuUsage() float64 { + if x != nil { + return x.NodeCpuUsage + } + return 0 +} + +func (x *ResourceMetrics) GetNodeMemoryUsage() float64 { + if x != nil { + return x.NodeMemoryUsage + } + return 0 +} + +func (x *ResourceMetrics) GetNodeCpuUtilization() float64 { + if x != nil { + return x.NodeCpuUtilization + } + return 0 +} + +func (x *ResourceMetrics) GetNodeMemoryUtilization() float64 { + if x != nil { + return x.NodeMemoryUtilization + } + return 0 +} + +func (x *ResourceMetrics) GetContainerCpuUsage() float64 { + if x != nil { + return x.ContainerCpuUsage + } + return 0 +} + +func (x *ResourceMetrics) GetContainerMemoryUsage() float64 { + if x != nil { + return x.ContainerMemoryUsage + } + return 0 +} + +func (x *ResourceMetrics) GetContainerCpuUtilization() float64 { + if x != nil { + return x.ContainerCpuUtilization + } + return 0 +} + +func (x *ResourceMetrics) GetContainerMemoryUtilization() float64 { + if x != nil { + return x.ContainerMemoryUtilization + } + return 0 +} + +func (x *ResourceMetrics) GetContainerCpuRequested() float64 { + if x != nil { + return x.ContainerCpuRequested + } + return 0 +} + +func (x *ResourceMetrics) GetContainerMemoryRequested() float64 { + if x != nil { + return x.ContainerMemoryRequested + } + return 0 +} + +func (x *ResourceMetrics) GetContainerCpuLimits() float64 { + if x != nil { + return x.ContainerCpuLimits + } + return 0 +} + +func (x *ResourceMetrics) GetContainerMemoryLimits() float64 { + if x != nil { + return x.ContainerMemoryLimits + } + return 0 +} + +func (x *ResourceMetrics) GetContainerGpuUsage() float64 { + if x != nil { + return x.ContainerGpuUsage + } + return 0 +} + +func (x *ResourceMetrics) GetContainerGpuRequested() float64 { + if x != nil { + return x.ContainerGpuRequested + } + return 0 +} + +func (x *ResourceMetrics) GetContainerGpuLimits() float64 { + if x != nil { + return x.ContainerGpuLimits + } + return 0 +} + +func (x *ResourceMetrics) GetContainerGpuUtilization() float64 { + if x != nil { + return x.ContainerGpuUtilization + } + return 0 +} + +func (x *ResourceMetrics) GetNodeGpuCapacity() float64 { + if x != nil { + return x.NodeGpuCapacity + } + return 0 +} + +func (x *ResourceMetrics) GetNodeGpuUsage() float64 { + if x != nil { + return x.NodeGpuUsage + } + return 0 +} + +func (x *ResourceMetrics) GetNodeGpuUtilization() float64 { + if x != nil { + return x.NodeGpuUtilization + } + return 0 +} + +func (x *ResourceMetrics) GetNodeGpuVramUsage() float64 { + if x != nil { + return x.NodeGpuVramUsage + } + return 0 +} + +func (x *ResourceMetrics) GetContainerGpuVramUsage() float64 { + if x != nil { + return x.ContainerGpuVramUsage + } + return 0 +} + +func (x *ResourceMetrics) GetNodeGpuVramCapacity() float64 { + if x != nil { + return x.NodeGpuVramCapacity + } + return 0 +} + +func (x *ResourceMetrics) GetNodeGpuVramUtilization() float64 { + if x != nil { + return x.NodeGpuVramUtilization + } + return 0 +} + +func (x *ResourceMetrics) GetNormalizedNodeMemoryCapacity() float64 { + if x != nil { + return x.NormalizedNodeMemoryCapacity + } + return 0 +} + +func (x *ResourceMetrics) GetNormalizedGpuVramCapacity() float64 { + if x != nil { + return x.NormalizedGpuVramCapacity + } + return 0 +} + +func (x *ResourceMetrics) GetContainerNetRcv() float64 { + if x != nil { + return x.ContainerNetRcv + } + return 0 +} + +func (x *ResourceMetrics) GetContainerNetTransmit() float64 { + if x != nil { + return x.ContainerNetTransmit + } + return 0 +} + +func (x *ResourceMetrics) GetContainerNetRcvPckts() float64 { + if x != nil { + return x.ContainerNetRcvPckts + } + return 0 +} + +func (x *ResourceMetrics) GetContainerNetTransmitPckts() float64 { + if x != nil { + return x.ContainerNetTransmitPckts + } + return 0 +} + +func (x *ResourceMetrics) GetContainerFsReadBytes() float64 { + if x != nil { + return x.ContainerFsReadBytes + } + return 0 +} + +func (x *ResourceMetrics) GetContainerFsWriteBytes() float64 { + if x != nil { + return x.ContainerFsWriteBytes + } + return 0 +} + +func (x *ResourceMetrics) GetContainerFsReads() float64 { + if x != nil { + return x.ContainerFsReads + } + return 0 +} + +func (x *ResourceMetrics) GetContainerFsWrites() float64 { + if x != nil { + return x.ContainerFsWrites + } + return 0 +} + +// ForecastResourceMetrics encapsulates Forecasted CPU and memory capacity, usage, and utilization for nodes and containers. +type ForecastResourceMetrics struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Forecast timestamp. + ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Cluster id of the container. + ApplicationId string `protobuf:"bytes,3,opt,name=application_id,json=applicationId,proto3" json:"application_id,omitempty"` // Application id of the container. + ApplicationKind string `protobuf:"bytes,4,opt,name=application_kind,json=applicationKind,proto3" json:"application_kind,omitempty"` // Application kind of the container. + Model string `protobuf:"bytes,5,opt,name=model,proto3" json:"model,omitempty"` // Model used for the forecast + NodeCpuCapacity float64 `protobuf:"fixed64,6,opt,name=node_cpu_capacity,json=nodeCpuCapacity,proto3" json:"node_cpu_capacity,omitempty"` // Total CPU capacity of nodes. + NodeMemoryCapacity float64 `protobuf:"fixed64,7,opt,name=node_memory_capacity,json=nodeMemoryCapacity,proto3" json:"node_memory_capacity,omitempty"` // Total memory capacity of nodes. + NodeCpuUsage float64 `protobuf:"fixed64,8,opt,name=node_cpu_usage,json=nodeCpuUsage,proto3" json:"node_cpu_usage,omitempty"` // Current CPU usage of nodes. + NodeMemoryUsage float64 `protobuf:"fixed64,9,opt,name=node_memory_usage,json=nodeMemoryUsage,proto3" json:"node_memory_usage,omitempty"` // Current memory usage of nodes. + NodeCpuUtilization float64 `protobuf:"fixed64,10,opt,name=node_cpu_utilization,json=nodeCpuUtilization,proto3" json:"node_cpu_utilization,omitempty"` // CPU utilization percentage of nodes. + NodeMemoryUtilization float64 `protobuf:"fixed64,11,opt,name=node_memory_utilization,json=nodeMemoryUtilization,proto3" json:"node_memory_utilization,omitempty"` // Memory utilization percentage of nodes. + ContainerCpuUsage float64 `protobuf:"fixed64,12,opt,name=container_cpu_usage,json=containerCpuUsage,proto3" json:"container_cpu_usage,omitempty"` // Current CPU usage of containers. + ContainerMemoryUsage float64 `protobuf:"fixed64,13,opt,name=container_memory_usage,json=containerMemoryUsage,proto3" json:"container_memory_usage,omitempty"` // Current memory usage of containers. + ContainerCpuUtilization float64 `protobuf:"fixed64,14,opt,name=container_cpu_utilization,json=containerCpuUtilization,proto3" json:"container_cpu_utilization,omitempty"` // CPU utilization percentage of containers. + ContainerMemoryUtilization float64 `protobuf:"fixed64,15,opt,name=container_memory_utilization,json=containerMemoryUtilization,proto3" json:"container_memory_utilization,omitempty"` // Memory utilization percentage of containers. + ContainerCpuRequested float64 `protobuf:"fixed64,16,opt,name=container_cpu_requested,json=containerCpuRequested,proto3" json:"container_cpu_requested,omitempty"` // CPU requested by containers. + ContainerMemoryRequested float64 `protobuf:"fixed64,17,opt,name=container_memory_requested,json=containerMemoryRequested,proto3" json:"container_memory_requested,omitempty"` // Memory requested by containers. + ContainerCpuLimits float64 `protobuf:"fixed64,18,opt,name=container_cpu_limits,json=containerCpuLimits,proto3" json:"container_cpu_limits,omitempty"` // CPU limits of containers. + ContainerMemoryLimits float64 `protobuf:"fixed64,19,opt,name=container_memory_limits,json=containerMemoryLimits,proto3" json:"container_memory_limits,omitempty"` // Memory limits of containers. + ContainerGpuUsage float64 `protobuf:"fixed64,20,opt,name=container_gpu_usage,json=containerGpuUsage,proto3" json:"container_gpu_usage,omitempty"` // GPU usage of containers. + ContainerGpuRequested float64 `protobuf:"fixed64,21,opt,name=container_gpu_requested,json=containerGpuRequested,proto3" json:"container_gpu_requested,omitempty"` // GPU requests of containers. + ContainerGpuLimits float64 `protobuf:"fixed64,22,opt,name=container_gpu_limits,json=containerGpuLimits,proto3" json:"container_gpu_limits,omitempty"` // GPU limits of containers. + ContainerGpuUtilization float64 `protobuf:"fixed64,23,opt,name=container_gpu_utilization,json=containerGpuUtilization,proto3" json:"container_gpu_utilization,omitempty"` // GPU utilization of containers. + NodeGpuCapacity float64 `protobuf:"fixed64,24,opt,name=node_gpu_capacity,json=nodeGpuCapacity,proto3" json:"node_gpu_capacity,omitempty"` // GPU capcity of nodes. + NodeGpuUsage float64 `protobuf:"fixed64,25,opt,name=node_gpu_usage,json=nodeGpuUsage,proto3" json:"node_gpu_usage,omitempty"` // GPU usage of nodes. + NodeGpuUtilization float64 `protobuf:"fixed64,26,opt,name=node_gpu_utilization,json=nodeGpuUtilization,proto3" json:"node_gpu_utilization,omitempty"` // GPU utilization of nodes. + NodeGpuVramUsage float64 `protobuf:"fixed64,27,opt,name=node_gpu_vram_usage,json=nodeGpuVramUsage,proto3" json:"node_gpu_vram_usage,omitempty"` // GPU VRAM usage of nodes. + ContainerGpuVramUsage float64 `protobuf:"fixed64,28,opt,name=container_gpu_vram_usage,json=containerGpuVramUsage,proto3" json:"container_gpu_vram_usage,omitempty"` // GPU VRAM usage of containers. + NodeGpuVramCapacity float64 `protobuf:"fixed64,29,opt,name=node_gpu_vram_capacity,json=nodeGpuVramCapacity,proto3" json:"node_gpu_vram_capacity,omitempty"` // GPU VRAM capacity of nodes. + NodeGpuVramUtilization float64 `protobuf:"fixed64,30,opt,name=node_gpu_vram_utilization,json=nodeGpuVramUtilization,proto3" json:"node_gpu_vram_utilization,omitempty"` // GPU VRAM utilization of nodes. + NormalizedNodeMemoryCapacity float64 `protobuf:"fixed64,31,opt,name=normalized_node_memory_capacity,json=normalizedNodeMemoryCapacity,proto3" json:"normalized_node_memory_capacity,omitempty"` // Total memory capacity of nodes, normalized to cover for missing bytes. + NormalizedGpuVramCapacity float64 `protobuf:"fixed64,32,opt,name=normalized_gpu_vram_capacity,json=normalizedGpuVramCapacity,proto3" json:"normalized_gpu_vram_capacity,omitempty"` // Normalized GPU VRAM capacity of nodes. +} + +func (x *ForecastResourceMetrics) Reset() { + *x = ForecastResourceMetrics{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ForecastResourceMetrics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ForecastResourceMetrics) ProtoMessage() {} + +func (x *ForecastResourceMetrics) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[4] + 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 ForecastResourceMetrics.ProtoReflect.Descriptor instead. +func (*ForecastResourceMetrics) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{4} +} + +func (x *ForecastResourceMetrics) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *ForecastResourceMetrics) GetClusterId() string { + if x != nil { + return x.ClusterId + } + return "" +} + +func (x *ForecastResourceMetrics) GetApplicationId() string { + if x != nil { + return x.ApplicationId + } + return "" +} + +func (x *ForecastResourceMetrics) GetApplicationKind() string { + if x != nil { + return x.ApplicationKind + } + return "" +} + +func (x *ForecastResourceMetrics) GetModel() string { + if x != nil { + return x.Model + } + return "" +} + +func (x *ForecastResourceMetrics) GetNodeCpuCapacity() float64 { + if x != nil { + return x.NodeCpuCapacity + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeMemoryCapacity() float64 { + if x != nil { + return x.NodeMemoryCapacity + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeCpuUsage() float64 { + if x != nil { + return x.NodeCpuUsage + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeMemoryUsage() float64 { + if x != nil { + return x.NodeMemoryUsage + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeCpuUtilization() float64 { + if x != nil { + return x.NodeCpuUtilization + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeMemoryUtilization() float64 { + if x != nil { + return x.NodeMemoryUtilization + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerCpuUsage() float64 { + if x != nil { + return x.ContainerCpuUsage + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerMemoryUsage() float64 { + if x != nil { + return x.ContainerMemoryUsage + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerCpuUtilization() float64 { + if x != nil { + return x.ContainerCpuUtilization + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerMemoryUtilization() float64 { + if x != nil { + return x.ContainerMemoryUtilization + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerCpuRequested() float64 { + if x != nil { + return x.ContainerCpuRequested + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerMemoryRequested() float64 { + if x != nil { + return x.ContainerMemoryRequested + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerCpuLimits() float64 { + if x != nil { + return x.ContainerCpuLimits + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerMemoryLimits() float64 { + if x != nil { + return x.ContainerMemoryLimits + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerGpuUsage() float64 { + if x != nil { + return x.ContainerGpuUsage + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerGpuRequested() float64 { + if x != nil { + return x.ContainerGpuRequested + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerGpuLimits() float64 { + if x != nil { + return x.ContainerGpuLimits + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerGpuUtilization() float64 { + if x != nil { + return x.ContainerGpuUtilization + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeGpuCapacity() float64 { + if x != nil { + return x.NodeGpuCapacity + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeGpuUsage() float64 { + if x != nil { + return x.NodeGpuUsage + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeGpuUtilization() float64 { + if x != nil { + return x.NodeGpuUtilization + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeGpuVramUsage() float64 { + if x != nil { + return x.NodeGpuVramUsage + } + return 0 +} + +func (x *ForecastResourceMetrics) GetContainerGpuVramUsage() float64 { + if x != nil { + return x.ContainerGpuVramUsage + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeGpuVramCapacity() float64 { + if x != nil { + return x.NodeGpuVramCapacity + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNodeGpuVramUtilization() float64 { + if x != nil { + return x.NodeGpuVramUtilization + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNormalizedNodeMemoryCapacity() float64 { + if x != nil { + return x.NormalizedNodeMemoryCapacity + } + return 0 +} + +func (x *ForecastResourceMetrics) GetNormalizedGpuVramCapacity() float64 { + if x != nil { + return x.NormalizedGpuVramCapacity + } + return 0 +} + +// ResourceSummary provides aggregated resource counts and pod status counts for a cluster or workload. +type ResourceSummary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DeploymentCount int32 `protobuf:"varint,1,opt,name=deployment_count,json=deploymentCount,proto3" json:"deployment_count,omitempty"` // Number of Deployments. + StatefulSetCount int32 `protobuf:"varint,2,opt,name=stateful_set_count,json=statefulSetCount,proto3" json:"stateful_set_count,omitempty"` // Number of StatefulSets. + DaemonSetCount int32 `protobuf:"varint,3,opt,name=daemon_set_count,json=daemonSetCount,proto3" json:"daemon_set_count,omitempty"` // Number of DaemonSets. + JobCount int32 `protobuf:"varint,4,opt,name=job_count,json=jobCount,proto3" json:"job_count,omitempty"` // Number of Jobs. + CronJobCount int32 `protobuf:"varint,5,opt,name=cron_job_count,json=cronJobCount,proto3" json:"cron_job_count,omitempty"` // Number of CronJobs. + ReplicaSetCount int32 `protobuf:"varint,6,opt,name=replica_set_count,json=replicaSetCount,proto3" json:"replica_set_count,omitempty"` // Number of ReplicaSets. + PodCount int32 `protobuf:"varint,7,opt,name=pod_count,json=podCount,proto3" json:"pod_count,omitempty"` // Number of Pods. + ContainerCount int32 `protobuf:"varint,8,opt,name=container_count,json=containerCount,proto3" json:"container_count,omitempty"` // Number of Containers. + PendingPods int32 `protobuf:"varint,9,opt,name=pending_pods,json=pendingPods,proto3" json:"pending_pods,omitempty"` // Number of Pods in Pending state. + RunningPods int32 `protobuf:"varint,10,opt,name=running_pods,json=runningPods,proto3" json:"running_pods,omitempty"` // Number of Pods in Running state. + SucceededPods int32 `protobuf:"varint,11,opt,name=succeeded_pods,json=succeededPods,proto3" json:"succeeded_pods,omitempty"` // Number of Pods in Succeeded state. + FailedPods int32 `protobuf:"varint,12,opt,name=failed_pods,json=failedPods,proto3" json:"failed_pods,omitempty"` // Number of Pods in Failed state. + UnknownPods int32 `protobuf:"varint,13,opt,name=unknown_pods,json=unknownPods,proto3" json:"unknown_pods,omitempty"` // Number of Pods in Unknown state. + UnderProvisionedCount int32 `protobuf:"varint,14,opt,name=under_provisioned_count,json=underProvisionedCount,proto3" json:"under_provisioned_count,omitempty"` // Number of resources under-provisioned. + OverProvisionedCount int32 `protobuf:"varint,15,opt,name=over_provisioned_count,json=overProvisionedCount,proto3" json:"over_provisioned_count,omitempty"` // Number of resources over-provisioned. +} + +func (x *ResourceSummary) Reset() { + *x = ResourceSummary{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceSummary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceSummary) ProtoMessage() {} + +func (x *ResourceSummary) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[5] + 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 ResourceSummary.ProtoReflect.Descriptor instead. +func (*ResourceSummary) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{5} +} + +func (x *ResourceSummary) GetDeploymentCount() int32 { + if x != nil { + return x.DeploymentCount + } + return 0 +} + +func (x *ResourceSummary) GetStatefulSetCount() int32 { + if x != nil { + return x.StatefulSetCount + } + return 0 +} + +func (x *ResourceSummary) GetDaemonSetCount() int32 { + if x != nil { + return x.DaemonSetCount + } + return 0 +} + +func (x *ResourceSummary) GetJobCount() int32 { + if x != nil { + return x.JobCount + } + return 0 +} + +func (x *ResourceSummary) GetCronJobCount() int32 { + if x != nil { + return x.CronJobCount + } + return 0 +} + +func (x *ResourceSummary) GetReplicaSetCount() int32 { + if x != nil { + return x.ReplicaSetCount + } + return 0 +} + +func (x *ResourceSummary) GetPodCount() int32 { + if x != nil { + return x.PodCount + } + return 0 +} + +func (x *ResourceSummary) GetContainerCount() int32 { + if x != nil { + return x.ContainerCount + } + return 0 +} + +func (x *ResourceSummary) GetPendingPods() int32 { + if x != nil { + return x.PendingPods + } + return 0 +} + +func (x *ResourceSummary) GetRunningPods() int32 { + if x != nil { + return x.RunningPods + } + return 0 +} + +func (x *ResourceSummary) GetSucceededPods() int32 { + if x != nil { + return x.SucceededPods + } + return 0 +} + +func (x *ResourceSummary) GetFailedPods() int32 { + if x != nil { + return x.FailedPods + } + return 0 +} + +func (x *ResourceSummary) GetUnknownPods() int32 { + if x != nil { + return x.UnknownPods + } + return 0 +} + +func (x *ResourceSummary) GetUnderProvisionedCount() int32 { + if x != nil { + return x.UnderProvisionedCount + } + return 0 +} + +func (x *ResourceSummary) GetOverProvisionedCount() int32 { + if x != nil { + return x.OverProvisionedCount + } + return 0 +} + +// WorkloadItem represents a Kubernetes resource and its hierarchical children. +type WorkloadItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` // Kind of the resource (e.g., Pod, Container, Deployment). + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Name of the resource. + Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"` // Unique identifier for the resource. + Namespace string `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` // Namespace of the resource. + OwnerKind string `protobuf:"bytes,5,opt,name=owner_kind,json=ownerKind,proto3" json:"owner_kind,omitempty"` // Kind of the owning resource, if any. + OwnerUid string `protobuf:"bytes,6,opt,name=owner_uid,json=ownerUid,proto3" json:"owner_uid,omitempty"` // UID of the owning resource, if any. + Children []*WorkloadItem `protobuf:"bytes,7,rep,name=children,proto3" json:"children,omitempty"` // Child resources of this workload item. + Labels map[string]string `protobuf:"bytes,8,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Resource labels. + Annotations map[string]string `protobuf:"bytes,9,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Resource annotations. + CreationTimestamp int64 `protobuf:"varint,10,opt,name=creation_timestamp,json=creationTimestamp,proto3" json:"creation_timestamp,omitempty"` // Creation time as a Unix timestamp. + ResourceMetrics *ResourceMetrics `protobuf:"bytes,11,opt,name=resource_metrics,json=resourceMetrics,proto3" json:"resource_metrics,omitempty"` // Resource metrics for the workload item. + CostInfo *CostInfo `protobuf:"bytes,12,opt,name=cost_info,json=costInfo,proto3" json:"cost_info,omitempty"` // Cost information for the workload item. + CostDataPoints []*CostDataPoint `protobuf:"bytes,13,rep,name=cost_data_points,json=costDataPoints,proto3" json:"cost_data_points,omitempty"` // Time-series cost data points for the workload. + ResourceDataPoints []*ResourceDataPoint `protobuf:"bytes,14,rep,name=resource_data_points,json=resourceDataPoints,proto3" json:"resource_data_points,omitempty"` // Time-series resource metrics for the workload. + ImpactScore float64 `protobuf:"fixed64,15,opt,name=impact_score,json=impactScore,proto3" json:"impact_score,omitempty"` // Optimization impact score for workload + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,16,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` // Creation time of the workload item. + DeletedAt *timestamppb.Timestamp `protobuf:"bytes,17,opt,name=deleted_at,json=deletedAt,proto3,oneof" json:"deleted_at,omitempty"` // Last update time of the workload item. + ClusterId string `protobuf:"bytes,18,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Cluster id of the workload + Id string `protobuf:"bytes,19,opt,name=id,proto3" json:"id,omitempty"` // DevZero unique identifier + // Resource-specific details for different K8s resource types + IsKarpenterResource bool `protobuf:"varint,20,opt,name=is_karpenter_resource,json=isKarpenterResource,proto3" json:"is_karpenter_resource,omitempty"` + ResourceDetails *ResourceDetails `protobuf:"bytes,30,opt,name=resource_details,json=resourceDetails,proto3,oneof" json:"resource_details,omitempty"` + PolicyIds []string `protobuf:"bytes,56,rep,name=policy_ids,json=policyIds,proto3" json:"policy_ids,omitempty"` // List of policy IDs attached to this workload + ReplicasFromStatus int32 `protobuf:"varint,76,opt,name=replicas_from_status,json=replicasFromStatus,proto3" json:"replicas_from_status,omitempty"` + ReplicasFromSpec int32 `protobuf:"varint,77,opt,name=replicas_from_spec,json=replicasFromSpec,proto3" json:"replicas_from_spec,omitempty"` +} + +func (x *WorkloadItem) Reset() { + *x = WorkloadItem{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkloadItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkloadItem) ProtoMessage() {} + +func (x *WorkloadItem) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[6] + 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 WorkloadItem.ProtoReflect.Descriptor instead. +func (*WorkloadItem) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{6} +} + +func (x *WorkloadItem) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *WorkloadItem) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *WorkloadItem) GetUid() string { + if x != nil { + return x.Uid + } + return "" +} + +func (x *WorkloadItem) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *WorkloadItem) GetOwnerKind() string { + if x != nil { + return x.OwnerKind + } + return "" +} + +func (x *WorkloadItem) GetOwnerUid() string { + if x != nil { + return x.OwnerUid + } + return "" +} + +func (x *WorkloadItem) GetChildren() []*WorkloadItem { + if x != nil { + return x.Children + } + return nil +} + +func (x *WorkloadItem) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *WorkloadItem) GetAnnotations() map[string]string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *WorkloadItem) GetCreationTimestamp() int64 { + if x != nil { + return x.CreationTimestamp + } + return 0 +} + +func (x *WorkloadItem) GetResourceMetrics() *ResourceMetrics { + if x != nil { + return x.ResourceMetrics + } + return nil +} + +func (x *WorkloadItem) GetCostInfo() *CostInfo { + if x != nil { + return x.CostInfo + } + return nil +} + +func (x *WorkloadItem) GetCostDataPoints() []*CostDataPoint { + if x != nil { + return x.CostDataPoints + } + return nil +} + +func (x *WorkloadItem) GetResourceDataPoints() []*ResourceDataPoint { + if x != nil { + return x.ResourceDataPoints + } + return nil +} + +func (x *WorkloadItem) GetImpactScore() float64 { + if x != nil { + return x.ImpactScore + } + return 0 +} + +func (x *WorkloadItem) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *WorkloadItem) GetDeletedAt() *timestamppb.Timestamp { + if x != nil { + return x.DeletedAt + } + return nil +} + +func (x *WorkloadItem) GetClusterId() string { + if x != nil { + return x.ClusterId + } + return "" +} + +func (x *WorkloadItem) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *WorkloadItem) GetIsKarpenterResource() bool { + if x != nil { + return x.IsKarpenterResource + } + return false +} + +func (x *WorkloadItem) GetResourceDetails() *ResourceDetails { + if x != nil { + return x.ResourceDetails + } + return nil +} + +func (x *WorkloadItem) GetPolicyIds() []string { + if x != nil { + return x.PolicyIds + } + return nil +} + +func (x *WorkloadItem) GetReplicasFromStatus() int32 { + if x != nil { + return x.ReplicasFromStatus + } + return 0 +} + +func (x *WorkloadItem) GetReplicasFromSpec() int32 { + if x != nil { + return x.ReplicasFromSpec + } + return 0 +} + +// ContainerRuntimeInfo containes information about container runtime info +type ContainerRuntimeInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RuntimeName string `protobuf:"bytes,1,opt,name=runtime_name,json=runtimeName,proto3" json:"runtime_name,omitempty"` + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *ContainerRuntimeInfo) Reset() { + *x = ContainerRuntimeInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ContainerRuntimeInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContainerRuntimeInfo) ProtoMessage() {} + +func (x *ContainerRuntimeInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[7] + 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 ContainerRuntimeInfo.ProtoReflect.Descriptor instead. +func (*ContainerRuntimeInfo) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{7} +} + +func (x *ContainerRuntimeInfo) GetRuntimeName() string { + if x != nil { + return x.RuntimeName + } + return "" +} + +func (x *ContainerRuntimeInfo) GetVersion() string { + if x != nil { + return x.Version + } + return "" +} + +// NodeInfo contains information about nodes in a cluster. +type NodeInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NodeCount int32 `protobuf:"varint,1,opt,name=node_count,json=nodeCount,proto3" json:"node_count,omitempty"` // Total number of nodes. + OnDemandCount int32 `protobuf:"varint,2,opt,name=on_demand_count,json=onDemandCount,proto3" json:"on_demand_count,omitempty"` // Number of on-demand nodes. + ReservedCount int32 `protobuf:"varint,3,opt,name=reserved_count,json=reservedCount,proto3" json:"reserved_count,omitempty"` // Number of reserved nodes. + SpotCount int32 `protobuf:"varint,4,opt,name=spot_count,json=spotCount,proto3" json:"spot_count,omitempty"` // Number of spot nodes. + UnknownCount int32 `protobuf:"varint,5,opt,name=unknown_count,json=unknownCount,proto3" json:"unknown_count,omitempty"` // Number of nodes with unknown type. +} + +func (x *NodeInfo) Reset() { + *x = NodeInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeInfo) ProtoMessage() {} + +func (x *NodeInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[8] + 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 NodeInfo.ProtoReflect.Descriptor instead. +func (*NodeInfo) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{8} +} + +func (x *NodeInfo) GetNodeCount() int32 { + if x != nil { + return x.NodeCount + } + return 0 +} + +func (x *NodeInfo) GetOnDemandCount() int32 { + if x != nil { + return x.OnDemandCount + } + return 0 +} + +func (x *NodeInfo) GetReservedCount() int32 { + if x != nil { + return x.ReservedCount + } + return 0 +} + +func (x *NodeInfo) GetSpotCount() int32 { + if x != nil { + return x.SpotCount + } + return 0 +} + +func (x *NodeInfo) GetUnknownCount() int32 { + if x != nil { + return x.UnknownCount + } + return 0 +} + +// ResourceInfo provides counts of resources and their scheduling states. +type ResourceInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ResourcesCount int32 `protobuf:"varint,1,opt,name=resources_count,json=resourcesCount,proto3" json:"resources_count,omitempty"` // Total number of resources. + ScheduledResourceCount int32 `protobuf:"varint,2,opt,name=scheduled_resource_count,json=scheduledResourceCount,proto3" json:"scheduled_resource_count,omitempty"` // Number of scheduled resources. + UnscheduledResourceCount int32 `protobuf:"varint,3,opt,name=unscheduled_resource_count,json=unscheduledResourceCount,proto3" json:"unscheduled_resource_count,omitempty"` // Number of unscheduled resources. + UnknownResourceCount int32 `protobuf:"varint,4,opt,name=unknown_resource_count,json=unknownResourceCount,proto3" json:"unknown_resource_count,omitempty"` // Number of resources in unknown state. +} + +func (x *ResourceInfo) Reset() { + *x = ResourceInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceInfo) ProtoMessage() {} + +func (x *ResourceInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[9] + 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 ResourceInfo.ProtoReflect.Descriptor instead. +func (*ResourceInfo) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{9} +} + +func (x *ResourceInfo) GetResourcesCount() int32 { + if x != nil { + return x.ResourcesCount + } + return 0 +} + +func (x *ResourceInfo) GetScheduledResourceCount() int32 { + if x != nil { + return x.ScheduledResourceCount + } + return 0 +} + +func (x *ResourceInfo) GetUnscheduledResourceCount() int32 { + if x != nil { + return x.UnscheduledResourceCount + } + return 0 +} + +func (x *ResourceInfo) GetUnknownResourceCount() int32 { + if x != nil { + return x.UnknownResourceCount + } + return 0 +} + +// Node represents a Kubernetes node with metadata, metrics, and cost information. +type Node struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Unique identifier for the node. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Name of the node. + InstanceType string `protobuf:"bytes,3,opt,name=instance_type,json=instanceType,proto3" json:"instance_type,omitempty"` // Instance type of the node. + Type string `protobuf:"bytes,4,opt,name=type,proto3" json:"type,omitempty"` // Type/category of the node. + Region string `protobuf:"bytes,5,opt,name=region,proto3" json:"region,omitempty"` // Region where the node is deployed. + Zone string `protobuf:"bytes,6,opt,name=zone,proto3" json:"zone,omitempty"` // Zone where the node is deployed. + ResourceMetrics *ResourceMetrics `protobuf:"bytes,7,opt,name=resource_metrics,json=resourceMetrics,proto3" json:"resource_metrics,omitempty"` // Resource utilization metrics for the node. + CostInfo *CostInfo `protobuf:"bytes,8,opt,name=cost_info,json=costInfo,proto3" json:"cost_info,omitempty"` // Cost information for the node. + NodeCreatedAt int64 `protobuf:"varint,9,opt,name=node_created_at,json=nodeCreatedAt,proto3" json:"node_created_at,omitempty"` // Node creation time as a Unix timestamp. + IsReady bool `protobuf:"varint,10,opt,name=is_ready,json=isReady,proto3" json:"is_ready,omitempty"` // Indicates whether the node is ready. + ContainerRuntime *ContainerRuntimeInfo `protobuf:"bytes,20,opt,name=container_runtime,json=containerRuntime,proto3,oneof" json:"container_runtime,omitempty"` + NodeGroupName string `protobuf:"bytes,30,opt,name=node_group_name,json=nodeGroupName,proto3" json:"node_group_name,omitempty"` // it is what the variable says it is + ResourceDetails *ResourceDetails `protobuf:"bytes,40,opt,name=resource_details,json=resourceDetails,proto3" json:"resource_details,omitempty"` // if withDetails is true + // metadata if withMetadata is true + OwnerKind string `protobuf:"bytes,41,opt,name=owner_kind,json=ownerKind,proto3" json:"owner_kind,omitempty"` // Kind of the owning resource, if any. + OwnerUid string `protobuf:"bytes,42,opt,name=owner_uid,json=ownerUid,proto3" json:"owner_uid,omitempty"` // UID of the owning resource, if any. + Children []*WorkloadItem `protobuf:"bytes,43,rep,name=children,proto3" json:"children,omitempty"` // Child resources of this workload item. + Labels map[string]string `protobuf:"bytes,44,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Resource labels. + Annotations map[string]string `protobuf:"bytes,45,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Resource annotations. + // Pricing information + PricePerHour float64 `protobuf:"fixed64,50,opt,name=price_per_hour,json=pricePerHour,proto3" json:"price_per_hour,omitempty"` + PricePerVcpu float64 `protobuf:"fixed64,51,opt,name=price_per_vcpu,json=pricePerVcpu,proto3" json:"price_per_vcpu,omitempty"` + PricePerGib float64 `protobuf:"fixed64,52,opt,name=price_per_gib,json=pricePerGib,proto3" json:"price_per_gib,omitempty"` + PricePerGpu float64 `protobuf:"fixed64,53,opt,name=price_per_gpu,json=pricePerGpu,proto3" json:"price_per_gpu,omitempty"` + CpuPrice float64 `protobuf:"fixed64,54,opt,name=cpu_price,json=cpuPrice,proto3" json:"cpu_price,omitempty"` + MemoryPrice float64 `protobuf:"fixed64,55,opt,name=memory_price,json=memoryPrice,proto3" json:"memory_price,omitempty"` + GpuPrice float64 `protobuf:"fixed64,56,opt,name=gpu_price,json=gpuPrice,proto3" json:"gpu_price,omitempty"` + // Enhanced node classification + ExtractedNodeType string `protobuf:"bytes,60,opt,name=extracted_node_type,json=extractedNodeType,proto3" json:"extracted_node_type,omitempty"` // "spot", "on-demand", "reserved" + AvailabilityZone string `protobuf:"bytes,61,opt,name=availability_zone,json=availabilityZone,proto3" json:"availability_zone,omitempty"` // Multi-cloud AZ extraction + // Kubernetes metadata + KubernetesUid string `protobuf:"bytes,62,opt,name=kubernetes_uid,json=kubernetesUid,proto3" json:"kubernetes_uid,omitempty"` + ResourceVersion string `protobuf:"bytes,63,opt,name=resource_version,json=resourceVersion,proto3" json:"resource_version,omitempty"` + // Volume and storage information + VolumesInUse []string `protobuf:"bytes,65,rep,name=volumes_in_use,json=volumesInUse,proto3" json:"volumes_in_use,omitempty"` + VolumesAttached []*AttachedVolume `protobuf:"bytes,66,rep,name=volumes_attached,json=volumesAttached,proto3" json:"volumes_attached,omitempty"` + // Timing information + LastSeen *timestamppb.Timestamp `protobuf:"bytes,70,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + CollectedAt *timestamppb.Timestamp `protobuf:"bytes,71,opt,name=collected_at,json=collectedAt,proto3" json:"collected_at,omitempty"` + DeletionTimestamp *timestamppb.Timestamp `protobuf:"bytes,72,opt,name=deletion_timestamp,json=deletionTimestamp,proto3" json:"deletion_timestamp,omitempty"` +} + +func (x *Node) Reset() { + *x = Node{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Node) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Node) ProtoMessage() {} + +func (x *Node) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[10] + 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 Node.ProtoReflect.Descriptor instead. +func (*Node) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{10} +} + +func (x *Node) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Node) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Node) GetInstanceType() string { + if x != nil { + return x.InstanceType + } + return "" +} + +func (x *Node) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Node) GetRegion() string { + if x != nil { + return x.Region + } + return "" +} + +func (x *Node) GetZone() string { + if x != nil { + return x.Zone + } + return "" +} + +func (x *Node) GetResourceMetrics() *ResourceMetrics { + if x != nil { + return x.ResourceMetrics + } + return nil +} + +func (x *Node) GetCostInfo() *CostInfo { + if x != nil { + return x.CostInfo + } + return nil +} + +func (x *Node) GetNodeCreatedAt() int64 { + if x != nil { + return x.NodeCreatedAt + } + return 0 +} + +func (x *Node) GetIsReady() bool { + if x != nil { + return x.IsReady + } + return false +} + +func (x *Node) GetContainerRuntime() *ContainerRuntimeInfo { + if x != nil { + return x.ContainerRuntime + } + return nil +} + +func (x *Node) GetNodeGroupName() string { + if x != nil { + return x.NodeGroupName + } + return "" +} + +func (x *Node) GetResourceDetails() *ResourceDetails { + if x != nil { + return x.ResourceDetails + } + return nil +} + +func (x *Node) GetOwnerKind() string { + if x != nil { + return x.OwnerKind + } + return "" +} + +func (x *Node) GetOwnerUid() string { + if x != nil { + return x.OwnerUid + } + return "" +} + +func (x *Node) GetChildren() []*WorkloadItem { + if x != nil { + return x.Children + } + return nil +} + +func (x *Node) GetLabels() map[string]string { + if x != nil { + return x.Labels + } + return nil +} + +func (x *Node) GetAnnotations() map[string]string { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *Node) GetPricePerHour() float64 { + if x != nil { + return x.PricePerHour + } + return 0 +} + +func (x *Node) GetPricePerVcpu() float64 { + if x != nil { + return x.PricePerVcpu + } + return 0 +} + +func (x *Node) GetPricePerGib() float64 { + if x != nil { + return x.PricePerGib + } + return 0 +} + +func (x *Node) GetPricePerGpu() float64 { + if x != nil { + return x.PricePerGpu + } + return 0 +} + +func (x *Node) GetCpuPrice() float64 { + if x != nil { + return x.CpuPrice + } + return 0 +} + +func (x *Node) GetMemoryPrice() float64 { + if x != nil { + return x.MemoryPrice + } + return 0 +} + +func (x *Node) GetGpuPrice() float64 { + if x != nil { + return x.GpuPrice + } + return 0 +} + +func (x *Node) GetExtractedNodeType() string { + if x != nil { + return x.ExtractedNodeType + } + return "" +} + +func (x *Node) GetAvailabilityZone() string { + if x != nil { + return x.AvailabilityZone + } + return "" +} + +func (x *Node) GetKubernetesUid() string { + if x != nil { + return x.KubernetesUid + } + return "" +} + +func (x *Node) GetResourceVersion() string { + if x != nil { + return x.ResourceVersion + } + return "" +} + +func (x *Node) GetVolumesInUse() []string { + if x != nil { + return x.VolumesInUse + } + return nil +} + +func (x *Node) GetVolumesAttached() []*AttachedVolume { + if x != nil { + return x.VolumesAttached + } + return nil +} + +func (x *Node) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (x *Node) GetCollectedAt() *timestamppb.Timestamp { + if x != nil { + return x.CollectedAt + } + return nil +} + +func (x *Node) GetDeletionTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.DeletionTimestamp + } + return nil +} + +type AttachedVolume struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + DevicePath string `protobuf:"bytes,2,opt,name=device_path,json=devicePath,proto3" json:"device_path,omitempty"` +} + +func (x *AttachedVolume) Reset() { + *x = AttachedVolume{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AttachedVolume) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AttachedVolume) ProtoMessage() {} + +func (x *AttachedVolume) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[11] + 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 AttachedVolume.ProtoReflect.Descriptor instead. +func (*AttachedVolume) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{11} +} + +func (x *AttachedVolume) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *AttachedVolume) GetDevicePath() string { + if x != nil { + return x.DevicePath + } + return "" +} + +// NodeGroup represents a group of Kubernetes nodes with aggregated metrics. +type NodeGroup struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name of the node group. + Nodes []*Node `protobuf:"bytes,2,rep,name=nodes,proto3" json:"nodes,omitempty"` // Nodes in the group. + ResourceMetrics *ResourceMetrics `protobuf:"bytes,3,opt,name=resource_metrics,json=resourceMetrics,proto3" json:"resource_metrics,omitempty"` // Aggregated resource metrics for the node group. + CostInfo *CostInfo `protobuf:"bytes,4,opt,name=cost_info,json=costInfo,proto3" json:"cost_info,omitempty"` // Aggregated cost information for the node group. + NodeInfo *NodeInfo `protobuf:"bytes,5,opt,name=node_info,json=nodeInfo,proto3" json:"node_info,omitempty"` // Node count breakdown for the node group. + ResourceInfo *ResourceInfo `protobuf:"bytes,6,opt,name=resource_info,json=resourceInfo,proto3" json:"resource_info,omitempty"` // Resource scheduling information for the node group. + CostDataPoints []*CostDataPoint `protobuf:"bytes,11,rep,name=cost_data_points,json=costDataPoints,proto3" json:"cost_data_points,omitempty"` // Time-series cost data points for the node group. + ResourceDataPoints []*ResourceDataPoint `protobuf:"bytes,12,rep,name=resource_data_points,json=resourceDataPoints,proto3" json:"resource_data_points,omitempty"` // Time-series resource metrics for the node group. +} + +func (x *NodeGroup) Reset() { + *x = NodeGroup{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeGroup) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeGroup) ProtoMessage() {} + +func (x *NodeGroup) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NodeGroup.ProtoReflect.Descriptor instead. +func (*NodeGroup) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{12} +} + +func (x *NodeGroup) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *NodeGroup) GetNodes() []*Node { + if x != nil { + return x.Nodes + } + return nil +} + +func (x *NodeGroup) GetResourceMetrics() *ResourceMetrics { + if x != nil { + return x.ResourceMetrics + } + return nil +} + +func (x *NodeGroup) GetCostInfo() *CostInfo { + if x != nil { + return x.CostInfo + } + return nil +} + +func (x *NodeGroup) GetNodeInfo() *NodeInfo { + if x != nil { + return x.NodeInfo + } + return nil +} + +func (x *NodeGroup) GetResourceInfo() *ResourceInfo { + if x != nil { + return x.ResourceInfo + } + return nil +} + +func (x *NodeGroup) GetCostDataPoints() []*CostDataPoint { + if x != nil { + return x.CostDataPoints + } + return nil +} + +func (x *NodeGroup) GetResourceDataPoints() []*ResourceDataPoint { + if x != nil { + return x.ResourceDataPoints + } + return nil +} + +// CostDataPoint represents cost information at a specific time. +type CostDataPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Unix timestamp (seconds since epoch). + CostInfo *CostInfo `protobuf:"bytes,2,opt,name=cost_info,json=costInfo,proto3" json:"cost_info,omitempty"` // Cost information for the data point. +} + +func (x *CostDataPoint) Reset() { + *x = CostDataPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CostDataPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CostDataPoint) ProtoMessage() {} + +func (x *CostDataPoint) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CostDataPoint.ProtoReflect.Descriptor instead. +func (*CostDataPoint) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{13} +} + +func (x *CostDataPoint) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *CostDataPoint) GetCostInfo() *CostInfo { + if x != nil { + return x.CostInfo + } + return nil +} + +// ResourceDataPoint represents resource utilization at a specific time. +type ResourceDataPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` // Unix timestamp (seconds since epoch). + ResourceMetrics *ResourceMetrics `protobuf:"bytes,2,opt,name=resource_metrics,json=resourceMetrics,proto3" json:"resource_metrics,omitempty"` // Resource metrics for the data point. +} + +func (x *ResourceDataPoint) Reset() { + *x = ResourceDataPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceDataPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceDataPoint) ProtoMessage() {} + +func (x *ResourceDataPoint) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceDataPoint.ProtoReflect.Descriptor instead. +func (*ResourceDataPoint) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{14} +} + +func (x *ResourceDataPoint) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *ResourceDataPoint) GetResourceMetrics() *ResourceMetrics { + if x != nil { + return x.ResourceMetrics + } + return nil +} + +type SavingsData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CpuSavingsMillicores float64 `protobuf:"fixed64,1,opt,name=cpu_savings_millicores,json=cpuSavingsMillicores,proto3" json:"cpu_savings_millicores,omitempty"` + CpuHighWaterMark float64 `protobuf:"fixed64,2,opt,name=cpu_high_water_mark,json=cpuHighWaterMark,proto3" json:"cpu_high_water_mark,omitempty"` + ActualCpuRequest float64 `protobuf:"fixed64,3,opt,name=actual_cpu_request,json=actualCpuRequest,proto3" json:"actual_cpu_request,omitempty"` + CumulativeCpuSavingsMillicores float64 `protobuf:"fixed64,4,opt,name=cumulative_cpu_savings_millicores,json=cumulativeCpuSavingsMillicores,proto3" json:"cumulative_cpu_savings_millicores,omitempty"` + CpuCostWithoutAutoscaler float64 `protobuf:"fixed64,5,opt,name=cpu_cost_without_autoscaler,json=cpuCostWithoutAutoscaler,proto3" json:"cpu_cost_without_autoscaler,omitempty"` // hypothetical cost w/ chart-level request + ActualCpuCost float64 `protobuf:"fixed64,6,opt,name=actual_cpu_cost,json=actualCpuCost,proto3" json:"actual_cpu_cost,omitempty"` // what you paid + CpuCostSavings float64 `protobuf:"fixed64,7,opt,name=cpu_cost_savings,json=cpuCostSavings,proto3" json:"cpu_cost_savings,omitempty"` // autoscaler impact (5 - 6) + CpuUsageCost float64 `protobuf:"fixed64,8,opt,name=cpu_usage_cost,json=cpuUsageCost,proto3" json:"cpu_usage_cost,omitempty"` // based on actual usage + CpuCostWaste float64 `protobuf:"fixed64,9,opt,name=cpu_cost_waste,json=cpuCostWaste,proto3" json:"cpu_cost_waste,omitempty"` // 6 - 8 +} + +func (x *SavingsData) Reset() { + *x = SavingsData{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SavingsData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SavingsData) ProtoMessage() {} + +func (x *SavingsData) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[15] + 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 SavingsData.ProtoReflect.Descriptor instead. +func (*SavingsData) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{15} +} + +func (x *SavingsData) GetCpuSavingsMillicores() float64 { + if x != nil { + return x.CpuSavingsMillicores + } + return 0 +} + +func (x *SavingsData) GetCpuHighWaterMark() float64 { + if x != nil { + return x.CpuHighWaterMark + } + return 0 +} + +func (x *SavingsData) GetActualCpuRequest() float64 { + if x != nil { + return x.ActualCpuRequest + } + return 0 +} + +func (x *SavingsData) GetCumulativeCpuSavingsMillicores() float64 { + if x != nil { + return x.CumulativeCpuSavingsMillicores + } + return 0 +} + +func (x *SavingsData) GetCpuCostWithoutAutoscaler() float64 { + if x != nil { + return x.CpuCostWithoutAutoscaler + } + return 0 +} + +func (x *SavingsData) GetActualCpuCost() float64 { + if x != nil { + return x.ActualCpuCost + } + return 0 +} + +func (x *SavingsData) GetCpuCostSavings() float64 { + if x != nil { + return x.CpuCostSavings + } + return 0 +} + +func (x *SavingsData) GetCpuUsageCost() float64 { + if x != nil { + return x.CpuUsageCost + } + return 0 +} + +func (x *SavingsData) GetCpuCostWaste() float64 { + if x != nil { + return x.CpuCostWaste + } + return 0 +} + +type SavingsDataPoint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Timestamp int64 `protobuf:"varint,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + SavingsData *SavingsData `protobuf:"bytes,2,opt,name=savings_data,json=savingsData,proto3" json:"savings_data,omitempty"` +} + +func (x *SavingsDataPoint) Reset() { + *x = SavingsDataPoint{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SavingsDataPoint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SavingsDataPoint) ProtoMessage() {} + +func (x *SavingsDataPoint) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[16] + 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 SavingsDataPoint.ProtoReflect.Descriptor instead. +func (*SavingsDataPoint) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{16} +} + +func (x *SavingsDataPoint) GetTimestamp() int64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *SavingsDataPoint) GetSavingsData() *SavingsData { + if x != nil { + return x.SavingsData + } + return nil +} + +type SavingsTimeSeries struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SavingsDatapoints []*SavingsDataPoint `protobuf:"bytes,1,rep,name=savings_datapoints,json=savingsDatapoints,proto3" json:"savings_datapoints,omitempty"` + TotalCpuSavingsMillicores float64 `protobuf:"fixed64,2,opt,name=total_cpu_savings_millicores,json=totalCpuSavingsMillicores,proto3" json:"total_cpu_savings_millicores,omitempty"` + TotalCpuCostSavings float64 `protobuf:"fixed64,3,opt,name=total_cpu_cost_savings,json=totalCpuCostSavings,proto3" json:"total_cpu_cost_savings,omitempty"` + TotalCpuCostWaste float64 `protobuf:"fixed64,4,opt,name=total_cpu_cost_waste,json=totalCpuCostWaste,proto3" json:"total_cpu_cost_waste,omitempty"` +} + +func (x *SavingsTimeSeries) Reset() { + *x = SavingsTimeSeries{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SavingsTimeSeries) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SavingsTimeSeries) ProtoMessage() {} + +func (x *SavingsTimeSeries) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[17] + 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 SavingsTimeSeries.ProtoReflect.Descriptor instead. +func (*SavingsTimeSeries) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{17} +} + +func (x *SavingsTimeSeries) GetSavingsDatapoints() []*SavingsDataPoint { + if x != nil { + return x.SavingsDatapoints + } + return nil +} + +func (x *SavingsTimeSeries) GetTotalCpuSavingsMillicores() float64 { + if x != nil { + return x.TotalCpuSavingsMillicores + } + return 0 +} + +func (x *SavingsTimeSeries) GetTotalCpuCostSavings() float64 { + if x != nil { + return x.TotalCpuCostSavings + } + return 0 +} + +func (x *SavingsTimeSeries) GetTotalCpuCostWaste() float64 { + if x != nil { + return x.TotalCpuCostWaste + } + return 0 +} + +// LabelSelectorRequirement is a selector that contains values, a key, and an operator that +// relates the key and values. +type LabelSelectorRequirement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // key is the label key that the selector applies to. + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // operator represents a key's relationship to a set of values. + // Valid operators are In, NotIn, Exists and DoesNotExist. + Operator LabelSelectorOperator `protobuf:"varint,2,opt,name=operator,proto3,enum=api.v1.LabelSelectorOperator" json:"operator,omitempty"` + // values is an array of string values. If the operator is In or NotIn, + // the values array must be non-empty. If the operator is Exists or DoesNotExist, + // the values array must be empty. This array is replaced during a strategic + // merge patch. + Values []string `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty"` +} + +func (x *LabelSelectorRequirement) Reset() { + *x = LabelSelectorRequirement{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LabelSelectorRequirement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LabelSelectorRequirement) ProtoMessage() {} + +func (x *LabelSelectorRequirement) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[18] + 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 LabelSelectorRequirement.ProtoReflect.Descriptor instead. +func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{18} +} + +func (x *LabelSelectorRequirement) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *LabelSelectorRequirement) GetOperator() LabelSelectorOperator { + if x != nil { + return x.Operator + } + return LabelSelectorOperator_LABEL_SELECTOR_OPERATOR_UNSPECIFIED +} + +func (x *LabelSelectorRequirement) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +// LabelSelector is a label query over a set of resources. The result of matchLabels and +// matchExpressions are ANDed. An empty label selector matches all objects. A null +// label selector matches no objects. +type LabelSelector struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Department-style labels for backwards compatibility + // + // Deprecated: Marked as deprecated in api/v1/common.proto. + Labels []*LabelSelector_Label `protobuf:"bytes,1,rep,name=labels,proto3" json:"labels,omitempty"` // Deprecated: Label is still used for departments but we will soon migrate to match_label and match_expressions + // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + // map is equivalent to an element of matchExpressions, whose key field is "key", the + // operator is "In", and the values array contains only "value". The requirements are ANDed. + MatchLabels map[string]string `protobuf:"bytes,2,rep,name=match_labels,json=matchLabels,proto3" json:"match_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + // matchExpressions is a list of label selector requirements. The requirements are ANDed. + MatchExpressions []*LabelSelectorRequirement `protobuf:"bytes,3,rep,name=match_expressions,json=matchExpressions,proto3" json:"match_expressions,omitempty"` +} + +func (x *LabelSelector) Reset() { + *x = LabelSelector{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LabelSelector) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LabelSelector) ProtoMessage() {} + +func (x *LabelSelector) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[19] + 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 LabelSelector.ProtoReflect.Descriptor instead. +func (*LabelSelector) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{19} +} + +// Deprecated: Marked as deprecated in api/v1/common.proto. +func (x *LabelSelector) GetLabels() []*LabelSelector_Label { + if x != nil { + return x.Labels + } + return nil +} + +func (x *LabelSelector) GetMatchLabels() map[string]string { + if x != nil { + return x.MatchLabels + } + return nil +} + +func (x *LabelSelector) GetMatchExpressions() []*LabelSelectorRequirement { + if x != nil { + return x.MatchExpressions + } + return nil +} + +// RegexPattern represents a regex pattern with optional flags +type RegexPattern struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Pattern string `protobuf:"bytes,1,opt,name=pattern,proto3" json:"pattern,omitempty"` + Flags string `protobuf:"bytes,2,opt,name=flags,proto3" json:"flags,omitempty"` // case-insensitive, etc. (optional) +} + +func (x *RegexPattern) Reset() { + *x = RegexPattern{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RegexPattern) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RegexPattern) ProtoMessage() {} + +func (x *RegexPattern) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[20] + 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 RegexPattern.ProtoReflect.Descriptor instead. +func (*RegexPattern) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{20} +} + +func (x *RegexPattern) GetPattern() string { + if x != nil { + return x.Pattern + } + return "" +} + +func (x *RegexPattern) GetFlags() string { + if x != nil { + return x.Flags + } + return "" +} + +// ResourceDetails contains resource-specific information flattened for easy frontend access +type ResourceDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Details: + // + // *ResourceDetails_PodDetails + // *ResourceDetails_DeploymentDetails + // *ResourceDetails_StatefulSetDetails + // *ResourceDetails_DaemonSetDetails + // *ResourceDetails_ReplicaSetDetails + // *ResourceDetails_JobDetails + // *ResourceDetails_CronJobDetails + // *ResourceDetails_ServiceDetails + // *ResourceDetails_IngressDetails + // *ResourceDetails_PvcDetails + // *ResourceDetails_PvDetails + // *ResourceDetails_ScDetails + // *ResourceDetails_NsDetails + // *ResourceDetails_NodeDetails + // *ResourceDetails_HpaDetails + // *ResourceDetails_VpaDetails + // *ResourceDetails_LimitRangeDetails + // *ResourceDetails_ServiceAccountDetails + // *ResourceDetails_RoleDetails + // *ResourceDetails_RoleBindingDetails + // *ResourceDetails_KedaScaledObjectDetails + // *ResourceDetails_KarpenterResourceDetails + // *ResourceDetails_PodDisruptionBudgetDetails + // *ResourceDetails_ResourceQuotaDetails + Details isResourceDetails_Details `protobuf_oneof:"details"` + // Common fields that can be flattened at this level for easier access + // These are populated based on the resource type + Phase string `protobuf:"bytes,10,opt,name=phase,proto3" json:"phase,omitempty"` // Pod phase: "Running", "Pending", "Succeeded", "Failed", "Unknown" + PodIp string `protobuf:"bytes,11,opt,name=pod_ip,json=podIp,proto3" json:"pod_ip,omitempty"` // Pod IP from status.podIP + HostIp string `protobuf:"bytes,12,opt,name=host_ip,json=hostIp,proto3" json:"host_ip,omitempty"` // Host IP from status.hostIP + NodeName string `protobuf:"bytes,13,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"` // Node name where pod is scheduled + Ready bool `protobuf:"varint,14,opt,name=ready,proto3" json:"ready,omitempty"` // Pod ready status from conditions + QosClass string `protobuf:"bytes,15,opt,name=qos_class,json=qosClass,proto3" json:"qos_class,omitempty"` // Pod QoS class: "Guaranteed", "Burstable", "BestEffort" + ContainerCount int32 `protobuf:"varint,16,opt,name=container_count,json=containerCount,proto3" json:"container_count,omitempty"` // Number of containers in the pod + RestartCount int32 `protobuf:"varint,17,opt,name=restart_count,json=restartCount,proto3" json:"restart_count,omitempty"` // Sum of all container restart counts + // Resource requests/limits from Pod spec (static declarations) + CpuRequestsMillicores int64 `protobuf:"varint,20,opt,name=cpu_requests_millicores,json=cpuRequestsMillicores,proto3" json:"cpu_requests_millicores,omitempty"` // Sum of all container CPU requests in millicores + MemoryRequestsBytes int64 `protobuf:"varint,21,opt,name=memory_requests_bytes,json=memoryRequestsBytes,proto3" json:"memory_requests_bytes,omitempty"` // Sum of all container memory requests in bytes + CpuLimitsMillicores int64 `protobuf:"varint,22,opt,name=cpu_limits_millicores,json=cpuLimitsMillicores,proto3" json:"cpu_limits_millicores,omitempty"` // Sum of all container CPU limits in millicores + MemoryLimitsBytes int64 `protobuf:"varint,23,opt,name=memory_limits_bytes,json=memoryLimitsBytes,proto3" json:"memory_limits_bytes,omitempty"` // Sum of all container memory limits in bytes + StatusReason string `protobuf:"bytes,30,opt,name=status_reason,json=statusReason,proto3" json:"status_reason,omitempty"` // Reason for current status (e.g., "ImagePullBackOff", "Completed") + ControlledBy string `protobuf:"bytes,31,opt,name=controlled_by,json=controlledBy,proto3" json:"controlled_by,omitempty"` // Friendly owner name (e.g., "deployment/my-app", "daemonset/logs") + Age string `protobuf:"bytes,32,opt,name=age,proto3" json:"age,omitempty"` // Human-readable age since creation (e.g., "2h", "5m", "10d") + // Deployment-specific fields (flattened for easy access) + ReplicasDesired int32 `protobuf:"varint,40,opt,name=replicas_desired,json=replicasDesired,proto3" json:"replicas_desired,omitempty"` // Desired replicas from spec.replicas + ReplicasReady int32 `protobuf:"varint,41,opt,name=replicas_ready,json=replicasReady,proto3" json:"replicas_ready,omitempty"` // Ready replicas from status.readyReplicas + ReplicasAvailable int32 `protobuf:"varint,42,opt,name=replicas_available,json=replicasAvailable,proto3" json:"replicas_available,omitempty"` // Available replicas from status.availableReplicas + ReplicasUpdated int32 `protobuf:"varint,43,opt,name=replicas_updated,json=replicasUpdated,proto3" json:"replicas_updated,omitempty"` // Updated replicas from status.updatedReplicas + StrategyType string `protobuf:"bytes,44,opt,name=strategy_type,json=strategyType,proto3" json:"strategy_type,omitempty"` // Deployment strategy: "RollingUpdate", "Recreate" + Available bool `protobuf:"varint,45,opt,name=available,proto3" json:"available,omitempty"` // Deployment Available condition status + Progressing bool `protobuf:"varint,46,opt,name=progressing,proto3" json:"progressing,omitempty"` // Deployment Progressing condition status + DeploymentStatus string `protobuf:"bytes,47,opt,name=deployment_status,json=deploymentStatus,proto3" json:"deployment_status,omitempty"` // Overall status: "Available", "Progressing", "Failed" + Images []string `protobuf:"bytes,48,rep,name=images,proto3" json:"images,omitempty"` // Unique container images used + // StatefulSet-specific fields (reuses deployment replica fields 40-43) + ServiceName string `protobuf:"bytes,60,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` // Headless service name for StatefulSet + PodManagementPolicy string `protobuf:"bytes,61,opt,name=pod_management_policy,json=podManagementPolicy,proto3" json:"pod_management_policy,omitempty"` // "OrderedReady" or "Parallel" + UpdateStrategyType string `protobuf:"bytes,62,opt,name=update_strategy_type,json=updateStrategyType,proto3" json:"update_strategy_type,omitempty"` // "RollingUpdate" (StatefulSet strategy) + VolumeClaimTemplateCount int32 `protobuf:"varint,63,opt,name=volume_claim_template_count,json=volumeClaimTemplateCount,proto3" json:"volume_claim_template_count,omitempty"` // Number of persistent volume claim templates + PvcRetentionPolicy string `protobuf:"bytes,64,opt,name=pvc_retention_policy,json=pvcRetentionPolicy,proto3" json:"pvc_retention_policy,omitempty"` // "Retain" or "Delete" for PVC retention + CurrentRevision string `protobuf:"bytes,65,opt,name=current_revision,json=currentRevision,proto3" json:"current_revision,omitempty"` // Current StatefulSet revision + UpdateRevision string `protobuf:"bytes,66,opt,name=update_revision,json=updateRevision,proto3" json:"update_revision,omitempty"` // Update StatefulSet revision + // DaemonSet-specific fields (nodes instead of replicas) + NodesDesired int32 `protobuf:"varint,70,opt,name=nodes_desired,json=nodesDesired,proto3" json:"nodes_desired,omitempty"` // Desired nodes to schedule on (desiredNumberScheduled) + NodesReady int32 `protobuf:"varint,71,opt,name=nodes_ready,json=nodesReady,proto3" json:"nodes_ready,omitempty"` // Ready nodes (numberReady) + NodesAvailable int32 `protobuf:"varint,72,opt,name=nodes_available,json=nodesAvailable,proto3" json:"nodes_available,omitempty"` // Available nodes (numberAvailable) + NodesCurrent int32 `protobuf:"varint,73,opt,name=nodes_current,json=nodesCurrent,proto3" json:"nodes_current,omitempty"` // Currently scheduled nodes (currentNumberScheduled) + NodesUpdated int32 `protobuf:"varint,74,opt,name=nodes_updated,json=nodesUpdated,proto3" json:"nodes_updated,omitempty"` // Updated nodes (updatedNumberScheduled) + NodesMisscheduled int32 `protobuf:"varint,75,opt,name=nodes_misscheduled,json=nodesMisscheduled,proto3" json:"nodes_misscheduled,omitempty"` // Misscheduled nodes (numberMisscheduled) + MaxUnavailable string `protobuf:"bytes,76,opt,name=max_unavailable,json=maxUnavailable,proto3" json:"max_unavailable,omitempty"` // RollingUpdate maxUnavailable setting + PriorityClass string `protobuf:"bytes,77,opt,name=priority_class,json=priorityClass,proto3" json:"priority_class,omitempty"` // Priority class name + // Job-specific fields + JobCompletionsDesired int32 `protobuf:"varint,80,opt,name=job_completions_desired,json=jobCompletionsDesired,proto3" json:"job_completions_desired,omitempty"` // Desired number of completions from spec.completions + JobCompletionsSucceeded int32 `protobuf:"varint,81,opt,name=job_completions_succeeded,json=jobCompletionsSucceeded,proto3" json:"job_completions_succeeded,omitempty"` // Number of succeeded pods from status.succeeded + JobParallelism int32 `protobuf:"varint,82,opt,name=job_parallelism,json=jobParallelism,proto3" json:"job_parallelism,omitempty"` // Maximum number of pods that can run in parallel + JobBackoffLimit int32 `protobuf:"varint,83,opt,name=job_backoff_limit,json=jobBackoffLimit,proto3" json:"job_backoff_limit,omitempty"` // Number of retries before marking job as failed + JobCompletionMode string `protobuf:"bytes,84,opt,name=job_completion_mode,json=jobCompletionMode,proto3" json:"job_completion_mode,omitempty"` // "NonIndexed" or "Indexed" + JobSuspended bool `protobuf:"varint,85,opt,name=job_suspended,json=jobSuspended,proto3" json:"job_suspended,omitempty"` // Whether the job is suspended + JobDuration string `protobuf:"bytes,86,opt,name=job_duration,json=jobDuration,proto3" json:"job_duration,omitempty"` // Duration from start to completion (or current time) + JobStatus string `protobuf:"bytes,87,opt,name=job_status,json=jobStatus,proto3" json:"job_status,omitempty"` // Overall job status: "Complete", "Failed", "Running", "Suspended" + JobActivePods int32 `protobuf:"varint,88,opt,name=job_active_pods,json=jobActivePods,proto3" json:"job_active_pods,omitempty"` // Number of actively running pods + JobFailedPods int32 `protobuf:"varint,89,opt,name=job_failed_pods,json=jobFailedPods,proto3" json:"job_failed_pods,omitempty"` // Number of failed pods + // CronJob-specific fields + CronSchedule string `protobuf:"bytes,90,opt,name=cron_schedule,json=cronSchedule,proto3" json:"cron_schedule,omitempty"` // Cron schedule expression (e.g., "0 */6 * * *") + CronSuspended bool `protobuf:"varint,91,opt,name=cron_suspended,json=cronSuspended,proto3" json:"cron_suspended,omitempty"` // Whether the cron job is suspended + CronActiveJobs int32 `protobuf:"varint,92,opt,name=cron_active_jobs,json=cronActiveJobs,proto3" json:"cron_active_jobs,omitempty"` // Number of currently active jobs + CronLastScheduleTime string `protobuf:"bytes,93,opt,name=cron_last_schedule_time,json=cronLastScheduleTime,proto3" json:"cron_last_schedule_time,omitempty"` // Last time the job was scheduled (RFC3339 format) + CronNextScheduleTime string `protobuf:"bytes,94,opt,name=cron_next_schedule_time,json=cronNextScheduleTime,proto3" json:"cron_next_schedule_time,omitempty"` // Next scheduled time (calculated, RFC3339 format) + CronConcurrencyPolicy string `protobuf:"bytes,95,opt,name=cron_concurrency_policy,json=cronConcurrencyPolicy,proto3" json:"cron_concurrency_policy,omitempty"` // "Allow", "Forbid", "Replace" + CronSuccessfulJobsLimit int32 `protobuf:"varint,96,opt,name=cron_successful_jobs_limit,json=cronSuccessfulJobsLimit,proto3" json:"cron_successful_jobs_limit,omitempty"` // Number of successful job history to retain + CronFailedJobsLimit int32 `protobuf:"varint,97,opt,name=cron_failed_jobs_limit,json=cronFailedJobsLimit,proto3" json:"cron_failed_jobs_limit,omitempty"` // Number of failed job history to retain + CronStartingDeadlineSeconds int32 `protobuf:"varint,98,opt,name=cron_starting_deadline_seconds,json=cronStartingDeadlineSeconds,proto3" json:"cron_starting_deadline_seconds,omitempty"` // Optional deadline in seconds for starting the job + // Service-specific fields + ServiceType string `protobuf:"bytes,100,opt,name=service_type,json=serviceType,proto3" json:"service_type,omitempty"` // Service type: "ClusterIP", "NodePort", "LoadBalancer", "ExternalName" + ServiceClusterIp string `protobuf:"bytes,101,opt,name=service_cluster_ip,json=serviceClusterIp,proto3" json:"service_cluster_ip,omitempty"` // Cluster IP address + ServiceExternalIps []string `protobuf:"bytes,102,rep,name=service_external_ips,json=serviceExternalIps,proto3" json:"service_external_ips,omitempty"` // External IP addresses (from spec or loadbalancer status) + ServicePorts []*ServicePort `protobuf:"bytes,103,rep,name=service_ports,json=servicePorts,proto3" json:"service_ports,omitempty"` // Service ports information + ServiceSelector map[string]string `protobuf:"bytes,104,rep,name=service_selector,json=serviceSelector,proto3" json:"service_selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Service selector labels + ServiceSessionAffinity string `protobuf:"bytes,105,opt,name=service_session_affinity,json=serviceSessionAffinity,proto3" json:"service_session_affinity,omitempty"` // Session affinity: "None" or "ClientIP" + ServiceExternalTrafficPolicy string `protobuf:"bytes,106,opt,name=service_external_traffic_policy,json=serviceExternalTrafficPolicy,proto3" json:"service_external_traffic_policy,omitempty"` // "Cluster" or "Local" + ServiceInternalTrafficPolicy string `protobuf:"bytes,107,opt,name=service_internal_traffic_policy,json=serviceInternalTrafficPolicy,proto3" json:"service_internal_traffic_policy,omitempty"` // "Cluster" or "Local" + ServiceLoadBalancerSourceRanges []string `protobuf:"bytes,108,rep,name=service_load_balancer_source_ranges,json=serviceLoadBalancerSourceRanges,proto3" json:"service_load_balancer_source_ranges,omitempty"` // LoadBalancer source ranges + ServiceLoadBalancerClass string `protobuf:"bytes,109,opt,name=service_load_balancer_class,json=serviceLoadBalancerClass,proto3" json:"service_load_balancer_class,omitempty"` // LoadBalancer class + ServiceIpFamilies []string `protobuf:"bytes,110,rep,name=service_ip_families,json=serviceIpFamilies,proto3" json:"service_ip_families,omitempty"` // IP families: ["IPv4"], ["IPv6"], or ["IPv4", "IPv6"] + ServiceIpFamilyPolicy string `protobuf:"bytes,111,opt,name=service_ip_family_policy,json=serviceIpFamilyPolicy,proto3" json:"service_ip_family_policy,omitempty"` // "SingleStack", "PreferDualStack", "RequireDualStack" + // Ingress-specific fields + IngressClassName string `protobuf:"bytes,120,opt,name=ingress_class_name,json=ingressClassName,proto3" json:"ingress_class_name,omitempty"` // Ingress class name (e.g., "nginx", "traefik") + IngressHosts []string `protobuf:"bytes,121,rep,name=ingress_hosts,json=ingressHosts,proto3" json:"ingress_hosts,omitempty"` // List of hosts served by this ingress + IngressPaths []string `protobuf:"bytes,122,rep,name=ingress_paths,json=ingressPaths,proto3" json:"ingress_paths,omitempty"` // List of paths served by this ingress + IngressBackends []string `protobuf:"bytes,123,rep,name=ingress_backends,json=ingressBackends,proto3" json:"ingress_backends,omitempty"` // List of backend services + IngressTlsHosts []string `protobuf:"bytes,124,rep,name=ingress_tls_hosts,json=ingressTlsHosts,proto3" json:"ingress_tls_hosts,omitempty"` // Hosts covered by TLS + IngressTlsSecrets []string `protobuf:"bytes,125,rep,name=ingress_tls_secrets,json=ingressTlsSecrets,proto3" json:"ingress_tls_secrets,omitempty"` // TLS secret names + IngressLoadBalancerIps []string `protobuf:"bytes,126,rep,name=ingress_load_balancer_ips,json=ingressLoadBalancerIps,proto3" json:"ingress_load_balancer_ips,omitempty"` // Load balancer IPs/hostnames from status + IngressRulesCount int32 `protobuf:"varint,127,opt,name=ingress_rules_count,json=ingressRulesCount,proto3" json:"ingress_rules_count,omitempty"` // Number of ingress rules + IngressTlsCount int32 `protobuf:"varint,128,opt,name=ingress_tls_count,json=ingressTlsCount,proto3" json:"ingress_tls_count,omitempty"` // Number of TLS configurations + IngressHasDefaultBackend bool `protobuf:"varint,129,opt,name=ingress_has_default_backend,json=ingressHasDefaultBackend,proto3" json:"ingress_has_default_backend,omitempty"` // Whether ingress has a default backend + // PersistentVolumeClaim-specific fields + PvcStorageClassName string `protobuf:"bytes,130,opt,name=pvc_storage_class_name,json=pvcStorageClassName,proto3" json:"pvc_storage_class_name,omitempty"` // Storage class name (e.g., "gp2", "fast-ssd") + PvcRequestedCapacity string `protobuf:"bytes,131,opt,name=pvc_requested_capacity,json=pvcRequestedCapacity,proto3" json:"pvc_requested_capacity,omitempty"` // Requested storage capacity (e.g., "50Gi") + PvcActualCapacity string `protobuf:"bytes,132,opt,name=pvc_actual_capacity,json=pvcActualCapacity,proto3" json:"pvc_actual_capacity,omitempty"` // Actual allocated capacity from status (e.g., "100Gi") + PvcAccessModes []string `protobuf:"bytes,133,rep,name=pvc_access_modes,json=pvcAccessModes,proto3" json:"pvc_access_modes,omitempty"` // Access modes: ["ReadWriteOnce", "ReadOnlyMany", "ReadWriteMany"] + PvcVolumeMode string `protobuf:"bytes,134,opt,name=pvc_volume_mode,json=pvcVolumeMode,proto3" json:"pvc_volume_mode,omitempty"` // Volume mode: "Filesystem" or "Block" + PvcVolumeName string `protobuf:"bytes,135,opt,name=pvc_volume_name,json=pvcVolumeName,proto3" json:"pvc_volume_name,omitempty"` // Bound persistent volume name + PvcStatus string `protobuf:"bytes,136,opt,name=pvc_status,json=pvcStatus,proto3" json:"pvc_status,omitempty"` // PVC status: "Pending", "Bound", "Lost" + PvcIsBound bool `protobuf:"varint,137,opt,name=pvc_is_bound,json=pvcIsBound,proto3" json:"pvc_is_bound,omitempty"` // Whether PVC is bound to a PV + PvcSelectorMatchLabels string `protobuf:"bytes,138,opt,name=pvc_selector_match_labels,json=pvcSelectorMatchLabels,proto3" json:"pvc_selector_match_labels,omitempty"` // Selector labels for PV binding (JSON string) + PvcAllowedTopologies []string `protobuf:"bytes,139,rep,name=pvc_allowed_topologies,json=pvcAllowedTopologies,proto3" json:"pvc_allowed_topologies,omitempty"` // Allowed node topologies + // PersistentVolume-specific fields + PvStorageClassName string `protobuf:"bytes,150,opt,name=pv_storage_class_name,json=pvStorageClassName,proto3" json:"pv_storage_class_name,omitempty"` // Storage class name (e.g., "standard-rwo", "fast-ssd") + PvCapacity string `protobuf:"bytes,151,opt,name=pv_capacity,json=pvCapacity,proto3" json:"pv_capacity,omitempty"` // Storage capacity (e.g., "5Gi") + PvAccessModes []string `protobuf:"bytes,152,rep,name=pv_access_modes,json=pvAccessModes,proto3" json:"pv_access_modes,omitempty"` // Access modes: ["ReadWriteOnce", "ReadOnlyMany", "ReadWriteMany"] + PvReclaimPolicy string `protobuf:"bytes,153,opt,name=pv_reclaim_policy,json=pvReclaimPolicy,proto3" json:"pv_reclaim_policy,omitempty"` // Reclaim policy: "Retain", "Delete", "Recycle" + PvClaimRefName string `protobuf:"bytes,154,opt,name=pv_claim_ref_name,json=pvClaimRefName,proto3" json:"pv_claim_ref_name,omitempty"` // Referenced PVC name + PvClaimRefNamespace string `protobuf:"bytes,155,opt,name=pv_claim_ref_namespace,json=pvClaimRefNamespace,proto3" json:"pv_claim_ref_namespace,omitempty"` // Referenced PVC namespace + PvStatus string `protobuf:"bytes,156,opt,name=pv_status,json=pvStatus,proto3" json:"pv_status,omitempty"` // PV status: "Available", "Bound", "Released", "Failed" + PvIsBound bool `protobuf:"varint,157,opt,name=pv_is_bound,json=pvIsBound,proto3" json:"pv_is_bound,omitempty"` // Whether PV is bound to a PVC + PvVolumeMode string `protobuf:"bytes,158,opt,name=pv_volume_mode,json=pvVolumeMode,proto3" json:"pv_volume_mode,omitempty"` // Volume mode: "Filesystem" or "Block" + PvCsiDriver string `protobuf:"bytes,159,opt,name=pv_csi_driver,json=pvCsiDriver,proto3" json:"pv_csi_driver,omitempty"` // CSI driver name (if using CSI) + PvVolumeSourceType string `protobuf:"bytes,160,opt,name=pv_volume_source_type,json=pvVolumeSourceType,proto3" json:"pv_volume_source_type,omitempty"` // Volume source type: "CSI", "HostPath", "NFS", "AWS EBS", etc. + PvNodeAffinityZones []string `protobuf:"bytes,161,rep,name=pv_node_affinity_zones,json=pvNodeAffinityZones,proto3" json:"pv_node_affinity_zones,omitempty"` // Node affinity zones/regions + // StorageClass-specific fields + ScProvisioner string `protobuf:"bytes,170,opt,name=sc_provisioner,json=scProvisioner,proto3" json:"sc_provisioner,omitempty"` // Storage provisioner (e.g., "kubernetes.io/aws-ebs", "pd.csi.storage.gke.io") + ScReclaimPolicy string `protobuf:"bytes,171,opt,name=sc_reclaim_policy,json=scReclaimPolicy,proto3" json:"sc_reclaim_policy,omitempty"` // Default reclaim policy: "Retain", "Delete" + ScVolumeBindingMode string `protobuf:"bytes,172,opt,name=sc_volume_binding_mode,json=scVolumeBindingMode,proto3" json:"sc_volume_binding_mode,omitempty"` // Volume binding mode: "Immediate", "WaitForFirstConsumer" + ScAllowVolumeExpansion bool `protobuf:"varint,173,opt,name=sc_allow_volume_expansion,json=scAllowVolumeExpansion,proto3" json:"sc_allow_volume_expansion,omitempty"` // Whether volume expansion is allowed + ScParameters map[string]string `protobuf:"bytes,174,rep,name=sc_parameters,json=scParameters,proto3" json:"sc_parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Storage class parameters (type, encrypted, etc.) + ScAllowedTopologies []string `protobuf:"bytes,175,rep,name=sc_allowed_topologies,json=scAllowedTopologies,proto3" json:"sc_allowed_topologies,omitempty"` // Allowed topologies for volumes + ScMountOptions []string `protobuf:"bytes,176,rep,name=sc_mount_options,json=scMountOptions,proto3" json:"sc_mount_options,omitempty"` // Default mount options + // Namespace fields (name|status|age + additional) + NsStatus string `protobuf:"bytes,177,opt,name=ns_status,json=nsStatus,proto3" json:"ns_status,omitempty"` // Namespace status/phase: "Active", "Terminating" + NsFinalizers []string `protobuf:"bytes,178,rep,name=ns_finalizers,json=nsFinalizers,proto3" json:"ns_finalizers,omitempty"` // Finalizers preventing deletion + // Node fields (name|cpu|memory|ready|taints|roles|internal IP|external IP|version|age + additional) + NodeCpuCapacity string `protobuf:"bytes,179,opt,name=node_cpu_capacity,json=nodeCpuCapacity,proto3" json:"node_cpu_capacity,omitempty"` // CPU capacity (e.g., "16", "15890m") + NodeMemoryCapacity string `protobuf:"bytes,180,opt,name=node_memory_capacity,json=nodeMemoryCapacity,proto3" json:"node_memory_capacity,omitempty"` // Memory capacity (e.g., "64422188Ki") + NodeReady bool `protobuf:"varint,181,opt,name=node_ready,json=nodeReady,proto3" json:"node_ready,omitempty"` // Node ready status + NodeTaints []*NodeTaint `protobuf:"bytes,182,rep,name=node_taints,json=nodeTaints,proto3" json:"node_taints,omitempty"` // Node taints affecting scheduling + NodeRoles []string `protobuf:"bytes,183,rep,name=node_roles,json=nodeRoles,proto3" json:"node_roles,omitempty"` // Node roles (master, worker, etc.) + NodeInternalIp string `protobuf:"bytes,184,opt,name=node_internal_ip,json=nodeInternalIp,proto3" json:"node_internal_ip,omitempty"` // Internal IP address + NodeExternalIp string `protobuf:"bytes,185,opt,name=node_external_ip,json=nodeExternalIp,proto3" json:"node_external_ip,omitempty"` // External IP address (if any) + NodeVersion string `protobuf:"bytes,186,opt,name=node_version,json=nodeVersion,proto3" json:"node_version,omitempty"` // Kubelet version + NodeInstanceType string `protobuf:"bytes,187,opt,name=node_instance_type,json=nodeInstanceType,proto3" json:"node_instance_type,omitempty"` // Cloud instance type (e.g., "m5.xlarge") + NodeOs string `protobuf:"bytes,188,opt,name=node_os,json=nodeOs,proto3" json:"node_os,omitempty"` // Operating system + NodeContainerRuntime string `protobuf:"bytes,189,opt,name=node_container_runtime,json=nodeContainerRuntime,proto3" json:"node_container_runtime,omitempty"` // Container runtime version + NodeImageCount int32 `protobuf:"varint,190,opt,name=node_image_count,json=nodeImageCount,proto3" json:"node_image_count,omitempty"` // Number of container images + // HorizontalPodAutoscaler-specific fields + HpaMinReplicas int32 `protobuf:"varint,200,opt,name=hpa_min_replicas,json=hpaMinReplicas,proto3" json:"hpa_min_replicas,omitempty"` // Minimum replicas from spec.minReplicas + HpaMaxReplicas int32 `protobuf:"varint,201,opt,name=hpa_max_replicas,json=hpaMaxReplicas,proto3" json:"hpa_max_replicas,omitempty"` // Maximum replicas from spec.maxReplicas + HpaCurrentReplicas int32 `protobuf:"varint,202,opt,name=hpa_current_replicas,json=hpaCurrentReplicas,proto3" json:"hpa_current_replicas,omitempty"` // Current replicas from status.currentReplicas + HpaDesiredReplicas int32 `protobuf:"varint,203,opt,name=hpa_desired_replicas,json=hpaDesiredReplicas,proto3" json:"hpa_desired_replicas,omitempty"` // Desired replicas from status.desiredReplicas + HpaMetricsCount int32 `protobuf:"varint,204,opt,name=hpa_metrics_count,json=hpaMetricsCount,proto3" json:"hpa_metrics_count,omitempty"` // Number of metrics configured + HpaStatus string `protobuf:"bytes,205,opt,name=hpa_status,json=hpaStatus,proto3" json:"hpa_status,omitempty"` // HPA status: "Active", "Inactive", "Unknown" + HpaScaleUpStabilization int32 `protobuf:"varint,206,opt,name=hpa_scale_up_stabilization,json=hpaScaleUpStabilization,proto3" json:"hpa_scale_up_stabilization,omitempty"` // Scale up stabilization window seconds + HpaScaleDownStabilization int32 `protobuf:"varint,207,opt,name=hpa_scale_down_stabilization,json=hpaScaleDownStabilization,proto3" json:"hpa_scale_down_stabilization,omitempty"` // Scale down stabilization window seconds + // VerticalPodAutoscaler-specific fields + VpaUpdateMode string `protobuf:"bytes,210,opt,name=vpa_update_mode,json=vpaUpdateMode,proto3" json:"vpa_update_mode,omitempty"` // Update mode: "Off", "Initial", "Recreation", "Auto" + VpaPoliciesCount int32 `protobuf:"varint,211,opt,name=vpa_policies_count,json=vpaPoliciesCount,proto3" json:"vpa_policies_count,omitempty"` // Number of container policies configured + VpaRecommendationsCount int32 `protobuf:"varint,212,opt,name=vpa_recommendations_count,json=vpaRecommendationsCount,proto3" json:"vpa_recommendations_count,omitempty"` // Number of container recommendations available + VpaCpuTarget string `protobuf:"bytes,213,opt,name=vpa_cpu_target,json=vpaCpuTarget,proto3" json:"vpa_cpu_target,omitempty"` // CPU target recommendation (e.g., "100m") + VpaMemoryTarget string `protobuf:"bytes,214,opt,name=vpa_memory_target,json=vpaMemoryTarget,proto3" json:"vpa_memory_target,omitempty"` // Memory target recommendation (e.g., "128Mi") + VpaStatus string `protobuf:"bytes,215,opt,name=vpa_status,json=vpaStatus,proto3" json:"vpa_status,omitempty"` // VPA status: "Active", "No Recommendations" + // LimitRange-specific fields + LimitRangeItemsCount int32 `protobuf:"varint,220,opt,name=limit_range_items_count,json=limitRangeItemsCount,proto3" json:"limit_range_items_count,omitempty"` // Number of limit items configured + LimitRangeTypes []string `protobuf:"bytes,221,rep,name=limit_range_types,json=limitRangeTypes,proto3" json:"limit_range_types,omitempty"` // Types of limits: ["Container", "Pod", "PersistentVolumeClaim"] + LimitRangeHasDefaults bool `protobuf:"varint,222,opt,name=limit_range_has_defaults,json=limitRangeHasDefaults,proto3" json:"limit_range_has_defaults,omitempty"` // Whether default limits/requests are set + LimitRangeMaxCpu string `protobuf:"bytes,223,opt,name=limit_range_max_cpu,json=limitRangeMaxCpu,proto3" json:"limit_range_max_cpu,omitempty"` // Maximum CPU limit (e.g., "2") + LimitRangeMaxMemory string `protobuf:"bytes,224,opt,name=limit_range_max_memory,json=limitRangeMaxMemory,proto3" json:"limit_range_max_memory,omitempty"` // Maximum memory limit (e.g., "2Gi") + LimitRangeMinCpu string `protobuf:"bytes,225,opt,name=limit_range_min_cpu,json=limitRangeMinCpu,proto3" json:"limit_range_min_cpu,omitempty"` // Minimum CPU limit (e.g., "100m") + LimitRangeMinMemory string `protobuf:"bytes,226,opt,name=limit_range_min_memory,json=limitRangeMinMemory,proto3" json:"limit_range_min_memory,omitempty"` // Minimum memory limit (e.g., "64Mi") + LimitRangeDefaultCpuLimit string `protobuf:"bytes,227,opt,name=limit_range_default_cpu_limit,json=limitRangeDefaultCpuLimit,proto3" json:"limit_range_default_cpu_limit,omitempty"` // Default CPU limit (e.g., "500m") + LimitRangeDefaultMemoryLimit string `protobuf:"bytes,228,opt,name=limit_range_default_memory_limit,json=limitRangeDefaultMemoryLimit,proto3" json:"limit_range_default_memory_limit,omitempty"` // Default memory limit (e.g., "512Mi") + LimitRangeDefaultCpuRequest string `protobuf:"bytes,229,opt,name=limit_range_default_cpu_request,json=limitRangeDefaultCpuRequest,proto3" json:"limit_range_default_cpu_request,omitempty"` // Default CPU request (e.g., "200m") + LimitRangeDefaultMemoryRequest string `protobuf:"bytes,230,opt,name=limit_range_default_memory_request,json=limitRangeDefaultMemoryRequest,proto3" json:"limit_range_default_memory_request,omitempty"` // Default memory request (e.g., "256Mi") + LimitRangeStatus string `protobuf:"bytes,231,opt,name=limit_range_status,json=limitRangeStatus,proto3" json:"limit_range_status,omitempty"` // LimitRange status (always "Active") + ResourceVersion string `protobuf:"bytes,240,opt,name=resource_version,json=resourceVersion,proto3" json:"resource_version,omitempty"` // Service account resource version + ApiVersion string `protobuf:"bytes,241,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` // API version +} + +func (x *ResourceDetails) Reset() { + *x = ResourceDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceDetails) ProtoMessage() {} + +func (x *ResourceDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[21] + 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 ResourceDetails.ProtoReflect.Descriptor instead. +func (*ResourceDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{21} +} + +func (m *ResourceDetails) GetDetails() isResourceDetails_Details { + if m != nil { + return m.Details + } + return nil +} + +func (x *ResourceDetails) GetPodDetails() *PodDetails { + if x, ok := x.GetDetails().(*ResourceDetails_PodDetails); ok { + return x.PodDetails + } + return nil +} + +func (x *ResourceDetails) GetDeploymentDetails() *DeploymentDetails { + if x, ok := x.GetDetails().(*ResourceDetails_DeploymentDetails); ok { + return x.DeploymentDetails + } + return nil +} + +func (x *ResourceDetails) GetStatefulSetDetails() *StatefulSetDetails { + if x, ok := x.GetDetails().(*ResourceDetails_StatefulSetDetails); ok { + return x.StatefulSetDetails + } + return nil +} + +func (x *ResourceDetails) GetDaemonSetDetails() *DaemonSetDetails { + if x, ok := x.GetDetails().(*ResourceDetails_DaemonSetDetails); ok { + return x.DaemonSetDetails + } + return nil +} + +func (x *ResourceDetails) GetReplicaSetDetails() *ReplicaSetDetails { + if x, ok := x.GetDetails().(*ResourceDetails_ReplicaSetDetails); ok { + return x.ReplicaSetDetails + } + return nil +} + +func (x *ResourceDetails) GetJobDetails() *JobDetails { + if x, ok := x.GetDetails().(*ResourceDetails_JobDetails); ok { + return x.JobDetails + } + return nil +} + +func (x *ResourceDetails) GetCronJobDetails() *CronJobDetails { + if x, ok := x.GetDetails().(*ResourceDetails_CronJobDetails); ok { + return x.CronJobDetails + } + return nil +} + +func (x *ResourceDetails) GetServiceDetails() *ServiceDetails { + if x, ok := x.GetDetails().(*ResourceDetails_ServiceDetails); ok { + return x.ServiceDetails + } + return nil +} + +func (x *ResourceDetails) GetIngressDetails() *IngressDetails { + if x, ok := x.GetDetails().(*ResourceDetails_IngressDetails); ok { + return x.IngressDetails + } + return nil +} + +func (x *ResourceDetails) GetPvcDetails() *PersistentVolumeClaimDetails { + if x, ok := x.GetDetails().(*ResourceDetails_PvcDetails); ok { + return x.PvcDetails + } + return nil +} + +func (x *ResourceDetails) GetPvDetails() *PersistentVolumeDetails { + if x, ok := x.GetDetails().(*ResourceDetails_PvDetails); ok { + return x.PvDetails + } + return nil +} + +func (x *ResourceDetails) GetScDetails() *StorageClassDetails { + if x, ok := x.GetDetails().(*ResourceDetails_ScDetails); ok { + return x.ScDetails + } + return nil +} + +func (x *ResourceDetails) GetNsDetails() *NamespaceDetails { + if x, ok := x.GetDetails().(*ResourceDetails_NsDetails); ok { + return x.NsDetails + } + return nil +} + +func (x *ResourceDetails) GetNodeDetails() *NodeDetails { + if x, ok := x.GetDetails().(*ResourceDetails_NodeDetails); ok { + return x.NodeDetails + } + return nil +} + +func (x *ResourceDetails) GetHpaDetails() *HPADetails { + if x, ok := x.GetDetails().(*ResourceDetails_HpaDetails); ok { + return x.HpaDetails + } + return nil +} + +func (x *ResourceDetails) GetVpaDetails() *VPADetails { + if x, ok := x.GetDetails().(*ResourceDetails_VpaDetails); ok { + return x.VpaDetails + } + return nil +} + +func (x *ResourceDetails) GetLimitRangeDetails() *LimitRangeDetails { + if x, ok := x.GetDetails().(*ResourceDetails_LimitRangeDetails); ok { + return x.LimitRangeDetails + } + return nil +} + +func (x *ResourceDetails) GetServiceAccountDetails() *ServiceAccountDetails { + if x, ok := x.GetDetails().(*ResourceDetails_ServiceAccountDetails); ok { + return x.ServiceAccountDetails + } + return nil +} + +func (x *ResourceDetails) GetRoleDetails() *RoleDetails { + if x, ok := x.GetDetails().(*ResourceDetails_RoleDetails); ok { + return x.RoleDetails + } + return nil +} + +func (x *ResourceDetails) GetRoleBindingDetails() *RoleBindingDetails { + if x, ok := x.GetDetails().(*ResourceDetails_RoleBindingDetails); ok { + return x.RoleBindingDetails + } + return nil +} + +func (x *ResourceDetails) GetKedaScaledObjectDetails() *KedaScaledObjectDetails { + if x, ok := x.GetDetails().(*ResourceDetails_KedaScaledObjectDetails); ok { + return x.KedaScaledObjectDetails + } + return nil +} + +func (x *ResourceDetails) GetKarpenterResourceDetails() *KarpenterResourceDetails { + if x, ok := x.GetDetails().(*ResourceDetails_KarpenterResourceDetails); ok { + return x.KarpenterResourceDetails + } + return nil +} + +func (x *ResourceDetails) GetPodDisruptionBudgetDetails() *PodDisruptionBudgetDetails { + if x, ok := x.GetDetails().(*ResourceDetails_PodDisruptionBudgetDetails); ok { + return x.PodDisruptionBudgetDetails + } + return nil +} + +func (x *ResourceDetails) GetResourceQuotaDetails() *ResourceQuotaDetails { + if x, ok := x.GetDetails().(*ResourceDetails_ResourceQuotaDetails); ok { + return x.ResourceQuotaDetails + } + return nil +} + +func (x *ResourceDetails) GetPhase() string { + if x != nil { + return x.Phase + } + return "" +} + +func (x *ResourceDetails) GetPodIp() string { + if x != nil { + return x.PodIp + } + return "" +} + +func (x *ResourceDetails) GetHostIp() string { + if x != nil { + return x.HostIp + } + return "" +} + +func (x *ResourceDetails) GetNodeName() string { + if x != nil { + return x.NodeName + } + return "" +} + +func (x *ResourceDetails) GetReady() bool { + if x != nil { + return x.Ready + } + return false +} + +func (x *ResourceDetails) GetQosClass() string { + if x != nil { + return x.QosClass + } + return "" +} + +func (x *ResourceDetails) GetContainerCount() int32 { + if x != nil { + return x.ContainerCount + } + return 0 +} + +func (x *ResourceDetails) GetRestartCount() int32 { + if x != nil { + return x.RestartCount + } + return 0 +} + +func (x *ResourceDetails) GetCpuRequestsMillicores() int64 { + if x != nil { + return x.CpuRequestsMillicores + } + return 0 +} + +func (x *ResourceDetails) GetMemoryRequestsBytes() int64 { + if x != nil { + return x.MemoryRequestsBytes + } + return 0 +} + +func (x *ResourceDetails) GetCpuLimitsMillicores() int64 { + if x != nil { + return x.CpuLimitsMillicores + } + return 0 +} + +func (x *ResourceDetails) GetMemoryLimitsBytes() int64 { + if x != nil { + return x.MemoryLimitsBytes + } + return 0 +} + +func (x *ResourceDetails) GetStatusReason() string { + if x != nil { + return x.StatusReason + } + return "" +} + +func (x *ResourceDetails) GetControlledBy() string { + if x != nil { + return x.ControlledBy + } + return "" +} + +func (x *ResourceDetails) GetAge() string { + if x != nil { + return x.Age + } + return "" +} + +func (x *ResourceDetails) GetReplicasDesired() int32 { + if x != nil { + return x.ReplicasDesired + } + return 0 +} + +func (x *ResourceDetails) GetReplicasReady() int32 { + if x != nil { + return x.ReplicasReady + } + return 0 +} + +func (x *ResourceDetails) GetReplicasAvailable() int32 { + if x != nil { + return x.ReplicasAvailable + } + return 0 +} + +func (x *ResourceDetails) GetReplicasUpdated() int32 { + if x != nil { + return x.ReplicasUpdated + } + return 0 +} + +func (x *ResourceDetails) GetStrategyType() string { + if x != nil { + return x.StrategyType + } + return "" +} + +func (x *ResourceDetails) GetAvailable() bool { + if x != nil { + return x.Available + } + return false +} + +func (x *ResourceDetails) GetProgressing() bool { + if x != nil { + return x.Progressing + } + return false +} + +func (x *ResourceDetails) GetDeploymentStatus() string { + if x != nil { + return x.DeploymentStatus + } + return "" +} + +func (x *ResourceDetails) GetImages() []string { + if x != nil { + return x.Images + } + return nil +} + +func (x *ResourceDetails) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +func (x *ResourceDetails) GetPodManagementPolicy() string { + if x != nil { + return x.PodManagementPolicy + } + return "" +} + +func (x *ResourceDetails) GetUpdateStrategyType() string { + if x != nil { + return x.UpdateStrategyType + } + return "" +} + +func (x *ResourceDetails) GetVolumeClaimTemplateCount() int32 { + if x != nil { + return x.VolumeClaimTemplateCount + } + return 0 +} + +func (x *ResourceDetails) GetPvcRetentionPolicy() string { + if x != nil { + return x.PvcRetentionPolicy + } + return "" +} + +func (x *ResourceDetails) GetCurrentRevision() string { + if x != nil { + return x.CurrentRevision + } + return "" +} + +func (x *ResourceDetails) GetUpdateRevision() string { + if x != nil { + return x.UpdateRevision + } + return "" +} + +func (x *ResourceDetails) GetNodesDesired() int32 { + if x != nil { + return x.NodesDesired + } + return 0 +} + +func (x *ResourceDetails) GetNodesReady() int32 { + if x != nil { + return x.NodesReady + } + return 0 +} + +func (x *ResourceDetails) GetNodesAvailable() int32 { + if x != nil { + return x.NodesAvailable + } + return 0 +} + +func (x *ResourceDetails) GetNodesCurrent() int32 { + if x != nil { + return x.NodesCurrent + } + return 0 +} + +func (x *ResourceDetails) GetNodesUpdated() int32 { + if x != nil { + return x.NodesUpdated + } + return 0 +} + +func (x *ResourceDetails) GetNodesMisscheduled() int32 { + if x != nil { + return x.NodesMisscheduled + } + return 0 +} + +func (x *ResourceDetails) GetMaxUnavailable() string { + if x != nil { + return x.MaxUnavailable + } + return "" +} + +func (x *ResourceDetails) GetPriorityClass() string { + if x != nil { + return x.PriorityClass + } + return "" +} + +func (x *ResourceDetails) GetJobCompletionsDesired() int32 { + if x != nil { + return x.JobCompletionsDesired + } + return 0 +} + +func (x *ResourceDetails) GetJobCompletionsSucceeded() int32 { + if x != nil { + return x.JobCompletionsSucceeded + } + return 0 +} + +func (x *ResourceDetails) GetJobParallelism() int32 { + if x != nil { + return x.JobParallelism + } + return 0 +} + +func (x *ResourceDetails) GetJobBackoffLimit() int32 { + if x != nil { + return x.JobBackoffLimit + } + return 0 +} + +func (x *ResourceDetails) GetJobCompletionMode() string { + if x != nil { + return x.JobCompletionMode + } + return "" +} + +func (x *ResourceDetails) GetJobSuspended() bool { + if x != nil { + return x.JobSuspended + } + return false +} + +func (x *ResourceDetails) GetJobDuration() string { + if x != nil { + return x.JobDuration + } + return "" +} + +func (x *ResourceDetails) GetJobStatus() string { + if x != nil { + return x.JobStatus + } + return "" +} + +func (x *ResourceDetails) GetJobActivePods() int32 { + if x != nil { + return x.JobActivePods + } + return 0 +} + +func (x *ResourceDetails) GetJobFailedPods() int32 { + if x != nil { + return x.JobFailedPods + } + return 0 +} + +func (x *ResourceDetails) GetCronSchedule() string { + if x != nil { + return x.CronSchedule + } + return "" +} + +func (x *ResourceDetails) GetCronSuspended() bool { + if x != nil { + return x.CronSuspended + } + return false +} + +func (x *ResourceDetails) GetCronActiveJobs() int32 { + if x != nil { + return x.CronActiveJobs + } + return 0 +} + +func (x *ResourceDetails) GetCronLastScheduleTime() string { + if x != nil { + return x.CronLastScheduleTime + } + return "" +} + +func (x *ResourceDetails) GetCronNextScheduleTime() string { + if x != nil { + return x.CronNextScheduleTime + } + return "" +} + +func (x *ResourceDetails) GetCronConcurrencyPolicy() string { + if x != nil { + return x.CronConcurrencyPolicy + } + return "" +} + +func (x *ResourceDetails) GetCronSuccessfulJobsLimit() int32 { + if x != nil { + return x.CronSuccessfulJobsLimit + } + return 0 +} + +func (x *ResourceDetails) GetCronFailedJobsLimit() int32 { + if x != nil { + return x.CronFailedJobsLimit + } + return 0 +} + +func (x *ResourceDetails) GetCronStartingDeadlineSeconds() int32 { + if x != nil { + return x.CronStartingDeadlineSeconds + } + return 0 +} + +func (x *ResourceDetails) GetServiceType() string { + if x != nil { + return x.ServiceType + } + return "" +} + +func (x *ResourceDetails) GetServiceClusterIp() string { + if x != nil { + return x.ServiceClusterIp + } + return "" +} + +func (x *ResourceDetails) GetServiceExternalIps() []string { + if x != nil { + return x.ServiceExternalIps + } + return nil +} + +func (x *ResourceDetails) GetServicePorts() []*ServicePort { + if x != nil { + return x.ServicePorts + } + return nil +} + +func (x *ResourceDetails) GetServiceSelector() map[string]string { + if x != nil { + return x.ServiceSelector + } + return nil +} + +func (x *ResourceDetails) GetServiceSessionAffinity() string { + if x != nil { + return x.ServiceSessionAffinity + } + return "" +} + +func (x *ResourceDetails) GetServiceExternalTrafficPolicy() string { + if x != nil { + return x.ServiceExternalTrafficPolicy + } + return "" +} + +func (x *ResourceDetails) GetServiceInternalTrafficPolicy() string { + if x != nil { + return x.ServiceInternalTrafficPolicy + } + return "" +} + +func (x *ResourceDetails) GetServiceLoadBalancerSourceRanges() []string { + if x != nil { + return x.ServiceLoadBalancerSourceRanges + } + return nil +} + +func (x *ResourceDetails) GetServiceLoadBalancerClass() string { + if x != nil { + return x.ServiceLoadBalancerClass + } + return "" +} + +func (x *ResourceDetails) GetServiceIpFamilies() []string { + if x != nil { + return x.ServiceIpFamilies + } + return nil +} + +func (x *ResourceDetails) GetServiceIpFamilyPolicy() string { + if x != nil { + return x.ServiceIpFamilyPolicy + } + return "" +} + +func (x *ResourceDetails) GetIngressClassName() string { + if x != nil { + return x.IngressClassName + } + return "" +} + +func (x *ResourceDetails) GetIngressHosts() []string { + if x != nil { + return x.IngressHosts + } + return nil +} + +func (x *ResourceDetails) GetIngressPaths() []string { + if x != nil { + return x.IngressPaths + } + return nil +} + +func (x *ResourceDetails) GetIngressBackends() []string { + if x != nil { + return x.IngressBackends + } + return nil +} + +func (x *ResourceDetails) GetIngressTlsHosts() []string { + if x != nil { + return x.IngressTlsHosts + } + return nil +} + +func (x *ResourceDetails) GetIngressTlsSecrets() []string { + if x != nil { + return x.IngressTlsSecrets + } + return nil +} + +func (x *ResourceDetails) GetIngressLoadBalancerIps() []string { + if x != nil { + return x.IngressLoadBalancerIps + } + return nil +} + +func (x *ResourceDetails) GetIngressRulesCount() int32 { + if x != nil { + return x.IngressRulesCount + } + return 0 +} + +func (x *ResourceDetails) GetIngressTlsCount() int32 { + if x != nil { + return x.IngressTlsCount + } + return 0 +} + +func (x *ResourceDetails) GetIngressHasDefaultBackend() bool { + if x != nil { + return x.IngressHasDefaultBackend + } + return false +} + +func (x *ResourceDetails) GetPvcStorageClassName() string { + if x != nil { + return x.PvcStorageClassName + } + return "" +} + +func (x *ResourceDetails) GetPvcRequestedCapacity() string { + if x != nil { + return x.PvcRequestedCapacity + } + return "" +} + +func (x *ResourceDetails) GetPvcActualCapacity() string { + if x != nil { + return x.PvcActualCapacity + } + return "" +} + +func (x *ResourceDetails) GetPvcAccessModes() []string { + if x != nil { + return x.PvcAccessModes + } + return nil +} + +func (x *ResourceDetails) GetPvcVolumeMode() string { + if x != nil { + return x.PvcVolumeMode + } + return "" +} + +func (x *ResourceDetails) GetPvcVolumeName() string { + if x != nil { + return x.PvcVolumeName + } + return "" +} + +func (x *ResourceDetails) GetPvcStatus() string { + if x != nil { + return x.PvcStatus + } + return "" +} + +func (x *ResourceDetails) GetPvcIsBound() bool { + if x != nil { + return x.PvcIsBound + } + return false +} + +func (x *ResourceDetails) GetPvcSelectorMatchLabels() string { + if x != nil { + return x.PvcSelectorMatchLabels + } + return "" +} + +func (x *ResourceDetails) GetPvcAllowedTopologies() []string { + if x != nil { + return x.PvcAllowedTopologies + } + return nil +} + +func (x *ResourceDetails) GetPvStorageClassName() string { + if x != nil { + return x.PvStorageClassName + } + return "" +} + +func (x *ResourceDetails) GetPvCapacity() string { + if x != nil { + return x.PvCapacity + } + return "" +} + +func (x *ResourceDetails) GetPvAccessModes() []string { + if x != nil { + return x.PvAccessModes + } + return nil +} + +func (x *ResourceDetails) GetPvReclaimPolicy() string { + if x != nil { + return x.PvReclaimPolicy + } + return "" +} + +func (x *ResourceDetails) GetPvClaimRefName() string { + if x != nil { + return x.PvClaimRefName + } + return "" +} + +func (x *ResourceDetails) GetPvClaimRefNamespace() string { + if x != nil { + return x.PvClaimRefNamespace + } + return "" +} + +func (x *ResourceDetails) GetPvStatus() string { + if x != nil { + return x.PvStatus + } + return "" +} + +func (x *ResourceDetails) GetPvIsBound() bool { + if x != nil { + return x.PvIsBound + } + return false +} + +func (x *ResourceDetails) GetPvVolumeMode() string { + if x != nil { + return x.PvVolumeMode + } + return "" +} + +func (x *ResourceDetails) GetPvCsiDriver() string { + if x != nil { + return x.PvCsiDriver + } + return "" +} + +func (x *ResourceDetails) GetPvVolumeSourceType() string { + if x != nil { + return x.PvVolumeSourceType + } + return "" +} + +func (x *ResourceDetails) GetPvNodeAffinityZones() []string { + if x != nil { + return x.PvNodeAffinityZones + } + return nil +} + +func (x *ResourceDetails) GetScProvisioner() string { + if x != nil { + return x.ScProvisioner + } + return "" +} + +func (x *ResourceDetails) GetScReclaimPolicy() string { + if x != nil { + return x.ScReclaimPolicy + } + return "" +} + +func (x *ResourceDetails) GetScVolumeBindingMode() string { + if x != nil { + return x.ScVolumeBindingMode + } + return "" +} + +func (x *ResourceDetails) GetScAllowVolumeExpansion() bool { + if x != nil { + return x.ScAllowVolumeExpansion + } + return false +} + +func (x *ResourceDetails) GetScParameters() map[string]string { + if x != nil { + return x.ScParameters + } + return nil +} + +func (x *ResourceDetails) GetScAllowedTopologies() []string { + if x != nil { + return x.ScAllowedTopologies + } + return nil +} + +func (x *ResourceDetails) GetScMountOptions() []string { + if x != nil { + return x.ScMountOptions + } + return nil +} + +func (x *ResourceDetails) GetNsStatus() string { + if x != nil { + return x.NsStatus + } + return "" +} + +func (x *ResourceDetails) GetNsFinalizers() []string { + if x != nil { + return x.NsFinalizers + } + return nil +} + +func (x *ResourceDetails) GetNodeCpuCapacity() string { + if x != nil { + return x.NodeCpuCapacity + } + return "" +} + +func (x *ResourceDetails) GetNodeMemoryCapacity() string { + if x != nil { + return x.NodeMemoryCapacity + } + return "" +} + +func (x *ResourceDetails) GetNodeReady() bool { + if x != nil { + return x.NodeReady + } + return false +} + +func (x *ResourceDetails) GetNodeTaints() []*NodeTaint { + if x != nil { + return x.NodeTaints + } + return nil +} + +func (x *ResourceDetails) GetNodeRoles() []string { + if x != nil { + return x.NodeRoles + } + return nil +} + +func (x *ResourceDetails) GetNodeInternalIp() string { + if x != nil { + return x.NodeInternalIp + } + return "" +} + +func (x *ResourceDetails) GetNodeExternalIp() string { + if x != nil { + return x.NodeExternalIp + } + return "" +} + +func (x *ResourceDetails) GetNodeVersion() string { + if x != nil { + return x.NodeVersion + } + return "" +} + +func (x *ResourceDetails) GetNodeInstanceType() string { + if x != nil { + return x.NodeInstanceType + } + return "" +} + +func (x *ResourceDetails) GetNodeOs() string { + if x != nil { + return x.NodeOs + } + return "" +} + +func (x *ResourceDetails) GetNodeContainerRuntime() string { + if x != nil { + return x.NodeContainerRuntime + } + return "" +} + +func (x *ResourceDetails) GetNodeImageCount() int32 { + if x != nil { + return x.NodeImageCount + } + return 0 +} + +func (x *ResourceDetails) GetHpaMinReplicas() int32 { + if x != nil { + return x.HpaMinReplicas + } + return 0 +} + +func (x *ResourceDetails) GetHpaMaxReplicas() int32 { + if x != nil { + return x.HpaMaxReplicas + } + return 0 +} + +func (x *ResourceDetails) GetHpaCurrentReplicas() int32 { + if x != nil { + return x.HpaCurrentReplicas + } + return 0 +} + +func (x *ResourceDetails) GetHpaDesiredReplicas() int32 { + if x != nil { + return x.HpaDesiredReplicas + } + return 0 +} + +func (x *ResourceDetails) GetHpaMetricsCount() int32 { + if x != nil { + return x.HpaMetricsCount + } + return 0 +} + +func (x *ResourceDetails) GetHpaStatus() string { + if x != nil { + return x.HpaStatus + } + return "" +} + +func (x *ResourceDetails) GetHpaScaleUpStabilization() int32 { + if x != nil { + return x.HpaScaleUpStabilization + } + return 0 +} + +func (x *ResourceDetails) GetHpaScaleDownStabilization() int32 { + if x != nil { + return x.HpaScaleDownStabilization + } + return 0 +} + +func (x *ResourceDetails) GetVpaUpdateMode() string { + if x != nil { + return x.VpaUpdateMode + } + return "" +} + +func (x *ResourceDetails) GetVpaPoliciesCount() int32 { + if x != nil { + return x.VpaPoliciesCount + } + return 0 +} + +func (x *ResourceDetails) GetVpaRecommendationsCount() int32 { + if x != nil { + return x.VpaRecommendationsCount + } + return 0 +} + +func (x *ResourceDetails) GetVpaCpuTarget() string { + if x != nil { + return x.VpaCpuTarget + } + return "" +} + +func (x *ResourceDetails) GetVpaMemoryTarget() string { + if x != nil { + return x.VpaMemoryTarget + } + return "" +} + +func (x *ResourceDetails) GetVpaStatus() string { + if x != nil { + return x.VpaStatus + } + return "" +} + +func (x *ResourceDetails) GetLimitRangeItemsCount() int32 { + if x != nil { + return x.LimitRangeItemsCount + } + return 0 +} + +func (x *ResourceDetails) GetLimitRangeTypes() []string { + if x != nil { + return x.LimitRangeTypes + } + return nil +} + +func (x *ResourceDetails) GetLimitRangeHasDefaults() bool { + if x != nil { + return x.LimitRangeHasDefaults + } + return false +} + +func (x *ResourceDetails) GetLimitRangeMaxCpu() string { + if x != nil { + return x.LimitRangeMaxCpu + } + return "" +} + +func (x *ResourceDetails) GetLimitRangeMaxMemory() string { + if x != nil { + return x.LimitRangeMaxMemory + } + return "" +} + +func (x *ResourceDetails) GetLimitRangeMinCpu() string { + if x != nil { + return x.LimitRangeMinCpu + } + return "" +} + +func (x *ResourceDetails) GetLimitRangeMinMemory() string { + if x != nil { + return x.LimitRangeMinMemory + } + return "" +} + +func (x *ResourceDetails) GetLimitRangeDefaultCpuLimit() string { + if x != nil { + return x.LimitRangeDefaultCpuLimit + } + return "" +} + +func (x *ResourceDetails) GetLimitRangeDefaultMemoryLimit() string { + if x != nil { + return x.LimitRangeDefaultMemoryLimit + } + return "" +} + +func (x *ResourceDetails) GetLimitRangeDefaultCpuRequest() string { + if x != nil { + return x.LimitRangeDefaultCpuRequest + } + return "" +} + +func (x *ResourceDetails) GetLimitRangeDefaultMemoryRequest() string { + if x != nil { + return x.LimitRangeDefaultMemoryRequest + } + return "" +} + +func (x *ResourceDetails) GetLimitRangeStatus() string { + if x != nil { + return x.LimitRangeStatus + } + return "" +} + +func (x *ResourceDetails) GetResourceVersion() string { + if x != nil { + return x.ResourceVersion + } + return "" +} + +func (x *ResourceDetails) GetApiVersion() string { + if x != nil { + return x.ApiVersion + } + return "" +} + +type isResourceDetails_Details interface { + isResourceDetails_Details() +} + +type ResourceDetails_PodDetails struct { + // Pod-specific fields + PodDetails *PodDetails `protobuf:"bytes,1,opt,name=pod_details,json=podDetails,proto3,oneof"` +} + +type ResourceDetails_DeploymentDetails struct { + // Deployment-specific fields + DeploymentDetails *DeploymentDetails `protobuf:"bytes,2,opt,name=deployment_details,json=deploymentDetails,proto3,oneof"` +} + +type ResourceDetails_StatefulSetDetails struct { + // StatefulSet-specific fields + StatefulSetDetails *StatefulSetDetails `protobuf:"bytes,3,opt,name=stateful_set_details,json=statefulSetDetails,proto3,oneof"` +} + +type ResourceDetails_DaemonSetDetails struct { + // DaemonSet-specific fields + DaemonSetDetails *DaemonSetDetails `protobuf:"bytes,4,opt,name=daemon_set_details,json=daemonSetDetails,proto3,oneof"` +} + +type ResourceDetails_ReplicaSetDetails struct { + // ReplicaSet-specific fields + ReplicaSetDetails *ReplicaSetDetails `protobuf:"bytes,5,opt,name=replica_set_details,json=replicaSetDetails,proto3,oneof"` +} + +type ResourceDetails_JobDetails struct { + // Job-specific fields + JobDetails *JobDetails `protobuf:"bytes,6,opt,name=job_details,json=jobDetails,proto3,oneof"` +} + +type ResourceDetails_CronJobDetails struct { + // CronJob-specific fields + CronJobDetails *CronJobDetails `protobuf:"bytes,7,opt,name=cron_job_details,json=cronJobDetails,proto3,oneof"` +} + +type ResourceDetails_ServiceDetails struct { + // Service-specific fields + ServiceDetails *ServiceDetails `protobuf:"bytes,8,opt,name=service_details,json=serviceDetails,proto3,oneof"` +} + +type ResourceDetails_IngressDetails struct { + // Ingress-specific fields + IngressDetails *IngressDetails `protobuf:"bytes,9,opt,name=ingress_details,json=ingressDetails,proto3,oneof"` +} + +type ResourceDetails_PvcDetails struct { + // PersistentVolumeClaim-specific fields + PvcDetails *PersistentVolumeClaimDetails `protobuf:"bytes,140,opt,name=pvc_details,json=pvcDetails,proto3,oneof"` +} + +type ResourceDetails_PvDetails struct { + // PersistentVolume-specific fields + PvDetails *PersistentVolumeDetails `protobuf:"bytes,141,opt,name=pv_details,json=pvDetails,proto3,oneof"` +} + +type ResourceDetails_ScDetails struct { + // StorageClass-specific fields + ScDetails *StorageClassDetails `protobuf:"bytes,142,opt,name=sc_details,json=scDetails,proto3,oneof"` +} + +type ResourceDetails_NsDetails struct { + // Namespace-specific fields + NsDetails *NamespaceDetails `protobuf:"bytes,143,opt,name=ns_details,json=nsDetails,proto3,oneof"` +} + +type ResourceDetails_NodeDetails struct { + // Node-specific fields + NodeDetails *NodeDetails `protobuf:"bytes,144,opt,name=node_details,json=nodeDetails,proto3,oneof"` +} + +type ResourceDetails_HpaDetails struct { + // HorizontalPodAutoscaler-specific fields + HpaDetails *HPADetails `protobuf:"bytes,145,opt,name=hpa_details,json=hpaDetails,proto3,oneof"` +} + +type ResourceDetails_VpaDetails struct { + // VerticalPodAutoscaler-specific fields + VpaDetails *VPADetails `protobuf:"bytes,146,opt,name=vpa_details,json=vpaDetails,proto3,oneof"` +} + +type ResourceDetails_LimitRangeDetails struct { + // LimitRange-specific fields + LimitRangeDetails *LimitRangeDetails `protobuf:"bytes,147,opt,name=limit_range_details,json=limitRangeDetails,proto3,oneof"` +} + +type ResourceDetails_ServiceAccountDetails struct { + // ServiceAccount-specific fields + ServiceAccountDetails *ServiceAccountDetails `protobuf:"bytes,232,opt,name=service_account_details,json=serviceAccountDetails,proto3,oneof"` +} + +type ResourceDetails_RoleDetails struct { + // Role-specific fields + RoleDetails *RoleDetails `protobuf:"bytes,233,opt,name=role_details,json=roleDetails,proto3,oneof"` +} + +type ResourceDetails_RoleBindingDetails struct { + // RoleBinding-specific fields + RoleBindingDetails *RoleBindingDetails `protobuf:"bytes,234,opt,name=role_binding_details,json=roleBindingDetails,proto3,oneof"` +} + +type ResourceDetails_KedaScaledObjectDetails struct { + // KedaScaledObject-specific fields + KedaScaledObjectDetails *KedaScaledObjectDetails `protobuf:"bytes,235,opt,name=keda_scaled_object_details,json=kedaScaledObjectDetails,proto3,oneof"` +} + +type ResourceDetails_KarpenterResourceDetails struct { + // KarpenterResource-specific fields + KarpenterResourceDetails *KarpenterResourceDetails `protobuf:"bytes,236,opt,name=karpenter_resource_details,json=karpenterResourceDetails,proto3,oneof"` +} + +type ResourceDetails_PodDisruptionBudgetDetails struct { + // PodDisruptionBudget-specific fields + PodDisruptionBudgetDetails *PodDisruptionBudgetDetails `protobuf:"bytes,237,opt,name=pod_disruption_budget_details,json=podDisruptionBudgetDetails,proto3,oneof"` +} + +type ResourceDetails_ResourceQuotaDetails struct { + // ResourceQuota-specific fields + ResourceQuotaDetails *ResourceQuotaDetails `protobuf:"bytes,238,opt,name=resource_quota_details,json=resourceQuotaDetails,proto3,oneof"` +} + +func (*ResourceDetails_PodDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_DeploymentDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_StatefulSetDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_DaemonSetDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_ReplicaSetDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_JobDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_CronJobDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_ServiceDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_IngressDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_PvcDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_PvDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_ScDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_NsDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_NodeDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_HpaDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_VpaDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_LimitRangeDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_ServiceAccountDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_RoleDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_RoleBindingDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_KedaScaledObjectDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_KarpenterResourceDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_PodDisruptionBudgetDetails) isResourceDetails_Details() {} + +func (*ResourceDetails_ResourceQuotaDetails) isResourceDetails_Details() {} + +// PodDetails contains detailed Pod information (for the oneof, if we need nested data later) +type PodDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Containers []*ContainerSummary `protobuf:"bytes,1,rep,name=containers,proto3" json:"containers,omitempty"` // Container details for debugging +} + +func (x *PodDetails) Reset() { + *x = PodDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PodDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PodDetails) ProtoMessage() {} + +func (x *PodDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[22] + 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 PodDetails.ProtoReflect.Descriptor instead. +func (*PodDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{22} +} + +func (x *PodDetails) GetContainers() []*ContainerSummary { + if x != nil { + return x.Containers + } + return nil +} + +// ContainerSummary provides essential container information +type ContainerSummary struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Container name + Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` // Container image + Ready bool `protobuf:"varint,3,opt,name=ready,proto3" json:"ready,omitempty"` // Container ready status + RestartCount int32 `protobuf:"varint,4,opt,name=restart_count,json=restartCount,proto3" json:"restart_count,omitempty"` // Container restart count + State string `protobuf:"bytes,5,opt,name=state,proto3" json:"state,omitempty"` // "running", "waiting", "terminated" + StateReason string `protobuf:"bytes,6,opt,name=state_reason,json=stateReason,proto3" json:"state_reason,omitempty"` // Reason for current state (if not running) +} + +func (x *ContainerSummary) Reset() { + *x = ContainerSummary{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ContainerSummary) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContainerSummary) ProtoMessage() {} + +func (x *ContainerSummary) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[23] + 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 ContainerSummary.ProtoReflect.Descriptor instead. +func (*ContainerSummary) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{23} +} + +func (x *ContainerSummary) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ContainerSummary) GetImage() string { + if x != nil { + return x.Image + } + return "" +} + +func (x *ContainerSummary) GetReady() bool { + if x != nil { + return x.Ready + } + return false +} + +func (x *ContainerSummary) GetRestartCount() int32 { + if x != nil { + return x.RestartCount + } + return 0 +} + +func (x *ContainerSummary) GetState() string { + if x != nil { + return x.State + } + return "" +} + +func (x *ContainerSummary) GetStateReason() string { + if x != nil { + return x.StateReason + } + return "" +} + +// DeploymentDetails contains detailed Deployment information for drill-down +type DeploymentDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Containers []*ContainerTemplate `protobuf:"bytes,1,rep,name=containers,proto3" json:"containers,omitempty"` // Container templates from pod spec + Conditions []*DeploymentCondition `protobuf:"bytes,2,rep,name=conditions,proto3" json:"conditions,omitempty"` // Deployment conditions for debugging +} + +func (x *DeploymentDetails) Reset() { + *x = DeploymentDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeploymentDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeploymentDetails) ProtoMessage() {} + +func (x *DeploymentDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_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 DeploymentDetails.ProtoReflect.Descriptor instead. +func (*DeploymentDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{24} +} + +func (x *DeploymentDetails) GetContainers() []*ContainerTemplate { + if x != nil { + return x.Containers + } + return nil +} + +func (x *DeploymentDetails) GetConditions() []*DeploymentCondition { + if x != nil { + return x.Conditions + } + return nil +} + +// ContainerTemplate represents a container template in a deployment +type ContainerTemplate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Container name + Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` // Container image + CpuRequestsMillicores int64 `protobuf:"varint,3,opt,name=cpu_requests_millicores,json=cpuRequestsMillicores,proto3" json:"cpu_requests_millicores,omitempty"` // CPU requests in millicores + MemoryRequestsBytes int64 `protobuf:"varint,4,opt,name=memory_requests_bytes,json=memoryRequestsBytes,proto3" json:"memory_requests_bytes,omitempty"` // Memory requests in bytes + CpuLimitsMillicores int64 `protobuf:"varint,5,opt,name=cpu_limits_millicores,json=cpuLimitsMillicores,proto3" json:"cpu_limits_millicores,omitempty"` // CPU limits in millicores + MemoryLimitsBytes int64 `protobuf:"varint,6,opt,name=memory_limits_bytes,json=memoryLimitsBytes,proto3" json:"memory_limits_bytes,omitempty"` // Memory limits in bytes +} + +func (x *ContainerTemplate) Reset() { + *x = ContainerTemplate{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ContainerTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContainerTemplate) ProtoMessage() {} + +func (x *ContainerTemplate) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_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 ContainerTemplate.ProtoReflect.Descriptor instead. +func (*ContainerTemplate) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{25} +} + +func (x *ContainerTemplate) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ContainerTemplate) GetImage() string { + if x != nil { + return x.Image + } + return "" +} + +func (x *ContainerTemplate) GetCpuRequestsMillicores() int64 { + if x != nil { + return x.CpuRequestsMillicores + } + return 0 +} + +func (x *ContainerTemplate) GetMemoryRequestsBytes() int64 { + if x != nil { + return x.MemoryRequestsBytes + } + return 0 +} + +func (x *ContainerTemplate) GetCpuLimitsMillicores() int64 { + if x != nil { + return x.CpuLimitsMillicores + } + return 0 +} + +func (x *ContainerTemplate) GetMemoryLimitsBytes() int64 { + if x != nil { + return x.MemoryLimitsBytes + } + return 0 +} + +// DeploymentCondition represents a deployment condition +type DeploymentCondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // "Available", "Progressing", etc. + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastUpdateTime int64 `protobuf:"varint,5,opt,name=last_update_time,json=lastUpdateTime,proto3" json:"last_update_time,omitempty"` // Last time condition was updated +} + +func (x *DeploymentCondition) Reset() { + *x = DeploymentCondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DeploymentCondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeploymentCondition) ProtoMessage() {} + +func (x *DeploymentCondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[26] + 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 DeploymentCondition.ProtoReflect.Descriptor instead. +func (*DeploymentCondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{26} +} + +func (x *DeploymentCondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *DeploymentCondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *DeploymentCondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *DeploymentCondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *DeploymentCondition) GetLastUpdateTime() int64 { + if x != nil { + return x.LastUpdateTime + } + return 0 +} + +// StatefulSetDetails contains detailed StatefulSet information for drill-down +type StatefulSetDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Containers []*ContainerTemplate `protobuf:"bytes,1,rep,name=containers,proto3" json:"containers,omitempty"` // Container templates from pod spec + VolumeClaimTemplates []*VolumeClaimTemplate `protobuf:"bytes,2,rep,name=volume_claim_templates,json=volumeClaimTemplates,proto3" json:"volume_claim_templates,omitempty"` // PVC templates + Partition int32 `protobuf:"varint,3,opt,name=partition,proto3" json:"partition,omitempty"` // Update strategy partition (for canary updates) +} + +func (x *StatefulSetDetails) Reset() { + *x = StatefulSetDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatefulSetDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatefulSetDetails) ProtoMessage() {} + +func (x *StatefulSetDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[27] + 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 StatefulSetDetails.ProtoReflect.Descriptor instead. +func (*StatefulSetDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{27} +} + +func (x *StatefulSetDetails) GetContainers() []*ContainerTemplate { + if x != nil { + return x.Containers + } + return nil +} + +func (x *StatefulSetDetails) GetVolumeClaimTemplates() []*VolumeClaimTemplate { + if x != nil { + return x.VolumeClaimTemplates + } + return nil +} + +func (x *StatefulSetDetails) GetPartition() int32 { + if x != nil { + return x.Partition + } + return 0 +} + +// VolumeClaimTemplate represents a volume claim template in a StatefulSet +type VolumeClaimTemplate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // PVC template name + AccessModes []string `protobuf:"bytes,2,rep,name=access_modes,json=accessModes,proto3" json:"access_modes,omitempty"` // "ReadWriteOnce", etc. + VolumeMode string `protobuf:"bytes,3,opt,name=volume_mode,json=volumeMode,proto3" json:"volume_mode,omitempty"` // "Filesystem" or "Block" + StorageRequests int64 `protobuf:"varint,4,opt,name=storage_requests,json=storageRequests,proto3" json:"storage_requests,omitempty"` // Storage size requested in bytes + StorageClass string `protobuf:"bytes,5,opt,name=storage_class,json=storageClass,proto3" json:"storage_class,omitempty"` // Storage class name (optional) +} + +func (x *VolumeClaimTemplate) Reset() { + *x = VolumeClaimTemplate{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VolumeClaimTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumeClaimTemplate) ProtoMessage() {} + +func (x *VolumeClaimTemplate) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[28] + 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 VolumeClaimTemplate.ProtoReflect.Descriptor instead. +func (*VolumeClaimTemplate) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{28} +} + +func (x *VolumeClaimTemplate) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *VolumeClaimTemplate) GetAccessModes() []string { + if x != nil { + return x.AccessModes + } + return nil +} + +func (x *VolumeClaimTemplate) GetVolumeMode() string { + if x != nil { + return x.VolumeMode + } + return "" +} + +func (x *VolumeClaimTemplate) GetStorageRequests() int64 { + if x != nil { + return x.StorageRequests + } + return 0 +} + +func (x *VolumeClaimTemplate) GetStorageClass() string { + if x != nil { + return x.StorageClass + } + return "" +} + +// DaemonSetDetails contains detailed DaemonSet information for drill-down +type DaemonSetDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Containers []*ContainerTemplate `protobuf:"bytes,1,rep,name=containers,proto3" json:"containers,omitempty"` // Container templates from pod spec + Tolerations []*TolerationInfo `protobuf:"bytes,2,rep,name=tolerations,proto3" json:"tolerations,omitempty"` // Tolerations for node scheduling + NodeSelector *NodeSelector `protobuf:"bytes,3,opt,name=node_selector,json=nodeSelector,proto3" json:"node_selector,omitempty"` // Node selector requirements (optional) +} + +func (x *DaemonSetDetails) Reset() { + *x = DaemonSetDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DaemonSetDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DaemonSetDetails) ProtoMessage() {} + +func (x *DaemonSetDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[29] + 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 DaemonSetDetails.ProtoReflect.Descriptor instead. +func (*DaemonSetDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{29} +} + +func (x *DaemonSetDetails) GetContainers() []*ContainerTemplate { + if x != nil { + return x.Containers + } + return nil +} + +func (x *DaemonSetDetails) GetTolerations() []*TolerationInfo { + if x != nil { + return x.Tolerations + } + return nil +} + +func (x *DaemonSetDetails) GetNodeSelector() *NodeSelector { + if x != nil { + return x.NodeSelector + } + return nil +} + +// ReplicaSetDetails contains detailed ReplicaSet information for drill-down +type ReplicaSetDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Containers []*ContainerTemplate `protobuf:"bytes,1,rep,name=containers,proto3" json:"containers,omitempty"` // Container templates from pod spec + Selector *LabelSelector `protobuf:"bytes,2,opt,name=selector,proto3" json:"selector,omitempty"` // Pod selector for replica set +} + +func (x *ReplicaSetDetails) Reset() { + *x = ReplicaSetDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReplicaSetDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReplicaSetDetails) ProtoMessage() {} + +func (x *ReplicaSetDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[30] + 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 ReplicaSetDetails.ProtoReflect.Descriptor instead. +func (*ReplicaSetDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{30} +} + +func (x *ReplicaSetDetails) GetContainers() []*ContainerTemplate { + if x != nil { + return x.Containers + } + return nil +} + +func (x *ReplicaSetDetails) GetSelector() *LabelSelector { + if x != nil { + return x.Selector + } + return nil +} + +// JobDetails contains detailed Job information for drill-down +type JobDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Containers []*ContainerTemplate `protobuf:"bytes,1,rep,name=containers,proto3" json:"containers,omitempty"` // Container templates from pod spec + Conditions []*JobCondition `protobuf:"bytes,2,rep,name=conditions,proto3" json:"conditions,omitempty"` // Job conditions for debugging + Selector *LabelSelector `protobuf:"bytes,3,opt,name=selector,proto3" json:"selector,omitempty"` // Pod selector for job +} + +func (x *JobDetails) Reset() { + *x = JobDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobDetails) ProtoMessage() {} + +func (x *JobDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[31] + 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 JobDetails.ProtoReflect.Descriptor instead. +func (*JobDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{31} +} + +func (x *JobDetails) GetContainers() []*ContainerTemplate { + if x != nil { + return x.Containers + } + return nil +} + +func (x *JobDetails) GetConditions() []*JobCondition { + if x != nil { + return x.Conditions + } + return nil +} + +func (x *JobDetails) GetSelector() *LabelSelector { + if x != nil { + return x.Selector + } + return nil +} + +// JobCondition represents a job condition +type JobCondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // "Complete", "Failed", "SuccessCriteriaMet", etc. + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastProbeTime int64 `protobuf:"varint,5,opt,name=last_probe_time,json=lastProbeTime,proto3" json:"last_probe_time,omitempty"` // Last time condition was probed + LastTransitionTime int64 `protobuf:"varint,6,opt,name=last_transition_time,json=lastTransitionTime,proto3" json:"last_transition_time,omitempty"` // Last time condition transitioned +} + +func (x *JobCondition) Reset() { + *x = JobCondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobCondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobCondition) ProtoMessage() {} + +func (x *JobCondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[32] + 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 JobCondition.ProtoReflect.Descriptor instead. +func (*JobCondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{32} +} + +func (x *JobCondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *JobCondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *JobCondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *JobCondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *JobCondition) GetLastProbeTime() int64 { + if x != nil { + return x.LastProbeTime + } + return 0 +} + +func (x *JobCondition) GetLastTransitionTime() int64 { + if x != nil { + return x.LastTransitionTime + } + return 0 +} + +// CronJobDetails contains detailed CronJob information for drill-down +type CronJobDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Containers []*ContainerTemplate `protobuf:"bytes,1,rep,name=containers,proto3" json:"containers,omitempty"` // Container templates from job template pod spec + ActiveJobs []*ActiveJobReference `protobuf:"bytes,2,rep,name=active_jobs,json=activeJobs,proto3" json:"active_jobs,omitempty"` // Currently active jobs + JobTemplate *JobTemplate `protobuf:"bytes,3,opt,name=job_template,json=jobTemplate,proto3" json:"job_template,omitempty"` // Job template specification +} + +func (x *CronJobDetails) Reset() { + *x = CronJobDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CronJobDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CronJobDetails) ProtoMessage() {} + +func (x *CronJobDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[33] + 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 CronJobDetails.ProtoReflect.Descriptor instead. +func (*CronJobDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{33} +} + +func (x *CronJobDetails) GetContainers() []*ContainerTemplate { + if x != nil { + return x.Containers + } + return nil +} + +func (x *CronJobDetails) GetActiveJobs() []*ActiveJobReference { + if x != nil { + return x.ActiveJobs + } + return nil +} + +func (x *CronJobDetails) GetJobTemplate() *JobTemplate { + if x != nil { + return x.JobTemplate + } + return nil +} + +// ActiveJobReference represents an active job created by a CronJob +type ActiveJobReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Job name + Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"` // Job UID + Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` // Job namespace + CreationTime int64 `protobuf:"varint,4,opt,name=creation_time,json=creationTime,proto3" json:"creation_time,omitempty"` // Job creation timestamp +} + +func (x *ActiveJobReference) Reset() { + *x = ActiveJobReference{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ActiveJobReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActiveJobReference) ProtoMessage() {} + +func (x *ActiveJobReference) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[34] + 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 ActiveJobReference.ProtoReflect.Descriptor instead. +func (*ActiveJobReference) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{34} +} + +func (x *ActiveJobReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ActiveJobReference) GetUid() string { + if x != nil { + return x.Uid + } + return "" +} + +func (x *ActiveJobReference) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *ActiveJobReference) GetCreationTime() int64 { + if x != nil { + return x.CreationTime + } + return 0 +} + +// JobTemplate represents the job template in a CronJob +type JobTemplate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Containers []*ContainerTemplate `protobuf:"bytes,1,rep,name=containers,proto3" json:"containers,omitempty"` // Container templates + BackoffLimit int32 `protobuf:"varint,2,opt,name=backoff_limit,json=backoffLimit,proto3" json:"backoff_limit,omitempty"` // Backoff limit from job template + Completions int32 `protobuf:"varint,3,opt,name=completions,proto3" json:"completions,omitempty"` // Desired completions + Parallelism int32 `protobuf:"varint,4,opt,name=parallelism,proto3" json:"parallelism,omitempty"` // Parallelism setting + CompletionMode string `protobuf:"bytes,5,opt,name=completion_mode,json=completionMode,proto3" json:"completion_mode,omitempty"` // Completion mode +} + +func (x *JobTemplate) Reset() { + *x = JobTemplate{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *JobTemplate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*JobTemplate) ProtoMessage() {} + +func (x *JobTemplate) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[35] + 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 JobTemplate.ProtoReflect.Descriptor instead. +func (*JobTemplate) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{35} +} + +func (x *JobTemplate) GetContainers() []*ContainerTemplate { + if x != nil { + return x.Containers + } + return nil +} + +func (x *JobTemplate) GetBackoffLimit() int32 { + if x != nil { + return x.BackoffLimit + } + return 0 +} + +func (x *JobTemplate) GetCompletions() int32 { + if x != nil { + return x.Completions + } + return 0 +} + +func (x *JobTemplate) GetParallelism() int32 { + if x != nil { + return x.Parallelism + } + return 0 +} + +func (x *JobTemplate) GetCompletionMode() string { + if x != nil { + return x.CompletionMode + } + return "" +} + +// ServiceDetails contains detailed Service information for drill-down +type ServiceDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ports []*ServicePort `protobuf:"bytes,1,rep,name=ports,proto3" json:"ports,omitempty"` // Detailed port information + Selector map[string]string `protobuf:"bytes,2,rep,name=selector,proto3" json:"selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Service selector + LoadBalancerIngress []*LoadBalancerIngress `protobuf:"bytes,3,rep,name=load_balancer_ingress,json=loadBalancerIngress,proto3" json:"load_balancer_ingress,omitempty"` // LoadBalancer ingress points + EndpointAddresses []string `protobuf:"bytes,4,rep,name=endpoint_addresses,json=endpointAddresses,proto3" json:"endpoint_addresses,omitempty"` // Endpoint addresses (if available) +} + +func (x *ServiceDetails) Reset() { + *x = ServiceDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServiceDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceDetails) ProtoMessage() {} + +func (x *ServiceDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[36] + 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 ServiceDetails.ProtoReflect.Descriptor instead. +func (*ServiceDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{36} +} + +func (x *ServiceDetails) GetPorts() []*ServicePort { + if x != nil { + return x.Ports + } + return nil +} + +func (x *ServiceDetails) GetSelector() map[string]string { + if x != nil { + return x.Selector + } + return nil +} + +func (x *ServiceDetails) GetLoadBalancerIngress() []*LoadBalancerIngress { + if x != nil { + return x.LoadBalancerIngress + } + return nil +} + +func (x *ServiceDetails) GetEndpointAddresses() []string { + if x != nil { + return x.EndpointAddresses + } + return nil +} + +// ServicePort represents a port exposed by a service +type ServicePort struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Port name (optional) + Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` // Service port number + TargetPort int32 `protobuf:"varint,3,opt,name=target_port,json=targetPort,proto3" json:"target_port,omitempty"` // Target port on pods (could be port number or name) + TargetPortName string `protobuf:"bytes,4,opt,name=target_port_name,json=targetPortName,proto3" json:"target_port_name,omitempty"` // Target port name if it's a named port + Protocol string `protobuf:"bytes,5,opt,name=protocol,proto3" json:"protocol,omitempty"` // Protocol: "TCP", "UDP", "SCTP" + NodePort int32 `protobuf:"varint,6,opt,name=node_port,json=nodePort,proto3" json:"node_port,omitempty"` // NodePort (for NodePort and LoadBalancer services) + AppProtocol string `protobuf:"bytes,7,opt,name=app_protocol,json=appProtocol,proto3" json:"app_protocol,omitempty"` // Application protocol (optional, e.g., "HTTP", "HTTPS") +} + +func (x *ServicePort) Reset() { + *x = ServicePort{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServicePort) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServicePort) ProtoMessage() {} + +func (x *ServicePort) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[37] + 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 ServicePort.ProtoReflect.Descriptor instead. +func (*ServicePort) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{37} +} + +func (x *ServicePort) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ServicePort) GetPort() int32 { + if x != nil { + return x.Port + } + return 0 +} + +func (x *ServicePort) GetTargetPort() int32 { + if x != nil { + return x.TargetPort + } + return 0 +} + +func (x *ServicePort) GetTargetPortName() string { + if x != nil { + return x.TargetPortName + } + return "" +} + +func (x *ServicePort) GetProtocol() string { + if x != nil { + return x.Protocol + } + return "" +} + +func (x *ServicePort) GetNodePort() int32 { + if x != nil { + return x.NodePort + } + return 0 +} + +func (x *ServicePort) GetAppProtocol() string { + if x != nil { + return x.AppProtocol + } + return "" +} + +// LoadBalancerIngress represents a load balancer ingress point +type LoadBalancerIngress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Ip string `protobuf:"bytes,1,opt,name=ip,proto3" json:"ip,omitempty"` // IP address + Hostname string `protobuf:"bytes,2,opt,name=hostname,proto3" json:"hostname,omitempty"` // Hostname (alternative to IP) + Ports []string `protobuf:"bytes,3,rep,name=ports,proto3" json:"ports,omitempty"` // Ports information from ingress + IpMode string `protobuf:"bytes,4,opt,name=ip_mode,json=ipMode,proto3" json:"ip_mode,omitempty"` // IP mode: "VIP" or "Proxy" +} + +func (x *LoadBalancerIngress) Reset() { + *x = LoadBalancerIngress{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LoadBalancerIngress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LoadBalancerIngress) ProtoMessage() {} + +func (x *LoadBalancerIngress) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[38] + 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 LoadBalancerIngress.ProtoReflect.Descriptor instead. +func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{38} +} + +func (x *LoadBalancerIngress) GetIp() string { + if x != nil { + return x.Ip + } + return "" +} + +func (x *LoadBalancerIngress) GetHostname() string { + if x != nil { + return x.Hostname + } + return "" +} + +func (x *LoadBalancerIngress) GetPorts() []string { + if x != nil { + return x.Ports + } + return nil +} + +func (x *LoadBalancerIngress) GetIpMode() string { + if x != nil { + return x.IpMode + } + return "" +} + +// IngressDetails contains detailed Ingress information for drill-down +type IngressDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rules []*IngressRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` // Ingress rules + Tls []*IngressTLS `protobuf:"bytes,2,rep,name=tls,proto3" json:"tls,omitempty"` // TLS configurations + DefaultBackend *IngressBackend `protobuf:"bytes,3,opt,name=default_backend,json=defaultBackend,proto3" json:"default_backend,omitempty"` // Default backend (optional) + LoadBalancerIngress []*LoadBalancerIngress `protobuf:"bytes,4,rep,name=load_balancer_ingress,json=loadBalancerIngress,proto3" json:"load_balancer_ingress,omitempty"` // Load balancer status +} + +func (x *IngressDetails) Reset() { + *x = IngressDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IngressDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IngressDetails) ProtoMessage() {} + +func (x *IngressDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[39] + 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 IngressDetails.ProtoReflect.Descriptor instead. +func (*IngressDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{39} +} + +func (x *IngressDetails) GetRules() []*IngressRule { + if x != nil { + return x.Rules + } + return nil +} + +func (x *IngressDetails) GetTls() []*IngressTLS { + if x != nil { + return x.Tls + } + return nil +} + +func (x *IngressDetails) GetDefaultBackend() *IngressBackend { + if x != nil { + return x.DefaultBackend + } + return nil +} + +func (x *IngressDetails) GetLoadBalancerIngress() []*LoadBalancerIngress { + if x != nil { + return x.LoadBalancerIngress + } + return nil +} + +// IngressRule represents an ingress rule +type IngressRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` // Host name (optional, empty means all hosts) + Paths []*IngressPath `protobuf:"bytes,2,rep,name=paths,proto3" json:"paths,omitempty"` // HTTP paths +} + +func (x *IngressRule) Reset() { + *x = IngressRule{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IngressRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IngressRule) ProtoMessage() {} + +func (x *IngressRule) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[40] + 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 IngressRule.ProtoReflect.Descriptor instead. +func (*IngressRule) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{40} +} + +func (x *IngressRule) GetHost() string { + if x != nil { + return x.Host + } + return "" +} + +func (x *IngressRule) GetPaths() []*IngressPath { + if x != nil { + return x.Paths + } + return nil +} + +// IngressPath represents a path rule within an ingress +type IngressPath struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // URL path + PathType string `protobuf:"bytes,2,opt,name=path_type,json=pathType,proto3" json:"path_type,omitempty"` // Path type: "Exact", "Prefix", "ImplementationSpecific" + Backend *IngressBackend `protobuf:"bytes,3,opt,name=backend,proto3" json:"backend,omitempty"` // Backend service +} + +func (x *IngressPath) Reset() { + *x = IngressPath{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IngressPath) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IngressPath) ProtoMessage() {} + +func (x *IngressPath) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[41] + 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 IngressPath.ProtoReflect.Descriptor instead. +func (*IngressPath) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{41} +} + +func (x *IngressPath) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *IngressPath) GetPathType() string { + if x != nil { + return x.PathType + } + return "" +} + +func (x *IngressPath) GetBackend() *IngressBackend { + if x != nil { + return x.Backend + } + return nil +} + +// IngressBackend represents a backend referenced by an ingress +type IngressBackend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` // Service name + ServicePort int32 `protobuf:"varint,2,opt,name=service_port,json=servicePort,proto3" json:"service_port,omitempty"` // Service port number + ServicePortName string `protobuf:"bytes,3,opt,name=service_port_name,json=servicePortName,proto3" json:"service_port_name,omitempty"` // Service port name (alternative to number) + ResourceApiVersion string `protobuf:"bytes,4,opt,name=resource_api_version,json=resourceApiVersion,proto3" json:"resource_api_version,omitempty"` // Resource API version (for non-service backends) + ResourceKind string `protobuf:"bytes,5,opt,name=resource_kind,json=resourceKind,proto3" json:"resource_kind,omitempty"` // Resource kind (for non-service backends) + ResourceName string `protobuf:"bytes,6,opt,name=resource_name,json=resourceName,proto3" json:"resource_name,omitempty"` // Resource name (for non-service backends) +} + +func (x *IngressBackend) Reset() { + *x = IngressBackend{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IngressBackend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IngressBackend) ProtoMessage() {} + +func (x *IngressBackend) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[42] + 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 IngressBackend.ProtoReflect.Descriptor instead. +func (*IngressBackend) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{42} +} + +func (x *IngressBackend) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +func (x *IngressBackend) GetServicePort() int32 { + if x != nil { + return x.ServicePort + } + return 0 +} + +func (x *IngressBackend) GetServicePortName() string { + if x != nil { + return x.ServicePortName + } + return "" +} + +func (x *IngressBackend) GetResourceApiVersion() string { + if x != nil { + return x.ResourceApiVersion + } + return "" +} + +func (x *IngressBackend) GetResourceKind() string { + if x != nil { + return x.ResourceKind + } + return "" +} + +func (x *IngressBackend) GetResourceName() string { + if x != nil { + return x.ResourceName + } + return "" +} + +// IngressTLS represents TLS configuration for an ingress +type IngressTLS struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Hosts []string `protobuf:"bytes,1,rep,name=hosts,proto3" json:"hosts,omitempty"` // Hosts covered by this TLS config + SecretName string `protobuf:"bytes,2,opt,name=secret_name,json=secretName,proto3" json:"secret_name,omitempty"` // Secret containing the TLS certificate +} + +func (x *IngressTLS) Reset() { + *x = IngressTLS{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IngressTLS) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IngressTLS) ProtoMessage() {} + +func (x *IngressTLS) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[43] + 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 IngressTLS.ProtoReflect.Descriptor instead. +func (*IngressTLS) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{43} +} + +func (x *IngressTLS) GetHosts() []string { + if x != nil { + return x.Hosts + } + return nil +} + +func (x *IngressTLS) GetSecretName() string { + if x != nil { + return x.SecretName + } + return "" +} + +// PersistentVolumeClaimDetails contains detailed PVC information for drill-down +type PersistentVolumeClaimDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ResourceRequirements *ResourceRequirements `protobuf:"bytes,1,opt,name=resource_requirements,json=resourceRequirements,proto3" json:"resource_requirements,omitempty"` // Storage resource requirements + Selector *LabelSelector `protobuf:"bytes,2,opt,name=selector,proto3" json:"selector,omitempty"` // Label selector for PV binding + VolumeNodeAffinity []*VolumeNodeAffinity `protobuf:"bytes,3,rep,name=volume_node_affinity,json=volumeNodeAffinity,proto3" json:"volume_node_affinity,omitempty"` // Node affinity constraints + Conditions []*PVCCondition `protobuf:"bytes,4,rep,name=conditions,proto3" json:"conditions,omitempty"` // PVC conditions + MountedByPods []string `protobuf:"bytes,5,rep,name=mounted_by_pods,json=mountedByPods,proto3" json:"mounted_by_pods,omitempty"` // Pods currently using this PVC +} + +func (x *PersistentVolumeClaimDetails) Reset() { + *x = PersistentVolumeClaimDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PersistentVolumeClaimDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PersistentVolumeClaimDetails) ProtoMessage() {} + +func (x *PersistentVolumeClaimDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[44] + 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 PersistentVolumeClaimDetails.ProtoReflect.Descriptor instead. +func (*PersistentVolumeClaimDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{44} +} + +func (x *PersistentVolumeClaimDetails) GetResourceRequirements() *ResourceRequirements { + if x != nil { + return x.ResourceRequirements + } + return nil +} + +func (x *PersistentVolumeClaimDetails) GetSelector() *LabelSelector { + if x != nil { + return x.Selector + } + return nil +} + +func (x *PersistentVolumeClaimDetails) GetVolumeNodeAffinity() []*VolumeNodeAffinity { + if x != nil { + return x.VolumeNodeAffinity + } + return nil +} + +func (x *PersistentVolumeClaimDetails) GetConditions() []*PVCCondition { + if x != nil { + return x.Conditions + } + return nil +} + +func (x *PersistentVolumeClaimDetails) GetMountedByPods() []string { + if x != nil { + return x.MountedByPods + } + return nil +} + +// ResourceRequirements represents storage resource requirements +type ResourceRequirements struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Requests map[string]string `protobuf:"bytes,1,rep,name=requests,proto3" json:"requests,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Resource requests (e.g., "storage": "50Gi") + Limits map[string]string `protobuf:"bytes,2,rep,name=limits,proto3" json:"limits,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Resource limits (optional for PVCs) +} + +func (x *ResourceRequirements) Reset() { + *x = ResourceRequirements{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceRequirements) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceRequirements) ProtoMessage() {} + +func (x *ResourceRequirements) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[45] + 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 ResourceRequirements.ProtoReflect.Descriptor instead. +func (*ResourceRequirements) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{45} +} + +func (x *ResourceRequirements) GetRequests() map[string]string { + if x != nil { + return x.Requests + } + return nil +} + +func (x *ResourceRequirements) GetLimits() map[string]string { + if x != nil { + return x.Limits + } + return nil +} + +// VolumeNodeAffinity represents node affinity constraints for volumes +type VolumeNodeAffinity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Required []*NodeSelectorRequirement `protobuf:"bytes,1,rep,name=required,proto3" json:"required,omitempty"` // Required node selector terms + Preferred []*NodeSelectorRequirement `protobuf:"bytes,2,rep,name=preferred,proto3" json:"preferred,omitempty"` // Preferred node selector terms +} + +func (x *VolumeNodeAffinity) Reset() { + *x = VolumeNodeAffinity{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VolumeNodeAffinity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VolumeNodeAffinity) ProtoMessage() {} + +func (x *VolumeNodeAffinity) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[46] + 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 VolumeNodeAffinity.ProtoReflect.Descriptor instead. +func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{46} +} + +func (x *VolumeNodeAffinity) GetRequired() []*NodeSelectorRequirement { + if x != nil { + return x.Required + } + return nil +} + +func (x *VolumeNodeAffinity) GetPreferred() []*NodeSelectorRequirement { + if x != nil { + return x.Preferred + } + return nil +} + +// PVCCondition represents a condition of a PVC +type PVCCondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Condition type (e.g., "Resizing") + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastProbeTime int64 `protobuf:"varint,5,opt,name=last_probe_time,json=lastProbeTime,proto3" json:"last_probe_time,omitempty"` // Last time condition was probed + LastTransitionTime int64 `protobuf:"varint,6,opt,name=last_transition_time,json=lastTransitionTime,proto3" json:"last_transition_time,omitempty"` // Last time condition transitioned +} + +func (x *PVCCondition) Reset() { + *x = PVCCondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PVCCondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PVCCondition) ProtoMessage() {} + +func (x *PVCCondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[47] + 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 PVCCondition.ProtoReflect.Descriptor instead. +func (*PVCCondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{47} +} + +func (x *PVCCondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *PVCCondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *PVCCondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *PVCCondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *PVCCondition) GetLastProbeTime() int64 { + if x != nil { + return x.LastProbeTime + } + return 0 +} + +func (x *PVCCondition) GetLastTransitionTime() int64 { + if x != nil { + return x.LastTransitionTime + } + return 0 +} + +// PersistentVolumeDetails contains detailed PV information for drill-down +type PersistentVolumeDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Capacity map[string]string `protobuf:"bytes,1,rep,name=capacity,proto3" json:"capacity,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Storage capacity resources + ClaimRef *PVClaimReference `protobuf:"bytes,2,opt,name=claim_ref,json=claimRef,proto3" json:"claim_ref,omitempty"` // Reference to bound PVC + VolumeSource *PVVolumeSource `protobuf:"bytes,3,opt,name=volume_source,json=volumeSource,proto3" json:"volume_source,omitempty"` // Volume source (CSI, HostPath, etc.) + NodeAffinity *NodeSelector `protobuf:"bytes,4,opt,name=node_affinity,json=nodeAffinity,proto3" json:"node_affinity,omitempty"` // Node affinity constraints + MountOptions []string `protobuf:"bytes,5,rep,name=mount_options,json=mountOptions,proto3" json:"mount_options,omitempty"` // Mount options for the volume +} + +func (x *PersistentVolumeDetails) Reset() { + *x = PersistentVolumeDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PersistentVolumeDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PersistentVolumeDetails) ProtoMessage() {} + +func (x *PersistentVolumeDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[48] + 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 PersistentVolumeDetails.ProtoReflect.Descriptor instead. +func (*PersistentVolumeDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{48} +} + +func (x *PersistentVolumeDetails) GetCapacity() map[string]string { + if x != nil { + return x.Capacity + } + return nil +} + +func (x *PersistentVolumeDetails) GetClaimRef() *PVClaimReference { + if x != nil { + return x.ClaimRef + } + return nil +} + +func (x *PersistentVolumeDetails) GetVolumeSource() *PVVolumeSource { + if x != nil { + return x.VolumeSource + } + return nil +} + +func (x *PersistentVolumeDetails) GetNodeAffinity() *NodeSelector { + if x != nil { + return x.NodeAffinity + } + return nil +} + +func (x *PersistentVolumeDetails) GetMountOptions() []string { + if x != nil { + return x.MountOptions + } + return nil +} + +// PVClaimReference represents a reference to a PVC +type PVClaimReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // PVC name + Namespace string `protobuf:"bytes,2,opt,name=namespace,proto3" json:"namespace,omitempty"` // PVC namespace + Uid string `protobuf:"bytes,3,opt,name=uid,proto3" json:"uid,omitempty"` // PVC UID + ApiVersion string `protobuf:"bytes,4,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` // API version + ResourceVersion string `protobuf:"bytes,5,opt,name=resource_version,json=resourceVersion,proto3" json:"resource_version,omitempty"` // Resource version +} + +func (x *PVClaimReference) Reset() { + *x = PVClaimReference{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PVClaimReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PVClaimReference) ProtoMessage() {} + +func (x *PVClaimReference) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[49] + 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 PVClaimReference.ProtoReflect.Descriptor instead. +func (*PVClaimReference) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{49} +} + +func (x *PVClaimReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *PVClaimReference) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *PVClaimReference) GetUid() string { + if x != nil { + return x.Uid + } + return "" +} + +func (x *PVClaimReference) GetApiVersion() string { + if x != nil { + return x.ApiVersion + } + return "" +} + +func (x *PVClaimReference) GetResourceVersion() string { + if x != nil { + return x.ResourceVersion + } + return "" +} + +// PVVolumeSource represents the source of a persistent volume +type PVVolumeSource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Volume source type + Csi *CSIVolumeSource `protobuf:"bytes,2,opt,name=csi,proto3" json:"csi,omitempty"` // CSI volume source (if applicable) + HostPath *HostPathVolumeSource `protobuf:"bytes,3,opt,name=host_path,json=hostPath,proto3" json:"host_path,omitempty"` // HostPath volume source (if applicable) + Nfs *NFSVolumeSource `protobuf:"bytes,4,opt,name=nfs,proto3" json:"nfs,omitempty"` // NFS volume source (if applicable) + VolumeAttributes map[string]string `protobuf:"bytes,5,rep,name=volume_attributes,json=volumeAttributes,proto3" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Additional volume attributes +} + +func (x *PVVolumeSource) Reset() { + *x = PVVolumeSource{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PVVolumeSource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PVVolumeSource) ProtoMessage() {} + +func (x *PVVolumeSource) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[50] + 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 PVVolumeSource.ProtoReflect.Descriptor instead. +func (*PVVolumeSource) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{50} +} + +func (x *PVVolumeSource) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *PVVolumeSource) GetCsi() *CSIVolumeSource { + if x != nil { + return x.Csi + } + return nil +} + +func (x *PVVolumeSource) GetHostPath() *HostPathVolumeSource { + if x != nil { + return x.HostPath + } + return nil +} + +func (x *PVVolumeSource) GetNfs() *NFSVolumeSource { + if x != nil { + return x.Nfs + } + return nil +} + +func (x *PVVolumeSource) GetVolumeAttributes() map[string]string { + if x != nil { + return x.VolumeAttributes + } + return nil +} + +// CSIVolumeSource represents a CSI volume source +type CSIVolumeSource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Driver string `protobuf:"bytes,1,opt,name=driver,proto3" json:"driver,omitempty"` // CSI driver name + VolumeHandle string `protobuf:"bytes,2,opt,name=volume_handle,json=volumeHandle,proto3" json:"volume_handle,omitempty"` // Volume handle/ID + FsType string `protobuf:"bytes,3,opt,name=fs_type,json=fsType,proto3" json:"fs_type,omitempty"` // Filesystem type + ReadOnly bool `protobuf:"varint,4,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` // Whether volume is read-only + VolumeAttributes map[string]string `protobuf:"bytes,5,rep,name=volume_attributes,json=volumeAttributes,proto3" json:"volume_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // CSI volume attributes +} + +func (x *CSIVolumeSource) Reset() { + *x = CSIVolumeSource{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CSIVolumeSource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CSIVolumeSource) ProtoMessage() {} + +func (x *CSIVolumeSource) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[51] + 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 CSIVolumeSource.ProtoReflect.Descriptor instead. +func (*CSIVolumeSource) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{51} +} + +func (x *CSIVolumeSource) GetDriver() string { + if x != nil { + return x.Driver + } + return "" +} + +func (x *CSIVolumeSource) GetVolumeHandle() string { + if x != nil { + return x.VolumeHandle + } + return "" +} + +func (x *CSIVolumeSource) GetFsType() string { + if x != nil { + return x.FsType + } + return "" +} + +func (x *CSIVolumeSource) GetReadOnly() bool { + if x != nil { + return x.ReadOnly + } + return false +} + +func (x *CSIVolumeSource) GetVolumeAttributes() map[string]string { + if x != nil { + return x.VolumeAttributes + } + return nil +} + +// HostPathVolumeSource represents a host path volume source +type HostPathVolumeSource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` // Host path + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` // Path type (e.g., "Directory", "File") +} + +func (x *HostPathVolumeSource) Reset() { + *x = HostPathVolumeSource{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HostPathVolumeSource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HostPathVolumeSource) ProtoMessage() {} + +func (x *HostPathVolumeSource) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[52] + 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 HostPathVolumeSource.ProtoReflect.Descriptor instead. +func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{52} +} + +func (x *HostPathVolumeSource) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *HostPathVolumeSource) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +// NFSVolumeSource represents an NFS volume source +type NFSVolumeSource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Server string `protobuf:"bytes,1,opt,name=server,proto3" json:"server,omitempty"` // NFS server + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` // NFS path + ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"read_only,omitempty"` // Whether NFS mount is read-only +} + +func (x *NFSVolumeSource) Reset() { + *x = NFSVolumeSource{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NFSVolumeSource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NFSVolumeSource) ProtoMessage() {} + +func (x *NFSVolumeSource) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[53] + 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 NFSVolumeSource.ProtoReflect.Descriptor instead. +func (*NFSVolumeSource) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{53} +} + +func (x *NFSVolumeSource) GetServer() string { + if x != nil { + return x.Server + } + return "" +} + +func (x *NFSVolumeSource) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *NFSVolumeSource) GetReadOnly() bool { + if x != nil { + return x.ReadOnly + } + return false +} + +// StorageClassDetails contains detailed StorageClass information for drill-down +type StorageClassDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Provisioner string `protobuf:"bytes,1,opt,name=provisioner,proto3" json:"provisioner,omitempty"` // Storage provisioner + Parameters map[string]string `protobuf:"bytes,2,rep,name=parameters,proto3" json:"parameters,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Storage class parameters + AllowedTopologies []*TopologySelector `protobuf:"bytes,3,rep,name=allowed_topologies,json=allowedTopologies,proto3" json:"allowed_topologies,omitempty"` // Allowed topologies + MountOptions []string `protobuf:"bytes,4,rep,name=mount_options,json=mountOptions,proto3" json:"mount_options,omitempty"` // Default mount options + VolumeBindingMode string `protobuf:"bytes,5,opt,name=volume_binding_mode,json=volumeBindingMode,proto3" json:"volume_binding_mode,omitempty"` // Volume binding mode + ReclaimPolicy string `protobuf:"bytes,6,opt,name=reclaim_policy,json=reclaimPolicy,proto3" json:"reclaim_policy,omitempty"` // Default reclaim policy + AllowVolumeExpansion bool `protobuf:"varint,7,opt,name=allow_volume_expansion,json=allowVolumeExpansion,proto3" json:"allow_volume_expansion,omitempty"` // Whether volume expansion is allowed +} + +func (x *StorageClassDetails) Reset() { + *x = StorageClassDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StorageClassDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StorageClassDetails) ProtoMessage() {} + +func (x *StorageClassDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[54] + 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 StorageClassDetails.ProtoReflect.Descriptor instead. +func (*StorageClassDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{54} +} + +func (x *StorageClassDetails) GetProvisioner() string { + if x != nil { + return x.Provisioner + } + return "" +} + +func (x *StorageClassDetails) GetParameters() map[string]string { + if x != nil { + return x.Parameters + } + return nil +} + +func (x *StorageClassDetails) GetAllowedTopologies() []*TopologySelector { + if x != nil { + return x.AllowedTopologies + } + return nil +} + +func (x *StorageClassDetails) GetMountOptions() []string { + if x != nil { + return x.MountOptions + } + return nil +} + +func (x *StorageClassDetails) GetVolumeBindingMode() string { + if x != nil { + return x.VolumeBindingMode + } + return "" +} + +func (x *StorageClassDetails) GetReclaimPolicy() string { + if x != nil { + return x.ReclaimPolicy + } + return "" +} + +func (x *StorageClassDetails) GetAllowVolumeExpansion() bool { + if x != nil { + return x.AllowVolumeExpansion + } + return false +} + +// NamespaceDetails contains detailed Namespace information for drill-down +type NamespaceDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Phase string `protobuf:"bytes,1,opt,name=phase,proto3" json:"phase,omitempty"` // Namespace phase: "Active", "Terminating" + Finalizers []string `protobuf:"bytes,2,rep,name=finalizers,proto3" json:"finalizers,omitempty"` // Finalizers preventing deletion + Conditions map[string]string `protobuf:"bytes,3,rep,name=conditions,proto3" json:"conditions,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Namespace conditions if any +} + +func (x *NamespaceDetails) Reset() { + *x = NamespaceDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NamespaceDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NamespaceDetails) ProtoMessage() {} + +func (x *NamespaceDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[55] + 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 NamespaceDetails.ProtoReflect.Descriptor instead. +func (*NamespaceDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{55} +} + +func (x *NamespaceDetails) GetPhase() string { + if x != nil { + return x.Phase + } + return "" +} + +func (x *NamespaceDetails) GetFinalizers() []string { + if x != nil { + return x.Finalizers + } + return nil +} + +func (x *NamespaceDetails) GetConditions() map[string]string { + if x != nil { + return x.Conditions + } + return nil +} + +// NodeDetails contains detailed Node information for drill-down +type NodeDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Addresses []*NodeAddress `protobuf:"bytes,1,rep,name=addresses,proto3" json:"addresses,omitempty"` // Node addresses (Internal/External IP, DNS, etc.) + Conditions []*NodeCondition `protobuf:"bytes,2,rep,name=conditions,proto3" json:"conditions,omitempty"` // Node conditions (Ready, MemoryPressure, etc.) + SystemInfo *NodeSystemInfo `protobuf:"bytes,3,opt,name=system_info,json=systemInfo,proto3" json:"system_info,omitempty"` // System information (OS, kernel, etc.) + Capacity map[string]string `protobuf:"bytes,4,rep,name=capacity,proto3" json:"capacity,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Resource capacity (cpu, memory, etc.) + Allocatable map[string]string `protobuf:"bytes,5,rep,name=allocatable,proto3" json:"allocatable,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Allocatable resources + Images []*NodeImage `protobuf:"bytes,6,rep,name=images,proto3" json:"images,omitempty"` // Container images on the node +} + +func (x *NodeDetails) Reset() { + *x = NodeDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeDetails) ProtoMessage() {} + +func (x *NodeDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[56] + 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 NodeDetails.ProtoReflect.Descriptor instead. +func (*NodeDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{56} +} + +func (x *NodeDetails) GetAddresses() []*NodeAddress { + if x != nil { + return x.Addresses + } + return nil +} + +func (x *NodeDetails) GetConditions() []*NodeCondition { + if x != nil { + return x.Conditions + } + return nil +} + +func (x *NodeDetails) GetSystemInfo() *NodeSystemInfo { + if x != nil { + return x.SystemInfo + } + return nil +} + +func (x *NodeDetails) GetCapacity() map[string]string { + if x != nil { + return x.Capacity + } + return nil +} + +func (x *NodeDetails) GetAllocatable() map[string]string { + if x != nil { + return x.Allocatable + } + return nil +} + +func (x *NodeDetails) GetImages() []*NodeImage { + if x != nil { + return x.Images + } + return nil +} + +// NodeTaint represents a node taint that affects pod scheduling +type NodeTaint struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // Taint key + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` // Taint value (optional) + Effect string `protobuf:"bytes,3,opt,name=effect,proto3" json:"effect,omitempty"` // Taint effect: "NoSchedule", "PreferNoSchedule", "NoExecute" + TimeAdded int64 `protobuf:"varint,4,opt,name=time_added,json=timeAdded,proto3" json:"time_added,omitempty"` // When the taint was added (optional) +} + +func (x *NodeTaint) Reset() { + *x = NodeTaint{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeTaint) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeTaint) ProtoMessage() {} + +func (x *NodeTaint) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[57] + 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 NodeTaint.ProtoReflect.Descriptor instead. +func (*NodeTaint) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{57} +} + +func (x *NodeTaint) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *NodeTaint) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *NodeTaint) GetEffect() string { + if x != nil { + return x.Effect + } + return "" +} + +func (x *NodeTaint) GetTimeAdded() int64 { + if x != nil { + return x.TimeAdded + } + return 0 +} + +// NodeAddress represents a node address +type NodeAddress struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Address type: "InternalIP", "ExternalIP", "InternalDNS", "ExternalDNS", "Hostname" + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` // The address value +} + +func (x *NodeAddress) Reset() { + *x = NodeAddress{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeAddress) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeAddress) ProtoMessage() {} + +func (x *NodeAddress) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[58] + 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 NodeAddress.ProtoReflect.Descriptor instead. +func (*NodeAddress) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{58} +} + +func (x *NodeAddress) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *NodeAddress) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +// NodeCondition represents a node condition +type NodeCondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Condition type: "Ready", "MemoryPressure", "DiskPressure", "PIDPressure", etc. + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Condition status: "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastHeartbeatTime int64 `protobuf:"varint,5,opt,name=last_heartbeat_time,json=lastHeartbeatTime,proto3" json:"last_heartbeat_time,omitempty"` // Last heartbeat time + LastTransitionTime int64 `protobuf:"varint,6,opt,name=last_transition_time,json=lastTransitionTime,proto3" json:"last_transition_time,omitempty"` // Last transition time +} + +func (x *NodeCondition) Reset() { + *x = NodeCondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeCondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeCondition) ProtoMessage() {} + +func (x *NodeCondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[59] + 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 NodeCondition.ProtoReflect.Descriptor instead. +func (*NodeCondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{59} +} + +func (x *NodeCondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *NodeCondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *NodeCondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *NodeCondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *NodeCondition) GetLastHeartbeatTime() int64 { + if x != nil { + return x.LastHeartbeatTime + } + return 0 +} + +func (x *NodeCondition) GetLastTransitionTime() int64 { + if x != nil { + return x.LastTransitionTime + } + return 0 +} + +// NodeSystemInfo represents node system information +type NodeSystemInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MachineId string `protobuf:"bytes,1,opt,name=machine_id,json=machineId,proto3" json:"machine_id,omitempty"` // Machine ID + SystemUuid string `protobuf:"bytes,2,opt,name=system_uuid,json=systemUuid,proto3" json:"system_uuid,omitempty"` // System UUID + BootId string `protobuf:"bytes,3,opt,name=boot_id,json=bootId,proto3" json:"boot_id,omitempty"` // Boot ID + KernelVersion string `protobuf:"bytes,4,opt,name=kernel_version,json=kernelVersion,proto3" json:"kernel_version,omitempty"` // Kernel version + OsImage string `protobuf:"bytes,5,opt,name=os_image,json=osImage,proto3" json:"os_image,omitempty"` // OS image + ContainerRuntimeVersion string `protobuf:"bytes,6,opt,name=container_runtime_version,json=containerRuntimeVersion,proto3" json:"container_runtime_version,omitempty"` // Container runtime version + KubeletVersion string `protobuf:"bytes,7,opt,name=kubelet_version,json=kubeletVersion,proto3" json:"kubelet_version,omitempty"` // Kubelet version + KubeProxyVersion string `protobuf:"bytes,8,opt,name=kube_proxy_version,json=kubeProxyVersion,proto3" json:"kube_proxy_version,omitempty"` // Kube-proxy version + OperatingSystem string `protobuf:"bytes,9,opt,name=operating_system,json=operatingSystem,proto3" json:"operating_system,omitempty"` // Operating system + Architecture string `protobuf:"bytes,10,opt,name=architecture,proto3" json:"architecture,omitempty"` // Architecture +} + +func (x *NodeSystemInfo) Reset() { + *x = NodeSystemInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeSystemInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeSystemInfo) ProtoMessage() {} + +func (x *NodeSystemInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[60] + 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 NodeSystemInfo.ProtoReflect.Descriptor instead. +func (*NodeSystemInfo) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{60} +} + +func (x *NodeSystemInfo) GetMachineId() string { + if x != nil { + return x.MachineId + } + return "" +} + +func (x *NodeSystemInfo) GetSystemUuid() string { + if x != nil { + return x.SystemUuid + } + return "" +} + +func (x *NodeSystemInfo) GetBootId() string { + if x != nil { + return x.BootId + } + return "" +} + +func (x *NodeSystemInfo) GetKernelVersion() string { + if x != nil { + return x.KernelVersion + } + return "" +} + +func (x *NodeSystemInfo) GetOsImage() string { + if x != nil { + return x.OsImage + } + return "" +} + +func (x *NodeSystemInfo) GetContainerRuntimeVersion() string { + if x != nil { + return x.ContainerRuntimeVersion + } + return "" +} + +func (x *NodeSystemInfo) GetKubeletVersion() string { + if x != nil { + return x.KubeletVersion + } + return "" +} + +func (x *NodeSystemInfo) GetKubeProxyVersion() string { + if x != nil { + return x.KubeProxyVersion + } + return "" +} + +func (x *NodeSystemInfo) GetOperatingSystem() string { + if x != nil { + return x.OperatingSystem + } + return "" +} + +func (x *NodeSystemInfo) GetArchitecture() string { + if x != nil { + return x.Architecture + } + return "" +} + +// NodeImage represents a container image on the node +type NodeImage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Names []string `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"` // Image names/tags + SizeBytes int64 `protobuf:"varint,2,opt,name=size_bytes,json=sizeBytes,proto3" json:"size_bytes,omitempty"` // Image size in bytes +} + +func (x *NodeImage) Reset() { + *x = NodeImage{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeImage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeImage) ProtoMessage() {} + +func (x *NodeImage) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[61] + 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 NodeImage.ProtoReflect.Descriptor instead. +func (*NodeImage) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{61} +} + +func (x *NodeImage) GetNames() []string { + if x != nil { + return x.Names + } + return nil +} + +func (x *NodeImage) GetSizeBytes() int64 { + if x != nil { + return x.SizeBytes + } + return 0 +} + +// TopologySelector represents topology requirements for storage +type TopologySelector struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MatchLabelExpressions []*TopologySelectorTerm `protobuf:"bytes,1,rep,name=match_label_expressions,json=matchLabelExpressions,proto3" json:"match_label_expressions,omitempty"` // Topology selector terms +} + +func (x *TopologySelector) Reset() { + *x = TopologySelector{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TopologySelector) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TopologySelector) ProtoMessage() {} + +func (x *TopologySelector) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[62] + 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 TopologySelector.ProtoReflect.Descriptor instead. +func (*TopologySelector) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{62} +} + +func (x *TopologySelector) GetMatchLabelExpressions() []*TopologySelectorTerm { + if x != nil { + return x.MatchLabelExpressions + } + return nil +} + +// TopologySelectorTerm represents a topology selector term +type TopologySelectorTerm struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MatchLabels map[string]string `protobuf:"bytes,1,rep,name=match_labels,json=matchLabels,proto3" json:"match_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Labels that must match +} + +func (x *TopologySelectorTerm) Reset() { + *x = TopologySelectorTerm{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TopologySelectorTerm) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TopologySelectorTerm) ProtoMessage() {} + +func (x *TopologySelectorTerm) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[63] + 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 TopologySelectorTerm.ProtoReflect.Descriptor instead. +func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{63} +} + +func (x *TopologySelectorTerm) GetMatchLabels() map[string]string { + if x != nil { + return x.MatchLabels + } + return nil +} + +// TolerationInfo represents a simplified pod toleration for DaemonSets +type TolerationInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // Toleration key (optional for exists/all) + Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator,omitempty"` // "Equal", "Exists" + Value string `protobuf:"bytes,3,opt,name=value,proto3" json:"value,omitempty"` // Value to match (for Equal operator) + Effect string `protobuf:"bytes,4,opt,name=effect,proto3" json:"effect,omitempty"` // "NoSchedule", "PreferNoSchedule", "NoExecute", or "" + TolerationSeconds int64 `protobuf:"varint,5,opt,name=toleration_seconds,json=tolerationSeconds,proto3" json:"toleration_seconds,omitempty"` // Toleration period for NoExecute (optional) +} + +func (x *TolerationInfo) Reset() { + *x = TolerationInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TolerationInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TolerationInfo) ProtoMessage() {} + +func (x *TolerationInfo) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[64] + 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 TolerationInfo.ProtoReflect.Descriptor instead. +func (*TolerationInfo) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{64} +} + +func (x *TolerationInfo) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *TolerationInfo) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *TolerationInfo) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +func (x *TolerationInfo) GetEffect() string { + if x != nil { + return x.Effect + } + return "" +} + +func (x *TolerationInfo) GetTolerationSeconds() int64 { + if x != nil { + return x.TolerationSeconds + } + return 0 +} + +// NodeSelector represents node selector requirements +type NodeSelector struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Terms []*NodeSelectorTerm `protobuf:"bytes,1,rep,name=terms,proto3" json:"terms,omitempty"` // Node selector terms +} + +func (x *NodeSelector) Reset() { + *x = NodeSelector{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeSelector) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeSelector) ProtoMessage() {} + +func (x *NodeSelector) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[65] + 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 NodeSelector.ProtoReflect.Descriptor instead. +func (*NodeSelector) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{65} +} + +func (x *NodeSelector) GetTerms() []*NodeSelectorTerm { + if x != nil { + return x.Terms + } + return nil +} + +// NodeSelectorTerm represents a node selector term +type NodeSelectorTerm struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MatchExpressions []*NodeSelectorRequirement `protobuf:"bytes,1,rep,name=match_expressions,json=matchExpressions,proto3" json:"match_expressions,omitempty"` // Match expressions + MatchFields []*NodeSelectorRequirement `protobuf:"bytes,2,rep,name=match_fields,json=matchFields,proto3" json:"match_fields,omitempty"` // Match fields +} + +func (x *NodeSelectorTerm) Reset() { + *x = NodeSelectorTerm{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeSelectorTerm) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeSelectorTerm) ProtoMessage() {} + +func (x *NodeSelectorTerm) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[66] + 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 NodeSelectorTerm.ProtoReflect.Descriptor instead. +func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{66} +} + +func (x *NodeSelectorTerm) GetMatchExpressions() []*NodeSelectorRequirement { + if x != nil { + return x.MatchExpressions + } + return nil +} + +func (x *NodeSelectorTerm) GetMatchFields() []*NodeSelectorRequirement { + if x != nil { + return x.MatchFields + } + return nil +} + +// NodeSelectorRequirement represents a node selector requirement +type NodeSelectorRequirement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // Selector key + Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator,omitempty"` // "In", "NotIn", "Exists", "DoesNotExist", "Gt", "Lt" + Values []string `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty"` // Values to match +} + +func (x *NodeSelectorRequirement) Reset() { + *x = NodeSelectorRequirement{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeSelectorRequirement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeSelectorRequirement) ProtoMessage() {} + +func (x *NodeSelectorRequirement) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[67] + 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 NodeSelectorRequirement.ProtoReflect.Descriptor instead. +func (*NodeSelectorRequirement) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{67} +} + +func (x *NodeSelectorRequirement) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *NodeSelectorRequirement) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *NodeSelectorRequirement) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +// HPADetails contains detailed HorizontalPodAutoscaler information for drill-down +type HPADetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ScaleTargetRef *ScaleTargetRef `protobuf:"bytes,1,opt,name=scale_target_ref,json=scaleTargetRef,proto3" json:"scale_target_ref,omitempty"` // Target reference for scaling + Metrics []*HPAMetric `protobuf:"bytes,2,rep,name=metrics,proto3" json:"metrics,omitempty"` // Scaling metrics configuration + Conditions []*HPACondition `protobuf:"bytes,3,rep,name=conditions,proto3" json:"conditions,omitempty"` // HPA conditions for debugging + Behavior *HPABehavior `protobuf:"bytes,4,opt,name=behavior,proto3" json:"behavior,omitempty"` // Scaling behavior policies (optional) + CurrentMetrics []*HPACurrentMetric `protobuf:"bytes,5,rep,name=current_metrics,json=currentMetrics,proto3" json:"current_metrics,omitempty"` // Current metrics values +} + +func (x *HPADetails) Reset() { + *x = HPADetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPADetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPADetails) ProtoMessage() {} + +func (x *HPADetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[68] + 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 HPADetails.ProtoReflect.Descriptor instead. +func (*HPADetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{68} +} + +func (x *HPADetails) GetScaleTargetRef() *ScaleTargetRef { + if x != nil { + return x.ScaleTargetRef + } + return nil +} + +func (x *HPADetails) GetMetrics() []*HPAMetric { + if x != nil { + return x.Metrics + } + return nil +} + +func (x *HPADetails) GetConditions() []*HPACondition { + if x != nil { + return x.Conditions + } + return nil +} + +func (x *HPADetails) GetBehavior() *HPABehavior { + if x != nil { + return x.Behavior + } + return nil +} + +func (x *HPADetails) GetCurrentMetrics() []*HPACurrentMetric { + if x != nil { + return x.CurrentMetrics + } + return nil +} + +// ScaleTargetRef represents the target resource for HPA scaling +type ScaleTargetRef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` // Target resource kind (e.g., "Deployment") + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Target resource name + ApiVersion string `protobuf:"bytes,3,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` // API version of the target resource +} + +func (x *ScaleTargetRef) Reset() { + *x = ScaleTargetRef{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScaleTargetRef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScaleTargetRef) ProtoMessage() {} + +func (x *ScaleTargetRef) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[69] + 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 ScaleTargetRef.ProtoReflect.Descriptor instead. +func (*ScaleTargetRef) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{69} +} + +func (x *ScaleTargetRef) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *ScaleTargetRef) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *ScaleTargetRef) GetApiVersion() string { + if x != nil { + return x.ApiVersion + } + return "" +} + +// HPAMetric represents an HPA metric configuration +type HPAMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Metric type: "Resource", "Pods", "Object", "External" + Resource *HPAResourceMetric `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"` // Resource metric (if type is Resource) + Pods *HPAPodsMetric `protobuf:"bytes,3,opt,name=pods,proto3" json:"pods,omitempty"` // Pods metric (if type is Pods) + Object *HPAObjectMetric `protobuf:"bytes,4,opt,name=object,proto3" json:"object,omitempty"` // Object metric (if type is Object) + External *HPAExternalMetric `protobuf:"bytes,5,opt,name=external,proto3" json:"external,omitempty"` // External metric (if type is External) +} + +func (x *HPAMetric) Reset() { + *x = HPAMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPAMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPAMetric) ProtoMessage() {} + +func (x *HPAMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[70] + 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 HPAMetric.ProtoReflect.Descriptor instead. +func (*HPAMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{70} +} + +func (x *HPAMetric) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *HPAMetric) GetResource() *HPAResourceMetric { + if x != nil { + return x.Resource + } + return nil +} + +func (x *HPAMetric) GetPods() *HPAPodsMetric { + if x != nil { + return x.Pods + } + return nil +} + +func (x *HPAMetric) GetObject() *HPAObjectMetric { + if x != nil { + return x.Object + } + return nil +} + +func (x *HPAMetric) GetExternal() *HPAExternalMetric { + if x != nil { + return x.External + } + return nil +} + +// HPAResourceMetric represents a resource-based metric +type HPAResourceMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Resource name: "cpu", "memory" + TargetType string `protobuf:"bytes,2,opt,name=target_type,json=targetType,proto3" json:"target_type,omitempty"` // Target type: "Utilization", "AverageValue" + TargetValue string `protobuf:"bytes,3,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` // Target value (e.g., "80" for 80%, "100m" for 100 millicores) +} + +func (x *HPAResourceMetric) Reset() { + *x = HPAResourceMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPAResourceMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPAResourceMetric) ProtoMessage() {} + +func (x *HPAResourceMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[71] + 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 HPAResourceMetric.ProtoReflect.Descriptor instead. +func (*HPAResourceMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{71} +} + +func (x *HPAResourceMetric) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *HPAResourceMetric) GetTargetType() string { + if x != nil { + return x.TargetType + } + return "" +} + +func (x *HPAResourceMetric) GetTargetValue() string { + if x != nil { + return x.TargetValue + } + return "" +} + +// HPAPodsMetric represents a pods-based metric +type HPAPodsMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Metric *HPAMetricSelector `protobuf:"bytes,1,opt,name=metric,proto3" json:"metric,omitempty"` // Metric selector + TargetType string `protobuf:"bytes,2,opt,name=target_type,json=targetType,proto3" json:"target_type,omitempty"` // Target type: "AverageValue" + TargetValue string `protobuf:"bytes,3,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` // Target average value per pod +} + +func (x *HPAPodsMetric) Reset() { + *x = HPAPodsMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPAPodsMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPAPodsMetric) ProtoMessage() {} + +func (x *HPAPodsMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[72] + 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 HPAPodsMetric.ProtoReflect.Descriptor instead. +func (*HPAPodsMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{72} +} + +func (x *HPAPodsMetric) GetMetric() *HPAMetricSelector { + if x != nil { + return x.Metric + } + return nil +} + +func (x *HPAPodsMetric) GetTargetType() string { + if x != nil { + return x.TargetType + } + return "" +} + +func (x *HPAPodsMetric) GetTargetValue() string { + if x != nil { + return x.TargetValue + } + return "" +} + +// HPAObjectMetric represents an object-based metric +type HPAObjectMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DescribedObject *HPAObjectReference `protobuf:"bytes,1,opt,name=described_object,json=describedObject,proto3" json:"described_object,omitempty"` // Object reference + Metric *HPAMetricSelector `protobuf:"bytes,2,opt,name=metric,proto3" json:"metric,omitempty"` // Metric selector + TargetType string `protobuf:"bytes,3,opt,name=target_type,json=targetType,proto3" json:"target_type,omitempty"` // Target type: "Value", "AverageValue" + TargetValue string `protobuf:"bytes,4,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` // Target value +} + +func (x *HPAObjectMetric) Reset() { + *x = HPAObjectMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPAObjectMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPAObjectMetric) ProtoMessage() {} + +func (x *HPAObjectMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[73] + 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 HPAObjectMetric.ProtoReflect.Descriptor instead. +func (*HPAObjectMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{73} +} + +func (x *HPAObjectMetric) GetDescribedObject() *HPAObjectReference { + if x != nil { + return x.DescribedObject + } + return nil +} + +func (x *HPAObjectMetric) GetMetric() *HPAMetricSelector { + if x != nil { + return x.Metric + } + return nil +} + +func (x *HPAObjectMetric) GetTargetType() string { + if x != nil { + return x.TargetType + } + return "" +} + +func (x *HPAObjectMetric) GetTargetValue() string { + if x != nil { + return x.TargetValue + } + return "" +} + +// HPAExternalMetric represents an external metric +type HPAExternalMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Metric *HPAMetricSelector `protobuf:"bytes,1,opt,name=metric,proto3" json:"metric,omitempty"` // Metric selector + TargetType string `protobuf:"bytes,2,opt,name=target_type,json=targetType,proto3" json:"target_type,omitempty"` // Target type: "Value", "AverageValue" + TargetValue string `protobuf:"bytes,3,opt,name=target_value,json=targetValue,proto3" json:"target_value,omitempty"` // Target value +} + +func (x *HPAExternalMetric) Reset() { + *x = HPAExternalMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPAExternalMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPAExternalMetric) ProtoMessage() {} + +func (x *HPAExternalMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[74] + 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 HPAExternalMetric.ProtoReflect.Descriptor instead. +func (*HPAExternalMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{74} +} + +func (x *HPAExternalMetric) GetMetric() *HPAMetricSelector { + if x != nil { + return x.Metric + } + return nil +} + +func (x *HPAExternalMetric) GetTargetType() string { + if x != nil { + return x.TargetType + } + return "" +} + +func (x *HPAExternalMetric) GetTargetValue() string { + if x != nil { + return x.TargetValue + } + return "" +} + +// HPAMetricSelector represents a metric selector +type HPAMetricSelector struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Metric name + Selector map[string]string `protobuf:"bytes,2,rep,name=selector,proto3" json:"selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Label selector (optional) +} + +func (x *HPAMetricSelector) Reset() { + *x = HPAMetricSelector{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPAMetricSelector) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPAMetricSelector) ProtoMessage() {} + +func (x *HPAMetricSelector) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[75] + 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 HPAMetricSelector.ProtoReflect.Descriptor instead. +func (*HPAMetricSelector) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{75} +} + +func (x *HPAMetricSelector) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *HPAMetricSelector) GetSelector() map[string]string { + if x != nil { + return x.Selector + } + return nil +} + +// HPAObjectReference represents an object reference for metrics +type HPAObjectReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` // Object kind + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Object name + ApiVersion string `protobuf:"bytes,3,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` // API version + Namespace string `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` // Object namespace (optional) +} + +func (x *HPAObjectReference) Reset() { + *x = HPAObjectReference{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPAObjectReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPAObjectReference) ProtoMessage() {} + +func (x *HPAObjectReference) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[76] + 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 HPAObjectReference.ProtoReflect.Descriptor instead. +func (*HPAObjectReference) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{76} +} + +func (x *HPAObjectReference) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *HPAObjectReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *HPAObjectReference) GetApiVersion() string { + if x != nil { + return x.ApiVersion + } + return "" +} + +func (x *HPAObjectReference) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +// HPACurrentMetric represents current metric values +type HPACurrentMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Metric type: "Resource", "Pods", "Object", "External" + Resource *HPACurrentResourceMetric `protobuf:"bytes,2,opt,name=resource,proto3" json:"resource,omitempty"` // Current resource metric + Pods *HPACurrentPodsMetric `protobuf:"bytes,3,opt,name=pods,proto3" json:"pods,omitempty"` // Current pods metric + Object *HPACurrentObjectMetric `protobuf:"bytes,4,opt,name=object,proto3" json:"object,omitempty"` // Current object metric + External *HPACurrentExternalMetric `protobuf:"bytes,5,opt,name=external,proto3" json:"external,omitempty"` // Current external metric +} + +func (x *HPACurrentMetric) Reset() { + *x = HPACurrentMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPACurrentMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPACurrentMetric) ProtoMessage() {} + +func (x *HPACurrentMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[77] + 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 HPACurrentMetric.ProtoReflect.Descriptor instead. +func (*HPACurrentMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{77} +} + +func (x *HPACurrentMetric) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *HPACurrentMetric) GetResource() *HPACurrentResourceMetric { + if x != nil { + return x.Resource + } + return nil +} + +func (x *HPACurrentMetric) GetPods() *HPACurrentPodsMetric { + if x != nil { + return x.Pods + } + return nil +} + +func (x *HPACurrentMetric) GetObject() *HPACurrentObjectMetric { + if x != nil { + return x.Object + } + return nil +} + +func (x *HPACurrentMetric) GetExternal() *HPACurrentExternalMetric { + if x != nil { + return x.External + } + return nil +} + +// HPACurrentResourceMetric represents current resource metric values +type HPACurrentResourceMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Resource name + CurrentUtilization string `protobuf:"bytes,2,opt,name=current_utilization,json=currentUtilization,proto3" json:"current_utilization,omitempty"` // Current utilization percentage (optional) + CurrentAverageValue string `protobuf:"bytes,3,opt,name=current_average_value,json=currentAverageValue,proto3" json:"current_average_value,omitempty"` // Current average value (optional) +} + +func (x *HPACurrentResourceMetric) Reset() { + *x = HPACurrentResourceMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPACurrentResourceMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPACurrentResourceMetric) ProtoMessage() {} + +func (x *HPACurrentResourceMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[78] + 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 HPACurrentResourceMetric.ProtoReflect.Descriptor instead. +func (*HPACurrentResourceMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{78} +} + +func (x *HPACurrentResourceMetric) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *HPACurrentResourceMetric) GetCurrentUtilization() string { + if x != nil { + return x.CurrentUtilization + } + return "" +} + +func (x *HPACurrentResourceMetric) GetCurrentAverageValue() string { + if x != nil { + return x.CurrentAverageValue + } + return "" +} + +// HPACurrentPodsMetric represents current pods metric values +type HPACurrentPodsMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Metric *HPAMetricSelector `protobuf:"bytes,1,opt,name=metric,proto3" json:"metric,omitempty"` // Metric selector + CurrentAverageValue string `protobuf:"bytes,2,opt,name=current_average_value,json=currentAverageValue,proto3" json:"current_average_value,omitempty"` // Current average value per pod +} + +func (x *HPACurrentPodsMetric) Reset() { + *x = HPACurrentPodsMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPACurrentPodsMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPACurrentPodsMetric) ProtoMessage() {} + +func (x *HPACurrentPodsMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[79] + 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 HPACurrentPodsMetric.ProtoReflect.Descriptor instead. +func (*HPACurrentPodsMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{79} +} + +func (x *HPACurrentPodsMetric) GetMetric() *HPAMetricSelector { + if x != nil { + return x.Metric + } + return nil +} + +func (x *HPACurrentPodsMetric) GetCurrentAverageValue() string { + if x != nil { + return x.CurrentAverageValue + } + return "" +} + +// HPACurrentObjectMetric represents current object metric values +type HPACurrentObjectMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DescribedObject *HPAObjectReference `protobuf:"bytes,1,opt,name=described_object,json=describedObject,proto3" json:"described_object,omitempty"` // Object reference + Metric *HPAMetricSelector `protobuf:"bytes,2,opt,name=metric,proto3" json:"metric,omitempty"` // Metric selector + CurrentValue string `protobuf:"bytes,3,opt,name=current_value,json=currentValue,proto3" json:"current_value,omitempty"` // Current value +} + +func (x *HPACurrentObjectMetric) Reset() { + *x = HPACurrentObjectMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPACurrentObjectMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPACurrentObjectMetric) ProtoMessage() {} + +func (x *HPACurrentObjectMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[80] + 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 HPACurrentObjectMetric.ProtoReflect.Descriptor instead. +func (*HPACurrentObjectMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{80} +} + +func (x *HPACurrentObjectMetric) GetDescribedObject() *HPAObjectReference { + if x != nil { + return x.DescribedObject + } + return nil +} + +func (x *HPACurrentObjectMetric) GetMetric() *HPAMetricSelector { + if x != nil { + return x.Metric + } + return nil +} + +func (x *HPACurrentObjectMetric) GetCurrentValue() string { + if x != nil { + return x.CurrentValue + } + return "" +} + +// HPACurrentExternalMetric represents current external metric values +type HPACurrentExternalMetric struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Metric *HPAMetricSelector `protobuf:"bytes,1,opt,name=metric,proto3" json:"metric,omitempty"` // Metric selector + CurrentValue string `protobuf:"bytes,2,opt,name=current_value,json=currentValue,proto3" json:"current_value,omitempty"` // Current value + CurrentAverageValue string `protobuf:"bytes,3,opt,name=current_average_value,json=currentAverageValue,proto3" json:"current_average_value,omitempty"` // Current average value (optional) +} + +func (x *HPACurrentExternalMetric) Reset() { + *x = HPACurrentExternalMetric{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPACurrentExternalMetric) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPACurrentExternalMetric) ProtoMessage() {} + +func (x *HPACurrentExternalMetric) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[81] + 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 HPACurrentExternalMetric.ProtoReflect.Descriptor instead. +func (*HPACurrentExternalMetric) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{81} +} + +func (x *HPACurrentExternalMetric) GetMetric() *HPAMetricSelector { + if x != nil { + return x.Metric + } + return nil +} + +func (x *HPACurrentExternalMetric) GetCurrentValue() string { + if x != nil { + return x.CurrentValue + } + return "" +} + +func (x *HPACurrentExternalMetric) GetCurrentAverageValue() string { + if x != nil { + return x.CurrentAverageValue + } + return "" +} + +// HPACondition represents an HPA condition +type HPACondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Condition type: "AbleToScale", "ScalingActive", "ScalingLimited" + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Condition status: "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastTransitionTime int64 `protobuf:"varint,5,opt,name=last_transition_time,json=lastTransitionTime,proto3" json:"last_transition_time,omitempty"` // Last transition time +} + +func (x *HPACondition) Reset() { + *x = HPACondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPACondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPACondition) ProtoMessage() {} + +func (x *HPACondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[82] + 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 HPACondition.ProtoReflect.Descriptor instead. +func (*HPACondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{82} +} + +func (x *HPACondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *HPACondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *HPACondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *HPACondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *HPACondition) GetLastTransitionTime() int64 { + if x != nil { + return x.LastTransitionTime + } + return 0 +} + +// HPABehavior represents HPA scaling behavior policies +type HPABehavior struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ScaleUp *HPAScalingRules `protobuf:"bytes,1,opt,name=scale_up,json=scaleUp,proto3" json:"scale_up,omitempty"` // Scale up behavior + ScaleDown *HPAScalingRules `protobuf:"bytes,2,opt,name=scale_down,json=scaleDown,proto3" json:"scale_down,omitempty"` // Scale down behavior +} + +func (x *HPABehavior) Reset() { + *x = HPABehavior{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPABehavior) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPABehavior) ProtoMessage() {} + +func (x *HPABehavior) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[83] + 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 HPABehavior.ProtoReflect.Descriptor instead. +func (*HPABehavior) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{83} +} + +func (x *HPABehavior) GetScaleUp() *HPAScalingRules { + if x != nil { + return x.ScaleUp + } + return nil +} + +func (x *HPABehavior) GetScaleDown() *HPAScalingRules { + if x != nil { + return x.ScaleDown + } + return nil +} + +// HPAScalingRules represents scaling behavior rules +type HPAScalingRules struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + StabilizationWindowSeconds int32 `protobuf:"varint,1,opt,name=stabilization_window_seconds,json=stabilizationWindowSeconds,proto3" json:"stabilization_window_seconds,omitempty"` // Stabilization window + SelectPolicy string `protobuf:"bytes,2,opt,name=select_policy,json=selectPolicy,proto3" json:"select_policy,omitempty"` // Policy selection: "Max", "Min", "Disabled" + Policies []*HPAScalingPolicy `protobuf:"bytes,3,rep,name=policies,proto3" json:"policies,omitempty"` // Scaling policies +} + +func (x *HPAScalingRules) Reset() { + *x = HPAScalingRules{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPAScalingRules) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPAScalingRules) ProtoMessage() {} + +func (x *HPAScalingRules) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[84] + 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 HPAScalingRules.ProtoReflect.Descriptor instead. +func (*HPAScalingRules) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{84} +} + +func (x *HPAScalingRules) GetStabilizationWindowSeconds() int32 { + if x != nil { + return x.StabilizationWindowSeconds + } + return 0 +} + +func (x *HPAScalingRules) GetSelectPolicy() string { + if x != nil { + return x.SelectPolicy + } + return "" +} + +func (x *HPAScalingRules) GetPolicies() []*HPAScalingPolicy { + if x != nil { + return x.Policies + } + return nil +} + +// HPAScalingPolicy represents a scaling policy +type HPAScalingPolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Policy type: "Pods", "Percent" + Value int32 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` // Policy value + PeriodSeconds int32 `protobuf:"varint,3,opt,name=period_seconds,json=periodSeconds,proto3" json:"period_seconds,omitempty"` // Period in seconds +} + +func (x *HPAScalingPolicy) Reset() { + *x = HPAScalingPolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HPAScalingPolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HPAScalingPolicy) ProtoMessage() {} + +func (x *HPAScalingPolicy) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[85] + 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 HPAScalingPolicy.ProtoReflect.Descriptor instead. +func (*HPAScalingPolicy) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{85} +} + +func (x *HPAScalingPolicy) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *HPAScalingPolicy) GetValue() int32 { + if x != nil { + return x.Value + } + return 0 +} + +func (x *HPAScalingPolicy) GetPeriodSeconds() int32 { + if x != nil { + return x.PeriodSeconds + } + return 0 +} + +// VPADetails contains detailed VerticalPodAutoscaler information for drill-down +type VPADetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TargetRef *VPATargetRef `protobuf:"bytes,1,opt,name=target_ref,json=targetRef,proto3" json:"target_ref,omitempty"` // Target reference for VPA + UpdatePolicy *VPAUpdatePolicy `protobuf:"bytes,2,opt,name=update_policy,json=updatePolicy,proto3" json:"update_policy,omitempty"` // Update policy configuration + ResourcePolicy *VPAResourcePolicy `protobuf:"bytes,3,opt,name=resource_policy,json=resourcePolicy,proto3" json:"resource_policy,omitempty"` // Resource policy configuration + Recommendation *VPARecommendation `protobuf:"bytes,4,opt,name=recommendation,proto3" json:"recommendation,omitempty"` // Current recommendations + Conditions []*VPACondition `protobuf:"bytes,5,rep,name=conditions,proto3" json:"conditions,omitempty"` // VPA conditions for debugging +} + +func (x *VPADetails) Reset() { + *x = VPADetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPADetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPADetails) ProtoMessage() {} + +func (x *VPADetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[86] + 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 VPADetails.ProtoReflect.Descriptor instead. +func (*VPADetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{86} +} + +func (x *VPADetails) GetTargetRef() *VPATargetRef { + if x != nil { + return x.TargetRef + } + return nil +} + +func (x *VPADetails) GetUpdatePolicy() *VPAUpdatePolicy { + if x != nil { + return x.UpdatePolicy + } + return nil +} + +func (x *VPADetails) GetResourcePolicy() *VPAResourcePolicy { + if x != nil { + return x.ResourcePolicy + } + return nil +} + +func (x *VPADetails) GetRecommendation() *VPARecommendation { + if x != nil { + return x.Recommendation + } + return nil +} + +func (x *VPADetails) GetConditions() []*VPACondition { + if x != nil { + return x.Conditions + } + return nil +} + +// VPATargetRef represents the target resource for VPA +type VPATargetRef struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` // Target resource kind (e.g., "Deployment") + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Target resource name + ApiVersion string `protobuf:"bytes,3,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` // API version of the target resource +} + +func (x *VPATargetRef) Reset() { + *x = VPATargetRef{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPATargetRef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPATargetRef) ProtoMessage() {} + +func (x *VPATargetRef) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[87] + 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 VPATargetRef.ProtoReflect.Descriptor instead. +func (*VPATargetRef) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{87} +} + +func (x *VPATargetRef) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *VPATargetRef) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *VPATargetRef) GetApiVersion() string { + if x != nil { + return x.ApiVersion + } + return "" +} + +// VPAUpdatePolicy represents VPA update policy +type VPAUpdatePolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UpdateMode string `protobuf:"bytes,1,opt,name=update_mode,json=updateMode,proto3" json:"update_mode,omitempty"` // Update mode: "Off", "Initial", "Recreation", "Auto" + MinReplicas int32 `protobuf:"varint,2,opt,name=min_replicas,json=minReplicas,proto3" json:"min_replicas,omitempty"` // Minimum replicas during update (optional) +} + +func (x *VPAUpdatePolicy) Reset() { + *x = VPAUpdatePolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPAUpdatePolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPAUpdatePolicy) ProtoMessage() {} + +func (x *VPAUpdatePolicy) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[88] + 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 VPAUpdatePolicy.ProtoReflect.Descriptor instead. +func (*VPAUpdatePolicy) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{88} +} + +func (x *VPAUpdatePolicy) GetUpdateMode() string { + if x != nil { + return x.UpdateMode + } + return "" +} + +func (x *VPAUpdatePolicy) GetMinReplicas() int32 { + if x != nil { + return x.MinReplicas + } + return 0 +} + +// VPAResourcePolicy represents VPA resource policy +type VPAResourcePolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ContainerPolicies []*VPAContainerResourcePolicy `protobuf:"bytes,1,rep,name=container_policies,json=containerPolicies,proto3" json:"container_policies,omitempty"` // Per-container policies +} + +func (x *VPAResourcePolicy) Reset() { + *x = VPAResourcePolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPAResourcePolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPAResourcePolicy) ProtoMessage() {} + +func (x *VPAResourcePolicy) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[89] + 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 VPAResourcePolicy.ProtoReflect.Descriptor instead. +func (*VPAResourcePolicy) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{89} +} + +func (x *VPAResourcePolicy) GetContainerPolicies() []*VPAContainerResourcePolicy { + if x != nil { + return x.ContainerPolicies + } + return nil +} + +// VPAContainerResourcePolicy represents VPA policy for a container +type VPAContainerResourcePolicy struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ContainerName string `protobuf:"bytes,1,opt,name=container_name,json=containerName,proto3" json:"container_name,omitempty"` // Container name + Mode string `protobuf:"bytes,2,opt,name=mode,proto3" json:"mode,omitempty"` // Mode: "Auto", "Off" + MinAllowed map[string]string `protobuf:"bytes,3,rep,name=min_allowed,json=minAllowed,proto3" json:"min_allowed,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Minimum allowed resources + MaxAllowed map[string]string `protobuf:"bytes,4,rep,name=max_allowed,json=maxAllowed,proto3" json:"max_allowed,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Maximum allowed resources + ControlledResources []string `protobuf:"bytes,5,rep,name=controlled_resources,json=controlledResources,proto3" json:"controlled_resources,omitempty"` // Controlled resource types + ControlledValues string `protobuf:"bytes,6,opt,name=controlled_values,json=controlledValues,proto3" json:"controlled_values,omitempty"` // Controlled values: "RequestsAndLimits", "RequestsOnly" +} + +func (x *VPAContainerResourcePolicy) Reset() { + *x = VPAContainerResourcePolicy{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPAContainerResourcePolicy) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPAContainerResourcePolicy) ProtoMessage() {} + +func (x *VPAContainerResourcePolicy) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[90] + 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 VPAContainerResourcePolicy.ProtoReflect.Descriptor instead. +func (*VPAContainerResourcePolicy) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{90} +} + +func (x *VPAContainerResourcePolicy) GetContainerName() string { + if x != nil { + return x.ContainerName + } + return "" +} + +func (x *VPAContainerResourcePolicy) GetMode() string { + if x != nil { + return x.Mode + } + return "" +} + +func (x *VPAContainerResourcePolicy) GetMinAllowed() map[string]string { + if x != nil { + return x.MinAllowed + } + return nil +} + +func (x *VPAContainerResourcePolicy) GetMaxAllowed() map[string]string { + if x != nil { + return x.MaxAllowed + } + return nil +} + +func (x *VPAContainerResourcePolicy) GetControlledResources() []string { + if x != nil { + return x.ControlledResources + } + return nil +} + +func (x *VPAContainerResourcePolicy) GetControlledValues() string { + if x != nil { + return x.ControlledValues + } + return "" +} + +// VPARecommendation represents VPA recommendations +type VPARecommendation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ContainerRecommendations []*VPAContainerRecommendation `protobuf:"bytes,1,rep,name=container_recommendations,json=containerRecommendations,proto3" json:"container_recommendations,omitempty"` // Per-container recommendations +} + +func (x *VPARecommendation) Reset() { + *x = VPARecommendation{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[91] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPARecommendation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPARecommendation) ProtoMessage() {} + +func (x *VPARecommendation) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[91] + 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 VPARecommendation.ProtoReflect.Descriptor instead. +func (*VPARecommendation) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{91} +} + +func (x *VPARecommendation) GetContainerRecommendations() []*VPAContainerRecommendation { + if x != nil { + return x.ContainerRecommendations + } + return nil +} + +// VPAContainerRecommendation represents VPA recommendation for a container +type VPAContainerRecommendation struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ContainerName string `protobuf:"bytes,1,opt,name=container_name,json=containerName,proto3" json:"container_name,omitempty"` // Container name + Target map[string]string `protobuf:"bytes,2,rep,name=target,proto3" json:"target,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Target recommendations + LowerBound map[string]string `protobuf:"bytes,3,rep,name=lower_bound,json=lowerBound,proto3" json:"lower_bound,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Lower bound recommendations + UpperBound map[string]string `protobuf:"bytes,4,rep,name=upper_bound,json=upperBound,proto3" json:"upper_bound,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Upper bound recommendations + UncappedTarget map[string]string `protobuf:"bytes,5,rep,name=uncapped_target,json=uncappedTarget,proto3" json:"uncapped_target,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Uncapped target recommendations +} + +func (x *VPAContainerRecommendation) Reset() { + *x = VPAContainerRecommendation{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPAContainerRecommendation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPAContainerRecommendation) ProtoMessage() {} + +func (x *VPAContainerRecommendation) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[92] + 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 VPAContainerRecommendation.ProtoReflect.Descriptor instead. +func (*VPAContainerRecommendation) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{92} +} + +func (x *VPAContainerRecommendation) GetContainerName() string { + if x != nil { + return x.ContainerName + } + return "" +} + +func (x *VPAContainerRecommendation) GetTarget() map[string]string { + if x != nil { + return x.Target + } + return nil +} + +func (x *VPAContainerRecommendation) GetLowerBound() map[string]string { + if x != nil { + return x.LowerBound + } + return nil +} + +func (x *VPAContainerRecommendation) GetUpperBound() map[string]string { + if x != nil { + return x.UpperBound + } + return nil +} + +func (x *VPAContainerRecommendation) GetUncappedTarget() map[string]string { + if x != nil { + return x.UncappedTarget + } + return nil +} + +// VPACondition represents a VPA condition +type VPACondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Condition type: "RecommendationProvided", "LowConfidence", etc. + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Condition status: "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastTransitionTime int64 `protobuf:"varint,5,opt,name=last_transition_time,json=lastTransitionTime,proto3" json:"last_transition_time,omitempty"` // Last transition time +} + +func (x *VPACondition) Reset() { + *x = VPACondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[93] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VPACondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VPACondition) ProtoMessage() {} + +func (x *VPACondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[93] + 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 VPACondition.ProtoReflect.Descriptor instead. +func (*VPACondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{93} +} + +func (x *VPACondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *VPACondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *VPACondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *VPACondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *VPACondition) GetLastTransitionTime() int64 { + if x != nil { + return x.LastTransitionTime + } + return 0 +} + +// LimitRangeDetails contains detailed LimitRange information for drill-down +type LimitRangeDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Limits []*LimitRangeItem `protobuf:"bytes,1,rep,name=limits,proto3" json:"limits,omitempty"` // Limit range items +} + +func (x *LimitRangeDetails) Reset() { + *x = LimitRangeDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[94] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LimitRangeDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LimitRangeDetails) ProtoMessage() {} + +func (x *LimitRangeDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[94] + 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 LimitRangeDetails.ProtoReflect.Descriptor instead. +func (*LimitRangeDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{94} +} + +func (x *LimitRangeDetails) GetLimits() []*LimitRangeItem { + if x != nil { + return x.Limits + } + return nil +} + +// LimitRangeItem represents a single limit range item +type LimitRangeItem struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Type: "Container", "Pod", "PersistentVolumeClaim" + DefaultLimits map[string]string `protobuf:"bytes,2,rep,name=default_limits,json=defaultLimits,proto3" json:"default_limits,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Default limits + DefaultRequest map[string]string `protobuf:"bytes,3,rep,name=default_request,json=defaultRequest,proto3" json:"default_request,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Default requests + Max map[string]string `protobuf:"bytes,4,rep,name=max,proto3" json:"max,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Maximum limits + Min map[string]string `protobuf:"bytes,5,rep,name=min,proto3" json:"min,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Minimum limits + MaxLimitRequestRatio map[string]string `protobuf:"bytes,6,rep,name=max_limit_request_ratio,json=maxLimitRequestRatio,proto3" json:"max_limit_request_ratio,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Max limit/request ratio +} + +func (x *LimitRangeItem) Reset() { + *x = LimitRangeItem{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[95] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LimitRangeItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LimitRangeItem) ProtoMessage() {} + +func (x *LimitRangeItem) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[95] + 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 LimitRangeItem.ProtoReflect.Descriptor instead. +func (*LimitRangeItem) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{95} +} + +func (x *LimitRangeItem) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *LimitRangeItem) GetDefaultLimits() map[string]string { + if x != nil { + return x.DefaultLimits + } + return nil +} + +func (x *LimitRangeItem) GetDefaultRequest() map[string]string { + if x != nil { + return x.DefaultRequest + } + return nil +} + +func (x *LimitRangeItem) GetMax() map[string]string { + if x != nil { + return x.Max + } + return nil +} + +func (x *LimitRangeItem) GetMin() map[string]string { + if x != nil { + return x.Min + } + return nil +} + +func (x *LimitRangeItem) GetMaxLimitRequestRatio() map[string]string { + if x != nil { + return x.MaxLimitRequestRatio + } + return nil +} + +// ServiceAccountDetails contains detailed ServiceAccount information for drill-down +type ServiceAccountDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AutomountServiceAccountToken bool `protobuf:"varint,1,opt,name=automount_service_account_token,json=automountServiceAccountToken,proto3" json:"automount_service_account_token,omitempty"` // Whether to automatically mount service account token + Secrets []string `protobuf:"bytes,2,rep,name=secrets,proto3" json:"secrets,omitempty"` // Names of secrets referenced by this service account + ImagePullSecrets []string `protobuf:"bytes,3,rep,name=image_pull_secrets,json=imagePullSecrets,proto3" json:"image_pull_secrets,omitempty"` // Names of image pull secrets + ResourceVersion string `protobuf:"bytes,4,opt,name=resource_version,json=resourceVersion,proto3" json:"resource_version,omitempty"` +} + +func (x *ServiceAccountDetails) Reset() { + *x = ServiceAccountDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[96] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServiceAccountDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServiceAccountDetails) ProtoMessage() {} + +func (x *ServiceAccountDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[96] + 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 ServiceAccountDetails.ProtoReflect.Descriptor instead. +func (*ServiceAccountDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{96} +} + +func (x *ServiceAccountDetails) GetAutomountServiceAccountToken() bool { + if x != nil { + return x.AutomountServiceAccountToken + } + return false +} + +func (x *ServiceAccountDetails) GetSecrets() []string { + if x != nil { + return x.Secrets + } + return nil +} + +func (x *ServiceAccountDetails) GetImagePullSecrets() []string { + if x != nil { + return x.ImagePullSecrets + } + return nil +} + +func (x *ServiceAccountDetails) GetResourceVersion() string { + if x != nil { + return x.ResourceVersion + } + return "" +} + +// RoleDetails contains detailed Role information for drill-down +type RoleDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Rules []*RoleRule `protobuf:"bytes,1,rep,name=rules,proto3" json:"rules,omitempty"` // Role rules defining permissions +} + +func (x *RoleDetails) Reset() { + *x = RoleDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[97] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleDetails) ProtoMessage() {} + +func (x *RoleDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[97] + 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 RoleDetails.ProtoReflect.Descriptor instead. +func (*RoleDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{97} +} + +func (x *RoleDetails) GetRules() []*RoleRule { + if x != nil { + return x.Rules + } + return nil +} + +// RoleRule represents a single role rule +type RoleRule struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ApiGroups []string `protobuf:"bytes,1,rep,name=api_groups,json=apiGroups,proto3" json:"api_groups,omitempty"` // API groups (e.g., "", "apps", "extensions") + Resources []string `protobuf:"bytes,2,rep,name=resources,proto3" json:"resources,omitempty"` // Resources (e.g., "pods", "deployments") + Verbs []string `protobuf:"bytes,3,rep,name=verbs,proto3" json:"verbs,omitempty"` // Verbs (e.g., "get", "list", "create", "update", "delete") + ResourceNames []string `protobuf:"bytes,4,rep,name=resource_names,json=resourceNames,proto3" json:"resource_names,omitempty"` // Specific resource names (optional) +} + +func (x *RoleRule) Reset() { + *x = RoleRule{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[98] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleRule) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleRule) ProtoMessage() {} + +func (x *RoleRule) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[98] + 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 RoleRule.ProtoReflect.Descriptor instead. +func (*RoleRule) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{98} +} + +func (x *RoleRule) GetApiGroups() []string { + if x != nil { + return x.ApiGroups + } + return nil +} + +func (x *RoleRule) GetResources() []string { + if x != nil { + return x.Resources + } + return nil +} + +func (x *RoleRule) GetVerbs() []string { + if x != nil { + return x.Verbs + } + return nil +} + +func (x *RoleRule) GetResourceNames() []string { + if x != nil { + return x.ResourceNames + } + return nil +} + +// RoleBindingDetails contains detailed RoleBinding information for drill-down +type RoleBindingDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Subjects []*RoleBindingSubject `protobuf:"bytes,1,rep,name=subjects,proto3" json:"subjects,omitempty"` // Subjects that the role is bound to + RoleRef *RoleReference `protobuf:"bytes,2,opt,name=role_ref,json=roleRef,proto3" json:"role_ref,omitempty"` // Reference to the role being bound +} + +func (x *RoleBindingDetails) Reset() { + *x = RoleBindingDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[99] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleBindingDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleBindingDetails) ProtoMessage() {} + +func (x *RoleBindingDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[99] + 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 RoleBindingDetails.ProtoReflect.Descriptor instead. +func (*RoleBindingDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{99} +} + +func (x *RoleBindingDetails) GetSubjects() []*RoleBindingSubject { + if x != nil { + return x.Subjects + } + return nil +} + +func (x *RoleBindingDetails) GetRoleRef() *RoleReference { + if x != nil { + return x.RoleRef + } + return nil +} + +// RoleBindingSubject represents a subject in a role binding +type RoleBindingSubject struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` // Subject kind: "User", "Group", "ServiceAccount" + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Subject name + Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` // Subject namespace (for ServiceAccount) + ApiGroup string `protobuf:"bytes,4,opt,name=api_group,json=apiGroup,proto3" json:"api_group,omitempty"` // API group (optional) +} + +func (x *RoleBindingSubject) Reset() { + *x = RoleBindingSubject{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[100] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleBindingSubject) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleBindingSubject) ProtoMessage() {} + +func (x *RoleBindingSubject) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[100] + 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 RoleBindingSubject.ProtoReflect.Descriptor instead. +func (*RoleBindingSubject) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{100} +} + +func (x *RoleBindingSubject) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *RoleBindingSubject) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoleBindingSubject) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *RoleBindingSubject) GetApiGroup() string { + if x != nil { + return x.ApiGroup + } + return "" +} + +// RoleReference represents a reference to a role in a role binding +type RoleReference struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` // Role kind: "Role", "ClusterRole" + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // Role name + ApiGroup string `protobuf:"bytes,3,opt,name=api_group,json=apiGroup,proto3" json:"api_group,omitempty"` // API group (typically "rbac.authorization.k8s.io") +} + +func (x *RoleReference) Reset() { + *x = RoleReference{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[101] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RoleReference) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RoleReference) ProtoMessage() {} + +func (x *RoleReference) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[101] + 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 RoleReference.ProtoReflect.Descriptor instead. +func (*RoleReference) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{101} +} + +func (x *RoleReference) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *RoleReference) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *RoleReference) GetApiGroup() string { + if x != nil { + return x.ApiGroup + } + return "" +} + +// KedaScaledObjectDetails contains detailed KEDA ScaledObject information +type KedaScaledObjectDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TargetName string `protobuf:"bytes,1,opt,name=target_name,json=targetName,proto3" json:"target_name,omitempty"` // Name of the scale target + TargetKind string `protobuf:"bytes,2,opt,name=target_kind,json=targetKind,proto3" json:"target_kind,omitempty"` // Kind of the scale target (e.g., "Deployment") + MinReplicas int32 `protobuf:"varint,3,opt,name=min_replicas,json=minReplicas,proto3" json:"min_replicas,omitempty"` // Minimum number of replicas + MaxReplicas int32 `protobuf:"varint,4,opt,name=max_replicas,json=maxReplicas,proto3" json:"max_replicas,omitempty"` // Maximum number of replicas + CurrentReplicas int32 `protobuf:"varint,5,opt,name=current_replicas,json=currentReplicas,proto3" json:"current_replicas,omitempty"` // Current number of replicas + Triggers []*KedaScaledObjectTrigger `protobuf:"bytes,6,rep,name=triggers,proto3" json:"triggers,omitempty"` // List of scaling triggers + Conditions []*KedaScaledObjectCondition `protobuf:"bytes,7,rep,name=conditions,proto3" json:"conditions,omitempty"` // Current conditions + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` // Overall status: "Ready", "Active", "Unknown" +} + +func (x *KedaScaledObjectDetails) Reset() { + *x = KedaScaledObjectDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[102] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KedaScaledObjectDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KedaScaledObjectDetails) ProtoMessage() {} + +func (x *KedaScaledObjectDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[102] + 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 KedaScaledObjectDetails.ProtoReflect.Descriptor instead. +func (*KedaScaledObjectDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{102} +} + +func (x *KedaScaledObjectDetails) GetTargetName() string { + if x != nil { + return x.TargetName + } + return "" +} + +func (x *KedaScaledObjectDetails) GetTargetKind() string { + if x != nil { + return x.TargetKind + } + return "" +} + +func (x *KedaScaledObjectDetails) GetMinReplicas() int32 { + if x != nil { + return x.MinReplicas + } + return 0 +} + +func (x *KedaScaledObjectDetails) GetMaxReplicas() int32 { + if x != nil { + return x.MaxReplicas + } + return 0 +} + +func (x *KedaScaledObjectDetails) GetCurrentReplicas() int32 { + if x != nil { + return x.CurrentReplicas + } + return 0 +} + +func (x *KedaScaledObjectDetails) GetTriggers() []*KedaScaledObjectTrigger { + if x != nil { + return x.Triggers + } + return nil +} + +func (x *KedaScaledObjectDetails) GetConditions() []*KedaScaledObjectCondition { + if x != nil { + return x.Conditions + } + return nil +} + +func (x *KedaScaledObjectDetails) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +// KedaScaledObjectTrigger represents a scaling trigger +type KedaScaledObjectTrigger struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Trigger type (e.g., "cpu", "memory", "prometheus") + Metadata map[string]string `protobuf:"bytes,2,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Trigger-specific metadata +} + +func (x *KedaScaledObjectTrigger) Reset() { + *x = KedaScaledObjectTrigger{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[103] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KedaScaledObjectTrigger) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KedaScaledObjectTrigger) ProtoMessage() {} + +func (x *KedaScaledObjectTrigger) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[103] + 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 KedaScaledObjectTrigger.ProtoReflect.Descriptor instead. +func (*KedaScaledObjectTrigger) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{103} +} + +func (x *KedaScaledObjectTrigger) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *KedaScaledObjectTrigger) GetMetadata() map[string]string { + if x != nil { + return x.Metadata + } + return nil +} + +// KedaScaledObjectCondition represents a condition of a KEDA ScaledObject +type KedaScaledObjectCondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Condition type (e.g., "Ready", "Active") + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Condition status: "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastTransitionTime int64 `protobuf:"varint,5,opt,name=last_transition_time,json=lastTransitionTime,proto3" json:"last_transition_time,omitempty"` // Last transition time +} + +func (x *KedaScaledObjectCondition) Reset() { + *x = KedaScaledObjectCondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[104] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KedaScaledObjectCondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KedaScaledObjectCondition) ProtoMessage() {} + +func (x *KedaScaledObjectCondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[104] + 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 KedaScaledObjectCondition.ProtoReflect.Descriptor instead. +func (*KedaScaledObjectCondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{104} +} + +func (x *KedaScaledObjectCondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *KedaScaledObjectCondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *KedaScaledObjectCondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *KedaScaledObjectCondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *KedaScaledObjectCondition) GetLastTransitionTime() int64 { + if x != nil { + return x.LastTransitionTime + } + return 0 +} + +// KarpenterResourceDetails contains detailed Karpenter resource information +type KarpenterResourceDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ResourceType string `protobuf:"bytes,1,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` // Type of Karpenter resource (NodePool, NodeClaim, Provisioner) + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Overall status: "Ready", "Available", "Unknown" + Conditions []*KarpenterResourceCondition `protobuf:"bytes,3,rep,name=conditions,proto3" json:"conditions,omitempty"` // Current conditions + Capacity *KarpenterCapacity `protobuf:"bytes,4,opt,name=capacity,proto3" json:"capacity,omitempty"` // Resource capacity (for NodePool/NodeClaim) + Requirements []*KarpenterRequirement `protobuf:"bytes,5,rep,name=requirements,proto3" json:"requirements,omitempty"` // Instance requirements (for NodePool) + NodeClassRef string `protobuf:"bytes,6,opt,name=node_class_ref,json=nodeClassRef,proto3" json:"node_class_ref,omitempty"` // Reference to NodeClass (for NodePool) + NodeName string `protobuf:"bytes,7,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"` // Associated node name (for NodeClaim) + Limits map[string]string `protobuf:"bytes,8,rep,name=limits,proto3" json:"limits,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Resource limits (for Provisioner) +} + +func (x *KarpenterResourceDetails) Reset() { + *x = KarpenterResourceDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[105] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KarpenterResourceDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KarpenterResourceDetails) ProtoMessage() {} + +func (x *KarpenterResourceDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[105] + 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 KarpenterResourceDetails.ProtoReflect.Descriptor instead. +func (*KarpenterResourceDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{105} +} + +func (x *KarpenterResourceDetails) GetResourceType() string { + if x != nil { + return x.ResourceType + } + return "" +} + +func (x *KarpenterResourceDetails) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *KarpenterResourceDetails) GetConditions() []*KarpenterResourceCondition { + if x != nil { + return x.Conditions + } + return nil +} + +func (x *KarpenterResourceDetails) GetCapacity() *KarpenterCapacity { + if x != nil { + return x.Capacity + } + return nil +} + +func (x *KarpenterResourceDetails) GetRequirements() []*KarpenterRequirement { + if x != nil { + return x.Requirements + } + return nil +} + +func (x *KarpenterResourceDetails) GetNodeClassRef() string { + if x != nil { + return x.NodeClassRef + } + return "" +} + +func (x *KarpenterResourceDetails) GetNodeName() string { + if x != nil { + return x.NodeName + } + return "" +} + +func (x *KarpenterResourceDetails) GetLimits() map[string]string { + if x != nil { + return x.Limits + } + return nil +} + +// KarpenterResourceCondition represents a condition of a Karpenter resource +type KarpenterResourceCondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Condition type (e.g., "Ready", "Available") + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Condition status: "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastTransitionTime int64 `protobuf:"varint,5,opt,name=last_transition_time,json=lastTransitionTime,proto3" json:"last_transition_time,omitempty"` // Last transition time +} + +func (x *KarpenterResourceCondition) Reset() { + *x = KarpenterResourceCondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[106] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KarpenterResourceCondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KarpenterResourceCondition) ProtoMessage() {} + +func (x *KarpenterResourceCondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[106] + 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 KarpenterResourceCondition.ProtoReflect.Descriptor instead. +func (*KarpenterResourceCondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{106} +} + +func (x *KarpenterResourceCondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *KarpenterResourceCondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *KarpenterResourceCondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *KarpenterResourceCondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *KarpenterResourceCondition) GetLastTransitionTime() int64 { + if x != nil { + return x.LastTransitionTime + } + return 0 +} + +// KarpenterCapacity represents capacity information +type KarpenterCapacity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cpu string `protobuf:"bytes,1,opt,name=cpu,proto3" json:"cpu,omitempty"` // CPU capacity (e.g., "4") + Memory string `protobuf:"bytes,2,opt,name=memory,proto3" json:"memory,omitempty"` // Memory capacity (e.g., "16Gi") + Other map[string]string `protobuf:"bytes,3,rep,name=other,proto3" json:"other,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Other resource capacities +} + +func (x *KarpenterCapacity) Reset() { + *x = KarpenterCapacity{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[107] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KarpenterCapacity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KarpenterCapacity) ProtoMessage() {} + +func (x *KarpenterCapacity) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[107] + 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 KarpenterCapacity.ProtoReflect.Descriptor instead. +func (*KarpenterCapacity) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{107} +} + +func (x *KarpenterCapacity) GetCpu() string { + if x != nil { + return x.Cpu + } + return "" +} + +func (x *KarpenterCapacity) GetMemory() string { + if x != nil { + return x.Memory + } + return "" +} + +func (x *KarpenterCapacity) GetOther() map[string]string { + if x != nil { + return x.Other + } + return nil +} + +// KarpenterRequirement represents an instance requirement +type KarpenterRequirement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` // Requirement key (e.g., "node.kubernetes.io/instance-type") + Operator string `protobuf:"bytes,2,opt,name=operator,proto3" json:"operator,omitempty"` // Operator (e.g., "In", "NotIn", "Exists") + Values []string `protobuf:"bytes,3,rep,name=values,proto3" json:"values,omitempty"` // Requirement values +} + +func (x *KarpenterRequirement) Reset() { + *x = KarpenterRequirement{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[108] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *KarpenterRequirement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KarpenterRequirement) ProtoMessage() {} + +func (x *KarpenterRequirement) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[108] + 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 KarpenterRequirement.ProtoReflect.Descriptor instead. +func (*KarpenterRequirement) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{108} +} + +func (x *KarpenterRequirement) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *KarpenterRequirement) GetOperator() string { + if x != nil { + return x.Operator + } + return "" +} + +func (x *KarpenterRequirement) GetValues() []string { + if x != nil { + return x.Values + } + return nil +} + +// WorkloadFilters provides optional filters for narrowing the GetWorkloads request. +// All fields are optional. When multiple fields are provided, they are ANDed together. +type WorkloadFilters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Targeting criteria (AND logic between non-null fields) + NamespaceSelector *LabelSelector `protobuf:"bytes,11,opt,name=namespace_selector,json=namespaceSelector,proto3,oneof" json:"namespace_selector,omitempty"` // Target namespaces by labels + WorkloadSelector *LabelSelector `protobuf:"bytes,12,opt,name=workload_selector,json=workloadSelector,proto3,oneof" json:"workload_selector,omitempty"` // Target workloads by labels + KindFilter []K8SObjectKind `protobuf:"varint,13,rep,packed,name=kind_filter,json=kindFilter,proto3,enum=api.v1.K8SObjectKind" json:"kind_filter,omitempty"` // Target specific workload kinds + NamePattern *RegexPattern `protobuf:"bytes,14,opt,name=name_pattern,json=namePattern,proto3,oneof" json:"name_pattern,omitempty"` // Target workloads by name pattern + AnnotationSelector *LabelSelector `protobuf:"bytes,15,opt,name=annotation_selector,json=annotationSelector,proto3,oneof" json:"annotation_selector,omitempty"` // Target workloads by annotations + WorkloadNames []string `protobuf:"bytes,16,rep,name=workload_names,json=workloadNames,proto3" json:"workload_names,omitempty"` // Target specific workload kinds + NodeGroupNames []string `protobuf:"bytes,21,rep,name=node_group_names,json=nodeGroupNames,proto3" json:"node_group_names,omitempty"` // target workloads running on specific nodes + // Lifecycle status filter (overrides legacy show_deleted when set) + Status WorkloadStatusFilter `protobuf:"varint,30,opt,name=status,proto3,enum=api.v1.WorkloadStatusFilter" json:"status,omitempty"` // ACTIVE, DELETED, or BOTH +} + +func (x *WorkloadFilters) Reset() { + *x = WorkloadFilters{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[109] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *WorkloadFilters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WorkloadFilters) ProtoMessage() {} + +func (x *WorkloadFilters) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[109] + 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 WorkloadFilters.ProtoReflect.Descriptor instead. +func (*WorkloadFilters) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{109} +} + +func (x *WorkloadFilters) GetNamespaceSelector() *LabelSelector { + if x != nil { + return x.NamespaceSelector + } + return nil +} + +func (x *WorkloadFilters) GetWorkloadSelector() *LabelSelector { + if x != nil { + return x.WorkloadSelector + } + return nil +} + +func (x *WorkloadFilters) GetKindFilter() []K8SObjectKind { + if x != nil { + return x.KindFilter + } + return nil +} + +func (x *WorkloadFilters) GetNamePattern() *RegexPattern { + if x != nil { + return x.NamePattern + } + return nil +} + +func (x *WorkloadFilters) GetAnnotationSelector() *LabelSelector { + if x != nil { + return x.AnnotationSelector + } + return nil +} + +func (x *WorkloadFilters) GetWorkloadNames() []string { + if x != nil { + return x.WorkloadNames + } + return nil +} + +func (x *WorkloadFilters) GetNodeGroupNames() []string { + if x != nil { + return x.NodeGroupNames + } + return nil +} + +func (x *WorkloadFilters) GetStatus() WorkloadStatusFilter { + if x != nil { + return x.Status + } + return WorkloadStatusFilter_WORKLOAD_STATUS_FILTER_UNSPECIFIED +} + +// PodDisruptionBudgetDetails contains detailed PodDisruptionBudget information +type PodDisruptionBudgetDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MinAvailable int32 `protobuf:"varint,1,opt,name=min_available,json=minAvailable,proto3" json:"min_available,omitempty"` // Minimum number of pods that should be available + MaxUnavailable int32 `protobuf:"varint,2,opt,name=max_unavailable,json=maxUnavailable,proto3" json:"max_unavailable,omitempty"` // Maximum number of pods that can be unavailable + CurrentHealthy int32 `protobuf:"varint,3,opt,name=current_healthy,json=currentHealthy,proto3" json:"current_healthy,omitempty"` // Current number of healthy pods + DesiredHealthy int32 `protobuf:"varint,4,opt,name=desired_healthy,json=desiredHealthy,proto3" json:"desired_healthy,omitempty"` // Desired number of healthy pods + DisruptionsAllowed int32 `protobuf:"varint,5,opt,name=disruptions_allowed,json=disruptionsAllowed,proto3" json:"disruptions_allowed,omitempty"` // Number of disruptions currently allowed + ExpectedPods int32 `protobuf:"varint,6,opt,name=expected_pods,json=expectedPods,proto3" json:"expected_pods,omitempty"` // Expected number of pods + Status string `protobuf:"bytes,7,opt,name=status,proto3" json:"status,omitempty"` // Overall status: "Healthy", "Disrupted", "Unknown" + SelectorLabels map[string]string `protobuf:"bytes,8,rep,name=selector_labels,json=selectorLabels,proto3" json:"selector_labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Label selector for target pods + Conditions []*PodDisruptionBudgetCondition `protobuf:"bytes,9,rep,name=conditions,proto3" json:"conditions,omitempty"` // Current conditions +} + +func (x *PodDisruptionBudgetDetails) Reset() { + *x = PodDisruptionBudgetDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[110] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PodDisruptionBudgetDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PodDisruptionBudgetDetails) ProtoMessage() {} + +func (x *PodDisruptionBudgetDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[110] + 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 PodDisruptionBudgetDetails.ProtoReflect.Descriptor instead. +func (*PodDisruptionBudgetDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{110} +} + +func (x *PodDisruptionBudgetDetails) GetMinAvailable() int32 { + if x != nil { + return x.MinAvailable + } + return 0 +} + +func (x *PodDisruptionBudgetDetails) GetMaxUnavailable() int32 { + if x != nil { + return x.MaxUnavailable + } + return 0 +} + +func (x *PodDisruptionBudgetDetails) GetCurrentHealthy() int32 { + if x != nil { + return x.CurrentHealthy + } + return 0 +} + +func (x *PodDisruptionBudgetDetails) GetDesiredHealthy() int32 { + if x != nil { + return x.DesiredHealthy + } + return 0 +} + +func (x *PodDisruptionBudgetDetails) GetDisruptionsAllowed() int32 { + if x != nil { + return x.DisruptionsAllowed + } + return 0 +} + +func (x *PodDisruptionBudgetDetails) GetExpectedPods() int32 { + if x != nil { + return x.ExpectedPods + } + return 0 +} + +func (x *PodDisruptionBudgetDetails) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *PodDisruptionBudgetDetails) GetSelectorLabels() map[string]string { + if x != nil { + return x.SelectorLabels + } + return nil +} + +func (x *PodDisruptionBudgetDetails) GetConditions() []*PodDisruptionBudgetCondition { + if x != nil { + return x.Conditions + } + return nil +} + +// PodDisruptionBudgetCondition represents a condition of a PodDisruptionBudget +type PodDisruptionBudgetCondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Condition type (e.g., "DisruptionAllowed") + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Condition status: "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastTransitionTime int64 `protobuf:"varint,5,opt,name=last_transition_time,json=lastTransitionTime,proto3" json:"last_transition_time,omitempty"` // Last transition time +} + +func (x *PodDisruptionBudgetCondition) Reset() { + *x = PodDisruptionBudgetCondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[111] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *PodDisruptionBudgetCondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PodDisruptionBudgetCondition) ProtoMessage() {} + +func (x *PodDisruptionBudgetCondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[111] + 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 PodDisruptionBudgetCondition.ProtoReflect.Descriptor instead. +func (*PodDisruptionBudgetCondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{111} +} + +func (x *PodDisruptionBudgetCondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *PodDisruptionBudgetCondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *PodDisruptionBudgetCondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *PodDisruptionBudgetCondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *PodDisruptionBudgetCondition) GetLastTransitionTime() int64 { + if x != nil { + return x.LastTransitionTime + } + return 0 +} + +// ResourceQuotaDetails contains detailed ResourceQuota information +type ResourceQuotaDetails struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + HardLimits map[string]string `protobuf:"bytes,1,rep,name=hard_limits,json=hardLimits,proto3" json:"hard_limits,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Hard resource limits (e.g., "requests.cpu": "4", "requests.memory": "8Gi") + Used map[string]string `protobuf:"bytes,2,rep,name=used,proto3" json:"used,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Currently used resources + Scopes []string `protobuf:"bytes,3,rep,name=scopes,proto3" json:"scopes,omitempty"` // Quota scopes: ["BestEffort", "NotBestEffort", "NotTerminating", "Terminating"] + ScopeSelector map[string]string `protobuf:"bytes,4,rep,name=scope_selector,json=scopeSelector,proto3" json:"scope_selector,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Scope selector match labels + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` // Overall status: "Valid", "Invalid", "Unknown" + Conditions []*ResourceQuotaCondition `protobuf:"bytes,6,rep,name=conditions,proto3" json:"conditions,omitempty"` // Current conditions +} + +func (x *ResourceQuotaDetails) Reset() { + *x = ResourceQuotaDetails{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[112] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceQuotaDetails) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceQuotaDetails) ProtoMessage() {} + +func (x *ResourceQuotaDetails) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[112] + 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 ResourceQuotaDetails.ProtoReflect.Descriptor instead. +func (*ResourceQuotaDetails) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{112} +} + +func (x *ResourceQuotaDetails) GetHardLimits() map[string]string { + if x != nil { + return x.HardLimits + } + return nil +} + +func (x *ResourceQuotaDetails) GetUsed() map[string]string { + if x != nil { + return x.Used + } + return nil +} + +func (x *ResourceQuotaDetails) GetScopes() []string { + if x != nil { + return x.Scopes + } + return nil +} + +func (x *ResourceQuotaDetails) GetScopeSelector() map[string]string { + if x != nil { + return x.ScopeSelector + } + return nil +} + +func (x *ResourceQuotaDetails) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ResourceQuotaDetails) GetConditions() []*ResourceQuotaCondition { + if x != nil { + return x.Conditions + } + return nil +} + +// ResourceQuotaCondition represents a condition of a ResourceQuota +type ResourceQuotaCondition struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` // Condition type (typically not used in core/v1) + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` // Condition status: "True", "False", "Unknown" + Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"` // Reason for the condition + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` // Human readable message + LastTransitionTime int64 `protobuf:"varint,5,opt,name=last_transition_time,json=lastTransitionTime,proto3" json:"last_transition_time,omitempty"` // Last transition time +} + +func (x *ResourceQuotaCondition) Reset() { + *x = ResourceQuotaCondition{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[113] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceQuotaCondition) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceQuotaCondition) ProtoMessage() {} + +func (x *ResourceQuotaCondition) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[113] + 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 ResourceQuotaCondition.ProtoReflect.Descriptor instead. +func (*ResourceQuotaCondition) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{113} +} + +func (x *ResourceQuotaCondition) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *ResourceQuotaCondition) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +func (x *ResourceQuotaCondition) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *ResourceQuotaCondition) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *ResourceQuotaCondition) GetLastTransitionTime() int64 { + if x != nil { + return x.LastTransitionTime + } + return 0 +} + +type Event struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Kind string `protobuf:"bytes,2,opt,name=kind,proto3" json:"kind,omitempty"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` + Namespace string `protobuf:"bytes,4,opt,name=namespace,proto3" json:"namespace,omitempty"` + ClusterId string `protobuf:"bytes,5,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` + OwnerUid string `protobuf:"bytes,7,opt,name=owner_uid,json=ownerUid,proto3" json:"owner_uid,omitempty"` + OwnerKind string `protobuf:"bytes,8,opt,name=owner_kind,json=ownerKind,proto3" json:"owner_kind,omitempty"` + OwnerName string `protobuf:"bytes,9,opt,name=owner_name,json=ownerName,proto3" json:"owner_name,omitempty"` + ApiVersion string `protobuf:"bytes,10,opt,name=api_version,json=apiVersion,proto3" json:"api_version,omitempty"` + ResourceVersion string `protobuf:"bytes,11,opt,name=resource_version,json=resourceVersion,proto3" json:"resource_version,omitempty"` + Count int32 `protobuf:"varint,12,opt,name=count,proto3" json:"count,omitempty"` + Reason string `protobuf:"bytes,13,opt,name=reason,proto3" json:"reason,omitempty"` + Message string `protobuf:"bytes,14,opt,name=message,proto3" json:"message,omitempty"` + Type string `protobuf:"bytes,15,opt,name=type,proto3" json:"type,omitempty"` + Action string `protobuf:"bytes,16,opt,name=action,proto3" json:"action,omitempty"` + Source string `protobuf:"bytes,17,opt,name=source,proto3" json:"source,omitempty"` + InvolvedObjectKind string `protobuf:"bytes,18,opt,name=involved_object_kind,json=involvedObjectKind,proto3" json:"involved_object_kind,omitempty"` + InvolvedObjectName string `protobuf:"bytes,19,opt,name=involved_object_name,json=involvedObjectName,proto3" json:"involved_object_name,omitempty"` + InvolvedObjectNamespace string `protobuf:"bytes,20,opt,name=involved_object_namespace,json=involvedObjectNamespace,proto3" json:"involved_object_namespace,omitempty"` + ReportingController string `protobuf:"bytes,21,opt,name=reporting_controller,json=reportingController,proto3" json:"reporting_controller,omitempty"` + ReportingInstance string `protobuf:"bytes,22,opt,name=reporting_instance,json=reportingInstance,proto3" json:"reporting_instance,omitempty"` + CreatedAt *timestamppb.Timestamp `protobuf:"bytes,41,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"` + UpdatedAt *timestamppb.Timestamp `protobuf:"bytes,42,opt,name=updated_at,json=updatedAt,proto3" json:"updated_at,omitempty"` + LastSeen *timestamppb.Timestamp `protobuf:"bytes,43,opt,name=last_seen,json=lastSeen,proto3" json:"last_seen,omitempty"` + CreatedAtAge string `protobuf:"bytes,44,opt,name=created_at_age,json=createdAtAge,proto3" json:"created_at_age,omitempty"` + UpdatedAtAge string `protobuf:"bytes,45,opt,name=updated_at_age,json=updatedAtAge,proto3" json:"updated_at_age,omitempty"` + LastSeenAge string `protobuf:"bytes,46,opt,name=last_seen_age,json=lastSeenAge,proto3" json:"last_seen_age,omitempty"` +} + +func (x *Event) Reset() { + *x = Event{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[114] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Event) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Event) ProtoMessage() {} + +func (x *Event) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[114] + 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 Event.ProtoReflect.Descriptor instead. +func (*Event) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{114} +} + +func (x *Event) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Event) GetKind() string { + if x != nil { + return x.Kind + } + return "" +} + +func (x *Event) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Event) GetNamespace() string { + if x != nil { + return x.Namespace + } + return "" +} + +func (x *Event) GetClusterId() string { + if x != nil { + return x.ClusterId + } + return "" +} + +func (x *Event) GetOwnerUid() string { + if x != nil { + return x.OwnerUid + } + return "" +} + +func (x *Event) GetOwnerKind() string { + if x != nil { + return x.OwnerKind + } + return "" +} + +func (x *Event) GetOwnerName() string { + if x != nil { + return x.OwnerName + } + return "" +} + +func (x *Event) GetApiVersion() string { + if x != nil { + return x.ApiVersion + } + return "" +} + +func (x *Event) GetResourceVersion() string { + if x != nil { + return x.ResourceVersion + } + return "" +} + +func (x *Event) GetCount() int32 { + if x != nil { + return x.Count + } + return 0 +} + +func (x *Event) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + +func (x *Event) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *Event) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *Event) GetAction() string { + if x != nil { + return x.Action + } + return "" +} + +func (x *Event) GetSource() string { + if x != nil { + return x.Source + } + return "" +} + +func (x *Event) GetInvolvedObjectKind() string { + if x != nil { + return x.InvolvedObjectKind + } + return "" +} + +func (x *Event) GetInvolvedObjectName() string { + if x != nil { + return x.InvolvedObjectName + } + return "" +} + +func (x *Event) GetInvolvedObjectNamespace() string { + if x != nil { + return x.InvolvedObjectNamespace + } + return "" +} + +func (x *Event) GetReportingController() string { + if x != nil { + return x.ReportingController + } + return "" +} + +func (x *Event) GetReportingInstance() string { + if x != nil { + return x.ReportingInstance + } + return "" +} + +func (x *Event) GetCreatedAt() *timestamppb.Timestamp { + if x != nil { + return x.CreatedAt + } + return nil +} + +func (x *Event) GetUpdatedAt() *timestamppb.Timestamp { + if x != nil { + return x.UpdatedAt + } + return nil +} + +func (x *Event) GetLastSeen() *timestamppb.Timestamp { + if x != nil { + return x.LastSeen + } + return nil +} + +func (x *Event) GetCreatedAtAge() string { + if x != nil { + return x.CreatedAtAge + } + return "" +} + +func (x *Event) GetUpdatedAtAge() string { + if x != nil { + return x.UpdatedAtAge + } + return "" +} + +func (x *Event) GetLastSeenAge() string { + if x != nil { + return x.LastSeenAge + } + return "" +} + +type LabelSelector_Label struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *LabelSelector_Label) Reset() { + *x = LabelSelector_Label{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_common_proto_msgTypes[119] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LabelSelector_Label) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LabelSelector_Label) ProtoMessage() {} + +func (x *LabelSelector_Label) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_common_proto_msgTypes[119] + 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 LabelSelector_Label.ProtoReflect.Descriptor instead. +func (*LabelSelector_Label) Descriptor() ([]byte, []int) { + return file_api_v1_common_proto_rawDescGZIP(), []int{19, 0} +} + +func (x *LabelSelector_Label) GetKey() string { + if x != nil { + return x.Key + } + return "" +} + +func (x *LabelSelector_Label) GetValue() string { + if x != nil { + return x.Value + } + return "" +} + +var File_api_v1_common_proto protoreflect.FileDescriptor + +var file_api_v1_common_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x6d, 0x6f, 0x6e, 0x65, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb8, 0x05, 0x0a, 0x0d, 0x41, 0x75, 0x64, 0x69, + 0x74, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x61, + 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, + 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x0d, 0x77, + 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x38, 0x73, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x6c, + 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x72, 0x65, 0x63, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, + 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2e, + 0x0a, 0x13, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6f, 0x72, 0x69, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x34, + 0x0a, 0x16, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x5f, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x55, 0x73, 0x65, 0x72, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x12, 0x69, 0x6d, 0x70, 0x65, 0x72, 0x73, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, + 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x11, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x22, 0xfd, 0x01, 0x0a, 0x0a, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x70, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x5f, 0x63, + 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x42, 0x79, 0x43, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x12, 0x2e, 0x0a, 0x08, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x45, 0x6e, 0x75, + 0x6d, 0x52, 0x07, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x61, 0x67, 0x65, + 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x70, 0x61, + 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, + 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x50, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0xaf, 0x0b, 0x0a, 0x08, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x29, 0x0a, 0x11, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, + 0x68, 0x6f, 0x75, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x63, 0x70, 0x75, 0x43, + 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x2f, 0x0a, 0x14, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, + 0x75, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x2d, 0x0a, 0x13, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, + 0x75, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x2f, 0x0a, 0x14, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x2d, 0x0a, 0x13, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x79, 0x65, + 0x61, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, + 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x59, 0x65, 0x61, 0x72, 0x12, 0x3c, 0x0a, 0x1b, 0x6f, 0x70, + 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, + 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x73, + 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x42, 0x0a, 0x1e, 0x6f, 0x70, 0x74, 0x69, + 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x73, + 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x1a, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x40, 0x0a, 0x1d, + 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x19, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x42, + 0x0a, 0x1e, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1a, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, + 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x12, 0x40, 0x0a, 0x1d, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x79, + 0x65, 0x61, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x19, 0x6f, 0x70, 0x74, 0x69, 0x6d, + 0x69, 0x7a, 0x65, 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, + 0x59, 0x65, 0x61, 0x72, 0x12, 0x36, 0x0a, 0x18, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, + 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x46, + 0x6f, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x3c, 0x0a, 0x1b, + 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x17, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x73, 0x74, 0x46, 0x6f, 0x72, + 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x3a, 0x0a, 0x1a, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x16, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6f, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x69, 0x6d, 0x65, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x49, 0x0a, 0x22, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, + 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x1d, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x70, 0x75, + 0x43, 0x6f, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x12, 0x4f, 0x0a, 0x25, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x43, 0x6f, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x12, 0x4d, 0x0a, 0x24, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x1f, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, + 0x43, 0x6f, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x12, 0x49, 0x0a, 0x22, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x67, + 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1d, 0x6f, + 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x47, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x46, + 0x6f, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x36, 0x0a, 0x18, + 0x67, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, + 0x67, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x12, 0x29, 0x0a, 0x11, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, + 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x0e, 0x67, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, + 0x3c, 0x0a, 0x1b, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x67, 0x70, 0x75, + 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x64, 0x47, + 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x39, 0x0a, + 0x1a, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, 0x63, + 0x70, 0x75, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x15, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x56, 0x63, 0x70, + 0x75, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x3d, 0x0a, 0x1c, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x67, 0x69, 0x62, 0x5f, + 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, + 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x73, 0x74, 0x50, 0x65, 0x72, 0x47, 0x69, 0x62, + 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, 0x72, 0x12, 0x6b, 0x0a, 0x29, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, + 0x61, 0x76, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x52, 0x24, + 0x6e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x61, 0x76, 0x65, 0x64, 0x43, 0x6f, 0x73, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x4d, + 0x6f, 0x6e, 0x74, 0x68, 0x22, 0xd1, 0x0e, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x70, 0x75, 0x43, 0x61, 0x70, 0x61, + 0x63, 0x69, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x12, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x43, 0x61, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, + 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, + 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x11, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x70, 0x75, 0x55, + 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x6e, 0x6f, 0x64, + 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, + 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x70, 0x75, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, + 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x70, 0x75, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x1c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1a, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x74, 0x69, 0x6c, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x43, 0x70, 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3c, + 0x0a, 0x1a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x70, 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x36, + 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0f, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, 0x70, + 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x47, 0x70, 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x30, + 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x67, 0x70, 0x75, 0x5f, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, 0x70, 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, + 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x12, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, 0x70, + 0x75, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, + 0x79, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x70, 0x75, + 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, + 0x0a, 0x14, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x6e, 0x6f, + 0x64, 0x65, 0x47, 0x70, 0x75, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x2d, 0x0a, 0x13, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x76, 0x72, 0x61, + 0x6d, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x6e, + 0x6f, 0x64, 0x65, 0x47, 0x70, 0x75, 0x56, 0x72, 0x61, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x37, 0x0a, 0x18, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x67, 0x70, 0x75, + 0x5f, 0x76, 0x72, 0x61, 0x6d, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, 0x70, 0x75, 0x56, + 0x72, 0x61, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x76, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, + 0x74, 0x79, 0x18, 0x18, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x70, + 0x75, 0x56, 0x72, 0x61, 0x6d, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x39, 0x0a, + 0x19, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x76, 0x72, 0x61, 0x6d, 0x5f, 0x75, + 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x19, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x70, 0x75, 0x56, 0x72, 0x61, 0x6d, 0x55, 0x74, 0x69, + 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x1f, 0x6e, 0x6f, 0x72, 0x6d, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x1a, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x1c, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4e, 0x6f, 0x64, + 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, + 0x3f, 0x0a, 0x1c, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x76, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, + 0x1b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x19, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x47, 0x70, 0x75, 0x56, 0x72, 0x61, 0x6d, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, + 0x12, 0x2a, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x65, + 0x74, 0x5f, 0x72, 0x63, 0x76, 0x18, 0x29, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x52, 0x63, 0x76, 0x12, 0x34, 0x0a, 0x16, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, + 0x69, 0x74, 0x12, 0x35, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, + 0x6e, 0x65, 0x74, 0x5f, 0x72, 0x63, 0x76, 0x5f, 0x70, 0x63, 0x6b, 0x74, 0x73, 0x18, 0x33, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x65, + 0x74, 0x52, 0x63, 0x76, 0x50, 0x63, 0x6b, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x5f, 0x70, 0x63, 0x6b, 0x74, 0x73, 0x18, 0x38, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x50, 0x63, 0x6b, 0x74, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x66, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x5f, + 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x47, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x46, 0x73, 0x52, 0x65, 0x61, 0x64, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x12, 0x37, 0x0a, 0x18, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x66, + 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x4c, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x46, 0x73, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x66, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x73, + 0x18, 0x51, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x46, 0x73, 0x52, 0x65, 0x61, 0x64, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x66, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x73, 0x18, + 0x56, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x46, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x73, 0x22, 0xf2, 0x0c, 0x0a, 0x17, 0x46, 0x6f, 0x72, + 0x65, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x25, 0x0a, + 0x0e, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, + 0x61, 0x70, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x69, 0x6e, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x70, + 0x75, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x70, 0x75, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, + 0x79, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x12, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x43, 0x61, 0x70, 0x61, 0x63, + 0x69, 0x74, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x70, 0x75, 0x5f, + 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x6e, 0x6f, 0x64, + 0x65, 0x43, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x70, + 0x75, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x12, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x70, 0x75, 0x55, 0x74, 0x69, 0x6c, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x70, 0x75, + 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x43, 0x70, 0x75, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x40, 0x0a, 0x1c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, + 0x70, 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3c, 0x0a, 0x1a, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x18, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x43, 0x70, 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, 0x70, 0x75, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, + 0x70, 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x47, 0x70, 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x3a, 0x0a, + 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, + 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, 0x70, 0x75, 0x55, 0x74, + 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x18, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x70, 0x75, 0x43, 0x61, 0x70, + 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x24, 0x0a, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x19, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x6e, + 0x6f, 0x64, 0x65, 0x47, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x12, 0x6e, 0x6f, 0x64, 0x65, 0x47, + 0x70, 0x75, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, + 0x13, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x76, 0x72, 0x61, 0x6d, 0x5f, 0x75, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x6e, 0x6f, 0x64, 0x65, + 0x47, 0x70, 0x75, 0x56, 0x72, 0x61, 0x6d, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x18, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x76, 0x72, + 0x61, 0x6d, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x15, + 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x47, 0x70, 0x75, 0x56, 0x72, 0x61, 0x6d, + 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x33, 0x0a, 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x70, + 0x75, 0x5f, 0x76, 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, + 0x1d, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x70, 0x75, 0x56, 0x72, + 0x61, 0x6d, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x39, 0x0a, 0x19, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x76, 0x72, 0x61, 0x6d, 0x5f, 0x75, 0x74, 0x69, 0x6c, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x16, 0x6e, + 0x6f, 0x64, 0x65, 0x47, 0x70, 0x75, 0x56, 0x72, 0x61, 0x6d, 0x55, 0x74, 0x69, 0x6c, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x1f, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, + 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1c, + 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x1c, + 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x67, 0x70, 0x75, 0x5f, 0x76, + 0x72, 0x61, 0x6d, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x20, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x19, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x47, 0x70, + 0x75, 0x56, 0x72, 0x61, 0x6d, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x22, 0xe8, 0x04, + 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, + 0x79, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, + 0x75, 0x6c, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x64, 0x61, + 0x65, 0x6d, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6a, 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x4a, + 0x6f, 0x62, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x6f, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x6f, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, + 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x64, 0x73, 0x12, + 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x64, + 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, + 0x65, 0x64, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x66, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, + 0x77, 0x6e, 0x5f, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x75, + 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x75, 0x6e, + 0x64, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x75, 0x6e, 0x64, + 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x14, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xef, 0x09, 0x0a, 0x0c, 0x57, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x75, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, + 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x30, 0x0a, + 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, + 0x38, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x47, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, + 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, + 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x42, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2d, 0x0a, 0x09, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x6e, + 0x66, 0x6f, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3f, 0x0a, 0x10, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x4b, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x0e, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x12, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x5f, 0x73, 0x63, 0x6f, + 0x72, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x3e, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x11, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x48, 0x00, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x41, 0x74, 0x88, 0x01, 0x01, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x32, 0x0a, 0x15, 0x69, 0x73, 0x5f, 0x6b, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x5f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, + 0x69, 0x73, 0x4b, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x47, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x01, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x38, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49, 0x64, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2c, 0x0a, + 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x73, + 0x70, 0x65, 0x63, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x42, 0x13, 0x0a, 0x11, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x53, 0x0a, 0x14, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0xbc, 0x01, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6f, + 0x6e, 0x5f, 0x64, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6f, 0x6e, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x43, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x70, + 0x6f, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, + 0x73, 0x70, 0x6f, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x6e, 0x6b, + 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0c, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xe5, + 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x16, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x3c, 0x0a, 0x1a, 0x75, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, + 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x75, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, + 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x34, 0x0a, 0x16, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x14, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xbf, 0x0c, 0x0a, 0x04, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x12, 0x42, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0f, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2d, 0x0a, 0x09, + 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x26, 0x0a, 0x0f, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x4e, + 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x74, + 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x26, + 0x0a, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x55, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, + 0x65, 0x6e, 0x18, 0x2b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x08, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x30, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x2c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0b, 0x61, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x2e, 0x41, 0x6e, + 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x32, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x63, 0x65, 0x50, 0x65, 0x72, 0x48, 0x6f, 0x75, + 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x76, + 0x63, 0x70, 0x75, 0x18, 0x33, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x70, 0x72, 0x69, 0x63, 0x65, + 0x50, 0x65, 0x72, 0x56, 0x63, 0x70, 0x75, 0x12, 0x22, 0x0a, 0x0d, 0x70, 0x72, 0x69, 0x63, 0x65, + 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x67, 0x69, 0x62, 0x18, 0x34, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x50, 0x65, 0x72, 0x47, 0x69, 0x62, 0x12, 0x22, 0x0a, 0x0d, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x67, 0x70, 0x75, 0x18, 0x35, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x0b, 0x70, 0x72, 0x69, 0x63, 0x65, 0x50, 0x65, 0x72, 0x47, 0x70, 0x75, 0x12, + 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x36, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x08, 0x63, 0x70, 0x75, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x37, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, + 0x1b, 0x0a, 0x09, 0x67, 0x70, 0x75, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x38, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x08, 0x67, 0x70, 0x75, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x13, + 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x78, 0x74, 0x72, 0x61, + 0x63, 0x74, 0x65, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x11, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x7a, 0x6f, 0x6e, + 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6b, 0x75, 0x62, + 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x3e, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x55, 0x69, 0x64, + 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x5f, 0x75, 0x73, 0x65, 0x18, 0x41, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x49, 0x6e, 0x55, 0x73, + 0x65, 0x12, 0x41, 0x0a, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x74, + 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x42, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x52, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, + 0x6e, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x3d, 0x0a, + 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x47, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x0b, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x49, 0x0a, 0x12, + 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0e, 0x41, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x65, 0x64, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x50, 0x61, 0x74, 0x68, 0x22, + 0xae, 0x03, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x22, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x05, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x2d, 0x0a, 0x09, 0x63, 0x6f, 0x73, + 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, + 0x63, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2d, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6e, + 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x3f, 0x0a, 0x10, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x52, 0x0e, 0x63, 0x6f, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x73, 0x12, 0x4b, 0x0a, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x12, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x22, 0x5c, 0x0a, 0x0d, 0x43, 0x6f, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x2d, 0x0a, 0x09, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x73, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x63, 0x6f, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x75, + 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x61, 0x74, 0x61, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x12, 0x42, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xc8, 0x03, 0x0a, 0x0b, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, + 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x70, 0x75, 0x5f, 0x73, 0x61, 0x76, + 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x63, 0x70, 0x75, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, + 0x73, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x63, + 0x70, 0x75, 0x5f, 0x68, 0x69, 0x67, 0x68, 0x5f, 0x77, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x6d, 0x61, + 0x72, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x63, 0x70, 0x75, 0x48, 0x69, 0x67, + 0x68, 0x57, 0x61, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x72, 0x6b, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x63, + 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x43, 0x70, + 0x75, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x49, 0x0a, 0x21, 0x63, 0x75, 0x6d, 0x75, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x73, 0x61, 0x76, 0x69, 0x6e, + 0x67, 0x73, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x1e, 0x63, 0x75, 0x6d, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, + 0x70, 0x75, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, + 0x72, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, + 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x18, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x73, + 0x74, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x63, 0x70, 0x75, + 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x61, 0x63, 0x74, + 0x75, 0x61, 0x6c, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x70, + 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x76, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, + 0x65, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x63, 0x70, + 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x70, + 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x77, 0x61, 0x73, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x0c, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x57, 0x61, 0x73, 0x74, 0x65, + 0x22, 0x68, 0x0a, 0x10, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x44, 0x61, 0x74, 0x61, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x36, 0x0a, 0x0c, 0x73, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x73, + 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x44, 0x61, 0x74, 0x61, 0x22, 0x83, 0x02, 0x0a, 0x11, 0x53, + 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x69, 0x65, 0x73, + 0x12, 0x47, 0x0a, 0x12, 0x73, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x44, 0x61, 0x74, + 0x61, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x11, 0x73, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x44, + 0x61, 0x74, 0x61, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x3f, 0x0a, 0x1c, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x73, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x5f, 0x6d, + 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x19, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x70, 0x75, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, + 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x16, 0x74, 0x6f, + 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, 0x74, 0x5f, 0x73, 0x61, 0x76, + 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x53, 0x61, 0x76, 0x69, 0x6e, 0x67, 0x73, 0x12, + 0x2f, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x73, + 0x74, 0x5f, 0x77, 0x61, 0x73, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x70, 0x75, 0x43, 0x6f, 0x73, 0x74, 0x57, 0x61, 0x73, 0x74, 0x65, + 0x22, 0x7f, 0x0a, 0x18, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x39, + 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x52, + 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x22, 0xd3, 0x02, 0x0a, 0x0d, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x12, 0x37, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x49, 0x0a, 0x0c, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x4d, 0x0a, 0x11, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, + 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x72, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x2f, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, 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, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3e, 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x65, 0x78, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x22, 0xb6, 0x45, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x35, 0x0a, 0x0b, 0x70, + 0x6f, 0x64, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x6f, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x12, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x4e, + 0x0a, 0x14, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, + 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x12, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x48, + 0x0a, 0x12, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x10, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, + 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x4b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x35, 0x0a, 0x0b, 0x6a, 0x6f, 0x62, 0x5f, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, + 0x52, 0x0a, 0x6a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x42, 0x0a, 0x10, + 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, + 0x52, 0x0e, 0x63, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x41, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x0b, 0x70, 0x76, 0x63, 0x5f, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x8c, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x76, 0x63, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x41, 0x0a, 0x0a, 0x70, 0x76, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x8d, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x09, 0x70, 0x76, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x73, 0x63, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x8e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x09, 0x73, 0x63, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x0a, 0x6e, 0x73, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x18, 0x8f, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x39, + 0x0a, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x90, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, + 0x6f, 0x64, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x6f, + 0x64, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x36, 0x0a, 0x0b, 0x68, 0x70, 0x61, + 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x91, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x70, 0x61, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x36, 0x0a, 0x0b, 0x76, 0x70, 0x61, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x50, 0x41, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0a, 0x76, + 0x70, 0x61, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x4c, 0x0a, 0x13, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x18, 0x93, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x48, 0x00, 0x52, 0x11, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x17, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0xe8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x15, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x39, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0xe9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, + 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x4f, 0x0a, 0x14, + 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x18, 0xea, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x12, 0x72, 0x6f, 0x6c, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x5f, 0x0a, + 0x1a, 0x6b, 0x65, 0x64, 0x61, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0xeb, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x64, 0x61, + 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x17, 0x6b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, + 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x61, + 0x0a, 0x1a, 0x6b, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0xec, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x61, 0x72, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x18, 0x6b, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x68, 0x0a, 0x1d, 0x70, 0x6f, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x18, 0xed, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x44, 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, + 0x1a, 0x70, 0x6f, 0x64, 0x44, 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, + 0x64, 0x67, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x55, 0x0a, 0x16, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x5f, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0xee, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, + 0x6f, 0x74, 0x61, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x6f, 0x64, 0x5f, + 0x69, 0x70, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x70, 0x12, + 0x17, 0x0a, 0x07, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x69, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x68, 0x6f, 0x73, 0x74, 0x49, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x1b, 0x0a, 0x09, 0x71, + 0x6f, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x71, 0x6f, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x70, 0x75, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, + 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x63, 0x70, 0x75, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x73, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x32, + 0x0a, 0x15, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x6d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x70, 0x75, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, + 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x13, 0x63, 0x70, 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x4d, 0x69, 0x6c, 0x6c, + 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, + 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x17, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x11, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x18, 0x1f, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x42, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x61, 0x67, 0x65, 0x18, 0x20, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, + 0x67, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x64, + 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x18, 0x28, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x44, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x12, 0x25, 0x0a, + 0x0e, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, + 0x29, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, + 0x65, 0x61, 0x64, 0x79, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, + 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x11, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x5f, + 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x18, 0x2d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6e, 0x67, + 0x18, 0x2e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x30, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x15, 0x70, + 0x6f, 0x64, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x6f, 0x64, 0x4d, + 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x30, 0x0a, 0x14, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x67, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x3f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, + 0x61, 0x69, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x30, 0x0a, 0x14, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x40, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, + 0x70, 0x76, 0x63, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x41, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, + 0x0f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x42, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, + 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x18, 0x46, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6e, + 0x6f, 0x64, 0x65, 0x73, 0x44, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, + 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x47, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x27, 0x0a, 0x0f, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, + 0x48, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x41, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x49, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x6e, 0x6f, + 0x64, 0x65, 0x73, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x6f, + 0x64, 0x65, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x4a, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, + 0x2d, 0x0a, 0x12, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x64, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x6e, 0x6f, 0x64, + 0x65, 0x73, 0x4d, 0x69, 0x73, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x12, 0x27, + 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x55, 0x6e, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x72, 0x69, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x36, + 0x0a, 0x17, 0x6a, 0x6f, 0x62, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x5f, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x18, 0x50, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x15, 0x6a, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x44, + 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x6a, 0x6f, 0x62, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x65, + 0x64, 0x65, 0x64, 0x18, 0x51, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x6a, 0x6f, 0x62, 0x43, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x65, 0x64, + 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, + 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x18, 0x52, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6a, 0x6f, 0x62, + 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x12, 0x2a, 0x0a, 0x11, 0x6a, + 0x6f, 0x62, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x18, 0x53, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x6a, 0x6f, 0x62, 0x42, 0x61, 0x63, 0x6b, 0x6f, + 0x66, 0x66, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x6a, 0x6f, 0x62, 0x5f, 0x63, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x54, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6a, 0x6f, 0x62, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x6a, 0x6f, 0x62, 0x5f, 0x73, + 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, 0x55, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x6a, 0x6f, 0x62, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, + 0x6a, 0x6f, 0x62, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x56, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1d, 0x0a, 0x0a, 0x6a, 0x6f, 0x62, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x57, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x26, + 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x64, + 0x73, 0x18, 0x58, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6a, 0x6f, 0x62, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6a, 0x6f, 0x62, 0x5f, 0x66, 0x61, + 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x59, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0d, 0x6a, 0x6f, 0x62, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x50, 0x6f, 0x64, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x18, + 0x5a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x72, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x64, + 0x75, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x73, 0x70, + 0x65, 0x6e, 0x64, 0x65, 0x64, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x63, 0x72, 0x6f, + 0x6e, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x64, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x72, + 0x6f, 0x6e, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x5c, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x63, 0x72, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x35, 0x0a, 0x17, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x5d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x63, 0x72, 0x6f, 0x6e, 0x4c, 0x61, 0x73, 0x74, 0x53, + 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x17, 0x63, + 0x72, 0x6f, 0x6e, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, + 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x5e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x63, 0x72, + 0x6f, 0x6e, 0x4e, 0x65, 0x78, 0x74, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x5f, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x15, 0x63, 0x72, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3b, 0x0a, 0x1a, 0x63, 0x72, + 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x5f, 0x6a, 0x6f, + 0x62, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x60, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, + 0x63, 0x72, 0x6f, 0x6e, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x66, 0x75, 0x6c, 0x4a, 0x6f, + 0x62, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x33, 0x0a, 0x16, 0x63, 0x72, 0x6f, 0x6e, 0x5f, + 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x5f, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x18, 0x61, 0x20, 0x01, 0x28, 0x05, 0x52, 0x13, 0x63, 0x72, 0x6f, 0x6e, 0x46, 0x61, 0x69, + 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x43, 0x0a, 0x1e, + 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x65, + 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x62, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x1b, 0x63, 0x72, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x69, + 0x6e, 0x67, 0x44, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x64, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x70, 0x18, 0x65, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x49, 0x70, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x73, 0x18, 0x66, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x12, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x49, 0x70, 0x73, 0x12, 0x38, 0x0a, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x67, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, + 0x52, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x57, + 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x18, 0x68, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x38, 0x0a, 0x18, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x66, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x18, 0x69, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x12, 0x45, 0x0a, 0x1f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1c, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x54, 0x72, 0x61, 0x66, 0x66, + 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x45, 0x0a, 0x1f, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x72, 0x61, + 0x66, 0x66, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x6b, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x1c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x4c, 0x0a, 0x23, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, + 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x6c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x1f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x72, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x3d, 0x0a, + 0x1b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x6d, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x18, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x2e, 0x0a, 0x13, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x70, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x69, 0x65, 0x73, 0x18, 0x6e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x49, 0x70, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x12, 0x37, 0x0a, 0x18, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x69, 0x70, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, + 0x79, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x70, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x78, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x10, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x68, + 0x6f, 0x73, 0x74, 0x73, 0x18, 0x79, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x7a, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x29, 0x0a, + 0x10, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x73, 0x18, 0x7b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x69, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x7c, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x54, 0x6c, 0x73, 0x48, + 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x74, 0x6c, 0x73, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x7d, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x11, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x54, 0x6c, 0x73, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x19, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x69, 0x70, + 0x73, 0x18, 0x7e, 0x20, 0x03, 0x28, 0x09, 0x52, 0x16, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x70, 0x73, 0x12, + 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x7f, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x69, 0x6e, + 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x2b, 0x0a, 0x11, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6c, 0x73, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x80, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x69, 0x6e, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x54, 0x6c, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x1b, + 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x81, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x18, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x48, 0x61, 0x73, 0x44, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x34, 0x0a, 0x16, + 0x70, 0x76, 0x63, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, + 0x76, 0x63, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x16, 0x70, 0x76, 0x63, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x83, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x76, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, + 0x64, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x2f, 0x0a, 0x13, 0x70, 0x76, 0x63, + 0x5f, 0x61, 0x63, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, + 0x18, 0x84, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x76, 0x63, 0x41, 0x63, 0x74, 0x75, + 0x61, 0x6c, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x76, + 0x63, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x85, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x76, 0x63, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x76, 0x63, 0x5f, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x86, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x70, 0x76, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x27, + 0x0a, 0x0f, 0x70, 0x76, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x87, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x76, 0x63, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x76, 0x63, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x88, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x76, + 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x76, 0x63, 0x5f, 0x69, + 0x73, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x89, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x70, 0x76, 0x63, 0x49, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x3a, 0x0a, 0x19, 0x70, 0x76, + 0x63, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x8a, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, + 0x70, 0x76, 0x63, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x70, 0x76, 0x63, 0x5f, 0x61, 0x6c, + 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, + 0x18, 0x8b, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x70, 0x76, 0x63, 0x41, 0x6c, 0x6c, 0x6f, + 0x77, 0x65, 0x64, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x12, 0x32, 0x0a, + 0x15, 0x70, 0x76, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, + 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x96, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, + 0x76, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x76, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, + 0x18, 0x97, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x76, 0x43, 0x61, 0x70, 0x61, 0x63, + 0x69, 0x74, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x76, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x98, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x70, + 0x76, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, + 0x70, 0x76, 0x5f, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x18, 0x99, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x76, 0x52, 0x65, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x76, 0x5f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x72, 0x65, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x9a, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x76, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, + 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x76, 0x5f, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x5f, 0x72, 0x65, 0x66, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x9b, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x70, 0x76, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, + 0x65, 0x66, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, + 0x76, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x9c, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x70, 0x76, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x76, 0x5f, + 0x69, 0x73, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x9d, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x70, 0x76, 0x49, 0x73, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x76, + 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x9e, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x76, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x64, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x76, 0x5f, 0x63, 0x73, 0x69, 0x5f, 0x64, 0x72, 0x69, 0x76, + 0x65, 0x72, 0x18, 0x9f, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x76, 0x43, 0x73, 0x69, + 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x76, 0x5f, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0xa0, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x76, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, 0x76, + 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x5f, 0x7a, + 0x6f, 0x6e, 0x65, 0x73, 0x18, 0xa1, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x70, 0x76, 0x4e, + 0x6f, 0x64, 0x65, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x5a, 0x6f, 0x6e, 0x65, 0x73, + 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x63, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x65, 0x72, 0x18, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x63, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x63, 0x5f, 0x72, + 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0xab, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x63, 0x52, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x73, 0x63, 0x5f, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, + 0xac, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x73, 0x63, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x73, + 0x63, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x65, + 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xad, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x16, 0x73, 0x63, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x78, + 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4f, 0x0a, 0x0d, 0x73, 0x63, 0x5f, 0x70, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0xae, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x53, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x63, 0x50, 0x61, + 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x15, 0x73, 0x63, 0x5f, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, + 0x73, 0x18, 0xaf, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x73, 0x63, 0x41, 0x6c, 0x6c, 0x6f, + 0x77, 0x65, 0x64, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x12, 0x29, 0x0a, + 0x10, 0x73, 0x63, 0x5f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0xb0, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x63, 0x4d, 0x6f, 0x75, 0x6e, + 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x73, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xb1, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x73, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x6e, 0x73, 0x5f, 0x66, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x18, 0xb2, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, + 0x6e, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x12, 0x2b, 0x0a, 0x11, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, + 0x79, 0x18, 0xb3, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x70, + 0x75, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x31, 0x0a, 0x14, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, + 0x79, 0x18, 0xb4, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6e, 0x6f, 0x64, 0x65, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x1e, 0x0a, 0x0a, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0xb5, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x33, 0x0a, 0x0b, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x74, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x18, 0xb6, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, + 0x54, 0x61, 0x69, 0x6e, 0x74, 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x54, 0x61, 0x69, 0x6e, 0x74, + 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, + 0xb7, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x12, 0x29, 0x0a, 0x10, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x18, 0xb8, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x6f, + 0x64, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x12, 0x29, 0x0a, 0x10, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x70, + 0x18, 0xb9, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x45, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x49, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xba, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x6e, 0x6f, 0x64, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2d, 0x0a, 0x12, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0xbb, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x6e, + 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6f, 0x73, 0x18, 0xbc, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, + 0x64, 0x65, 0x4f, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0xbd, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0xbe, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x68, 0x70, 0x61, 0x5f, 0x6d, 0x69, + 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0xc8, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0e, 0x68, 0x70, 0x61, 0x4d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x73, 0x12, 0x29, 0x0a, 0x10, 0x68, 0x70, 0x61, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x70, + 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0xc9, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x68, 0x70, + 0x61, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x31, 0x0a, 0x14, + 0x68, 0x70, 0x61, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x73, 0x18, 0xca, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x68, 0x70, 0x61, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, + 0x31, 0x0a, 0x14, 0x68, 0x70, 0x61, 0x5f, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x72, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0xcb, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, + 0x68, 0x70, 0x61, 0x44, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x68, 0x70, 0x61, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0xcc, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, + 0x68, 0x70, 0x61, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x1e, 0x0a, 0x0a, 0x68, 0x70, 0x61, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xcd, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x68, 0x70, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x3c, 0x0a, 0x1a, 0x68, 0x70, 0x61, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x5f, + 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xce, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x68, 0x70, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x55, 0x70, + 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, + 0x1c, 0x68, 0x70, 0x61, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x5f, + 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xcf, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x68, 0x70, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x6f, + 0x77, 0x6e, 0x53, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x27, 0x0a, 0x0f, 0x76, 0x70, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0xd2, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x76, 0x70, 0x61, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x76, 0x70, 0x61, 0x5f, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0xd3, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x76, 0x70, 0x61, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, + 0x65, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x19, 0x76, 0x70, 0x61, 0x5f, 0x72, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0xd4, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x76, 0x70, 0x61, + 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x70, 0x61, 0x5f, 0x63, 0x70, 0x75, 0x5f, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0xd5, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x76, + 0x70, 0x61, 0x43, 0x70, 0x75, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x11, 0x76, + 0x70, 0x61, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x18, 0xd6, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x70, 0x61, 0x4d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x76, 0x70, 0x61, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xd7, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, + 0x70, 0x61, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0xdc, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6c, 0x69, 0x6d, 0x69, + 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x2b, 0x0a, 0x11, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0xdd, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x38, 0x0a, + 0x18, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x68, 0x61, 0x73, + 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0xde, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x15, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x48, 0x61, 0x73, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x70, 0x75, 0x18, 0xdf, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x4d, 0x61, 0x78, 0x43, 0x70, 0x75, 0x12, 0x34, 0x0a, 0x16, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x18, 0xe0, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, + 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x2e, 0x0a, + 0x13, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, + 0x5f, 0x63, 0x70, 0x75, 0x18, 0xe1, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x43, 0x70, 0x75, 0x12, 0x34, 0x0a, + 0x16, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x6d, 0x69, 0x6e, + 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0xe2, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x4d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x12, 0x41, 0x0a, 0x1d, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x18, 0xe3, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x19, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x70, + 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x47, 0x0a, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0xe4, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x1c, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, + 0x45, 0x0a, 0x1f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x63, 0x70, 0x75, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0xe5, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1b, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x43, 0x70, 0x75, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x22, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, + 0x72, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0xe6, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x1e, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0xe7, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x10, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xf0, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, + 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xf1, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x1a, 0x42, 0x0a, 0x14, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x22, 0x46, 0x0a, 0x0a, 0x50, 0x6f, 0x64, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x38, + 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x22, 0xb0, 0x01, 0x0a, 0x10, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x72, 0x65, 0x61, 0x64, 0x79, 0x12, 0x23, 0x0a, + 0x0d, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x22, 0x8b, 0x01, 0x0a, 0x11, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x0a, + 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8d, 0x02, 0x0a, 0x11, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x63, 0x70, 0x75, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x63, + 0x6f, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x63, 0x70, 0x75, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x4d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, + 0x73, 0x12, 0x32, 0x0a, 0x15, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x13, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, + 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x70, 0x75, 0x5f, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x73, 0x5f, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x13, 0x63, 0x70, 0x75, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x4d, + 0x69, 0x6c, 0x6c, 0x69, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x73, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0x9d, 0x01, 0x0a, 0x13, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x28, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x12, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, + 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x51, 0x0a, 0x16, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x74, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x14, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbd, 0x01, 0x0a, + 0x13, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x76, + 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x29, 0x0a, 0x10, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x74, 0x6f, 0x72, 0x61, + 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x22, 0xc2, 0x01, 0x0a, + 0x10, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x38, 0x0a, 0x0b, + 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6c, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x74, 0x6f, 0x6c, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x39, 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x22, 0x81, 0x01, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x65, + 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x73, 0x12, 0x31, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xb0, 0x01, 0x0a, 0x0a, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, + 0x34, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x31, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x08, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xc6, 0x01, 0x0a, 0x0c, 0x4a, 0x6f, 0x62, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 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, 0x16, 0x0a, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x73, 0x74, 0x5f, + 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6c, + 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, + 0x3b, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x36, 0x0a, 0x0c, + 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4a, 0x6f, 0x62, 0x54, + 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x6a, 0x6f, 0x62, 0x54, 0x65, 0x6d, 0x70, + 0x6c, 0x61, 0x74, 0x65, 0x22, 0x7d, 0x0a, 0x12, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x4a, 0x6f, + 0x62, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x69, 0x64, + 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x23, + 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x22, 0xda, 0x01, 0x0a, 0x0b, 0x4a, 0x6f, 0x62, 0x54, 0x65, 0x6d, 0x70, 0x6c, + 0x61, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0c, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x4c, 0x69, + 0x6d, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, + 0x6c, 0x69, 0x73, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x61, + 0x6c, 0x6c, 0x65, 0x6c, 0x69, 0x73, 0x6d, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, + 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, + 0x22, 0xba, 0x02, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x40, + 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x12, 0x4f, 0x0a, 0x15, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x72, 0x5f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x13, 0x6c, 0x6f, + 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x61, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x1a, 0x3b, 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xdc, 0x01, + 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, + 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x1b, 0x0a, 0x09, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x70, 0x70, + 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x61, 0x70, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x70, 0x0a, 0x13, + 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x02, 0x69, 0x70, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, + 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x70, 0x5f, 0x6d, 0x6f, 0x64, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x69, 0x70, 0x4d, 0x6f, 0x64, 0x65, 0x22, 0xf3, + 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x12, 0x24, 0x0a, 0x03, + 0x74, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x54, 0x4c, 0x53, 0x52, 0x03, 0x74, + 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x62, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x42, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x12, 0x4f, 0x0a, 0x15, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x13, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x49, 0x6e, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x22, 0x4c, 0x0a, 0x0b, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, + 0x75, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x52, 0x05, 0x70, 0x61, 0x74, + 0x68, 0x73, 0x22, 0x70, 0x0a, 0x0b, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, + 0x68, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x74, 0x68, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x52, 0x07, 0x62, 0x61, 0x63, + 0x6b, 0x65, 0x6e, 0x64, 0x22, 0xfe, 0x01, 0x0a, 0x0e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x2a, 0x0a, + 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x50, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x41, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x0a, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, + 0x54, 0x4c, 0x53, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x05, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xd0, 0x02, 0x0a, 0x1c, 0x50, + 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x43, + 0x6c, 0x61, 0x69, 0x6d, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x51, 0x0a, 0x15, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x31, + 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x12, 0x4c, 0x0a, 0x14, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x4e, + 0x6f, 0x64, 0x65, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x52, 0x12, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x12, + 0x34, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, + 0x5f, 0x62, 0x79, 0x5f, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x64, 0x42, 0x79, 0x50, 0x6f, 0x64, 0x73, 0x22, 0x98, 0x02, + 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x46, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x40, + 0x0a, 0x06, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, + 0x1a, 0x3b, 0x0a, 0x0d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, + 0x0b, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x90, 0x01, 0x0a, 0x12, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x12, + 0x3b, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x3d, 0x0a, 0x09, + 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x52, 0x09, 0x70, 0x72, 0x65, 0x66, 0x65, 0x72, 0x72, 0x65, 0x64, 0x22, 0xc6, 0x01, 0x0a, 0x0c, + 0x50, 0x56, 0x43, 0x43, 0x6f, 0x6e, 0x64, 0x69, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, + 0x73, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x62, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0xf5, 0x02, 0x0a, 0x17, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x49, 0x0a, 0x08, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x73, + 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x2e, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x08, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x35, 0x0a, 0x09, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x08, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x52, + 0x65, 0x66, 0x12, 0x3b, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x56, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x0c, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x39, 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x61, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0c, 0x6e, 0x6f, + 0x64, 0x65, 0x41, 0x66, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, + 0x3b, 0x0a, 0x0d, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, 0x01, 0x0a, + 0x10, 0x50, 0x56, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0xd5, 0x02, 0x0a, 0x0e, 0x50, 0x56, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x03, 0x63, 0x73, 0x69, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x53, 0x49, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x03, + 0x63, 0x73, 0x69, 0x12, 0x39, 0x0a, 0x09, 0x68, 0x6f, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x48, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x68, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x29, + 0x0a, 0x03, 0x6e, 0x66, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x46, 0x53, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x03, 0x6e, 0x66, 0x73, 0x12, 0x59, 0x0a, 0x11, 0x76, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x56, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x10, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa5, 0x02, 0x0a, 0x0f, 0x43, 0x53, + 0x49, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, + 0x72, 0x69, 0x76, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, + 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x76, 0x6f, + 0x6c, 0x75, 0x6d, 0x65, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x73, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x73, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, + 0x12, 0x5a, 0x0a, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x53, 0x49, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x76, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x1a, 0x43, 0x0a, 0x15, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x3e, 0x0a, 0x14, 0x48, 0x6f, 0x73, 0x74, 0x50, 0x61, 0x74, 0x68, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x5a, 0x0a, 0x0f, 0x4e, 0x46, 0x53, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0xbe, 0x03, + 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, + 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, + 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x47, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x5f, + 0x74, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, + 0x67, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x11, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x65, 0x64, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x69, 0x65, 0x73, 0x12, 0x23, 0x0a, + 0x0d, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x62, 0x69, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x5f, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x61, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x45, 0x78, 0x70, 0x61, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x1a, + 0x3d, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd1, + 0x01, 0x0a, 0x10, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x69, 0x6e, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x66, + 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x73, 0x12, 0x48, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xdf, 0x03, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x31, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, + 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x0b, + 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, + 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x43, 0x61, 0x70, + 0x61, 0x63, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x70, 0x61, + 0x63, 0x69, 0x74, 0x79, 0x12, 0x46, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x41, + 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x29, 0x0a, 0x06, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, + 0x06, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x43, 0x61, 0x70, 0x61, 0x63, + 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x41, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x6a, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x61, 0x69, 0x6e, + 0x74, 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, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x66, 0x66, + 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, + 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x41, 0x64, 0x64, 0x65, 0x64, + 0x22, 0x3b, 0x0a, 0x0b, 0x4e, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0xcf, 0x01, + 0x0a, 0x0d, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, + 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, + 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, + 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6c, 0x61, 0x73, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, + 0x8d, 0x03, 0x0a, 0x0e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x49, + 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x75, 0x75, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x55, 0x75, + 0x69, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x62, 0x6f, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x6f, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6b, + 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x73, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x73, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x3a, 0x0a, + 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x17, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, + 0x6d, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x6b, 0x75, 0x62, + 0x65, 0x6c, 0x65, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x6b, 0x75, 0x62, 0x65, 0x6c, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x79, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, + 0x6b, 0x75, 0x62, 0x65, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, 0x22, 0x0a, 0x0c, 0x61, + 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x61, 0x72, 0x63, 0x68, 0x69, 0x74, 0x65, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, + 0x40, 0x0a, 0x09, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x69, 0x7a, 0x65, 0x42, 0x79, 0x74, 0x65, + 0x73, 0x22, 0x68, 0x0a, 0x10, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x17, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6c, + 0x61, 0x62, 0x65, 0x6c, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x54, 0x65, 0x72, 0x6d, 0x52, 0x15, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x45, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x14, + 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x54, 0x65, 0x72, 0x6d, 0x12, 0x50, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x70, 0x6f, 0x6c, 0x6f, 0x67, 0x79, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x54, 0x65, 0x72, 0x6d, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9b, 0x01, 0x0a, 0x0e, 0x54, 0x6f, 0x6c, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, + 0x06, 0x65, 0x66, 0x66, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, + 0x66, 0x66, 0x65, 0x63, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x11, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x73, 0x22, 0x3e, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x12, 0x2e, 0x0a, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x54, 0x65, 0x72, 0x6d, 0x52, 0x05, 0x74, + 0x65, 0x72, 0x6d, 0x73, 0x22, 0xa4, 0x01, 0x0a, 0x10, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x54, 0x65, 0x72, 0x6d, 0x12, 0x4c, 0x0a, 0x11, 0x6d, 0x61, 0x74, + 0x63, 0x68, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, + 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x45, 0x78, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0c, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x5f, 0x0a, 0x17, 0x4e, + 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0xa5, 0x02, 0x0a, + 0x0a, 0x48, 0x50, 0x41, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x40, 0x0a, 0x10, 0x73, + 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x63, 0x61, 0x6c, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x66, 0x52, 0x0e, 0x73, + 0x63, 0x61, 0x6c, 0x65, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x66, 0x12, 0x2b, 0x0a, + 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x63, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x2f, 0x0a, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x42, + 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x52, 0x08, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, + 0x72, 0x12, 0x41, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x73, 0x22, 0x59, 0x0a, 0x0e, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x54, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x52, 0x65, 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0xe9, 0x01, 0x0a, 0x09, 0x48, 0x50, 0x41, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x35, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x08, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x48, 0x50, 0x41, 0x50, 0x6f, 0x64, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x04, 0x70, + 0x6f, 0x64, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x48, 0x50, 0x41, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x52, 0x08, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x22, 0x6b, 0x0a, 0x11, 0x48, + 0x50, 0x41, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x86, 0x01, 0x0a, 0x0d, 0x48, 0x50, 0x41, + 0x50, 0x6f, 0x64, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x31, 0x0a, 0x06, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1f, 0x0a, + 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0xcf, 0x01, 0x0a, 0x0f, 0x48, 0x50, 0x41, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x45, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0f, 0x64, 0x65, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x31, 0x0a, 0x06, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, + 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x11, 0x48, 0x50, 0x41, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x31, 0x0a, 0x06, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x1f, 0x0a, 0x0b, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0xa9, 0x01, 0x0a, 0x11, 0x48, 0x50, 0x41, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x1a, + 0x3b, 0x0a, 0x0d, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7b, 0x0a, 0x12, + 0x48, 0x50, 0x41, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, + 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x8c, 0x02, 0x0a, 0x10, 0x48, 0x50, + 0x41, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x3c, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, + 0x41, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x43, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x50, 0x6f, 0x64, 0x73, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x04, 0x70, 0x6f, + 0x64, 0x73, 0x12, 0x36, 0x0a, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x52, 0x06, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x3c, 0x0a, 0x08, 0x65, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x08, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x22, 0x93, 0x01, 0x0a, 0x18, 0x48, 0x50, 0x41, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x55, + 0x74, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x41, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x7d, + 0x0a, 0x14, 0x48, 0x50, 0x41, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x64, 0x73, + 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x31, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x48, 0x50, 0x41, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x41, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb7, 0x01, + 0x0a, 0x16, 0x48, 0x50, 0x41, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x45, 0x0a, 0x10, 0x64, 0x65, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0f, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x31, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x4d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa6, 0x01, 0x0a, 0x18, 0x48, 0x50, 0x41, 0x43, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x12, 0x31, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, + 0x41, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, + 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x15, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x41, 0x76, 0x65, 0x72, 0x61, 0x67, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x9e, 0x01, 0x0a, 0x0c, 0x48, 0x50, 0x41, 0x43, 0x6f, 0x6e, 0x64, 0x69, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6c, + 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0x79, 0x0a, 0x0b, 0x48, 0x50, 0x41, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, + 0x12, 0x32, 0x0a, 0x08, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x53, + 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x07, 0x73, 0x63, 0x61, + 0x6c, 0x65, 0x55, 0x70, 0x12, 0x36, 0x0a, 0x0a, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x5f, 0x64, 0x6f, + 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x48, 0x50, 0x41, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, + 0x73, 0x52, 0x09, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x22, 0xae, 0x01, 0x0a, + 0x0f, 0x48, 0x50, 0x41, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, + 0x12, 0x40, 0x0a, 0x1c, 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x1a, 0x73, 0x74, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x69, 0x6e, 0x64, 0x6f, 0x77, 0x53, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x34, 0x0a, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x48, 0x50, 0x41, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x52, 0x08, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0x63, 0x0a, + 0x10, 0x48, 0x50, 0x41, 0x53, 0x63, 0x61, 0x6c, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0d, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x53, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x73, 0x22, 0xbc, 0x02, 0x0a, 0x0a, 0x56, 0x50, 0x41, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x33, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, + 0x50, 0x41, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x66, 0x52, 0x09, 0x74, 0x61, 0x72, + 0x67, 0x65, 0x74, 0x52, 0x65, 0x66, 0x12, 0x3c, 0x0a, 0x0d, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x50, 0x41, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x12, 0x42, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x50, 0x41, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x41, 0x0a, 0x0e, 0x72, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x50, 0x41, 0x52, 0x65, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x72, 0x65, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x0a, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x50, 0x41, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x57, 0x0a, 0x0c, 0x56, 0x50, 0x41, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, + 0x66, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x70, 0x69, + 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x0a, 0x0f, 0x56, 0x50, + 0x41, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1f, 0x0a, + 0x0b, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x73, 0x22, 0x66, 0x0a, 0x11, 0x56, 0x50, 0x41, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x51, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x50, 0x41, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, + 0x72, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x22, 0xdf, 0x03, 0x0a, 0x1a, 0x56, 0x50, + 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, + 0x6f, 0x64, 0x65, 0x12, 0x53, 0x0a, 0x0b, 0x6d, 0x69, 0x6e, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x56, 0x50, 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4d, 0x69, 0x6e, + 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x69, + 0x6e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x53, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, + 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x50, 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x4d, 0x61, 0x78, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x31, 0x0a, + 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, 0x6e, + 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x3d, 0x0a, + 0x0f, 0x4d, 0x69, 0x6e, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, + 0x4d, 0x61, 0x78, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x74, 0x0a, 0x11, 0x56, + 0x50, 0x41, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x5f, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x65, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x50, 0x41, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x92, 0x05, 0x0a, 0x1a, 0x56, 0x50, 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x50, 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x63, + 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, + 0x53, 0x0a, 0x0b, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x50, + 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x42, + 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x53, 0x0a, 0x0b, 0x75, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, + 0x75, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x56, 0x50, 0x41, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, + 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x70, + 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x75, + 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x5f, 0x0a, 0x0f, 0x75, 0x6e, 0x63, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x05, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x50, 0x41, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x55, 0x6e, 0x63, 0x61, 0x70, 0x70, 0x65, 0x64, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x75, 0x6e, 0x63, 0x61, + 0x70, 0x70, 0x65, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0x39, 0x0a, 0x0b, 0x54, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x42, 0x6f, + 0x75, 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x55, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75, + 0x6e, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x55, 0x6e, 0x63, 0x61, 0x70, 0x70, 0x65, 0x64, 0x54, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x9e, 0x01, 0x0a, 0x0c, 0x56, 0x50, 0x41, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 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, 0x16, 0x0a, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x11, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x2e, 0x0a, 0x06, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x49, 0x74, 0x65, 0x6d, 0x52, 0x06, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x22, 0xd8, 0x05, 0x0a, + 0x0e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, + 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x12, 0x50, 0x0a, 0x0e, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, + 0x74, 0x65, 0x6d, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x53, 0x0a, 0x0f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, + 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x64, 0x65, 0x66, 0x61, + 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x03, 0x6d, 0x61, + 0x78, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x2e, + 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x31, 0x0a, + 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, + 0x65, 0x6d, 0x2e, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x6d, 0x69, 0x6e, + 0x12, 0x67, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x2e, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x1a, 0x40, 0x0a, 0x12, 0x44, 0x65, 0x66, + 0x61, 0x75, 0x6c, 0x74, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x44, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x36, + 0x0a, 0x08, 0x4d, 0x61, 0x78, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x36, 0x0a, 0x08, 0x4d, 0x69, 0x6e, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x47, + 0x0a, 0x19, 0x4d, 0x61, 0x78, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd1, 0x01, 0x0a, 0x15, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x12, 0x45, 0x0a, 0x1f, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x61, 0x75, 0x74, 0x6f, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x75, 0x6c, 0x6c, + 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, + 0x69, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x35, 0x0a, 0x0b, 0x52, + 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x26, 0x0a, 0x05, 0x72, 0x75, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x05, 0x72, 0x75, 0x6c, + 0x65, 0x73, 0x22, 0x84, 0x01, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x12, + 0x1d, 0x0a, 0x0a, 0x61, 0x70, 0x69, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x70, 0x69, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x1c, + 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x65, 0x72, 0x62, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x65, 0x72, + 0x62, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22, 0x7e, 0x0a, 0x12, 0x52, 0x6f, 0x6c, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x36, 0x0a, 0x08, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x08, 0x73, + 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x08, 0x72, 0x6f, 0x6c, 0x65, 0x5f, + 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x52, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x22, 0x77, 0x0a, 0x12, 0x52, 0x6f, 0x6c, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x70, 0x69, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x70, 0x69, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x22, 0x54, 0x0a, 0x0d, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, + 0x70, 0x69, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x61, 0x70, 0x69, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xe4, 0x02, 0x0a, 0x17, 0x4b, 0x65, 0x64, + 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x44, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, + 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, + 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, + 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x29, 0x0a, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, + 0x67, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0xb5, 0x01, 0x0a, 0x17, 0x4b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x49, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x65, 0x64, 0x61, 0x53, + 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xab, 0x01, 0x0a, 0x19, 0x4b, 0x65, 0x64, 0x61, + 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, 0xd8, 0x03, 0x0a, 0x18, 0x4b, 0x61, 0x72, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 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, + 0x42, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x61, 0x72, + 0x70, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, + 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, + 0x52, 0x08, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x40, 0x0a, 0x0c, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x61, 0x72, 0x70, 0x65, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0c, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0e, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, + 0x65, 0x66, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x44, 0x0a, 0x06, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, + 0x69, 0x6d, 0x69, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x22, 0xac, 0x01, 0x0a, 0x1a, 0x4b, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, + 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6c, 0x61, 0x73, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x22, + 0xb3, 0x01, 0x0a, 0x11, 0x4b, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x43, 0x61, 0x70, + 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, + 0x3a, 0x0a, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, 0x65, + 0x72, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x2e, 0x4f, 0x74, 0x68, 0x65, 0x72, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x1a, 0x38, 0x0a, 0x0a, 0x4f, + 0x74, 0x68, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5c, 0x0a, 0x14, 0x4b, 0x61, 0x72, 0x70, 0x65, 0x6e, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x1a, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x22, 0xc5, 0x04, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x73, 0x12, 0x49, 0x0a, 0x12, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x11, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x88, + 0x01, 0x01, 0x12, 0x47, 0x0a, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x48, 0x01, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x36, 0x0a, 0x0b, 0x6b, + 0x69, 0x6e, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0e, + 0x32, 0x15, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4b, 0x38, 0x73, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0a, 0x6b, 0x69, 0x6e, 0x64, 0x46, 0x69, 0x6c, + 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x65, 0x78, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x48, + 0x02, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x88, 0x01, + 0x01, 0x12, 0x4b, 0x0a, 0x13, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x48, 0x03, 0x52, 0x12, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x25, + 0x0a, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x18, 0x10, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0e, 0x6e, 0x6f, 0x64, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, + 0x34, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, + 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x06, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x15, 0x0a, 0x13, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x42, 0x14, 0x0a, 0x12, + 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x94, 0x04, 0x0a, 0x1a, + 0x50, 0x6f, 0x64, 0x44, 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x64, + 0x67, 0x65, 0x74, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, + 0x6e, 0x5f, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, + 0x27, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x75, 0x6e, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x55, 0x6e, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x64, 0x65, 0x73, 0x69, + 0x72, 0x65, 0x64, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x79, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x69, + 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x64, 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x41, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x65, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x64, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x5f, 0x0a, 0x0f, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x44, 0x69, + 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x44, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x64, 0x44, 0x69, 0x73, 0x72, 0x75, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, + 0x41, 0x0a, 0x13, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xae, 0x01, 0x0a, 0x1c, 0x50, 0x6f, 0x64, 0x44, 0x69, 0x73, 0x72, 0x75, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x12, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x69, 0x6d, 0x65, 0x22, 0xa3, 0x04, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x51, 0x75, 0x6f, 0x74, 0x61, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x4d, 0x0a, 0x0b, + 0x68, 0x61, 0x72, 0x64, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, + 0x48, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0a, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x04, 0x75, + 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x04, 0x75, 0x73, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, + 0x56, 0x0a, 0x0e, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x3e, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, + 0x3d, 0x0a, 0x0f, 0x48, 0x61, 0x72, 0x64, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x37, + 0x0a, 0x09, 0x55, 0x73, 0x65, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x53, 0x63, 0x6f, 0x70, 0x65, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa8, 0x01, 0x0a, 0x16, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 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, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x22, 0xd0, 0x07, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x0e, + 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, + 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x75, 0x69, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x55, 0x69, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x09, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, + 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x29, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, + 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6e, 0x76, 0x6f, + 0x6c, 0x76, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x69, 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, + 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3a, 0x0a, 0x19, 0x69, 0x6e, + 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x69, + 0x6e, 0x76, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x31, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x15, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x43, + 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, + 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, + 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, + 0x74, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x37, + 0x0a, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x18, 0x2b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x08, 0x6c, + 0x61, 0x73, 0x74, 0x53, 0x65, 0x65, 0x6e, 0x12, 0x24, 0x0a, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x41, 0x67, 0x65, 0x12, 0x24, 0x0a, + 0x0e, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x5f, 0x61, 0x67, 0x65, 0x18, + 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x41, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, + 0x5f, 0x61, 0x67, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, + 0x53, 0x65, 0x65, 0x6e, 0x41, 0x67, 0x65, 0x2a, 0xf7, 0x07, 0x0a, 0x0d, 0x4b, 0x38, 0x73, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x1b, 0x4b, 0x38, 0x53, + 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x4b, 0x38, + 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x45, + 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x4b, 0x38, + 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x52, 0x45, + 0x50, 0x4c, 0x49, 0x43, 0x41, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x02, 0x12, 0x20, 0x0a, 0x1c, 0x4b, + 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x46, 0x55, 0x4c, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x03, 0x12, 0x1e, 0x0a, + 0x1a, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x44, 0x41, 0x45, 0x4d, 0x4f, 0x4e, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, + 0x13, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x4a, 0x4f, 0x42, 0x10, 0x05, 0x12, 0x1c, 0x0a, 0x18, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, + 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x43, 0x52, 0x4f, 0x4e, 0x5f, 0x4a, + 0x4f, 0x42, 0x10, 0x06, 0x12, 0x2a, 0x0a, 0x26, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x52, 0x10, 0x07, + 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, + 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x08, 0x12, 0x1d, 0x0a, 0x19, 0x4b, 0x38, 0x53, + 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x41, 0x4d, + 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x09, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x38, 0x53, 0x5f, + 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, + 0x10, 0x0a, 0x12, 0x1b, 0x0a, 0x17, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x0b, 0x12, + 0x1d, 0x0a, 0x19, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x0c, 0x12, 0x1b, + 0x0a, 0x17, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, + 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x0d, 0x12, 0x1e, 0x0a, 0x1a, 0x4b, + 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x43, + 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x41, 0x50, 0x10, 0x0e, 0x12, 0x25, 0x0a, 0x21, 0x4b, + 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, + 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, + 0x10, 0x0f, 0x12, 0x2b, 0x0a, 0x27, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, + 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x10, 0x12, + 0x21, 0x0a, 0x1d, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, + 0x10, 0x11, 0x12, 0x20, 0x0a, 0x1c, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x52, 0x47, 0x4f, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, + 0x55, 0x54, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, + 0x41, 0x4c, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x53, 0x43, 0x41, 0x4c, 0x45, + 0x52, 0x10, 0x13, 0x12, 0x2b, 0x0a, 0x27, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, + 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x56, 0x45, 0x52, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x5f, + 0x50, 0x4f, 0x44, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x53, 0x43, 0x41, 0x4c, 0x45, 0x52, 0x10, 0x14, + 0x12, 0x1f, 0x0a, 0x1b, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, + 0x49, 0x4e, 0x44, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, + 0x15, 0x12, 0x23, 0x0a, 0x1f, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x43, 0x43, + 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x16, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, + 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x10, 0x17, + 0x12, 0x20, 0x0a, 0x1c, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, + 0x49, 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, + 0x10, 0x18, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x45, 0x44, 0x41, 0x5f, 0x53, 0x43, 0x41, 0x4c, 0x45, + 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x19, 0x12, 0x26, 0x0a, 0x22, 0x4b, 0x38, + 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x41, + 0x52, 0x50, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x10, 0x1a, 0x12, 0x29, 0x0a, 0x25, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, + 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x44, 0x49, 0x53, 0x52, 0x55, 0x50, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x44, 0x47, 0x45, 0x54, 0x10, 0x1b, 0x12, 0x22, 0x0a, + 0x1e, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x10, + 0x1c, 0x2a, 0x48, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x45, 0x6e, 0x75, 0x6d, + 0x12, 0x22, 0x0a, 0x1e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x42, 0x59, 0x5f, 0x45, 0x4e, 0x55, + 0x4d, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x42, 0x59, + 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x53, 0x43, 0x10, 0x01, 0x2a, 0xd4, 0x01, 0x0a, 0x15, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x27, 0x0a, 0x23, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, + 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, + 0x0a, 0x1a, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, + 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x22, + 0x0a, 0x1e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, + 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, + 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, + 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x58, + 0x49, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, + 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, + 0x52, 0x5f, 0x44, 0x4f, 0x45, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, + 0x10, 0x04, 0x2a, 0xa6, 0x01, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x22, 0x57, + 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, + 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x41, 0x43, + 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, + 0x41, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, + 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x57, 0x4f, + 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, + 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x42, 0x4f, 0x54, 0x48, 0x10, 0x03, 0x42, 0x84, 0x01, 0x0a, 0x0a, + 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x76, 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x69, 0x6e, + 0x63, 0x2f, 0x7a, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, + 0x58, 0xaa, 0x02, 0x06, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x70, 0x69, + 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x70, 0x69, 0x3a, 0x3a, + 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_api_v1_common_proto_rawDescOnce sync.Once + file_api_v1_common_proto_rawDescData = file_api_v1_common_proto_rawDesc +) + +func file_api_v1_common_proto_rawDescGZIP() []byte { + file_api_v1_common_proto_rawDescOnce.Do(func() { + file_api_v1_common_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_v1_common_proto_rawDescData) + }) + return file_api_v1_common_proto_rawDescData +} + +var file_api_v1_common_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_api_v1_common_proto_msgTypes = make([]protoimpl.MessageInfo, 153) +var file_api_v1_common_proto_goTypes = []interface{}{ + (K8SObjectKind)(0), // 0: api.v1.K8sObjectKind + (OrderByEnum)(0), // 1: api.v1.OrderByEnum + (LabelSelectorOperator)(0), // 2: api.v1.LabelSelectorOperator + (WorkloadStatusFilter)(0), // 3: api.v1.WorkloadStatusFilter + (*AuditLogEntry)(nil), // 4: api.v1.AuditLogEntry + (*Pagination)(nil), // 5: api.v1.Pagination + (*CostInfo)(nil), // 6: api.v1.CostInfo + (*ResourceMetrics)(nil), // 7: api.v1.ResourceMetrics + (*ForecastResourceMetrics)(nil), // 8: api.v1.ForecastResourceMetrics + (*ResourceSummary)(nil), // 9: api.v1.ResourceSummary + (*WorkloadItem)(nil), // 10: api.v1.WorkloadItem + (*ContainerRuntimeInfo)(nil), // 11: api.v1.ContainerRuntimeInfo + (*NodeInfo)(nil), // 12: api.v1.NodeInfo + (*ResourceInfo)(nil), // 13: api.v1.ResourceInfo + (*Node)(nil), // 14: api.v1.Node + (*AttachedVolume)(nil), // 15: api.v1.AttachedVolume + (*NodeGroup)(nil), // 16: api.v1.NodeGroup + (*CostDataPoint)(nil), // 17: api.v1.CostDataPoint + (*ResourceDataPoint)(nil), // 18: api.v1.ResourceDataPoint + (*SavingsData)(nil), // 19: api.v1.SavingsData + (*SavingsDataPoint)(nil), // 20: api.v1.SavingsDataPoint + (*SavingsTimeSeries)(nil), // 21: api.v1.SavingsTimeSeries + (*LabelSelectorRequirement)(nil), // 22: api.v1.LabelSelectorRequirement + (*LabelSelector)(nil), // 23: api.v1.LabelSelector + (*RegexPattern)(nil), // 24: api.v1.RegexPattern + (*ResourceDetails)(nil), // 25: api.v1.ResourceDetails + (*PodDetails)(nil), // 26: api.v1.PodDetails + (*ContainerSummary)(nil), // 27: api.v1.ContainerSummary + (*DeploymentDetails)(nil), // 28: api.v1.DeploymentDetails + (*ContainerTemplate)(nil), // 29: api.v1.ContainerTemplate + (*DeploymentCondition)(nil), // 30: api.v1.DeploymentCondition + (*StatefulSetDetails)(nil), // 31: api.v1.StatefulSetDetails + (*VolumeClaimTemplate)(nil), // 32: api.v1.VolumeClaimTemplate + (*DaemonSetDetails)(nil), // 33: api.v1.DaemonSetDetails + (*ReplicaSetDetails)(nil), // 34: api.v1.ReplicaSetDetails + (*JobDetails)(nil), // 35: api.v1.JobDetails + (*JobCondition)(nil), // 36: api.v1.JobCondition + (*CronJobDetails)(nil), // 37: api.v1.CronJobDetails + (*ActiveJobReference)(nil), // 38: api.v1.ActiveJobReference + (*JobTemplate)(nil), // 39: api.v1.JobTemplate + (*ServiceDetails)(nil), // 40: api.v1.ServiceDetails + (*ServicePort)(nil), // 41: api.v1.ServicePort + (*LoadBalancerIngress)(nil), // 42: api.v1.LoadBalancerIngress + (*IngressDetails)(nil), // 43: api.v1.IngressDetails + (*IngressRule)(nil), // 44: api.v1.IngressRule + (*IngressPath)(nil), // 45: api.v1.IngressPath + (*IngressBackend)(nil), // 46: api.v1.IngressBackend + (*IngressTLS)(nil), // 47: api.v1.IngressTLS + (*PersistentVolumeClaimDetails)(nil), // 48: api.v1.PersistentVolumeClaimDetails + (*ResourceRequirements)(nil), // 49: api.v1.ResourceRequirements + (*VolumeNodeAffinity)(nil), // 50: api.v1.VolumeNodeAffinity + (*PVCCondition)(nil), // 51: api.v1.PVCCondition + (*PersistentVolumeDetails)(nil), // 52: api.v1.PersistentVolumeDetails + (*PVClaimReference)(nil), // 53: api.v1.PVClaimReference + (*PVVolumeSource)(nil), // 54: api.v1.PVVolumeSource + (*CSIVolumeSource)(nil), // 55: api.v1.CSIVolumeSource + (*HostPathVolumeSource)(nil), // 56: api.v1.HostPathVolumeSource + (*NFSVolumeSource)(nil), // 57: api.v1.NFSVolumeSource + (*StorageClassDetails)(nil), // 58: api.v1.StorageClassDetails + (*NamespaceDetails)(nil), // 59: api.v1.NamespaceDetails + (*NodeDetails)(nil), // 60: api.v1.NodeDetails + (*NodeTaint)(nil), // 61: api.v1.NodeTaint + (*NodeAddress)(nil), // 62: api.v1.NodeAddress + (*NodeCondition)(nil), // 63: api.v1.NodeCondition + (*NodeSystemInfo)(nil), // 64: api.v1.NodeSystemInfo + (*NodeImage)(nil), // 65: api.v1.NodeImage + (*TopologySelector)(nil), // 66: api.v1.TopologySelector + (*TopologySelectorTerm)(nil), // 67: api.v1.TopologySelectorTerm + (*TolerationInfo)(nil), // 68: api.v1.TolerationInfo + (*NodeSelector)(nil), // 69: api.v1.NodeSelector + (*NodeSelectorTerm)(nil), // 70: api.v1.NodeSelectorTerm + (*NodeSelectorRequirement)(nil), // 71: api.v1.NodeSelectorRequirement + (*HPADetails)(nil), // 72: api.v1.HPADetails + (*ScaleTargetRef)(nil), // 73: api.v1.ScaleTargetRef + (*HPAMetric)(nil), // 74: api.v1.HPAMetric + (*HPAResourceMetric)(nil), // 75: api.v1.HPAResourceMetric + (*HPAPodsMetric)(nil), // 76: api.v1.HPAPodsMetric + (*HPAObjectMetric)(nil), // 77: api.v1.HPAObjectMetric + (*HPAExternalMetric)(nil), // 78: api.v1.HPAExternalMetric + (*HPAMetricSelector)(nil), // 79: api.v1.HPAMetricSelector + (*HPAObjectReference)(nil), // 80: api.v1.HPAObjectReference + (*HPACurrentMetric)(nil), // 81: api.v1.HPACurrentMetric + (*HPACurrentResourceMetric)(nil), // 82: api.v1.HPACurrentResourceMetric + (*HPACurrentPodsMetric)(nil), // 83: api.v1.HPACurrentPodsMetric + (*HPACurrentObjectMetric)(nil), // 84: api.v1.HPACurrentObjectMetric + (*HPACurrentExternalMetric)(nil), // 85: api.v1.HPACurrentExternalMetric + (*HPACondition)(nil), // 86: api.v1.HPACondition + (*HPABehavior)(nil), // 87: api.v1.HPABehavior + (*HPAScalingRules)(nil), // 88: api.v1.HPAScalingRules + (*HPAScalingPolicy)(nil), // 89: api.v1.HPAScalingPolicy + (*VPADetails)(nil), // 90: api.v1.VPADetails + (*VPATargetRef)(nil), // 91: api.v1.VPATargetRef + (*VPAUpdatePolicy)(nil), // 92: api.v1.VPAUpdatePolicy + (*VPAResourcePolicy)(nil), // 93: api.v1.VPAResourcePolicy + (*VPAContainerResourcePolicy)(nil), // 94: api.v1.VPAContainerResourcePolicy + (*VPARecommendation)(nil), // 95: api.v1.VPARecommendation + (*VPAContainerRecommendation)(nil), // 96: api.v1.VPAContainerRecommendation + (*VPACondition)(nil), // 97: api.v1.VPACondition + (*LimitRangeDetails)(nil), // 98: api.v1.LimitRangeDetails + (*LimitRangeItem)(nil), // 99: api.v1.LimitRangeItem + (*ServiceAccountDetails)(nil), // 100: api.v1.ServiceAccountDetails + (*RoleDetails)(nil), // 101: api.v1.RoleDetails + (*RoleRule)(nil), // 102: api.v1.RoleRule + (*RoleBindingDetails)(nil), // 103: api.v1.RoleBindingDetails + (*RoleBindingSubject)(nil), // 104: api.v1.RoleBindingSubject + (*RoleReference)(nil), // 105: api.v1.RoleReference + (*KedaScaledObjectDetails)(nil), // 106: api.v1.KedaScaledObjectDetails + (*KedaScaledObjectTrigger)(nil), // 107: api.v1.KedaScaledObjectTrigger + (*KedaScaledObjectCondition)(nil), // 108: api.v1.KedaScaledObjectCondition + (*KarpenterResourceDetails)(nil), // 109: api.v1.KarpenterResourceDetails + (*KarpenterResourceCondition)(nil), // 110: api.v1.KarpenterResourceCondition + (*KarpenterCapacity)(nil), // 111: api.v1.KarpenterCapacity + (*KarpenterRequirement)(nil), // 112: api.v1.KarpenterRequirement + (*WorkloadFilters)(nil), // 113: api.v1.WorkloadFilters + (*PodDisruptionBudgetDetails)(nil), // 114: api.v1.PodDisruptionBudgetDetails + (*PodDisruptionBudgetCondition)(nil), // 115: api.v1.PodDisruptionBudgetCondition + (*ResourceQuotaDetails)(nil), // 116: api.v1.ResourceQuotaDetails + (*ResourceQuotaCondition)(nil), // 117: api.v1.ResourceQuotaCondition + (*Event)(nil), // 118: api.v1.Event + nil, // 119: api.v1.WorkloadItem.LabelsEntry + nil, // 120: api.v1.WorkloadItem.AnnotationsEntry + nil, // 121: api.v1.Node.LabelsEntry + nil, // 122: api.v1.Node.AnnotationsEntry + (*LabelSelector_Label)(nil), // 123: api.v1.LabelSelector.Label + nil, // 124: api.v1.LabelSelector.MatchLabelsEntry + nil, // 125: api.v1.ResourceDetails.ServiceSelectorEntry + nil, // 126: api.v1.ResourceDetails.ScParametersEntry + nil, // 127: api.v1.ServiceDetails.SelectorEntry + nil, // 128: api.v1.ResourceRequirements.RequestsEntry + nil, // 129: api.v1.ResourceRequirements.LimitsEntry + nil, // 130: api.v1.PersistentVolumeDetails.CapacityEntry + nil, // 131: api.v1.PVVolumeSource.VolumeAttributesEntry + nil, // 132: api.v1.CSIVolumeSource.VolumeAttributesEntry + nil, // 133: api.v1.StorageClassDetails.ParametersEntry + nil, // 134: api.v1.NamespaceDetails.ConditionsEntry + nil, // 135: api.v1.NodeDetails.CapacityEntry + nil, // 136: api.v1.NodeDetails.AllocatableEntry + nil, // 137: api.v1.TopologySelectorTerm.MatchLabelsEntry + nil, // 138: api.v1.HPAMetricSelector.SelectorEntry + nil, // 139: api.v1.VPAContainerResourcePolicy.MinAllowedEntry + nil, // 140: api.v1.VPAContainerResourcePolicy.MaxAllowedEntry + nil, // 141: api.v1.VPAContainerRecommendation.TargetEntry + nil, // 142: api.v1.VPAContainerRecommendation.LowerBoundEntry + nil, // 143: api.v1.VPAContainerRecommendation.UpperBoundEntry + nil, // 144: api.v1.VPAContainerRecommendation.UncappedTargetEntry + nil, // 145: api.v1.LimitRangeItem.DefaultLimitsEntry + nil, // 146: api.v1.LimitRangeItem.DefaultRequestEntry + nil, // 147: api.v1.LimitRangeItem.MaxEntry + nil, // 148: api.v1.LimitRangeItem.MinEntry + nil, // 149: api.v1.LimitRangeItem.MaxLimitRequestRatioEntry + nil, // 150: api.v1.KedaScaledObjectTrigger.MetadataEntry + nil, // 151: api.v1.KarpenterResourceDetails.LimitsEntry + nil, // 152: api.v1.KarpenterCapacity.OtherEntry + nil, // 153: api.v1.PodDisruptionBudgetDetails.SelectorLabelsEntry + nil, // 154: api.v1.ResourceQuotaDetails.HardLimitsEntry + nil, // 155: api.v1.ResourceQuotaDetails.UsedEntry + nil, // 156: api.v1.ResourceQuotaDetails.ScopeSelectorEntry + (*timestamppb.Timestamp)(nil), // 157: google.protobuf.Timestamp + (*money.Money)(nil), // 158: google.type.Money +} +var file_api_v1_common_proto_depIdxs = []int32{ + 0, // 0: api.v1.AuditLogEntry.workload_type:type_name -> api.v1.K8sObjectKind + 157, // 1: api.v1.AuditLogEntry.created_at:type_name -> google.protobuf.Timestamp + 157, // 2: api.v1.AuditLogEntry.updated_at:type_name -> google.protobuf.Timestamp + 1, // 3: api.v1.Pagination.order_by:type_name -> api.v1.OrderByEnum + 158, // 4: api.v1.CostInfo.node_recommendation_saved_cost_last_month:type_name -> google.type.Money + 157, // 5: api.v1.ForecastResourceMetrics.timestamp:type_name -> google.protobuf.Timestamp + 10, // 6: api.v1.WorkloadItem.children:type_name -> api.v1.WorkloadItem + 119, // 7: api.v1.WorkloadItem.labels:type_name -> api.v1.WorkloadItem.LabelsEntry + 120, // 8: api.v1.WorkloadItem.annotations:type_name -> api.v1.WorkloadItem.AnnotationsEntry + 7, // 9: api.v1.WorkloadItem.resource_metrics:type_name -> api.v1.ResourceMetrics + 6, // 10: api.v1.WorkloadItem.cost_info:type_name -> api.v1.CostInfo + 17, // 11: api.v1.WorkloadItem.cost_data_points:type_name -> api.v1.CostDataPoint + 18, // 12: api.v1.WorkloadItem.resource_data_points:type_name -> api.v1.ResourceDataPoint + 157, // 13: api.v1.WorkloadItem.created_at:type_name -> google.protobuf.Timestamp + 157, // 14: api.v1.WorkloadItem.deleted_at:type_name -> google.protobuf.Timestamp + 25, // 15: api.v1.WorkloadItem.resource_details:type_name -> api.v1.ResourceDetails + 7, // 16: api.v1.Node.resource_metrics:type_name -> api.v1.ResourceMetrics + 6, // 17: api.v1.Node.cost_info:type_name -> api.v1.CostInfo + 11, // 18: api.v1.Node.container_runtime:type_name -> api.v1.ContainerRuntimeInfo + 25, // 19: api.v1.Node.resource_details:type_name -> api.v1.ResourceDetails + 10, // 20: api.v1.Node.children:type_name -> api.v1.WorkloadItem + 121, // 21: api.v1.Node.labels:type_name -> api.v1.Node.LabelsEntry + 122, // 22: api.v1.Node.annotations:type_name -> api.v1.Node.AnnotationsEntry + 15, // 23: api.v1.Node.volumes_attached:type_name -> api.v1.AttachedVolume + 157, // 24: api.v1.Node.last_seen:type_name -> google.protobuf.Timestamp + 157, // 25: api.v1.Node.collected_at:type_name -> google.protobuf.Timestamp + 157, // 26: api.v1.Node.deletion_timestamp:type_name -> google.protobuf.Timestamp + 14, // 27: api.v1.NodeGroup.nodes:type_name -> api.v1.Node + 7, // 28: api.v1.NodeGroup.resource_metrics:type_name -> api.v1.ResourceMetrics + 6, // 29: api.v1.NodeGroup.cost_info:type_name -> api.v1.CostInfo + 12, // 30: api.v1.NodeGroup.node_info:type_name -> api.v1.NodeInfo + 13, // 31: api.v1.NodeGroup.resource_info:type_name -> api.v1.ResourceInfo + 17, // 32: api.v1.NodeGroup.cost_data_points:type_name -> api.v1.CostDataPoint + 18, // 33: api.v1.NodeGroup.resource_data_points:type_name -> api.v1.ResourceDataPoint + 6, // 34: api.v1.CostDataPoint.cost_info:type_name -> api.v1.CostInfo + 7, // 35: api.v1.ResourceDataPoint.resource_metrics:type_name -> api.v1.ResourceMetrics + 19, // 36: api.v1.SavingsDataPoint.savings_data:type_name -> api.v1.SavingsData + 20, // 37: api.v1.SavingsTimeSeries.savings_datapoints:type_name -> api.v1.SavingsDataPoint + 2, // 38: api.v1.LabelSelectorRequirement.operator:type_name -> api.v1.LabelSelectorOperator + 123, // 39: api.v1.LabelSelector.labels:type_name -> api.v1.LabelSelector.Label + 124, // 40: api.v1.LabelSelector.match_labels:type_name -> api.v1.LabelSelector.MatchLabelsEntry + 22, // 41: api.v1.LabelSelector.match_expressions:type_name -> api.v1.LabelSelectorRequirement + 26, // 42: api.v1.ResourceDetails.pod_details:type_name -> api.v1.PodDetails + 28, // 43: api.v1.ResourceDetails.deployment_details:type_name -> api.v1.DeploymentDetails + 31, // 44: api.v1.ResourceDetails.stateful_set_details:type_name -> api.v1.StatefulSetDetails + 33, // 45: api.v1.ResourceDetails.daemon_set_details:type_name -> api.v1.DaemonSetDetails + 34, // 46: api.v1.ResourceDetails.replica_set_details:type_name -> api.v1.ReplicaSetDetails + 35, // 47: api.v1.ResourceDetails.job_details:type_name -> api.v1.JobDetails + 37, // 48: api.v1.ResourceDetails.cron_job_details:type_name -> api.v1.CronJobDetails + 40, // 49: api.v1.ResourceDetails.service_details:type_name -> api.v1.ServiceDetails + 43, // 50: api.v1.ResourceDetails.ingress_details:type_name -> api.v1.IngressDetails + 48, // 51: api.v1.ResourceDetails.pvc_details:type_name -> api.v1.PersistentVolumeClaimDetails + 52, // 52: api.v1.ResourceDetails.pv_details:type_name -> api.v1.PersistentVolumeDetails + 58, // 53: api.v1.ResourceDetails.sc_details:type_name -> api.v1.StorageClassDetails + 59, // 54: api.v1.ResourceDetails.ns_details:type_name -> api.v1.NamespaceDetails + 60, // 55: api.v1.ResourceDetails.node_details:type_name -> api.v1.NodeDetails + 72, // 56: api.v1.ResourceDetails.hpa_details:type_name -> api.v1.HPADetails + 90, // 57: api.v1.ResourceDetails.vpa_details:type_name -> api.v1.VPADetails + 98, // 58: api.v1.ResourceDetails.limit_range_details:type_name -> api.v1.LimitRangeDetails + 100, // 59: api.v1.ResourceDetails.service_account_details:type_name -> api.v1.ServiceAccountDetails + 101, // 60: api.v1.ResourceDetails.role_details:type_name -> api.v1.RoleDetails + 103, // 61: api.v1.ResourceDetails.role_binding_details:type_name -> api.v1.RoleBindingDetails + 106, // 62: api.v1.ResourceDetails.keda_scaled_object_details:type_name -> api.v1.KedaScaledObjectDetails + 109, // 63: api.v1.ResourceDetails.karpenter_resource_details:type_name -> api.v1.KarpenterResourceDetails + 114, // 64: api.v1.ResourceDetails.pod_disruption_budget_details:type_name -> api.v1.PodDisruptionBudgetDetails + 116, // 65: api.v1.ResourceDetails.resource_quota_details:type_name -> api.v1.ResourceQuotaDetails + 41, // 66: api.v1.ResourceDetails.service_ports:type_name -> api.v1.ServicePort + 125, // 67: api.v1.ResourceDetails.service_selector:type_name -> api.v1.ResourceDetails.ServiceSelectorEntry + 126, // 68: api.v1.ResourceDetails.sc_parameters:type_name -> api.v1.ResourceDetails.ScParametersEntry + 61, // 69: api.v1.ResourceDetails.node_taints:type_name -> api.v1.NodeTaint + 27, // 70: api.v1.PodDetails.containers:type_name -> api.v1.ContainerSummary + 29, // 71: api.v1.DeploymentDetails.containers:type_name -> api.v1.ContainerTemplate + 30, // 72: api.v1.DeploymentDetails.conditions:type_name -> api.v1.DeploymentCondition + 29, // 73: api.v1.StatefulSetDetails.containers:type_name -> api.v1.ContainerTemplate + 32, // 74: api.v1.StatefulSetDetails.volume_claim_templates:type_name -> api.v1.VolumeClaimTemplate + 29, // 75: api.v1.DaemonSetDetails.containers:type_name -> api.v1.ContainerTemplate + 68, // 76: api.v1.DaemonSetDetails.tolerations:type_name -> api.v1.TolerationInfo + 69, // 77: api.v1.DaemonSetDetails.node_selector:type_name -> api.v1.NodeSelector + 29, // 78: api.v1.ReplicaSetDetails.containers:type_name -> api.v1.ContainerTemplate + 23, // 79: api.v1.ReplicaSetDetails.selector:type_name -> api.v1.LabelSelector + 29, // 80: api.v1.JobDetails.containers:type_name -> api.v1.ContainerTemplate + 36, // 81: api.v1.JobDetails.conditions:type_name -> api.v1.JobCondition + 23, // 82: api.v1.JobDetails.selector:type_name -> api.v1.LabelSelector + 29, // 83: api.v1.CronJobDetails.containers:type_name -> api.v1.ContainerTemplate + 38, // 84: api.v1.CronJobDetails.active_jobs:type_name -> api.v1.ActiveJobReference + 39, // 85: api.v1.CronJobDetails.job_template:type_name -> api.v1.JobTemplate + 29, // 86: api.v1.JobTemplate.containers:type_name -> api.v1.ContainerTemplate + 41, // 87: api.v1.ServiceDetails.ports:type_name -> api.v1.ServicePort + 127, // 88: api.v1.ServiceDetails.selector:type_name -> api.v1.ServiceDetails.SelectorEntry + 42, // 89: api.v1.ServiceDetails.load_balancer_ingress:type_name -> api.v1.LoadBalancerIngress + 44, // 90: api.v1.IngressDetails.rules:type_name -> api.v1.IngressRule + 47, // 91: api.v1.IngressDetails.tls:type_name -> api.v1.IngressTLS + 46, // 92: api.v1.IngressDetails.default_backend:type_name -> api.v1.IngressBackend + 42, // 93: api.v1.IngressDetails.load_balancer_ingress:type_name -> api.v1.LoadBalancerIngress + 45, // 94: api.v1.IngressRule.paths:type_name -> api.v1.IngressPath + 46, // 95: api.v1.IngressPath.backend:type_name -> api.v1.IngressBackend + 49, // 96: api.v1.PersistentVolumeClaimDetails.resource_requirements:type_name -> api.v1.ResourceRequirements + 23, // 97: api.v1.PersistentVolumeClaimDetails.selector:type_name -> api.v1.LabelSelector + 50, // 98: api.v1.PersistentVolumeClaimDetails.volume_node_affinity:type_name -> api.v1.VolumeNodeAffinity + 51, // 99: api.v1.PersistentVolumeClaimDetails.conditions:type_name -> api.v1.PVCCondition + 128, // 100: api.v1.ResourceRequirements.requests:type_name -> api.v1.ResourceRequirements.RequestsEntry + 129, // 101: api.v1.ResourceRequirements.limits:type_name -> api.v1.ResourceRequirements.LimitsEntry + 71, // 102: api.v1.VolumeNodeAffinity.required:type_name -> api.v1.NodeSelectorRequirement + 71, // 103: api.v1.VolumeNodeAffinity.preferred:type_name -> api.v1.NodeSelectorRequirement + 130, // 104: api.v1.PersistentVolumeDetails.capacity:type_name -> api.v1.PersistentVolumeDetails.CapacityEntry + 53, // 105: api.v1.PersistentVolumeDetails.claim_ref:type_name -> api.v1.PVClaimReference + 54, // 106: api.v1.PersistentVolumeDetails.volume_source:type_name -> api.v1.PVVolumeSource + 69, // 107: api.v1.PersistentVolumeDetails.node_affinity:type_name -> api.v1.NodeSelector + 55, // 108: api.v1.PVVolumeSource.csi:type_name -> api.v1.CSIVolumeSource + 56, // 109: api.v1.PVVolumeSource.host_path:type_name -> api.v1.HostPathVolumeSource + 57, // 110: api.v1.PVVolumeSource.nfs:type_name -> api.v1.NFSVolumeSource + 131, // 111: api.v1.PVVolumeSource.volume_attributes:type_name -> api.v1.PVVolumeSource.VolumeAttributesEntry + 132, // 112: api.v1.CSIVolumeSource.volume_attributes:type_name -> api.v1.CSIVolumeSource.VolumeAttributesEntry + 133, // 113: api.v1.StorageClassDetails.parameters:type_name -> api.v1.StorageClassDetails.ParametersEntry + 66, // 114: api.v1.StorageClassDetails.allowed_topologies:type_name -> api.v1.TopologySelector + 134, // 115: api.v1.NamespaceDetails.conditions:type_name -> api.v1.NamespaceDetails.ConditionsEntry + 62, // 116: api.v1.NodeDetails.addresses:type_name -> api.v1.NodeAddress + 63, // 117: api.v1.NodeDetails.conditions:type_name -> api.v1.NodeCondition + 64, // 118: api.v1.NodeDetails.system_info:type_name -> api.v1.NodeSystemInfo + 135, // 119: api.v1.NodeDetails.capacity:type_name -> api.v1.NodeDetails.CapacityEntry + 136, // 120: api.v1.NodeDetails.allocatable:type_name -> api.v1.NodeDetails.AllocatableEntry + 65, // 121: api.v1.NodeDetails.images:type_name -> api.v1.NodeImage + 67, // 122: api.v1.TopologySelector.match_label_expressions:type_name -> api.v1.TopologySelectorTerm + 137, // 123: api.v1.TopologySelectorTerm.match_labels:type_name -> api.v1.TopologySelectorTerm.MatchLabelsEntry + 70, // 124: api.v1.NodeSelector.terms:type_name -> api.v1.NodeSelectorTerm + 71, // 125: api.v1.NodeSelectorTerm.match_expressions:type_name -> api.v1.NodeSelectorRequirement + 71, // 126: api.v1.NodeSelectorTerm.match_fields:type_name -> api.v1.NodeSelectorRequirement + 73, // 127: api.v1.HPADetails.scale_target_ref:type_name -> api.v1.ScaleTargetRef + 74, // 128: api.v1.HPADetails.metrics:type_name -> api.v1.HPAMetric + 86, // 129: api.v1.HPADetails.conditions:type_name -> api.v1.HPACondition + 87, // 130: api.v1.HPADetails.behavior:type_name -> api.v1.HPABehavior + 81, // 131: api.v1.HPADetails.current_metrics:type_name -> api.v1.HPACurrentMetric + 75, // 132: api.v1.HPAMetric.resource:type_name -> api.v1.HPAResourceMetric + 76, // 133: api.v1.HPAMetric.pods:type_name -> api.v1.HPAPodsMetric + 77, // 134: api.v1.HPAMetric.object:type_name -> api.v1.HPAObjectMetric + 78, // 135: api.v1.HPAMetric.external:type_name -> api.v1.HPAExternalMetric + 79, // 136: api.v1.HPAPodsMetric.metric:type_name -> api.v1.HPAMetricSelector + 80, // 137: api.v1.HPAObjectMetric.described_object:type_name -> api.v1.HPAObjectReference + 79, // 138: api.v1.HPAObjectMetric.metric:type_name -> api.v1.HPAMetricSelector + 79, // 139: api.v1.HPAExternalMetric.metric:type_name -> api.v1.HPAMetricSelector + 138, // 140: api.v1.HPAMetricSelector.selector:type_name -> api.v1.HPAMetricSelector.SelectorEntry + 82, // 141: api.v1.HPACurrentMetric.resource:type_name -> api.v1.HPACurrentResourceMetric + 83, // 142: api.v1.HPACurrentMetric.pods:type_name -> api.v1.HPACurrentPodsMetric + 84, // 143: api.v1.HPACurrentMetric.object:type_name -> api.v1.HPACurrentObjectMetric + 85, // 144: api.v1.HPACurrentMetric.external:type_name -> api.v1.HPACurrentExternalMetric + 79, // 145: api.v1.HPACurrentPodsMetric.metric:type_name -> api.v1.HPAMetricSelector + 80, // 146: api.v1.HPACurrentObjectMetric.described_object:type_name -> api.v1.HPAObjectReference + 79, // 147: api.v1.HPACurrentObjectMetric.metric:type_name -> api.v1.HPAMetricSelector + 79, // 148: api.v1.HPACurrentExternalMetric.metric:type_name -> api.v1.HPAMetricSelector + 88, // 149: api.v1.HPABehavior.scale_up:type_name -> api.v1.HPAScalingRules + 88, // 150: api.v1.HPABehavior.scale_down:type_name -> api.v1.HPAScalingRules + 89, // 151: api.v1.HPAScalingRules.policies:type_name -> api.v1.HPAScalingPolicy + 91, // 152: api.v1.VPADetails.target_ref:type_name -> api.v1.VPATargetRef + 92, // 153: api.v1.VPADetails.update_policy:type_name -> api.v1.VPAUpdatePolicy + 93, // 154: api.v1.VPADetails.resource_policy:type_name -> api.v1.VPAResourcePolicy + 95, // 155: api.v1.VPADetails.recommendation:type_name -> api.v1.VPARecommendation + 97, // 156: api.v1.VPADetails.conditions:type_name -> api.v1.VPACondition + 94, // 157: api.v1.VPAResourcePolicy.container_policies:type_name -> api.v1.VPAContainerResourcePolicy + 139, // 158: api.v1.VPAContainerResourcePolicy.min_allowed:type_name -> api.v1.VPAContainerResourcePolicy.MinAllowedEntry + 140, // 159: api.v1.VPAContainerResourcePolicy.max_allowed:type_name -> api.v1.VPAContainerResourcePolicy.MaxAllowedEntry + 96, // 160: api.v1.VPARecommendation.container_recommendations:type_name -> api.v1.VPAContainerRecommendation + 141, // 161: api.v1.VPAContainerRecommendation.target:type_name -> api.v1.VPAContainerRecommendation.TargetEntry + 142, // 162: api.v1.VPAContainerRecommendation.lower_bound:type_name -> api.v1.VPAContainerRecommendation.LowerBoundEntry + 143, // 163: api.v1.VPAContainerRecommendation.upper_bound:type_name -> api.v1.VPAContainerRecommendation.UpperBoundEntry + 144, // 164: api.v1.VPAContainerRecommendation.uncapped_target:type_name -> api.v1.VPAContainerRecommendation.UncappedTargetEntry + 99, // 165: api.v1.LimitRangeDetails.limits:type_name -> api.v1.LimitRangeItem + 145, // 166: api.v1.LimitRangeItem.default_limits:type_name -> api.v1.LimitRangeItem.DefaultLimitsEntry + 146, // 167: api.v1.LimitRangeItem.default_request:type_name -> api.v1.LimitRangeItem.DefaultRequestEntry + 147, // 168: api.v1.LimitRangeItem.max:type_name -> api.v1.LimitRangeItem.MaxEntry + 148, // 169: api.v1.LimitRangeItem.min:type_name -> api.v1.LimitRangeItem.MinEntry + 149, // 170: api.v1.LimitRangeItem.max_limit_request_ratio:type_name -> api.v1.LimitRangeItem.MaxLimitRequestRatioEntry + 102, // 171: api.v1.RoleDetails.rules:type_name -> api.v1.RoleRule + 104, // 172: api.v1.RoleBindingDetails.subjects:type_name -> api.v1.RoleBindingSubject + 105, // 173: api.v1.RoleBindingDetails.role_ref:type_name -> api.v1.RoleReference + 107, // 174: api.v1.KedaScaledObjectDetails.triggers:type_name -> api.v1.KedaScaledObjectTrigger + 108, // 175: api.v1.KedaScaledObjectDetails.conditions:type_name -> api.v1.KedaScaledObjectCondition + 150, // 176: api.v1.KedaScaledObjectTrigger.metadata:type_name -> api.v1.KedaScaledObjectTrigger.MetadataEntry + 110, // 177: api.v1.KarpenterResourceDetails.conditions:type_name -> api.v1.KarpenterResourceCondition + 111, // 178: api.v1.KarpenterResourceDetails.capacity:type_name -> api.v1.KarpenterCapacity + 112, // 179: api.v1.KarpenterResourceDetails.requirements:type_name -> api.v1.KarpenterRequirement + 151, // 180: api.v1.KarpenterResourceDetails.limits:type_name -> api.v1.KarpenterResourceDetails.LimitsEntry + 152, // 181: api.v1.KarpenterCapacity.other:type_name -> api.v1.KarpenterCapacity.OtherEntry + 23, // 182: api.v1.WorkloadFilters.namespace_selector:type_name -> api.v1.LabelSelector + 23, // 183: api.v1.WorkloadFilters.workload_selector:type_name -> api.v1.LabelSelector + 0, // 184: api.v1.WorkloadFilters.kind_filter:type_name -> api.v1.K8sObjectKind + 24, // 185: api.v1.WorkloadFilters.name_pattern:type_name -> api.v1.RegexPattern + 23, // 186: api.v1.WorkloadFilters.annotation_selector:type_name -> api.v1.LabelSelector + 3, // 187: api.v1.WorkloadFilters.status:type_name -> api.v1.WorkloadStatusFilter + 153, // 188: api.v1.PodDisruptionBudgetDetails.selector_labels:type_name -> api.v1.PodDisruptionBudgetDetails.SelectorLabelsEntry + 115, // 189: api.v1.PodDisruptionBudgetDetails.conditions:type_name -> api.v1.PodDisruptionBudgetCondition + 154, // 190: api.v1.ResourceQuotaDetails.hard_limits:type_name -> api.v1.ResourceQuotaDetails.HardLimitsEntry + 155, // 191: api.v1.ResourceQuotaDetails.used:type_name -> api.v1.ResourceQuotaDetails.UsedEntry + 156, // 192: api.v1.ResourceQuotaDetails.scope_selector:type_name -> api.v1.ResourceQuotaDetails.ScopeSelectorEntry + 117, // 193: api.v1.ResourceQuotaDetails.conditions:type_name -> api.v1.ResourceQuotaCondition + 157, // 194: api.v1.Event.created_at:type_name -> google.protobuf.Timestamp + 157, // 195: api.v1.Event.updated_at:type_name -> google.protobuf.Timestamp + 157, // 196: api.v1.Event.last_seen:type_name -> google.protobuf.Timestamp + 197, // [197:197] is the sub-list for method output_type + 197, // [197:197] is the sub-list for method input_type + 197, // [197:197] is the sub-list for extension type_name + 197, // [197:197] is the sub-list for extension extendee + 0, // [0:197] is the sub-list for field type_name +} + +func init() { file_api_v1_common_proto_init() } +func file_api_v1_common_proto_init() { + if File_api_v1_common_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_api_v1_common_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AuditLogEntry); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Pagination); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CostInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceMetrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ForecastResourceMetrics); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceSummary); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkloadItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ContainerRuntimeInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Node); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AttachedVolume); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeGroup); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CostDataPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceDataPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SavingsData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SavingsDataPoint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SavingsTimeSeries); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LabelSelectorRequirement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LabelSelector); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegexPattern); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PodDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ContainerSummary); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeploymentDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ContainerTemplate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeploymentCondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StatefulSetDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VolumeClaimTemplate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DaemonSetDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ReplicaSetDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JobDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JobCondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CronJobDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ActiveJobReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*JobTemplate); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServiceDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServicePort); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LoadBalancerIngress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IngressDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IngressRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IngressPath); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IngressBackend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IngressTLS); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PersistentVolumeClaimDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceRequirements); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VolumeNodeAffinity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PVCCondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PersistentVolumeDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PVClaimReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PVVolumeSource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CSIVolumeSource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HostPathVolumeSource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NFSVolumeSource); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StorageClassDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NamespaceDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeTaint); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeAddress); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeCondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeSystemInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeImage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TopologySelector); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TopologySelectorTerm); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TolerationInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeSelector); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeSelectorTerm); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeSelectorRequirement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPADetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ScaleTargetRef); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPAMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPAResourceMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPAPodsMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPAObjectMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPAExternalMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPAMetricSelector); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPAObjectReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPACurrentMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPACurrentResourceMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPACurrentPodsMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPACurrentObjectMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPACurrentExternalMetric); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPACondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPABehavior); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPAScalingRules); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HPAScalingPolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPADetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPATargetRef); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPAUpdatePolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPAResourcePolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPAContainerResourcePolicy); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPARecommendation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPAContainerRecommendation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*VPACondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LimitRangeDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LimitRangeItem); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServiceAccountDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleRule); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleBindingDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleBindingSubject); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RoleReference); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KedaScaledObjectDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KedaScaledObjectTrigger); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KedaScaledObjectCondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KarpenterResourceDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KarpenterResourceCondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KarpenterCapacity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*KarpenterRequirement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WorkloadFilters); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PodDisruptionBudgetDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PodDisruptionBudgetCondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceQuotaDetails); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceQuotaCondition); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Event); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_common_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LabelSelector_Label); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_api_v1_common_proto_msgTypes[6].OneofWrappers = []interface{}{} + file_api_v1_common_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_api_v1_common_proto_msgTypes[21].OneofWrappers = []interface{}{ + (*ResourceDetails_PodDetails)(nil), + (*ResourceDetails_DeploymentDetails)(nil), + (*ResourceDetails_StatefulSetDetails)(nil), + (*ResourceDetails_DaemonSetDetails)(nil), + (*ResourceDetails_ReplicaSetDetails)(nil), + (*ResourceDetails_JobDetails)(nil), + (*ResourceDetails_CronJobDetails)(nil), + (*ResourceDetails_ServiceDetails)(nil), + (*ResourceDetails_IngressDetails)(nil), + (*ResourceDetails_PvcDetails)(nil), + (*ResourceDetails_PvDetails)(nil), + (*ResourceDetails_ScDetails)(nil), + (*ResourceDetails_NsDetails)(nil), + (*ResourceDetails_NodeDetails)(nil), + (*ResourceDetails_HpaDetails)(nil), + (*ResourceDetails_VpaDetails)(nil), + (*ResourceDetails_LimitRangeDetails)(nil), + (*ResourceDetails_ServiceAccountDetails)(nil), + (*ResourceDetails_RoleDetails)(nil), + (*ResourceDetails_RoleBindingDetails)(nil), + (*ResourceDetails_KedaScaledObjectDetails)(nil), + (*ResourceDetails_KarpenterResourceDetails)(nil), + (*ResourceDetails_PodDisruptionBudgetDetails)(nil), + (*ResourceDetails_ResourceQuotaDetails)(nil), + } + file_api_v1_common_proto_msgTypes[109].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_api_v1_common_proto_rawDesc, + NumEnums: 4, + NumMessages: 153, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_api_v1_common_proto_goTypes, + DependencyIndexes: file_api_v1_common_proto_depIdxs, + EnumInfos: file_api_v1_common_proto_enumTypes, + MessageInfos: file_api_v1_common_proto_msgTypes, + }.Build() + File_api_v1_common_proto = out.File + file_api_v1_common_proto_rawDesc = nil + file_api_v1_common_proto_goTypes = nil + file_api_v1_common_proto_depIdxs = nil +} diff --git a/gen/api/v1/metrics_collector.pb.go b/gen/api/v1/metrics_collector.pb.go index d1bce240..82fed168 100644 --- a/gen/api/v1/metrics_collector.pb.go +++ b/gen/api/v1/metrics_collector.pb.go @@ -168,6 +168,8 @@ const ( ResourceType_RESOURCE_TYPE_CSI_STORAGE_CAPACITY ResourceType = 47 // VOLUME ATTACHMENT ResourceType_RESOURCE_TYPE_VOLUME_ATTACHMENT ResourceType = 48 + // KUBEFLOW NOTEBOOKS + ResourceType_RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS ResourceType = 49 // Cluster snapshot type ResourceType_RESOURCE_TYPE_CLUSTER_SNAPSHOT ResourceType = 77 ) @@ -224,6 +226,7 @@ var ( 46: "RESOURCE_TYPE_CSI_DRIVER", 47: "RESOURCE_TYPE_CSI_STORAGE_CAPACITY", 48: "RESOURCE_TYPE_VOLUME_ATTACHMENT", + 49: "RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS", 77: "RESOURCE_TYPE_CLUSTER_SNAPSHOT", } ResourceType_value = map[string]int32{ @@ -276,6 +279,7 @@ var ( "RESOURCE_TYPE_CSI_DRIVER": 46, "RESOURCE_TYPE_CSI_STORAGE_CAPACITY": 47, "RESOURCE_TYPE_VOLUME_ATTACHMENT": 48, + "RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS": 49, "RESOURCE_TYPE_CLUSTER_SNAPSHOT": 77, } ) @@ -2199,6 +2203,108 @@ func (x *SendTelemetryLogsResponse) GetProcessedCount() int32 { return 0 } +type NodeMetadataRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + TeamId string `protobuf:"bytes,1,opt,name=team_id,json=teamId,proto3" json:"team_id,omitempty"` // Unique identifier for the team. + ClusterId string `protobuf:"bytes,2,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` // Unique identifier for the cluster. +} + +func (x *NodeMetadataRequest) Reset() { + *x = NodeMetadataRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_metrics_collector_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeMetadataRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeMetadataRequest) ProtoMessage() {} + +func (x *NodeMetadataRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_metrics_collector_proto_msgTypes[21] + 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 NodeMetadataRequest.ProtoReflect.Descriptor instead. +func (*NodeMetadataRequest) Descriptor() ([]byte, []int) { + return file_api_v1_metrics_collector_proto_rawDescGZIP(), []int{21} +} + +func (x *NodeMetadataRequest) GetTeamId() string { + if x != nil { + return x.TeamId + } + return "" +} + +func (x *NodeMetadataRequest) GetClusterId() string { + if x != nil { + return x.ClusterId + } + return "" +} + +type NodeMetadataResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NodeToMeta map[string]*Node `protobuf:"bytes,1,rep,name=node_to_meta,json=nodeToMeta,proto3" json:"node_to_meta,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // map is node name to node +} + +func (x *NodeMetadataResponse) Reset() { + *x = NodeMetadataResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_api_v1_metrics_collector_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NodeMetadataResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NodeMetadataResponse) ProtoMessage() {} + +func (x *NodeMetadataResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_v1_metrics_collector_proto_msgTypes[22] + 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 NodeMetadataResponse.ProtoReflect.Descriptor instead. +func (*NodeMetadataResponse) Descriptor() ([]byte, []int) { + return file_api_v1_metrics_collector_proto_rawDescGZIP(), []int{22} +} + +func (x *NodeMetadataResponse) GetNodeToMeta() map[string]*Node { + if x != nil { + return x.NodeToMeta + } + return nil +} + var File_api_v1_metrics_collector_proto protoreflect.FileDescriptor var file_api_v1_metrics_collector_proto_rawDesc = []byte{ @@ -2210,756 +2316,776 @@ var file_api_v1_metrics_collector_proto_rawDesc = []byte{ 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x22, 0x69, 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x97, 0x02, 0x0a, 0x0c, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x38, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, - 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x0d, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x64, 0x61, 0x74, 0x61, - 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, - 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x97, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x74, 0x65, + 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x30, 0x0a, + 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x2f, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x86, 0x01, 0x0a, 0x18, - 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x74, 0x65, - 0x6d, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, - 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, - 0x61, 0x6d, 0x49, 0x64, 0x22, 0x90, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x65, - 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, + 0x61, 0x74, 0x61, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x09, 0x64, 0x61, 0x74, 0x61, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xb3, 0x02, 0x0a, 0x13, 0x53, + 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, - 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x46, 0x6f, - 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, - 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x22, 0xfd, 0x03, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x46, 0x6f, - 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12, 0x38, 0x0a, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, - 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, - 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, - 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x42, - 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x70, 0x65, 0x72, 0x5f, 0x62, 0x6f, - 0x75, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x75, 0x70, 0x70, 0x65, 0x72, - 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6d, 0x6f, - 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, - 0x22, 0x80, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, + 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x30, 0x0a, 0x0a, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x09, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, + 0x63, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x61, 0x6d, 0x5f, + 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, + 0x22, 0x86, 0x01, 0x0a, 0x18, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, + 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x22, 0xae, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x12, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x70, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, - 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x0f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x66, 0x61, - 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, - 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, 0x73, 0x2e, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, - 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, - 0x22, 0x66, 0x0a, 0x1c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, - 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb4, 0x02, 0x0a, 0x14, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, - 0x6f, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x68, 0x75, 0x6e, - 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, - 0x75, 0x6e, 0x6b, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, - 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x73, 0x5f, - 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x69, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x22, - 0xea, 0x01, 0x0a, 0x21, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, + 0x63, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x22, 0x90, 0x02, 0x0a, 0x19, 0x47, 0x65, + 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, + 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x57, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x46, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65, + 0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0xfd, 0x03, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x21, 0x0a, 0x0c, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1d, + 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x66, 0x6f, 0x72, 0x65, 0x63, + 0x61, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x77, 0x65, + 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, 0x6c, + 0x6f, 0x77, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x75, 0x70, 0x70, + 0x65, 0x72, 0x5f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0a, + 0x75, 0x70, 0x70, 0x65, 0x72, 0x42, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x6f, + 0x64, 0x65, 0x6c, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, + 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0xae, 0x01, 0x0a, 0x19, 0x53, 0x65, 0x6e, + 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x53, 0x65, + 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x4b, 0x0a, 0x0f, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x6d, 0x65, 0x74, 0x68, 0x65, 0x75, + 0x73, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, + 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x46, 0x61, 0x6d, + 0x69, 0x6c, 0x69, 0x65, 0x73, 0x22, 0x66, 0x0a, 0x1c, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, - 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x27, 0x0a, - 0x0f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x52, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x11, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, - 0x67, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x10, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x28, 0x0a, 0x12, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, + 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, + 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xb4, 0x02, + 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x38, + 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, + 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x68, 0x75, + 0x6e, 0x6b, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x0b, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x12, 0x24, + 0x0a, 0x0e, 0x69, 0x73, 0x5f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x75, 0x6e, 0x6b, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x43, + 0x68, 0x75, 0x6e, 0x6b, 0x22, 0xea, 0x01, 0x0a, 0x21, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x73, 0x5f, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x63, 0x68, 0x75, + 0x6e, 0x6b, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x11, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x10, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x22, 0x28, 0x0a, 0x12, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x08, + 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xd3, 0x01, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x04, 0x6e, - 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x70, - 0x6f, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x1a, 0x53, 0x0a, 0x09, 0x50, 0x6f, 0x64, 0x73, 0x45, + 0x65, 0x72, 0x52, 0x04, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x70, 0x6f, 0x64, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x6f, 0x64, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x04, 0x70, 0x6f, 0x64, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x1a, 0x53, 0x0a, 0x09, + 0x50, 0x6f, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0x88, 0x21, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x38, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x64, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x48, 0x0a, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x73, 0x65, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, + 0x75, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x0b, 0x64, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x2e, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x12, 0x45, 0x0a, + 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, + 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x53, 0x65, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x4d, 0x61, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x70, 0x76, 0x63, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x50, 0x76, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, + 0x70, 0x76, 0x63, 0x73, 0x12, 0x2f, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x0a, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x12, 0x3c, 0x0a, 0x09, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x6a, 0x6f, + 0x62, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x6f, 0x6e, + 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x72, 0x6f, 0x6e, 0x4a, + 0x6f, 0x62, 0x73, 0x12, 0x3e, 0x0a, 0x09, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, + 0x73, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x6f, + 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x12, 0x51, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x65, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x48, 0x0a, + 0x0d, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x10, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, + 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x42, + 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x61, 0x0a, 0x16, 0x70, 0x6f, 0x64, 0x5f, 0x64, + 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, + 0x73, 0x18, 0x11, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x50, 0x6f, 0x64, 0x44, 0x69, + 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x70, 0x6f, 0x64, 0x44, 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x09, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0c, 0x6c, 0x69, + 0x6d, 0x69, 0x74, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x12, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x71, 0x75, + 0x6f, 0x74, 0x61, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, + 0x73, 0x12, 0x51, 0x0a, 0x10, 0x75, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, + 0x5f, 0x70, 0x6f, 0x64, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, + 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x55, + 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x50, 0x6f, 0x64, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0f, 0x75, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, + 0x50, 0x6f, 0x64, 0x73, 0x12, 0x6d, 0x0a, 0x1a, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, + 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x64, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x72, 0x73, 0x18, 0x16, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x72, 0x69, + 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, + 0x6c, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x18, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x17, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4f, + 0x0a, 0x10, 0x6b, 0x65, 0x64, 0x61, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x5f, 0x6a, 0x6f, + 0x62, 0x73, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4b, 0x65, 0x64, 0x61, + 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0e, 0x6b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x12, + 0x58, 0x0a, 0x13, 0x6b, 0x65, 0x64, 0x61, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x5f, 0x6f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, + 0x4b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, + 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, + 0x68, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x61, 0x0a, + 0x16, 0x63, 0x73, 0x69, 0x5f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x61, 0x70, + 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x2e, 0x43, 0x73, 0x69, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x63, 0x73, 0x69, 0x53, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x1a, 0x5a, 0x0a, 0x10, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x88, 0x21, 0x0a, - 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x11, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0f, 0x44, 0x61, 0x65, + 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6c, - 0x53, 0x65, 0x74, 0x73, 0x12, 0x42, 0x0a, 0x0b, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x5f, 0x73, - 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x44, 0x61, 0x65, - 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x64, 0x61, - 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x73, 0x12, - 0x3b, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x46, 0x0a, 0x0b, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x4d, 0x61, 0x70, 0x73, 0x12, 0x38, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, - 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x2f, - 0x0a, 0x04, 0x70, 0x76, 0x63, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, - 0x50, 0x76, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x70, 0x76, 0x63, 0x73, 0x12, - 0x2f, 0x0a, 0x04, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x2e, 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6a, 0x6f, 0x62, 0x73, - 0x12, 0x3c, 0x0a, 0x09, 0x63, 0x72, 0x6f, 0x6e, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x0b, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x3e, - 0x0a, 0x09, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x09, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x51, - 0x0a, 0x10, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x69, - 0x65, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, - 0x73, 0x12, 0x51, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x0f, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x0d, 0x72, 0x6f, 0x6c, 0x65, - 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x61, 0x0a, 0x16, 0x70, 0x6f, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x72, 0x75, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x62, 0x75, 0x64, 0x67, 0x65, 0x74, 0x73, 0x18, 0x11, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x50, 0x6f, 0x64, 0x44, 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x14, 0x70, 0x6f, 0x64, 0x44, 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, - 0x64, 0x67, 0x65, 0x74, 0x73, 0x12, 0x3e, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x73, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x45, 0x0a, 0x0c, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x72, - 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x0b, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x4e, 0x0a, 0x0f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x71, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x18, - 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x12, 0x51, 0x0a, 0x10, - 0x75, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x64, 0x73, - 0x18, 0x15, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x55, 0x6e, 0x73, 0x63, 0x68, 0x65, - 0x64, 0x75, 0x6c, 0x65, 0x64, 0x50, 0x6f, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, - 0x75, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, 0x50, 0x6f, 0x64, 0x73, 0x12, - 0x6d, 0x0a, 0x1a, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, - 0x64, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x16, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, - 0x6c, 0x50, 0x6f, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x18, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, - 0x50, 0x6f, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x73, 0x12, 0x39, - 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x17, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x02, 0x18, - 0x01, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x6b, 0x65, 0x64, - 0x61, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x5f, 0x6a, 0x6f, 0x62, 0x73, 0x18, 0x18, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, - 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6b, 0x65, 0x64, 0x61, - 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x58, 0x0a, 0x13, 0x6b, 0x65, - 0x64, 0x61, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x18, 0x19, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x4b, 0x65, 0x64, 0x61, 0x53, - 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x11, 0x6b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x61, 0x0a, 0x16, 0x63, 0x73, 0x69, 0x5f, - 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x1b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x43, 0x73, 0x69, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x63, 0x73, 0x69, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x1a, 0x5a, 0x0a, 0x10, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x66, 0x75, 0x6c, 0x53, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5a, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, + 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x57, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x4d, 0x61, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0f, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x53, 0x65, - 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x56, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x53, 0x0a, 0x09, + 0x50, 0x76, 0x63, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x53, 0x0a, 0x09, 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x0d, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, + 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x5a, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x74, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x0d, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4d, 0x61, - 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x58, 0x0a, 0x0e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x14, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x14, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0a, 0x52, 0x6f, 0x6c, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x56, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x53, 0x0a, 0x09, 0x50, 0x76, 0x63, 0x73, 0x45, + 0x5b, 0x0a, 0x11, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x53, 0x0a, 0x09, - 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, + 0x50, 0x6f, 0x64, 0x44, 0x69, 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x64, + 0x67, 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x57, 0x0a, 0x0d, 0x43, 0x72, 0x6f, 0x6e, 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0e, 0x49, 0x6e, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x14, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x14, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0a, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x11, 0x52, 0x6f, - 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x01, 0x1a, 0x58, 0x0a, 0x0e, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5a, 0x0a, 0x10, 0x4c, + 0x69, 0x6d, 0x69, 0x74, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, 0x50, 0x6f, 0x64, 0x44, 0x69, - 0x73, 0x72, 0x75, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x64, 0x67, 0x65, 0x74, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x0e, - 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x14, 0x55, 0x6e, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x75, 0x6c, 0x65, 0x64, 0x50, 0x6f, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5a, 0x0a, 0x10, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x52, - 0x61, 0x6e, 0x67, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1d, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, + 0x6e, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x55, 0x0a, 0x0b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x13, 0x4b, 0x65, 0x64, 0x61, 0x53, 0x63, + 0x61, 0x6c, 0x65, 0x64, 0x4a, 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, + 0x6c, 0x65, 0x64, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, 0x43, 0x73, 0x69, 0x53, 0x74, + 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, + 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe8, 0x0d, 0x0a, + 0x15, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x63, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x2e, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, + 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x0f, 0x73, + 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x2e, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x43, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x6a, 0x0a, + 0x15, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, + 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, + 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x7c, 0x0a, 0x1b, 0x63, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, + 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x43, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x19, 0x63, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x0f, 0x69, 0x6e, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x31, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, + 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0e, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6c, 0x61, 0x73, + 0x73, 0x65, 0x73, 0x12, 0x48, 0x0a, 0x09, 0x63, 0x73, 0x69, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, + 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x43, 0x73, 0x69, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x08, 0x63, 0x73, 0x69, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, + 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, + 0x68, 0x12, 0x4e, 0x0a, 0x0b, 0x63, 0x73, 0x69, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x43, 0x73, 0x69, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x73, 0x69, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, + 0x73, 0x12, 0x63, 0x0a, 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x61, + 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, + 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x56, 0x6f, 0x6c, + 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x11, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, + 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x60, 0x0a, 0x16, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, + 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, + 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x11, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x62, 0x0a, 0x18, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, + 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x68, 0x0a, 0x1e, 0x43, 0x75, 0x73, 0x74, + 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x13, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x51, 0x75, - 0x6f, 0x74, 0x61, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x5e, 0x0a, 0x14, 0x55, 0x6e, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x65, 0x64, - 0x50, 0x6f, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x13, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6c, 0x61, + 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x67, 0x0a, 0x1d, 0x48, 0x6f, 0x72, 0x69, 0x7a, 0x6f, 0x6e, 0x74, 0x61, 0x6c, 0x50, - 0x6f, 0x64, 0x41, 0x75, 0x74, 0x6f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, + 0x01, 0x1a, 0x57, 0x0a, 0x0d, 0x43, 0x73, 0x69, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x0b, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x5d, 0x0a, 0x13, 0x4b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4a, - 0x6f, 0x62, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x60, 0x0a, 0x16, 0x4b, 0x65, 0x64, 0x61, 0x53, 0x63, 0x61, 0x6c, 0x65, 0x64, 0x4f, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, 0x43, 0x73, 0x69, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, - 0x43, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0f, 0x43, 0x73, + 0x69, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, + 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe8, 0x0d, 0x0a, 0x15, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x12, 0x63, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, - 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x50, 0x65, 0x72, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x11, 0x70, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x0f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, - 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x31, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, - 0x65, 0x73, 0x12, 0x54, 0x0a, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x6f, - 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x6a, 0x0a, 0x15, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, - 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x13, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x7c, 0x0a, 0x1b, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, - 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x19, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x5a, 0x0a, 0x0f, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, - 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, - 0x73, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, - 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x12, 0x48, - 0x0a, 0x09, 0x63, 0x73, 0x69, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x2e, 0x43, 0x73, 0x69, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, - 0x63, 0x73, 0x69, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x4e, 0x0a, 0x0b, - 0x63, 0x73, 0x69, 0x5f, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x2e, 0x43, 0x73, 0x69, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x0a, 0x63, 0x73, 0x69, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x73, 0x12, 0x63, 0x0a, 0x12, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, - 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, - 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x1a, 0x60, 0x0a, 0x16, 0x50, 0x65, 0x72, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x56, - 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x11, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, - 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, - 0x62, 0x0a, 0x18, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x42, 0x69, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x68, 0x0a, 0x1e, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, - 0x13, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, - 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x0d, - 0x43, 0x73, 0x69, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x66, 0x0a, 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x1e, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, + 0x8b, 0x04, 0x0a, 0x0f, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x12, 0x36, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, + 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, + 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x05, 0x6e, + 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, + 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x47, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x44, + 0x0a, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, + 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, + 0x6f, 0x70, 0x65, 0x64, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x1a, + 0x4a, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0f, 0x43, 0x73, 0x69, 0x44, 0x72, 0x69, 0x76, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x60, 0x0a, 0x16, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x41, 0x74, 0x74, 0x61, 0x63, 0x68, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x66, 0x0a, 0x0b, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, - 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x22, 0x8b, 0x04, 0x0a, 0x0f, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x36, - 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x38, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, - 0x12, 0x47, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x2e, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x44, 0x0a, 0x0e, 0x63, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x12, - 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x64, 0x1a, 0x4a, 0x0a, 0x0a, 0x4e, 0x6f, - 0x64, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x50, 0x0a, 0x0f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x78, 0x0a, 0x18, 0x53, 0x65, 0x6e, 0x64, - 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04, - 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x6c, 0x6f, - 0x67, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x05, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, - 0x6c, 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, 0x34, 0x0a, 0x06, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x2e, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x1a, - 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x50, 0x0a, 0x0f, 0x4e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x44, 0x0a, 0x19, 0x53, 0x65, - 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x43, 0x6f, 0x75, 0x6e, 0x74, - 0x2a, 0xa3, 0x02, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, - 0x0a, 0x16, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x56, - 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x10, 0x01, 0x12, 0x15, - 0x0a, 0x11, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, - 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, - 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, - 0x41, 0x54, 0x41, 0x10, 0x04, 0x12, 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x10, 0x05, 0x12, 0x20, 0x0a, - 0x1c, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, - 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x06, 0x12, - 0x20, 0x0a, 0x1c, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, - 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, - 0x07, 0x12, 0x22, 0x0a, 0x1e, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, - 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x1f, 0x0a, 0x1b, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4e, 0x41, 0x50, - 0x53, 0x48, 0x4f, 0x54, 0x10, 0x09, 0x2a, 0xea, 0x0c, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x15, - 0x0a, 0x11, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x50, 0x4f, 0x44, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, - 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x44, - 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x53, 0x10, 0x05, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, - 0x45, 0x5f, 0x41, 0x43, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, 0x06, 0x12, 0x1d, 0x0a, 0x19, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x49, 0x4d, - 0x49, 0x54, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x07, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x10, 0x08, 0x12, 0x1c, 0x0a, 0x18, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, - 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x09, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x45, 0x46, 0x55, 0x4c, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x0a, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x41, 0x45, 0x4d, - 0x4f, 0x4e, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x0b, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, - 0x41, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x0c, 0x12, 0x28, 0x0a, 0x24, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x52, 0x10, - 0x0d, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x4a, 0x4f, 0x42, 0x10, 0x0e, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x4f, 0x4e, 0x5f, 0x4a, - 0x4f, 0x42, 0x10, 0x0f, 0x12, 0x29, 0x0a, 0x25, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, - 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x10, 0x12, - 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x10, 0x11, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x4c, - 0x41, 0x53, 0x53, 0x10, 0x12, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x13, - 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x14, 0x12, 0x1f, 0x0a, 0x1b, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x47, - 0x52, 0x45, 0x53, 0x53, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x10, 0x15, 0x12, 0x20, 0x0a, 0x1c, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x45, - 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x16, 0x12, 0x16, - 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x52, 0x4f, 0x4c, 0x45, 0x10, 0x17, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, - 0x44, 0x49, 0x4e, 0x47, 0x10, 0x18, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, - 0x52, 0x4f, 0x4c, 0x45, 0x10, 0x19, 0x12, 0x26, 0x0a, 0x22, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, - 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x1a, 0x12, 0x2b, - 0x0a, 0x27, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x41, - 0x55, 0x54, 0x4f, 0x53, 0x43, 0x41, 0x4c, 0x45, 0x52, 0x10, 0x1b, 0x12, 0x29, 0x0a, 0x25, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x45, 0x52, - 0x54, 0x49, 0x43, 0x41, 0x4c, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x53, 0x43, - 0x41, 0x4c, 0x45, 0x52, 0x10, 0x1c, 0x12, 0x27, 0x0a, 0x23, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x44, 0x49, 0x53, 0x52, - 0x55, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x44, 0x47, 0x45, 0x54, 0x10, 0x1d, 0x12, - 0x25, 0x0a, 0x21, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x4f, - 0x4c, 0x49, 0x43, 0x59, 0x10, 0x1e, 0x12, 0x2c, 0x0a, 0x28, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x52, - 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x49, 0x54, 0x49, - 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x20, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, - 0x4d, 0x41, 0x50, 0x10, 0x21, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x10, 0x22, 0x12, + 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x11, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x78, 0x0a, + 0x18, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, + 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x65, 0x61, 0x6d, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x61, 0x6d, 0x49, + 0x64, 0x12, 0x24, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x22, 0xa5, 0x02, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, + 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, + 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 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, 0x34, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x1a, 0x39, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x44, 0x0a, 0x19, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, + 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, + 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, + 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x4d, 0x0a, 0x13, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, + 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, + 0x65, 0x61, 0x6d, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, + 0x65, 0x72, 0x49, 0x64, 0x22, 0xb3, 0x01, 0x0a, 0x14, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, + 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x4d, 0x65, 0x74, 0x61, 0x1a, 0x4b, 0x0a, + 0x0f, 0x4e, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x4d, 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x2a, 0xa3, 0x02, 0x0a, 0x09, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x45, 0x56, 0x45, 0x4e, + 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x41, 0x44, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x56, 0x45, 0x4e, + 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, + 0x15, 0x0a, 0x11, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x41, 0x44, 0x41, 0x54, 0x41, 0x10, 0x04, 0x12, + 0x16, 0x0a, 0x12, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, + 0x54, 0x52, 0x49, 0x43, 0x53, 0x10, 0x05, 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x56, 0x45, 0x4e, 0x54, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, + 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x06, 0x12, 0x20, 0x0a, 0x1c, 0x45, 0x56, 0x45, + 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, + 0x52, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x07, 0x12, 0x22, 0x0a, 0x1e, 0x45, + 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, + 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, + 0x1f, 0x0a, 0x1b, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, + 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x10, 0x09, + 0x2a, 0x90, 0x0d, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x10, 0x02, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x10, 0x23, 0x12, 0x1f, 0x0a, 0x1b, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, - 0x44, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x24, 0x12, 0x24, 0x0a, - 0x20, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, - 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x10, 0x25, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x26, 0x12, 0x1a, - 0x0a, 0x16, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x43, 0x53, 0x49, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x27, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x52, 0x50, - 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, 0x28, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x44, 0x4f, 0x47, - 0x10, 0x29, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x41, 0x52, 0x47, 0x4f, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, - 0x53, 0x10, 0x2a, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x45, 0x44, 0x41, 0x10, 0x2b, 0x12, 0x24, 0x0a, 0x20, 0x52, + 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x56, + 0x45, 0x4e, 0x54, 0x10, 0x04, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x44, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x53, + 0x10, 0x05, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x41, 0x43, 0x43, 0x4f, + 0x55, 0x4e, 0x54, 0x10, 0x06, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x52, 0x41, 0x4e, + 0x47, 0x45, 0x10, 0x07, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x51, + 0x55, 0x4f, 0x54, 0x41, 0x10, 0x08, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, + 0x4e, 0x54, 0x10, 0x09, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x46, 0x55, 0x4c, 0x5f, 0x53, + 0x45, 0x54, 0x10, 0x0a, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x44, 0x41, 0x45, 0x4d, 0x4f, 0x4e, 0x5f, 0x53, 0x45, 0x54, + 0x10, 0x0b, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x5f, 0x53, 0x45, 0x54, 0x10, + 0x0c, 0x12, 0x28, 0x0a, 0x24, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x43, + 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x52, 0x10, 0x0d, 0x12, 0x15, 0x0a, 0x11, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4a, 0x4f, 0x42, + 0x10, 0x0e, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x4f, 0x4e, 0x5f, 0x4a, 0x4f, 0x42, 0x10, 0x0f, 0x12, 0x29, + 0x0a, 0x25, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, + 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x10, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x45, 0x52, 0x53, 0x49, + 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x10, 0x11, 0x12, 0x1f, + 0x0a, 0x1b, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x10, 0x12, 0x12, + 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x13, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x47, 0x52, + 0x45, 0x53, 0x53, 0x10, 0x14, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x5f, 0x43, + 0x4c, 0x41, 0x53, 0x53, 0x10, 0x15, 0x12, 0x20, 0x0a, 0x1c, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x45, 0x54, 0x57, 0x4f, 0x52, 0x4b, 0x5f, + 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x16, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x10, 0x17, + 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x18, + 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x10, 0x19, + 0x12, 0x26, 0x0a, 0x22, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x42, + 0x49, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x1a, 0x12, 0x2b, 0x0a, 0x27, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x48, 0x4f, 0x52, 0x49, 0x5a, 0x4f, + 0x4e, 0x54, 0x41, 0x4c, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x53, 0x43, 0x41, + 0x4c, 0x45, 0x52, 0x10, 0x1b, 0x12, 0x29, 0x0a, 0x25, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x54, 0x49, 0x43, 0x41, 0x4c, 0x5f, + 0x50, 0x4f, 0x44, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x53, 0x43, 0x41, 0x4c, 0x45, 0x52, 0x10, 0x1c, + 0x12, 0x27, 0x0a, 0x23, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x44, 0x49, 0x53, 0x52, 0x55, 0x50, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x42, 0x55, 0x44, 0x47, 0x45, 0x54, 0x10, 0x1d, 0x12, 0x25, 0x0a, 0x21, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x4f, 0x44, 0x5f, 0x53, + 0x45, 0x43, 0x55, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x4f, 0x4c, 0x49, 0x43, 0x59, 0x10, 0x1e, + 0x12, 0x2c, 0x0a, 0x28, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x1f, 0x12, 0x21, + 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, + 0x20, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x4d, 0x41, 0x50, 0x10, 0x21, 0x12, + 0x18, 0x0a, 0x14, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x10, 0x22, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, + 0x49, 0x4e, 0x45, 0x52, 0x10, 0x23, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x24, 0x12, 0x24, 0x0a, 0x20, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, + 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x10, 0x25, 0x12, 0x19, 0x0a, + 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, + 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x10, 0x26, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x53, 0x49, 0x5f, 0x4e, 0x4f, + 0x44, 0x45, 0x10, 0x27, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x41, 0x52, 0x50, 0x45, 0x4e, 0x54, 0x45, 0x52, 0x10, + 0x28, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x44, 0x4f, 0x47, 0x10, 0x29, 0x12, 0x1f, 0x0a, 0x1b, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, 0x52, + 0x47, 0x4f, 0x5f, 0x52, 0x4f, 0x4c, 0x4c, 0x4f, 0x55, 0x54, 0x53, 0x10, 0x2a, 0x12, 0x16, 0x0a, + 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, + 0x45, 0x44, 0x41, 0x10, 0x2b, 0x12, 0x24, 0x0a, 0x20, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x45, 0x44, 0x41, 0x5f, 0x53, 0x43, 0x41, 0x4c, + 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x2c, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x45, 0x44, - 0x41, 0x5f, 0x53, 0x43, 0x41, 0x4c, 0x45, 0x44, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, - 0x2c, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x4b, 0x45, 0x44, 0x41, 0x5f, 0x53, 0x43, 0x41, 0x4c, 0x45, 0x44, 0x5f, 0x4a, - 0x4f, 0x42, 0x10, 0x2d, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x53, 0x49, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, - 0x10, 0x2e, 0x12, 0x26, 0x0a, 0x22, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x43, 0x53, 0x49, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, - 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, 0x54, 0x59, 0x10, 0x2f, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x4f, 0x4c, 0x55, - 0x4d, 0x45, 0x5f, 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x30, 0x12, + 0x41, 0x5f, 0x53, 0x43, 0x41, 0x4c, 0x45, 0x44, 0x5f, 0x4a, 0x4f, 0x42, 0x10, 0x2d, 0x12, 0x1c, + 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x43, 0x53, 0x49, 0x5f, 0x44, 0x52, 0x49, 0x56, 0x45, 0x52, 0x10, 0x2e, 0x12, 0x26, 0x0a, 0x22, + 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x53, + 0x49, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, + 0x54, 0x59, 0x10, 0x2f, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x54, 0x54, + 0x41, 0x43, 0x48, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x30, 0x12, 0x24, 0x0a, 0x20, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x46, + 0x4c, 0x4f, 0x57, 0x5f, 0x4e, 0x4f, 0x54, 0x45, 0x42, 0x4f, 0x4f, 0x4b, 0x53, 0x10, 0x31, 0x12, 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x10, 0x4d, 0x2a, 0x8c, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, @@ -2971,7 +3097,7 @@ var file_api_v1_metrics_collector_proto_rawDesc = []byte{ 0x4c, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, - 0x10, 0x05, 0x32, 0xe3, 0x03, 0x0a, 0x17, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x6f, + 0x10, 0x05, 0x32, 0xae, 0x04, 0x0a, 0x17, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, @@ -3001,17 +3127,21 @@ var file_api_v1_metrics_collector_proto_rawDesc = []byte{ 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x8e, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, - 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x76, - 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x69, 0x6e, 0x63, 0x2f, 0x7a, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x72, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, - 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x41, 0x70, 0x69, 0x2e, 0x56, - 0x31, 0xca, 0x02, 0x06, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x70, 0x69, - 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x07, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, + 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x42, 0x8e, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x70, 0x69, 0x2e, + 0x76, 0x31, 0x42, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x76, 0x7a, 0x65, 0x72, 0x6f, 0x2d, + 0x69, 0x6e, 0x63, 0x2f, 0x7a, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x6e, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, + 0x41, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, + 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x70, 0x69, + 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3027,7 +3157,7 @@ func file_api_v1_metrics_collector_proto_rawDescGZIP() []byte { } var file_api_v1_metrics_collector_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_api_v1_metrics_collector_proto_msgTypes = make([]protoimpl.MessageInfo, 59) +var file_api_v1_metrics_collector_proto_msgTypes = make([]protoimpl.MessageInfo, 62) var file_api_v1_metrics_collector_proto_goTypes = []interface{}{ (EventType)(0), // 0: api.v1.EventType (ResourceType)(0), // 1: api.v1.ResourceType @@ -3053,167 +3183,175 @@ var file_api_v1_metrics_collector_proto_goTypes = []interface{}{ (*SendTelemetryLogsRequest)(nil), // 21: api.v1.SendTelemetryLogsRequest (*LogEntry)(nil), // 22: api.v1.LogEntry (*SendTelemetryLogsResponse)(nil), // 23: api.v1.SendTelemetryLogsResponse - nil, // 24: api.v1.NodeData.PodsEntry - nil, // 25: api.v1.Namespace.DeploymentsEntry - nil, // 26: api.v1.Namespace.StatefulSetsEntry - nil, // 27: api.v1.Namespace.DaemonSetsEntry - nil, // 28: api.v1.Namespace.ReplicaSetsEntry - nil, // 29: api.v1.Namespace.ServicesEntry - nil, // 30: api.v1.Namespace.ConfigMapsEntry - nil, // 31: api.v1.Namespace.SecretsEntry - nil, // 32: api.v1.Namespace.PvcsEntry - nil, // 33: api.v1.Namespace.JobsEntry - nil, // 34: api.v1.Namespace.CronJobsEntry - nil, // 35: api.v1.Namespace.IngressesEntry - nil, // 36: api.v1.Namespace.NetworkPoliciesEntry - nil, // 37: api.v1.Namespace.ServiceAccountsEntry - nil, // 38: api.v1.Namespace.RolesEntry - nil, // 39: api.v1.Namespace.RoleBindingsEntry - nil, // 40: api.v1.Namespace.PodDisruptionBudgetsEntry - nil, // 41: api.v1.Namespace.EndpointsEntry - nil, // 42: api.v1.Namespace.LimitRangesEntry - nil, // 43: api.v1.Namespace.ResourceQuotasEntry - nil, // 44: api.v1.Namespace.UnscheduledPodsEntry - nil, // 45: api.v1.Namespace.HorizontalPodAutoscalersEntry - nil, // 46: api.v1.Namespace.EventsEntry - nil, // 47: api.v1.Namespace.KedaScaledJobsEntry - nil, // 48: api.v1.Namespace.KedaScaledObjectsEntry - nil, // 49: api.v1.Namespace.CsiStorageCapacitiesEntry - nil, // 50: api.v1.ClusterScopedSnapshot.PersistentVolumesEntry - nil, // 51: api.v1.ClusterScopedSnapshot.StorageClassesEntry - nil, // 52: api.v1.ClusterScopedSnapshot.ClusterRolesEntry - nil, // 53: api.v1.ClusterScopedSnapshot.ClusterRoleBindingsEntry - nil, // 54: api.v1.ClusterScopedSnapshot.CustomResourceDefinitionsEntry - nil, // 55: api.v1.ClusterScopedSnapshot.IngressClassesEntry - nil, // 56: api.v1.ClusterScopedSnapshot.CsiNodesEntry - nil, // 57: api.v1.ClusterScopedSnapshot.CsiDriversEntry - nil, // 58: api.v1.ClusterScopedSnapshot.VolumeAttachmentsEntry - nil, // 59: api.v1.ClusterSnapshot.NodesEntry - nil, // 60: api.v1.ClusterSnapshot.NamespacesEntry - nil, // 61: api.v1.LogEntry.FieldsEntry - (*timestamppb.Timestamp)(nil), // 62: google.protobuf.Timestamp - (*structpb.Struct)(nil), // 63: google.protobuf.Struct - (*_go.MetricFamily)(nil), // 64: io.prometheus.client.MetricFamily + (*NodeMetadataRequest)(nil), // 24: api.v1.NodeMetadataRequest + (*NodeMetadataResponse)(nil), // 25: api.v1.NodeMetadataResponse + nil, // 26: api.v1.NodeData.PodsEntry + nil, // 27: api.v1.Namespace.DeploymentsEntry + nil, // 28: api.v1.Namespace.StatefulSetsEntry + nil, // 29: api.v1.Namespace.DaemonSetsEntry + nil, // 30: api.v1.Namespace.ReplicaSetsEntry + nil, // 31: api.v1.Namespace.ServicesEntry + nil, // 32: api.v1.Namespace.ConfigMapsEntry + nil, // 33: api.v1.Namespace.SecretsEntry + nil, // 34: api.v1.Namespace.PvcsEntry + nil, // 35: api.v1.Namespace.JobsEntry + nil, // 36: api.v1.Namespace.CronJobsEntry + nil, // 37: api.v1.Namespace.IngressesEntry + nil, // 38: api.v1.Namespace.NetworkPoliciesEntry + nil, // 39: api.v1.Namespace.ServiceAccountsEntry + nil, // 40: api.v1.Namespace.RolesEntry + nil, // 41: api.v1.Namespace.RoleBindingsEntry + nil, // 42: api.v1.Namespace.PodDisruptionBudgetsEntry + nil, // 43: api.v1.Namespace.EndpointsEntry + nil, // 44: api.v1.Namespace.LimitRangesEntry + nil, // 45: api.v1.Namespace.ResourceQuotasEntry + nil, // 46: api.v1.Namespace.UnscheduledPodsEntry + nil, // 47: api.v1.Namespace.HorizontalPodAutoscalersEntry + nil, // 48: api.v1.Namespace.EventsEntry + nil, // 49: api.v1.Namespace.KedaScaledJobsEntry + nil, // 50: api.v1.Namespace.KedaScaledObjectsEntry + nil, // 51: api.v1.Namespace.CsiStorageCapacitiesEntry + nil, // 52: api.v1.ClusterScopedSnapshot.PersistentVolumesEntry + nil, // 53: api.v1.ClusterScopedSnapshot.StorageClassesEntry + nil, // 54: api.v1.ClusterScopedSnapshot.ClusterRolesEntry + nil, // 55: api.v1.ClusterScopedSnapshot.ClusterRoleBindingsEntry + nil, // 56: api.v1.ClusterScopedSnapshot.CustomResourceDefinitionsEntry + nil, // 57: api.v1.ClusterScopedSnapshot.IngressClassesEntry + nil, // 58: api.v1.ClusterScopedSnapshot.CsiNodesEntry + nil, // 59: api.v1.ClusterScopedSnapshot.CsiDriversEntry + nil, // 60: api.v1.ClusterScopedSnapshot.VolumeAttachmentsEntry + nil, // 61: api.v1.ClusterSnapshot.NodesEntry + nil, // 62: api.v1.ClusterSnapshot.NamespacesEntry + nil, // 63: api.v1.LogEntry.FieldsEntry + nil, // 64: api.v1.NodeMetadataResponse.NodeToMetaEntry + (*timestamppb.Timestamp)(nil), // 65: google.protobuf.Timestamp + (*structpb.Struct)(nil), // 66: google.protobuf.Struct + (*_go.MetricFamily)(nil), // 67: io.prometheus.client.MetricFamily + (*Node)(nil), // 68: api.v1.Node } var file_api_v1_metrics_collector_proto_depIdxs = []int32{ - 62, // 0: api.v1.ResourceItem.timestamp:type_name -> google.protobuf.Timestamp + 65, // 0: api.v1.ResourceItem.timestamp:type_name -> google.protobuf.Timestamp 0, // 1: api.v1.ResourceItem.event_type:type_name -> api.v1.EventType - 63, // 2: api.v1.ResourceItem.data:type_name -> google.protobuf.Struct + 66, // 2: api.v1.ResourceItem.data:type_name -> google.protobuf.Struct 1, // 3: api.v1.ResourceItem.resource_type:type_name -> api.v1.ResourceType 1, // 4: api.v1.SendResourceRequest.resource_type:type_name -> api.v1.ResourceType - 62, // 5: api.v1.SendResourceRequest.timestamp:type_name -> google.protobuf.Timestamp + 65, // 5: api.v1.SendResourceRequest.timestamp:type_name -> google.protobuf.Timestamp 0, // 6: api.v1.SendResourceRequest.event_type:type_name -> api.v1.EventType - 63, // 7: api.v1.SendResourceRequest.data:type_name -> google.protobuf.Struct + 66, // 7: api.v1.SendResourceRequest.data:type_name -> google.protobuf.Struct 3, // 8: api.v1.SendResourceBatchRequest.resources:type_name -> api.v1.ResourceItem - 62, // 9: api.v1.GetForecastMetricsRequest.start_time:type_name -> google.protobuf.Timestamp - 62, // 10: api.v1.GetForecastMetricsRequest.end_time:type_name -> google.protobuf.Timestamp + 65, // 9: api.v1.GetForecastMetricsRequest.start_time:type_name -> google.protobuf.Timestamp + 65, // 10: api.v1.GetForecastMetricsRequest.end_time:type_name -> google.protobuf.Timestamp 8, // 11: api.v1.GetForecastMetricsResponse.metrics:type_name -> api.v1.ContainerForecastMetric - 62, // 12: api.v1.ContainerForecastMetric.timestamp:type_name -> google.protobuf.Timestamp - 62, // 13: api.v1.ContainerForecastMetric.created_at:type_name -> google.protobuf.Timestamp - 62, // 14: api.v1.ContainerForecastMetric.updated_at:type_name -> google.protobuf.Timestamp + 65, // 12: api.v1.ContainerForecastMetric.timestamp:type_name -> google.protobuf.Timestamp + 65, // 13: api.v1.ContainerForecastMetric.created_at:type_name -> google.protobuf.Timestamp + 65, // 14: api.v1.ContainerForecastMetric.updated_at:type_name -> google.protobuf.Timestamp 1, // 15: api.v1.SendResourceResponse.resource_type:type_name -> api.v1.ResourceType 1, // 16: api.v1.SendResourceBatchResponse.resource_type:type_name -> api.v1.ResourceType - 64, // 17: api.v1.SendTelemetryMetricsRequest.metric_families:type_name -> io.prometheus.client.MetricFamily - 62, // 18: api.v1.ClusterSnapshotChunk.timestamp:type_name -> google.protobuf.Timestamp + 67, // 17: api.v1.SendTelemetryMetricsRequest.metric_families:type_name -> io.prometheus.client.MetricFamily + 65, // 18: api.v1.ClusterSnapshotChunk.timestamp:type_name -> google.protobuf.Timestamp 20, // 19: api.v1.SendClusterSnapshotStreamResponse.missing_resources:type_name -> api.v1.ClusterSnapshot 15, // 20: api.v1.NodeData.node:type_name -> api.v1.ResourceIdentifier - 24, // 21: api.v1.NodeData.pods:type_name -> api.v1.NodeData.PodsEntry + 26, // 21: api.v1.NodeData.pods:type_name -> api.v1.NodeData.PodsEntry 15, // 22: api.v1.Namespace.namespace:type_name -> api.v1.ResourceIdentifier - 25, // 23: api.v1.Namespace.deployments:type_name -> api.v1.Namespace.DeploymentsEntry - 26, // 24: api.v1.Namespace.stateful_sets:type_name -> api.v1.Namespace.StatefulSetsEntry - 27, // 25: api.v1.Namespace.daemon_sets:type_name -> api.v1.Namespace.DaemonSetsEntry - 28, // 26: api.v1.Namespace.replica_sets:type_name -> api.v1.Namespace.ReplicaSetsEntry - 29, // 27: api.v1.Namespace.services:type_name -> api.v1.Namespace.ServicesEntry - 30, // 28: api.v1.Namespace.config_maps:type_name -> api.v1.Namespace.ConfigMapsEntry - 31, // 29: api.v1.Namespace.secrets:type_name -> api.v1.Namespace.SecretsEntry - 32, // 30: api.v1.Namespace.pvcs:type_name -> api.v1.Namespace.PvcsEntry - 33, // 31: api.v1.Namespace.jobs:type_name -> api.v1.Namespace.JobsEntry - 34, // 32: api.v1.Namespace.cron_jobs:type_name -> api.v1.Namespace.CronJobsEntry - 35, // 33: api.v1.Namespace.ingresses:type_name -> api.v1.Namespace.IngressesEntry - 36, // 34: api.v1.Namespace.network_policies:type_name -> api.v1.Namespace.NetworkPoliciesEntry - 37, // 35: api.v1.Namespace.service_accounts:type_name -> api.v1.Namespace.ServiceAccountsEntry - 38, // 36: api.v1.Namespace.roles:type_name -> api.v1.Namespace.RolesEntry - 39, // 37: api.v1.Namespace.role_bindings:type_name -> api.v1.Namespace.RoleBindingsEntry - 40, // 38: api.v1.Namespace.pod_disruption_budgets:type_name -> api.v1.Namespace.PodDisruptionBudgetsEntry - 41, // 39: api.v1.Namespace.endpoints:type_name -> api.v1.Namespace.EndpointsEntry - 42, // 40: api.v1.Namespace.limit_ranges:type_name -> api.v1.Namespace.LimitRangesEntry - 43, // 41: api.v1.Namespace.resource_quotas:type_name -> api.v1.Namespace.ResourceQuotasEntry - 44, // 42: api.v1.Namespace.unscheduled_pods:type_name -> api.v1.Namespace.UnscheduledPodsEntry - 45, // 43: api.v1.Namespace.horizontal_pod_autoscalers:type_name -> api.v1.Namespace.HorizontalPodAutoscalersEntry - 46, // 44: api.v1.Namespace.events:type_name -> api.v1.Namespace.EventsEntry - 47, // 45: api.v1.Namespace.keda_scaled_jobs:type_name -> api.v1.Namespace.KedaScaledJobsEntry - 48, // 46: api.v1.Namespace.keda_scaled_objects:type_name -> api.v1.Namespace.KedaScaledObjectsEntry - 49, // 47: api.v1.Namespace.csi_storage_capacities:type_name -> api.v1.Namespace.CsiStorageCapacitiesEntry - 50, // 48: api.v1.ClusterScopedSnapshot.persistent_volumes:type_name -> api.v1.ClusterScopedSnapshot.PersistentVolumesEntry - 51, // 49: api.v1.ClusterScopedSnapshot.storage_classes:type_name -> api.v1.ClusterScopedSnapshot.StorageClassesEntry - 52, // 50: api.v1.ClusterScopedSnapshot.cluster_roles:type_name -> api.v1.ClusterScopedSnapshot.ClusterRolesEntry - 53, // 51: api.v1.ClusterScopedSnapshot.cluster_role_bindings:type_name -> api.v1.ClusterScopedSnapshot.ClusterRoleBindingsEntry - 54, // 52: api.v1.ClusterScopedSnapshot.custom_resource_definitions:type_name -> api.v1.ClusterScopedSnapshot.CustomResourceDefinitionsEntry - 55, // 53: api.v1.ClusterScopedSnapshot.ingress_classes:type_name -> api.v1.ClusterScopedSnapshot.IngressClassesEntry - 56, // 54: api.v1.ClusterScopedSnapshot.csi_nodes:type_name -> api.v1.ClusterScopedSnapshot.CsiNodesEntry - 57, // 55: api.v1.ClusterScopedSnapshot.csi_drivers:type_name -> api.v1.ClusterScopedSnapshot.CsiDriversEntry - 58, // 56: api.v1.ClusterScopedSnapshot.volume_attachments:type_name -> api.v1.ClusterScopedSnapshot.VolumeAttachmentsEntry + 27, // 23: api.v1.Namespace.deployments:type_name -> api.v1.Namespace.DeploymentsEntry + 28, // 24: api.v1.Namespace.stateful_sets:type_name -> api.v1.Namespace.StatefulSetsEntry + 29, // 25: api.v1.Namespace.daemon_sets:type_name -> api.v1.Namespace.DaemonSetsEntry + 30, // 26: api.v1.Namespace.replica_sets:type_name -> api.v1.Namespace.ReplicaSetsEntry + 31, // 27: api.v1.Namespace.services:type_name -> api.v1.Namespace.ServicesEntry + 32, // 28: api.v1.Namespace.config_maps:type_name -> api.v1.Namespace.ConfigMapsEntry + 33, // 29: api.v1.Namespace.secrets:type_name -> api.v1.Namespace.SecretsEntry + 34, // 30: api.v1.Namespace.pvcs:type_name -> api.v1.Namespace.PvcsEntry + 35, // 31: api.v1.Namespace.jobs:type_name -> api.v1.Namespace.JobsEntry + 36, // 32: api.v1.Namespace.cron_jobs:type_name -> api.v1.Namespace.CronJobsEntry + 37, // 33: api.v1.Namespace.ingresses:type_name -> api.v1.Namespace.IngressesEntry + 38, // 34: api.v1.Namespace.network_policies:type_name -> api.v1.Namespace.NetworkPoliciesEntry + 39, // 35: api.v1.Namespace.service_accounts:type_name -> api.v1.Namespace.ServiceAccountsEntry + 40, // 36: api.v1.Namespace.roles:type_name -> api.v1.Namespace.RolesEntry + 41, // 37: api.v1.Namespace.role_bindings:type_name -> api.v1.Namespace.RoleBindingsEntry + 42, // 38: api.v1.Namespace.pod_disruption_budgets:type_name -> api.v1.Namespace.PodDisruptionBudgetsEntry + 43, // 39: api.v1.Namespace.endpoints:type_name -> api.v1.Namespace.EndpointsEntry + 44, // 40: api.v1.Namespace.limit_ranges:type_name -> api.v1.Namespace.LimitRangesEntry + 45, // 41: api.v1.Namespace.resource_quotas:type_name -> api.v1.Namespace.ResourceQuotasEntry + 46, // 42: api.v1.Namespace.unscheduled_pods:type_name -> api.v1.Namespace.UnscheduledPodsEntry + 47, // 43: api.v1.Namespace.horizontal_pod_autoscalers:type_name -> api.v1.Namespace.HorizontalPodAutoscalersEntry + 48, // 44: api.v1.Namespace.events:type_name -> api.v1.Namespace.EventsEntry + 49, // 45: api.v1.Namespace.keda_scaled_jobs:type_name -> api.v1.Namespace.KedaScaledJobsEntry + 50, // 46: api.v1.Namespace.keda_scaled_objects:type_name -> api.v1.Namespace.KedaScaledObjectsEntry + 51, // 47: api.v1.Namespace.csi_storage_capacities:type_name -> api.v1.Namespace.CsiStorageCapacitiesEntry + 52, // 48: api.v1.ClusterScopedSnapshot.persistent_volumes:type_name -> api.v1.ClusterScopedSnapshot.PersistentVolumesEntry + 53, // 49: api.v1.ClusterScopedSnapshot.storage_classes:type_name -> api.v1.ClusterScopedSnapshot.StorageClassesEntry + 54, // 50: api.v1.ClusterScopedSnapshot.cluster_roles:type_name -> api.v1.ClusterScopedSnapshot.ClusterRolesEntry + 55, // 51: api.v1.ClusterScopedSnapshot.cluster_role_bindings:type_name -> api.v1.ClusterScopedSnapshot.ClusterRoleBindingsEntry + 56, // 52: api.v1.ClusterScopedSnapshot.custom_resource_definitions:type_name -> api.v1.ClusterScopedSnapshot.CustomResourceDefinitionsEntry + 57, // 53: api.v1.ClusterScopedSnapshot.ingress_classes:type_name -> api.v1.ClusterScopedSnapshot.IngressClassesEntry + 58, // 54: api.v1.ClusterScopedSnapshot.csi_nodes:type_name -> api.v1.ClusterScopedSnapshot.CsiNodesEntry + 59, // 55: api.v1.ClusterScopedSnapshot.csi_drivers:type_name -> api.v1.ClusterScopedSnapshot.CsiDriversEntry + 60, // 56: api.v1.ClusterScopedSnapshot.volume_attachments:type_name -> api.v1.ClusterScopedSnapshot.VolumeAttachmentsEntry 19, // 57: api.v1.ClusterSnapshot.cluster_info:type_name -> api.v1.ClusterInfo - 59, // 58: api.v1.ClusterSnapshot.nodes:type_name -> api.v1.ClusterSnapshot.NodesEntry - 60, // 59: api.v1.ClusterSnapshot.namespaces:type_name -> api.v1.ClusterSnapshot.NamespacesEntry + 61, // 58: api.v1.ClusterSnapshot.nodes:type_name -> api.v1.ClusterSnapshot.NodesEntry + 62, // 59: api.v1.ClusterSnapshot.namespaces:type_name -> api.v1.ClusterSnapshot.NamespacesEntry 18, // 60: api.v1.ClusterSnapshot.cluster_scoped:type_name -> api.v1.ClusterScopedSnapshot - 62, // 61: api.v1.ClusterSnapshot.timestamp:type_name -> google.protobuf.Timestamp + 65, // 61: api.v1.ClusterSnapshot.timestamp:type_name -> google.protobuf.Timestamp 22, // 62: api.v1.SendTelemetryLogsRequest.logs:type_name -> api.v1.LogEntry - 62, // 63: api.v1.LogEntry.timestamp:type_name -> google.protobuf.Timestamp + 65, // 63: api.v1.LogEntry.timestamp:type_name -> google.protobuf.Timestamp 2, // 64: api.v1.LogEntry.level:type_name -> api.v1.LogLevel - 61, // 65: api.v1.LogEntry.fields:type_name -> api.v1.LogEntry.FieldsEntry - 15, // 66: api.v1.NodeData.PodsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 67: api.v1.Namespace.DeploymentsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 68: api.v1.Namespace.StatefulSetsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 69: api.v1.Namespace.DaemonSetsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 70: api.v1.Namespace.ReplicaSetsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 71: api.v1.Namespace.ServicesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 72: api.v1.Namespace.ConfigMapsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 73: api.v1.Namespace.SecretsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 74: api.v1.Namespace.PvcsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 75: api.v1.Namespace.JobsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 76: api.v1.Namespace.CronJobsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 77: api.v1.Namespace.IngressesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 78: api.v1.Namespace.NetworkPoliciesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 79: api.v1.Namespace.ServiceAccountsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 80: api.v1.Namespace.RolesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 81: api.v1.Namespace.RoleBindingsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 82: api.v1.Namespace.PodDisruptionBudgetsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 83: api.v1.Namespace.EndpointsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 84: api.v1.Namespace.LimitRangesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 85: api.v1.Namespace.ResourceQuotasEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 86: api.v1.Namespace.UnscheduledPodsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 87: api.v1.Namespace.HorizontalPodAutoscalersEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 88: api.v1.Namespace.EventsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 89: api.v1.Namespace.KedaScaledJobsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 90: api.v1.Namespace.KedaScaledObjectsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 91: api.v1.Namespace.CsiStorageCapacitiesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 92: api.v1.ClusterScopedSnapshot.PersistentVolumesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 93: api.v1.ClusterScopedSnapshot.StorageClassesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 94: api.v1.ClusterScopedSnapshot.ClusterRolesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 95: api.v1.ClusterScopedSnapshot.ClusterRoleBindingsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 96: api.v1.ClusterScopedSnapshot.CustomResourceDefinitionsEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 97: api.v1.ClusterScopedSnapshot.IngressClassesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 98: api.v1.ClusterScopedSnapshot.CsiNodesEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 99: api.v1.ClusterScopedSnapshot.CsiDriversEntry.value:type_name -> api.v1.ResourceIdentifier - 15, // 100: api.v1.ClusterScopedSnapshot.VolumeAttachmentsEntry.value:type_name -> api.v1.ResourceIdentifier - 16, // 101: api.v1.ClusterSnapshot.NodesEntry.value:type_name -> api.v1.NodeData - 17, // 102: api.v1.ClusterSnapshot.NamespacesEntry.value:type_name -> api.v1.Namespace - 4, // 103: api.v1.MetricsCollectorService.SendResource:input_type -> api.v1.SendResourceRequest - 5, // 104: api.v1.MetricsCollectorService.SendResourceBatch:input_type -> api.v1.SendResourceBatchRequest - 11, // 105: api.v1.MetricsCollectorService.SendTelemetryMetrics:input_type -> api.v1.SendTelemetryMetricsRequest - 13, // 106: api.v1.MetricsCollectorService.SendClusterSnapshotStream:input_type -> api.v1.ClusterSnapshotChunk - 21, // 107: api.v1.MetricsCollectorService.SendTelemetryLogs:input_type -> api.v1.SendTelemetryLogsRequest - 9, // 108: api.v1.MetricsCollectorService.SendResource:output_type -> api.v1.SendResourceResponse - 10, // 109: api.v1.MetricsCollectorService.SendResourceBatch:output_type -> api.v1.SendResourceBatchResponse - 12, // 110: api.v1.MetricsCollectorService.SendTelemetryMetrics:output_type -> api.v1.SendTelemetryMetricsResponse - 14, // 111: api.v1.MetricsCollectorService.SendClusterSnapshotStream:output_type -> api.v1.SendClusterSnapshotStreamResponse - 23, // 112: api.v1.MetricsCollectorService.SendTelemetryLogs:output_type -> api.v1.SendTelemetryLogsResponse - 108, // [108:113] is the sub-list for method output_type - 103, // [103:108] is the sub-list for method input_type - 103, // [103:103] is the sub-list for extension type_name - 103, // [103:103] is the sub-list for extension extendee - 0, // [0:103] is the sub-list for field type_name + 63, // 65: api.v1.LogEntry.fields:type_name -> api.v1.LogEntry.FieldsEntry + 64, // 66: api.v1.NodeMetadataResponse.node_to_meta:type_name -> api.v1.NodeMetadataResponse.NodeToMetaEntry + 15, // 67: api.v1.NodeData.PodsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 68: api.v1.Namespace.DeploymentsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 69: api.v1.Namespace.StatefulSetsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 70: api.v1.Namespace.DaemonSetsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 71: api.v1.Namespace.ReplicaSetsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 72: api.v1.Namespace.ServicesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 73: api.v1.Namespace.ConfigMapsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 74: api.v1.Namespace.SecretsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 75: api.v1.Namespace.PvcsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 76: api.v1.Namespace.JobsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 77: api.v1.Namespace.CronJobsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 78: api.v1.Namespace.IngressesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 79: api.v1.Namespace.NetworkPoliciesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 80: api.v1.Namespace.ServiceAccountsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 81: api.v1.Namespace.RolesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 82: api.v1.Namespace.RoleBindingsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 83: api.v1.Namespace.PodDisruptionBudgetsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 84: api.v1.Namespace.EndpointsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 85: api.v1.Namespace.LimitRangesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 86: api.v1.Namespace.ResourceQuotasEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 87: api.v1.Namespace.UnscheduledPodsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 88: api.v1.Namespace.HorizontalPodAutoscalersEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 89: api.v1.Namespace.EventsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 90: api.v1.Namespace.KedaScaledJobsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 91: api.v1.Namespace.KedaScaledObjectsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 92: api.v1.Namespace.CsiStorageCapacitiesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 93: api.v1.ClusterScopedSnapshot.PersistentVolumesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 94: api.v1.ClusterScopedSnapshot.StorageClassesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 95: api.v1.ClusterScopedSnapshot.ClusterRolesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 96: api.v1.ClusterScopedSnapshot.ClusterRoleBindingsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 97: api.v1.ClusterScopedSnapshot.CustomResourceDefinitionsEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 98: api.v1.ClusterScopedSnapshot.IngressClassesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 99: api.v1.ClusterScopedSnapshot.CsiNodesEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 100: api.v1.ClusterScopedSnapshot.CsiDriversEntry.value:type_name -> api.v1.ResourceIdentifier + 15, // 101: api.v1.ClusterScopedSnapshot.VolumeAttachmentsEntry.value:type_name -> api.v1.ResourceIdentifier + 16, // 102: api.v1.ClusterSnapshot.NodesEntry.value:type_name -> api.v1.NodeData + 17, // 103: api.v1.ClusterSnapshot.NamespacesEntry.value:type_name -> api.v1.Namespace + 68, // 104: api.v1.NodeMetadataResponse.NodeToMetaEntry.value:type_name -> api.v1.Node + 4, // 105: api.v1.MetricsCollectorService.SendResource:input_type -> api.v1.SendResourceRequest + 5, // 106: api.v1.MetricsCollectorService.SendResourceBatch:input_type -> api.v1.SendResourceBatchRequest + 11, // 107: api.v1.MetricsCollectorService.SendTelemetryMetrics:input_type -> api.v1.SendTelemetryMetricsRequest + 13, // 108: api.v1.MetricsCollectorService.SendClusterSnapshotStream:input_type -> api.v1.ClusterSnapshotChunk + 21, // 109: api.v1.MetricsCollectorService.SendTelemetryLogs:input_type -> api.v1.SendTelemetryLogsRequest + 24, // 110: api.v1.MetricsCollectorService.NodeMetadata:input_type -> api.v1.NodeMetadataRequest + 9, // 111: api.v1.MetricsCollectorService.SendResource:output_type -> api.v1.SendResourceResponse + 10, // 112: api.v1.MetricsCollectorService.SendResourceBatch:output_type -> api.v1.SendResourceBatchResponse + 12, // 113: api.v1.MetricsCollectorService.SendTelemetryMetrics:output_type -> api.v1.SendTelemetryMetricsResponse + 14, // 114: api.v1.MetricsCollectorService.SendClusterSnapshotStream:output_type -> api.v1.SendClusterSnapshotStreamResponse + 23, // 115: api.v1.MetricsCollectorService.SendTelemetryLogs:output_type -> api.v1.SendTelemetryLogsResponse + 25, // 116: api.v1.MetricsCollectorService.NodeMetadata:output_type -> api.v1.NodeMetadataResponse + 111, // [111:117] is the sub-list for method output_type + 105, // [105:111] is the sub-list for method input_type + 105, // [105:105] is the sub-list for extension type_name + 105, // [105:105] is the sub-list for extension extendee + 0, // [0:105] is the sub-list for field type_name } func init() { file_api_v1_metrics_collector_proto_init() } @@ -3221,6 +3359,7 @@ func file_api_v1_metrics_collector_proto_init() { if File_api_v1_metrics_collector_proto != nil { return } + file_api_v1_common_proto_init() if !protoimpl.UnsafeEnabled { file_api_v1_metrics_collector_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResourceItem); i { @@ -3474,6 +3613,30 @@ func file_api_v1_metrics_collector_proto_init() { return nil } } + file_api_v1_metrics_collector_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeMetadataRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_api_v1_metrics_collector_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NodeMetadataResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -3481,7 +3644,7 @@ func file_api_v1_metrics_collector_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_api_v1_metrics_collector_proto_rawDesc, NumEnums: 3, - NumMessages: 59, + NumMessages: 62, NumExtensions: 0, NumServices: 1, }, diff --git a/gen/api/v1/metrics_collector_grpc.pb.go b/gen/api/v1/metrics_collector_grpc.pb.go index d7053a86..f1446354 100644 --- a/gen/api/v1/metrics_collector_grpc.pb.go +++ b/gen/api/v1/metrics_collector_grpc.pb.go @@ -24,6 +24,7 @@ const ( MetricsCollectorService_SendTelemetryMetrics_FullMethodName = "/api.v1.MetricsCollectorService/SendTelemetryMetrics" MetricsCollectorService_SendClusterSnapshotStream_FullMethodName = "/api.v1.MetricsCollectorService/SendClusterSnapshotStream" MetricsCollectorService_SendTelemetryLogs_FullMethodName = "/api.v1.MetricsCollectorService/SendTelemetryLogs" + MetricsCollectorService_NodeMetadata_FullMethodName = "/api.v1.MetricsCollectorService/NodeMetadata" ) // MetricsCollectorServiceClient is the client API for MetricsCollectorService service. @@ -40,6 +41,7 @@ type MetricsCollectorServiceClient interface { SendClusterSnapshotStream(ctx context.Context, opts ...grpc.CallOption) (MetricsCollectorService_SendClusterSnapshotStreamClient, error) // SendTelemetryLogs ingests a batch of log messages from the cluster. SendTelemetryLogs(ctx context.Context, in *SendTelemetryLogsRequest, opts ...grpc.CallOption) (*SendTelemetryLogsResponse, error) + NodeMetadata(ctx context.Context, in *NodeMetadataRequest, opts ...grpc.CallOption) (*NodeMetadataResponse, error) } type metricsCollectorServiceClient struct { @@ -120,6 +122,15 @@ func (c *metricsCollectorServiceClient) SendTelemetryLogs(ctx context.Context, i return out, nil } +func (c *metricsCollectorServiceClient) NodeMetadata(ctx context.Context, in *NodeMetadataRequest, opts ...grpc.CallOption) (*NodeMetadataResponse, error) { + out := new(NodeMetadataResponse) + err := c.cc.Invoke(ctx, MetricsCollectorService_NodeMetadata_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MetricsCollectorServiceServer is the server API for MetricsCollectorService service. // All implementations must embed UnimplementedMetricsCollectorServiceServer // for forward compatibility @@ -134,6 +145,7 @@ type MetricsCollectorServiceServer interface { SendClusterSnapshotStream(MetricsCollectorService_SendClusterSnapshotStreamServer) error // SendTelemetryLogs ingests a batch of log messages from the cluster. SendTelemetryLogs(context.Context, *SendTelemetryLogsRequest) (*SendTelemetryLogsResponse, error) + NodeMetadata(context.Context, *NodeMetadataRequest) (*NodeMetadataResponse, error) mustEmbedUnimplementedMetricsCollectorServiceServer() } @@ -156,6 +168,9 @@ func (UnimplementedMetricsCollectorServiceServer) SendClusterSnapshotStream(Metr func (UnimplementedMetricsCollectorServiceServer) SendTelemetryLogs(context.Context, *SendTelemetryLogsRequest) (*SendTelemetryLogsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SendTelemetryLogs not implemented") } +func (UnimplementedMetricsCollectorServiceServer) NodeMetadata(context.Context, *NodeMetadataRequest) (*NodeMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method NodeMetadata not implemented") +} func (UnimplementedMetricsCollectorServiceServer) mustEmbedUnimplementedMetricsCollectorServiceServer() { } @@ -268,6 +283,24 @@ func _MetricsCollectorService_SendTelemetryLogs_Handler(srv interface{}, ctx con return interceptor(ctx, in, info, handler) } +func _MetricsCollectorService_NodeMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NodeMetadataRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MetricsCollectorServiceServer).NodeMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: MetricsCollectorService_NodeMetadata_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MetricsCollectorServiceServer).NodeMetadata(ctx, req.(*NodeMetadataRequest)) + } + return interceptor(ctx, in, info, handler) +} + // MetricsCollectorService_ServiceDesc is the grpc.ServiceDesc for MetricsCollectorService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -291,6 +324,10 @@ var MetricsCollectorService_ServiceDesc = grpc.ServiceDesc{ MethodName: "SendTelemetryLogs", Handler: _MetricsCollectorService_SendTelemetryLogs_Handler, }, + { + MethodName: "NodeMetadata", + Handler: _MetricsCollectorService_NodeMetadata_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/gen/google/type/money.pb.go b/gen/google/type/money.pb.go new file mode 100644 index 00000000..0d41d5ee --- /dev/null +++ b/gen/google/type/money.pb.go @@ -0,0 +1,195 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc (unknown) +// source: google/type/money.proto + +package money + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Represents an amount of money with its currency type. +type Money struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The three-letter currency code defined in ISO 4217. + CurrencyCode string `protobuf:"bytes,1,opt,name=currency_code,json=currencyCode,proto3" json:"currency_code,omitempty"` + // The whole units of the amount. + // For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar. + Units int64 `protobuf:"varint,2,opt,name=units,proto3" json:"units,omitempty"` + // Number of nano (10^-9) units of the amount. + // The value must be between -999,999,999 and +999,999,999 inclusive. + // If `units` is positive, `nanos` must be positive or zero. + // If `units` is zero, `nanos` can be positive, zero, or negative. + // If `units` is negative, `nanos` must be negative or zero. + // For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000. + Nanos int32 `protobuf:"varint,3,opt,name=nanos,proto3" json:"nanos,omitempty"` +} + +func (x *Money) Reset() { + *x = Money{} + if protoimpl.UnsafeEnabled { + mi := &file_google_type_money_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Money) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Money) ProtoMessage() {} + +func (x *Money) ProtoReflect() protoreflect.Message { + mi := &file_google_type_money_proto_msgTypes[0] + 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 Money.ProtoReflect.Descriptor instead. +func (*Money) Descriptor() ([]byte, []int) { + return file_google_type_money_proto_rawDescGZIP(), []int{0} +} + +func (x *Money) GetCurrencyCode() string { + if x != nil { + return x.CurrencyCode + } + return "" +} + +func (x *Money) GetUnits() int64 { + if x != nil { + return x.Units + } + return 0 +} + +func (x *Money) GetNanos() int32 { + if x != nil { + return x.Nanos + } + return 0 +} + +var File_google_type_money_proto protoreflect.FileDescriptor + +var file_google_type_money_proto_rawDesc = []byte{ + 0x0a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x6d, 0x6f, + 0x6e, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x22, 0x58, 0x0a, 0x05, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x12, + 0x23, 0x0a, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x05, 0x75, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, + 0x6e, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, + 0x42, 0xa5, 0x01, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x74, 0x79, 0x70, 0x65, 0x42, 0x0a, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x36, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, + 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x2f, 0x6d, + 0x6f, 0x6e, 0x65, 0x79, 0x3b, 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, + 0x47, 0x54, 0x58, 0xaa, 0x02, 0x0b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0xca, 0x02, 0x0b, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x54, 0x79, 0x70, 0x65, 0xe2, + 0x02, 0x17, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x5c, 0x54, 0x79, 0x70, 0x65, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0c, 0x47, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x3a, 0x3a, 0x54, 0x79, 0x70, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_google_type_money_proto_rawDescOnce sync.Once + file_google_type_money_proto_rawDescData = file_google_type_money_proto_rawDesc +) + +func file_google_type_money_proto_rawDescGZIP() []byte { + file_google_type_money_proto_rawDescOnce.Do(func() { + file_google_type_money_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_type_money_proto_rawDescData) + }) + return file_google_type_money_proto_rawDescData +} + +var file_google_type_money_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_google_type_money_proto_goTypes = []interface{}{ + (*Money)(nil), // 0: google.type.Money +} +var file_google_type_money_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_google_type_money_proto_init() } +func file_google_type_money_proto_init() { + if File_google_type_money_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_google_type_money_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Money); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_google_type_money_proto_rawDesc, + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_google_type_money_proto_goTypes, + DependencyIndexes: file_google_type_money_proto_depIdxs, + MessageInfos: file_google_type_money_proto_msgTypes, + }.Build() + File_google_type_money_proto = out.File + file_google_type_money_proto_rawDesc = nil + file_google_type_money_proto_goTypes = nil + file_google_type_money_proto_depIdxs = nil +} diff --git a/internal/collector/interface.go b/internal/collector/interface.go index a32abf69..06649ef3 100644 --- a/internal/collector/interface.go +++ b/internal/collector/interface.go @@ -138,6 +138,7 @@ const ( CSIDriver CSIStorageCapacity VolumeAttachment + KubeflowNotebook ) // String returns the string representation of the ResourceType @@ -189,6 +190,7 @@ func (r ResourceType) String() string { CSIDriver: "csi_driver", CSIStorageCapacity: "csi_storage_capacity", VolumeAttachment: "volume_attachment", + KubeflowNotebook: "kubeflow_notebook", } if name, ok := names[r]; ok { @@ -292,6 +294,8 @@ func (r ResourceType) ProtoType() gen.ResourceType { return gen.ResourceType_RESOURCE_TYPE_CSI_STORAGE_CAPACITY case VolumeAttachment: return gen.ResourceType_RESOURCE_TYPE_VOLUME_ATTACHMENT + case KubeflowNotebook: + return gen.ResourceType_RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS default: return gen.ResourceType_RESOURCE_TYPE_UNSPECIFIED } diff --git a/internal/collector/kubeflow_notebook_collector.go b/internal/collector/kubeflow_notebook_collector.go new file mode 100644 index 00000000..05748f8d --- /dev/null +++ b/internal/collector/kubeflow_notebook_collector.go @@ -0,0 +1,408 @@ +// internal/collector/kubeflow_notebook_collector.go +package collector + +import ( + "context" + "fmt" + "sync" + "time" + + gen "github.com/devzero-inc/zxporter/gen/api/v1" + telemetry_logger "github.com/devzero-inc/zxporter/internal/logger" + "github.com/go-logr/logr" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/dynamic/dynamicinformer" + "k8s.io/client-go/tools/cache" +) + +// KubeflowNotebookCollector watches for Kubeflow Notebook resources +type KubeflowNotebookCollector struct { + dynamicClient dynamic.Interface + batchChan chan CollectedResource + resourceChan chan []CollectedResource + batcher *ResourcesBatcher + stopCh chan struct{} + informers map[string]cache.SharedIndexInformer + informerStopChs map[string]chan struct{} + namespaces []string + excludedNotebooks map[types.NamespacedName]bool + logger logr.Logger + telemetryLogger telemetry_logger.Logger + mu sync.RWMutex +} + +// ExcludedKubeflowNotebook represents a Kubeflow Notebook to exclude from collection +type ExcludedKubeflowNotebook struct { + Namespace string + Name string +} + +// NewKubeflowNotebookCollector creates a new collector for Kubeflow Notebook resources +func NewKubeflowNotebookCollector( + dynamicClient dynamic.Interface, + namespaces []string, + excludedNotebooks []ExcludedKubeflowNotebook, + maxBatchSize int, + maxBatchTime time.Duration, + logger logr.Logger, + telemetryLogger telemetry_logger.Logger, +) *KubeflowNotebookCollector { + // map for quicker lookups + excludedNotebooksMap := make(map[types.NamespacedName]bool) + for _, n := range excludedNotebooks { + excludedNotebooksMap[types.NamespacedName{ + Namespace: n.Namespace, + Name: n.Name, + }] = true + } + + batchChan := make(chan CollectedResource, 100) + resourceChan := make(chan []CollectedResource, 100) + + batcher := NewResourcesBatcher( + maxBatchSize, + maxBatchTime, + batchChan, + resourceChan, + logger, + ) + + return &KubeflowNotebookCollector{ + dynamicClient: dynamicClient, + batchChan: batchChan, + resourceChan: resourceChan, + batcher: batcher, + stopCh: make(chan struct{}), + informers: make(map[string]cache.SharedIndexInformer), + informerStopChs: make(map[string]chan struct{}), + namespaces: namespaces, + excludedNotebooks: excludedNotebooksMap, + logger: logger.WithName("kubeflow-notebook-collector"), + telemetryLogger: telemetryLogger, + } +} + +// Start begins the Kubeflow Notebook resources collection process +func (c *KubeflowNotebookCollector) Start(ctx context.Context) error { + c.logger.Info("Starting Kubeflow Notebook collector", "namespaces", c.namespaces) + + gvr := schema.GroupVersionResource{ + Group: "kubeflow.org", + Version: "v1", + Resource: "notebooks", + } + + // Set up informers based on namespace configuration + var factory dynamicinformer.DynamicSharedInformerFactory + if len(c.namespaces) == 1 && c.namespaces[0] != "" { + factory = dynamicinformer.NewFilteredDynamicSharedInformerFactory( + c.dynamicClient, + 0, + c.namespaces[0], + nil, + ) + } else { + factory = dynamicinformer.NewFilteredDynamicSharedInformerFactory( + c.dynamicClient, + 0, + "", // All namespaces + nil, + ) + } + + informer := factory.ForResource(gvr).Informer() + + _, err := informer.AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + u, ok := obj.(*unstructured.Unstructured) + if !ok { + c.logger.Error(nil, "Failed to convert object to unstructured") + c.telemetryLogger.Report( + gen.LogLevel_LOG_LEVEL_ERROR, + "KubeflowNotebookCollector_AddFunc", + "Failed to convert object to unstructured", + fmt.Errorf("type assertion failed"), + map[string]string{ + "object_type": fmt.Sprintf("%T", obj), + }, + ) + return + } + c.handleNotebookEvent(u, EventTypeAdd) + }, + UpdateFunc: func(oldObj, newObj interface{}) { + _, ok := oldObj.(*unstructured.Unstructured) + if !ok { + c.logger.Error(nil, "Failed to convert old object to unstructured") + c.telemetryLogger.Report( + gen.LogLevel_LOG_LEVEL_ERROR, + "KubeflowNotebookCollector_UpdateFunc", + "Failed to convert old object to unstructured", + fmt.Errorf("type assertion failed"), + map[string]string{ + "object_type": fmt.Sprintf("%T", oldObj), + }, + ) + return + } + + newU, ok := newObj.(*unstructured.Unstructured) + if !ok { + c.logger.Error(nil, "Failed to convert new object to unstructured") + c.telemetryLogger.Report( + gen.LogLevel_LOG_LEVEL_ERROR, + "KubeflowNotebookCollector_UpdateFunc", + "Failed to convert new object to unstructured", + fmt.Errorf("type assertion failed"), + map[string]string{ + "object_type": fmt.Sprintf("%T", newObj), + }, + ) + return + } + + c.handleNotebookEvent(newU, EventTypeUpdate) + }, + DeleteFunc: func(obj interface{}) { + u, ok := obj.(*unstructured.Unstructured) + if !ok { + // Try to handle DeletedFinalStateUnknown + if tombstone, ok := obj.(cache.DeletedFinalStateUnknown); ok { + if u, ok = tombstone.Obj.(*unstructured.Unstructured); ok { + c.handleNotebookEvent(u, EventTypeDelete) + return + } + } + c.logger.Error(nil, "Failed to convert deleted object") + c.telemetryLogger.Report( + gen.LogLevel_LOG_LEVEL_ERROR, + "KubeflowNotebookCollector_DeleteFunc", + "Failed to convert deleted object", + fmt.Errorf("type assertion failed"), + map[string]string{ + "object_type": fmt.Sprintf("%T", obj), + }, + ) + return + } + c.handleNotebookEvent(u, EventTypeDelete) + }, + }) + if err != nil { + c.telemetryLogger.Report( + gen.LogLevel_LOG_LEVEL_ERROR, + "KubeflowNotebookCollector_Start", + "Failed to add event handler to informer", + err, + map[string]string{ + "resource": "notebooks", + }, + ) + return fmt.Errorf("failed to add event handler to informer for Kubeflow Notebooks: %w", err) + } + + notebookKey := "notebooks" + c.informers[notebookKey] = informer + c.informerStopChs[notebookKey] = make(chan struct{}) + + // Start the informer + go informer.Run(c.informerStopChs[notebookKey]) + + syncCtx, cancel := context.WithTimeout(ctx, 30*time.Second) + defer cancel() + + if !cache.WaitForCacheSync(syncCtx.Done(), informer.HasSynced) { + c.telemetryLogger.Report( + gen.LogLevel_LOG_LEVEL_ERROR, + "KubeflowNotebookCollector_Start", + "Timeout waiting for cache to sync", + fmt.Errorf("cache sync timeout"), + map[string]string{ + "resource": "notebooks", + "timeout": "30s", + }, + ) + return fmt.Errorf("timeout waiting for Kubeflow Notebooks cache to sync") + } + + c.logger.Info("Successfully started informer for Kubeflow Notebooks") + + c.logger.Info("Starting resources batcher for Kubeflow Notebooks") + c.batcher.start() + + stopCh := c.stopCh + go func() { + select { + case <-ctx.Done(): + c.Stop() + case <-stopCh: + // Channel was closed by Stop() method + } + }() + + return nil +} + +// handleNotebookEvent processes Kubeflow Notebook events +func (c *KubeflowNotebookCollector) handleNotebookEvent(obj *unstructured.Unstructured, eventType EventType) { + name := obj.GetName() + namespace := obj.GetNamespace() + + // Check if this resource should be excluded + if c.isExcluded(namespace, name) { + return + } + + processedObj := c.processNotebook(obj) + + key := fmt.Sprintf("%s/%s", namespace, name) + + // Send the processed resource to the batch channel + c.batchChan <- CollectedResource{ + ResourceType: KubeflowNotebook, + Object: processedObj, + Timestamp: time.Now(), + EventType: eventType, + Key: key, + } +} + +// processNotebook extracts relevant fields from Kubeflow Notebook objects +func (c *KubeflowNotebookCollector) processNotebook(obj *unstructured.Unstructured) map[string]interface{} { + result := map[string]interface{}{ + "name": obj.GetName(), + "namespace": obj.GetNamespace(), + "resourceVersion": obj.GetResourceVersion(), + "creationTimestamp": obj.GetCreationTimestamp().Unix(), + "raw": obj, + } + + return result +} + +// isExcluded checks if a notebook should be excluded +func (c *KubeflowNotebookCollector) isExcluded(namespace, name string) bool { + // Check if monitoring specific namespaces and this resource isn't in them + if len(c.namespaces) > 0 && c.namespaces[0] != "" { + found := false + for _, ns := range c.namespaces { + if ns == namespace { + found = true + break + } + } + if !found { + return true + } + } + + // Check if resource is specifically excluded + c.mu.RLock() + defer c.mu.RUnlock() + + key := types.NamespacedName{ + Namespace: namespace, + Name: name, + } + return c.excludedNotebooks[key] +} + +// Stop gracefully shuts down the Kubeflow Notebook collector +func (c *KubeflowNotebookCollector) Stop() error { + c.logger.Info("Stopping Kubeflow Notebook collector") + + // Stop all informers + for key, stopCh := range c.informerStopChs { + c.logger.Info("Stopping informer", "resource", key) + close(stopCh) + } + + c.informers = make(map[string]cache.SharedIndexInformer) + c.informerStopChs = make(map[string]chan struct{}) + + // Close the main stop channel (signals informers to stop) + select { + case <-c.stopCh: + c.logger.Info("Kubeflow Notebook collector stop channel already closed") + default: + close(c.stopCh) + c.logger.Info("Closed Kubeflow Notebook collector stop channel") + } + + // Close the batchChan (input to the batcher). + if c.batchChan != nil { + close(c.batchChan) + c.batchChan = nil + c.logger.Info("Closed Kubeflow Notebook collector batch input channel") + } + + // Stop the batcher (waits for completion). + if c.batcher != nil { + c.batcher.stop() + c.logger.Info("Kubeflow Notebook collector batcher stopped") + } + // resourceChan is closed by the batcher's defer func. + + return nil +} + +// GetResourceChannel returns the channel for collected resource batches +func (c *KubeflowNotebookCollector) GetResourceChannel() <-chan []CollectedResource { + return c.resourceChan +} + +// GetType returns the type of resource this collector handles +func (c *KubeflowNotebookCollector) GetType() string { + return "kubeflow_notebook" +} + +// IsAvailable checks if Kubeflow Notebook resources can be accessed in the cluster +func (c *KubeflowNotebookCollector) IsAvailable(ctx context.Context) bool { + gvr := schema.GroupVersionResource{ + Group: "kubeflow.org", + Version: "v1", + Resource: "notebooks", + } + + _, err := c.dynamicClient.Resource(gvr).List(ctx, metav1.ListOptions{Limit: 1}) + if err != nil { + c.logger.Info("Kubeflow Notebook resources not available in the cluster", "error", err.Error()) + c.telemetryLogger.Report( + gen.LogLevel_LOG_LEVEL_WARN, + "KubeflowNotebookCollector_IsAvailable", + "Kubeflow Notebook resources not available in the cluster", + err, + map[string]string{ + "resource": "notebooks", + }, + ) + return false + } + return true +} + +// AddResource manually adds a Kubeflow Notebook resource to be processed by the collector +func (c *KubeflowNotebookCollector) AddResource(resource interface{}) error { + notebook, ok := resource.(*unstructured.Unstructured) + if !ok { + err := fmt.Errorf("expected *unstructured.Unstructured, got %T", resource) + c.telemetryLogger.Report( + gen.LogLevel_LOG_LEVEL_ERROR, + "KubeflowNotebookCollector_AddResource", + "Invalid resource type", + err, + map[string]string{ + "expected_type": "*unstructured.Unstructured", + "actual_type": fmt.Sprintf("%T", resource), + }, + ) + return err + } + + c.handleNotebookEvent(notebook, EventTypeAdd) + return nil +} diff --git a/internal/collector/types.go b/internal/collector/types.go index 9dd421d3..d2323386 100644 --- a/internal/collector/types.go +++ b/internal/collector/types.go @@ -10,7 +10,9 @@ func AllResourceTypes() []ResourceType { Role, RoleBinding, ClusterRole, ClusterRoleBinding, PodDisruptionBudget, StorageClass, PersistentVolume, IngressClass, Node, NodeResource, Cluster, ContainerResource, - Namespace, CSINode, Karpenter, Datadog, + Namespace, CSINode, Karpenter, Datadog, ArgoRollouts, KedaScaledJob, + KedaScaledObject, ClusterSnapshot, CSIDriver, CSIStorageCapacity, + VolumeAttachment, KubeflowNotebook, } } diff --git a/internal/controller/collectionpolicy_controller.go b/internal/controller/collectionpolicy_controller.go index d0cad2bb..d6c5adc1 100644 --- a/internal/controller/collectionpolicy_controller.go +++ b/internal/controller/collectionpolicy_controller.go @@ -118,6 +118,7 @@ type PolicyConfig struct { ExcludedCSIDrivers []string ExcludedCSIStorageCapacities []collector.ExcludedCSIStorageCapacity ExcludedVolumeAttachments []string + ExcludedKubeflowNotebooks []collector.ExcludedKubeflowNotebook DisabledCollectors []string @@ -226,6 +227,9 @@ type PolicyConfig struct { //+kubebuilder:rbac:groups=keda.sh,resources=triggerauthentications,verbs=get;list;watch //+kubebuilder:rbac:groups=keda.sh,resources=clustertriggerauthentications,verbs=get;list;watch +// Kubeflow resources +//+kubebuilder:rbac:groups=kubeflow.org,resources=notebooks,verbs=get;list;watch + // Reconcile is part of the main kubernetes reconciliation loop which aims to // move the current state of the cluster closer to the desired state. func (r *CollectionPolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { @@ -749,6 +753,10 @@ func (r *CollectionPolicyReconciler) identifyAffectedCollectors(oldConfig, newCo affectedCollectors["volume_attachment"] = true } + if !reflect.DeepEqual(oldConfig.ExcludedKubeflowNotebooks, newConfig.ExcludedKubeflowNotebooks) { + affectedCollectors["kubeflow_notebook"] = true + } + // Check if the special node collectors are affected by the update interval change if oldConfig.UpdateInterval != newConfig.UpdateInterval || oldConfig.PrometheusURL != newConfig.PrometheusURL || @@ -1414,6 +1422,16 @@ func (r *CollectionPolicyReconciler) restartCollectors(ctx context.Context, newC logger, r.TelemetryLogger, ) + case "kubeflow_notebook": + replacedCollector = collector.NewKubeflowNotebookCollector( + r.DynamicClient, + newConfig.TargetNamespaces, + newConfig.ExcludedKubeflowNotebooks, + collector.DefaultMaxBatchSize, + collector.DefaultMaxBatchTime, + logger, + r.TelemetryLogger, + ) default: logger.Info("Collector type not handled in selective restart", "type", collectorType) continue @@ -2504,6 +2522,18 @@ func (r *CollectionPolicyReconciler) registerResourceCollectors( ), name: collector.VolumeAttachment, }, + { + collector: collector.NewKubeflowNotebookCollector( + r.DynamicClient, + config.TargetNamespaces, + config.ExcludedKubeflowNotebooks, + collector.DefaultMaxBatchSize, + collector.DefaultMaxBatchTime, + logger, + r.TelemetryLogger, + ), + name: collector.KubeflowNotebook, + }, } // Register all collectors @@ -3112,6 +3142,16 @@ func (r *CollectionPolicyReconciler) handleDisabledCollectorsChange( logger, r.TelemetryLogger, ) + case "kubeflow_notebook": + replacedCollector = collector.NewKubeflowNotebookCollector( + r.DynamicClient, + newConfig.TargetNamespaces, + newConfig.ExcludedKubeflowNotebooks, + collector.DefaultMaxBatchSize, + collector.DefaultMaxBatchTime, + logger, + r.TelemetryLogger, + ) default: logger.Info("Unknown collector type, skipping", "type", collectorType) continue diff --git a/proto/dakr_proto_descriptor.bin b/proto/dakr_proto_descriptor.bin index c8d43c0966136e1006013a112dd308a36aad6839..f91216e4644068299e77b446944303a655c1356a 100644 GIT binary patch literal 183650 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 z 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 delta 10513 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 G3I7i;H-+i| diff --git a/proto/metrics_collector.proto b/proto/metrics_collector.proto index 4da9ac2d..1faacc37 100644 --- a/proto/metrics_collector.proto +++ b/proto/metrics_collector.proto @@ -5,6 +5,7 @@ package api.v1; import "google/protobuf/timestamp.proto"; import "google/protobuf/struct.proto"; import "io/prometheus/client/metrics.proto"; +import "api/v1/common.proto"; option go_package = "github.com/devzero-inc/services/dakr/gen/api/v1;gen"; option java_multiple_files = true; @@ -118,9 +119,11 @@ enum ResourceType { // VOLUME ATTACHMENT RESOURCE_TYPE_VOLUME_ATTACHMENT = 48; + // KUBEFLOW NOTEBOOKS + RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS = 49; + // Cluster snapshot type RESOURCE_TYPE_CLUSTER_SNAPSHOT = 77; - } // ResourceItem contains the data for a single resource event. @@ -436,4 +439,15 @@ service MetricsCollectorService { // SendTelemetryLogs ingests a batch of log messages from the cluster. rpc SendTelemetryLogs(SendTelemetryLogsRequest) returns (SendTelemetryLogsResponse); + + rpc NodeMetadata(NodeMetadataRequest) returns (NodeMetadataResponse); +} + +message NodeMetadataRequest { + string team_id = 1; // Unique identifier for the team. + string cluster_id = 2; // Unique identifier for the cluster. +} + +message NodeMetadataResponse { + map node_to_meta = 1; // map is node name to node } From bd5d52437fcf4ad4eca950a61cc59ddfe1887b12 Mon Sep 17 00:00:00 2001 From: Parthiba-Hazra Date: Fri, 26 Sep 2025 23:31:16 +0530 Subject: [PATCH 2/5] make build installer --- dist/backend-install.yaml | 64 +++++++++++++++++------------- dist/install.yaml | 64 +++++++++++++++++------------- dist/installer_updater.yaml | 64 +++++++++++++++++------------- dist/zxporter.yaml | 64 +++++++++++++++++------------- go.mod | 40 +++++++++---------- go.sum | 78 +++++++++++++++++++------------------ 6 files changed, 204 insertions(+), 170 deletions(-) diff --git a/dist/backend-install.yaml b/dist/backend-install.yaml index 481ecddb..0410edc2 100644 --- a/dist/backend-install.yaml +++ b/dist/backend-install.yaml @@ -865,6 +865,34 @@ kind: ClusterRole metadata: name: devzero-zxporter-manager-role rules: + - apiGroups: + - "" + resources: + - configmaps + - endpoints + - events + - limitranges + - namespaces + - nodes + - persistentvolumeclaims + - persistentvolumes + - pods + - replicationcontrollers + - resourcequotas + - serviceaccounts + - services + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes/metrics + - nodes/status + - pods/status + verbs: + - get - apiGroups: - apiextensions.k8s.io resources: @@ -927,34 +955,6 @@ rules: - get - list - watch - - apiGroups: - - "" - resources: - - configmaps - - endpoints - - events - - limitranges - - namespaces - - nodes - - persistentvolumeclaims - - persistentvolumes - - pods - - replicationcontrollers - - resourcequotas - - serviceaccounts - - services - verbs: - - get - - list - - watch - - apiGroups: - - "" - resources: - - nodes/metrics - - nodes/status - - pods/status - verbs: - - get - apiGroups: - datadoghq.com resources: @@ -1020,6 +1020,14 @@ rules: - get - list - watch + - apiGroups: + - kubeflow.org + resources: + - notebooks + verbs: + - get + - list + - watch - apiGroups: - metrics.k8s.io resources: diff --git a/dist/install.yaml b/dist/install.yaml index 600656bc..23ecd760 100644 --- a/dist/install.yaml +++ b/dist/install.yaml @@ -871,6 +871,34 @@ kind: ClusterRole metadata: name: devzero-zxporter-manager-role rules: +- apiGroups: + - "" + resources: + - configmaps + - endpoints + - events + - limitranges + - namespaces + - nodes + - persistentvolumeclaims + - persistentvolumes + - pods + - replicationcontrollers + - resourcequotas + - serviceaccounts + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - nodes/metrics + - nodes/status + - pods/status + verbs: + - get - apiGroups: - apiextensions.k8s.io resources: @@ -933,34 +961,6 @@ rules: - get - list - watch -- apiGroups: - - "" - resources: - - configmaps - - endpoints - - events - - limitranges - - namespaces - - nodes - - persistentvolumeclaims - - persistentvolumes - - pods - - replicationcontrollers - - resourcequotas - - serviceaccounts - - services - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - nodes/metrics - - nodes/status - - pods/status - verbs: - - get - apiGroups: - datadoghq.com resources: @@ -1026,6 +1026,14 @@ rules: - get - list - watch +- apiGroups: + - kubeflow.org + resources: + - notebooks + verbs: + - get + - list + - watch - apiGroups: - metrics.k8s.io resources: diff --git a/dist/installer_updater.yaml b/dist/installer_updater.yaml index 7a5bd5f0..9e5c72a5 100644 --- a/dist/installer_updater.yaml +++ b/dist/installer_updater.yaml @@ -865,6 +865,34 @@ kind: ClusterRole metadata: name: devzero-zxporter-manager-role rules: + - apiGroups: + - "" + resources: + - configmaps + - endpoints + - events + - limitranges + - namespaces + - nodes + - persistentvolumeclaims + - persistentvolumes + - pods + - replicationcontrollers + - resourcequotas + - serviceaccounts + - services + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - nodes/metrics + - nodes/status + - pods/status + verbs: + - get - apiGroups: - apiextensions.k8s.io resources: @@ -927,34 +955,6 @@ rules: - get - list - watch - - apiGroups: - - "" - resources: - - configmaps - - endpoints - - events - - limitranges - - namespaces - - nodes - - persistentvolumeclaims - - persistentvolumes - - pods - - replicationcontrollers - - resourcequotas - - serviceaccounts - - services - verbs: - - get - - list - - watch - - apiGroups: - - "" - resources: - - nodes/metrics - - nodes/status - - pods/status - verbs: - - get - apiGroups: - datadoghq.com resources: @@ -1020,6 +1020,14 @@ rules: - get - list - watch + - apiGroups: + - kubeflow.org + resources: + - notebooks + verbs: + - get + - list + - watch - apiGroups: - metrics.k8s.io resources: diff --git a/dist/zxporter.yaml b/dist/zxporter.yaml index 00b7426f..2ebeeec1 100644 --- a/dist/zxporter.yaml +++ b/dist/zxporter.yaml @@ -142,6 +142,34 @@ kind: ClusterRole metadata: name: devzero-zxporter-manager-role rules: +- apiGroups: + - "" + resources: + - configmaps + - endpoints + - events + - limitranges + - namespaces + - nodes + - persistentvolumeclaims + - persistentvolumes + - pods + - replicationcontrollers + - resourcequotas + - serviceaccounts + - services + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - nodes/metrics + - nodes/status + - pods/status + verbs: + - get - apiGroups: - apiextensions.k8s.io resources: @@ -204,34 +232,6 @@ rules: - get - list - watch -- apiGroups: - - "" - resources: - - configmaps - - endpoints - - events - - limitranges - - namespaces - - nodes - - persistentvolumeclaims - - persistentvolumes - - pods - - replicationcontrollers - - resourcequotas - - serviceaccounts - - services - verbs: - - get - - list - - watch -- apiGroups: - - "" - resources: - - nodes/metrics - - nodes/status - - pods/status - verbs: - - get - apiGroups: - datadoghq.com resources: @@ -297,6 +297,14 @@ rules: - get - list - watch +- apiGroups: + - kubeflow.org + resources: + - notebooks + verbs: + - get + - list + - watch - apiGroups: - metrics.k8s.io resources: diff --git a/go.mod b/go.mod index bfa26412..a2507427 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module github.com/devzero-inc/zxporter -go 1.23.8 - -toolchain go1.24.0 +go 1.24.0 require ( connectrpc.com/connect v1.18.1 @@ -15,8 +13,10 @@ require ( sigs.k8s.io/controller-runtime v0.20.0 ) +require google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 + require ( - cel.dev/expr v0.19.2 // indirect + cel.dev/expr v0.24.0 // indirect github.com/expr-lang/expr v1.17.2 // indirect github.com/google/btree v1.1.3 // indirect // TODO: Using specific commit version because of issue with custom validator webhook: https://github.com/kedacore/keda/pull/6700/files @@ -42,7 +42,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/go-logr/logr v1.4.2 + github.com/go-logr/logr v1.4.3 github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.3.0 github.com/go-openapi/jsonpointer v0.21.0 // indirect @@ -75,29 +75,29 @@ require ( github.com/stoewer/go-strcase v1.3.0 // indirect github.com/x448/float16 v0.8.4 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect - go.opentelemetry.io/otel v1.35.0 // indirect + go.opentelemetry.io/otel v1.36.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 // indirect - go.opentelemetry.io/otel/metric v1.35.0 // indirect - go.opentelemetry.io/otel/sdk v1.35.0 // indirect - go.opentelemetry.io/otel/trace v1.35.0 // indirect + go.opentelemetry.io/otel/metric v1.36.0 // indirect + go.opentelemetry.io/otel/sdk v1.36.0 // indirect + go.opentelemetry.io/otel/trace v1.36.0 // indirect go.opentelemetry.io/proto/otlp v1.5.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac // indirect - golang.org/x/net v0.38.0 // indirect - golang.org/x/oauth2 v0.29.0 // indirect - golang.org/x/sync v0.13.0 // indirect - golang.org/x/sys v0.32.0 // indirect - golang.org/x/term v0.31.0 // indirect - golang.org/x/text v0.24.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/oauth2 v0.30.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/term v0.34.0 // indirect + golang.org/x/text v0.28.0 // indirect golang.org/x/time v0.11.0 // indirect - golang.org/x/tools v0.31.0 // indirect + golang.org/x/tools v0.35.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect - google.golang.org/grpc v1.71.1 - google.golang.org/protobuf v1.36.6 + google.golang.org/genproto/googleapis/api v0.0.0-20250908214217-97024824d090 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090 // indirect + google.golang.org/grpc v1.74.2 + google.golang.org/protobuf v1.36.9 gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/api v0.32.4 diff --git a/go.sum b/go.sum index 5050909b..ecc35543 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -cel.dev/expr v0.19.2 h1:V354PbqIXr9IQdwy4SYA4xa0HXaWq1BUPAGzugBY5V4= -cel.dev/expr v0.19.2/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= +cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= connectrpc.com/connect v1.18.1 h1:PAg7CjSAGvscaf6YZKUefjoih5Z/qYkyaTrBW8xvYPw= connectrpc.com/connect v1.18.1/go.mod h1:0292hj1rnx8oFrStN7cB4jjVBeqs+Yx5yDIC2prWDO8= github.com/NVIDIA/KAI-scheduler v0.4.6 h1:EX42/5zFLt8kyy0I5kLz0IhCwvtvgTAhAaCXWphv78U= @@ -36,8 +36,8 @@ github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8 github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= @@ -149,20 +149,20 @@ go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJyS go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I= -go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= -go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg= +go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0 h1:R3X6ZXmNPRR8ul6i3WgFURCHzaXjHdm0karRG/+dj3s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.28.0/go.mod h1:QWFXnDavXWwMx2EEcZsf3yxgEKAqsxQ+Syjp+seyInw= -go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= -go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= -go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= -go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= -go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o= -go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= -go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= -go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= +go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE= +go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= +go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs= +go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= +go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis= +go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4= +go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w= +go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= @@ -180,54 +180,56 @@ golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac h1:l5+whBCLH3iH2ZNHYLbAe58bo golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac/go.mod h1:hH+7mtFmImwwcMvScyxUhjuVHR3HGaDPMn9rMSUUbxo= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= -golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= +golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98= -golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= -golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= -golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= -golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= -golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb h1:p31xT4yrYrSM/G4Sn2+TNUkVhFCbG9y8itM2S6Th950= -google.golang.org/genproto/googleapis/api v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:jbe3Bkdp+Dh2IrslsFCklNhweNTBgSYanP1UXhJDhKg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= -google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI= -google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= -google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= -google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= +google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9 h1:LvZVVaPE0JSqL+ZWb6ErZfnEOKIqqFWUJE2D0fObSmc= +google.golang.org/genproto v0.0.0-20250922171735-9219d122eba9/go.mod h1:QFOrLhdAe2PsTp3vQY4quuLKTi9j3XG3r6JPPaw7MSc= +google.golang.org/genproto/googleapis/api v0.0.0-20250908214217-97024824d090 h1:d8Nakh1G+ur7+P3GcMjpRDEkoLUcLW2iU92XVqR+XMQ= +google.golang.org/genproto/googleapis/api v0.0.0-20250908214217-97024824d090/go.mod h1:U8EXRNSd8sUYyDfs/It7KVWodQr+Hf9xtxyxWudSwEw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090 h1:/OQuEa4YWtDt7uQWHd3q3sUMb+QOLQUg1xa8CEsRv5w= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250908214217-97024824d090/go.mod h1:GmFNa4BdJZ2a8G+wCe9Bg3wwThLrJun751XstdJt5Og= +google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4= +google.golang.org/grpc v1.74.2/go.mod h1:CtQ+BGjaAIXHs/5YS3i473GqwBBa1zGQNevxdeBEXrM= +google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw= +google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= From 4ae07eea26917d3567332451d148af9425e5b2ab Mon Sep 17 00:00:00 2001 From: Parthiba-Hazra Date: Sat, 27 Sep 2025 00:46:15 +0530 Subject: [PATCH 3/5] emty response NodeMetadata method --- internal/transport/connect_compression_test.go | 10 ++++++++++ test/testserver/main.go | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/internal/transport/connect_compression_test.go b/internal/transport/connect_compression_test.go index ead58e3a..c0664294 100644 --- a/internal/transport/connect_compression_test.go +++ b/internal/transport/connect_compression_test.go @@ -104,6 +104,16 @@ func (m *MockMetricsServer) SendTelemetryLogs( return connect.NewResponse(&gen.SendTelemetryLogsResponse{}), nil } +func (m *MockMetricsServer) NodeMetadata( + ctx context.Context, + req *connect.Request[gen.NodeMetadataRequest], +) (*connect.Response[gen.NodeMetadataResponse], error) { + // Return an empty response for the mock implementation + return connect.NewResponse(&gen.NodeMetadataResponse{ + NodeToMeta: make(map[string]*gen.Node), + }), nil +} + func TestConnectRPCCompressionIntegration(t *testing.T) { // Create mock server mockServer := &MockMetricsServer{} diff --git a/test/testserver/main.go b/test/testserver/main.go index 69115f93..9edaccde 100644 --- a/test/testserver/main.go +++ b/test/testserver/main.go @@ -336,6 +336,14 @@ func (s *MetricsServer) SendTelemetryLogs(context.Context, *connect.Request[apiv return &connect.Response[apiv1.SendTelemetryLogsResponse]{}, nil } +// NodeMetadata implements apiv1connect.MetricsCollectorServiceHandler. +func (s *MetricsServer) NodeMetadata(ctx context.Context, req *connect.Request[apiv1.NodeMetadataRequest]) (*connect.Response[apiv1.NodeMetadataResponse], error) { + // Return an empty response for the test server implementation + return connect.NewResponse(&apiv1.NodeMetadataResponse{ + NodeToMeta: make(map[string]*apiv1.Node), + }), nil +} + // StatsHandler handles the /stats HTTP endpoint func (s *MetricsServer) StatsHandler(w http.ResponseWriter, r *http.Request) { s.mu.Lock() From eee242559eb1c77fc40ec1c8a29be4fe11a2dbc6 Mon Sep 17 00:00:00 2001 From: Parthiba-Hazra Date: Sat, 27 Sep 2025 03:00:34 +0530 Subject: [PATCH 4/5] log --- internal/collector/kubeflow_notebook_collector.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/collector/kubeflow_notebook_collector.go b/internal/collector/kubeflow_notebook_collector.go index 05748f8d..681adc1f 100644 --- a/internal/collector/kubeflow_notebook_collector.go +++ b/internal/collector/kubeflow_notebook_collector.go @@ -262,6 +262,7 @@ func (c *KubeflowNotebookCollector) handleNotebookEvent(obj *unstructured.Unstru key := fmt.Sprintf("%s/%s", namespace, name) // Send the processed resource to the batch channel + c.logger.Info("Collected Kubeflow Notebook resource", "key", key, "eventType", eventType, "resource", processedObj) c.batchChan <- CollectedResource{ ResourceType: KubeflowNotebook, Object: processedObj, From 2c22b6572be63560ead3cd6fd62f817555f2bebd Mon Sep 17 00:00:00 2001 From: Parthiba-Hazra Date: Sat, 27 Sep 2025 04:12:09 +0530 Subject: [PATCH 5/5] proto changes --- gen/api/v1/common.pb.go | 80 ++++++++++--------- gen/api/v1/metrics_collector.pb.go | 122 ++++++++++++++--------------- internal/collector/interface.go | 2 +- proto/dakr_proto_descriptor.bin | Bin 183650 -> 183733 bytes proto/metrics_collector.proto | 2 +- 5 files changed, 106 insertions(+), 100 deletions(-) diff --git a/gen/api/v1/common.pb.go b/gen/api/v1/common.pb.go index 971561df..b22b7b8c 100644 --- a/gen/api/v1/common.pb.go +++ b/gen/api/v1/common.pb.go @@ -55,6 +55,7 @@ const ( K8SObjectKind_K8S_OBJECT_KIND_KARPENTER_RESOURCE K8SObjectKind = 26 K8SObjectKind_K8S_OBJECT_KIND_POD_DISRUPTION_BUDGET K8SObjectKind = 27 K8SObjectKind_K8S_OBJECT_KIND_RESOURCE_QUOTA K8SObjectKind = 28 + K8SObjectKind_K8S_OBJECT_KIND_KUBEFLOW_NOTEBOOK K8SObjectKind = 29 ) // Enum value maps for K8SObjectKind. @@ -89,6 +90,7 @@ var ( 26: "K8S_OBJECT_KIND_KARPENTER_RESOURCE", 27: "K8S_OBJECT_KIND_POD_DISRUPTION_BUDGET", 28: "K8S_OBJECT_KIND_RESOURCE_QUOTA", + 29: "K8S_OBJECT_KIND_KUBEFLOW_NOTEBOOK", } K8SObjectKind_value = map[string]int32{ "K8S_OBJECT_KIND_UNSPECIFIED": 0, @@ -120,6 +122,7 @@ var ( "K8S_OBJECT_KIND_KARPENTER_RESOURCE": 26, "K8S_OBJECT_KIND_POD_DISRUPTION_BUDGET": 27, "K8S_OBJECT_KIND_RESOURCE_QUOTA": 28, + "K8S_OBJECT_KIND_KUBEFLOW_NOTEBOOK": 29, } ) @@ -14134,7 +14137,7 @@ var file_api_v1_common_proto_rawDesc = []byte{ 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x41, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x65, 0x6e, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x61, 0x73, 0x74, - 0x53, 0x65, 0x65, 0x6e, 0x41, 0x67, 0x65, 0x2a, 0xf7, 0x07, 0x0a, 0x0d, 0x4b, 0x38, 0x73, 0x4f, + 0x53, 0x65, 0x65, 0x6e, 0x41, 0x67, 0x65, 0x2a, 0x9e, 0x08, 0x0a, 0x0d, 0x4b, 0x38, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1f, 0x0a, 0x1b, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x4b, 0x38, @@ -14198,44 +14201,47 @@ var file_api_v1_common_proto_rawDesc = []byte{ 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x44, 0x47, 0x45, 0x54, 0x10, 0x1b, 0x12, 0x22, 0x0a, 0x1e, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x51, 0x55, 0x4f, 0x54, 0x41, 0x10, - 0x1c, 0x2a, 0x48, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x42, 0x79, 0x45, 0x6e, 0x75, 0x6d, - 0x12, 0x22, 0x0a, 0x1e, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x42, 0x59, 0x5f, 0x45, 0x4e, 0x55, - 0x4d, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x52, 0x44, 0x45, 0x52, 0x5f, 0x42, 0x59, - 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x53, 0x43, 0x10, 0x01, 0x2a, 0xd4, 0x01, 0x0a, 0x15, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x65, - 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x27, 0x0a, 0x23, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, + 0x1c, 0x12, 0x25, 0x0a, 0x21, 0x4b, 0x38, 0x53, 0x5f, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x46, 0x4c, 0x4f, 0x57, 0x5f, 0x4e, 0x4f, + 0x54, 0x45, 0x42, 0x4f, 0x4f, 0x4b, 0x10, 0x1d, 0x2a, 0x48, 0x0a, 0x0b, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x42, 0x79, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x22, 0x0a, 0x1e, 0x4f, 0x52, 0x44, 0x45, 0x52, + 0x5f, 0x42, 0x59, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4f, + 0x52, 0x44, 0x45, 0x52, 0x5f, 0x42, 0x59, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x53, 0x43, + 0x10, 0x01, 0x2a, 0xd4, 0x01, 0x0a, 0x15, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x27, 0x0a, 0x23, + 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4f, + 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, - 0x0a, 0x1a, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, - 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x22, - 0x0a, 0x1e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, - 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, - 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, - 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x58, - 0x49, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, 0x2a, 0x0a, 0x26, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, - 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, - 0x52, 0x5f, 0x44, 0x4f, 0x45, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, - 0x10, 0x04, 0x2a, 0xa6, 0x01, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x22, 0x57, - 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, - 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x41, 0x43, - 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, - 0x41, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, - 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x57, 0x4f, + 0x5f, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, + 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, + 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x22, 0x0a, 0x1e, 0x4c, 0x41, 0x42, + 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, 0x4f, 0x50, 0x45, 0x52, + 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, 0x2a, 0x0a, + 0x26, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x5f, + 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x44, 0x4f, 0x45, 0x53, 0x5f, 0x4e, 0x4f, + 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x04, 0x2a, 0xa6, 0x01, 0x0a, 0x14, 0x57, 0x6f, + 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x12, 0x26, 0x0a, 0x22, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, 0x0a, 0x1d, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, - 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x42, 0x4f, 0x54, 0x48, 0x10, 0x03, 0x42, 0x84, 0x01, 0x0a, 0x0a, - 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x76, 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x69, 0x6e, - 0x63, 0x2f, 0x7a, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, - 0x58, 0xaa, 0x02, 0x06, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x70, 0x69, - 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x70, 0x69, 0x3a, 0x3a, - 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x22, 0x0a, + 0x1e, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, + 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, + 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x57, 0x4f, 0x52, 0x4b, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x46, 0x49, 0x4c, 0x54, 0x45, 0x52, 0x5f, 0x42, 0x4f, 0x54, 0x48, + 0x10, 0x03, 0x42, 0x84, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x42, 0x0b, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x76, + 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x69, 0x6e, 0x63, 0x2f, 0x7a, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, + 0x72, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, + 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x41, 0x70, 0x69, 0x2e, 0x56, + 0x31, 0xca, 0x02, 0x06, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x70, 0x69, + 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x07, 0x41, 0x70, 0x69, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/gen/api/v1/metrics_collector.pb.go b/gen/api/v1/metrics_collector.pb.go index 82fed168..11b98713 100644 --- a/gen/api/v1/metrics_collector.pb.go +++ b/gen/api/v1/metrics_collector.pb.go @@ -169,7 +169,7 @@ const ( // VOLUME ATTACHMENT ResourceType_RESOURCE_TYPE_VOLUME_ATTACHMENT ResourceType = 48 // KUBEFLOW NOTEBOOKS - ResourceType_RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS ResourceType = 49 + ResourceType_RESOURCE_TYPE_KUBEFLOW_NOTEBOOK ResourceType = 49 // Cluster snapshot type ResourceType_RESOURCE_TYPE_CLUSTER_SNAPSHOT ResourceType = 77 ) @@ -226,7 +226,7 @@ var ( 46: "RESOURCE_TYPE_CSI_DRIVER", 47: "RESOURCE_TYPE_CSI_STORAGE_CAPACITY", 48: "RESOURCE_TYPE_VOLUME_ATTACHMENT", - 49: "RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS", + 49: "RESOURCE_TYPE_KUBEFLOW_NOTEBOOK", 77: "RESOURCE_TYPE_CLUSTER_SNAPSHOT", } ResourceType_value = map[string]int32{ @@ -279,7 +279,7 @@ var ( "RESOURCE_TYPE_CSI_DRIVER": 46, "RESOURCE_TYPE_CSI_STORAGE_CAPACITY": 47, "RESOURCE_TYPE_VOLUME_ATTACHMENT": 48, - "RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS": 49, + "RESOURCE_TYPE_KUBEFLOW_NOTEBOOK": 49, "RESOURCE_TYPE_CLUSTER_SNAPSHOT": 77, } ) @@ -2983,7 +2983,7 @@ var file_api_v1_metrics_collector_proto_rawDesc = []byte{ 0x4e, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x08, 0x12, 0x1f, 0x0a, 0x1b, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, 0x10, 0x09, - 0x2a, 0x90, 0x0d, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x2a, 0x8f, 0x0d, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, @@ -3083,65 +3083,65 @@ var file_api_v1_metrics_collector_proto_rawDesc = []byte{ 0x49, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x5f, 0x43, 0x41, 0x50, 0x41, 0x43, 0x49, 0x54, 0x59, 0x10, 0x2f, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x41, 0x54, 0x54, - 0x41, 0x43, 0x48, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x30, 0x12, 0x24, 0x0a, 0x20, 0x52, 0x45, 0x53, + 0x41, 0x43, 0x48, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x30, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x46, - 0x4c, 0x4f, 0x57, 0x5f, 0x4e, 0x4f, 0x54, 0x45, 0x42, 0x4f, 0x4f, 0x4b, 0x53, 0x10, 0x31, 0x12, - 0x22, 0x0a, 0x1e, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, - 0x54, 0x10, 0x4d, 0x2a, 0x8c, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x19, 0x0a, 0x15, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, - 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01, - 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x49, 0x4e, - 0x46, 0x4f, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, - 0x4c, 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, - 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x13, 0x0a, - 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, - 0x10, 0x05, 0x32, 0xae, 0x04, 0x0a, 0x17, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x6f, - 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, - 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1b, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x11, 0x53, 0x65, 0x6e, - 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x20, - 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x23, 0x2e, 0x61, 0x70, - 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, - 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, - 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x19, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6c, + 0x4c, 0x4f, 0x57, 0x5f, 0x4e, 0x4f, 0x54, 0x45, 0x42, 0x4f, 0x4f, 0x4b, 0x10, 0x31, 0x12, 0x22, + 0x0a, 0x1e, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, + 0x43, 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x4e, 0x41, 0x50, 0x53, 0x48, 0x4f, 0x54, + 0x10, 0x4d, 0x2a, 0x8c, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, + 0x19, 0x0a, 0x15, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, + 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x44, 0x45, 0x42, 0x55, 0x47, 0x10, 0x01, 0x12, + 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x49, 0x4e, 0x46, + 0x4f, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, + 0x5f, 0x57, 0x41, 0x52, 0x4e, 0x10, 0x03, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x4f, 0x47, 0x5f, 0x4c, + 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, + 0x4c, 0x4f, 0x47, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x5f, 0x46, 0x41, 0x54, 0x41, 0x4c, 0x10, + 0x05, 0x32, 0xae, 0x04, 0x0a, 0x17, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x6f, 0x6c, + 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, + 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x1b, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x20, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x61, 0x0a, 0x14, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, + 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, + 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x19, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x68, 0x75, 0x6e, 0x6b, + 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x43, 0x68, 0x75, 0x6e, - 0x6b, 0x1a, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x58, - 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, - 0x6f, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, - 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, - 0x31, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, - 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x8e, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x76, 0x31, 0x42, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x76, 0x7a, 0x65, 0x72, 0x6f, 0x2d, - 0x69, 0x6e, 0x63, 0x2f, 0x7a, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x6e, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, - 0x41, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, - 0x70, 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x70, 0x69, - 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x58, 0x0a, + 0x11, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, + 0x67, 0x73, 0x12, 0x20, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, + 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x6e, 0x64, 0x54, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x4c, 0x6f, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, + 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, + 0x64, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x8e, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, + 0x31, 0x42, 0x15, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x65, 0x76, 0x7a, 0x65, 0x72, 0x6f, 0x2d, 0x69, + 0x6e, 0x63, 0x2f, 0x7a, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x72, 0x2f, 0x67, 0x65, 0x6e, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x70, 0x69, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, + 0x58, 0x58, 0xaa, 0x02, 0x06, 0x41, 0x70, 0x69, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x70, + 0x69, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x70, 0x69, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x70, 0x69, 0x3a, + 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/internal/collector/interface.go b/internal/collector/interface.go index 06649ef3..aa668af7 100644 --- a/internal/collector/interface.go +++ b/internal/collector/interface.go @@ -295,7 +295,7 @@ func (r ResourceType) ProtoType() gen.ResourceType { case VolumeAttachment: return gen.ResourceType_RESOURCE_TYPE_VOLUME_ATTACHMENT case KubeflowNotebook: - return gen.ResourceType_RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS + return gen.ResourceType_RESOURCE_TYPE_KUBEFLOW_NOTEBOOK default: return gen.ResourceType_RESOURCE_TYPE_UNSPECIFIED } diff --git a/proto/dakr_proto_descriptor.bin b/proto/dakr_proto_descriptor.bin index f91216e4644068299e77b446944303a655c1356a..f073bbfc2a75f9146c94bc896629ec1c6d10fafa 100644 GIT binary patch delta 48654 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�W5zS}k{??LefP(9EcD$Ub1Ztz!*_qeP$maTpvV5i0_m|ov2#q1{fP-^ z9D3|e8PL>Derh4~)t}lOLSOx~s)&Orbfr>*XyorHIv(zRFp%dO@cOsqeCho*O zaAIN4{hvttM!l32FJ=Bu;KW)BiVD+-ZB-YOqE2$FKt_^g8HHf9RYc1h5{$MAWI&lb z2-Ej$Qyo*HZgQK2(1~pmQ62N54ItZSNf|4L>BP3HSt%^7?G{2t+ifp&Tie-7RUZOs zhq{mw)sj0bgidUSKt@-~Nhh{LAf?O5I!q_FQ?+e?)wt6_=)`u4XxRWlC$>`{Evtu* z{qdz5-vGn^(n9FOz7$dID#N}L`;x9w3kD~)OPy)}!FE{)J=ZQP7(Lf63Z{n-&$U}M z&BgF{TL?YZZccjl?rN_nSHX`I!gN<(sSbIF6uz<$x~Q+L#^|EH5)~@>);TQUqP|v(@go4m zbGV*+P^4W}dHLeL%!3r_W-xNOIS#3*`J!WsLuQwu5R49qSaF{bNH97ikgw-dyIj+U zk?hVcm*~>txt@vMkE?!-MA;^|mteWx+-T)DE8@Z3a+o~m(p~PB?}aRtT~l>mA}gt1 zr^=`r-AEKqqSSC;N8gKBu|NuLp6>5ewnwIbuRnv;pJ@LsKm$#&lE-Y>d$3sD*Iz9JReL0zArIIIk`v zz+>vC#-drlF@bv{P9F+cDl+s=00|DqMEQiN1&3oy5iu3%G73Dd?rkEnlg9-vR5b_g zrQ@Qk&J3XqAjg>*(sP2n^rKqX1l#XN3*lb+QIyrES66Z`{U~s;$q?FQ==YQQs|hy7 zPi6_B5RjjYjROhDPxOTh{ao&)6Y9aHqIshen7lwR?xhpL)43zG0ptW-fQDc%ofNWS zc3q@pdUeIM$FZiOViHA0Gu&4vMTXw+t{?iH~OE05#=ie%LXCg&uU0>ESsOrxyh9b34a#28PyZYknm@L zivYcB5EA~PPNA2AU#y%ZA?Gh5qecK>g!qf7*}#zC@QY~JDA*B*5Pwwsq~5!YT*=H2XoF=mdCBe|Mw6GggYJS6j(F}>k@lC` zP$2Fsyvh!!pa_ldHEa@J7*JpcQky}LV0g`}G>~9;P2iqULs9vs+3^wH4U;rb+TcG0 zF2|`6)B^gaz{881C`;6H`^vPzYDOz@V`g88TS~?YQ3}&foo|JBp&xF@d?*URsUJMH zA;GDigvp~Vj?z%~S2tgWmDk@w*m-{$IDfPOq`!po=gN!H0Sr)YUx$@9z(UAqfD8f| zv;ky*L?A;O7bP`N{c#;^+&~MV#UE$|qs1Rc!D!>6wD^Nm=hmW8YLJD{;t!H|Ttls( z4IqOg6nZDL67$?)GHtY4)>_<=IZVP$a)dD|Ww;whi*FBP@hU86l&3@t_SLBV=$l5TjB?s{geS4Rc3Y2pNr(QN2{r29S{wxp@Wx zF;b(XtggOnD9Wj}*Ne(2kb2fo3Fs&p1Oy=c#?`XZAHqn}J$H;u`%I0xUOZT4jKs?W z9!=9Z(y>yO%&w+AbH%ozR1yVxNue4n$I8GsfCS625-*OJYfGo7sP1hCXE)J8xDY1FSf;-a&<2o+(kt!9ns_SUIZA!p4zZ@P5W0S4d!g%B z?1h)7>2&>*RK*)aL8D1B@Q)}2WD>%qpclr?lQ@4|CF%6_lclVXozVUO(_}(h ze30NYO~Rk*xj;xTUCJuiH4;ztQPBje?K@14#Z&>V@R*r~>%L3@x;4``#FOsHp$45B~O zg4G-uM1LT`YK}xcgwbERL?AF%%53#O6H%cFNMJ#0YXuV6xiSa?K>|Bh!qd`3rZY)2 zPvVkqaT8G`A0)7#4VJOMJQ>7;s0DVOMCzGG%XG#93)RA#Ma{y6cGQdo7Run#25kUY zC~;|{*92mLMG`NJ^jww3jsaGl^}DBb>I3x(TXBJtQrOH8*9(m?6C7fg3 zE&Tpc8DzoJeYX$NVCnXk${-#@Euc#!;z12X5^0(3mRCL?4V1~GWp-tir;?Yk+iw26 zAe;1odZ44YHTi+XFq`y&4DJ@wC9_E%a2e3Krt^+xxjKj!sLACP!feuV8C=<+4Is;9 zaAlXyY|<*#=oV4)$yFA@9MUQ~h0GzXvQvm0(rSqpSX!67(E(`&#az;A8RX*AC38uu zWftFHQ9$I9)~L^J5xIqH>@KMc4r^o(zo88{tdX8}l_0@k4R?vwC{jxwOPL#VUIqIN zq}gv(uE}3WgSXRt2jlt<-nQV}ro$f>+3=&Oi)xSE48ii}^^fJ-3RtA?G zXameziA0m`J%Qw%l&OGW0^Nbs_ao^t0q8oJRmaoHu8j^TYHVP`M0SZz> zvGA(_yIy7)&eecjFY$P$7~E5a=YB5JHcNrGXd#D&@^i*YWSc>^y%E0DXA26d1gR$j zB-(B?UJE3+Zlu@JP*iS$3ra8E6ec&rk0C)DEWP(8i8r{MX4C?^iN5C^NK_0NH<`9q z?dmM<&itQ5(u(P`ViabpYT5$px2aKGM9qS2W*$)p z?QD}7+9QEvBUw_LGmzl0je%Qhp92Dk?dsPq;`-!v;~R?c>729O_y&-GY^U?p5KueR z{apdsVLN3YvBNmqVt&xHg9C2n_kxACQ*G@kS|oQ`h@XJ75I+G&NIM^bx%g7$brbCy zekrBCX)5MFMEp`_Y6A!oqI@ZFoNwbpFz($_Hpp(M8Z;BN)Xr|ATmcI7`Yz^Y6L!ns z01Ofm@0P&<7$kV@mN)=wUWhREsA}Cs+g5ul2L>2>WN-j3<_8#iWN-im2@ZScusdUt zi+k=qiL~mh?xIuXKE}<$?TN>GBsYWQskd=8sMfMFJ9#!(1fXbeW!eM5g^5Y&v@GBhr76 z>NuGc#g~71wS6PVr1nRjYSH^F6W#?-J6xf2)$1;#;{F_;#Ai?%GE>R6d^NS%rW>DQLfsREFI{w{F`L5WIvh3$IY<3JtKrfpeQ;O6T#Kpk?xN<=nC|B+kStWQRgvNer+^Z{r zlbrP2zh&A$)#h$7vG8vh_QSF;A7nfKNT)tok^&EqwG9bb|B*TM(mlNV_GRlEa;j%L zi4MJdwXqBc6#5Bwl0ftg;e1`rM}X=Va%yMC5?y-t>Ch{Y@L~6%AqR>oe=H>ZmM}PF zeH=vZPh2$7{@+i%)JMOWK{JjK6$TXos(%QmEFXml9iZO32d_W|gdBfz0O3RQ0U_+* zK~RI^dG63q+Bo&=Jz`+y&=9f^ZLu^ws$sb5cdxi1H9X|_Lb4FO4G(2#e+3d!4G-aE z1UM0c+EMEKy<$jeRLIeR77AG!!uJp~1|WeMMG61b7zi_V{(}32xNdC7(P@3pUjt)9 z#r3@kNU#_iDx()TNU#_i!UF$}11RmelR{|=)KB+|Z%a-J!4<6_=h7U(RJH2?v8r&Y z;fz8o>ZzgPIwk@M&Qn9BwX7h)d1?qYgtCH!MVK0@l9yg0-StVox@sJY$W{4W0)hrJ zL)fr}1+#f5uq>$GnW4-wwgp(s48d8BmA)RR@wuyqJS6ZwcW%hh*A1opd6^q3uZ=WF zwhF;WKkkDtE%VhE4~r*T&9};<9iAU5t{?f7_NQfjsFptdg9L~9p%yLEZ^5jT@!WSq zX-m~}Jw(Tj?}m^w<6bXAl`J+gfWlxv>g5FzLs=Zk(31la3>Q-uc|H`COO$v-qGZ>Fz20sYN zW1)~ggP_6fgHSZnk3ZuSc7?j~2rgDvgdDx-QHVAxLYaCof`pJOxEPs+igUVFsg93| z`VCiw937ORkfourb#yPjkgG!V>ih3|;@s#ThMe4rl~v&@B1aR!nz9Qu4m^|(qhBcwMZ@3^AZQq&@43`!YhT#)+*JDVt zd}76<+x{d}R^OS#{nXbdq58={8JMcI>b=KA&D^zC8Fbrgtuh#~uB9><^2a%d^&zK@ z>e>&F(-S>KMlMJ_yQl$`} zyi(p8a_XvQlt}pSJbY}&BE3b?0PwA$@@9;@Ufvq2sUJ7TnfKbRvY$XuwB1fS^IqFS zaeV+s8$h;)vTLT-@W+U}*G~1?6QWjfXUNefsJLX_YiFpWK6QWuWM`Yk@z z@D7I@Gd)aY9S&92Mi*@WIUH)y%Fj~9`GEO{kkhVW&4fDgv@EUmJT0=4DACvds0aFo zP}PE=^1=6aWv%Ud>9G=IU1^f;{kjkNI;H;8a7V9XlP5w!c@w_p^9HcG5zaygC^Q^6qE@ z$jJ~A&Gmf`@i8}xEIgshr|AbE90^(EvCKEenF%%s(sP(+6&aX)EwCX`t!{YJkRB&~i{-#;gA zPX26rVV3G=+Y7T)KeHEJro{OG>KAo;FOk>q7ksV}^ul!1FLX>=%Y63qO9(ktCZFTX zM*SL+mGCm+?dS1@)Q(=bE=Pd@GcWZkBOeWBUh3Bn@{EN(IKj)=GQCB=hG#7#0m#`< z@RB4h6M&ozW!LaO;EKy?o^viFtK*9-^jBFO?=31PQDFM32JpF1REJ4u4e+^8BHK@( z#AP;)7%KHV5-8^_BpZfL!L*LU*cJ;x-q<`$bst?FN zp@@#$;<7#<|8V#6t!`W8#3XpzIkl~KY6d?T^j9=T81~@LM%vVIJRewB64j>H>>hyPloO4_@0EhmL zXY64EaOm$q9Y1ITn9GloUVB9xO%Arb<^nU=2{Qk2nG4Kd2Rl;tnupJf)UbcSnhmj# zJV1sxF=MIo02$)op%!0)#AQQ%i*)>7cyBV)LK*@x)CtbFXamSlr)X2<6p%NmWZg?MegpK{Yv|=I3uy+(TTbv`FD{z_@|J@;KAte* zvN^uwQD40#@{?mMq&XmCoFdEI9FQ>%EHjVEaoGY#QPt=_;)di{3uyt!SSwfyK*mxq zJ(VqaA3pa#Q1UnnX$inLvWBIZbT10XXTJY(Y(KwP%RFH(kkQ)J+NGBI=I!{EzIanJ+d^&zWVVIe49ILk?(rcVkUUVG`ic9JbFE+<0GaC)`QQ$K%yr-t z^k(abi)QszKWw&nR%0Cjndd}IB-0U)c^tkT%PmYwH0qDB%(sHw0?2%)$c^3t$b7D8 z?X5cTGorEm;jI=}!8!r5z=@edUMD~nIJiaBkj}jG76SlTXd#^eS!f}h0a-|hp8YPk z##YY{!0a!wkS>5MvXCx-EFwhv_pZ3TR@(-^zrSn8(iM<*o#0tdTy_QIT?elgwBhK6 zbckv+5Qby1g>(aCu@gM!iOX()ET-GI-k+E5%$ZCcDB2~LSV(t3mN?N`!Q$@@$Px!{ z4xjfSx8lnj6&oa8OulEwaw{P3*=2bvAn!TlEAh4z3+6U{zO!JEsF8f%LT&@(eJ8kc zKpQ~bcdAtLpBTsG?H(?${}?1X7JOhG@9l8BA6UnGJ2-scct+0K!Qlf3r)RxM@8ErQ z;b2j(V7cXR2hNJioeYyVxdR-QJLPnaD=zNb>Cbq2o0UhI=nKeCRZ58O-E;{JLk^P|V~bbK>$o zKt7@tb<}k~5=#?@i5m;n*go$^pKENN_k+P22S1*rt?m6_u*RuVFJSNhZr)XYaLE1G z_W1xHA6uP10LaJGDc|qJ<%38wId~59eow^JrH5k^fiw}{gMhBJ3-3Wd*K*-$zxWU? z-qq{FMU#ScR^Epo?>Z~*L*TH^@k|osA#hmdAc>+mJd8w@`js5kTMiF{!+Oi%VQ^S) zIXnyw>&ZbMfP3Jx8};xAkyG%Q<KpfWv1_@Iovudw|1d4st&_k@ER& z&fBBl@HyvA2PKa&$2NGRXkM_hXsNSCb`g#(HHdS)8cp|yguB#^j+3Ey$w{iI-AX_=7`oQuO z-W{kpqw#U!HVb(QkZl(76d>COY47*)G!uBm-V`?_w_C{5fNZy6#?ydocaV6}0l+hS zoY418acjX2tMg}|^Bq>_&w#@YyK5T^pDsK#W*=?t(Hz2#6h`tDl%ie(OCPbfJpGW3UjU0p1>mJ+7^MLGef}gF3%jW^v z!{O^C_X0l_x;#eIE!b-n_yQET*DCM@aMWxzBd` zA|U(h;q660_Bqw`r~PsH5?@7J7>lIjehYaCko`{Zh6Zf_+3%DykzOArCA*KqL?5tn z_JN!Stekzo;eg|rpt%n?9H5QlkMP9h%bxR%`hJ{fo&3gj`Z6Hj*wgUKfPCX1_o@#7 zuQ087%Xl0BzO|570QuHJUIFA=LbNISm*;$^rjJK1?>h_m7a-r+W&bZgzO&2z-^_$w z7>{Lt&_ezV$U(fc4qU{)0XgWz%Li-YRlL_wPfoy_|3h|dyb8!6n+$jrkVAy%b^aRi zqWFAJm3m7w$a@Wn17$qKYd{{hXPVc5JnU4g9Hfx{gHMW7t%;be?=9p%fP8Ob+5Z6Y zy;C6zk720m*O5k5112KB^Mi%F4#*F7O}q}s4_p)ac=}&{cl6Ihkt{f3C-}dR^N5|` z|ANC2yAb~i4oA2UU-vtG1CKb=lS;giJZ?LE1CZl(Xm0>=oI}$=XCa<)sM3=}LFz{f z;j5D$?F1JB@*^j>gP-s1i`t*me(HXseRf#i1DavMmQPSeP0?gIt5ou-+2$>%l*)xW4kQ^d=;zgVpeBI*~ea*Y~9 z)Gu7KdL)BU{j2IaRped&tL=L*`~KDTJ(yg6WpJUn3?`Rfsr$*o?|caA&#KR+imAD0 zZRbM>JIi_2upxw<HQ9P@>K`iRuU#skULLKCjMC z6E$+r+ld}V)Ojajls}B9^G=y^IQtPb9Mu=pP18kwn+tZJ!}+xDf|F4u=xaE+TyWxM zxeOR5~>Jn2}8a0xrOAIQKK57)IFROtwM1$PR7Bz~f%N8|?sLMnpeAH-EUs1c$`KY&0 zeO1kzDXQmQwWzmZ((kU+r*a#-RF|IyY0)&%I_*V~DzDxBD2Pu5roL z^HF0_{io_OOC zb=OnLWEdw$cRdZ&!_^maFr~w7*VBj^9!929qoxrxJPgZqo!|9zRF6;%=ZZGXM_AN! zqDF*~Q`D&GM2!d|KGN%F2C7Gf@ySU}qFuK;)MwRkRo!5oNLSnD3NIHmM(7!2G%}17 zsAe>Sj7EmxRQ1}JiRw|R_&m`%ca%lVBx+Q+$lT5(Y7~WT=?gsz)uYwx^F*uM(H1p} zsL^&tXAw1;GuqWhy^ZQI>eM{ZJ$H;9>f1z(2_xgGC48HxF=1>^jhc<>vFhphqI;XM z`1n0&HJgTVY`Dln&L)?!VH_AWm)YbpHVi+jC+8hhk5kv?V{*oYi+uV!M2!naOyBPi zHI99!e2M3vdc5knK;-6*x8s~c)c7#6sk*N@M2+Wu$@fv10;I1uEx_kC6D(>jQ4_*N zQO8`OCa^D!nuqF%DrX^36D?{UQ4?)n^N5RA89AM5Y>~_-HYI4CtK7)q9%u9bpzBw zq9%v&s6mfw5vr%Cb&D{rDHgSes3~FOkaS;*h?)|vm%{m+yZ>EOPgOPE70q*}TGYEl zO%2ED1*mt4ni|HLTx(-7s;8+@??M~XENU@P)51m0W-(FI!f-ZP8%t0_flk17Sk+fNC=R{;oyD@ZP+M`Pb2un zT{*toUZQF*!`F{XtY8ixORQjgxxIvfF~?DkkII*-q02%iAWPW` zzXd7pxgUhnR;shh@GZy(bZ^Z4m!}?=t5T~(vMv6GAj{1xfn)|Z9DIZT65N-EE7$gi z1QOhrhjZ#-V~`IjSEw!TiN>u~SPqOLSA;Y4MJn2`QMjsp)dmtAR)q1Ytvlqa;JF`$ z)7Gix?~87kA5uQfa|O!x5$CyLKK{n2KQhAw33eZu*#-%AADP*%K!Mh9wku8i0KYr9 z#=N3u zAK+QM0;x~b=nrrf|HMML2tEl1Z#B?{jly^Xts&6;r|L&SKD7`of=?}ki{Mj2xH>CP zqP41Exu}y`Yav_&Yr{d(4s8Hg8^#9)`0UZC=(!uhX$whTz{-EOuFNbudxEyJ%bDshC!Ag&Ts3wBrz z+%h}NmO&df3Rl&41R%j-N4QyY|3bAA6}VG*>k@Or+x1$>xLdZpX=T0ww`^omz(mDNM(MkY5cjF<;flK00I78o%qYWE{ zE9xs8kl=7Aj4wF&z^5{Gc{q$;sH}~z8XoJZ&OVGsYJ1m+aw(MRXP;;T4u`|R$88|N z;cytAFVRm_@!X@~v>#RZkKred8b48mBRr-@h`%wyV@5uZknfloAxLmPW=04S+>ddD zw69gz^>Ov<$N0_0<6-_a8_=j&tJpe7&mYo(!k`tU7)oI%b|^U_q5v zr9h{Afz+-~gj;aR$b%ZlbIQmA63kB-c|d~sDI-r+%5z$IpNdq$Y0H5cKOGJ}2uB+> z3I~sWL4w2SFkUP30;noAen!3isi>7YV@8BRK+c#Efdu3XN7NJ}N_g&X;j~L?*QcUM z=5Jv<$meZ$f+PA}#n+0qso%{4MIjjdZuTBXF#6rt-UNF&8`xeD*mGwsl2V^F78JEW zo;9{NL8;FLwig7D=PZ(J&sijeKWA)jg4FrI_JRQNyhU;co;S7^wSHUJUVc`b;10Z? zhONUd_+K!a7KMOZ2nUaPKmu|hjE}hJnGzK2Vp#qDt*F-sgii%77$lGvdC=z~0tw_r zF5}yv<7%G!M;Jfla^re&Ynea7c&EoFDAlOrt6}_CfL!&!dyH1si)sZZ(19tcG4WT; z(gBGcu9~F-50AqE=m(i-!$#pMI^+Qf4%Zm+&~;Yh zB>brce}-Q}`V&7m=8pq~fczN_z99n%$e&?6o$mrh5hhDQa&RTf>A#=h=xIeQ9l=E8=pS`g3A6be&Q>Z=-B&_#2p=O&^kZ` zw2T_Vg(K+i1`jJy3oiX#M7#81*&M+D{Kigprq88U54C@TD4j%+fwP|hZg87`_J9v? z@gWKQcs8kls@&&@UC5$cVNxTG0jA!Iayf^k(=_Xj+}#SfNg2pEi1y8tO1X(1f&NDJYB zM-swgOLgv=Q7)cbl}fbh{oM1<_U!Xi?_P=LVBF0x@ym*Ap*4>7;5Nz)p6`JKw^1%k z54S}P&mH5YO?0vJ`)tAz8slPT@DWE1YH+ODvk8wl#u^Qx5E>lo29G#Eg7sLpoZfLD z!FsHV9hdMqpmLmQz8SxZHV!`p<&VFHufcI{S?&2j0y55p=jYW+4KAPYYUpNMy^Ob= z@?(|pZg6Tq8}J?PR&5k81* zk{B1?SG9#kYI^QuH|=fJV~e;xb22A^R=p!d3M3d!;f~_m z)})+MmGcFb!&Ec3C}gP{)o<280y34`hi?{Za{SZOonPS1;xr2(qiJS2pba3?xE$!< zYm%C-wtRs*^yyYGj&Qmgyz)dFHgfUt9PMsRuAmvJ-v4loHp4==OlG(-9igEOATwNq ziF~b8lXiEe8u~xHR+?!Aqrsi&29YJ&05X%18+{07ZI-(7KXG$vmhHs_WR@EoNo)F_ z7R}-Y>IBu-^4vLY+CtT9tGFd|j*A$yA{f=8>gTF2w&HV%xrPx6!Dy}<{IC&7^gY+b z4;wM6s6~yC`y#(JKGQ1$c72+;M)Gkl--i z_4KCzAi-h23*W>YQ;XCBbzqyQms(&u5}UMGAi-fN7Y}_@ZR%;6>bwKrr!8~w zPwsRZ@?GYZ($DtL29RYgekY52r#7kg)Vv*{R;%}Hr}#%z&UEt5{y=IPjW5Qp`5Fz z+G2^DZ@;};;`ttZo(z8E9(B+wDz#ogLcmoUN<TC7M*CJ8ywdFv=^0gZr*3bqV zzIKDd8c1SX9M<&U(fK}AexGR2cAw?I0BWC^mHK`Fwa*P6^MC}0eJ*~NmA|%<^xSXV zv_nvF>%_QjYs#qU`$T@`w=Pa0v{6ZF_dE6dK78u&oe6?a2${Y!K@doA{Ek5oQ>RG| z`Jn2sUo=h~v=D0dpd0*<7}@}GkmiSeB;~n3xM|1K;{D>*%pZ6PpchQB?<1=C0i0!z zn8BeC>N(vC!9!?sNI_>&NM)lCQ!cCpFKrXV=#>=Cn-!wSqHsA_B~7)eRJjJQn%;TBL_v}M(2&wK_MXL-BLQ@2MNe|_CmXmOX>n0vat)n zzfeI1RvBt^jtV5WTyTRN6-Xb4j=9ovso{$%>kvK`yJ*%a3ZcD=W*dV9hl_6TbQmN! zTy&A4Zv(aEAwA%x{iB8)60Pt2!$lsC{yUFqyQ=*+7Hy&zem`5=Db#>DsU(K(5h$^EjSIRsN}u2TmvKcCF<&lcDHp<5C0%)<ZWn7we}HKc}ysB%X{s>zT@aK=R;AVVT$_01SaK!!w+Shx-v%Js}Lda-zBsj0+`x+V@fhFVlJfHe{ zQ!P4*FZbSz1oxjP1mw*~@VO{RHX?*sv3zRiErp*;ubuyv(GUs&dCO=BBp`25L%iW_ zBx&rqQzB_I)C0$HDKdrA!$U-4_B~ZC zIxeybry52m1f!{DdO(8FR89{KNn`dsE#e;py4-l%|2YVt2KyORdP9QrTLzl~B-l)& zJUpZ}=AxbsE#l{A?|QOlpC?uOAMqd9P@=D*Q4jQVGZi3#p3bRYG}y#*-;Sg$gkBL1 z_V~QCdhbVZL+0BNoU@s)Xu@I5R-vB|w$C>5pb#8qM}qhgBsk8Fz(DZEt_iz)N8Rxg zE-BwJlZ!%@M#}0<1`?2WxXEY=ns5kn)Z(9T0-X~HqCOO2XU~ZQ4*)=d!<;&?xb1es^c;-fe6c5^f!`w(<>_HL}fw9*k#hRR_dgEvBlk@CI zxhCgDg0Bdh_-k@r1RjRounDd1eD&E0Q73o4h0qhvj|5*}q78bPAA$3xH*CT&Er{S# zm}`?noo4jaC;}Ul>FELq{DMeCCx<}-zaWCs3O#vKBnKjC@2OW$!jmtKz$NiO(v-8b zL>)efudkOFK~M-rOCrIm1(0C0B!W9^u9~LQ=2F%E6jB>Yjlxg}QI;Bofn=jd@bl{+ z!C@&!&wbyNleSE~e+vKTYMGg56auo$%ri(pmT{iDLi%Q&yF8M%Mio0Px@0bo;6Thf zjb@a7g?j3=Xj`zth=M|BYDFZ-DuM*x6~;(|1m6|p+sfyF%9ZNGY0- zYBM3L&G?)7YixBSNM(X#qX+^UuF__-dmpNtpYf^YhZe#$_F*LWNnf-9x&sTLAgDUiiI&FPGg8SM?klY6e?rS56Cb$Qh zQ$_34$X^foONdDp$#DGxb$xEA<*@Db>tV(Il10K$Y{MWmCb!!ucxWxwrNhy zf2QvH6~~{?BEcO13IX{Hzk%;-0VEqm5G*yuuv>WUrU)_@Ykw7uGB_R5R5h(dk+$fHq*ZHy1NAh+oHz)CaO2xVj&#i7UL4p29PZ@s?E`NOPuy2 zX?tK)>*)*Dx0mCG-9x{N@|oKrxUzT&>!Ila&;2@*_JitkPPDoEYlfC|#s$>vzKAT3 zj9%v+k3RWSubv5Wb%i?gf=a!*L4y6hNbor}NU+}*K_Z>8ashR-UlltqDi`jz5bAor zaert7$bPy%2I&RV^#N>d+?loQ-Mi2K>6pVqjp>-Y4;bwM1}+D7iO)z*{<$7&PbRyGZcy7McV7 zT?Ba)#*zi}bqCeZ3y38TS_s|S!ANlPgf@U2j36V#K%js>1A0j9yMPZ`4_QbAkVBE+ z(`2*(p&Yo4o7evVfwOwza93ydgY?1lKS34 zVt{-f32q_K29WO~_?Dd)K&?FYSS0Nywc#QzfR53KvhP-0XUCOy314L%H^v!-(Ash1 zL_vb@@knq#01|wUGaleBX~jkGqk8_5sM+#Iv*c08Qe)Ua0`emb8}0dZo_i{ib_T|! zb>jBk&-Z?|_Y<$GF;_(yb^Ma3mwAdo0bk5qN8wJZDwjpwwx^A7D8!_kj%4U3X&}+l z=}1EVJQYavbUK3H1iTqNwf5X!BWb^*rxuBE&u>E->oOj+{K~CJ+t8XF{HDIWjEmXd zj5k9eIQ|yF%Hwtg368&UN!$*OZ9MmUB<&BCdqv!qd7j&q;Y%Abx}e5hLHKgP%m)g= z=z?)OAi?MY-42a%8|v+%`r``TAYHT&>g}Rg%xDA1MJ{IgkT%?ymsE#8@DF`1SqK?j zGM)-;0J%g@b%PH9by>ap2Y#aFvW0NxT{Z@@jlc6Q(_k{4+=e^vimGxI-)vnm6N*AW zu0)W7qf$VE@0AFW)?8cHd+wi+w7=ERt5{oqMv(d9%DA3N`AZ$RDr&a+%S;~%F@1lT zm>4AZ{uRm6pA>=w-@h0-Fn!V1bNfZ{gQ+d9iPo9@qF5HxTwC((uZCU|)eHJZgIF7d z;M+eMBmhBzZ~tg@eVqyteEUan@xtxXmMR;dPFxdJS`Dxq7;O!(95@vNqSf`!kO2Y? z1ELM{@$c-V)6R2;MAJs7wttGwnM0z;N0DzkN;Xu@_!GAZL!*I-K_M6ojRw&NNH7{2 z#WHB;Lr^(Po%$0$$}!AB*!Qq#VAI<9eGiLb8PF=V<1!eo?)ytrYc?$#DkfmqX<73sNF#6-&D2!#`WTx(IA3E zAsD?GEu|+2BpAIJ#RM^vdINiTOZEF3ug%^vqM#6pd@CBnb|Bd(8rSX*Bsjbkh5KU^ ze**_IM*aLZqWCeE0}bz(Xprni8*msC4U*j;!C_1kJCYw>-au-sy89n|U_3S&JTE~Z zAY-E?bmAW*8%2>L;J&|sOMIOA_#aWH)i~QJ{yUvBE*hNH&;}gFMYD7Y86-H2iz0TkA&8oe@o&6BQL3CT{L_y}}Q*l~(vCwKXzlMBy9SgZYgd&P>&}n7lq8e}nf- z!y6=c&ookj1n-%YisyXCmZ}Qyv(X@Bfk&tYcIX{Z`+FZ3aQ8f!xz9Vy!3ye}w z2u2HxQb2;y0xE@}?@b)bLWN(3x-PlULa3C5W{%JXkcAv!Cm#Z(EK>L?u1ji>g^R(~mDsyQRkvc8L%@lW;S{B9sIK=x%H;KRWte^(m zmPLbKItB>=mPKLLc|g9IUA?DDxiXo2&j^4*mKvEs0`eYZrV+WB6ZyV+#+9km`xZh* z?;DxX29WnDGb7**p1U%NGc_(E+hnecA|1uZqyuGMr7D(^S^4-ITXR)Z>V*Ij>{dnN z`fVskuv-GACt2tQOkq(snL-kiw=AuJxr4Nn# zAOZZ)3>hSVA9BdF`W;Apq#lmR@+uX@w*ScDxEen)<3>Za*%?kM)9w&9*N59 zGC$?gqWB#-?zI%ZT5_$C9ED)C)<_N#jMf^-J5suJl)OoDo#`8eEHyHN1Z16&xg!U= zo-$WSt+x;|T5rTf8$i~ZrFDzvZj7ekcP(OAS{o@Y&lk5)+)e6AOjb^AGK^3NMw`q| z00~B$xDyzY-@;xtD+CVpQk$beb{T~%jRt84kbrECBJDtP+sSjcM)5d(YP#%n&(gN{I^jgUS)KmNZVDL z3|Td`-9jkRb_=0M+X>N~LxVe_YT02?HoudeM=g*$sC(|JPNa6KeHk*D z+G!zNDm$aW3qrJEqbMR~ZjsKOyC<4nS(Ox4p zNHE$&(^j zwdz=0)=YjK4Q?S&2*}sba{6Qp5|FQ>IOH&K)S1*iHLbX;o!l1<{`CwZ%cBClrFwL8B*-V04grqATyhu^hr4%&wPc_wtJ`_UzS1jVX&Ojq;hY zY!VfERiT;RF37He1d~Jb9lYo4LNy&$e|xfiBm9l!c-R8j!Qp7|lW7@E#O2V)mGv)y`;C9TI2aw=)jOKwsT32>;T=gg^ z8>EgK0Z_GfzhGTVFKE-6+5*n&j-{DPxRL2u7!j zF$M`nr;IV~#=cMcGUwxOEV0u@XppQkLW2bGG==7zb))XisMV#gBhMJ2Q3%MHXmIlb z5|A^D>Nxq`J@>b0+IfYa{O_Lm8z-My>rSD6*IFy|q+9sA5dbyd_PY@PB)I)<1nADL z&cb8jxmvIS60h`l_T?Z8fojYr>h(eZ={FA~0|{PdDH#_+cMj%UR94Tow_7RuA5ooo0|De87D={$ zSR{r2gGff%x01RV^)qkilbN@x7RjA|H5y#Vq1JDU+z|ufTN$5Ui>hkpL{%V}@3|HY za;6}Gyv9wzlPE|aubFV|HqZShn$};9#?K{|{3nW>DNl^IQDJ>!>Ii-+IN3KA#EK{d zr@k>yn>>)<)Hj9&NE>$>ht^N!mX$SA{Vas4>K6;{6VL{belhHKTIt(8cTg;Cm>N(P zR(enjfeZ(8J3Ak&_LP;il7nNxC{PGSgJXED#8H3*qrove*5wiWcJ@6))hs6ql0#y_ zNAB-#X_HlM1^Hm+xEPMOOe5dP(TrEqE6AMW_*n1= z1BGBTK9;FphJpm6@iC;@=&kQ$FB8;-3W$Lxn00_cmd1jMIFNu$h{18u;ND58C#o(L zWrO6zSP*HW5Ri$nGTNhp1Y}|?`1b>Ml2U3>MOingEQFgx#meYR6xy&+4Ch`(+IMo3 zOqy6prdmxh6OJ-W_@r2Ha0UqmlVZWa86+4?B7=5N(OsT9EtWP*JyS`x&72m4aiQnC ziz=F~KB**ICa0STMMDi2pP?c1t(Ut0c2(jVH4Nq-JbhSEN!0pCJXEH9qumXPwu9;b5!-pvVC%n zVT3|3nqwG&1fw}*#1Y=jUgoL^m1WD+T(g=`$Wm&7s|h3^a|z*T`5w<*7{e*>@5-`u z=EDE4sdEp~syNg5Oz%2+`ly4S2to{wNVw@Y4h$;Dkl`YTf}*I25)ec{1{p5n?*6e= zTO(j1cQA+@xh7du#4WjQA-bzTDstN`L;+D#0wR)Hxors|D7wGr^y&2e_dR|3dAs|4 z-@d)w=Q{~&Ukz}Ns_a#6U@OzU$Esig5;4K5B=wsUAaYkFZM$Z2fyiBzbg#+Ya~Z;R zE#YnDwXMvc@;8#pT4$m2A(Fe=m0xcvimOALNJP-;BtMk}B4~AzM`4GkO>5lH>sgVl zi4?VIO)vp@psbMzv$Dq`#4>}r>4e9HXJXi%p!ullt-%TJA)+f9f-!H2t9H{Exk8|s*s4e zHU)D5k-I5rTbr2+NL4l^z5CclkUNweTT=3;q_pKd6$`FE*wQs^ZMv5KXRzB)74VMi z*0P%4RQsJ!Um$Yd3DyH5_Z?YJjxb*Nq#pH2<2VPHEPUIS#Ptu z*qSkBbEHVn=3ol)K-nx)Xe1jdw8cGoBO}?CNRjonM2f7pMHGc)hH8x2>ek{JNi*-^&`W_k04%P{F{SK=2g0GPYN z2m^$oL7SMU#aA|D6+un{rX@7795|x@X^D7DJ&!=qzlwRL{G}?M<8FN0A~y z9|i9r50sDOJ-!ss0XL?-sc1Y9Dbo3YB!6{dc&76MnxH)eoqtRqgM-F<>n7CI|6_f{ z_`3SK{EKDOLUSS+{DnFo!ak0|WQLC=Onc7ZTHk(>n9i+RxJx>iHr4zNJdHS?B+ZK1 z$UsJTpCnbC?Bl3;M4{}nq~r)*|6s*}-LtRpSJI#DV5-YMOZY2tOm7 z4<`9#84?kDFuBzK{Vx!)2Q~I-b{ipG9dg||n!YuMg8fOPl83_R2~?(};N1a;ghOHZ zGD0>u?B42Vij9Y(1U2(;l%Qe`C;6LWP>^s~R=hl`1L$+~o3(pH)*XO;`vQded6FMf z0<+9$Q(>FOxh9>I{1vU#Rt%o##@uB3mVcSBDA(BXxYTjXy>*l6)Z9J zC*6>u8BlXFN|4r1MhPnBWRf4Nj?A=vQd5E!NF!x~Q|@rlbm?&_O3+wzDoT*@PbK-s ziJ^$2p07W2c!HD4ge%j7E6tGduM=WslKX_TbH=@0X}Z*$335q9>t~Yu^#mYt&m^t9 zPXdv9Mn0*y`xC16S$ESdrn>TMl85R^RBDpHCIN(UHX-h=tB<1!W#<#l2WQ`6`j?+q zRcaA5N>#bwj@)8;6)yybA`w9s!XN}h&;<=b+FFcK+26Sbs!Xfmcafs9zl#)={hcVf zF*`~f;Cr{E%5*J$A1M;_eUeAp$OGm3glL=Av!jGAy3$UjZRN#Ck+LsFij;j(6uq!K zx==R7^1|}Nomj|CvBcfA?;ouePIc=$na+(p^>yxWe-5S6E~aUb1i$O! zG2~e`U#9~h&x&NwY&Worxw$wyQe?T=ks`~@jufVkIqqdq=0u7ni8+={uyzAuvblPW z#htw(=!J9L4_!>h+POC0YmYIy(KgrS2hczy%(eL&C_oCGYdJpD%s58-@_E*DaTf=e zpWFqc5?~*?24;^_KdS-}HP8OcpF{%@HP3Pqt(DOjT{xM~x9a($z^Cpo*SVv&nx9sZ z;0?`V$n$N!I08bRZ&~T+bn8j(B-;|_s&3jfFQHzJ>up%=QTx0ySO3xgmM5wtM4 zEf7Hquv4yflmhI=j+i|i*mVeFD zO^UH9d$C)4ySbxCwBI*^LhAB#`OA{XQw5fU#*-1= z5;b0C94k*-YO}~zH2|Y7jZ6t$8kuslrDAGPG$BBRlT49NcXwa=wyIyuE+N`@<4f6t(CLZ zNl&j>b8F_Ty@50W?41>ev%X^U{Votuuh_O#SJ?kvB@1lT3GqRV?gX}8wRvQO zL@2M?{A3uYOlrA~?rpv=#nkEg%wBT3*)Dsc)Su z`CJ&U?EVHjK6!ELv(>0u^t%?-&!&PC-tjqf0Dvg<%7VFdx zUw8X!Om+3^p$Cu%<#n6y;eeF#dNAs^LfL9t^6$2^<$#I>rN>*kakraR?jL%XpOmk* zm-#Q1jgyJjxMe*|kK&q86A}@-CiDj&V%LQJFisX&>-$5`pW|a|BTsf-8|+L*cxyv{ z7$-Zg%liWWt*whp30)VNGUU3@AI1r-_x*w25Z6bdjJrPc2c9Zx=nvy$+zokusI8^0 z8$y5J5yTClKL8X!n2-;-x z`!_%YZL-|IQGD|$wd*YnpM0=&Nofmrdrwm+lHf-k9%s+<;S&h?Ewx*t-c!=p+wPxw zGU~k@Y)&GSw{0`OG6X_-+p;pei;9mgl)Y<9{^WM|H2uooRqO6S(0EmRvuo4K3@mOA zWs``Y&7tBz1Z`HuHBgRMDO=pqUJR65B1P5RV)KhbOXPf2Z1SvnKoZ z7a=47v)N0KQny)l6Wn0~@^HI5-rL;TYP&Vr!JiVzv)vLuWq1XGcDUL;rhTg&)_-AM ziAuGsZs~47>b2ATx{s-@*lA7ns(}*8v(xgb!JDNhyS`Ai+m`&r9q3~=mhZNN3`e7e zdR2FiTXv^;vSv?E1BrC`JvQ|-K9G9uu`T@VA0Wl;v6WR>=(S#r_`vn*Ybt9#h!S+X z^+A*%Q+!}sbj$`qC`kCg7X4>K>(!VK-Rpf#Rn3P{f`-x$qXZT6p>5%p0Z@?ep>5Y8 zTU*u(?RCxjna(wPqXfNPxYy?KU-BSfugyQX3=~Hav;nJE=iBFg-OqHY-4`WjWZf6* zpkBDow(uh>6eR4kw{*%nPrY1czcp>$8+}cOo_uUu$j=Kr%O2)_1w_z(o9|VC2-)E6lRQW`VDk@@0FiLO@~xurSz{P}KXv=>G83vlwZ@+b z)Mvx*r?$C&69ow6Q_Gj+hT#^f$da9}MFYiB#vHmik&E0+D^tX7_MJ;o%|6?dK~01+kHL6Wb%fuVQ(eJ;x(G zS? zc_hmbJ{MX0-3fApBX06Nrd#nyq{#9|Y<|(5JW!5k7*m{Nf-L`q`{*9dE53*n+4zg7 z6503*sYE-H39|7~R~$gh>1Y_RNQ81U%qu`BM>W2BMPSq~-O>SEv-&cOuM;w(erfaY zBM{1$mH?8*xCy#Ueau}LVA}LP7CebW%06b(cDe3!xB8fE?_a;?DH4uZUcZ-HOeCsc zOa3>yg?oA+tK+XMXLUN9n<#HM?*2TGHO%qQ4iXW0Jj}>IL>><_@{WRPKKw+nYQGqZ|hj|zX^R(vS`%%`ULfIKx@|}C>KK8w5lxYYmnj{sSb?5Fg zLyKpF-AF{xS(_g%01PeZZ&V@k(h=g-tIs+o%oTf8H#3u=T>z=-!i1@d$P^s!$o5wWCqfDB= zw4Mz&= z5p}_~_5&^uQ5Uq7mAWSv%6_n1h+gyn>i)rUFXQJFFj?yU(S7@X>Dl?mP$v=*^keWy zAcB6BM|uhmpGjHvRJosaHAUwJn=30x@XMab+4%HKnlF2Rke^9ukZd(szBwiJR{{Vu zZ%SlJ;Zq`0DxM;yHcpd;rlvl!4uCl|GNt#aX})vfX_hzNIZc+{r=@=9wCq9daZF3| z!Hq`{r=>WbMn)jSX(=9hIVx)?l>H_xS&^1zf6dT9&flaQHY>8(AiX`8<~N-|R0rr) z03`2oY5rGCK%_pG@>firs&AM~PxC(zXvjh{z`&K?PEYgD3{T-sPtm>SqP`iCD*XWi zRr;F|snXbtNCnMI4Rb&vO>M|D2o79naAukZb$FWPW`p93MT4`_{OVOh*2{r`Djm*B z^OuNt3UyY>OGKVZ6=!F~W~FLoZv+RfTy}OWRxUd`{adlP_ncU)=5%17YWSZMi`DQy zCl<@_KQ~e@g$nf4#)fPjm>ap82j)gD^T50`zs}ZRE`tjU#cBeWm*zn$o`$!303K9y@6;DO6x6Hii1z(5-l?kLLU~<#Xk}*vq+`p61J*26H)FVBlU3 zcR}b_JcYU-<-^CGdIh%~VvVnW3JlaMpuP~j@d~IfWHoNgI?$EGfMS)egbNJZE8#AT zRlXAL!dT;SVnLBw4iy-vDD))J3t_ro_5Z;k%hT)p=`l~CE>GKc%!|F2w*peXpQDFdOKX8aQP)EK zeVWB=8r6ZWh5P%IZ^HW4w&3-E$ZY`^7`QFq{=suaZ2|QUk=l~i1XAN?kOtEdDlkx6 zLj7Z!2h?~9^^dOk5K~h+YvV&hOm)Z7c^jucYx?VNSFRu2_rXCA5AM@<_(PB0-*@zSssNohNGc9FTU{03@%$t9(x6aMngZQ5>Zx7c*= F{C~__^sE2? delta 48365 zcmZ6!cYsy3);>JR-e;e4W`KbWhcdLo&rUIhaP_G>oyW+Lo>(whodXpZy zAiZ}1rHFuDDGDf{0xF<18(jf~-}CJ3Oy2MNZ&s3LWo0Em=*8Dw6*;SFh;?py!*uDU`EDxh z230yD8um=Z66qP~uA3&)d?#0yOfQxmArT=JGn4=o&oGn&szhc8LsbKr2&)8O4T@lb zb#cQ|0M?*%nGhy@Cr_47@2R_!z~vR;Byf50(jiX?Twd97Ar3@-QFjht`9&}Xu>7L# z9JVa#&h?!FSs~=;0#=}5)iG8VxPo{YQwdx_x$^1V0;Qm3Bh}p#kM(RMGs6}Uv~N_h zvZ2tvQL!Qz0mh#OJj zfVIf30a#Bik#yf_DXWLLbl_SR;nIO?88=Ev2d-r@JM1pQcUsB%AuIzbY9%Wg3b0m{ zjKVSiYgM;i2rK40*A>Bf76b0OB3v=xt}DV71Ma#aTyfuNEzNWmhm@_0q%00t>v)N< z^WuQDE>$}0u7vNjk!8cG5`eWSf|U?{Pp3`M(kcO5o6=_AWcp6qB3veLZDlm%l8Nrx z#>@uD1gvcltfcR>mvzF1C9yu+%XCA5N&Adah60oJepa?2!KHo8+UXBsBMaZ{kanAT zFfJbK*&*f!0}Kt0I!arK%l^@W2{)f3KUp%%q$tgP}M0MhmhRJor+-G$em(_ zB{y=XGJ5zzVk6%yE9;F63b>m?y@3Mm=6LzAJ8tBgD^?1-1JOC0P9YskZf99MY{-q= zxrCky)UjoStPlo8-6H+4Avf|ZTFRcT2sZL9F~h|L?v|3JLL6G&3VTCyBV;6?^ellw zcelp0xd8>(t)aOQ5^{A3Hzo+cx=1f%!u{MOniW#M2V56y%-nP`bni^NTXoD3xsTi# z2^1U&=H)K8HrtZ``Ytz^R8r95T{UY_R#2$w>IRHS1XN&PNugoa@)go=#q3Mp{YTns zYJY~f)&B=pSv^=R$=Sb8R?V)W9w;r!t1iVvshs=52|*>8-51v~gM!HS1tJrOs{7U8 zVj?g1{-XBm{QhuPqXpXE4^x*4I)Wq*$ZFY1)uy<}QuB(5;<=pt2a3St_&{iZq~z>B z01K2GfI&Q{S`|lU4;HoOv_DwX8K?chqRuew582LE700L^Dgx4gKUCBa=lvmcq}2h5 z9#*G|i&W0TMeRA^565c+Glvz6_7B&t6AFe2e?;9>LgeK|S?`)E;nn(9Z3_|sHBTEriw z`Y~A_TE1FBWVL*~d$*TzwV9BThWoK1CN$iS6?IC({TM7_UZ8E*?e1z(rpV9fUeulj zyL;%4q@=;_UZYleLC_us`w0~gZ41V&&q=A22@&EwWO4&k@IX3kVg60cq#=bdZte?3?MtEk3q^`8 zh4wE%vB{vl?>jwYGP|@YSz2V}`@S?>$pM61b{Es$$=@N^(gB*ud1vv;tBR$m!LFeihBG7`lCYdw{HX8t z7P5wVv6iS`;7CNJqzx7}4kQ9ajfIf|nO!}-c_4Glcl)Tn%ZZlxeJliK&g~=O*&zgW z4kVl&_pBr1zWcVo(#utgYGPgOyU@|ohmJcLiVJ%~E-yNV1SAdKIECjaC9bjdI@dF7N z>jYhu@ZEu`L|susJ(7j423j0!pgYh`AdDc$s@1~nlqv#H`Kv+eP*kM|mFpD5z7pn)r(!M)P{VzvU z1+X-L!z>V15hS*<2Er_Y%&HU)v5fByS6TIfA(jDfxCO#If-D*$>?24FQBOv~ci&Od zDv6xbI~D@N=)Pm;0hSRY=7E8d1Jme^P@mNkbyc#m@bX7k91Ns8LcmvO8DSwo!dWnM zab!8)9Vui@Sp9#dL^eiP4uYb@Y=&|`kF;B`9MB^L4r_WY%KPpp)w90H0kAxPqb#sI zfTQeWlm~DWC*$s*+X}urS{=u7*^6mUn+8navzMs3HAVB(5(}Zv zUSjr$%fkss>=8ZX@YzdMiCUQQr4~YOz0@pGSJGQASl5(FTy^w44lKTnR_L;{O}MluMz&D1zR4 zg)tmx4e$yRytoqHdL@IGItBO}8eD0C^wuk_I_RxeQXP7&z+10k2-7gN%0lR;SDE0& zmGslAOz`5;PruLLrC#cN3!#gC-_8?V^!uDA#x2M-`0i@PEfkL~dbI`8MX$Ev(M7MO zcyySqgo|Fo=p`q$#zN?v*Vx&jb6#Tt7gxeLuVvtpO0BgJy5+UD7rN!O?1dqVE8&(u zV8~K0^?`-ZEq`D~M7R6_N2FIj-13JER`OCGS_nPzhjxPLkv}wXic62Yj&Vxu)H(~H z8(wEO3El8I6QQ^gZg@Q-l$xpa7D5NS-fl}e;PoapaU~q^2F51!QX4FUu6KhS3tjI9 zjzudOu6HA&k{XyDy55ZzNY}g3s+z8MBUR1V#FcQpA2Bv*kpGc|(Di;~d<)tD@{tKk zTnX2^sVFR|(XbM_18o*Leefo`spx|@nV`g#@WCH5D9KBGY$5c)A6uQ%2Y+nB5m&+o zZ)P}hZ)&rJ&B4phiax+fZY~CXSG|z%7hR)tK9+@IT`|IwMSjo5Rg3Z))B82YS;|}>w$WqxgRhtE}qWZRxNTg7pZ4Rmd{!YY;h5d1_d?#?P z!Ca3=>U&kGF|sG$TL|~c_ag3x5bl-lMWSpF*?8P5KL}YKk;usiOi{q?!Xa(os=X=XlTtkfY4; z=()f~`ceJe1bgpC3*kokQIyrEQcrRt{U~r%$>`Z*)c2FRy{Tx_=qIyuPzcCR#=wCD zb0vqeN zD&GuY;&H1TZmi=XL+^Mmi206lgIpK%ij8$bz12*#E<9l&xJ7hNhzxDKJ;^P0LR6?5 zDvMj}gs7hza=;clsVSlMER_6=^zgLSsiGOrSr2nHhGc};Lig0oqAFk0sbtI-q%Y95#TSX zRSPVgU#y%ZA?Gh5qeci}K=_NO*}#zC@QcWA6z&lOgukj~Ekym)uU1Y5gumJ)&VcY& z+AT(09s|PPRC-Hz-QO&Pq2O-|vWD1#xM5gFR8dXf?18Bwub$e0o08G%$igL97& z;#q-oY;Lmi(<)Ucn)C!|I3=)Q&k9_*YPlIWo)x~4iGkx;D-#08^WYS=Eej|}ZFfE9 zyg|kclmX;<3q=5VK}fxS8+k!O2eiR5lDuGd5hKY9+(q}m07rfAl1TeYm2D;N?s;AhnSK35J)=N&^Xomj!MQH58Rs%&w0zc}~(mX^^i7TzOL?s0H+j zz;lY5C`-)uu8FjM>TD}ltJpr))?U+!w7|7G{}q)Bp40i2zfM#b1Z|^N39Vi z54I30Ww4Ct#e+7043=T0KTf3#QI*>uz8PX6WHdy^^io9|K!!+U+!+MKNexwRwm}du z)Iz9~p)w2t(1wkWNJ@VgBTVcPC>ejZ1dPd4{0ih6# zM#|6>fCQtF60e4sSxcv2qtwE-NXCt_5RPz^4C4m00c4a!5I{YqbA+SSUu~hs(H25R zqh(wNuxJCwXimF^fEuH^wgY60g>ZypY%d()81}+x#~^)otXkX-LEl&l;k1vH@yuY_ z(FTyQ(k~r^mbmWs-Ek_jJybu=Lg?(r*KqQJAk}=mAj(h?1cP z1PO@ZY;jGb)4PwCvI1^`D>uV^`-JwQc*7|8pio;eGy#M0GW3Ta!C<^Z1WXs2&Y*dM zYIFl!=may}CnBQ|?`;Ty zub(7k)39wi)CtlENS8lJX6T?4ZNX`hOls>65}YPU_)a|&aQTy^tdds zklH+@OS=Ba5>HFG5kUevSyrqZ*r9Z$d#0+nH^L50wd$p>pK8@hUq4kMz_>S%8@_(J z`uj$4U*2@v3!VFP8Kxf7gLKby2@l91FP-V0_oOVZ4j{H{0ut*0w2_cr{yk_gl#pKj zJ((yMxa@RhduB*kOSNhu8r%R9dID|qlnFh}kYU(|TCkcS!>|t|Sj~_~eK71xm+<~G zrOZ~#nurPzgMJ^hHc=pfohifk4K9ljT>U~!aVRleJxBwkt6wPNJu%xe7s)X3ogTP)kOoUvzet8LAZh_! zBoPB@D3V5tZMVF=0coI29xb*Dt2~vwnBCqM%nPzd%ha+?;*QiZi(&R?nGA1w((fbl_sr2kKZ3NN`ifN2WiVbV!%z-TFkUNt?KMGy@mlU3t!N~dK9Djml&K1K zAxOii3bw-sGDBxN(j{|FAIPj6(-@pSkf{dg+39W+G9u};UTyCzYV=%hXPrr>^)kHf zKpSAzOC+6i?@8qFq|6N&Cea;8eN&PylYnlJmFk#UKsU&Ge6~W3R6`a|%0^*jH9$dX zDE31&U^mK2hI2JwH%h#YDF)w_;d>v;w5?L$v6TO_D!bk zQ8jKA_h$Z2B7wzJS}_XqnHq8{QfZ$VMkoZM&x{Zt!RRvzL8DZR(ZDu!_*PM~aGRM& z6hb@OWQKNFAlXQk)K(58IBa7KcYVMCQO0)Fwu@+!+HPD&u^_>)-M9{rfNZB{)(}uT z)KWrr*iIQ`>@dE#SP)0;;DDP2ycc1qB*6Qr#;%Z}gzp`YY2T@GcZ$0*4@hJ&DMblNagb6p zEWqE;^g$yFNU%F-WC00w2aPNxD9a)B-JOV#4w>bGLYA840uqozTrS*xnZEafO#3<9 ze)Q}=$l&d%>t<4n!&2%aJ17VOQg0!UXnRtTr(H{5=ivL|YfNW2B7$})rP z2hw0E(Gg?+Q48!5t`m*Lnm;PTQ)woj@RBr84)LfAuZvL&=uugP55(Cms2`<7R-sAI zEgs~PHdtX;&o=_pgXWX zu9kEaRa3_;grW9v6ANYro8Y)as+`U(lcDwrb)_qu+X)L{sC~k?8?-?$CnS>CjEXWD zYM)eh-YshPJZT|Z+$W85LmNO&GEzt5;qf+sFdH+J1f)v3`Jr%c$Qm+Y)et1b5a%r z5`n^Gg4E*%39X-#8QLL%1oWKoMS1@QjiA9mHUUR621aL zbe+6x;|qb>SOx?NgA6=LAg=N7T`oX?>gBk#v*XEId%V)|g=8{-)kH%M6ji}F zpJdPy2B&O*gXq20=l>ApyY;qh@X*Tb?VwGipbe(4kK;DTE|F~Cqx;L?f5X3@e)$z6 z7dIuUgDC=kzC7>aU?2B`GF;#H1~_S>9Fg^}@+WFc4%ax%0d0|_AqIe0t)mc*cTsJiKXF(7xSC)1z!3m;jWN zumyljaWZ{dfG(yu$Y%vz0)hrp9qeDjf*C&)SQgapR422HZ2=Zj9r(^sGSCAxK6CYf zhea8Yn(4UuTB39?FEgF;+Gc}fD+f0Fi2#IYnXM{y6Hm38ZIwr}JliR*-vN~lre(HM zOQ#J$g2Qa5Ma%S?F)L+!Z@!bZNNwsSI(3@wAg{))Uxq4KU}OM=!GP4u3nYfJz{${) z0}>1uP!|mYC@L4Ku8)d>+=Ujx(Jyo|bjGtxFp7l^GM-OEhJ^1eb<*Bd?>{P@%3X?y z2<9yj!@MnXEOTO+K{%SAh$~d*$8hJm!g2LdMKGM;EOpA((Y*wst#azs4_^KxxZ78&KOVz#iPes)T?7gNS?!e5 z$#9V9Wwn#rAcTNgt8RasFDx8a2jvM#o43|U1ojG&(B!RkV6U`bun-@r1&`w`@P}3~ z8io&@viklc5hTVwbn2(V;bThHJ8spiL{dG{T~urs!K9oznVEE=WK&I<;zt5cus)Fp%nzet2u0d_qJUF+fF;fzyX? za!P9hk_deGCK?dkBev*f!aEPv@Qf5l1EuTUY@u}Bn+aw7m|&u8tGf3I(KNNyarIdf zg@9~zss-+VZ2;NoG{_IKh6yIhK2__U5czqZI<9t{K%u_Jy5lCd0mPDknqjAsM#YajRw3R=sB8lu`8w5o^R07z)i=VW7O*GGGd9 zHyP-)i4@qEj+>`i&kZw zfb4a$baE0TAbXugO+&>X`?X(9e;SI}ZxzGr*M6%QCT8|iF?^tx;6tcy)cL2e=f1Jq zlv%HD>^5cA>l-JxVYo(+^*W$#eFmB319put*>%9F)Fd2Ab~mN;FC-~YfA7X)N!@>IlLV^ZXwKN9e2WHJlX(q+(G`iegHu( z>x9aB9#2S5SO{}jC!FvyD-qvQ9c-`W9`_%Si`G zHVr{8>y-M6kW=`oA{;PtSf`w*jyw`U4(pVYSt|X;pcmw@epUr9hz|Kb+g_NR`q}ov z?9|Wfh4(56K7IPdk(INnscN(E+0UjIMEMj7bl8t-fPbMc()#8js9zi;TbZ3sFdy}+ z@_Jxaf3*S{p`QAxF1A zLTUnXfsmU6NG+T=)B`VxTT&M-q!u6-o$$FzLe>K0BG<|D0i?F?UQ+vB5)tboF!y!KrT7B?%-`wLe{~xu6pTZQJA`HA$0(`?1UGhXamS)3dY1vLe|A~t~&6t zXq&oXA$0+{;)KuC&<2nz4pP3nKu^dV-~CHVu31b9m}^ed`0o@j*SNLX2bf$OnAGW4#f_<6c=a4^hg?8ao{EZmZsSk{m)BV8Qlw!)$XxHUNj-u5T=2190f=LLEP76PSljh}7q= zi6g0gw%0sh`nlm%KtkpL)6d18)V((3cSeW)1$)-tLK*_n-;L{+S_#<@kp3=SYVkQp zLgw=mqh|lcqmuy^k`KrLH$2ax4Il&DqODYb4~Nv0e~VVBfp|$Cj;#QYfo{wMTLpj& zbi*$N6S5IcbnAcNg7^PiB70U7Kf z^RJy|6JBe7`Z}EE5DRGn$PhQY{7c9tfDECQ-wKA`l%Mug`;X|A8g9qZ6p-O=k>P6! z$Z#rI_tK0X^?d#x^zx2{Gy~)vH+;62kj(&j$HnCzj}QsjoFDbnc>{iSgoQK*WQ1E} zk(&cD!i7cVIXEF(;H;?zz9HJDMp{S_R|Bb7eE3nvkt{O}^z#*upVZ$*lkxW0l+r zkTFy;6YU9k9k0o2{}L02%9sw|{5@$XE{lz5sGPZlhgUGdvBHQKSD0yMPk2 z+^z?Dyj$dGt_OO&3rEA(TnX8lx7YG5(KwFhL1i^put z{wL%OIEbsidm{Tk)%J1&AXBa7xB-x_jU;ok(vG^??j0GUROF;|+99e8ivxi?2g`Df6|6HLbKJN&)O7}A zj*AOK4Y`H4;9cJaWUhtW0?1qoxdo89gy`A76&KrT%iEa!c@}ajAoDEbRzT(vq8)q} z+-Iw*ec|Be+p%;3WWF0d?n%flfXsLCoL+TXmRiW2fGl;xO9r$7WT{)FTJXp?A@Aaq_AUKIr^02{ z^WFu|yUcptyTDl-=m0*7TTPR@FhcE#nj`m(>MSGe4A=!!GqayP?dOuB-@a<`n$ zVkKl(a9Hlv&IywPcQcjKVgN29SKw=tP#bpxvcfHEI=vf^73@?`!9Dz8-972koN+%%B`0h!v2BV za>8n*-nWo{0P?uM+Hwk$^AZw^Z9d$jxw9{RK#Epe(ZKn^Q)3vtK2f$&i z>+8&5LOuWvYu!5aLJkk&(p~KXhtvnQ(+2_h!0PltKt7;O`LZV=A3|D5bsQ}2ORcw% zhX7e`7u-XDtmlH$4)I~!wX0o&MU%n}R?deZ=LRe1!{D&N^-bdBVQ|>sB5|TQJi_c% z+achv(Q{3}nMXkb3mcygqu*q_G6dX3WzKQW31&2*;t-8U}qJ(@5j|0@3 zLq&Gs$Ckrm;PA2K@EACJZ0GASaQK+>rK6F@ktS2$4i(J{H(L&mgTrRa;c;--?D{5E z`8YUic98?oS-I|bDWJLx!^YcUtx|VDwzx&7yzYQ(;q++>`vkLbvxdRKZncmn0NHB2 z_!EF^bt_d3j~!3??kD4hi>7&>SpV`Q5TCeFlTCXPh)<~9?!mHp3b{2GFSzc1Ley0w zhU4R9kme-u6ri8E;azP)J_YD!oLYTgc^WSc)SrZGvyi6&*=8Y61G0^f8-m`RVeamc zcf?J3+b!f7K(^Z`;~7AkmWd`~jkUMRZ_#BWs-HKJhiFlrG7PgMSM0{=` z&ja$gg**?)=Y(jZ`2y32$&oOcUs%WsfP7)2mKOl|!Yx}N?4<{vIrJNeUUu2Z>jB6v zH>&S_60!#%y9m)|*%y&MR6mTwS$4PWL?4}mhYh@#vZH3e}cmv*RK;A%zuKz9-7>zgE@SOX~w0a#Ivcrw$qmY*=vt-F9EXGt)@TX zPso?~I-B>#j1@Pf4p_*)0Xcxj z*P+h;4afmEQ9fK7uj93bS~nJJwp|2L@)RMFoRld98N=rY%l)- zX=)-7GhQ=nfsvnxQm}g%2$hzi3)1h1W_{&1&OeIAL5U@Wvds_z#pfFYY^byM)e6* zbE0V2`UI7#dwrW%qbI0UL$jId*Dj*L<%FA)!h2&%(HGSx)j0eNMC+55OJ8z1X}R>J zEGKDZHP^lZTu#!$yc}@phw5L{)rsQOf?urO`VsXD7q~|CBkC6}S3QFMsQ#6XX!1$? z)WBzxL`EBsW+eS7!>?9`{^a&6gAUEDKe_$NS(qRKAqJrSv`S1Clk!emAqEh3nlr9p z0|-0KDQ_I02BP|m`e8C0=oyO|NYojogEVR&QD@v_bwrR<+aOe*RX0r$HS*5dDIY}C zSvP8wKZvNaZkcj83lcRL)#uctDWahDIXlq7eC2n}%_tN0HJDt^xe2py29wJoU^HyC$$mP6?FM;$3hLFp7`q&x)m!YV>p!!S|wel|5aStWx z0&`j#HI%3e3^q~$Y8a|7s;{St26-1PY8X)$EovB17l}#+sNtyoLp6O@Was^1QNxM) zgQqRs*Knf#;Bl*2fO-ejf2u+6iWYf)TGTs4{mJ-OquwFvPexGH0@MgpUsC7Z71i@D zS=0!kF1ffz(WntbU2;qFTOQ8LNK{`|H%=4v8(+4lkwjg#8-FBGm$~HX1*lP|zJmB7 zyArQC5^CKvQ92I=(Xf|M#9!f|UH3YQ_$!PU9u4rLQGHcinH&J?-C{*`R2j9ao>0?ofs6G*-qjX=2s6G)a zlfpp4@u+@VwVWZY%X=GNN{6k+6ZLiki64y`Pt@BH1Vntemyi=s-B-< zs&5222926PRNn|JmR?*FQQc3Knh72Dv#5zg^^3%6gs6!`^^4#X*dyp`5~>HPH)e`| z<_)wGP9kbx1X*3(*Ce6_Mxc4!*JM-=Qk7OSH@zVr895)Q|`= zof%eoJfg-&;&nsRJfg-& z@MJ-cYd)$csL~5Ct_c=3pQs5Dq=|H2^NE@esh5k>ICuF1R8Lg@ULcz1O|+;5L`{su z>xHNVL`{s~1g^EQ5Y>~^;RVpfB#T-|)TBs}3t33iqzGJy*2W@KPf<55gf^yF)FPs$ zM2cMFBBG|ydQ}P}T#V|eYW_k|rP)-AT1?c`2#!2@T#JdC8o`<889dG^>wE7-(q=|P z)&t4gdOWUnZ^id`BC`8OKBN9GS1&Ll} zM8elMAkoQ;2!6S>BRVPPdvhXbi`93FM2E~d5qP62;9HJ-=c-?pp~o(Z@soFRDKwd* z2HfUG!mk-Yg4^5(zEr3h;7~bFHD4|&7L*H~yw0;g4t8E7d=r6M0Ov*UG?L%gmg8%$ z`D)il%aK~3YA!(vWdSXOhB$yMh=ey{Xv0Pk zd5_|@^&}7ff}$JXVwqQbfFNC4`|OhdmsV%AcEKbJWN+0^`Sbl9Ea%-Erc`t zVI+Kpfi`Ru!4qZ;!3?ic%~t@j&O$iD>nwybyp9kqy$YP+^=bruvnqGJg>Z(~N5WJb z+5oaXg6{+HRim5bdz&I@pQ>XkMElH5Y{cg?S=8gls`*NhpZ~E@3JSsKW1~lqVDvHd z$b5Achrc-@%OFT>T@ycOx?v?Y8w&JhLv>IeJ_-T}@a71<(B)XOsL?Iz%u11yyTwAt za!aHLLLF`)gk#MjwKbv|;MesFKw#usEs~1e8VR2hp*CoXm!h;ZS=>6Gs41&N!`x4d zmQV=DC$t)zK9GQX62UhL_d`n+eQ#SN?Q`|lDsf-tHpVjC2NkKM?c4{cp71yK#wsMj_T zBv|h-+XN)gRdz(G>PrC7;JqW#ta)%@T9KOFsT!;nt#fyp!J-hDossbK9gu+RjNp3& z{*FN<-`gEY+pngq7I$av=8~ueAuDmPdz4&*55o5tMWYam_LwCB5{&k6N$~2i5_|bl z-LXd0F8tDnk3vkiEu@a^KO08N0!}yi$lzhLUuhASR z{Z|pZf#&R1BDGg#ti`qBUNc}60k?_6~ zZ2;L9!H4VAQDxuzHiEB|K3NMLeM`Pv5S6K;1Hpo5i@(A3fEhMO%-R97AV7lq0ka@L zg8Kn32#%pL2Y66T{6I8pchGX+ydR8Y=v!{IVWUWvzJ>t_4hJLn?1Ha!DpPTXBKR_) zcJfxW=`Xybs`a5LpNk^>UK0%fKNJZ+Oalq{p$I-WqTR3Jdxs-wKdR?Ggxx=E?0yvv z??^DbaqEOvc*KZ?3W#>Z3=SlCA2EXi3EoFII9kst?D(i^yH4ch9*y8%c5o6=$kIqj zz5PG}a+DLq_vKZ6?|3BbXEk-5=#+V!5d*bdmExSx+Q#3|_6Z{pNC^P9%`nxg0Np^Yq{}|z`8(@S{pp7u9gZj{-f&}=qF~UiX;*4sz z5k~log^=YLV}#KLkTb>zCrOt8NpLKJ|d|`#a@cwH~aI{vZahfH;HP6D9{EL)tLHAX7PYT50}j10f`HTdOR<`e5i=_2cjXoA#dS0VD;!o3Nb6CCbvp@K0S}dvL z3*DaYu1AC#s18+n8Gr=yUS1gZf&}wk9;`OLVgegf_V(~wUh#lU*N*KC7g}!A7%m)D z@5)~IOcFS->Fpt=rBlo1u==Q~oAD)JAB!RLK3;eifHr{i@$l6LU3xaDx7D+o5x%^Q zAHoVWfkHsu_QEh2BpZ1MP}@Tj)$wJMhhKErv{|$(Gr+@BFy3}lrzQq^nBW8_xQwd5 zMHDMUfgT8|F+BslFjNJJ9tL`0s0tE24D>=e`!}msbX=6Q+bwl#b?k~OewA%Ejz<)aEBID}k zt)hPB2oGC??=fmngCkX~Pw*aNq|qA+p|_D<_#Oi!`Woq#(_0TD`WoqB>m>sYs2rt+ zeS#l58-?F?3PxQc(Ay}ltoHUG0U71N+w=aU2A2$e*!mOPpNzJh@;j5!UU(`%8}J?N zRc#b9SyfETG8*muo`T7|NNMbyE4AmAYs_A>< zy|ig+)u*CO=6I@}2EHcMF+oNChxZ#3jIL1#Mib070trSFxQ#fYH7Vyrb?^T$qZ7@H zqL8ItOus+}3CKil8NNTP$?;E8^Z$qUhm$OXj3${yfHr_k;v%4*uSsgMs`wecYnf~X z;|M2v;fqbQVIvP;y3z91a^gYwVZx=Dbs6~yus z)FL%U)!!lN<<7C4awg_@;Xwp#*vNwqdkeg@rK;Z!aYyC?Zao^#+8ppgb!>;I zTDZ`NfnRGaEptfue8M{bKf{L4ArhI|)$rSwBPv;kzXhu^p27O72YiMqT~)M~ZF zc8Y%+b{Ln%u&xgh{q75J)(lgT5*X4Yy^YEcbsbt%3k3HL+KdwRp{#fYY(Ey`E z3q4gJ!EK#aN{7=R!EGJg05@8W?|tN@eF`_Aw(LT#>?1Bcd}QqAaDbas#oeMx-XqO|D+na8AA2~eF(H-1QEgUh zcH^1NX4@S(ZuY`A{%8ZpW)G1MpA6@a+M<$s@ML(4g>YGI@xrI`Xv0Pxk|Mky&!N5B zs)p~u+sv&NLVLH>3r}}w1IShnr#t@oM-KP>C+d$qqDAf}7D9XXiG|SKeL~2M&}ltn z2)wkN>ftZN4Vl|K98nmu)}unVs}*00{KD;KC87}Qw;Qtp5`4ECvjP%)x6`c9z}KTT zcBpD!;d6@}MidmX)C*6*AOYDywenxi)%U$!UfMp@|10r8<}MGHJUryqrzpGCnXg2H z)NcF;VlW{n1f$(vIsFABNHE&%HOLDgsNAD&*$c=X{K91jVc&ba@T68h=z9;B7Oh}? zPU)9w-d@BFUz!1<5R3CmFARr4g2R_ymHdz)=k!ajag!j0SD(~Zs^mVAEd0uHpdIxB<&K!U?w4?m&G zUqVUw-Zx&_L2QuglcR6@po}`RPZVT+Aynl7FZ}5*v;pJ*Z4kXfuJ3*Cr5zdfHJrou9%6jDwp@1o zgX;D*&Z<9{v7r#!`N7N3@8Cd!?GIjc{agg;Z()Bc;e8<({Z*UwsZXp!txECH=(FTy?UYI>>z(se$ zQ@`DUZ`L0A7AM{l7D#p{ERd_~1c5woG$3_Sjr}eG{2oHVQEGQI$(P^^=L4wg~u0f7A zkE%GMx*f#D#2I+8pfeP*)GMv~1_{U+_RVFRN6ns9?;pe^)>-3RPzcCbuapkrK>~7? zz0d;Wkviug0laW8{v{4btSrzv?F16ob6%Ks0vWVMcU;|hRPK58;vsy&b>6H^6hd?7 z&CUf04(Gk_SuaR%IPW3P-Wtkkhy%Zuc2ylXB(A^vPY-!HI_`#4)+Oz@nP9aiW7L2- zsTrfEThK7bsr+S;RNr65@S`?p3&YPNS3|1rZ`JvG zk)8Xug-~CAo5KLw0P;5jJ!aPOeXn;kZGf8mJu+*(qlg0-K;~0l_yO1N@p8ORG}H|W z!KhC(%o>0MqdrmShC4l=#4LuSH0qGkpr-Mw8fb@+b$ke@n>ZdXeqnCcR7b>Nn?S)F|$6mOm@~M>m>e<6c zH};Q)=TH;^(mz^O-%f!9q<<7g{_CKW0^b`PO&g&;JuF&f4vu0!GX^W5QiiC~M{rRz z#3%)YU^FBe8YYlnG$ac9!U-whSn$f=2+qJmErd!L8Vy4av;kyj6mf*^1xgvFma>;& z7D7hDqTw;3AW+J%C`=NM%>`7^aCP+vK8_n64KEx~2*~hg_(dj2HX?*ss{$(J9d++f zQ9Jh?qZAYZ@{UmoNI>49Qh2-C$oED^)5fVqM@5HwMn_?*Du7WVDrHO*Ij4+dhaNA# z@_%AtRAFnOPH!!c;6BDIACTZahRcUxP9qL*tm^zD!kn=dLQRde5Nc{HA=g8o#=bWp znl?o(`%zq%If1jp*uOCany9Y+C@S@wXc(aoj3$~{0trSFIZLz-joJ4kjv+mH>y3B* zpCOHFHs-uYgex^kg$5 zAc3CD8DY@Y#P_B}arph^C-Fd;X;B=0nM7#9(M*rxm(&vKutFm1#bcsa3I$pqRDk6f%u-8WE8SAT2}8bkbu0${l$&ngkzX7?l=yPGooR( z3}vw3Gos-gJV-E@5eg;Iv zts~l?m)TKxV>-4b9MhaAev`G!1W~6M-7bnCCCc=4fdqa|G^%sBAc3C~#i4>uxhanB z(X=IM=LtCF1yT4Jo*SBSx)!SZllabgp%DayV6-qAz7_xpMhm03OXjL+N^LGu6HX%W zu*fJ3g%D+tQ5Z-ziiW>-4iX#|arE5&O*vc@)Q6-ZwO(^efc*Q=)C*3L^>%p{W(oFy{vnd{-Fr3=(`-kZ-Gi z11eXlmOqQ@3s+hWj4fA2GxS-sSumKD(F*#57LeeuGKyb_p&e+(!K_m6|BQUrs%Utc zMIrdEik8wb3P?a!ar_zr>V1{<3n1^C@izS*|Dx@ZH)>L`u`bR*5U#@47kzaTVOV~57y%UKh}lUA-Ev;l`T(S-hK1CZdb zCW@PO9x9sq-nwYoCe`X!(fOWrQKZdiK$}zP>*2~^K=11I^b4;fpY8s-PAZ@ZeWFfp zc97t{J{qRmL4y1GD53`Lf#y`v2KB?Q2<|pm2p7% zqlJ*sMq?_Q2fE%!Q^{@9oSOegE%^<{n2)02As>Z+e1xBz53~T1jiQKv8e`Zkd~Zt> z4-EX@MWf6uTx*YlQ40=xtLpl@cs#Y$^o>F=+G^}QNHE$;`^pRG78L9gb?kRhy~!sQ z!V!LAJR{lw@(GP1|2s^JwteLH&LPN1V?skm~>3r~oa4rceRRX-h8k zFI4tfxS}u2jG+*aFX&~sZb1U_1s5tac`Yf|uBd8LOIC%H{I7VsERsun7u~-`a*6Na zR%`=(7y8~;(X{W?|IUim_kP7_k}kQBD&8B#KWizLyrtV?Pd)uY_oTT~LLJznQm=84 zV81sSe*Fv*?Ds~I>}F(KNDb{%kDL>gd+xIkYJ8vZfoKEBKKek$--Xoper$1EX0`3n zRg#j)o4ddCLigv?U*|-b6p9R-bMUos zHfSFJ;A|LR6mkx}QLWC4th{e5gmdssG|af84Itk{k&osns*uus8Cz5F!^LH|Jui2`yk8h-bSHh>)DN@09k$X~2Kq~5rI`1X*6!~i)I4R0UN29QHh95|R_ zEaVSyeW$iv5LI%&vyeC--$lcF0ki?+yC^;s=aoz=-#Zdb`$?6(h%1>RG@R_a6<5_! z^~6Pd`gqhBWE4V2M~&kI3BE_8Va6UL_#R~pz^&1WQ~smcauHkON3+0D$Wmj>Kmzh3 zjTvqDb-s5Zns!Q+`$KdtdxCDCuT-w1C?}(`FuOwXu5o|jf&B14MDeyL(S{uLn2nRs z4E;0=B)T{mP3j+e0*Nk8M)6yE9ni(~zV~Z1?RVI$7Rk{sZb$Cv50RVsD|Z|X!S(Fx zH&RYl-cHXRGv;pKi*D)PNYwo`bYRV=2 z$k7E0A)^b%Eujq{7wDGS2M|yf)wN6bg7~6^aD!bm*0FW4!7kD|GR51P8|)AD(q()D z^@o{B6aw-`6qz$_ACTbtM-+)o$ki|R@g`6@1nHdM-As{R#Gv(;Z_ z`cR1J`^yBtAi?*qXeIq^9!T*0i*W)I5N&<0R}8;9I{b>bKC@R0D}D={xRf{$hRFO8xTYMQ36-O&vkzcKiO_W z5Y%Enp<3G|AnO490;sGdECwDyB+Rl8qXHzKjiaUo_u9^-YMW9hGDX zNUnhi7D=`fV&Op-wLngY!O3&a-ROH$VrerJ{<-ysPk^9Ga%yjY<7d1BEP&mC=(95|DQ}>3phpBc-0Ed`IFJ zSz_TG2?_z37AvXG1t0;LMsbfrU&kDwQea{NUd3}$9@e1=M-J-jow71%u)E&sl3!2qZAZ^ z(Hx@`kYF^2N@2Kr6UQ=F;oH*dQgbbYN||dW1Z@DB%Mo@CAW+IY)g>Zt&7Ef(hu-&oa)&FDdb-QrmI zL%|>+!QvRqI}gPj*w+%(-IJ-*5+eZ$S!#p^3CI!(O`FkyGr3f4^ki=CQVSuYrABD9 z0c0tKX1v?c_g2Pmj;1QZJN}l?w1TgkBYsdL@7ayH&A-ezXY^ z>{i9_Xp^Ju$iCj!qs89+OQGF%(Po4-&+^Mf0%-3*JZBbx}xZvIOg?% z=&DLwda3nBa@2s^dLubVa9eLA??mY~Q1T`{Hy8m>$WkLSNI*6inLBZ?8)GsH9_y}d zFFo1)mE>#Po_jUC2uCf3k816)K!VjqGZv6wwb3lPn|*I{EbWsR;__q%<)zD}nVUHx z9yV^~h_)!)msd`0G3-zXc3aF&0SR_nxKkLk-^{+Ys&VPEUhdXdm}*8LOJiXs0wf?? zW5`6%`gZoc&tiC3{(HLYocUP{u?qX{%)Ym&P8qUt&uyk}6oSz<(>F*k+Qz&! zK=!l4OikxNpF21;+;yF)-JL3@m`vsFv=A<*ow4xEAKI`{3=uWA&@H~VJBG*R{fc1= z?Pk10+kFcau!pw0O#%Lf=z9!1kYKmRr~xF{?V;!l#c!c_U#bqpW!==5SR;XLMIlRL z6?Mu9Bp_eLkaA+ocMI3kS88f;Su^!jEWCz5As}DH%IOm_NI<@d;oQUg(JiF*s?)_~ z?bO~__|Jz>2*}=81s&ysWTP0;np!Ye@O`R%30XIHpB0Q2e4iDJ7JMHCy927Z)%U)Q z;f?vE67u%UZ)5nec24xIRLuc(rG%`SI$)H7LNGdDlmZfr4p1rd=C^Vz2h~lPvSsR^ zg-|I6V_`}aZ2&n)@4?&3Td9;oYDuQd&pl)zWOOJN{;DC`0CI>+xf8_g;(LcV&b#C5?|eW4 za*8n=C;E2Z`z@AsR^97kqJQH=Q**ad+~2k4@HaH~yO97S*!^xK010-#8wqY_U#BTS z1y!{)Z1HI$25MMk!~hB0X^O!)znzkw;hfi3ZvofjjKz`V8KZVI1nvyg-VEa3;d>Wi zX;+~3oMeaF+VDLNj4BL9)DUSx&CR99LS$U zGM2uB)TLOEWNQQh$V(Q<-F+z*UcsR@Xp009qux6hg- z?gt)2K>~Q$L}_>W-ql!IZ*>H}Kv?o>4B1g07w@FHuEkX2vRJCuOo)h5aJm-rwN(QN zPS-f=G-G#iWW7}1va)7wuXq?$qL8KW@a6y{Aid() z_m zcT}75vSsFwI6Maf+^&>0 zwn^okov) zH@h68I%FZv9b;x4g)EJS7i=H_854&mqG7$8vX52oWyuDqvGMSbgF-;Y#>;3I2@;U8 zad;v+ue(W&Q&+QO-6rEKggatfyo^pdp$!|wag=2=eK&W6ip$#BRf6I6STCx!L!mC! zc`=ZfZWRyD#vs8^#ly2PNHA1n*be%;$M+`1@&6q*R+McsC&gh{=-Td~$|kFlmEhVY zo9RX&7)>_Q4HAqdbMCml@8L+NsDD?&`krDTRM`{@p~|KZ!lUUuRM}Lu9jD>ksTM*; zQ{&;86m0;R8b>I^)p@V)y%$fLrBao#I^W~oVv6KmiaSI7tFpWyHN!AMAsEdtj6j0X z3^L*f?`1DD)k*NlooSXD3Ry}maH)X=WF{dz5C6mW=EiaKyQ2!u!*k;ZXldR4!M^9I zX;oyMw)4!6Lm{SMUOYn|NI-(`ym+l<0bh{dJ1^d{F!=1`KAh3wX)CdW+a^a}cQ8vm zRYjImjjGCI=At-$fr6>>``F83wIo|+72t1}(8Xq)Ai;cbJiL(w3FeFAVK(+Yj&q4x zS`}f~5)0utmzZfm8$gzDS{QHN$7xxrWKz~kEsclqHVOe*8V|4WKmxKfjx3LcfLf;R zBV?I{a3wFZ5U%897J@aqTrCHraJkXjeZixo2{fc<_&h@?^f4?FQYtAXW-}hF>ak6};8m4eHr;uCsekym3I#lid zHFf4eRux$qFS5tNn-_Wdz+xGPu0~{kWkDf=7D9mn3O0f>6NU|fD9FB4#6-+=Ohf^; zvV+~A*~+3luHcNgOa#b`0v*9R5sCt`^vI^r6GFk*AcE35zwh46&iU_sdGkA&dCtl0 zWZrkptphiOs*s2YHw6;{k-I7B*grENkg9A-1`e_hA$K&px1{X%nDD;J6+bNmOd$Z#Dv5Z^S7b^ob7SNzHR;oJSZt9F%9|*2MqEeHJe02eYazLvKoraB->Uk%)v*}R! zEK(%sv*11Cf%2KWCoctb&}~*J2O~wwKA8CTEXHQaKB(zCr=aXZu4xx2hayGFJ`^cZ z_90O;7mt+}9Cm-(g^lFlNYP+&IH@RQot`{U4ky(;?4#&$T(SJ~r0k@7vx^y5_&nk7 z2JS}CIO*}IYunWfE*&LglQBs|(9xu6#{dy@R0El&uW@SrF}Jj#!0QmUGr|H)NnjXP@9fN2`c7z;$P5$f`sETOtY*Gpc9G7FQ1Of zTpO5&CxB2-B>wCXm}N$F3bs7T#pR^zk96<;m7``hndbIx=QBcktIS`yBi+m`g;NRZ zZw(!fN;Ril^X{fcztf?XB;vZKlQa(t11ais(lT!+kfKhjoqCsLe6jqir0l%==kDgV z!dJ<)*Jl^U$4l-Rx3#PNC6U&j39Sbr_e@x_1Ce`1T}^-2I$o+d>-v^V-`cZL zf-G=0N{|K4CdE8<0R;(X6Ji(lW)iSKqkF4lhSfGk39>+Al%Qf76Mt?xKC?ihMtrS? z#>*b(+-+5+SHE*ng2tG0QGyI{F7aRWg(8kRw*F4xF-{~Ct~9?^Wgag4DIw}5xsORZ z7hK_1)2sGEkV_(3zmWKM2Y|@EkhIJF6Nuak@=rz9A5*n2x`ta#P1VK32jfXpYT{p5 z07AK#5Lwr?#>b20mlMtbkKbyB7A~tQ{SoxIs&d8MUTx|ct_0^I5kXhN7z0Gm6^$|4 zMLe#uze@8F#?w_b$N<`?xyE_larMzH{Y+?%QgP z7C?cia=uS|G>xnI$s&{g+$Js7;NMv824HBw}YtD@*#;t9p_IhJ>c*Yz+X z3Ue%hcf|rGNC9(Q)1Ibh!(2W(pN$42B51DlwFV++uBFy(G71mp@kMcNGL4!!ZNmS% zWj!HlJTR ztMUetp z>|PROaiqv-iz7uwTO29O8%x|3QI2e=6snoz1+y*=C6kUsRTIpaA5X0&8Jf! zqL$fP^0R0lqLx|CqO~NNsJkZ1`6_(-D!1hhbCc`a+x$%p3Av4V40*Zrt0Exe<(9RL zPPU%lCbBJi&NgY=yK=?W|7qo3>TNm|R>;l+k^O}1ywZKv+uU7R86=X3#FfG2fJj^^ zm(#A`37O|vH{^B#_s?3tkswj2)(7r^P@c5}z2s<PVEh)sZO2TP>m%iIarZxT?OUbJdzik>jngesxG5 zWwL&CI7zF+wKl&S2B5ID!T*3T*IK_w1j1Zv{UUKP8)94braRb|MdH6$f}HnLg~?Lb z%kHi_%!tyOSOU?8GiwH>RoZUjWstG1?B7V4TT#8)fsB-Hhq_0ba& zp}c1O5iwAi)N-B9O;%~IyRYvwy=z~Og(~*(y7hO0$b*E}ZDsz(6%YxpTi&?R@$Y0A z^$qt}E$7m2#3rk=zG3}#nmkb6uuRfw{6J6wBYTW&ciB99Fra$=SAUeLvH;+r>dFnyXganf4(0n(%So>@#KN>z8bI5Z>qGm+3gv? z=(jo8okS>`ZAHF_1VY(tSws$@3Db(@AKJ3tyPNCG;KGM$=Y0s8rY3B0|5#^+m$rnm zNkq_=P+cH`wy3%qFsG@Mt?uhOb4O`wq^P=Et-muw9w=KacZSrNr>VNz+(QFRhkn~a zcOnrTZL>Ze14P0$>+cK!k+4luA^QOON%?kLw#U6c&&g)`ru~yU zH;6N95lPJUyULQ~VOdNE1X9c0?(iT}Q@NXSXN^BfB+qWkiwB#Up!(^>@{erUA6)ml z&BnqT=s?Gwo(^a!i ztf_9_&dnOk>S@D0re!S&xfAjjS)W8%GSMftP1kIYgnib3)fgy_ zBxnyeUHx;vH9h$@W7eJvgH5Yi5<+`4{_c;pQIFkk+vMXfWMu8PxAw?7)pR-60XKLE z?Ku!7=sxa&;Bw?a!U5}dJU}EIu>J!<)7AEa?%g4#w)S9@pf^qqMhP074_g1R5GY7E zX!%~yw5&ah&PQC=p=L(a5$lhsr)Q({5!)(%Nd*Yyh~;x`qj8lP?E7umAKixGruB-q zmo;^Vw)1ZNexK=EIvFXl>`CkIx|0XWNeyI*rp%CKzi{1#abMtzNRcVOh|QNN zzfkkFKbav@e(B~8BmVSd7_vx&@?{udfl$8G2%9$_+nsV>52G!o!U#Jfv)w7{Lyy0+5gJ= zzbJfVIl0qO-Avj0jB9g0>z6a3_9P=0EWcpOzH^N~X9IjenI1+@v!thsZrBJjx^yv^ zj6?)owEk=Xh@gv>fU{=sS!&ofZvP0H`%R=sL*Lkn{Lq#>P`Z`B)0XEw9)#zgP=I)D_!4 zA4`FVx}vqL)IGac{%6Yt>2o7d_n$3yGwz~**;4lpZulrOpyv;vP9!4ehv1e#1pOel z%qcwlQG3X0H@lB1xih0o^C}YZWzy_y`}SjK5D@Z@!8K>gHRq&xWF0{B=A?gNO5t-- zzx(7V%sDBl(57j&(A+eC6X(STIqIJqiBkLA)Nh^0nPv4`r`b~byfoW7H2^4bUg`q` zK$!DVoKK@C5azrT4{e6Z>Wk%1rDZRtO|m~&s3+%BDd*CPhSp1OPpAHdGYF}`Tm?Y# zKArl1NdhAE>6Cv-YRI`fouB$Y0;tb=HZXAIxARjU>)|Qf`6;^3si<#3q)LClK$ZR$ zM5;8lAW}gM3%OO6HMKtLgy} zLH$k2_l0xnbzF&vHNFliFi@|9x*~exbx<2t#40x@5EQH294;_$o5NihMuK|N9PY|k z;{pMpNG(7G25JH7vyobW`fQ-$f7f$aA~pGS3lLmj;9d{+xzzuk5l`Vhm$ItMTYCf7 zA|mw$sK7wI0ji7C8=$&KEpp*LHJuy0l8bP`fm?+8+ce29bkv(7+~20GKl5T+aOFN0 z+X5;uP+LHKJ{H>o>hrPKmPEKxlTQ!zrsXw!vIrcwE#bb9`d7?&4EKeU4}#~#-blnM zHThgpZ*HV30`pxd5bEmG{~tUM>gu#hH&3k~auul+P=TU0$aO2=u8G_VxN9P}6|t+- zC}3!8Yp5?aq&{j>Z(75B zG3Cpvd28G7qCn)ffeQ@WHgI2x)HYCGiqy8eFp!#j2B|k~p#lT7E!5woKB87%ZrZ~A zotyfwsco`k;~Ni~nyyWr+4$eTGDFLM(!o}`PK(V?n?87b5B4JM+`0LtV&nM5=2W3c fXE$_}xw#-uyyluFrUyRq%Ue2a{N*ZhXV3ow6$!Fb diff --git a/proto/metrics_collector.proto b/proto/metrics_collector.proto index 1faacc37..e4f5db4d 100644 --- a/proto/metrics_collector.proto +++ b/proto/metrics_collector.proto @@ -120,7 +120,7 @@ enum ResourceType { RESOURCE_TYPE_VOLUME_ATTACHMENT = 48; // KUBEFLOW NOTEBOOKS - RESOURCE_TYPE_KUBEFLOW_NOTEBOOKS = 49; + RESOURCE_TYPE_KUBEFLOW_NOTEBOOK = 49; // Cluster snapshot type RESOURCE_TYPE_CLUSTER_SNAPSHOT = 77;