// Copyright (c) 2022 Gitpod GmbH. All rights reserved. // Licensed under the GNU Affero General Public License (AGPL). // See License-AGPL.txt in the project root for license information. // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.0 // protoc v3.20.1 // source: core.proto package api import ( api "github.com/gitpod-io/gitpod/content-service/api" 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) ) type StopWorkspacePolicy int32 const ( StopWorkspacePolicy_NORMALLY StopWorkspacePolicy = 0 StopWorkspacePolicy_IMMEDIATELY StopWorkspacePolicy = 1 ) // Enum value maps for StopWorkspacePolicy. var ( StopWorkspacePolicy_name = map[int32]string{ 0: "NORMALLY", 1: "IMMEDIATELY", } StopWorkspacePolicy_value = map[string]int32{ "NORMALLY": 0, "IMMEDIATELY": 1, } ) func (x StopWorkspacePolicy) Enum() *StopWorkspacePolicy { p := new(StopWorkspacePolicy) *p = x return p } func (x StopWorkspacePolicy) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (StopWorkspacePolicy) Descriptor() protoreflect.EnumDescriptor { return file_core_proto_enumTypes[0].Descriptor() } func (StopWorkspacePolicy) Type() protoreflect.EnumType { return &file_core_proto_enumTypes[0] } func (x StopWorkspacePolicy) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use StopWorkspacePolicy.Descriptor instead. func (StopWorkspacePolicy) EnumDescriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{0} } type AdmissionLevel int32 const ( // WORKSPACE_ADMIT_OWNER_ONLY means the workspace can only be accessed using the owner token AdmissionLevel_ADMIT_OWNER_ONLY AdmissionLevel = 0 // WORKSPACE_ADMIT_EVERYONE means the workspace (including ports) can be accessed by everyone. AdmissionLevel_ADMIT_EVERYONE AdmissionLevel = 1 ) // Enum value maps for AdmissionLevel. var ( AdmissionLevel_name = map[int32]string{ 0: "ADMIT_OWNER_ONLY", 1: "ADMIT_EVERYONE", } AdmissionLevel_value = map[string]int32{ "ADMIT_OWNER_ONLY": 0, "ADMIT_EVERYONE": 1, } ) func (x AdmissionLevel) Enum() *AdmissionLevel { p := new(AdmissionLevel) *p = x return p } func (x AdmissionLevel) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (AdmissionLevel) Descriptor() protoreflect.EnumDescriptor { return file_core_proto_enumTypes[1].Descriptor() } func (AdmissionLevel) Type() protoreflect.EnumType { return &file_core_proto_enumTypes[1] } func (x AdmissionLevel) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use AdmissionLevel.Descriptor instead. func (AdmissionLevel) EnumDescriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{1} } // PortVisibility defines who may access a workspace port which is guarded by an authentication in the proxy type PortVisibility int32 const ( // private (default) means the port is accessible by the workspace owner only, unless the workspace's admission is // set to everyone. PortVisibility_PORT_VISIBILITY_PRIVATE PortVisibility = 0 // public means the port is accessible by everybody using the workspace port URL PortVisibility_PORT_VISIBILITY_PUBLIC PortVisibility = 1 ) // Enum value maps for PortVisibility. var ( PortVisibility_name = map[int32]string{ 0: "PORT_VISIBILITY_PRIVATE", 1: "PORT_VISIBILITY_PUBLIC", } PortVisibility_value = map[string]int32{ "PORT_VISIBILITY_PRIVATE": 0, "PORT_VISIBILITY_PUBLIC": 1, } ) func (x PortVisibility) Enum() *PortVisibility { p := new(PortVisibility) *p = x return p } func (x PortVisibility) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (PortVisibility) Descriptor() protoreflect.EnumDescriptor { return file_core_proto_enumTypes[2].Descriptor() } func (PortVisibility) Type() protoreflect.EnumType { return &file_core_proto_enumTypes[2] } func (x PortVisibility) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use PortVisibility.Descriptor instead. func (PortVisibility) EnumDescriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{2} } // WorkspaceConditionBool is a trinary bool: true/false/empty type WorkspaceConditionBool int32 const ( WorkspaceConditionBool_FALSE WorkspaceConditionBool = 0 WorkspaceConditionBool_TRUE WorkspaceConditionBool = 1 WorkspaceConditionBool_EMPTY WorkspaceConditionBool = 2 ) // Enum value maps for WorkspaceConditionBool. var ( WorkspaceConditionBool_name = map[int32]string{ 0: "FALSE", 1: "TRUE", 2: "EMPTY", } WorkspaceConditionBool_value = map[string]int32{ "FALSE": 0, "TRUE": 1, "EMPTY": 2, } ) func (x WorkspaceConditionBool) Enum() *WorkspaceConditionBool { p := new(WorkspaceConditionBool) *p = x return p } func (x WorkspaceConditionBool) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (WorkspaceConditionBool) Descriptor() protoreflect.EnumDescriptor { return file_core_proto_enumTypes[3].Descriptor() } func (WorkspaceConditionBool) Type() protoreflect.EnumType { return &file_core_proto_enumTypes[3] } func (x WorkspaceConditionBool) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use WorkspaceConditionBool.Descriptor instead. func (WorkspaceConditionBool) EnumDescriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{3} } // WorkspacePhase is a simple, high-level summary of where the workspace is in its lifecycle. // The phase is not intended to be a comprehensive rollup of observations of the workspace state, // nor is it intended to be a comprehensive state machine. // (based on https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase) type WorkspacePhase int32 const ( // Unknown indicates an issue within the workspace manager in that it cannot determine the actual phase of // a workspace. This phase is usually accompanied by an error. WorkspacePhase_UNKNOWN WorkspacePhase = 0 // Pending means the workspace does not yet consume resources in the cluster, but rather is looking for // some space within the cluster. If for example the cluster needs to scale up to accomodate the // workspace, the workspace will be in Pending state until that happened. WorkspacePhase_PENDING WorkspacePhase = 1 // Creating means the workspace is currently being created. That includes downloading the images required // to run the workspace over the network. The time spent in this phase varies widely and depends on the current // network speed, image size and cache states. WorkspacePhase_CREATING WorkspacePhase = 2 // Initializing is the phase in which the workspace is executing the appropriate workspace initializer (e.g. Git // clone or backup download). After this phase one can expect the workspace to either be Running or Failed. WorkspacePhase_INITIALIZING WorkspacePhase = 3 // Running means the workspace is able to actively perform work, either by serving a user through Theia, // or as a headless workspace. WorkspacePhase_RUNNING WorkspacePhase = 4 // Interrupted is an exceptional state where the container should be running but is temporarily unavailable. // When in this state, we expect it to become running or stopping anytime soon. WorkspacePhase_INTERRUPTED WorkspacePhase = 7 // Stopping means that the workspace is currently shutting down. It could go to stopped every moment. WorkspacePhase_STOPPING WorkspacePhase = 5 // Stopped means the workspace ended regularly because it was shut down. WorkspacePhase_STOPPED WorkspacePhase = 6 ) // Enum value maps for WorkspacePhase. var ( WorkspacePhase_name = map[int32]string{ 0: "UNKNOWN", 1: "PENDING", 2: "CREATING", 3: "INITIALIZING", 4: "RUNNING", 7: "INTERRUPTED", 5: "STOPPING", 6: "STOPPED", } WorkspacePhase_value = map[string]int32{ "UNKNOWN": 0, "PENDING": 1, "CREATING": 2, "INITIALIZING": 3, "RUNNING": 4, "INTERRUPTED": 7, "STOPPING": 5, "STOPPED": 6, } ) func (x WorkspacePhase) Enum() *WorkspacePhase { p := new(WorkspacePhase) *p = x return p } func (x WorkspacePhase) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (WorkspacePhase) Descriptor() protoreflect.EnumDescriptor { return file_core_proto_enumTypes[4].Descriptor() } func (WorkspacePhase) Type() protoreflect.EnumType { return &file_core_proto_enumTypes[4] } func (x WorkspacePhase) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use WorkspacePhase.Descriptor instead. func (WorkspacePhase) EnumDescriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{4} } // WorkspaceFeatureFlag enable non-standard behaviour in workspaces type WorkspaceFeatureFlag int32 const ( // NOOP feature flag is just here because I don't want privileged to be 0 WorkspaceFeatureFlag_NOOP WorkspaceFeatureFlag = 0 // FullWorkspaceBackup does away with the /workspace host mount. All workspace content lives // in the ephemeral container storage. We initlialize workspaces using content layer served by // the registry facade and back them up using regular "hardlink backups". WorkspaceFeatureFlag_FULL_WORKSPACE_BACKUP WorkspaceFeatureFlag = 4 // FixedResources ensures this workspace is not subject to ws-daemon's dynamic resource limits. // In this sence it's akin to "guaranteed" (as compared to burstable) resources for workspaces. WorkspaceFeatureFlag_FIXED_RESOURCES WorkspaceFeatureFlag = 5 // PERSISTENT_VOLUME_CLAIM feature flag for enabling PVC\Snapshot feature support WorkspaceFeatureFlag_PERSISTENT_VOLUME_CLAIM WorkspaceFeatureFlag = 7 ) // Enum value maps for WorkspaceFeatureFlag. var ( WorkspaceFeatureFlag_name = map[int32]string{ 0: "NOOP", 4: "FULL_WORKSPACE_BACKUP", 5: "FIXED_RESOURCES", 7: "PERSISTENT_VOLUME_CLAIM", } WorkspaceFeatureFlag_value = map[string]int32{ "NOOP": 0, "FULL_WORKSPACE_BACKUP": 4, "FIXED_RESOURCES": 5, "PERSISTENT_VOLUME_CLAIM": 7, } ) func (x WorkspaceFeatureFlag) Enum() *WorkspaceFeatureFlag { p := new(WorkspaceFeatureFlag) *p = x return p } func (x WorkspaceFeatureFlag) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (WorkspaceFeatureFlag) Descriptor() protoreflect.EnumDescriptor { return file_core_proto_enumTypes[5].Descriptor() } func (WorkspaceFeatureFlag) Type() protoreflect.EnumType { return &file_core_proto_enumTypes[5] } func (x WorkspaceFeatureFlag) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use WorkspaceFeatureFlag.Descriptor instead. func (WorkspaceFeatureFlag) EnumDescriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{5} } // WorkspaceType specifies the purpose/use of a workspace. Different workspace types are handled differently by all parts of the system. type WorkspaceType int32 const ( // Regular workspaces are your off-the-mill workspaces intended for users. They are directly user-facing and hence are most important. WorkspaceType_REGULAR WorkspaceType = 0 // Prebuild workspaces are workspaces used to pre-build the content of other workspaces. They run headless and have no direct user-interaction. WorkspaceType_PREBUILD WorkspaceType = 1 // Probe workspaces are used to perform end-to-end health checks on the system. They require little to no resources, run headless and never // interact with users directly. WorkspaceType_PROBE WorkspaceType = 2 // Imagebuild workspaces build a workspace, incl. their Gitpod layer. They run headless and have no direct user-interaction. WorkspaceType_IMAGEBUILD WorkspaceType = 4 ) // Enum value maps for WorkspaceType. var ( WorkspaceType_name = map[int32]string{ 0: "REGULAR", 1: "PREBUILD", 2: "PROBE", 4: "IMAGEBUILD", } WorkspaceType_value = map[string]int32{ "REGULAR": 0, "PREBUILD": 1, "PROBE": 2, "IMAGEBUILD": 4, } ) func (x WorkspaceType) Enum() *WorkspaceType { p := new(WorkspaceType) *p = x return p } func (x WorkspaceType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (WorkspaceType) Descriptor() protoreflect.EnumDescriptor { return file_core_proto_enumTypes[6].Descriptor() } func (WorkspaceType) Type() protoreflect.EnumType { return &file_core_proto_enumTypes[6] } func (x WorkspaceType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use WorkspaceType.Descriptor instead. func (WorkspaceType) EnumDescriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{6} } // MetadataFilter describes conditions for matching a set of workspaces. // The values of the fields have to match exactly, and set values must match. type MetadataFilter struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // owner is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` // meta_id is the workspace ID of this currently running workspace instance on the "meta pool" side MetaId string `protobuf:"bytes,2,opt,name=meta_id,json=metaId,proto3" json:"meta_id,omitempty"` // annotations must be a subset of the annotations of a workspace's metadata Annotations map[string]string `protobuf:"bytes,3,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *MetadataFilter) Reset() { *x = MetadataFilter{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MetadataFilter) String() string { return protoimpl.X.MessageStringOf(x) } func (*MetadataFilter) ProtoMessage() {} func (x *MetadataFilter) ProtoReflect() protoreflect.Message { mi := &file_core_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 MetadataFilter.ProtoReflect.Descriptor instead. func (*MetadataFilter) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{0} } func (x *MetadataFilter) GetOwner() string { if x != nil { return x.Owner } return "" } func (x *MetadataFilter) GetMetaId() string { if x != nil { return x.MetaId } return "" } func (x *MetadataFilter) GetAnnotations() map[string]string { if x != nil { return x.Annotations } return nil } // GetWorkspacesRequest requests a list of running workspaces type GetWorkspacesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // MustMatch can specify an exactly matching filter for listing workspaces. // If not set, or all fields are empty, all workspaces are returned. MustMatch *MetadataFilter `protobuf:"bytes,1,opt,name=must_match,json=mustMatch,proto3" json:"must_match,omitempty"` } func (x *GetWorkspacesRequest) Reset() { *x = GetWorkspacesRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GetWorkspacesRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*GetWorkspacesRequest) ProtoMessage() {} func (x *GetWorkspacesRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 GetWorkspacesRequest.ProtoReflect.Descriptor instead. func (*GetWorkspacesRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{1} } func (x *GetWorkspacesRequest) GetMustMatch() *MetadataFilter { if x != nil { return x.MustMatch } return nil } // GetWorkspacesResponse is the response to a get w type GetWorkspacesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // status are the status of all running workspaces Status []*WorkspaceStatus `protobuf:"bytes,1,rep,name=status,proto3" json:"status,omitempty"` } func (x *GetWorkspacesResponse) Reset() { *x = GetWorkspacesResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GetWorkspacesResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*GetWorkspacesResponse) ProtoMessage() {} func (x *GetWorkspacesResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 GetWorkspacesResponse.ProtoReflect.Descriptor instead. func (*GetWorkspacesResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{2} } func (x *GetWorkspacesResponse) GetStatus() []*WorkspaceStatus { if x != nil { return x.Status } return nil } // StartWorkspaceRequest requests that the workspace manager starts a workspace in its cluster type StartWorkspaceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is a unique identifier of this workspace. No other workspace with the same name must be managed by this workspace manager Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // service_prefix is the unique ID/name that's prepended before the services associated with a workspace. // For example if the service_prefix is foobar there will be the services foobar-theia and foobar-ports. // If this field is empty the workspace ID becomes the service prefix. ServicePrefix string `protobuf:"bytes,2,opt,name=service_prefix,json=servicePrefix,proto3" json:"service_prefix,omitempty"` // Metadata is data associated with this workspace that's required for other parts of Gitpod to function Metadata *WorkspaceMetadata `protobuf:"bytes,3,opt,name=metadata,proto3" json:"metadata,omitempty"` // Spec is the configuration of the workspace that's required for the ws-manager to start the workspace Spec *StartWorkspaceSpec `protobuf:"bytes,4,opt,name=spec,proto3" json:"spec,omitempty"` // Type denots the kind of workspace we ought to start Type WorkspaceType `protobuf:"varint,6,opt,name=type,proto3,enum=wsman.WorkspaceType" json:"type,omitempty"` } func (x *StartWorkspaceRequest) Reset() { *x = StartWorkspaceRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StartWorkspaceRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*StartWorkspaceRequest) ProtoMessage() {} func (x *StartWorkspaceRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 StartWorkspaceRequest.ProtoReflect.Descriptor instead. func (*StartWorkspaceRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{3} } func (x *StartWorkspaceRequest) GetId() string { if x != nil { return x.Id } return "" } func (x *StartWorkspaceRequest) GetServicePrefix() string { if x != nil { return x.ServicePrefix } return "" } func (x *StartWorkspaceRequest) GetMetadata() *WorkspaceMetadata { if x != nil { return x.Metadata } return nil } func (x *StartWorkspaceRequest) GetSpec() *StartWorkspaceSpec { if x != nil { return x.Spec } return nil } func (x *StartWorkspaceRequest) GetType() WorkspaceType { if x != nil { return x.Type } return WorkspaceType_REGULAR } type StartWorkspaceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // URL is the external URL of the workspace Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` // OwnerToken is the token of the workspace owner used for authentication OwnerToken string `protobuf:"bytes,2,opt,name=owner_token,json=ownerToken,proto3" json:"owner_token,omitempty"` } func (x *StartWorkspaceResponse) Reset() { *x = StartWorkspaceResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StartWorkspaceResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*StartWorkspaceResponse) ProtoMessage() {} func (x *StartWorkspaceResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 StartWorkspaceResponse.ProtoReflect.Descriptor instead. func (*StartWorkspaceResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{4} } func (x *StartWorkspaceResponse) GetUrl() string { if x != nil { return x.Url } return "" } func (x *StartWorkspaceResponse) GetOwnerToken() string { if x != nil { return x.OwnerToken } return "" } // StopWorkspaceRequest requests that the workspace manager stops a workspace type StopWorkspaceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is the unique identifier of the workspace to stop Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // Policy determines how quickly a workspace will be stopped Policy StopWorkspacePolicy `protobuf:"varint,2,opt,name=policy,proto3,enum=wsman.StopWorkspacePolicy" json:"policy,omitempty"` } func (x *StopWorkspaceRequest) Reset() { *x = StopWorkspaceRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StopWorkspaceRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*StopWorkspaceRequest) ProtoMessage() {} func (x *StopWorkspaceRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 StopWorkspaceRequest.ProtoReflect.Descriptor instead. func (*StopWorkspaceRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{5} } func (x *StopWorkspaceRequest) GetId() string { if x != nil { return x.Id } return "" } func (x *StopWorkspaceRequest) GetPolicy() StopWorkspacePolicy { if x != nil { return x.Policy } return StopWorkspacePolicy_NORMALLY } // StopWorkspaceResponse is the answer to a stop workspace request type StopWorkspaceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *StopWorkspaceResponse) Reset() { *x = StopWorkspaceResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StopWorkspaceResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*StopWorkspaceResponse) ProtoMessage() {} func (x *StopWorkspaceResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 StopWorkspaceResponse.ProtoReflect.Descriptor instead. func (*StopWorkspaceResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{6} } // DescribeWorkspaceRequest requests the status of a workspace type DescribeWorkspaceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is the unique identifier of the workspace to describe Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } func (x *DescribeWorkspaceRequest) Reset() { *x = DescribeWorkspaceRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DescribeWorkspaceRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*DescribeWorkspaceRequest) ProtoMessage() {} func (x *DescribeWorkspaceRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 DescribeWorkspaceRequest.ProtoReflect.Descriptor instead. func (*DescribeWorkspaceRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{7} } func (x *DescribeWorkspaceRequest) GetId() string { if x != nil { return x.Id } return "" } // DescribeWorkspaceResponse is the answer to a workspace description request type DescribeWorkspaceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Status *WorkspaceStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` // LastActivity is the time when the workspace was last marked active - ISO8601 formated LastActivity string `protobuf:"bytes,2,opt,name=lastActivity,proto3" json:"lastActivity,omitempty"` } func (x *DescribeWorkspaceResponse) Reset() { *x = DescribeWorkspaceResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DescribeWorkspaceResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*DescribeWorkspaceResponse) ProtoMessage() {} func (x *DescribeWorkspaceResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 DescribeWorkspaceResponse.ProtoReflect.Descriptor instead. func (*DescribeWorkspaceResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{8} } func (x *DescribeWorkspaceResponse) GetStatus() *WorkspaceStatus { if x != nil { return x.Status } return nil } func (x *DescribeWorkspaceResponse) GetLastActivity() string { if x != nil { return x.LastActivity } return "" } // SubscribeRequest requests to be notified whenever the workspace status changes type SubscribeRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // MustMatch can specify an exactly matching filter for listening to workspaces. // If not set, or all fields are empty, all workspace status updates or log output are returned. MustMatch *MetadataFilter `protobuf:"bytes,1,opt,name=must_match,json=mustMatch,proto3" json:"must_match,omitempty"` } func (x *SubscribeRequest) Reset() { *x = SubscribeRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SubscribeRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SubscribeRequest) ProtoMessage() {} func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 SubscribeRequest.ProtoReflect.Descriptor instead. func (*SubscribeRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{9} } func (x *SubscribeRequest) GetMustMatch() *MetadataFilter { if x != nil { return x.MustMatch } return nil } // SubscribeResponse notifies a client when a workspace's status changes type SubscribeResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Status *WorkspaceStatus `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` Header map[string]string `protobuf:"bytes,3,rep,name=header,proto3" json:"header,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (x *SubscribeResponse) Reset() { *x = SubscribeResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SubscribeResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*SubscribeResponse) ProtoMessage() {} func (x *SubscribeResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 SubscribeResponse.ProtoReflect.Descriptor instead. func (*SubscribeResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{10} } func (x *SubscribeResponse) GetStatus() *WorkspaceStatus { if x != nil { return x.Status } return nil } func (x *SubscribeResponse) GetHeader() map[string]string { if x != nil { return x.Header } return nil } // MarkActiveRequest marks a workspace as still in use type MarkActiveRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // id is the ID of the workspace Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // closed marks a workspace as closed which will shorten its timeout Closed bool `protobuf:"varint,2,opt,name=closed,proto3" json:"closed,omitempty"` } func (x *MarkActiveRequest) Reset() { *x = MarkActiveRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MarkActiveRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*MarkActiveRequest) ProtoMessage() {} func (x *MarkActiveRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 MarkActiveRequest.ProtoReflect.Descriptor instead. func (*MarkActiveRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{11} } func (x *MarkActiveRequest) GetId() string { if x != nil { return x.Id } return "" } func (x *MarkActiveRequest) GetClosed() bool { if x != nil { return x.Closed } return false } // MarkActiveResponse is the answer to a mark workspace active request type MarkActiveResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *MarkActiveResponse) Reset() { *x = MarkActiveResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MarkActiveResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*MarkActiveResponse) ProtoMessage() {} func (x *MarkActiveResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 MarkActiveResponse.ProtoReflect.Descriptor instead. func (*MarkActiveResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{12} } // SetTimeoutRequest configures the timeout of a workspace type SetTimeoutRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // id is the ID of the workspace Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // duration is the new timeout duration. Must be a valid Go duration (see https://golang.org/pkg/time/#ParseDuration) Duration string `protobuf:"bytes,2,opt,name=duration,proto3" json:"duration,omitempty"` } func (x *SetTimeoutRequest) Reset() { *x = SetTimeoutRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SetTimeoutRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SetTimeoutRequest) ProtoMessage() {} func (x *SetTimeoutRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 SetTimeoutRequest.ProtoReflect.Descriptor instead. func (*SetTimeoutRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{13} } func (x *SetTimeoutRequest) GetId() string { if x != nil { return x.Id } return "" } func (x *SetTimeoutRequest) GetDuration() string { if x != nil { return x.Duration } return "" } // SetTimeoutResponse is the answer to a set timeout request type SetTimeoutResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *SetTimeoutResponse) Reset() { *x = SetTimeoutResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SetTimeoutResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*SetTimeoutResponse) ProtoMessage() {} func (x *SetTimeoutResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 SetTimeoutResponse.ProtoReflect.Descriptor instead. func (*SetTimeoutResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{14} } // ControlPortRequest exposes or un-exposes networking ports of a workspace type ControlPortRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is the unique identifier of the workspace whose port to control Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // expose controls whether to make the port publicly available or bar if from being accessible outside of the worksapce. // If true, the port will become publicly available, if false it will become inaccessible from outside the workspace. Expose bool `protobuf:"varint,2,opt,name=expose,proto3" json:"expose,omitempty"` // spec defines the port under control Spec *PortSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` } func (x *ControlPortRequest) Reset() { *x = ControlPortRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ControlPortRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*ControlPortRequest) ProtoMessage() {} func (x *ControlPortRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 ControlPortRequest.ProtoReflect.Descriptor instead. func (*ControlPortRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{15} } func (x *ControlPortRequest) GetId() string { if x != nil { return x.Id } return "" } func (x *ControlPortRequest) GetExpose() bool { if x != nil { return x.Expose } return false } func (x *ControlPortRequest) GetSpec() *PortSpec { if x != nil { return x.Spec } return nil } // ControlPortResponse is the answer to a workspace port control request type ControlPortResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ControlPortResponse) Reset() { *x = ControlPortResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ControlPortResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*ControlPortResponse) ProtoMessage() {} func (x *ControlPortResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 ControlPortResponse.ProtoReflect.Descriptor instead. func (*ControlPortResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{16} } // TakeSnapshotRequest creates a copy of the workspace content. This copy can be used to initialize a new workspace. type TakeSnapshotRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is the unique identifier of the workspace of which to take a snapshot Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // return_immediately means we're not waiting until the snapshot is done but return immediately after starting it ReturnImmediately bool `protobuf:"varint,2,opt,name=return_immediately,json=returnImmediately,proto3" json:"return_immediately,omitempty"` } func (x *TakeSnapshotRequest) Reset() { *x = TakeSnapshotRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *TakeSnapshotRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*TakeSnapshotRequest) ProtoMessage() {} func (x *TakeSnapshotRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 TakeSnapshotRequest.ProtoReflect.Descriptor instead. func (*TakeSnapshotRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{17} } func (x *TakeSnapshotRequest) GetId() string { if x != nil { return x.Id } return "" } func (x *TakeSnapshotRequest) GetReturnImmediately() bool { if x != nil { return x.ReturnImmediately } return false } // TakeSnapshotResponse is the answer to a take snapshot request type TakeSnapshotResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // URL is the location of the snapshot encoded such that it can be passed back to a snapshot initializer. Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` } func (x *TakeSnapshotResponse) Reset() { *x = TakeSnapshotResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *TakeSnapshotResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*TakeSnapshotResponse) ProtoMessage() {} func (x *TakeSnapshotResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 TakeSnapshotResponse.ProtoReflect.Descriptor instead. func (*TakeSnapshotResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{18} } func (x *TakeSnapshotResponse) GetUrl() string { if x != nil { return x.Url } return "" } // ControlAdmissionRequest controls the admission of users to a workspace type ControlAdmissionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is the unique identifier of the workspace whoose admission to control Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // level is the new workspace admission level Level AdmissionLevel `protobuf:"varint,2,opt,name=level,proto3,enum=wsman.AdmissionLevel" json:"level,omitempty"` } func (x *ControlAdmissionRequest) Reset() { *x = ControlAdmissionRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ControlAdmissionRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*ControlAdmissionRequest) ProtoMessage() {} func (x *ControlAdmissionRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 ControlAdmissionRequest.ProtoReflect.Descriptor instead. func (*ControlAdmissionRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{19} } func (x *ControlAdmissionRequest) GetId() string { if x != nil { return x.Id } return "" } func (x *ControlAdmissionRequest) GetLevel() AdmissionLevel { if x != nil { return x.Level } return AdmissionLevel_ADMIT_OWNER_ONLY } type ControlAdmissionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *ControlAdmissionResponse) Reset() { *x = ControlAdmissionResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ControlAdmissionResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*ControlAdmissionResponse) ProtoMessage() {} func (x *ControlAdmissionResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 ControlAdmissionResponse.ProtoReflect.Descriptor instead. func (*ControlAdmissionResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{20} } // DeleteVolumeSnapshotRequest deletes volume snapshot from the cluster and cloud provider type DeleteVolumeSnapshotRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is the name of volume snapshot, which is equal to instance id of workspace it was taken from Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // volume_handle is a unique string that is used to restore volume handle in k8s from cloud provider backend VolumeHandle string `protobuf:"bytes,2,opt,name=volume_handle,json=volumeHandle,proto3" json:"volume_handle,omitempty"` // soft_delete controls whether manager should attempt to restore volume snapshot from handle if it doesn't exist in the cluster yet SoftDelete bool `protobuf:"varint,3,opt,name=soft_delete,json=softDelete,proto3" json:"soft_delete,omitempty"` } func (x *DeleteVolumeSnapshotRequest) Reset() { *x = DeleteVolumeSnapshotRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DeleteVolumeSnapshotRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*DeleteVolumeSnapshotRequest) ProtoMessage() {} func (x *DeleteVolumeSnapshotRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 DeleteVolumeSnapshotRequest.ProtoReflect.Descriptor instead. func (*DeleteVolumeSnapshotRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{21} } func (x *DeleteVolumeSnapshotRequest) GetId() string { if x != nil { return x.Id } return "" } func (x *DeleteVolumeSnapshotRequest) GetVolumeHandle() string { if x != nil { return x.VolumeHandle } return "" } func (x *DeleteVolumeSnapshotRequest) GetSoftDelete() bool { if x != nil { return x.SoftDelete } return false } type DeleteVolumeSnapshotResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // was_deleted will be true if we were able to delete volume snapshot from the cluster WasDeleted bool `protobuf:"varint,1,opt,name=was_deleted,json=wasDeleted,proto3" json:"was_deleted,omitempty"` } func (x *DeleteVolumeSnapshotResponse) Reset() { *x = DeleteVolumeSnapshotResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DeleteVolumeSnapshotResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*DeleteVolumeSnapshotResponse) ProtoMessage() {} func (x *DeleteVolumeSnapshotResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 DeleteVolumeSnapshotResponse.ProtoReflect.Descriptor instead. func (*DeleteVolumeSnapshotResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{22} } func (x *DeleteVolumeSnapshotResponse) GetWasDeleted() bool { if x != nil { return x.WasDeleted } return false } // BackupWorkspaceRequest backs up a running workspace type BackupWorkspaceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is the unique identifier of the workspace of which to take a backup Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` } func (x *BackupWorkspaceRequest) Reset() { *x = BackupWorkspaceRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BackupWorkspaceRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*BackupWorkspaceRequest) ProtoMessage() {} func (x *BackupWorkspaceRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 BackupWorkspaceRequest.ProtoReflect.Descriptor instead. func (*BackupWorkspaceRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{23} } func (x *BackupWorkspaceRequest) GetId() string { if x != nil { return x.Id } return "" } // BackupWorkspaceResponse is the answer to a backup workspace request type BackupWorkspaceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // URL is the location of the backup Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` } func (x *BackupWorkspaceResponse) Reset() { *x = BackupWorkspaceResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *BackupWorkspaceResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*BackupWorkspaceResponse) ProtoMessage() {} func (x *BackupWorkspaceResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 BackupWorkspaceResponse.ProtoReflect.Descriptor instead. func (*BackupWorkspaceResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{24} } func (x *BackupWorkspaceResponse) GetUrl() string { if x != nil { return x.Url } return "" } // UpdateSSHKeyRequest update ssh public key type UpdateSSHKeyRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is the unique identifier of the workspace Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // keys is a set of authorized_keys Keys []string `protobuf:"bytes,2,rep,name=keys,proto3" json:"keys,omitempty"` } func (x *UpdateSSHKeyRequest) Reset() { *x = UpdateSSHKeyRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UpdateSSHKeyRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateSSHKeyRequest) ProtoMessage() {} func (x *UpdateSSHKeyRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 UpdateSSHKeyRequest.ProtoReflect.Descriptor instead. func (*UpdateSSHKeyRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{25} } func (x *UpdateSSHKeyRequest) GetId() string { if x != nil { return x.Id } return "" } func (x *UpdateSSHKeyRequest) GetKeys() []string { if x != nil { return x.Keys } return nil } // UpdateSSHKeyResponse is the answer to a upload ssh key request type UpdateSSHKeyResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *UpdateSSHKeyResponse) Reset() { *x = UpdateSSHKeyResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *UpdateSSHKeyResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*UpdateSSHKeyResponse) ProtoMessage() {} func (x *UpdateSSHKeyResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 UpdateSSHKeyResponse.ProtoReflect.Descriptor instead. func (*UpdateSSHKeyResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{26} } // WorkspaceStatus describes a workspace status type WorkspaceStatus struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ID is the unique identifier of the workspace Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // version of the status update. Workspace instances themselves are unversioned, // but their statuus has different versions. // The value of this field has no semantic meaning (e.g. don't interpret it as // as a timestemp), but it can be used to impose a partial order. // If a.status_version < b.status_version then a was the status before b. StatusVersion uint64 `protobuf:"varint,10,opt,name=status_version,json=statusVersion,proto3" json:"status_version,omitempty"` // Metadata is data associated with this workspace that's required for other parts of Gitpod to function Metadata *WorkspaceMetadata `protobuf:"bytes,2,opt,name=metadata,proto3" json:"metadata,omitempty"` // Spec is the workspace spec during runtime Spec *WorkspaceSpec `protobuf:"bytes,3,opt,name=spec,proto3" json:"spec,omitempty"` // the phase of a workspace is a simple, high-level summary of where the workspace is in its lifecycle Phase WorkspacePhase `protobuf:"varint,4,opt,name=phase,proto3,enum=wsman.WorkspacePhase" json:"phase,omitempty"` // conditions detail the current state of the workspace Conditions *WorkspaceConditions `protobuf:"bytes,5,opt,name=conditions,proto3" json:"conditions,omitempty"` // message is an optional human-readable message detailing the current phase Message string `protobuf:"bytes,6,opt,name=message,proto3" json:"message,omitempty"` // repo details the Git working copy status of the workspace. // Note: this is a best-effort field and more often than not will not be present. Its absence does not // indicate the absence of a working copy. Repo *api.GitStatus `protobuf:"bytes,7,opt,name=repo,proto3" json:"repo,omitempty"` // runtime contains information about the workspace's runtime environment Runtime *WorkspaceRuntimeInfo `protobuf:"bytes,8,opt,name=runtime,proto3" json:"runtime,omitempty"` // auth provides authentication information about the workspace. This info is primarily used by ws-proxy. Auth *WorkspaceAuthentication `protobuf:"bytes,9,opt,name=auth,proto3" json:"auth,omitempty"` } func (x *WorkspaceStatus) Reset() { *x = WorkspaceStatus{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *WorkspaceStatus) String() string { return protoimpl.X.MessageStringOf(x) } func (*WorkspaceStatus) ProtoMessage() {} func (x *WorkspaceStatus) ProtoReflect() protoreflect.Message { mi := &file_core_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 WorkspaceStatus.ProtoReflect.Descriptor instead. func (*WorkspaceStatus) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{27} } func (x *WorkspaceStatus) GetId() string { if x != nil { return x.Id } return "" } func (x *WorkspaceStatus) GetStatusVersion() uint64 { if x != nil { return x.StatusVersion } return 0 } func (x *WorkspaceStatus) GetMetadata() *WorkspaceMetadata { if x != nil { return x.Metadata } return nil } func (x *WorkspaceStatus) GetSpec() *WorkspaceSpec { if x != nil { return x.Spec } return nil } func (x *WorkspaceStatus) GetPhase() WorkspacePhase { if x != nil { return x.Phase } return WorkspacePhase_UNKNOWN } func (x *WorkspaceStatus) GetConditions() *WorkspaceConditions { if x != nil { return x.Conditions } return nil } func (x *WorkspaceStatus) GetMessage() string { if x != nil { return x.Message } return "" } func (x *WorkspaceStatus) GetRepo() *api.GitStatus { if x != nil { return x.Repo } return nil } func (x *WorkspaceStatus) GetRuntime() *WorkspaceRuntimeInfo { if x != nil { return x.Runtime } return nil } func (x *WorkspaceStatus) GetAuth() *WorkspaceAuthentication { if x != nil { return x.Auth } return nil } // IDEImage configures the IDE images a workspace will use type IDEImage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // web_ref is a reference to an OCI image used for serving the web-based IDE WebRef string `protobuf:"bytes,1,opt,name=web_ref,json=webRef,proto3" json:"web_ref,omitempty"` // desktop_ref is an optional reference to an OCI image used for serving desktop IDEs DesktopRef string `protobuf:"bytes,2,opt,name=desktop_ref,json=desktopRef,proto3" json:"desktop_ref,omitempty"` // supervisor_ref is a reference to an OCI image used as supervisor SupervisorRef string `protobuf:"bytes,3,opt,name=supervisor_ref,json=supervisorRef,proto3" json:"supervisor_ref,omitempty"` } func (x *IDEImage) Reset() { *x = IDEImage{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *IDEImage) String() string { return protoimpl.X.MessageStringOf(x) } func (*IDEImage) ProtoMessage() {} func (x *IDEImage) ProtoReflect() protoreflect.Message { mi := &file_core_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 IDEImage.ProtoReflect.Descriptor instead. func (*IDEImage) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{28} } func (x *IDEImage) GetWebRef() string { if x != nil { return x.WebRef } return "" } func (x *IDEImage) GetDesktopRef() string { if x != nil { return x.DesktopRef } return "" } func (x *IDEImage) GetSupervisorRef() string { if x != nil { return x.SupervisorRef } return "" } // WorkspaceSpec is the specification of a workspace at runtime type WorkspaceSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // workspace_image is the name of the Docker image this workspace runs WorkspaceImage string `protobuf:"bytes,1,opt,name=workspace_image,json=workspaceImage,proto3" json:"workspace_image,omitempty"` // deprecated_ide_image is a field present for backwards compatibility and the same // as IDEImage.web_ref. If both fields are present, IDEImage.web_ref takes precedence. DeprecatedIdeImage string `protobuf:"bytes,2,opt,name=deprecated_ide_image,json=deprecatedIdeImage,proto3" json:"deprecated_ide_image,omitempty"` // headless marks this workspace a headless one - headless workspaces are not intended for users but for automation Headless bool `protobuf:"varint,3,opt,name=headless,proto3" json:"headless,omitempty"` // URL is the external URL of the workspace Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"` // exposed_ports lists all ports which this workspace has exposed to the outside world ExposedPorts []*PortSpec `protobuf:"bytes,5,rep,name=exposed_ports,json=exposedPorts,proto3" json:"exposed_ports,omitempty"` // workspace type denotes what kind of workspace this is, e.g. if it's user-facing, prebuilding content or probing the service Type WorkspaceType `protobuf:"varint,6,opt,name=type,proto3,enum=wsman.WorkspaceType" json:"type,omitempty"` // The intervals in which a heartbeat must be received for the workspace not to time out Timeout string `protobuf:"bytes,7,opt,name=timeout,proto3" json:"timeout,omitempty"` // ide_image is the name of the Docker image used as IDE IdeImage *IDEImage `protobuf:"bytes,8,opt,name=ide_image,json=ideImage,proto3" json:"ide_image,omitempty"` // class names the class of this workspace Class string `protobuf:"bytes,9,opt,name=class,proto3" json:"class,omitempty"` } func (x *WorkspaceSpec) Reset() { *x = WorkspaceSpec{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *WorkspaceSpec) String() string { return protoimpl.X.MessageStringOf(x) } func (*WorkspaceSpec) ProtoMessage() {} func (x *WorkspaceSpec) ProtoReflect() protoreflect.Message { mi := &file_core_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 WorkspaceSpec.ProtoReflect.Descriptor instead. func (*WorkspaceSpec) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{29} } func (x *WorkspaceSpec) GetWorkspaceImage() string { if x != nil { return x.WorkspaceImage } return "" } func (x *WorkspaceSpec) GetDeprecatedIdeImage() string { if x != nil { return x.DeprecatedIdeImage } return "" } func (x *WorkspaceSpec) GetHeadless() bool { if x != nil { return x.Headless } return false } func (x *WorkspaceSpec) GetUrl() string { if x != nil { return x.Url } return "" } func (x *WorkspaceSpec) GetExposedPorts() []*PortSpec { if x != nil { return x.ExposedPorts } return nil } func (x *WorkspaceSpec) GetType() WorkspaceType { if x != nil { return x.Type } return WorkspaceType_REGULAR } func (x *WorkspaceSpec) GetTimeout() string { if x != nil { return x.Timeout } return "" } func (x *WorkspaceSpec) GetIdeImage() *IDEImage { if x != nil { return x.IdeImage } return nil } func (x *WorkspaceSpec) GetClass() string { if x != nil { return x.Class } return "" } // PortSpec describes a networking port exposed on a workspace type PortSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // port is the outward-facing port Port uint32 `protobuf:"varint,1,opt,name=port,proto3" json:"port,omitempty"` // visibility defines the visibility of the port Visibility PortVisibility `protobuf:"varint,3,opt,name=visibility,proto3,enum=wsman.PortVisibility" json:"visibility,omitempty"` // url is the public-facing URL this port is available at Url string `protobuf:"bytes,4,opt,name=url,proto3" json:"url,omitempty"` } func (x *PortSpec) Reset() { *x = PortSpec{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *PortSpec) String() string { return protoimpl.X.MessageStringOf(x) } func (*PortSpec) ProtoMessage() {} func (x *PortSpec) ProtoReflect() protoreflect.Message { mi := &file_core_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 PortSpec.ProtoReflect.Descriptor instead. func (*PortSpec) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{30} } func (x *PortSpec) GetPort() uint32 { if x != nil { return x.Port } return 0 } func (x *PortSpec) GetVisibility() PortVisibility { if x != nil { return x.Visibility } return PortVisibility_PORT_VISIBILITY_PRIVATE } func (x *PortSpec) GetUrl() string { if x != nil { return x.Url } return "" } // VolumeSnapshotInfo defines volume snapshot information type VolumeSnapshotInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // volume_snapshot_name is the name of volume snapshot VolumeSnapshotName string `protobuf:"bytes,1,opt,name=volume_snapshot_name,json=volumeSnapshotName,proto3" json:"volume_snapshot_name,omitempty"` // volume_snapshot_handle is a handle that is used to restore volume snapshot VolumeSnapshotHandle string `protobuf:"bytes,2,opt,name=volume_snapshot_handle,json=volumeSnapshotHandle,proto3" json:"volume_snapshot_handle,omitempty"` } func (x *VolumeSnapshotInfo) Reset() { *x = VolumeSnapshotInfo{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *VolumeSnapshotInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*VolumeSnapshotInfo) ProtoMessage() {} func (x *VolumeSnapshotInfo) ProtoReflect() protoreflect.Message { mi := &file_core_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 VolumeSnapshotInfo.ProtoReflect.Descriptor instead. func (*VolumeSnapshotInfo) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{31} } func (x *VolumeSnapshotInfo) GetVolumeSnapshotName() string { if x != nil { return x.VolumeSnapshotName } return "" } func (x *VolumeSnapshotInfo) GetVolumeSnapshotHandle() string { if x != nil { return x.VolumeSnapshotHandle } return "" } // WorkspaceCondition gives more detailed information as to the state of the workspace. Which condition actually // has a value depends on the phase the workspace is in. type WorkspaceConditions struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // failed contains the reason the workspace failed to operate. If this field is empty, the workspace has not failed. Failed string `protobuf:"bytes,1,opt,name=failed,proto3" json:"failed,omitempty"` // timeout contains the reason the workspace has timed out. If this field is empty, the workspace has not timed out. Timeout string `protobuf:"bytes,2,opt,name=timeout,proto3" json:"timeout,omitempty"` // pulling_images marks if the workspace is currently pulling its images. This condition can only be set during PhaseCreating PullingImages WorkspaceConditionBool `protobuf:"varint,3,opt,name=pulling_images,json=pullingImages,proto3,enum=wsman.WorkspaceConditionBool" json:"pulling_images,omitempty"` // snapshot contains a snapshot URL if a snapshot was produced prior to shutting the workspace down. This condition is only used for headless workspaces. Snapshot string `protobuf:"bytes,5,opt,name=snapshot,proto3" json:"snapshot,omitempty"` // final_backup_complete determines if the last state of the workspace has been backed up to remote storage. // Once this is true, a new workspace with the same ID will be able to use this backup. FinalBackupComplete WorkspaceConditionBool `protobuf:"varint,6,opt,name=final_backup_complete,json=finalBackupComplete,proto3,enum=wsman.WorkspaceConditionBool" json:"final_backup_complete,omitempty"` // deployed indicates if a workspace container is currently deployed. If this condition is false, there is no means for the user to alter the workspace content. Deployed WorkspaceConditionBool `protobuf:"varint,7,opt,name=deployed,proto3,enum=wsman.WorkspaceConditionBool" json:"deployed,omitempty"` // network_not_ready indicates if a workspace container is currently experiencing a network problem. NetworkNotReady WorkspaceConditionBool `protobuf:"varint,8,opt,name=network_not_ready,json=networkNotReady,proto3,enum=wsman.WorkspaceConditionBool" json:"network_not_ready,omitempty"` // first_user_activity is the time when MarkActive was first called on the workspace FirstUserActivity *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=first_user_activity,json=firstUserActivity,proto3" json:"first_user_activity,omitempty"` // headless_task_failed indicates that a headless workspace task failed HeadlessTaskFailed string `protobuf:"bytes,10,opt,name=headless_task_failed,json=headlessTaskFailed,proto3" json:"headless_task_failed,omitempty"` // stopped_by_request is true if the workspace was stopped using a StopWorkspace call StoppedByRequest WorkspaceConditionBool `protobuf:"varint,11,opt,name=stopped_by_request,json=stoppedByRequest,proto3,enum=wsman.WorkspaceConditionBool" json:"stopped_by_request,omitempty"` // volume_snapshot contains info about volume snapshot that was used to save persistent volume VolumeSnapshot *VolumeSnapshotInfo `protobuf:"bytes,12,opt,name=volume_snapshot,json=volumeSnapshot,proto3" json:"volume_snapshot,omitempty"` } func (x *WorkspaceConditions) Reset() { *x = WorkspaceConditions{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *WorkspaceConditions) String() string { return protoimpl.X.MessageStringOf(x) } func (*WorkspaceConditions) ProtoMessage() {} func (x *WorkspaceConditions) ProtoReflect() protoreflect.Message { mi := &file_core_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 WorkspaceConditions.ProtoReflect.Descriptor instead. func (*WorkspaceConditions) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{32} } func (x *WorkspaceConditions) GetFailed() string { if x != nil { return x.Failed } return "" } func (x *WorkspaceConditions) GetTimeout() string { if x != nil { return x.Timeout } return "" } func (x *WorkspaceConditions) GetPullingImages() WorkspaceConditionBool { if x != nil { return x.PullingImages } return WorkspaceConditionBool_FALSE } func (x *WorkspaceConditions) GetSnapshot() string { if x != nil { return x.Snapshot } return "" } func (x *WorkspaceConditions) GetFinalBackupComplete() WorkspaceConditionBool { if x != nil { return x.FinalBackupComplete } return WorkspaceConditionBool_FALSE } func (x *WorkspaceConditions) GetDeployed() WorkspaceConditionBool { if x != nil { return x.Deployed } return WorkspaceConditionBool_FALSE } func (x *WorkspaceConditions) GetNetworkNotReady() WorkspaceConditionBool { if x != nil { return x.NetworkNotReady } return WorkspaceConditionBool_FALSE } func (x *WorkspaceConditions) GetFirstUserActivity() *timestamppb.Timestamp { if x != nil { return x.FirstUserActivity } return nil } func (x *WorkspaceConditions) GetHeadlessTaskFailed() string { if x != nil { return x.HeadlessTaskFailed } return "" } func (x *WorkspaceConditions) GetStoppedByRequest() WorkspaceConditionBool { if x != nil { return x.StoppedByRequest } return WorkspaceConditionBool_FALSE } func (x *WorkspaceConditions) GetVolumeSnapshot() *VolumeSnapshotInfo { if x != nil { return x.VolumeSnapshot } return nil } // WorkspaceMetadata is data associated with a workspace that's required for other parts of the system to function type WorkspaceMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // owner is the ID of the Gitpod user to whom we'll bill this workspace and who we consider responsible for its content Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` // meta_id is the workspace ID of this currently running workspace instance on the "meta pool" side MetaId string `protobuf:"bytes,2,opt,name=meta_id,json=metaId,proto3" json:"meta_id,omitempty"` // started_at is the time when this workspace was started. Consider this field read-only, i.e. setting in a request will have no effect. StartedAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=started_at,json=startedAt,proto3" json:"started_at,omitempty"` // Annotations are key/value pairs that gets attached to the workspace. // This is primarily intended for annotating headless workspace loads. Annotations map[string]string `protobuf:"bytes,4,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // team the workspace belongs to, if the workspace is not associated with a team, this property will be empty Team *string `protobuf:"bytes,5,opt,name=team,proto3,oneof" json:"team,omitempty"` // project the workspace belongs to, if the workspace is not associated with a project, this property will be empty Project *string `protobuf:"bytes,6,opt,name=project,proto3,oneof" json:"project,omitempty"` } func (x *WorkspaceMetadata) Reset() { *x = WorkspaceMetadata{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *WorkspaceMetadata) String() string { return protoimpl.X.MessageStringOf(x) } func (*WorkspaceMetadata) ProtoMessage() {} func (x *WorkspaceMetadata) ProtoReflect() protoreflect.Message { mi := &file_core_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 WorkspaceMetadata.ProtoReflect.Descriptor instead. func (*WorkspaceMetadata) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{33} } func (x *WorkspaceMetadata) GetOwner() string { if x != nil { return x.Owner } return "" } func (x *WorkspaceMetadata) GetMetaId() string { if x != nil { return x.MetaId } return "" } func (x *WorkspaceMetadata) GetStartedAt() *timestamppb.Timestamp { if x != nil { return x.StartedAt } return nil } func (x *WorkspaceMetadata) GetAnnotations() map[string]string { if x != nil { return x.Annotations } return nil } func (x *WorkspaceMetadata) GetTeam() string { if x != nil && x.Team != nil { return *x.Team } return "" } func (x *WorkspaceMetadata) GetProject() string { if x != nil && x.Project != nil { return *x.Project } return "" } // WorkspaceRuntimeInfo details the workspace's runtime, e.g. executing system, node other information // about the environment the workspace runs in. This information serves a diangostic purpose only and // should not be directly acted upon. type WorkspaceRuntimeInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // node_name is the name of the node the workspace runs on NodeName string `protobuf:"bytes,1,opt,name=node_name,json=nodeName,proto3" json:"node_name,omitempty"` // pod_name is the name of the pod the workspace runs in PodName string `protobuf:"bytes,2,opt,name=pod_name,json=podName,proto3" json:"pod_name,omitempty"` // node_ip is the IP of the node the workspace runs on NodeIp string `protobuf:"bytes,3,opt,name=node_ip,json=nodeIp,proto3" json:"node_ip,omitempty"` } func (x *WorkspaceRuntimeInfo) Reset() { *x = WorkspaceRuntimeInfo{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *WorkspaceRuntimeInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*WorkspaceRuntimeInfo) ProtoMessage() {} func (x *WorkspaceRuntimeInfo) ProtoReflect() protoreflect.Message { mi := &file_core_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 WorkspaceRuntimeInfo.ProtoReflect.Descriptor instead. func (*WorkspaceRuntimeInfo) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{34} } func (x *WorkspaceRuntimeInfo) GetNodeName() string { if x != nil { return x.NodeName } return "" } func (x *WorkspaceRuntimeInfo) GetPodName() string { if x != nil { return x.PodName } return "" } func (x *WorkspaceRuntimeInfo) GetNodeIp() string { if x != nil { return x.NodeIp } return "" } // WorkspaceAuthentication contains authentication information used by ws-proxy to allow/deny access to // workspaces and their ports. type WorkspaceAuthentication struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Admission describes who can access the workspace and its ports. Admission AdmissionLevel `protobuf:"varint,1,opt,name=admission,proto3,enum=wsman.AdmissionLevel" json:"admission,omitempty"` // Owner token is the token one needs to access the workspace. Its presence is checked by ws-proxy. OwnerToken string `protobuf:"bytes,2,opt,name=owner_token,json=ownerToken,proto3" json:"owner_token,omitempty"` } func (x *WorkspaceAuthentication) Reset() { *x = WorkspaceAuthentication{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *WorkspaceAuthentication) String() string { return protoimpl.X.MessageStringOf(x) } func (*WorkspaceAuthentication) ProtoMessage() {} func (x *WorkspaceAuthentication) ProtoReflect() protoreflect.Message { mi := &file_core_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 WorkspaceAuthentication.ProtoReflect.Descriptor instead. func (*WorkspaceAuthentication) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{35} } func (x *WorkspaceAuthentication) GetAdmission() AdmissionLevel { if x != nil { return x.Admission } return AdmissionLevel_ADMIT_OWNER_ONLY } func (x *WorkspaceAuthentication) GetOwnerToken() string { if x != nil { return x.OwnerToken } return "" } // StartWorkspaceSpec specifies the configuration of a workspace for a workspace start type StartWorkspaceSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // workspace_image is the Docker image name of the workspace container WorkspaceImage string `protobuf:"bytes,1,opt,name=workspace_image,json=workspaceImage,proto3" json:"workspace_image,omitempty"` // deprecated_ide_image is a field present for backwards compatibility and the same // as IDEImage.web_ref. If both fields are present, IDEImage.web_ref takes precedence. DeprecatedIdeImage string `protobuf:"bytes,2,opt,name=deprecated_ide_image,json=deprecatedIdeImage,proto3" json:"deprecated_ide_image,omitempty"` // feature_flags provide a means for starting variants of workspaces (e.g. a privileged one) FeatureFlags []WorkspaceFeatureFlag `protobuf:"varint,3,rep,packed,name=feature_flags,json=featureFlags,proto3,enum=wsman.WorkspaceFeatureFlag" json:"feature_flags,omitempty"` // initializer configures how the workspace is to be initialized Initializer *api.WorkspaceInitializer `protobuf:"bytes,4,opt,name=initializer,proto3" json:"initializer,omitempty"` // ports is the set of ports which ought to be exposed to the internet Ports []*PortSpec `protobuf:"bytes,5,rep,name=ports,proto3" json:"ports,omitempty"` // envvars are user-defined environment variables which ought to be available in the workspace Envvars []*EnvironmentVariable `protobuf:"bytes,6,rep,name=envvars,proto3" json:"envvars,omitempty"` // workspace_location describes where the workspace root of Theia will be WorkspaceLocation string `protobuf:"bytes,8,opt,name=workspace_location,json=workspaceLocation,proto3" json:"workspace_location,omitempty"` // Git configures the Git user in the workspace Git *GitSpec `protobuf:"bytes,9,opt,name=git,proto3" json:"git,omitempty"` // timeout optionally sets a custom workspace timeout Timeout string `protobuf:"bytes,10,opt,name=timeout,proto3" json:"timeout,omitempty"` // admission controlls who can access the workspace and its ports. Admission AdmissionLevel `protobuf:"varint,11,opt,name=admission,proto3,enum=wsman.AdmissionLevel" json:"admission,omitempty"` // ide_image is the Docker image name of the IDE image IdeImage *IDEImage `protobuf:"bytes,12,opt,name=ide_image,json=ideImage,proto3" json:"ide_image,omitempty"` // Class denotes the class of the workspace we ought to start Class string `protobuf:"bytes,13,opt,name=class,proto3" json:"class,omitempty"` // volume_snapshot to use to restore PVC from, if set VolumeSnapshot *VolumeSnapshotInfo `protobuf:"bytes,14,opt,name=volume_snapshot,json=volumeSnapshot,proto3" json:"volume_snapshot,omitempty"` // ssh_public_keys is user's uploaded ssh public keys SshPublicKeys []string `protobuf:"bytes,15,rep,name=ssh_public_keys,json=sshPublicKeys,proto3" json:"ssh_public_keys,omitempty"` } func (x *StartWorkspaceSpec) Reset() { *x = StartWorkspaceSpec{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *StartWorkspaceSpec) String() string { return protoimpl.X.MessageStringOf(x) } func (*StartWorkspaceSpec) ProtoMessage() {} func (x *StartWorkspaceSpec) ProtoReflect() protoreflect.Message { mi := &file_core_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 StartWorkspaceSpec.ProtoReflect.Descriptor instead. func (*StartWorkspaceSpec) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{36} } func (x *StartWorkspaceSpec) GetWorkspaceImage() string { if x != nil { return x.WorkspaceImage } return "" } func (x *StartWorkspaceSpec) GetDeprecatedIdeImage() string { if x != nil { return x.DeprecatedIdeImage } return "" } func (x *StartWorkspaceSpec) GetFeatureFlags() []WorkspaceFeatureFlag { if x != nil { return x.FeatureFlags } return nil } func (x *StartWorkspaceSpec) GetInitializer() *api.WorkspaceInitializer { if x != nil { return x.Initializer } return nil } func (x *StartWorkspaceSpec) GetPorts() []*PortSpec { if x != nil { return x.Ports } return nil } func (x *StartWorkspaceSpec) GetEnvvars() []*EnvironmentVariable { if x != nil { return x.Envvars } return nil } func (x *StartWorkspaceSpec) GetWorkspaceLocation() string { if x != nil { return x.WorkspaceLocation } return "" } func (x *StartWorkspaceSpec) GetGit() *GitSpec { if x != nil { return x.Git } return nil } func (x *StartWorkspaceSpec) GetTimeout() string { if x != nil { return x.Timeout } return "" } func (x *StartWorkspaceSpec) GetAdmission() AdmissionLevel { if x != nil { return x.Admission } return AdmissionLevel_ADMIT_OWNER_ONLY } func (x *StartWorkspaceSpec) GetIdeImage() *IDEImage { if x != nil { return x.IdeImage } return nil } func (x *StartWorkspaceSpec) GetClass() string { if x != nil { return x.Class } return "" } func (x *StartWorkspaceSpec) GetVolumeSnapshot() *VolumeSnapshotInfo { if x != nil { return x.VolumeSnapshot } return nil } func (x *StartWorkspaceSpec) GetSshPublicKeys() []string { if x != nil { return x.SshPublicKeys } return nil } // GitSpec configures the Git available within the workspace type GitSpec struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // The Git username Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` // The Git email address Email string `protobuf:"bytes,2,opt,name=email,proto3" json:"email,omitempty"` } func (x *GitSpec) Reset() { *x = GitSpec{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *GitSpec) String() string { return protoimpl.X.MessageStringOf(x) } func (*GitSpec) ProtoMessage() {} func (x *GitSpec) ProtoReflect() protoreflect.Message { mi := &file_core_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 GitSpec.ProtoReflect.Descriptor instead. func (*GitSpec) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{37} } func (x *GitSpec) GetUsername() string { if x != nil { return x.Username } return "" } func (x *GitSpec) GetEmail() string { if x != nil { return x.Email } return "" } // EnvironmentVariable describes an env var as key/value pair type EnvironmentVariable struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` // Pulls the value from a secret in the cluster. // Use this field with great caution: if the name is wrong or Kubernetes cannot find the secret, // your workspace will not start. Value takes precedence over this field. Secret *EnvironmentVariable_SecretKeyRef `protobuf:"bytes,3,opt,name=secret,proto3" json:"secret,omitempty"` } func (x *EnvironmentVariable) Reset() { *x = EnvironmentVariable{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EnvironmentVariable) String() string { return protoimpl.X.MessageStringOf(x) } func (*EnvironmentVariable) ProtoMessage() {} func (x *EnvironmentVariable) ProtoReflect() protoreflect.Message { mi := &file_core_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 EnvironmentVariable.ProtoReflect.Descriptor instead. func (*EnvironmentVariable) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{38} } func (x *EnvironmentVariable) GetName() string { if x != nil { return x.Name } return "" } func (x *EnvironmentVariable) GetValue() string { if x != nil { return x.Value } return "" } func (x *EnvironmentVariable) GetSecret() *EnvironmentVariable_SecretKeyRef { if x != nil { return x.Secret } return nil } // ExposedPorts describes the exposed ports of a workspace type ExposedPorts struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // ports is the set of ports which ought to be exposed to the internet Ports []*PortSpec `protobuf:"bytes,1,rep,name=ports,proto3" json:"ports,omitempty"` } func (x *ExposedPorts) Reset() { *x = ExposedPorts{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ExposedPorts) String() string { return protoimpl.X.MessageStringOf(x) } func (*ExposedPorts) ProtoMessage() {} func (x *ExposedPorts) ProtoReflect() protoreflect.Message { mi := &file_core_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 ExposedPorts.ProtoReflect.Descriptor instead. func (*ExposedPorts) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{39} } func (x *ExposedPorts) GetPorts() []*PortSpec { if x != nil { return x.Ports } return nil } // SSHPublicKeys describes the user's uploaded ssh public keys, it will be used only in annotations. type SSHPublicKeys struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // keys is the set of ssh public key Keys []string `protobuf:"bytes,1,rep,name=keys,proto3" json:"keys,omitempty"` } func (x *SSHPublicKeys) Reset() { *x = SSHPublicKeys{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SSHPublicKeys) String() string { return protoimpl.X.MessageStringOf(x) } func (*SSHPublicKeys) ProtoMessage() {} func (x *SSHPublicKeys) ProtoReflect() protoreflect.Message { mi := &file_core_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 SSHPublicKeys.ProtoReflect.Descriptor instead. func (*SSHPublicKeys) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{40} } func (x *SSHPublicKeys) GetKeys() []string { if x != nil { return x.Keys } return nil } // DescribeClusterRequest requests information about the cluster type DescribeClusterRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields } func (x *DescribeClusterRequest) Reset() { *x = DescribeClusterRequest{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DescribeClusterRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*DescribeClusterRequest) ProtoMessage() {} func (x *DescribeClusterRequest) ProtoReflect() protoreflect.Message { mi := &file_core_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 DescribeClusterRequest.ProtoReflect.Descriptor instead. func (*DescribeClusterRequest) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{41} } // DescribeClusterResponse is the answer to a DescribeClusterRequest type DescribeClusterResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // workspace classes that are supported by the cluster WorkspaceClasses []*WorkspaceClass `protobuf:"bytes,1,rep,name=WorkspaceClasses,proto3" json:"WorkspaceClasses,omitempty"` } func (x *DescribeClusterResponse) Reset() { *x = DescribeClusterResponse{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *DescribeClusterResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*DescribeClusterResponse) ProtoMessage() {} func (x *DescribeClusterResponse) ProtoReflect() protoreflect.Message { mi := &file_core_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 DescribeClusterResponse.ProtoReflect.Descriptor instead. func (*DescribeClusterResponse) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{42} } func (x *DescribeClusterResponse) GetWorkspaceClasses() []*WorkspaceClass { if x != nil { return x.WorkspaceClasses } return nil } // WorkspaceClass describes a workspace class that is supported by the cluster type WorkspaceClass struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=Id,proto3" json:"Id,omitempty"` DisplayName string `protobuf:"bytes,2,opt,name=DisplayName,proto3" json:"DisplayName,omitempty"` } func (x *WorkspaceClass) Reset() { *x = WorkspaceClass{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *WorkspaceClass) String() string { return protoimpl.X.MessageStringOf(x) } func (*WorkspaceClass) ProtoMessage() {} func (x *WorkspaceClass) ProtoReflect() protoreflect.Message { mi := &file_core_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 WorkspaceClass.ProtoReflect.Descriptor instead. func (*WorkspaceClass) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{43} } func (x *WorkspaceClass) GetId() string { if x != nil { return x.Id } return "" } func (x *WorkspaceClass) GetDisplayName() string { if x != nil { return x.DisplayName } return "" } type EnvironmentVariable_SecretKeyRef struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields SecretName string `protobuf:"bytes,1,opt,name=secret_name,json=secretName,proto3" json:"secret_name,omitempty"` Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` } func (x *EnvironmentVariable_SecretKeyRef) Reset() { *x = EnvironmentVariable_SecretKeyRef{} if protoimpl.UnsafeEnabled { mi := &file_core_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EnvironmentVariable_SecretKeyRef) String() string { return protoimpl.X.MessageStringOf(x) } func (*EnvironmentVariable_SecretKeyRef) ProtoMessage() {} func (x *EnvironmentVariable_SecretKeyRef) ProtoReflect() protoreflect.Message { mi := &file_core_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 EnvironmentVariable_SecretKeyRef.ProtoReflect.Descriptor instead. func (*EnvironmentVariable_SecretKeyRef) Descriptor() ([]byte, []int) { return file_core_proto_rawDescGZIP(), []int{38, 0} } func (x *EnvironmentVariable_SecretKeyRef) GetSecretName() string { if x != nil { return x.SecretName } return "" } func (x *EnvironmentVariable_SecretKeyRef) GetKey() string { if x != nil { return x.Key } return "" } var File_core_proto protoreflect.FileDescriptor var file_core_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x1a, 0x25, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 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, 0x22, 0xc9, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x61, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 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, 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, 0x22, 0x4c, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x09, 0x6d, 0x75, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22, 0x47, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xe3, 0x01, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x34, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2d, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0x4b, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x5a, 0x0a, 0x14, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x32, 0x0a, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x17, 0x0a, 0x15, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x0a, 0x18, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x6f, 0x0a, 0x19, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x22, 0x48, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x0a, 0x6d, 0x75, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x52, 0x09, 0x6d, 0x75, 0x73, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x22, 0xc2, 0x01, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3c, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x1a, 0x39, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x64, 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, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x3b, 0x0a, 0x11, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x14, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x15, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x0a, 0x13, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x49, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x22, 0x28, 0x0a, 0x14, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x56, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x22, 0x1a, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x73, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 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, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x6f, 0x66, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x22, 0x3f, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x61, 0x73, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x77, 0x61, 0x73, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x22, 0x28, 0x0a, 0x16, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x17, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x39, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xc5, 0x03, 0x0a, 0x0f, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x34, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x12, 0x2b, 0x0a, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x52, 0x05, 0x70, 0x68, 0x61, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2d, 0x0a, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x47, 0x69, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x04, 0x72, 0x65, 0x70, 0x6f, 0x12, 0x35, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x22, 0x6b, 0x0a, 0x08, 0x49, 0x44, 0x45, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x77, 0x65, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x65, 0x62, 0x52, 0x65, 0x66, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x66, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x75, 0x70, 0x65, 0x72, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x75, 0x70, 0x65, 0x72, 0x76, 0x69, 0x73, 0x6f, 0x72, 0x52, 0x65, 0x66, 0x22, 0xd6, 0x02, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x49, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x34, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x28, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x2c, 0x0a, 0x09, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x49, 0x44, 0x45, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x08, 0x69, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x22, 0x6d, 0x0a, 0x08, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x35, 0x0a, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x76, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x7c, 0x0a, 0x12, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x30, 0x0a, 0x14, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x22, 0x97, 0x05, 0x0a, 0x13, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x44, 0x0a, 0x0e, 0x70, 0x75, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0d, 0x70, 0x75, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x51, 0x0a, 0x15, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x13, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x08, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x72, 0x65, 0x61, 0x64, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x0f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4e, 0x6f, 0x74, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x4a, 0x0a, 0x13, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x66, 0x69, 0x72, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x14, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x68, 0x65, 0x61, 0x64, 0x6c, 0x65, 0x73, 0x73, 0x54, 0x61, 0x73, 0x6b, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x12, 0x4b, 0x0a, 0x12, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x52, 0x10, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x42, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x42, 0x0a, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0xd7, 0x02, 0x0a, 0x11, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x17, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x61, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 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, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x4b, 0x0a, 0x0b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 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, 0x17, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x88, 0x01, 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, 0x07, 0x0a, 0x05, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x67, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x70, 0x6f, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x6f, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x70, 0x22, 0x6f, 0x0a, 0x17, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xac, 0x05, 0x0a, 0x12, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x70, 0x65, 0x63, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x49, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x0c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x46, 0x0a, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x52, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x76, 0x76, 0x61, 0x72, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x76, 0x76, 0x61, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x03, 0x67, 0x69, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x69, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x03, 0x67, 0x69, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x33, 0x0a, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x09, 0x61, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x09, 0x69, 0x64, 0x65, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x49, 0x44, 0x45, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x08, 0x69, 0x64, 0x65, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x42, 0x0a, 0x0f, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0e, 0x76, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x73, 0x73, 0x68, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x73, 0x68, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x3b, 0x0a, 0x07, 0x47, 0x69, 0x74, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x22, 0xc3, 0x01, 0x0a, 0x13, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 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, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x66, 0x52, 0x06, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x1a, 0x41, 0x0a, 0x0c, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x66, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x35, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x22, 0x23, 0x0a, 0x0d, 0x53, 0x53, 0x48, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5c, 0x0a, 0x17, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x52, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x65, 0x73, 0x22, 0x42, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x2a, 0x34, 0x0a, 0x13, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x01, 0x2a, 0x3a, 0x0a, 0x0e, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x44, 0x4d, 0x49, 0x54, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x52, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x44, 0x4d, 0x49, 0x54, 0x5f, 0x45, 0x56, 0x45, 0x52, 0x59, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x2a, 0x49, 0x0a, 0x0e, 0x50, 0x6f, 0x72, 0x74, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x4f, 0x52, 0x54, 0x5f, 0x56, 0x49, 0x53, 0x49, 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x01, 0x2a, 0x38, 0x0a, 0x16, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x41, 0x4c, 0x53, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x52, 0x55, 0x45, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x10, 0x02, 0x2a, 0x83, 0x01, 0x0a, 0x0e, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x50, 0x68, 0x61, 0x73, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x43, 0x52, 0x45, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x0f, 0x0a, 0x0b, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x52, 0x55, 0x50, 0x54, 0x45, 0x44, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x85, 0x01, 0x0a, 0x14, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4f, 0x50, 0x10, 0x00, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x57, 0x4f, 0x52, 0x4b, 0x53, 0x50, 0x41, 0x43, 0x45, 0x5f, 0x42, 0x41, 0x43, 0x4b, 0x55, 0x50, 0x10, 0x04, 0x12, 0x13, 0x0a, 0x0f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x53, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x50, 0x45, 0x52, 0x53, 0x49, 0x53, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x56, 0x4f, 0x4c, 0x55, 0x4d, 0x45, 0x5f, 0x43, 0x4c, 0x41, 0x49, 0x4d, 0x10, 0x07, 0x22, 0x04, 0x08, 0x01, 0x10, 0x01, 0x22, 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x03, 0x10, 0x03, 0x22, 0x04, 0x08, 0x06, 0x10, 0x06, 0x2a, 0x4b, 0x0a, 0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x47, 0x55, 0x4c, 0x41, 0x52, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x52, 0x4f, 0x42, 0x45, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x10, 0x04, 0x22, 0x04, 0x08, 0x03, 0x10, 0x03, 0x32, 0xe7, 0x08, 0x0a, 0x10, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x4c, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4c, 0x0a, 0x0d, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x11, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0f, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x57, 0x6f, 0x72, 0x6b, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x42, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x17, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x43, 0x0a, 0x0a, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x4d, 0x61, 0x72, 0x6b, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x43, 0x0a, 0x0a, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0c, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x54, 0x61, 0x6b, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x41, 0x64, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x22, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x6f, 0x6c, 0x75, 0x6d, 0x65, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x53, 0x48, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x77, 0x73, 0x6d, 0x61, 0x6e, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x2c, 0x5a, 0x2a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2d, 0x69, 0x6f, 0x2f, 0x67, 0x69, 0x74, 0x70, 0x6f, 0x64, 0x2f, 0x77, 0x73, 0x2d, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_core_proto_rawDescOnce sync.Once file_core_proto_rawDescData = file_core_proto_rawDesc ) func file_core_proto_rawDescGZIP() []byte { file_core_proto_rawDescOnce.Do(func() { file_core_proto_rawDescData = protoimpl.X.CompressGZIP(file_core_proto_rawDescData) }) return file_core_proto_rawDescData } var file_core_proto_enumTypes = make([]protoimpl.EnumInfo, 7) var file_core_proto_msgTypes = make([]protoimpl.MessageInfo, 48) var file_core_proto_goTypes = []interface{}{ (StopWorkspacePolicy)(0), // 0: wsman.StopWorkspacePolicy (AdmissionLevel)(0), // 1: wsman.AdmissionLevel (PortVisibility)(0), // 2: wsman.PortVisibility (WorkspaceConditionBool)(0), // 3: wsman.WorkspaceConditionBool (WorkspacePhase)(0), // 4: wsman.WorkspacePhase (WorkspaceFeatureFlag)(0), // 5: wsman.WorkspaceFeatureFlag (WorkspaceType)(0), // 6: wsman.WorkspaceType (*MetadataFilter)(nil), // 7: wsman.MetadataFilter (*GetWorkspacesRequest)(nil), // 8: wsman.GetWorkspacesRequest (*GetWorkspacesResponse)(nil), // 9: wsman.GetWorkspacesResponse (*StartWorkspaceRequest)(nil), // 10: wsman.StartWorkspaceRequest (*StartWorkspaceResponse)(nil), // 11: wsman.StartWorkspaceResponse (*StopWorkspaceRequest)(nil), // 12: wsman.StopWorkspaceRequest (*StopWorkspaceResponse)(nil), // 13: wsman.StopWorkspaceResponse (*DescribeWorkspaceRequest)(nil), // 14: wsman.DescribeWorkspaceRequest (*DescribeWorkspaceResponse)(nil), // 15: wsman.DescribeWorkspaceResponse (*SubscribeRequest)(nil), // 16: wsman.SubscribeRequest (*SubscribeResponse)(nil), // 17: wsman.SubscribeResponse (*MarkActiveRequest)(nil), // 18: wsman.MarkActiveRequest (*MarkActiveResponse)(nil), // 19: wsman.MarkActiveResponse (*SetTimeoutRequest)(nil), // 20: wsman.SetTimeoutRequest (*SetTimeoutResponse)(nil), // 21: wsman.SetTimeoutResponse (*ControlPortRequest)(nil), // 22: wsman.ControlPortRequest (*ControlPortResponse)(nil), // 23: wsman.ControlPortResponse (*TakeSnapshotRequest)(nil), // 24: wsman.TakeSnapshotRequest (*TakeSnapshotResponse)(nil), // 25: wsman.TakeSnapshotResponse (*ControlAdmissionRequest)(nil), // 26: wsman.ControlAdmissionRequest (*ControlAdmissionResponse)(nil), // 27: wsman.ControlAdmissionResponse (*DeleteVolumeSnapshotRequest)(nil), // 28: wsman.DeleteVolumeSnapshotRequest (*DeleteVolumeSnapshotResponse)(nil), // 29: wsman.DeleteVolumeSnapshotResponse (*BackupWorkspaceRequest)(nil), // 30: wsman.BackupWorkspaceRequest (*BackupWorkspaceResponse)(nil), // 31: wsman.BackupWorkspaceResponse (*UpdateSSHKeyRequest)(nil), // 32: wsman.UpdateSSHKeyRequest (*UpdateSSHKeyResponse)(nil), // 33: wsman.UpdateSSHKeyResponse (*WorkspaceStatus)(nil), // 34: wsman.WorkspaceStatus (*IDEImage)(nil), // 35: wsman.IDEImage (*WorkspaceSpec)(nil), // 36: wsman.WorkspaceSpec (*PortSpec)(nil), // 37: wsman.PortSpec (*VolumeSnapshotInfo)(nil), // 38: wsman.VolumeSnapshotInfo (*WorkspaceConditions)(nil), // 39: wsman.WorkspaceConditions (*WorkspaceMetadata)(nil), // 40: wsman.WorkspaceMetadata (*WorkspaceRuntimeInfo)(nil), // 41: wsman.WorkspaceRuntimeInfo (*WorkspaceAuthentication)(nil), // 42: wsman.WorkspaceAuthentication (*StartWorkspaceSpec)(nil), // 43: wsman.StartWorkspaceSpec (*GitSpec)(nil), // 44: wsman.GitSpec (*EnvironmentVariable)(nil), // 45: wsman.EnvironmentVariable (*ExposedPorts)(nil), // 46: wsman.ExposedPorts (*SSHPublicKeys)(nil), // 47: wsman.SSHPublicKeys (*DescribeClusterRequest)(nil), // 48: wsman.DescribeClusterRequest (*DescribeClusterResponse)(nil), // 49: wsman.DescribeClusterResponse (*WorkspaceClass)(nil), // 50: wsman.WorkspaceClass nil, // 51: wsman.MetadataFilter.AnnotationsEntry nil, // 52: wsman.SubscribeResponse.HeaderEntry nil, // 53: wsman.WorkspaceMetadata.AnnotationsEntry (*EnvironmentVariable_SecretKeyRef)(nil), // 54: wsman.EnvironmentVariable.SecretKeyRef (*api.GitStatus)(nil), // 55: contentservice.GitStatus (*timestamppb.Timestamp)(nil), // 56: google.protobuf.Timestamp (*api.WorkspaceInitializer)(nil), // 57: contentservice.WorkspaceInitializer } var file_core_proto_depIdxs = []int32{ 51, // 0: wsman.MetadataFilter.annotations:type_name -> wsman.MetadataFilter.AnnotationsEntry 7, // 1: wsman.GetWorkspacesRequest.must_match:type_name -> wsman.MetadataFilter 34, // 2: wsman.GetWorkspacesResponse.status:type_name -> wsman.WorkspaceStatus 40, // 3: wsman.StartWorkspaceRequest.metadata:type_name -> wsman.WorkspaceMetadata 43, // 4: wsman.StartWorkspaceRequest.spec:type_name -> wsman.StartWorkspaceSpec 6, // 5: wsman.StartWorkspaceRequest.type:type_name -> wsman.WorkspaceType 0, // 6: wsman.StopWorkspaceRequest.policy:type_name -> wsman.StopWorkspacePolicy 34, // 7: wsman.DescribeWorkspaceResponse.status:type_name -> wsman.WorkspaceStatus 7, // 8: wsman.SubscribeRequest.must_match:type_name -> wsman.MetadataFilter 34, // 9: wsman.SubscribeResponse.status:type_name -> wsman.WorkspaceStatus 52, // 10: wsman.SubscribeResponse.header:type_name -> wsman.SubscribeResponse.HeaderEntry 37, // 11: wsman.ControlPortRequest.spec:type_name -> wsman.PortSpec 1, // 12: wsman.ControlAdmissionRequest.level:type_name -> wsman.AdmissionLevel 40, // 13: wsman.WorkspaceStatus.metadata:type_name -> wsman.WorkspaceMetadata 36, // 14: wsman.WorkspaceStatus.spec:type_name -> wsman.WorkspaceSpec 4, // 15: wsman.WorkspaceStatus.phase:type_name -> wsman.WorkspacePhase 39, // 16: wsman.WorkspaceStatus.conditions:type_name -> wsman.WorkspaceConditions 55, // 17: wsman.WorkspaceStatus.repo:type_name -> contentservice.GitStatus 41, // 18: wsman.WorkspaceStatus.runtime:type_name -> wsman.WorkspaceRuntimeInfo 42, // 19: wsman.WorkspaceStatus.auth:type_name -> wsman.WorkspaceAuthentication 37, // 20: wsman.WorkspaceSpec.exposed_ports:type_name -> wsman.PortSpec 6, // 21: wsman.WorkspaceSpec.type:type_name -> wsman.WorkspaceType 35, // 22: wsman.WorkspaceSpec.ide_image:type_name -> wsman.IDEImage 2, // 23: wsman.PortSpec.visibility:type_name -> wsman.PortVisibility 3, // 24: wsman.WorkspaceConditions.pulling_images:type_name -> wsman.WorkspaceConditionBool 3, // 25: wsman.WorkspaceConditions.final_backup_complete:type_name -> wsman.WorkspaceConditionBool 3, // 26: wsman.WorkspaceConditions.deployed:type_name -> wsman.WorkspaceConditionBool 3, // 27: wsman.WorkspaceConditions.network_not_ready:type_name -> wsman.WorkspaceConditionBool 56, // 28: wsman.WorkspaceConditions.first_user_activity:type_name -> google.protobuf.Timestamp 3, // 29: wsman.WorkspaceConditions.stopped_by_request:type_name -> wsman.WorkspaceConditionBool 38, // 30: wsman.WorkspaceConditions.volume_snapshot:type_name -> wsman.VolumeSnapshotInfo 56, // 31: wsman.WorkspaceMetadata.started_at:type_name -> google.protobuf.Timestamp 53, // 32: wsman.WorkspaceMetadata.annotations:type_name -> wsman.WorkspaceMetadata.AnnotationsEntry 1, // 33: wsman.WorkspaceAuthentication.admission:type_name -> wsman.AdmissionLevel 5, // 34: wsman.StartWorkspaceSpec.feature_flags:type_name -> wsman.WorkspaceFeatureFlag 57, // 35: wsman.StartWorkspaceSpec.initializer:type_name -> contentservice.WorkspaceInitializer 37, // 36: wsman.StartWorkspaceSpec.ports:type_name -> wsman.PortSpec 45, // 37: wsman.StartWorkspaceSpec.envvars:type_name -> wsman.EnvironmentVariable 44, // 38: wsman.StartWorkspaceSpec.git:type_name -> wsman.GitSpec 1, // 39: wsman.StartWorkspaceSpec.admission:type_name -> wsman.AdmissionLevel 35, // 40: wsman.StartWorkspaceSpec.ide_image:type_name -> wsman.IDEImage 38, // 41: wsman.StartWorkspaceSpec.volume_snapshot:type_name -> wsman.VolumeSnapshotInfo 54, // 42: wsman.EnvironmentVariable.secret:type_name -> wsman.EnvironmentVariable.SecretKeyRef 37, // 43: wsman.ExposedPorts.ports:type_name -> wsman.PortSpec 50, // 44: wsman.DescribeClusterResponse.WorkspaceClasses:type_name -> wsman.WorkspaceClass 8, // 45: wsman.WorkspaceManager.GetWorkspaces:input_type -> wsman.GetWorkspacesRequest 10, // 46: wsman.WorkspaceManager.StartWorkspace:input_type -> wsman.StartWorkspaceRequest 12, // 47: wsman.WorkspaceManager.StopWorkspace:input_type -> wsman.StopWorkspaceRequest 14, // 48: wsman.WorkspaceManager.DescribeWorkspace:input_type -> wsman.DescribeWorkspaceRequest 30, // 49: wsman.WorkspaceManager.BackupWorkspace:input_type -> wsman.BackupWorkspaceRequest 16, // 50: wsman.WorkspaceManager.Subscribe:input_type -> wsman.SubscribeRequest 18, // 51: wsman.WorkspaceManager.MarkActive:input_type -> wsman.MarkActiveRequest 20, // 52: wsman.WorkspaceManager.SetTimeout:input_type -> wsman.SetTimeoutRequest 22, // 53: wsman.WorkspaceManager.ControlPort:input_type -> wsman.ControlPortRequest 24, // 54: wsman.WorkspaceManager.TakeSnapshot:input_type -> wsman.TakeSnapshotRequest 26, // 55: wsman.WorkspaceManager.ControlAdmission:input_type -> wsman.ControlAdmissionRequest 28, // 56: wsman.WorkspaceManager.DeleteVolumeSnapshot:input_type -> wsman.DeleteVolumeSnapshotRequest 32, // 57: wsman.WorkspaceManager.UpdateSSHKey:input_type -> wsman.UpdateSSHKeyRequest 48, // 58: wsman.WorkspaceManager.DescribeCluster:input_type -> wsman.DescribeClusterRequest 9, // 59: wsman.WorkspaceManager.GetWorkspaces:output_type -> wsman.GetWorkspacesResponse 11, // 60: wsman.WorkspaceManager.StartWorkspace:output_type -> wsman.StartWorkspaceResponse 13, // 61: wsman.WorkspaceManager.StopWorkspace:output_type -> wsman.StopWorkspaceResponse 15, // 62: wsman.WorkspaceManager.DescribeWorkspace:output_type -> wsman.DescribeWorkspaceResponse 31, // 63: wsman.WorkspaceManager.BackupWorkspace:output_type -> wsman.BackupWorkspaceResponse 17, // 64: wsman.WorkspaceManager.Subscribe:output_type -> wsman.SubscribeResponse 19, // 65: wsman.WorkspaceManager.MarkActive:output_type -> wsman.MarkActiveResponse 21, // 66: wsman.WorkspaceManager.SetTimeout:output_type -> wsman.SetTimeoutResponse 23, // 67: wsman.WorkspaceManager.ControlPort:output_type -> wsman.ControlPortResponse 25, // 68: wsman.WorkspaceManager.TakeSnapshot:output_type -> wsman.TakeSnapshotResponse 27, // 69: wsman.WorkspaceManager.ControlAdmission:output_type -> wsman.ControlAdmissionResponse 29, // 70: wsman.WorkspaceManager.DeleteVolumeSnapshot:output_type -> wsman.DeleteVolumeSnapshotResponse 33, // 71: wsman.WorkspaceManager.UpdateSSHKey:output_type -> wsman.UpdateSSHKeyResponse 49, // 72: wsman.WorkspaceManager.DescribeCluster:output_type -> wsman.DescribeClusterResponse 59, // [59:73] is the sub-list for method output_type 45, // [45:59] is the sub-list for method input_type 45, // [45:45] is the sub-list for extension type_name 45, // [45:45] is the sub-list for extension extendee 0, // [0:45] is the sub-list for field type_name } func init() { file_core_proto_init() } func file_core_proto_init() { if File_core_proto != nil { return } if !protoimpl.UnsafeEnabled { file_core_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MetadataFilter); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetWorkspacesRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetWorkspacesResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartWorkspaceRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartWorkspaceResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StopWorkspaceRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StopWorkspaceResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DescribeWorkspaceRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DescribeWorkspaceResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SubscribeResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MarkActiveRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MarkActiveResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetTimeoutRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SetTimeoutResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControlPortRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControlPortResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TakeSnapshotRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TakeSnapshotResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControlAdmissionRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControlAdmissionResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteVolumeSnapshotRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteVolumeSnapshotResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BackupWorkspaceRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BackupWorkspaceResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateSSHKeyRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*UpdateSSHKeyResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceStatus); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*IDEImage); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceSpec); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*PortSpec); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*VolumeSnapshotInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceConditions); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceMetadata); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceRuntimeInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceAuthentication); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StartWorkspaceSpec); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GitSpec); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EnvironmentVariable); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ExposedPorts); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SSHPublicKeys); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DescribeClusterRequest); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DescribeClusterResponse); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*WorkspaceClass); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_core_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EnvironmentVariable_SecretKeyRef); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_core_proto_msgTypes[33].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_core_proto_rawDesc, NumEnums: 7, NumMessages: 48, NumExtensions: 0, NumServices: 1, }, GoTypes: file_core_proto_goTypes, DependencyIndexes: file_core_proto_depIdxs, EnumInfos: file_core_proto_enumTypes, MessageInfos: file_core_proto_msgTypes, }.Build() File_core_proto = out.File file_core_proto_rawDesc = nil file_core_proto_goTypes = nil file_core_proto_depIdxs = nil }