diff --git a/backend/controller/controller.go b/backend/controller/controller.go index 21fe766dac..ac05aabd7b 100644 --- a/backend/controller/controller.go +++ b/backend/controller/controller.go @@ -462,6 +462,10 @@ func (s *Service) Status(ctx context.Context, req *connect.Request[ftlv1.StatusR return connect.NewResponse(resp), nil } +func (s *Service) GetCertification(context.Context, *connect.Request[ftlv1.GetCertificationRequest]) (*connect.Response[ftlv1.GetCertificationResponse], error) { + panic("implement me") +} + func (s *Service) StreamDeploymentLogs(ctx context.Context, stream *connect.ClientStream[ftlv1.StreamDeploymentLogsRequest]) (*connect.Response[ftlv1.StreamDeploymentLogsResponse], error) { for stream.Receive() { msg := stream.Msg() diff --git a/backend/controller/identity/identity_test.go b/backend/controller/identity/identity_test.go index d75901ed59..02e147f412 100644 --- a/backend/controller/identity/identity_test.go +++ b/backend/controller/identity/identity_test.go @@ -30,6 +30,7 @@ func TestIdentity(t *testing.T) { service, err = New(ctx, encryption, conn) assert.NoError(t, err) - err = service.Verify(*signedData) + data, err := service.Verify(signedData) assert.NoError(t, err) + assert.Equal(t, "test", string(data)) } diff --git a/backend/controller/identity/dal/dal.go b/backend/controller/identity/internal/dal/dal.go similarity index 93% rename from backend/controller/identity/dal/dal.go rename to backend/controller/identity/internal/dal/dal.go index 52994700ca..3c13a33daa 100644 --- a/backend/controller/identity/dal/dal.go +++ b/backend/controller/identity/internal/dal/dal.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/TBD54566975/ftl/backend/controller/identity/dal/internal/sql" + "github.com/TBD54566975/ftl/backend/controller/identity/internal/sql" "github.com/TBD54566975/ftl/backend/libdal" ) diff --git a/backend/controller/identity/dal/internal/sql/db.go b/backend/controller/identity/internal/sql/db.go similarity index 100% rename from backend/controller/identity/dal/internal/sql/db.go rename to backend/controller/identity/internal/sql/db.go diff --git a/backend/controller/identity/dal/internal/sql/models.go b/backend/controller/identity/internal/sql/models.go similarity index 100% rename from backend/controller/identity/dal/internal/sql/models.go rename to backend/controller/identity/internal/sql/models.go diff --git a/backend/controller/identity/dal/internal/sql/querier.go b/backend/controller/identity/internal/sql/querier.go similarity index 100% rename from backend/controller/identity/dal/internal/sql/querier.go rename to backend/controller/identity/internal/sql/querier.go diff --git a/backend/controller/identity/dal/internal/sql/queries.sql b/backend/controller/identity/internal/sql/queries.sql similarity index 100% rename from backend/controller/identity/dal/internal/sql/queries.sql rename to backend/controller/identity/internal/sql/queries.sql diff --git a/backend/controller/identity/dal/internal/sql/queries.sql.go b/backend/controller/identity/internal/sql/queries.sql.go similarity index 100% rename from backend/controller/identity/dal/internal/sql/queries.sql.go rename to backend/controller/identity/internal/sql/queries.sql.go diff --git a/backend/controller/identity/identity.go b/backend/controller/identity/service.go similarity index 80% rename from backend/controller/identity/identity.go rename to backend/controller/identity/service.go index 0c32d31b3b..ab4d3cb33d 100644 --- a/backend/controller/identity/identity.go +++ b/backend/controller/identity/service.go @@ -11,14 +11,14 @@ import ( encryptionsvc "github.com/TBD54566975/ftl/backend/controller/encryption" "github.com/TBD54566975/ftl/backend/controller/encryption/api" - "github.com/TBD54566975/ftl/backend/controller/identity/dal" + "github.com/TBD54566975/ftl/backend/controller/identity/internal/dal" "github.com/TBD54566975/ftl/backend/libdal" internalidentity "github.com/TBD54566975/ftl/internal/identity" "github.com/TBD54566975/ftl/internal/log" ) type Service struct { - dal dal.DAL + dal *dal.DAL encryption *encryptionsvc.Service signer internalidentity.Signer verifier internalidentity.Verifier @@ -26,7 +26,7 @@ type Service struct { func New(ctx context.Context, encryption *encryptionsvc.Service, conn *sql.DB) (*Service, error) { svc := &Service{ - dal: *dal.New(conn), + dal: dal.New(conn), encryption: encryption, } @@ -55,42 +55,42 @@ func New(ctx context.Context, encryption *encryptionsvc.Service, conn *sql.DB) ( return svc, nil } -func (s Service) Sign(data []byte) (*internalidentity.SignedData, error) { +func (s Service) Sign(data []byte) (internalidentity.SignedData, error) { signedData, err := s.signer.Sign(data) if err != nil { - return nil, fmt.Errorf("failed to sign data: %w", err) + return internalidentity.SignedData{}, fmt.Errorf("failed to sign data: %w", err) } return signedData, nil } -func (s Service) Verify(signedData internalidentity.SignedData) error { - err := s.verifier.Verify(signedData) +func (s Service) Verify(signedData internalidentity.SignedData) ([]byte, error) { + data, err := s.verifier.Verify(signedData) if err != nil { - return fmt.Errorf("failed to verify data: %w", err) + return nil, fmt.Errorf("failed to verify data: %w", err) } - return nil + return data, nil } func (s Service) getKeyPair(ctx context.Context) (internalidentity.KeyPair, error) { identity, err := s.dal.GetOnlyIdentityKey(ctx) if err != nil { - return nil, fmt.Errorf("failed to get only identity key: %w", err) + return internalidentity.KeyPair{}, fmt.Errorf("failed to get only identity key: %w", err) } reader := keyset.NewBinaryReader(bytes.NewReader(identity.Private.Bytes())) aead, err := s.encryption.AEAD() if err != nil { - return nil, fmt.Errorf("failed to get AEAD: %w", err) + return internalidentity.KeyPair{}, fmt.Errorf("failed to get AEAD: %w", err) } handle, err := keyset.Read(reader, aead) if err != nil { - return nil, fmt.Errorf("failed to read keyset: %w", err) + return internalidentity.KeyPair{}, fmt.Errorf("failed to read keyset: %w", err) } - keyPair := internalidentity.NewTinkKeyPair(*handle) + keyPair := internalidentity.NewKeyPair(*handle) return keyPair, nil } @@ -123,7 +123,7 @@ func (s Service) ensureIdentity(ctx context.Context) (err error) { } func (s Service) generateAndSaveIdentity(ctx context.Context, tx *dal.DAL) error { - pair, err := internalidentity.GenerateTinkKeyPair() + pair, err := internalidentity.GenerateKeyPair() if err != nil { return fmt.Errorf("failed to generate key pair: %w", err) } @@ -144,9 +144,13 @@ func (s Service) generateAndSaveIdentity(ctx context.Context, tx *dal.DAL) error } // For total sanity, verify immediately - if err = verifier.Verify(*signed); err != nil { + verified, err := verifier.Verify(signed) + if err != nil { return fmt.Errorf("failed to verify signed verification: %w", err) } + if string(verified) != verificationText { + return fmt.Errorf("failed to verify signed verification: got %q, want %q", verified, verificationText) + } // TODO: Make this support different encryptors. // Might need to refactor internal/identity to access controller encryption types. @@ -172,7 +176,7 @@ func (s Service) generateAndSaveIdentity(ctx context.Context, tx *dal.DAL) error encryptedIdentity := &dal.EncryptedIdentity{ Private: encryptedIdentityColumn, - Public: public, + Public: public.Bytes, VerifySignature: signed.Signature, } if err := tx.CreateOnlyIdentityKey(ctx, *encryptedIdentity); err != nil { diff --git a/backend/protos/xyz/block/ftl/v1/ftl.pb.go b/backend/protos/xyz/block/ftl/v1/ftl.pb.go index b195c558fd..cf7c555392 100644 --- a/backend/protos/xyz/block/ftl/v1/ftl.pb.go +++ b/backend/protos/xyz/block/ftl/v1/ftl.pb.go @@ -936,6 +936,219 @@ func (*PublishEventResponse) Descriptor() ([]byte, []int) { return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{12} } +type GetCertificationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Request *CertificateContent `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *GetCertificationRequest) Reset() { + *x = GetCertificationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetCertificationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCertificationRequest) ProtoMessage() {} + +func (x *GetCertificationRequest) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_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 GetCertificationRequest.ProtoReflect.Descriptor instead. +func (*GetCertificationRequest) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{13} +} + +func (x *GetCertificationRequest) GetRequest() *CertificateContent { + if x != nil { + return x.Request + } + return nil +} + +func (x *GetCertificationRequest) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +type GetCertificationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Certificate *Certificate `protobuf:"bytes,1,opt,name=certificate,proto3" json:"certificate,omitempty"` +} + +func (x *GetCertificationResponse) Reset() { + *x = GetCertificationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetCertificationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCertificationResponse) ProtoMessage() {} + +func (x *GetCertificationResponse) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_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 GetCertificationResponse.ProtoReflect.Descriptor instead. +func (*GetCertificationResponse) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{14} +} + +func (x *GetCertificationResponse) GetCertificate() *Certificate { + if x != nil { + return x.Certificate + } + return nil +} + +// CertificateContent is separated from Certificate to allow for easier signing. +type CertificateContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Identity string `protobuf:"bytes,1,opt,name=identity,proto3" json:"identity,omitempty"` + PublicKey []byte `protobuf:"bytes,2,opt,name=public_key,json=publicKey,proto3" json:"public_key,omitempty"` +} + +func (x *CertificateContent) Reset() { + *x = CertificateContent{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CertificateContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CertificateContent) ProtoMessage() {} + +func (x *CertificateContent) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_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 CertificateContent.ProtoReflect.Descriptor instead. +func (*CertificateContent) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{15} +} + +func (x *CertificateContent) GetIdentity() string { + if x != nil { + return x.Identity + } + return "" +} + +func (x *CertificateContent) GetPublicKey() []byte { + if x != nil { + return x.PublicKey + } + return nil +} + +type Certificate struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Content *CertificateContent `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + ControllerSignature []byte `protobuf:"bytes,3,opt,name=controller_signature,json=controllerSignature,proto3" json:"controller_signature,omitempty"` +} + +func (x *Certificate) Reset() { + *x = Certificate{} + if protoimpl.UnsafeEnabled { + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Certificate) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Certificate) ProtoMessage() {} + +func (x *Certificate) ProtoReflect() protoreflect.Message { + mi := &file_xyz_block_ftl_v1_ftl_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 Certificate.ProtoReflect.Descriptor instead. +func (*Certificate) Descriptor() ([]byte, []int) { + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{16} +} + +func (x *Certificate) GetContent() *CertificateContent { + if x != nil { + return x.Content + } + return nil +} + +func (x *Certificate) GetControllerSignature() []byte { + if x != nil { + return x.ControllerSignature + } + return nil +} + type GetSchemaRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -945,7 +1158,7 @@ type GetSchemaRequest struct { func (x *GetSchemaRequest) Reset() { *x = GetSchemaRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[13] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -958,7 +1171,7 @@ func (x *GetSchemaRequest) String() string { func (*GetSchemaRequest) ProtoMessage() {} func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[13] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -971,7 +1184,7 @@ func (x *GetSchemaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSchemaRequest.ProtoReflect.Descriptor instead. func (*GetSchemaRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{13} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{17} } type GetSchemaResponse struct { @@ -985,7 +1198,7 @@ type GetSchemaResponse struct { func (x *GetSchemaResponse) Reset() { *x = GetSchemaResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[14] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -998,7 +1211,7 @@ func (x *GetSchemaResponse) String() string { func (*GetSchemaResponse) ProtoMessage() {} func (x *GetSchemaResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[14] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1011,7 +1224,7 @@ func (x *GetSchemaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSchemaResponse.ProtoReflect.Descriptor instead. func (*GetSchemaResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{14} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{18} } func (x *GetSchemaResponse) GetSchema() *schema.Schema { @@ -1030,7 +1243,7 @@ type PullSchemaRequest struct { func (x *PullSchemaRequest) Reset() { *x = PullSchemaRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[15] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1043,7 +1256,7 @@ func (x *PullSchemaRequest) String() string { func (*PullSchemaRequest) ProtoMessage() {} func (x *PullSchemaRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[15] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1056,7 +1269,7 @@ func (x *PullSchemaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PullSchemaRequest.ProtoReflect.Descriptor instead. func (*PullSchemaRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{15} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{19} } type PullSchemaResponse struct { @@ -1077,7 +1290,7 @@ type PullSchemaResponse struct { func (x *PullSchemaResponse) Reset() { *x = PullSchemaResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[16] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1090,7 +1303,7 @@ func (x *PullSchemaResponse) String() string { func (*PullSchemaResponse) ProtoMessage() {} func (x *PullSchemaResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[16] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1103,7 +1316,7 @@ func (x *PullSchemaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PullSchemaResponse.ProtoReflect.Descriptor instead. func (*PullSchemaResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{16} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{20} } func (x *PullSchemaResponse) GetDeploymentKey() string { @@ -1152,7 +1365,7 @@ type GetArtefactDiffsRequest struct { func (x *GetArtefactDiffsRequest) Reset() { *x = GetArtefactDiffsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[17] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1165,7 +1378,7 @@ func (x *GetArtefactDiffsRequest) String() string { func (*GetArtefactDiffsRequest) ProtoMessage() {} func (x *GetArtefactDiffsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[17] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1178,7 +1391,7 @@ func (x *GetArtefactDiffsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetArtefactDiffsRequest.ProtoReflect.Descriptor instead. func (*GetArtefactDiffsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{17} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{21} } func (x *GetArtefactDiffsRequest) GetClientDigests() []string { @@ -1201,7 +1414,7 @@ type GetArtefactDiffsResponse struct { func (x *GetArtefactDiffsResponse) Reset() { *x = GetArtefactDiffsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[18] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1214,7 +1427,7 @@ func (x *GetArtefactDiffsResponse) String() string { func (*GetArtefactDiffsResponse) ProtoMessage() {} func (x *GetArtefactDiffsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[18] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1227,7 +1440,7 @@ func (x *GetArtefactDiffsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetArtefactDiffsResponse.ProtoReflect.Descriptor instead. func (*GetArtefactDiffsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{18} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{22} } func (x *GetArtefactDiffsResponse) GetMissingDigests() []string { @@ -1255,7 +1468,7 @@ type UploadArtefactRequest struct { func (x *UploadArtefactRequest) Reset() { *x = UploadArtefactRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[19] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1268,7 +1481,7 @@ func (x *UploadArtefactRequest) String() string { func (*UploadArtefactRequest) ProtoMessage() {} func (x *UploadArtefactRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[19] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1281,7 +1494,7 @@ func (x *UploadArtefactRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadArtefactRequest.ProtoReflect.Descriptor instead. func (*UploadArtefactRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{19} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{23} } func (x *UploadArtefactRequest) GetContent() []byte { @@ -1302,7 +1515,7 @@ type UploadArtefactResponse struct { func (x *UploadArtefactResponse) Reset() { *x = UploadArtefactResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[20] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1315,7 +1528,7 @@ func (x *UploadArtefactResponse) String() string { func (*UploadArtefactResponse) ProtoMessage() {} func (x *UploadArtefactResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[20] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1328,7 +1541,7 @@ func (x *UploadArtefactResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadArtefactResponse.ProtoReflect.Descriptor instead. func (*UploadArtefactResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{20} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{24} } func (x *UploadArtefactResponse) GetDigest() []byte { @@ -1351,7 +1564,7 @@ type DeploymentArtefact struct { func (x *DeploymentArtefact) Reset() { *x = DeploymentArtefact{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1364,7 +1577,7 @@ func (x *DeploymentArtefact) String() string { func (*DeploymentArtefact) ProtoMessage() {} func (x *DeploymentArtefact) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[21] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1377,7 +1590,7 @@ func (x *DeploymentArtefact) ProtoReflect() protoreflect.Message { // Deprecated: Use DeploymentArtefact.ProtoReflect.Descriptor instead. func (*DeploymentArtefact) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{21} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{25} } func (x *DeploymentArtefact) GetDigest() string { @@ -1415,7 +1628,7 @@ type CreateDeploymentRequest struct { func (x *CreateDeploymentRequest) Reset() { *x = CreateDeploymentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1428,7 +1641,7 @@ func (x *CreateDeploymentRequest) String() string { func (*CreateDeploymentRequest) ProtoMessage() {} func (x *CreateDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[22] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1441,7 +1654,7 @@ func (x *CreateDeploymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateDeploymentRequest.ProtoReflect.Descriptor instead. func (*CreateDeploymentRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{22} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{26} } func (x *CreateDeploymentRequest) GetSchema() *schema.Module { @@ -1478,7 +1691,7 @@ type CreateDeploymentResponse struct { func (x *CreateDeploymentResponse) Reset() { *x = CreateDeploymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1491,7 +1704,7 @@ func (x *CreateDeploymentResponse) String() string { func (*CreateDeploymentResponse) ProtoMessage() {} func (x *CreateDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[23] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1504,7 +1717,7 @@ func (x *CreateDeploymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateDeploymentResponse.ProtoReflect.Descriptor instead. func (*CreateDeploymentResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{23} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{27} } func (x *CreateDeploymentResponse) GetDeploymentKey() string { @@ -1533,7 +1746,7 @@ type GetDeploymentArtefactsRequest struct { func (x *GetDeploymentArtefactsRequest) Reset() { *x = GetDeploymentArtefactsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1546,7 +1759,7 @@ func (x *GetDeploymentArtefactsRequest) String() string { func (*GetDeploymentArtefactsRequest) ProtoMessage() {} func (x *GetDeploymentArtefactsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[24] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1559,7 +1772,7 @@ func (x *GetDeploymentArtefactsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentArtefactsRequest.ProtoReflect.Descriptor instead. func (*GetDeploymentArtefactsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{24} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{28} } func (x *GetDeploymentArtefactsRequest) GetDeploymentKey() string { @@ -1588,7 +1801,7 @@ type GetDeploymentArtefactsResponse struct { func (x *GetDeploymentArtefactsResponse) Reset() { *x = GetDeploymentArtefactsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[25] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1601,7 +1814,7 @@ func (x *GetDeploymentArtefactsResponse) String() string { func (*GetDeploymentArtefactsResponse) ProtoMessage() {} func (x *GetDeploymentArtefactsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[25] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1614,7 +1827,7 @@ func (x *GetDeploymentArtefactsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentArtefactsResponse.ProtoReflect.Descriptor instead. func (*GetDeploymentArtefactsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{25} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{29} } func (x *GetDeploymentArtefactsResponse) GetArtefact() *DeploymentArtefact { @@ -1642,7 +1855,7 @@ type GetDeploymentRequest struct { func (x *GetDeploymentRequest) Reset() { *x = GetDeploymentRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[26] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1655,7 +1868,7 @@ func (x *GetDeploymentRequest) String() string { func (*GetDeploymentRequest) ProtoMessage() {} func (x *GetDeploymentRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[26] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1668,7 +1881,7 @@ func (x *GetDeploymentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentRequest.ProtoReflect.Descriptor instead. func (*GetDeploymentRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{26} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{30} } func (x *GetDeploymentRequest) GetDeploymentKey() string { @@ -1690,7 +1903,7 @@ type GetDeploymentResponse struct { func (x *GetDeploymentResponse) Reset() { *x = GetDeploymentResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[27] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1703,7 +1916,7 @@ func (x *GetDeploymentResponse) String() string { func (*GetDeploymentResponse) ProtoMessage() {} func (x *GetDeploymentResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[27] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1716,7 +1929,7 @@ func (x *GetDeploymentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeploymentResponse.ProtoReflect.Descriptor instead. func (*GetDeploymentResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{27} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{31} } func (x *GetDeploymentResponse) GetSchema() *schema.Module { @@ -1747,7 +1960,7 @@ type RegisterRunnerRequest struct { func (x *RegisterRunnerRequest) Reset() { *x = RegisterRunnerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[28] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1760,7 +1973,7 @@ func (x *RegisterRunnerRequest) String() string { func (*RegisterRunnerRequest) ProtoMessage() {} func (x *RegisterRunnerRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[28] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1773,7 +1986,7 @@ func (x *RegisterRunnerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterRunnerRequest.ProtoReflect.Descriptor instead. func (*RegisterRunnerRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{28} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{32} } func (x *RegisterRunnerRequest) GetKey() string { @@ -1813,7 +2026,7 @@ type RegisterRunnerResponse struct { func (x *RegisterRunnerResponse) Reset() { *x = RegisterRunnerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[29] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1826,7 +2039,7 @@ func (x *RegisterRunnerResponse) String() string { func (*RegisterRunnerResponse) ProtoMessage() {} func (x *RegisterRunnerResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[29] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1839,7 +2052,7 @@ func (x *RegisterRunnerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterRunnerResponse.ProtoReflect.Descriptor instead. func (*RegisterRunnerResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{29} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33} } type UpdateDeployRequest struct { @@ -1854,7 +2067,7 @@ type UpdateDeployRequest struct { func (x *UpdateDeployRequest) Reset() { *x = UpdateDeployRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[30] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1867,7 +2080,7 @@ func (x *UpdateDeployRequest) String() string { func (*UpdateDeployRequest) ProtoMessage() {} func (x *UpdateDeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[30] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1880,7 +2093,7 @@ func (x *UpdateDeployRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDeployRequest.ProtoReflect.Descriptor instead. func (*UpdateDeployRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{30} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{34} } func (x *UpdateDeployRequest) GetDeploymentKey() string { @@ -1906,7 +2119,7 @@ type UpdateDeployResponse struct { func (x *UpdateDeployResponse) Reset() { *x = UpdateDeployResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[31] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1919,7 +2132,7 @@ func (x *UpdateDeployResponse) String() string { func (*UpdateDeployResponse) ProtoMessage() {} func (x *UpdateDeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[31] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1932,7 +2145,7 @@ func (x *UpdateDeployResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateDeployResponse.ProtoReflect.Descriptor instead. func (*UpdateDeployResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{31} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{35} } type ReplaceDeployRequest struct { @@ -1947,7 +2160,7 @@ type ReplaceDeployRequest struct { func (x *ReplaceDeployRequest) Reset() { *x = ReplaceDeployRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1960,7 +2173,7 @@ func (x *ReplaceDeployRequest) String() string { func (*ReplaceDeployRequest) ProtoMessage() {} func (x *ReplaceDeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[32] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1973,7 +2186,7 @@ func (x *ReplaceDeployRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaceDeployRequest.ProtoReflect.Descriptor instead. func (*ReplaceDeployRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{32} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{36} } func (x *ReplaceDeployRequest) GetDeploymentKey() string { @@ -1999,7 +2212,7 @@ type ReplaceDeployResponse struct { func (x *ReplaceDeployResponse) Reset() { *x = ReplaceDeployResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2012,7 +2225,7 @@ func (x *ReplaceDeployResponse) String() string { func (*ReplaceDeployResponse) ProtoMessage() {} func (x *ReplaceDeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[33] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2025,7 +2238,7 @@ func (x *ReplaceDeployResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplaceDeployResponse.ProtoReflect.Descriptor instead. func (*ReplaceDeployResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{33} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37} } type StreamDeploymentLogsRequest struct { @@ -2045,7 +2258,7 @@ type StreamDeploymentLogsRequest struct { func (x *StreamDeploymentLogsRequest) Reset() { *x = StreamDeploymentLogsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2058,7 +2271,7 @@ func (x *StreamDeploymentLogsRequest) String() string { func (*StreamDeploymentLogsRequest) ProtoMessage() {} func (x *StreamDeploymentLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[34] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2071,7 +2284,7 @@ func (x *StreamDeploymentLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamDeploymentLogsRequest.ProtoReflect.Descriptor instead. func (*StreamDeploymentLogsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{34} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{38} } func (x *StreamDeploymentLogsRequest) GetDeploymentKey() string { @@ -2132,7 +2345,7 @@ type StreamDeploymentLogsResponse struct { func (x *StreamDeploymentLogsResponse) Reset() { *x = StreamDeploymentLogsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2145,7 +2358,7 @@ func (x *StreamDeploymentLogsResponse) String() string { func (*StreamDeploymentLogsResponse) ProtoMessage() {} func (x *StreamDeploymentLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[35] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2158,7 +2371,7 @@ func (x *StreamDeploymentLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamDeploymentLogsResponse.ProtoReflect.Descriptor instead. func (*StreamDeploymentLogsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{35} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{39} } type StatusRequest struct { @@ -2170,7 +2383,7 @@ type StatusRequest struct { func (x *StatusRequest) Reset() { *x = StatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[36] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2183,7 +2396,7 @@ func (x *StatusRequest) String() string { func (*StatusRequest) ProtoMessage() {} func (x *StatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[36] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2196,7 +2409,7 @@ func (x *StatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. func (*StatusRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{36} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{40} } type StatusResponse struct { @@ -2214,7 +2427,7 @@ type StatusResponse struct { func (x *StatusResponse) Reset() { *x = StatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[37] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2227,7 +2440,7 @@ func (x *StatusResponse) String() string { func (*StatusResponse) ProtoMessage() {} func (x *StatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[37] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2240,7 +2453,7 @@ func (x *StatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse.ProtoReflect.Descriptor instead. func (*StatusResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{41} } func (x *StatusResponse) GetControllers() []*StatusResponse_Controller { @@ -2287,7 +2500,7 @@ type ProcessListRequest struct { func (x *ProcessListRequest) Reset() { *x = ProcessListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[38] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2300,7 +2513,7 @@ func (x *ProcessListRequest) String() string { func (*ProcessListRequest) ProtoMessage() {} func (x *ProcessListRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[38] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2313,7 +2526,7 @@ func (x *ProcessListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessListRequest.ProtoReflect.Descriptor instead. func (*ProcessListRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{38} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{42} } type ProcessListResponse struct { @@ -2327,7 +2540,7 @@ type ProcessListResponse struct { func (x *ProcessListResponse) Reset() { *x = ProcessListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[39] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2340,7 +2553,7 @@ func (x *ProcessListResponse) String() string { func (*ProcessListResponse) ProtoMessage() {} func (x *ProcessListResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[39] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2353,7 +2566,7 @@ func (x *ProcessListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessListResponse.ProtoReflect.Descriptor instead. func (*ProcessListResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{39} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{43} } func (x *ProcessListResponse) GetProcesses() []*ProcessListResponse_Process { @@ -2374,7 +2587,7 @@ type ResetSubscriptionRequest struct { func (x *ResetSubscriptionRequest) Reset() { *x = ResetSubscriptionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[40] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2387,7 +2600,7 @@ func (x *ResetSubscriptionRequest) String() string { func (*ResetSubscriptionRequest) ProtoMessage() {} func (x *ResetSubscriptionRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[40] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2400,7 +2613,7 @@ func (x *ResetSubscriptionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetSubscriptionRequest.ProtoReflect.Descriptor instead. func (*ResetSubscriptionRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{40} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{44} } func (x *ResetSubscriptionRequest) GetSubscription() *schema.Ref { @@ -2419,7 +2632,7 @@ type ResetSubscriptionResponse struct { func (x *ResetSubscriptionResponse) Reset() { *x = ResetSubscriptionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[41] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2432,7 +2645,7 @@ func (x *ResetSubscriptionResponse) String() string { func (*ResetSubscriptionResponse) ProtoMessage() {} func (x *ResetSubscriptionResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[41] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2445,7 +2658,7 @@ func (x *ResetSubscriptionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetSubscriptionResponse.ProtoReflect.Descriptor instead. func (*ResetSubscriptionResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{41} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{45} } type ConfigRef struct { @@ -2460,7 +2673,7 @@ type ConfigRef struct { func (x *ConfigRef) Reset() { *x = ConfigRef{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[42] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2473,7 +2686,7 @@ func (x *ConfigRef) String() string { func (*ConfigRef) ProtoMessage() {} func (x *ConfigRef) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[42] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2486,7 +2699,7 @@ func (x *ConfigRef) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigRef.ProtoReflect.Descriptor instead. func (*ConfigRef) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{42} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{46} } func (x *ConfigRef) GetModule() string { @@ -2516,7 +2729,7 @@ type ListConfigRequest struct { func (x *ListConfigRequest) Reset() { *x = ListConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[43] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2529,7 +2742,7 @@ func (x *ListConfigRequest) String() string { func (*ListConfigRequest) ProtoMessage() {} func (x *ListConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[43] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2542,7 +2755,7 @@ func (x *ListConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListConfigRequest.ProtoReflect.Descriptor instead. func (*ListConfigRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{43} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{47} } func (x *ListConfigRequest) GetModule() string { @@ -2577,7 +2790,7 @@ type ListConfigResponse struct { func (x *ListConfigResponse) Reset() { *x = ListConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[44] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2590,7 +2803,7 @@ func (x *ListConfigResponse) String() string { func (*ListConfigResponse) ProtoMessage() {} func (x *ListConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[44] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2603,7 +2816,7 @@ func (x *ListConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListConfigResponse.ProtoReflect.Descriptor instead. func (*ListConfigResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{44} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{48} } func (x *ListConfigResponse) GetConfigs() []*ListConfigResponse_Config { @@ -2624,7 +2837,7 @@ type GetConfigRequest struct { func (x *GetConfigRequest) Reset() { *x = GetConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[45] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2637,7 +2850,7 @@ func (x *GetConfigRequest) String() string { func (*GetConfigRequest) ProtoMessage() {} func (x *GetConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[45] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2650,7 +2863,7 @@ func (x *GetConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConfigRequest.ProtoReflect.Descriptor instead. func (*GetConfigRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{45} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{49} } func (x *GetConfigRequest) GetRef() *ConfigRef { @@ -2671,7 +2884,7 @@ type GetConfigResponse struct { func (x *GetConfigResponse) Reset() { *x = GetConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2684,7 +2897,7 @@ func (x *GetConfigResponse) String() string { func (*GetConfigResponse) ProtoMessage() {} func (x *GetConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[46] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2697,7 +2910,7 @@ func (x *GetConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConfigResponse.ProtoReflect.Descriptor instead. func (*GetConfigResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{46} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{50} } func (x *GetConfigResponse) GetValue() []byte { @@ -2720,7 +2933,7 @@ type SetConfigRequest struct { func (x *SetConfigRequest) Reset() { *x = SetConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[47] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2733,7 +2946,7 @@ func (x *SetConfigRequest) String() string { func (*SetConfigRequest) ProtoMessage() {} func (x *SetConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[47] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2746,7 +2959,7 @@ func (x *SetConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConfigRequest.ProtoReflect.Descriptor instead. func (*SetConfigRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{47} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{51} } func (x *SetConfigRequest) GetProvider() ConfigProvider { @@ -2779,7 +2992,7 @@ type SetConfigResponse struct { func (x *SetConfigResponse) Reset() { *x = SetConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2792,7 +3005,7 @@ func (x *SetConfigResponse) String() string { func (*SetConfigResponse) ProtoMessage() {} func (x *SetConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[48] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2805,7 +3018,7 @@ func (x *SetConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetConfigResponse.ProtoReflect.Descriptor instead. func (*SetConfigResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{48} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{52} } type UnsetConfigRequest struct { @@ -2820,7 +3033,7 @@ type UnsetConfigRequest struct { func (x *UnsetConfigRequest) Reset() { *x = UnsetConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2833,7 +3046,7 @@ func (x *UnsetConfigRequest) String() string { func (*UnsetConfigRequest) ProtoMessage() {} func (x *UnsetConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[49] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2846,7 +3059,7 @@ func (x *UnsetConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnsetConfigRequest.ProtoReflect.Descriptor instead. func (*UnsetConfigRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{49} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{53} } func (x *UnsetConfigRequest) GetProvider() ConfigProvider { @@ -2872,7 +3085,7 @@ type UnsetConfigResponse struct { func (x *UnsetConfigResponse) Reset() { *x = UnsetConfigResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2885,7 +3098,7 @@ func (x *UnsetConfigResponse) String() string { func (*UnsetConfigResponse) ProtoMessage() {} func (x *UnsetConfigResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[50] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2898,7 +3111,7 @@ func (x *UnsetConfigResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnsetConfigResponse.ProtoReflect.Descriptor instead. func (*UnsetConfigResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{50} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{54} } type ListSecretsRequest struct { @@ -2914,7 +3127,7 @@ type ListSecretsRequest struct { func (x *ListSecretsRequest) Reset() { *x = ListSecretsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2927,7 +3140,7 @@ func (x *ListSecretsRequest) String() string { func (*ListSecretsRequest) ProtoMessage() {} func (x *ListSecretsRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[51] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2940,7 +3153,7 @@ func (x *ListSecretsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListSecretsRequest.ProtoReflect.Descriptor instead. func (*ListSecretsRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{51} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{55} } func (x *ListSecretsRequest) GetModule() string { @@ -2975,7 +3188,7 @@ type ListSecretsResponse struct { func (x *ListSecretsResponse) Reset() { *x = ListSecretsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2988,7 +3201,7 @@ func (x *ListSecretsResponse) String() string { func (*ListSecretsResponse) ProtoMessage() {} func (x *ListSecretsResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[52] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3001,7 +3214,7 @@ func (x *ListSecretsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListSecretsResponse.ProtoReflect.Descriptor instead. func (*ListSecretsResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{52} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{56} } func (x *ListSecretsResponse) GetSecrets() []*ListSecretsResponse_Secret { @@ -3022,7 +3235,7 @@ type GetSecretRequest struct { func (x *GetSecretRequest) Reset() { *x = GetSecretRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3035,7 +3248,7 @@ func (x *GetSecretRequest) String() string { func (*GetSecretRequest) ProtoMessage() {} func (x *GetSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[53] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3048,7 +3261,7 @@ func (x *GetSecretRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSecretRequest.ProtoReflect.Descriptor instead. func (*GetSecretRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{53} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{57} } func (x *GetSecretRequest) GetRef() *ConfigRef { @@ -3069,7 +3282,7 @@ type GetSecretResponse struct { func (x *GetSecretResponse) Reset() { *x = GetSecretResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3082,7 +3295,7 @@ func (x *GetSecretResponse) String() string { func (*GetSecretResponse) ProtoMessage() {} func (x *GetSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[54] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3095,7 +3308,7 @@ func (x *GetSecretResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetSecretResponse.ProtoReflect.Descriptor instead. func (*GetSecretResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{54} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{58} } func (x *GetSecretResponse) GetValue() []byte { @@ -3118,7 +3331,7 @@ type SetSecretRequest struct { func (x *SetSecretRequest) Reset() { *x = SetSecretRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[55] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3131,7 +3344,7 @@ func (x *SetSecretRequest) String() string { func (*SetSecretRequest) ProtoMessage() {} func (x *SetSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[55] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3144,7 +3357,7 @@ func (x *SetSecretRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSecretRequest.ProtoReflect.Descriptor instead. func (*SetSecretRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{55} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{59} } func (x *SetSecretRequest) GetProvider() SecretProvider { @@ -3177,7 +3390,7 @@ type SetSecretResponse struct { func (x *SetSecretResponse) Reset() { *x = SetSecretResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[56] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3190,7 +3403,7 @@ func (x *SetSecretResponse) String() string { func (*SetSecretResponse) ProtoMessage() {} func (x *SetSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[56] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3203,7 +3416,7 @@ func (x *SetSecretResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSecretResponse.ProtoReflect.Descriptor instead. func (*SetSecretResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{56} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{60} } type UnsetSecretRequest struct { @@ -3218,7 +3431,7 @@ type UnsetSecretRequest struct { func (x *UnsetSecretRequest) Reset() { *x = UnsetSecretRequest{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[57] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3231,7 +3444,7 @@ func (x *UnsetSecretRequest) String() string { func (*UnsetSecretRequest) ProtoMessage() {} func (x *UnsetSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[57] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3244,7 +3457,7 @@ func (x *UnsetSecretRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnsetSecretRequest.ProtoReflect.Descriptor instead. func (*UnsetSecretRequest) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{57} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{61} } func (x *UnsetSecretRequest) GetProvider() SecretProvider { @@ -3270,7 +3483,7 @@ type UnsetSecretResponse struct { func (x *UnsetSecretResponse) Reset() { *x = UnsetSecretResponse{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[58] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3283,7 +3496,7 @@ func (x *UnsetSecretResponse) String() string { func (*UnsetSecretResponse) ProtoMessage() {} func (x *UnsetSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[58] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3296,7 +3509,7 @@ func (x *UnsetSecretResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnsetSecretResponse.ProtoReflect.Descriptor instead. func (*UnsetSecretResponse) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{58} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{62} } type ModuleContextResponse_Ref struct { @@ -3311,7 +3524,7 @@ type ModuleContextResponse_Ref struct { func (x *ModuleContextResponse_Ref) Reset() { *x = ModuleContextResponse_Ref{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[59] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3324,7 +3537,7 @@ func (x *ModuleContextResponse_Ref) String() string { func (*ModuleContextResponse_Ref) ProtoMessage() {} func (x *ModuleContextResponse_Ref) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[59] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3367,7 +3580,7 @@ type ModuleContextResponse_DSN struct { func (x *ModuleContextResponse_DSN) Reset() { *x = ModuleContextResponse_DSN{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[60] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3380,7 +3593,7 @@ func (x *ModuleContextResponse_DSN) String() string { func (*ModuleContextResponse_DSN) ProtoMessage() {} func (x *ModuleContextResponse_DSN) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[60] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3429,7 +3642,7 @@ type Metadata_Pair struct { func (x *Metadata_Pair) Reset() { *x = Metadata_Pair{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[63] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3442,7 +3655,7 @@ func (x *Metadata_Pair) String() string { func (*Metadata_Pair) ProtoMessage() {} func (x *Metadata_Pair) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[63] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3484,7 +3697,7 @@ type CallResponse_Error struct { func (x *CallResponse_Error) Reset() { *x = CallResponse_Error{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[64] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3497,7 +3710,7 @@ func (x *CallResponse_Error) String() string { func (*CallResponse_Error) ProtoMessage() {} func (x *CallResponse_Error) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[64] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3540,7 +3753,7 @@ type StatusResponse_Controller struct { func (x *StatusResponse_Controller) Reset() { *x = StatusResponse_Controller{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[66] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3553,7 +3766,7 @@ func (x *StatusResponse_Controller) String() string { func (*StatusResponse_Controller) ProtoMessage() {} func (x *StatusResponse_Controller) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[66] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3566,7 +3779,7 @@ func (x *StatusResponse_Controller) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_Controller.ProtoReflect.Descriptor instead. func (*StatusResponse_Controller) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 0} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{41, 0} } func (x *StatusResponse_Controller) GetKey() string { @@ -3605,7 +3818,7 @@ type StatusResponse_Runner struct { func (x *StatusResponse_Runner) Reset() { *x = StatusResponse_Runner{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[67] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3618,7 +3831,7 @@ func (x *StatusResponse_Runner) String() string { func (*StatusResponse_Runner) ProtoMessage() {} func (x *StatusResponse_Runner) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[67] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3631,7 +3844,7 @@ func (x *StatusResponse_Runner) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_Runner.ProtoReflect.Descriptor instead. func (*StatusResponse_Runner) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 1} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{41, 1} } func (x *StatusResponse_Runner) GetKey() string { @@ -3686,7 +3899,7 @@ type StatusResponse_Deployment struct { func (x *StatusResponse_Deployment) Reset() { *x = StatusResponse_Deployment{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[68] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3699,7 +3912,7 @@ func (x *StatusResponse_Deployment) String() string { func (*StatusResponse_Deployment) ProtoMessage() {} func (x *StatusResponse_Deployment) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[68] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3712,7 +3925,7 @@ func (x *StatusResponse_Deployment) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_Deployment.ProtoReflect.Descriptor instead. func (*StatusResponse_Deployment) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 2} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{41, 2} } func (x *StatusResponse_Deployment) GetKey() string { @@ -3778,7 +3991,7 @@ type StatusResponse_IngressRoute struct { func (x *StatusResponse_IngressRoute) Reset() { *x = StatusResponse_IngressRoute{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[69] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3791,7 +4004,7 @@ func (x *StatusResponse_IngressRoute) String() string { func (*StatusResponse_IngressRoute) ProtoMessage() {} func (x *StatusResponse_IngressRoute) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[69] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3804,7 +4017,7 @@ func (x *StatusResponse_IngressRoute) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_IngressRoute.ProtoReflect.Descriptor instead. func (*StatusResponse_IngressRoute) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 3} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{41, 3} } func (x *StatusResponse_IngressRoute) GetDeploymentKey() string { @@ -3848,7 +4061,7 @@ type StatusResponse_Route struct { func (x *StatusResponse_Route) Reset() { *x = StatusResponse_Route{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[70] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3861,7 +4074,7 @@ func (x *StatusResponse_Route) String() string { func (*StatusResponse_Route) ProtoMessage() {} func (x *StatusResponse_Route) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[70] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3874,7 +4087,7 @@ func (x *StatusResponse_Route) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusResponse_Route.ProtoReflect.Descriptor instead. func (*StatusResponse_Route) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{37, 4} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{41, 4} } func (x *StatusResponse_Route) GetModule() string { @@ -3911,7 +4124,7 @@ type ProcessListResponse_ProcessRunner struct { func (x *ProcessListResponse_ProcessRunner) Reset() { *x = ProcessListResponse_ProcessRunner{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[71] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3924,7 +4137,7 @@ func (x *ProcessListResponse_ProcessRunner) String() string { func (*ProcessListResponse_ProcessRunner) ProtoMessage() {} func (x *ProcessListResponse_ProcessRunner) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[71] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3937,7 +4150,7 @@ func (x *ProcessListResponse_ProcessRunner) ProtoReflect() protoreflect.Message // Deprecated: Use ProcessListResponse_ProcessRunner.ProtoReflect.Descriptor instead. func (*ProcessListResponse_ProcessRunner) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{39, 0} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{43, 0} } func (x *ProcessListResponse_ProcessRunner) GetKey() string { @@ -3975,7 +4188,7 @@ type ProcessListResponse_Process struct { func (x *ProcessListResponse_Process) Reset() { *x = ProcessListResponse_Process{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[72] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3988,7 +4201,7 @@ func (x *ProcessListResponse_Process) String() string { func (*ProcessListResponse_Process) ProtoMessage() {} func (x *ProcessListResponse_Process) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[72] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4001,7 +4214,7 @@ func (x *ProcessListResponse_Process) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessListResponse_Process.ProtoReflect.Descriptor instead. func (*ProcessListResponse_Process) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{39, 1} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{43, 1} } func (x *ProcessListResponse_Process) GetDeployment() string { @@ -4044,7 +4257,7 @@ type ListConfigResponse_Config struct { func (x *ListConfigResponse_Config) Reset() { *x = ListConfigResponse_Config{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[73] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4057,7 +4270,7 @@ func (x *ListConfigResponse_Config) String() string { func (*ListConfigResponse_Config) ProtoMessage() {} func (x *ListConfigResponse_Config) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[73] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4070,7 +4283,7 @@ func (x *ListConfigResponse_Config) ProtoReflect() protoreflect.Message { // Deprecated: Use ListConfigResponse_Config.ProtoReflect.Descriptor instead. func (*ListConfigResponse_Config) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{44, 0} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{48, 0} } func (x *ListConfigResponse_Config) GetRefPath() string { @@ -4099,7 +4312,7 @@ type ListSecretsResponse_Secret struct { func (x *ListSecretsResponse_Secret) Reset() { *x = ListSecretsResponse_Secret{} if protoimpl.UnsafeEnabled { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[74] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4112,7 +4325,7 @@ func (x *ListSecretsResponse_Secret) String() string { func (*ListSecretsResponse_Secret) ProtoMessage() {} func (x *ListSecretsResponse_Secret) ProtoReflect() protoreflect.Message { - mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[74] + mi := &file_xyz_block_ftl_v1_ftl_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4125,7 +4338,7 @@ func (x *ListSecretsResponse_Secret) ProtoReflect() protoreflect.Message { // Deprecated: Use ListSecretsResponse_Secret.ProtoReflect.Descriptor instead. func (*ListSecretsResponse_Secret) Descriptor() ([]byte, []int) { - return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{52, 0} + return file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP(), []int{56, 0} } func (x *ListSecretsResponse_Secret) GetRefPath() string { @@ -4259,599 +4472,632 @@ var file_xyz_block_ftl_v1_ftl_proto_rawDesc = []byte{ 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x72, 0x22, 0x16, 0x0a, 0x14, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, - 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x13, 0x0a, 0x11, 0x50, - 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x82, 0x02, 0x0a, 0x12, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, - 0x3c, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, - 0x04, 0x6d, 0x6f, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6d, 0x6f, 0x72, - 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x40, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, - 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, - 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, - 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x4f, 0x0a, - 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x77, 0x0a, 0x17, 0x47, 0x65, 0x74, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0x5b, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, + 0x0a, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x52, 0x0b, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x22, + 0x4f, 0x0a, 0x12, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x22, 0x80, 0x01, 0x0a, 0x0b, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x12, 0x3e, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x31, 0x0a, 0x14, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x5f, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x13, + 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x4c, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0x13, 0x0a, 0x11, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x82, 0x02, 0x0a, 0x12, 0x50, + 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6d, 0x6f, 0x72, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6d, 0x6f, 0x72, 0x65, 0x12, 0x47, 0x0a, 0x0b, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x54, 0x79, 0x70, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, + 0x40, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, + 0x66, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x73, 0x22, 0x94, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, + 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, + 0x0a, 0x0f, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6e, 0x67, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x73, 0x12, 0x4f, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x5f, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, + 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, + 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x31, 0x0a, 0x15, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x30, 0x0a, 0x16, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x60, 0x0a, + 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, + 0x61, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, + 0xd7, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x06, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, + 0x68, 0x65, 0x6d, 0x61, 0x12, 0x42, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x0f, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x31, - 0x0a, 0x15, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x22, 0x30, 0x0a, 0x16, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, - 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x22, 0x60, 0x0a, 0x12, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x22, 0xd7, 0x01, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, - 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x42, 0x0a, 0x09, 0x61, 0x72, - 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, - 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x34, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, - 0x94, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x15, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x13, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x42, 0x18, 0x0a, 0x16, - 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x93, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, + 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, + 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x88, 0x01, 0x01, 0x42, 0x09, + 0x0a, 0x07, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x18, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x37, 0x0a, + 0x15, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x13, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x42, 0x18, 0x0a, 0x16, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, + 0x22, 0x93, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x4b, 0x0a, 0x0e, 0x68, 0x61, 0x76, + 0x65, 0x5f, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, + 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x0d, 0x68, 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, + 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x78, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x08, 0x61, 0x72, 0x74, 0x65, + 0x66, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, + 0x52, 0x08, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, + 0x75, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, + 0x22, 0x3d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, - 0x4b, 0x0a, 0x0e, 0x68, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x0d, 0x68, - 0x61, 0x76, 0x65, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x78, 0x0a, 0x1e, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, - 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, - 0x0a, 0x08, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, - 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x08, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x22, 0x3d, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, - 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, 0x94, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, - 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x42, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x65, - 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, - 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x96, 0x01, 0x0a, - 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x5f, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, - 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, - 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x60, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, - 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x22, + 0x94, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x12, 0x42, 0x0a, 0x09, 0x61, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x09, 0x61, 0x72, 0x74, + 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x15, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1e, + 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2f, + 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, + 0x18, 0x0a, 0x16, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5f, 0x0a, 0x13, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, - 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xaf, 0x03, 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0b, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, - 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x6c, - 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, - 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 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, 0x19, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x01, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x1e, 0x0a, 0x1c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x86, 0x09, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, - 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, - 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x6e, - 0x65, 0x72, 0x52, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a, 0x0b, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x0e, 0x69, 0x6e, - 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, - 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, - 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, - 0x1a, 0x54, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0xb9, 0x01, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x6e, 0x65, - 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, - 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x23, 0x0a, - 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x88, - 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x1a, 0xf7, 0x01, 0x0a, 0x0a, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, - 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, - 0x61, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, - 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x93, 0x01, 0x0a, - 0x0c, 0x49, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x25, 0x0a, + 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x22, 0x16, 0x0a, 0x14, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x60, 0x0a, 0x14, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, + 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, + 0x69, 0x63, 0x61, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xaf, 0x03, + 0x0a, 0x1b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x4b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, - 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, - 0x74, 0x68, 0x1a, 0x5b, 0x0a, 0x05, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, - 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, - 0x75, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, - 0x14, 0x0a, 0x12, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xaf, 0x03, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, - 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, - 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x1a, 0x6e, 0x0a, 0x0d, 0x50, 0x72, - 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x74, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x0b, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x0a, 0x74, 0x69, + 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, + 0x53, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x6c, 0x6f, 0x67, 0x5f, 0x6c, 0x65, 0x76, + 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x6c, 0x6f, 0x67, 0x4c, 0x65, 0x76, + 0x65, 0x6c, 0x12, 0x5d, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 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, 0x19, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, + 0x1e, 0x0a, 0x1c, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x86, 0x09, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, + 0x72, 0x73, 0x12, 0x41, 0x0a, 0x07, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x07, 0x72, 0x75, + 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x0e, 0x69, 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x49, + 0x6e, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0d, 0x69, 0x6e, 0x67, + 0x72, 0x65, 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x1a, 0x54, 0x0a, 0x0a, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x1a, 0xb9, 0x01, 0x0a, 0x06, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1c, 0x0a, + 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x42, 0x0d, 0x0a, + 0x0b, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0xf7, 0x01, 0x0a, + 0x0a, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, - 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0xda, 0x01, 0x0a, 0x07, 0x50, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, - 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, - 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x50, 0x0a, 0x06, 0x72, 0x75, - 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, + 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x21, 0x0a, + 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x2f, 0x0a, 0x06, + 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x37, 0x0a, + 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x52, 0x06, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x1a, 0x93, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x67, 0x72, 0x65, + 0x73, 0x73, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0d, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x30, + 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, + 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, + 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x1a, 0x5b, 0x0a, 0x05, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x12, 0x1e, 0x0a, + 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1a, 0x0a, + 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x14, 0x0a, 0x12, 0x50, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0xaf, 0x03, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x48, - 0x00, 0x52, 0x06, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x22, 0x5c, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x65, 0x74, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, 0x66, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1b, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x47, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x12, - 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, - 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, + 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x1a, 0x6e, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, + 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x1a, 0xda, 0x01, 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x06, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x12, 0x50, 0x0a, 0x06, 0x72, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x48, 0x00, 0x52, 0x06, 0x72, 0x75, 0x6e, + 0x6e, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x65, + 0x72, 0x22, 0x5c, 0x0a, 0x18, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, + 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x52, 0x65, + 0x66, 0x52, 0x0c, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x1b, 0x0a, 0x19, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x0a, 0x09, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x22, 0xca, 0x01, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, + 0x75, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x01, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x88, 0x01, 0x01, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x02, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x22, 0xa4, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x1a, 0x47, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, + 0x66, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, + 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, + 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x41, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, + 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x22, 0x29, 0x0a, 0x11, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, + 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, + 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x02, - 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, - 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x69, 0x6e, 0x63, - 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x5f, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0xa4, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x45, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x1a, 0x47, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x66, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x41, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, - 0x65, 0x66, 0x22, 0x29, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa7, 0x01, - 0x0a, 0x10, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, - 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x0a, - 0x12, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, - 0x52, 0x03, 0x72, 0x65, 0x66, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x22, 0x15, 0x0a, 0x13, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xcb, 0x01, 0x0a, 0x12, 0x4c, 0x69, - 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, - 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x02, 0x52, - 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, - 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x69, 0x6e, 0x63, 0x6c, - 0x75, 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x46, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, - 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x47, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x66, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x66, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x41, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, - 0x72, 0x65, 0x66, 0x22, 0x29, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa7, - 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, + 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x42, + 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x15, 0x0a, 0x13, + 0x55, 0x6e, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xcb, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x06, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x12, 0x2a, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, + 0x64, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x01, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x88, 0x01, 0x01, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, - 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, - 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x22, 0x15, 0x0a, 0x13, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x5c, 0x0a, 0x14, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, - 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, - 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, - 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x44, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, - 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, - 0x0c, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x45, 0x4e, 0x56, 0x41, 0x52, 0x10, 0x01, 0x12, - 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x44, 0x42, 0x10, 0x02, 0x2a, 0x69, - 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, - 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, 0x45, 0x4e, - 0x56, 0x41, 0x52, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, - 0x4b, 0x45, 0x59, 0x43, 0x48, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x45, - 0x43, 0x52, 0x45, 0x54, 0x5f, 0x4f, 0x50, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x45, 0x43, - 0x52, 0x45, 0x54, 0x5f, 0x41, 0x53, 0x4d, 0x10, 0x04, 0x32, 0xa0, 0x01, 0x0a, 0x0b, 0x56, 0x65, - 0x72, 0x62, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, - 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x45, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x48, 0x02, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x5f, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x22, 0xa6, 0x01, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x07, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x1a, 0x47, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, + 0x65, 0x66, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, + 0x66, 0x50, 0x61, 0x74, 0x68, 0x12, 0x19, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, + 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x41, 0x0a, 0x10, 0x47, 0x65, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, + 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x22, 0x29, 0x0a, + 0x11, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x10, 0x53, 0x65, 0x74, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, + 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, 0x01, + 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc5, 0x04, 0x0a, - 0x0d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, - 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x65, 0x0a, 0x10, 0x47, 0x65, - 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, + 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x22, 0x13, 0x0a, 0x11, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x65, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, + 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x48, 0x00, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x88, 0x01, + 0x01, 0x12, 0x2d, 0x0a, 0x03, 0x72, 0x65, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, - 0x01, 0x12, 0x61, 0x0a, 0x0c, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, - 0x65, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x71, 0x75, - 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x28, 0x01, 0x30, 0x01, 0x12, 0x5d, 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x53, 0x65, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x46, 0x53, - 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, - 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x0c, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xe4, 0x0b, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, - 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, - 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x5a, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x66, 0x52, 0x03, 0x72, 0x65, 0x66, + 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x15, 0x0a, + 0x13, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x5c, 0x0a, 0x14, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, + 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x41, 0x44, 0x44, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, + 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, + 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x44, + 0x10, 0x02, 0x2a, 0x44, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x0a, 0x0d, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x49, + 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x4f, 0x4e, 0x46, 0x49, + 0x47, 0x5f, 0x45, 0x4e, 0x56, 0x41, 0x52, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x4e, + 0x46, 0x49, 0x47, 0x5f, 0x44, 0x42, 0x10, 0x02, 0x2a, 0x69, 0x0a, 0x0e, 0x53, 0x65, 0x63, 0x72, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x45, + 0x43, 0x52, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, + 0x0c, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, 0x45, 0x4e, 0x56, 0x41, 0x52, 0x10, 0x01, 0x12, + 0x13, 0x0a, 0x0f, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x43, 0x48, 0x41, + 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, 0x4f, + 0x50, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x45, 0x43, 0x52, 0x45, 0x54, 0x5f, 0x41, 0x53, + 0x4d, 0x10, 0x04, 0x32, 0xa0, 0x01, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x62, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e, 0x78, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, + 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, + 0x45, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xc5, 0x04, 0x0a, 0x0d, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, + 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x03, 0x90, 0x02, 0x01, 0x12, 0x65, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x61, 0x0a, 0x0c, 0x41, + 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x25, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x71, 0x75, 0x69, 0x72, 0x65, 0x4c, 0x65, 0x61, + 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5d, + 0x0a, 0x0c, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x25, + 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, + 0x0f, 0x53, 0x65, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x46, + 0x53, 0x4d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5d, 0x0a, 0x0c, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xcf, + 0x0c, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, + 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, + 0x12, 0x5a, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x10, 0x47, 0x65, 0x74, + 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x69, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, - 0x66, 0x66, 0x73, 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, + 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, + 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, - 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x44, 0x69, 0x66, - 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x63, 0x0a, 0x0e, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x12, 0x27, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, - 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x69, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x63, 0x74, 0x44, 0x69, 0x66, 0x66, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x63, 0x0a, 0x0e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, + 0x74, 0x12, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, + 0x61, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x69, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x2e, 0x78, 0x79, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x60, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x16, + 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, + 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x78, + 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, - 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x2f, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x72, 0x74, 0x65, 0x66, 0x61, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x65, 0x0a, 0x0e, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x12, 0x27, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x28, 0x01, 0x12, 0x5d, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x2d, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, - 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x78, 0x79, 0x7a, - 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x54, 0x0a, 0x09, - 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, - 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x12, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x6c, 0x0a, - 0x11, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, + 0x65, 0x66, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, + 0x12, 0x65, 0x0a, 0x0e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, + 0x65, 0x72, 0x12, 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, + 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x5d, 0x0a, 0x0c, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x9f, 0x06, 0x0a, 0x0c, - 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x4a, 0x0a, 0x04, - 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x57, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x79, - 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x54, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x47, 0x65, 0x74, 0x12, 0x22, + 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, + 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x26, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, + 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x27, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x77, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, + 0x12, 0x2d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, + 0x01, 0x12, 0x54, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x53, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, - 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x12, 0x24, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x6e, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, - 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x47, - 0x65, 0x74, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, - 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x63, - 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, - 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x55, 0x6e, 0x73, 0x65, 0x74, - 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, - 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x44, 0x50, - 0x01, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x54, 0x42, - 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x62, 0x61, - 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x78, 0x79, 0x7a, - 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, 0x76, 0x31, 0x3b, 0x66, 0x74, - 0x6c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x59, 0x0a, 0x0a, 0x50, 0x75, 0x6c, 0x6c, 0x53, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x78, 0x79, 0x7a, + 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, + 0x6c, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x6c, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x32, 0x9f, 0x06, 0x0a, 0x0c, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x4a, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x1d, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x57, 0x0a, + 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x23, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x47, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x55, 0x6e, 0x73, 0x65, + 0x74, 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, + 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x24, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, + 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x09, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x47, 0x65, 0x74, 0x12, 0x22, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x54, 0x0a, 0x09, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x53, 0x65, 0x74, 0x12, 0x22, 0x2e, + 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x23, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, + 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x55, 0x6e, 0x73, 0x65, 0x74, 0x12, 0x24, 0x2e, 0x78, 0x79, 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x6e, 0x73, 0x65, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x78, 0x79, + 0x7a, 0x2e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, 0x66, 0x74, 0x6c, 0x2e, 0x76, 0x31, 0x2e, 0x55, + 0x6e, 0x73, 0x65, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x44, 0x50, 0x01, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x54, 0x42, 0x44, 0x35, 0x34, 0x35, 0x36, 0x36, 0x39, 0x37, 0x35, 0x2f, 0x66, + 0x74, 0x6c, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x73, 0x2f, 0x78, 0x79, 0x7a, 0x2f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x66, 0x74, 0x6c, 0x2f, + 0x76, 0x31, 0x3b, 0x66, 0x74, 0x6c, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4867,7 +5113,7 @@ func file_xyz_block_ftl_v1_ftl_proto_rawDescGZIP() []byte { } var file_xyz_block_ftl_v1_ftl_proto_enumTypes = make([]protoimpl.EnumInfo, 4) -var file_xyz_block_ftl_v1_ftl_proto_msgTypes = make([]protoimpl.MessageInfo, 75) +var file_xyz_block_ftl_v1_ftl_proto_msgTypes = make([]protoimpl.MessageInfo, 79) var file_xyz_block_ftl_v1_ftl_proto_goTypes = []any{ (DeploymentChangeType)(0), // 0: xyz.block.ftl.v1.DeploymentChangeType (ConfigProvider)(0), // 1: xyz.block.ftl.v1.ConfigProvider @@ -4886,200 +5132,209 @@ var file_xyz_block_ftl_v1_ftl_proto_goTypes = []any{ (*SendFSMEventResponse)(nil), // 14: xyz.block.ftl.v1.SendFSMEventResponse (*PublishEventRequest)(nil), // 15: xyz.block.ftl.v1.PublishEventRequest (*PublishEventResponse)(nil), // 16: xyz.block.ftl.v1.PublishEventResponse - (*GetSchemaRequest)(nil), // 17: xyz.block.ftl.v1.GetSchemaRequest - (*GetSchemaResponse)(nil), // 18: xyz.block.ftl.v1.GetSchemaResponse - (*PullSchemaRequest)(nil), // 19: xyz.block.ftl.v1.PullSchemaRequest - (*PullSchemaResponse)(nil), // 20: xyz.block.ftl.v1.PullSchemaResponse - (*GetArtefactDiffsRequest)(nil), // 21: xyz.block.ftl.v1.GetArtefactDiffsRequest - (*GetArtefactDiffsResponse)(nil), // 22: xyz.block.ftl.v1.GetArtefactDiffsResponse - (*UploadArtefactRequest)(nil), // 23: xyz.block.ftl.v1.UploadArtefactRequest - (*UploadArtefactResponse)(nil), // 24: xyz.block.ftl.v1.UploadArtefactResponse - (*DeploymentArtefact)(nil), // 25: xyz.block.ftl.v1.DeploymentArtefact - (*CreateDeploymentRequest)(nil), // 26: xyz.block.ftl.v1.CreateDeploymentRequest - (*CreateDeploymentResponse)(nil), // 27: xyz.block.ftl.v1.CreateDeploymentResponse - (*GetDeploymentArtefactsRequest)(nil), // 28: xyz.block.ftl.v1.GetDeploymentArtefactsRequest - (*GetDeploymentArtefactsResponse)(nil), // 29: xyz.block.ftl.v1.GetDeploymentArtefactsResponse - (*GetDeploymentRequest)(nil), // 30: xyz.block.ftl.v1.GetDeploymentRequest - (*GetDeploymentResponse)(nil), // 31: xyz.block.ftl.v1.GetDeploymentResponse - (*RegisterRunnerRequest)(nil), // 32: xyz.block.ftl.v1.RegisterRunnerRequest - (*RegisterRunnerResponse)(nil), // 33: xyz.block.ftl.v1.RegisterRunnerResponse - (*UpdateDeployRequest)(nil), // 34: xyz.block.ftl.v1.UpdateDeployRequest - (*UpdateDeployResponse)(nil), // 35: xyz.block.ftl.v1.UpdateDeployResponse - (*ReplaceDeployRequest)(nil), // 36: xyz.block.ftl.v1.ReplaceDeployRequest - (*ReplaceDeployResponse)(nil), // 37: xyz.block.ftl.v1.ReplaceDeployResponse - (*StreamDeploymentLogsRequest)(nil), // 38: xyz.block.ftl.v1.StreamDeploymentLogsRequest - (*StreamDeploymentLogsResponse)(nil), // 39: xyz.block.ftl.v1.StreamDeploymentLogsResponse - (*StatusRequest)(nil), // 40: xyz.block.ftl.v1.StatusRequest - (*StatusResponse)(nil), // 41: xyz.block.ftl.v1.StatusResponse - (*ProcessListRequest)(nil), // 42: xyz.block.ftl.v1.ProcessListRequest - (*ProcessListResponse)(nil), // 43: xyz.block.ftl.v1.ProcessListResponse - (*ResetSubscriptionRequest)(nil), // 44: xyz.block.ftl.v1.ResetSubscriptionRequest - (*ResetSubscriptionResponse)(nil), // 45: xyz.block.ftl.v1.ResetSubscriptionResponse - (*ConfigRef)(nil), // 46: xyz.block.ftl.v1.ConfigRef - (*ListConfigRequest)(nil), // 47: xyz.block.ftl.v1.ListConfigRequest - (*ListConfigResponse)(nil), // 48: xyz.block.ftl.v1.ListConfigResponse - (*GetConfigRequest)(nil), // 49: xyz.block.ftl.v1.GetConfigRequest - (*GetConfigResponse)(nil), // 50: xyz.block.ftl.v1.GetConfigResponse - (*SetConfigRequest)(nil), // 51: xyz.block.ftl.v1.SetConfigRequest - (*SetConfigResponse)(nil), // 52: xyz.block.ftl.v1.SetConfigResponse - (*UnsetConfigRequest)(nil), // 53: xyz.block.ftl.v1.UnsetConfigRequest - (*UnsetConfigResponse)(nil), // 54: xyz.block.ftl.v1.UnsetConfigResponse - (*ListSecretsRequest)(nil), // 55: xyz.block.ftl.v1.ListSecretsRequest - (*ListSecretsResponse)(nil), // 56: xyz.block.ftl.v1.ListSecretsResponse - (*GetSecretRequest)(nil), // 57: xyz.block.ftl.v1.GetSecretRequest - (*GetSecretResponse)(nil), // 58: xyz.block.ftl.v1.GetSecretResponse - (*SetSecretRequest)(nil), // 59: xyz.block.ftl.v1.SetSecretRequest - (*SetSecretResponse)(nil), // 60: xyz.block.ftl.v1.SetSecretResponse - (*UnsetSecretRequest)(nil), // 61: xyz.block.ftl.v1.UnsetSecretRequest - (*UnsetSecretResponse)(nil), // 62: xyz.block.ftl.v1.UnsetSecretResponse - (*ModuleContextResponse_Ref)(nil), // 63: xyz.block.ftl.v1.ModuleContextResponse.Ref - (*ModuleContextResponse_DSN)(nil), // 64: xyz.block.ftl.v1.ModuleContextResponse.DSN - nil, // 65: xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry - nil, // 66: xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry - (*Metadata_Pair)(nil), // 67: xyz.block.ftl.v1.Metadata.Pair - (*CallResponse_Error)(nil), // 68: xyz.block.ftl.v1.CallResponse.Error - nil, // 69: xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry - (*StatusResponse_Controller)(nil), // 70: xyz.block.ftl.v1.StatusResponse.Controller - (*StatusResponse_Runner)(nil), // 71: xyz.block.ftl.v1.StatusResponse.Runner - (*StatusResponse_Deployment)(nil), // 72: xyz.block.ftl.v1.StatusResponse.Deployment - (*StatusResponse_IngressRoute)(nil), // 73: xyz.block.ftl.v1.StatusResponse.IngressRoute - (*StatusResponse_Route)(nil), // 74: xyz.block.ftl.v1.StatusResponse.Route - (*ProcessListResponse_ProcessRunner)(nil), // 75: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner - (*ProcessListResponse_Process)(nil), // 76: xyz.block.ftl.v1.ProcessListResponse.Process - (*ListConfigResponse_Config)(nil), // 77: xyz.block.ftl.v1.ListConfigResponse.Config - (*ListSecretsResponse_Secret)(nil), // 78: xyz.block.ftl.v1.ListSecretsResponse.Secret - (*schema.Ref)(nil), // 79: xyz.block.ftl.v1.schema.Ref - (*durationpb.Duration)(nil), // 80: google.protobuf.Duration - (*schema.Type)(nil), // 81: xyz.block.ftl.v1.schema.Type - (*schema.Schema)(nil), // 82: xyz.block.ftl.v1.schema.Schema - (*schema.Module)(nil), // 83: xyz.block.ftl.v1.schema.Module - (*structpb.Struct)(nil), // 84: google.protobuf.Struct - (*timestamppb.Timestamp)(nil), // 85: google.protobuf.Timestamp + (*GetCertificationRequest)(nil), // 17: xyz.block.ftl.v1.GetCertificationRequest + (*GetCertificationResponse)(nil), // 18: xyz.block.ftl.v1.GetCertificationResponse + (*CertificateContent)(nil), // 19: xyz.block.ftl.v1.CertificateContent + (*Certificate)(nil), // 20: xyz.block.ftl.v1.Certificate + (*GetSchemaRequest)(nil), // 21: xyz.block.ftl.v1.GetSchemaRequest + (*GetSchemaResponse)(nil), // 22: xyz.block.ftl.v1.GetSchemaResponse + (*PullSchemaRequest)(nil), // 23: xyz.block.ftl.v1.PullSchemaRequest + (*PullSchemaResponse)(nil), // 24: xyz.block.ftl.v1.PullSchemaResponse + (*GetArtefactDiffsRequest)(nil), // 25: xyz.block.ftl.v1.GetArtefactDiffsRequest + (*GetArtefactDiffsResponse)(nil), // 26: xyz.block.ftl.v1.GetArtefactDiffsResponse + (*UploadArtefactRequest)(nil), // 27: xyz.block.ftl.v1.UploadArtefactRequest + (*UploadArtefactResponse)(nil), // 28: xyz.block.ftl.v1.UploadArtefactResponse + (*DeploymentArtefact)(nil), // 29: xyz.block.ftl.v1.DeploymentArtefact + (*CreateDeploymentRequest)(nil), // 30: xyz.block.ftl.v1.CreateDeploymentRequest + (*CreateDeploymentResponse)(nil), // 31: xyz.block.ftl.v1.CreateDeploymentResponse + (*GetDeploymentArtefactsRequest)(nil), // 32: xyz.block.ftl.v1.GetDeploymentArtefactsRequest + (*GetDeploymentArtefactsResponse)(nil), // 33: xyz.block.ftl.v1.GetDeploymentArtefactsResponse + (*GetDeploymentRequest)(nil), // 34: xyz.block.ftl.v1.GetDeploymentRequest + (*GetDeploymentResponse)(nil), // 35: xyz.block.ftl.v1.GetDeploymentResponse + (*RegisterRunnerRequest)(nil), // 36: xyz.block.ftl.v1.RegisterRunnerRequest + (*RegisterRunnerResponse)(nil), // 37: xyz.block.ftl.v1.RegisterRunnerResponse + (*UpdateDeployRequest)(nil), // 38: xyz.block.ftl.v1.UpdateDeployRequest + (*UpdateDeployResponse)(nil), // 39: xyz.block.ftl.v1.UpdateDeployResponse + (*ReplaceDeployRequest)(nil), // 40: xyz.block.ftl.v1.ReplaceDeployRequest + (*ReplaceDeployResponse)(nil), // 41: xyz.block.ftl.v1.ReplaceDeployResponse + (*StreamDeploymentLogsRequest)(nil), // 42: xyz.block.ftl.v1.StreamDeploymentLogsRequest + (*StreamDeploymentLogsResponse)(nil), // 43: xyz.block.ftl.v1.StreamDeploymentLogsResponse + (*StatusRequest)(nil), // 44: xyz.block.ftl.v1.StatusRequest + (*StatusResponse)(nil), // 45: xyz.block.ftl.v1.StatusResponse + (*ProcessListRequest)(nil), // 46: xyz.block.ftl.v1.ProcessListRequest + (*ProcessListResponse)(nil), // 47: xyz.block.ftl.v1.ProcessListResponse + (*ResetSubscriptionRequest)(nil), // 48: xyz.block.ftl.v1.ResetSubscriptionRequest + (*ResetSubscriptionResponse)(nil), // 49: xyz.block.ftl.v1.ResetSubscriptionResponse + (*ConfigRef)(nil), // 50: xyz.block.ftl.v1.ConfigRef + (*ListConfigRequest)(nil), // 51: xyz.block.ftl.v1.ListConfigRequest + (*ListConfigResponse)(nil), // 52: xyz.block.ftl.v1.ListConfigResponse + (*GetConfigRequest)(nil), // 53: xyz.block.ftl.v1.GetConfigRequest + (*GetConfigResponse)(nil), // 54: xyz.block.ftl.v1.GetConfigResponse + (*SetConfigRequest)(nil), // 55: xyz.block.ftl.v1.SetConfigRequest + (*SetConfigResponse)(nil), // 56: xyz.block.ftl.v1.SetConfigResponse + (*UnsetConfigRequest)(nil), // 57: xyz.block.ftl.v1.UnsetConfigRequest + (*UnsetConfigResponse)(nil), // 58: xyz.block.ftl.v1.UnsetConfigResponse + (*ListSecretsRequest)(nil), // 59: xyz.block.ftl.v1.ListSecretsRequest + (*ListSecretsResponse)(nil), // 60: xyz.block.ftl.v1.ListSecretsResponse + (*GetSecretRequest)(nil), // 61: xyz.block.ftl.v1.GetSecretRequest + (*GetSecretResponse)(nil), // 62: xyz.block.ftl.v1.GetSecretResponse + (*SetSecretRequest)(nil), // 63: xyz.block.ftl.v1.SetSecretRequest + (*SetSecretResponse)(nil), // 64: xyz.block.ftl.v1.SetSecretResponse + (*UnsetSecretRequest)(nil), // 65: xyz.block.ftl.v1.UnsetSecretRequest + (*UnsetSecretResponse)(nil), // 66: xyz.block.ftl.v1.UnsetSecretResponse + (*ModuleContextResponse_Ref)(nil), // 67: xyz.block.ftl.v1.ModuleContextResponse.Ref + (*ModuleContextResponse_DSN)(nil), // 68: xyz.block.ftl.v1.ModuleContextResponse.DSN + nil, // 69: xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry + nil, // 70: xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry + (*Metadata_Pair)(nil), // 71: xyz.block.ftl.v1.Metadata.Pair + (*CallResponse_Error)(nil), // 72: xyz.block.ftl.v1.CallResponse.Error + nil, // 73: xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry + (*StatusResponse_Controller)(nil), // 74: xyz.block.ftl.v1.StatusResponse.Controller + (*StatusResponse_Runner)(nil), // 75: xyz.block.ftl.v1.StatusResponse.Runner + (*StatusResponse_Deployment)(nil), // 76: xyz.block.ftl.v1.StatusResponse.Deployment + (*StatusResponse_IngressRoute)(nil), // 77: xyz.block.ftl.v1.StatusResponse.IngressRoute + (*StatusResponse_Route)(nil), // 78: xyz.block.ftl.v1.StatusResponse.Route + (*ProcessListResponse_ProcessRunner)(nil), // 79: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner + (*ProcessListResponse_Process)(nil), // 80: xyz.block.ftl.v1.ProcessListResponse.Process + (*ListConfigResponse_Config)(nil), // 81: xyz.block.ftl.v1.ListConfigResponse.Config + (*ListSecretsResponse_Secret)(nil), // 82: xyz.block.ftl.v1.ListSecretsResponse.Secret + (*schema.Ref)(nil), // 83: xyz.block.ftl.v1.schema.Ref + (*durationpb.Duration)(nil), // 84: google.protobuf.Duration + (*schema.Type)(nil), // 85: xyz.block.ftl.v1.schema.Type + (*schema.Schema)(nil), // 86: xyz.block.ftl.v1.schema.Schema + (*schema.Module)(nil), // 87: xyz.block.ftl.v1.schema.Module + (*structpb.Struct)(nil), // 88: google.protobuf.Struct + (*timestamppb.Timestamp)(nil), // 89: google.protobuf.Timestamp } var file_xyz_block_ftl_v1_ftl_proto_depIdxs = []int32{ - 65, // 0: xyz.block.ftl.v1.ModuleContextResponse.configs:type_name -> xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry - 66, // 1: xyz.block.ftl.v1.ModuleContextResponse.secrets:type_name -> xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry - 64, // 2: xyz.block.ftl.v1.ModuleContextResponse.databases:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DSN - 67, // 3: xyz.block.ftl.v1.Metadata.values:type_name -> xyz.block.ftl.v1.Metadata.Pair + 69, // 0: xyz.block.ftl.v1.ModuleContextResponse.configs:type_name -> xyz.block.ftl.v1.ModuleContextResponse.ConfigsEntry + 70, // 1: xyz.block.ftl.v1.ModuleContextResponse.secrets:type_name -> xyz.block.ftl.v1.ModuleContextResponse.SecretsEntry + 68, // 2: xyz.block.ftl.v1.ModuleContextResponse.databases:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DSN + 71, // 3: xyz.block.ftl.v1.Metadata.values:type_name -> xyz.block.ftl.v1.Metadata.Pair 8, // 4: xyz.block.ftl.v1.CallRequest.metadata:type_name -> xyz.block.ftl.v1.Metadata - 79, // 5: xyz.block.ftl.v1.CallRequest.verb:type_name -> xyz.block.ftl.v1.schema.Ref - 68, // 6: xyz.block.ftl.v1.CallResponse.error:type_name -> xyz.block.ftl.v1.CallResponse.Error - 80, // 7: xyz.block.ftl.v1.AcquireLeaseRequest.ttl:type_name -> google.protobuf.Duration - 79, // 8: xyz.block.ftl.v1.SendFSMEventRequest.fsm:type_name -> xyz.block.ftl.v1.schema.Ref - 81, // 9: xyz.block.ftl.v1.SendFSMEventRequest.event:type_name -> xyz.block.ftl.v1.schema.Type - 79, // 10: xyz.block.ftl.v1.PublishEventRequest.topic:type_name -> xyz.block.ftl.v1.schema.Ref - 82, // 11: xyz.block.ftl.v1.GetSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Schema - 83, // 12: xyz.block.ftl.v1.PullSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module - 0, // 13: xyz.block.ftl.v1.PullSchemaResponse.change_type:type_name -> xyz.block.ftl.v1.DeploymentChangeType - 25, // 14: xyz.block.ftl.v1.GetArtefactDiffsResponse.client_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 83, // 15: xyz.block.ftl.v1.CreateDeploymentRequest.schema:type_name -> xyz.block.ftl.v1.schema.Module - 25, // 16: xyz.block.ftl.v1.CreateDeploymentRequest.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 84, // 17: xyz.block.ftl.v1.CreateDeploymentRequest.labels:type_name -> google.protobuf.Struct - 25, // 18: xyz.block.ftl.v1.GetDeploymentArtefactsRequest.have_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 25, // 19: xyz.block.ftl.v1.GetDeploymentArtefactsResponse.artefact:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 83, // 20: xyz.block.ftl.v1.GetDeploymentResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module - 25, // 21: xyz.block.ftl.v1.GetDeploymentResponse.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact - 84, // 22: xyz.block.ftl.v1.RegisterRunnerRequest.labels:type_name -> google.protobuf.Struct - 85, // 23: xyz.block.ftl.v1.StreamDeploymentLogsRequest.time_stamp:type_name -> google.protobuf.Timestamp - 69, // 24: xyz.block.ftl.v1.StreamDeploymentLogsRequest.attributes:type_name -> xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry - 70, // 25: xyz.block.ftl.v1.StatusResponse.controllers:type_name -> xyz.block.ftl.v1.StatusResponse.Controller - 71, // 26: xyz.block.ftl.v1.StatusResponse.runners:type_name -> xyz.block.ftl.v1.StatusResponse.Runner - 72, // 27: xyz.block.ftl.v1.StatusResponse.deployments:type_name -> xyz.block.ftl.v1.StatusResponse.Deployment - 73, // 28: xyz.block.ftl.v1.StatusResponse.ingress_routes:type_name -> xyz.block.ftl.v1.StatusResponse.IngressRoute - 74, // 29: xyz.block.ftl.v1.StatusResponse.routes:type_name -> xyz.block.ftl.v1.StatusResponse.Route - 76, // 30: xyz.block.ftl.v1.ProcessListResponse.processes:type_name -> xyz.block.ftl.v1.ProcessListResponse.Process - 79, // 31: xyz.block.ftl.v1.ResetSubscriptionRequest.subscription:type_name -> xyz.block.ftl.v1.schema.Ref - 1, // 32: xyz.block.ftl.v1.ListConfigRequest.provider:type_name -> xyz.block.ftl.v1.ConfigProvider - 77, // 33: xyz.block.ftl.v1.ListConfigResponse.configs:type_name -> xyz.block.ftl.v1.ListConfigResponse.Config - 46, // 34: xyz.block.ftl.v1.GetConfigRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef - 1, // 35: xyz.block.ftl.v1.SetConfigRequest.provider:type_name -> xyz.block.ftl.v1.ConfigProvider - 46, // 36: xyz.block.ftl.v1.SetConfigRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef - 1, // 37: xyz.block.ftl.v1.UnsetConfigRequest.provider:type_name -> xyz.block.ftl.v1.ConfigProvider - 46, // 38: xyz.block.ftl.v1.UnsetConfigRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef - 2, // 39: xyz.block.ftl.v1.ListSecretsRequest.provider:type_name -> xyz.block.ftl.v1.SecretProvider - 78, // 40: xyz.block.ftl.v1.ListSecretsResponse.secrets:type_name -> xyz.block.ftl.v1.ListSecretsResponse.Secret - 46, // 41: xyz.block.ftl.v1.GetSecretRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef - 2, // 42: xyz.block.ftl.v1.SetSecretRequest.provider:type_name -> xyz.block.ftl.v1.SecretProvider - 46, // 43: xyz.block.ftl.v1.SetSecretRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef - 2, // 44: xyz.block.ftl.v1.UnsetSecretRequest.provider:type_name -> xyz.block.ftl.v1.SecretProvider - 46, // 45: xyz.block.ftl.v1.UnsetSecretRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef - 3, // 46: xyz.block.ftl.v1.ModuleContextResponse.DSN.type:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DBType - 84, // 47: xyz.block.ftl.v1.StatusResponse.Runner.labels:type_name -> google.protobuf.Struct - 84, // 48: xyz.block.ftl.v1.StatusResponse.Deployment.labels:type_name -> google.protobuf.Struct - 83, // 49: xyz.block.ftl.v1.StatusResponse.Deployment.schema:type_name -> xyz.block.ftl.v1.schema.Module - 79, // 50: xyz.block.ftl.v1.StatusResponse.IngressRoute.verb:type_name -> xyz.block.ftl.v1.schema.Ref - 84, // 51: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner.labels:type_name -> google.protobuf.Struct - 84, // 52: xyz.block.ftl.v1.ProcessListResponse.Process.labels:type_name -> google.protobuf.Struct - 75, // 53: xyz.block.ftl.v1.ProcessListResponse.Process.runner:type_name -> xyz.block.ftl.v1.ProcessListResponse.ProcessRunner - 4, // 54: xyz.block.ftl.v1.VerbService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 9, // 55: xyz.block.ftl.v1.VerbService.Call:input_type -> xyz.block.ftl.v1.CallRequest - 4, // 56: xyz.block.ftl.v1.ModuleService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 6, // 57: xyz.block.ftl.v1.ModuleService.GetModuleContext:input_type -> xyz.block.ftl.v1.ModuleContextRequest - 11, // 58: xyz.block.ftl.v1.ModuleService.AcquireLease:input_type -> xyz.block.ftl.v1.AcquireLeaseRequest - 13, // 59: xyz.block.ftl.v1.ModuleService.SendFSMEvent:input_type -> xyz.block.ftl.v1.SendFSMEventRequest - 13, // 60: xyz.block.ftl.v1.ModuleService.SetNextFSMEvent:input_type -> xyz.block.ftl.v1.SendFSMEventRequest - 15, // 61: xyz.block.ftl.v1.ModuleService.PublishEvent:input_type -> xyz.block.ftl.v1.PublishEventRequest - 4, // 62: xyz.block.ftl.v1.ControllerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 42, // 63: xyz.block.ftl.v1.ControllerService.ProcessList:input_type -> xyz.block.ftl.v1.ProcessListRequest - 40, // 64: xyz.block.ftl.v1.ControllerService.Status:input_type -> xyz.block.ftl.v1.StatusRequest - 21, // 65: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:input_type -> xyz.block.ftl.v1.GetArtefactDiffsRequest - 23, // 66: xyz.block.ftl.v1.ControllerService.UploadArtefact:input_type -> xyz.block.ftl.v1.UploadArtefactRequest - 26, // 67: xyz.block.ftl.v1.ControllerService.CreateDeployment:input_type -> xyz.block.ftl.v1.CreateDeploymentRequest - 30, // 68: xyz.block.ftl.v1.ControllerService.GetDeployment:input_type -> xyz.block.ftl.v1.GetDeploymentRequest - 28, // 69: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:input_type -> xyz.block.ftl.v1.GetDeploymentArtefactsRequest - 32, // 70: xyz.block.ftl.v1.ControllerService.RegisterRunner:input_type -> xyz.block.ftl.v1.RegisterRunnerRequest - 34, // 71: xyz.block.ftl.v1.ControllerService.UpdateDeploy:input_type -> xyz.block.ftl.v1.UpdateDeployRequest - 36, // 72: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:input_type -> xyz.block.ftl.v1.ReplaceDeployRequest - 38, // 73: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:input_type -> xyz.block.ftl.v1.StreamDeploymentLogsRequest - 17, // 74: xyz.block.ftl.v1.ControllerService.GetSchema:input_type -> xyz.block.ftl.v1.GetSchemaRequest - 19, // 75: xyz.block.ftl.v1.ControllerService.PullSchema:input_type -> xyz.block.ftl.v1.PullSchemaRequest - 44, // 76: xyz.block.ftl.v1.ControllerService.ResetSubscription:input_type -> xyz.block.ftl.v1.ResetSubscriptionRequest - 4, // 77: xyz.block.ftl.v1.AdminService.Ping:input_type -> xyz.block.ftl.v1.PingRequest - 47, // 78: xyz.block.ftl.v1.AdminService.ConfigList:input_type -> xyz.block.ftl.v1.ListConfigRequest - 49, // 79: xyz.block.ftl.v1.AdminService.ConfigGet:input_type -> xyz.block.ftl.v1.GetConfigRequest - 51, // 80: xyz.block.ftl.v1.AdminService.ConfigSet:input_type -> xyz.block.ftl.v1.SetConfigRequest - 53, // 81: xyz.block.ftl.v1.AdminService.ConfigUnset:input_type -> xyz.block.ftl.v1.UnsetConfigRequest - 55, // 82: xyz.block.ftl.v1.AdminService.SecretsList:input_type -> xyz.block.ftl.v1.ListSecretsRequest - 57, // 83: xyz.block.ftl.v1.AdminService.SecretGet:input_type -> xyz.block.ftl.v1.GetSecretRequest - 59, // 84: xyz.block.ftl.v1.AdminService.SecretSet:input_type -> xyz.block.ftl.v1.SetSecretRequest - 61, // 85: xyz.block.ftl.v1.AdminService.SecretUnset:input_type -> xyz.block.ftl.v1.UnsetSecretRequest - 5, // 86: xyz.block.ftl.v1.VerbService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 10, // 87: xyz.block.ftl.v1.VerbService.Call:output_type -> xyz.block.ftl.v1.CallResponse - 5, // 88: xyz.block.ftl.v1.ModuleService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 7, // 89: xyz.block.ftl.v1.ModuleService.GetModuleContext:output_type -> xyz.block.ftl.v1.ModuleContextResponse - 12, // 90: xyz.block.ftl.v1.ModuleService.AcquireLease:output_type -> xyz.block.ftl.v1.AcquireLeaseResponse - 14, // 91: xyz.block.ftl.v1.ModuleService.SendFSMEvent:output_type -> xyz.block.ftl.v1.SendFSMEventResponse - 14, // 92: xyz.block.ftl.v1.ModuleService.SetNextFSMEvent:output_type -> xyz.block.ftl.v1.SendFSMEventResponse - 16, // 93: xyz.block.ftl.v1.ModuleService.PublishEvent:output_type -> xyz.block.ftl.v1.PublishEventResponse - 5, // 94: xyz.block.ftl.v1.ControllerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 43, // 95: xyz.block.ftl.v1.ControllerService.ProcessList:output_type -> xyz.block.ftl.v1.ProcessListResponse - 41, // 96: xyz.block.ftl.v1.ControllerService.Status:output_type -> xyz.block.ftl.v1.StatusResponse - 22, // 97: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:output_type -> xyz.block.ftl.v1.GetArtefactDiffsResponse - 24, // 98: xyz.block.ftl.v1.ControllerService.UploadArtefact:output_type -> xyz.block.ftl.v1.UploadArtefactResponse - 27, // 99: xyz.block.ftl.v1.ControllerService.CreateDeployment:output_type -> xyz.block.ftl.v1.CreateDeploymentResponse - 31, // 100: xyz.block.ftl.v1.ControllerService.GetDeployment:output_type -> xyz.block.ftl.v1.GetDeploymentResponse - 29, // 101: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:output_type -> xyz.block.ftl.v1.GetDeploymentArtefactsResponse - 33, // 102: xyz.block.ftl.v1.ControllerService.RegisterRunner:output_type -> xyz.block.ftl.v1.RegisterRunnerResponse - 35, // 103: xyz.block.ftl.v1.ControllerService.UpdateDeploy:output_type -> xyz.block.ftl.v1.UpdateDeployResponse - 37, // 104: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:output_type -> xyz.block.ftl.v1.ReplaceDeployResponse - 39, // 105: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:output_type -> xyz.block.ftl.v1.StreamDeploymentLogsResponse - 18, // 106: xyz.block.ftl.v1.ControllerService.GetSchema:output_type -> xyz.block.ftl.v1.GetSchemaResponse - 20, // 107: xyz.block.ftl.v1.ControllerService.PullSchema:output_type -> xyz.block.ftl.v1.PullSchemaResponse - 45, // 108: xyz.block.ftl.v1.ControllerService.ResetSubscription:output_type -> xyz.block.ftl.v1.ResetSubscriptionResponse - 5, // 109: xyz.block.ftl.v1.AdminService.Ping:output_type -> xyz.block.ftl.v1.PingResponse - 48, // 110: xyz.block.ftl.v1.AdminService.ConfigList:output_type -> xyz.block.ftl.v1.ListConfigResponse - 50, // 111: xyz.block.ftl.v1.AdminService.ConfigGet:output_type -> xyz.block.ftl.v1.GetConfigResponse - 52, // 112: xyz.block.ftl.v1.AdminService.ConfigSet:output_type -> xyz.block.ftl.v1.SetConfigResponse - 54, // 113: xyz.block.ftl.v1.AdminService.ConfigUnset:output_type -> xyz.block.ftl.v1.UnsetConfigResponse - 56, // 114: xyz.block.ftl.v1.AdminService.SecretsList:output_type -> xyz.block.ftl.v1.ListSecretsResponse - 58, // 115: xyz.block.ftl.v1.AdminService.SecretGet:output_type -> xyz.block.ftl.v1.GetSecretResponse - 60, // 116: xyz.block.ftl.v1.AdminService.SecretSet:output_type -> xyz.block.ftl.v1.SetSecretResponse - 62, // 117: xyz.block.ftl.v1.AdminService.SecretUnset:output_type -> xyz.block.ftl.v1.UnsetSecretResponse - 86, // [86:118] is the sub-list for method output_type - 54, // [54:86] is the sub-list for method input_type - 54, // [54:54] is the sub-list for extension type_name - 54, // [54:54] is the sub-list for extension extendee - 0, // [0:54] is the sub-list for field type_name + 83, // 5: xyz.block.ftl.v1.CallRequest.verb:type_name -> xyz.block.ftl.v1.schema.Ref + 72, // 6: xyz.block.ftl.v1.CallResponse.error:type_name -> xyz.block.ftl.v1.CallResponse.Error + 84, // 7: xyz.block.ftl.v1.AcquireLeaseRequest.ttl:type_name -> google.protobuf.Duration + 83, // 8: xyz.block.ftl.v1.SendFSMEventRequest.fsm:type_name -> xyz.block.ftl.v1.schema.Ref + 85, // 9: xyz.block.ftl.v1.SendFSMEventRequest.event:type_name -> xyz.block.ftl.v1.schema.Type + 83, // 10: xyz.block.ftl.v1.PublishEventRequest.topic:type_name -> xyz.block.ftl.v1.schema.Ref + 19, // 11: xyz.block.ftl.v1.GetCertificationRequest.request:type_name -> xyz.block.ftl.v1.CertificateContent + 20, // 12: xyz.block.ftl.v1.GetCertificationResponse.certificate:type_name -> xyz.block.ftl.v1.Certificate + 19, // 13: xyz.block.ftl.v1.Certificate.content:type_name -> xyz.block.ftl.v1.CertificateContent + 86, // 14: xyz.block.ftl.v1.GetSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Schema + 87, // 15: xyz.block.ftl.v1.PullSchemaResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module + 0, // 16: xyz.block.ftl.v1.PullSchemaResponse.change_type:type_name -> xyz.block.ftl.v1.DeploymentChangeType + 29, // 17: xyz.block.ftl.v1.GetArtefactDiffsResponse.client_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 87, // 18: xyz.block.ftl.v1.CreateDeploymentRequest.schema:type_name -> xyz.block.ftl.v1.schema.Module + 29, // 19: xyz.block.ftl.v1.CreateDeploymentRequest.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 88, // 20: xyz.block.ftl.v1.CreateDeploymentRequest.labels:type_name -> google.protobuf.Struct + 29, // 21: xyz.block.ftl.v1.GetDeploymentArtefactsRequest.have_artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 29, // 22: xyz.block.ftl.v1.GetDeploymentArtefactsResponse.artefact:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 87, // 23: xyz.block.ftl.v1.GetDeploymentResponse.schema:type_name -> xyz.block.ftl.v1.schema.Module + 29, // 24: xyz.block.ftl.v1.GetDeploymentResponse.artefacts:type_name -> xyz.block.ftl.v1.DeploymentArtefact + 88, // 25: xyz.block.ftl.v1.RegisterRunnerRequest.labels:type_name -> google.protobuf.Struct + 89, // 26: xyz.block.ftl.v1.StreamDeploymentLogsRequest.time_stamp:type_name -> google.protobuf.Timestamp + 73, // 27: xyz.block.ftl.v1.StreamDeploymentLogsRequest.attributes:type_name -> xyz.block.ftl.v1.StreamDeploymentLogsRequest.AttributesEntry + 74, // 28: xyz.block.ftl.v1.StatusResponse.controllers:type_name -> xyz.block.ftl.v1.StatusResponse.Controller + 75, // 29: xyz.block.ftl.v1.StatusResponse.runners:type_name -> xyz.block.ftl.v1.StatusResponse.Runner + 76, // 30: xyz.block.ftl.v1.StatusResponse.deployments:type_name -> xyz.block.ftl.v1.StatusResponse.Deployment + 77, // 31: xyz.block.ftl.v1.StatusResponse.ingress_routes:type_name -> xyz.block.ftl.v1.StatusResponse.IngressRoute + 78, // 32: xyz.block.ftl.v1.StatusResponse.routes:type_name -> xyz.block.ftl.v1.StatusResponse.Route + 80, // 33: xyz.block.ftl.v1.ProcessListResponse.processes:type_name -> xyz.block.ftl.v1.ProcessListResponse.Process + 83, // 34: xyz.block.ftl.v1.ResetSubscriptionRequest.subscription:type_name -> xyz.block.ftl.v1.schema.Ref + 1, // 35: xyz.block.ftl.v1.ListConfigRequest.provider:type_name -> xyz.block.ftl.v1.ConfigProvider + 81, // 36: xyz.block.ftl.v1.ListConfigResponse.configs:type_name -> xyz.block.ftl.v1.ListConfigResponse.Config + 50, // 37: xyz.block.ftl.v1.GetConfigRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 1, // 38: xyz.block.ftl.v1.SetConfigRequest.provider:type_name -> xyz.block.ftl.v1.ConfigProvider + 50, // 39: xyz.block.ftl.v1.SetConfigRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 1, // 40: xyz.block.ftl.v1.UnsetConfigRequest.provider:type_name -> xyz.block.ftl.v1.ConfigProvider + 50, // 41: xyz.block.ftl.v1.UnsetConfigRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 2, // 42: xyz.block.ftl.v1.ListSecretsRequest.provider:type_name -> xyz.block.ftl.v1.SecretProvider + 82, // 43: xyz.block.ftl.v1.ListSecretsResponse.secrets:type_name -> xyz.block.ftl.v1.ListSecretsResponse.Secret + 50, // 44: xyz.block.ftl.v1.GetSecretRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 2, // 45: xyz.block.ftl.v1.SetSecretRequest.provider:type_name -> xyz.block.ftl.v1.SecretProvider + 50, // 46: xyz.block.ftl.v1.SetSecretRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 2, // 47: xyz.block.ftl.v1.UnsetSecretRequest.provider:type_name -> xyz.block.ftl.v1.SecretProvider + 50, // 48: xyz.block.ftl.v1.UnsetSecretRequest.ref:type_name -> xyz.block.ftl.v1.ConfigRef + 3, // 49: xyz.block.ftl.v1.ModuleContextResponse.DSN.type:type_name -> xyz.block.ftl.v1.ModuleContextResponse.DBType + 88, // 50: xyz.block.ftl.v1.StatusResponse.Runner.labels:type_name -> google.protobuf.Struct + 88, // 51: xyz.block.ftl.v1.StatusResponse.Deployment.labels:type_name -> google.protobuf.Struct + 87, // 52: xyz.block.ftl.v1.StatusResponse.Deployment.schema:type_name -> xyz.block.ftl.v1.schema.Module + 83, // 53: xyz.block.ftl.v1.StatusResponse.IngressRoute.verb:type_name -> xyz.block.ftl.v1.schema.Ref + 88, // 54: xyz.block.ftl.v1.ProcessListResponse.ProcessRunner.labels:type_name -> google.protobuf.Struct + 88, // 55: xyz.block.ftl.v1.ProcessListResponse.Process.labels:type_name -> google.protobuf.Struct + 79, // 56: xyz.block.ftl.v1.ProcessListResponse.Process.runner:type_name -> xyz.block.ftl.v1.ProcessListResponse.ProcessRunner + 4, // 57: xyz.block.ftl.v1.VerbService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 9, // 58: xyz.block.ftl.v1.VerbService.Call:input_type -> xyz.block.ftl.v1.CallRequest + 4, // 59: xyz.block.ftl.v1.ModuleService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 6, // 60: xyz.block.ftl.v1.ModuleService.GetModuleContext:input_type -> xyz.block.ftl.v1.ModuleContextRequest + 11, // 61: xyz.block.ftl.v1.ModuleService.AcquireLease:input_type -> xyz.block.ftl.v1.AcquireLeaseRequest + 13, // 62: xyz.block.ftl.v1.ModuleService.SendFSMEvent:input_type -> xyz.block.ftl.v1.SendFSMEventRequest + 13, // 63: xyz.block.ftl.v1.ModuleService.SetNextFSMEvent:input_type -> xyz.block.ftl.v1.SendFSMEventRequest + 15, // 64: xyz.block.ftl.v1.ModuleService.PublishEvent:input_type -> xyz.block.ftl.v1.PublishEventRequest + 4, // 65: xyz.block.ftl.v1.ControllerService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 46, // 66: xyz.block.ftl.v1.ControllerService.ProcessList:input_type -> xyz.block.ftl.v1.ProcessListRequest + 44, // 67: xyz.block.ftl.v1.ControllerService.Status:input_type -> xyz.block.ftl.v1.StatusRequest + 17, // 68: xyz.block.ftl.v1.ControllerService.GetCertification:input_type -> xyz.block.ftl.v1.GetCertificationRequest + 25, // 69: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:input_type -> xyz.block.ftl.v1.GetArtefactDiffsRequest + 27, // 70: xyz.block.ftl.v1.ControllerService.UploadArtefact:input_type -> xyz.block.ftl.v1.UploadArtefactRequest + 30, // 71: xyz.block.ftl.v1.ControllerService.CreateDeployment:input_type -> xyz.block.ftl.v1.CreateDeploymentRequest + 34, // 72: xyz.block.ftl.v1.ControllerService.GetDeployment:input_type -> xyz.block.ftl.v1.GetDeploymentRequest + 32, // 73: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:input_type -> xyz.block.ftl.v1.GetDeploymentArtefactsRequest + 36, // 74: xyz.block.ftl.v1.ControllerService.RegisterRunner:input_type -> xyz.block.ftl.v1.RegisterRunnerRequest + 38, // 75: xyz.block.ftl.v1.ControllerService.UpdateDeploy:input_type -> xyz.block.ftl.v1.UpdateDeployRequest + 40, // 76: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:input_type -> xyz.block.ftl.v1.ReplaceDeployRequest + 42, // 77: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:input_type -> xyz.block.ftl.v1.StreamDeploymentLogsRequest + 21, // 78: xyz.block.ftl.v1.ControllerService.GetSchema:input_type -> xyz.block.ftl.v1.GetSchemaRequest + 23, // 79: xyz.block.ftl.v1.ControllerService.PullSchema:input_type -> xyz.block.ftl.v1.PullSchemaRequest + 48, // 80: xyz.block.ftl.v1.ControllerService.ResetSubscription:input_type -> xyz.block.ftl.v1.ResetSubscriptionRequest + 4, // 81: xyz.block.ftl.v1.AdminService.Ping:input_type -> xyz.block.ftl.v1.PingRequest + 51, // 82: xyz.block.ftl.v1.AdminService.ConfigList:input_type -> xyz.block.ftl.v1.ListConfigRequest + 53, // 83: xyz.block.ftl.v1.AdminService.ConfigGet:input_type -> xyz.block.ftl.v1.GetConfigRequest + 55, // 84: xyz.block.ftl.v1.AdminService.ConfigSet:input_type -> xyz.block.ftl.v1.SetConfigRequest + 57, // 85: xyz.block.ftl.v1.AdminService.ConfigUnset:input_type -> xyz.block.ftl.v1.UnsetConfigRequest + 59, // 86: xyz.block.ftl.v1.AdminService.SecretsList:input_type -> xyz.block.ftl.v1.ListSecretsRequest + 61, // 87: xyz.block.ftl.v1.AdminService.SecretGet:input_type -> xyz.block.ftl.v1.GetSecretRequest + 63, // 88: xyz.block.ftl.v1.AdminService.SecretSet:input_type -> xyz.block.ftl.v1.SetSecretRequest + 65, // 89: xyz.block.ftl.v1.AdminService.SecretUnset:input_type -> xyz.block.ftl.v1.UnsetSecretRequest + 5, // 90: xyz.block.ftl.v1.VerbService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 10, // 91: xyz.block.ftl.v1.VerbService.Call:output_type -> xyz.block.ftl.v1.CallResponse + 5, // 92: xyz.block.ftl.v1.ModuleService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 7, // 93: xyz.block.ftl.v1.ModuleService.GetModuleContext:output_type -> xyz.block.ftl.v1.ModuleContextResponse + 12, // 94: xyz.block.ftl.v1.ModuleService.AcquireLease:output_type -> xyz.block.ftl.v1.AcquireLeaseResponse + 14, // 95: xyz.block.ftl.v1.ModuleService.SendFSMEvent:output_type -> xyz.block.ftl.v1.SendFSMEventResponse + 14, // 96: xyz.block.ftl.v1.ModuleService.SetNextFSMEvent:output_type -> xyz.block.ftl.v1.SendFSMEventResponse + 16, // 97: xyz.block.ftl.v1.ModuleService.PublishEvent:output_type -> xyz.block.ftl.v1.PublishEventResponse + 5, // 98: xyz.block.ftl.v1.ControllerService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 47, // 99: xyz.block.ftl.v1.ControllerService.ProcessList:output_type -> xyz.block.ftl.v1.ProcessListResponse + 45, // 100: xyz.block.ftl.v1.ControllerService.Status:output_type -> xyz.block.ftl.v1.StatusResponse + 18, // 101: xyz.block.ftl.v1.ControllerService.GetCertification:output_type -> xyz.block.ftl.v1.GetCertificationResponse + 26, // 102: xyz.block.ftl.v1.ControllerService.GetArtefactDiffs:output_type -> xyz.block.ftl.v1.GetArtefactDiffsResponse + 28, // 103: xyz.block.ftl.v1.ControllerService.UploadArtefact:output_type -> xyz.block.ftl.v1.UploadArtefactResponse + 31, // 104: xyz.block.ftl.v1.ControllerService.CreateDeployment:output_type -> xyz.block.ftl.v1.CreateDeploymentResponse + 35, // 105: xyz.block.ftl.v1.ControllerService.GetDeployment:output_type -> xyz.block.ftl.v1.GetDeploymentResponse + 33, // 106: xyz.block.ftl.v1.ControllerService.GetDeploymentArtefacts:output_type -> xyz.block.ftl.v1.GetDeploymentArtefactsResponse + 37, // 107: xyz.block.ftl.v1.ControllerService.RegisterRunner:output_type -> xyz.block.ftl.v1.RegisterRunnerResponse + 39, // 108: xyz.block.ftl.v1.ControllerService.UpdateDeploy:output_type -> xyz.block.ftl.v1.UpdateDeployResponse + 41, // 109: xyz.block.ftl.v1.ControllerService.ReplaceDeploy:output_type -> xyz.block.ftl.v1.ReplaceDeployResponse + 43, // 110: xyz.block.ftl.v1.ControllerService.StreamDeploymentLogs:output_type -> xyz.block.ftl.v1.StreamDeploymentLogsResponse + 22, // 111: xyz.block.ftl.v1.ControllerService.GetSchema:output_type -> xyz.block.ftl.v1.GetSchemaResponse + 24, // 112: xyz.block.ftl.v1.ControllerService.PullSchema:output_type -> xyz.block.ftl.v1.PullSchemaResponse + 49, // 113: xyz.block.ftl.v1.ControllerService.ResetSubscription:output_type -> xyz.block.ftl.v1.ResetSubscriptionResponse + 5, // 114: xyz.block.ftl.v1.AdminService.Ping:output_type -> xyz.block.ftl.v1.PingResponse + 52, // 115: xyz.block.ftl.v1.AdminService.ConfigList:output_type -> xyz.block.ftl.v1.ListConfigResponse + 54, // 116: xyz.block.ftl.v1.AdminService.ConfigGet:output_type -> xyz.block.ftl.v1.GetConfigResponse + 56, // 117: xyz.block.ftl.v1.AdminService.ConfigSet:output_type -> xyz.block.ftl.v1.SetConfigResponse + 58, // 118: xyz.block.ftl.v1.AdminService.ConfigUnset:output_type -> xyz.block.ftl.v1.UnsetConfigResponse + 60, // 119: xyz.block.ftl.v1.AdminService.SecretsList:output_type -> xyz.block.ftl.v1.ListSecretsResponse + 62, // 120: xyz.block.ftl.v1.AdminService.SecretGet:output_type -> xyz.block.ftl.v1.GetSecretResponse + 64, // 121: xyz.block.ftl.v1.AdminService.SecretSet:output_type -> xyz.block.ftl.v1.SetSecretResponse + 66, // 122: xyz.block.ftl.v1.AdminService.SecretUnset:output_type -> xyz.block.ftl.v1.UnsetSecretResponse + 90, // [90:123] is the sub-list for method output_type + 57, // [57:90] is the sub-list for method input_type + 57, // [57:57] is the sub-list for extension type_name + 57, // [57:57] is the sub-list for extension extendee + 0, // [0:57] is the sub-list for field type_name } func init() { file_xyz_block_ftl_v1_ftl_proto_init() } @@ -5245,7 +5500,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*GetSchemaRequest); i { + switch v := v.(*GetCertificationRequest); i { case 0: return &v.state case 1: @@ -5257,7 +5512,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*GetSchemaResponse); i { + switch v := v.(*GetCertificationResponse); i { case 0: return &v.state case 1: @@ -5269,7 +5524,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*PullSchemaRequest); i { + switch v := v.(*CertificateContent); i { case 0: return &v.state case 1: @@ -5281,7 +5536,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*PullSchemaResponse); i { + switch v := v.(*Certificate); i { case 0: return &v.state case 1: @@ -5293,7 +5548,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*GetArtefactDiffsRequest); i { + switch v := v.(*GetSchemaRequest); i { case 0: return &v.state case 1: @@ -5305,7 +5560,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*GetArtefactDiffsResponse); i { + switch v := v.(*GetSchemaResponse); i { case 0: return &v.state case 1: @@ -5317,7 +5572,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*UploadArtefactRequest); i { + switch v := v.(*PullSchemaRequest); i { case 0: return &v.state case 1: @@ -5329,7 +5584,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*UploadArtefactResponse); i { + switch v := v.(*PullSchemaResponse); i { case 0: return &v.state case 1: @@ -5341,7 +5596,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*DeploymentArtefact); i { + switch v := v.(*GetArtefactDiffsRequest); i { case 0: return &v.state case 1: @@ -5353,7 +5608,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*CreateDeploymentRequest); i { + switch v := v.(*GetArtefactDiffsResponse); i { case 0: return &v.state case 1: @@ -5365,7 +5620,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*CreateDeploymentResponse); i { + switch v := v.(*UploadArtefactRequest); i { case 0: return &v.state case 1: @@ -5377,7 +5632,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*GetDeploymentArtefactsRequest); i { + switch v := v.(*UploadArtefactResponse); i { case 0: return &v.state case 1: @@ -5389,7 +5644,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*GetDeploymentArtefactsResponse); i { + switch v := v.(*DeploymentArtefact); i { case 0: return &v.state case 1: @@ -5401,7 +5656,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*GetDeploymentRequest); i { + switch v := v.(*CreateDeploymentRequest); i { case 0: return &v.state case 1: @@ -5413,7 +5668,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*GetDeploymentResponse); i { + switch v := v.(*CreateDeploymentResponse); i { case 0: return &v.state case 1: @@ -5425,7 +5680,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*RegisterRunnerRequest); i { + switch v := v.(*GetDeploymentArtefactsRequest); i { case 0: return &v.state case 1: @@ -5437,7 +5692,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*RegisterRunnerResponse); i { + switch v := v.(*GetDeploymentArtefactsResponse); i { case 0: return &v.state case 1: @@ -5449,7 +5704,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*UpdateDeployRequest); i { + switch v := v.(*GetDeploymentRequest); i { case 0: return &v.state case 1: @@ -5461,7 +5716,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*UpdateDeployResponse); i { + switch v := v.(*GetDeploymentResponse); i { case 0: return &v.state case 1: @@ -5473,7 +5728,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*ReplaceDeployRequest); i { + switch v := v.(*RegisterRunnerRequest); i { case 0: return &v.state case 1: @@ -5485,7 +5740,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*ReplaceDeployResponse); i { + switch v := v.(*RegisterRunnerResponse); i { case 0: return &v.state case 1: @@ -5497,7 +5752,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*StreamDeploymentLogsRequest); i { + switch v := v.(*UpdateDeployRequest); i { case 0: return &v.state case 1: @@ -5509,7 +5764,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[35].Exporter = func(v any, i int) any { - switch v := v.(*StreamDeploymentLogsResponse); i { + switch v := v.(*UpdateDeployResponse); i { case 0: return &v.state case 1: @@ -5521,7 +5776,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[36].Exporter = func(v any, i int) any { - switch v := v.(*StatusRequest); i { + switch v := v.(*ReplaceDeployRequest); i { case 0: return &v.state case 1: @@ -5533,7 +5788,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[37].Exporter = func(v any, i int) any { - switch v := v.(*StatusResponse); i { + switch v := v.(*ReplaceDeployResponse); i { case 0: return &v.state case 1: @@ -5545,7 +5800,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[38].Exporter = func(v any, i int) any { - switch v := v.(*ProcessListRequest); i { + switch v := v.(*StreamDeploymentLogsRequest); i { case 0: return &v.state case 1: @@ -5557,7 +5812,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[39].Exporter = func(v any, i int) any { - switch v := v.(*ProcessListResponse); i { + switch v := v.(*StreamDeploymentLogsResponse); i { case 0: return &v.state case 1: @@ -5569,7 +5824,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[40].Exporter = func(v any, i int) any { - switch v := v.(*ResetSubscriptionRequest); i { + switch v := v.(*StatusRequest); i { case 0: return &v.state case 1: @@ -5581,7 +5836,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[41].Exporter = func(v any, i int) any { - switch v := v.(*ResetSubscriptionResponse); i { + switch v := v.(*StatusResponse); i { case 0: return &v.state case 1: @@ -5593,7 +5848,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[42].Exporter = func(v any, i int) any { - switch v := v.(*ConfigRef); i { + switch v := v.(*ProcessListRequest); i { case 0: return &v.state case 1: @@ -5605,7 +5860,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[43].Exporter = func(v any, i int) any { - switch v := v.(*ListConfigRequest); i { + switch v := v.(*ProcessListResponse); i { case 0: return &v.state case 1: @@ -5617,7 +5872,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[44].Exporter = func(v any, i int) any { - switch v := v.(*ListConfigResponse); i { + switch v := v.(*ResetSubscriptionRequest); i { case 0: return &v.state case 1: @@ -5629,7 +5884,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[45].Exporter = func(v any, i int) any { - switch v := v.(*GetConfigRequest); i { + switch v := v.(*ResetSubscriptionResponse); i { case 0: return &v.state case 1: @@ -5641,7 +5896,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[46].Exporter = func(v any, i int) any { - switch v := v.(*GetConfigResponse); i { + switch v := v.(*ConfigRef); i { case 0: return &v.state case 1: @@ -5653,7 +5908,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[47].Exporter = func(v any, i int) any { - switch v := v.(*SetConfigRequest); i { + switch v := v.(*ListConfigRequest); i { case 0: return &v.state case 1: @@ -5665,7 +5920,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[48].Exporter = func(v any, i int) any { - switch v := v.(*SetConfigResponse); i { + switch v := v.(*ListConfigResponse); i { case 0: return &v.state case 1: @@ -5677,7 +5932,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[49].Exporter = func(v any, i int) any { - switch v := v.(*UnsetConfigRequest); i { + switch v := v.(*GetConfigRequest); i { case 0: return &v.state case 1: @@ -5689,7 +5944,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[50].Exporter = func(v any, i int) any { - switch v := v.(*UnsetConfigResponse); i { + switch v := v.(*GetConfigResponse); i { case 0: return &v.state case 1: @@ -5701,7 +5956,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[51].Exporter = func(v any, i int) any { - switch v := v.(*ListSecretsRequest); i { + switch v := v.(*SetConfigRequest); i { case 0: return &v.state case 1: @@ -5713,7 +5968,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[52].Exporter = func(v any, i int) any { - switch v := v.(*ListSecretsResponse); i { + switch v := v.(*SetConfigResponse); i { case 0: return &v.state case 1: @@ -5725,7 +5980,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[53].Exporter = func(v any, i int) any { - switch v := v.(*GetSecretRequest); i { + switch v := v.(*UnsetConfigRequest); i { case 0: return &v.state case 1: @@ -5737,7 +5992,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[54].Exporter = func(v any, i int) any { - switch v := v.(*GetSecretResponse); i { + switch v := v.(*UnsetConfigResponse); i { case 0: return &v.state case 1: @@ -5749,7 +6004,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[55].Exporter = func(v any, i int) any { - switch v := v.(*SetSecretRequest); i { + switch v := v.(*ListSecretsRequest); i { case 0: return &v.state case 1: @@ -5761,7 +6016,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[56].Exporter = func(v any, i int) any { - switch v := v.(*SetSecretResponse); i { + switch v := v.(*ListSecretsResponse); i { case 0: return &v.state case 1: @@ -5773,7 +6028,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[57].Exporter = func(v any, i int) any { - switch v := v.(*UnsetSecretRequest); i { + switch v := v.(*GetSecretRequest); i { case 0: return &v.state case 1: @@ -5785,7 +6040,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[58].Exporter = func(v any, i int) any { - switch v := v.(*UnsetSecretResponse); i { + switch v := v.(*GetSecretResponse); i { case 0: return &v.state case 1: @@ -5797,7 +6052,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[59].Exporter = func(v any, i int) any { - switch v := v.(*ModuleContextResponse_Ref); i { + switch v := v.(*SetSecretRequest); i { case 0: return &v.state case 1: @@ -5809,7 +6064,31 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[60].Exporter = func(v any, i int) any { - switch v := v.(*ModuleContextResponse_DSN); i { + switch v := v.(*SetSecretResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[61].Exporter = func(v any, i int) any { + switch v := v.(*UnsetSecretRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[62].Exporter = func(v any, i int) any { + switch v := v.(*UnsetSecretResponse); i { case 0: return &v.state case 1: @@ -5821,7 +6100,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[63].Exporter = func(v any, i int) any { - switch v := v.(*Metadata_Pair); i { + switch v := v.(*ModuleContextResponse_Ref); i { case 0: return &v.state case 1: @@ -5833,6 +6112,30 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { } } file_xyz_block_ftl_v1_ftl_proto_msgTypes[64].Exporter = func(v any, i int) any { + switch v := v.(*ModuleContextResponse_DSN); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[67].Exporter = func(v any, i int) any { + switch v := v.(*Metadata_Pair); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_xyz_block_ftl_v1_ftl_proto_msgTypes[68].Exporter = func(v any, i int) any { switch v := v.(*CallResponse_Error); i { case 0: return &v.state @@ -5844,7 +6147,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[66].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[70].Exporter = func(v any, i int) any { switch v := v.(*StatusResponse_Controller); i { case 0: return &v.state @@ -5856,7 +6159,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[67].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[71].Exporter = func(v any, i int) any { switch v := v.(*StatusResponse_Runner); i { case 0: return &v.state @@ -5868,7 +6171,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[68].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[72].Exporter = func(v any, i int) any { switch v := v.(*StatusResponse_Deployment); i { case 0: return &v.state @@ -5880,7 +6183,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[69].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[73].Exporter = func(v any, i int) any { switch v := v.(*StatusResponse_IngressRoute); i { case 0: return &v.state @@ -5892,7 +6195,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[70].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[74].Exporter = func(v any, i int) any { switch v := v.(*StatusResponse_Route); i { case 0: return &v.state @@ -5904,7 +6207,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[71].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[75].Exporter = func(v any, i int) any { switch v := v.(*ProcessListResponse_ProcessRunner); i { case 0: return &v.state @@ -5916,7 +6219,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[72].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[76].Exporter = func(v any, i int) any { switch v := v.(*ProcessListResponse_Process); i { case 0: return &v.state @@ -5928,7 +6231,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[73].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[77].Exporter = func(v any, i int) any { switch v := v.(*ListConfigResponse_Config); i { case 0: return &v.state @@ -5940,7 +6243,7 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { return nil } } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[74].Exporter = func(v any, i int) any { + file_xyz_block_ftl_v1_ftl_proto_msgTypes[78].Exporter = func(v any, i int) any { switch v := v.(*ListSecretsResponse_Secret); i { case 0: return &v.state @@ -5958,30 +6261,30 @@ func file_xyz_block_ftl_v1_ftl_proto_init() { (*CallResponse_Body)(nil), (*CallResponse_Error_)(nil), } - file_xyz_block_ftl_v1_ftl_proto_msgTypes[16].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[22].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[23].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[34].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[42].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[43].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[20].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[26].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[27].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[38].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[46].OneofWrappers = []any{} file_xyz_block_ftl_v1_ftl_proto_msgTypes[47].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[49].OneofWrappers = []any{} file_xyz_block_ftl_v1_ftl_proto_msgTypes[51].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[53].OneofWrappers = []any{} file_xyz_block_ftl_v1_ftl_proto_msgTypes[55].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[57].OneofWrappers = []any{} file_xyz_block_ftl_v1_ftl_proto_msgTypes[59].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[64].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[67].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[72].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[73].OneofWrappers = []any{} - file_xyz_block_ftl_v1_ftl_proto_msgTypes[74].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[61].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[63].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[68].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[71].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[76].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[77].OneofWrappers = []any{} + file_xyz_block_ftl_v1_ftl_proto_msgTypes[78].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_xyz_block_ftl_v1_ftl_proto_rawDesc, NumEnums: 4, - NumMessages: 75, + NumMessages: 79, NumExtensions: 0, NumServices: 4, }, diff --git a/backend/protos/xyz/block/ftl/v1/ftl.proto b/backend/protos/xyz/block/ftl/v1/ftl.proto index 5857511fa6..224693dc99 100644 --- a/backend/protos/xyz/block/ftl/v1/ftl.proto +++ b/backend/protos/xyz/block/ftl/v1/ftl.proto @@ -133,6 +133,26 @@ service ModuleService { rpc PublishEvent(PublishEventRequest) returns (PublishEventResponse); } +message GetCertificationRequest { + CertificateContent request = 1; + bytes signature = 2; +} + +message GetCertificationResponse { + Certificate certificate = 1; +} + +// CertificateContent is separated from Certificate to allow for easier signing. +message CertificateContent { + string identity = 1; + bytes public_key = 2; +} + +message Certificate { + CertificateContent content = 1; + bytes controller_signature = 3; +} + enum DeploymentChangeType { DEPLOYMENT_ADDED = 0; DEPLOYMENT_REMOVED = 1; @@ -316,6 +336,9 @@ service ControllerService { rpc Status(StatusRequest) returns (StatusResponse); + // Runner will initially call this to have the controller sign its public key. + rpc GetCertification(GetCertificationRequest) returns (GetCertificationResponse); + // Get list of artefacts that differ between the server and client. rpc GetArtefactDiffs(GetArtefactDiffsRequest) returns (GetArtefactDiffsResponse); diff --git a/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go b/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go index bfcddfac5b..aea60f5f81 100644 --- a/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go +++ b/backend/protos/xyz/block/ftl/v1/ftlv1connect/ftl.connect.go @@ -68,6 +68,9 @@ const ( // ControllerServiceStatusProcedure is the fully-qualified name of the ControllerService's Status // RPC. ControllerServiceStatusProcedure = "/xyz.block.ftl.v1.ControllerService/Status" + // ControllerServiceGetCertificationProcedure is the fully-qualified name of the ControllerService's + // GetCertification RPC. + ControllerServiceGetCertificationProcedure = "/xyz.block.ftl.v1.ControllerService/GetCertification" // ControllerServiceGetArtefactDiffsProcedure is the fully-qualified name of the ControllerService's // GetArtefactDiffs RPC. ControllerServiceGetArtefactDiffsProcedure = "/xyz.block.ftl.v1.ControllerService/GetArtefactDiffs" @@ -434,6 +437,8 @@ type ControllerServiceClient interface { // List "processes" running on the cluster. ProcessList(context.Context, *connect.Request[v1.ProcessListRequest]) (*connect.Response[v1.ProcessListResponse], error) Status(context.Context, *connect.Request[v1.StatusRequest]) (*connect.Response[v1.StatusResponse], error) + // Runner will initially call this to have the controller sign its public key. + GetCertification(context.Context, *connect.Request[v1.GetCertificationRequest]) (*connect.Response[v1.GetCertificationResponse], error) // Get list of artefacts that differ between the server and client. GetArtefactDiffs(context.Context, *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) // Upload an artefact to the server. @@ -498,6 +503,11 @@ func NewControllerServiceClient(httpClient connect.HTTPClient, baseURL string, o baseURL+ControllerServiceStatusProcedure, opts..., ), + getCertification: connect.NewClient[v1.GetCertificationRequest, v1.GetCertificationResponse]( + httpClient, + baseURL+ControllerServiceGetCertificationProcedure, + opts..., + ), getArtefactDiffs: connect.NewClient[v1.GetArtefactDiffsRequest, v1.GetArtefactDiffsResponse]( httpClient, baseURL+ControllerServiceGetArtefactDiffsProcedure, @@ -566,6 +576,7 @@ type controllerServiceClient struct { ping *connect.Client[v1.PingRequest, v1.PingResponse] processList *connect.Client[v1.ProcessListRequest, v1.ProcessListResponse] status *connect.Client[v1.StatusRequest, v1.StatusResponse] + getCertification *connect.Client[v1.GetCertificationRequest, v1.GetCertificationResponse] getArtefactDiffs *connect.Client[v1.GetArtefactDiffsRequest, v1.GetArtefactDiffsResponse] uploadArtefact *connect.Client[v1.UploadArtefactRequest, v1.UploadArtefactResponse] createDeployment *connect.Client[v1.CreateDeploymentRequest, v1.CreateDeploymentResponse] @@ -595,6 +606,11 @@ func (c *controllerServiceClient) Status(ctx context.Context, req *connect.Reque return c.status.CallUnary(ctx, req) } +// GetCertification calls xyz.block.ftl.v1.ControllerService.GetCertification. +func (c *controllerServiceClient) GetCertification(ctx context.Context, req *connect.Request[v1.GetCertificationRequest]) (*connect.Response[v1.GetCertificationResponse], error) { + return c.getCertification.CallUnary(ctx, req) +} + // GetArtefactDiffs calls xyz.block.ftl.v1.ControllerService.GetArtefactDiffs. func (c *controllerServiceClient) GetArtefactDiffs(ctx context.Context, req *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) { return c.getArtefactDiffs.CallUnary(ctx, req) @@ -662,6 +678,8 @@ type ControllerServiceHandler interface { // List "processes" running on the cluster. ProcessList(context.Context, *connect.Request[v1.ProcessListRequest]) (*connect.Response[v1.ProcessListResponse], error) Status(context.Context, *connect.Request[v1.StatusRequest]) (*connect.Response[v1.StatusResponse], error) + // Runner will initially call this to have the controller sign its public key. + GetCertification(context.Context, *connect.Request[v1.GetCertificationRequest]) (*connect.Response[v1.GetCertificationResponse], error) // Get list of artefacts that differ between the server and client. GetArtefactDiffs(context.Context, *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) // Upload an artefact to the server. @@ -722,6 +740,11 @@ func NewControllerServiceHandler(svc ControllerServiceHandler, opts ...connect.H svc.Status, opts..., ) + controllerServiceGetCertificationHandler := connect.NewUnaryHandler( + ControllerServiceGetCertificationProcedure, + svc.GetCertification, + opts..., + ) controllerServiceGetArtefactDiffsHandler := connect.NewUnaryHandler( ControllerServiceGetArtefactDiffsProcedure, svc.GetArtefactDiffs, @@ -790,6 +813,8 @@ func NewControllerServiceHandler(svc ControllerServiceHandler, opts ...connect.H controllerServiceProcessListHandler.ServeHTTP(w, r) case ControllerServiceStatusProcedure: controllerServiceStatusHandler.ServeHTTP(w, r) + case ControllerServiceGetCertificationProcedure: + controllerServiceGetCertificationHandler.ServeHTTP(w, r) case ControllerServiceGetArtefactDiffsProcedure: controllerServiceGetArtefactDiffsHandler.ServeHTTP(w, r) case ControllerServiceUploadArtefactProcedure: @@ -835,6 +860,10 @@ func (UnimplementedControllerServiceHandler) Status(context.Context, *connect.Re return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.ControllerService.Status is not implemented")) } +func (UnimplementedControllerServiceHandler) GetCertification(context.Context, *connect.Request[v1.GetCertificationRequest]) (*connect.Response[v1.GetCertificationResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.ControllerService.GetCertification is not implemented")) +} + func (UnimplementedControllerServiceHandler) GetArtefactDiffs(context.Context, *connect.Request[v1.GetArtefactDiffsRequest]) (*connect.Response[v1.GetArtefactDiffsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("xyz.block.ftl.v1.ControllerService.GetArtefactDiffs is not implemented")) } diff --git a/backend/runner/runner.go b/backend/runner/runner.go index 335f9c3753..51e9c886b3 100644 --- a/backend/runner/runner.go +++ b/backend/runner/runner.go @@ -33,6 +33,7 @@ import ( "github.com/TBD54566975/ftl/backend/schema" "github.com/TBD54566975/ftl/common/plugin" "github.com/TBD54566975/ftl/internal/download" + "github.com/TBD54566975/ftl/internal/identity" "github.com/TBD54566975/ftl/internal/log" "github.com/TBD54566975/ftl/internal/model" "github.com/TBD54566975/ftl/internal/rpc" @@ -41,18 +42,19 @@ import ( ) type Config struct { - Config []string `name:"config" short:"C" help:"Paths to FTL project configuration files." env:"FTL_CONFIG" placeholder:"FILE[,FILE,...]" type:"existingfile"` - Bind *url.URL `help:"Endpoint the Runner should bind to and advertise." default:"http://127.0.0.1:8893" env:"FTL_RUNNER_BIND"` - Key model.RunnerKey `help:"Runner key (auto)."` - ControllerEndpoint *url.URL `name:"ftl-endpoint" help:"Controller endpoint." env:"FTL_ENDPOINT" default:"http://127.0.0.1:8892"` - TemplateDir string `help:"Template directory to copy into each deployment, if any." type:"existingdir"` - DeploymentDir string `help:"Directory to store deployments in." default:"${deploymentdir}"` - DeploymentKeepHistory int `help:"Number of deployments to keep history for." default:"3"` - Language []string `short:"l" help:"Languages the runner supports." env:"FTL_LANGUAGE" default:"go,kotlin,rust,java"` - HeartbeatPeriod time.Duration `help:"Minimum period between heartbeats." default:"3s"` - HeartbeatJitter time.Duration `help:"Jitter to add to heartbeat period." default:"2s"` - Deployment string `help:"The deployment this runner is for." env:"FTL_DEPLOYMENT"` - DebugPort int `help:"The port to use for debugging." env:"FTL_DEBUG_PORT"` + Config []string `name:"config" short:"C" help:"Paths to FTL project configuration files." env:"FTL_CONFIG" placeholder:"FILE[,FILE,...]" type:"existingfile"` + Bind *url.URL `help:"Endpoint the Runner should bind to and advertise." default:"http://127.0.0.1:8893" env:"FTL_RUNNER_BIND"` + Key model.RunnerKey `help:"Runner key (auto)."` + ControllerEndpoint *url.URL `name:"ftl-endpoint" help:"Controller endpoint." env:"FTL_ENDPOINT" default:"http://127.0.0.1:8892"` + ControllerPublicKey *identity.PublicKey `name:"ftl-public-key" help:"Controller public key in Base64. Temporarily optional." env:"FTL_CONTROLLER_PUBLIC_KEY"` + TemplateDir string `help:"Template directory to copy into each deployment, if any." type:"existingdir"` + DeploymentDir string `help:"Directory to store deployments in." default:"${deploymentdir}"` + DeploymentKeepHistory int `help:"Number of deployments to keep history for." default:"3"` + Language []string `short:"l" help:"Languages the runner supports." env:"FTL_LANGUAGE" default:"go,kotlin,rust,java"` + HeartbeatPeriod time.Duration `help:"Minimum period between heartbeats." default:"3s"` + HeartbeatJitter time.Duration `help:"Jitter to add to heartbeat period." default:"2s"` + Deployment string `help:"The deployment this runner is for." env:"FTL_DEPLOYMENT"` + DebugPort int `help:"The port to use for debugging." env:"FTL_DEBUG_PORT"` } func Start(ctx context.Context, config Config) error { @@ -98,8 +100,19 @@ func Start(ctx context.Context, config Config) error { return fmt.Errorf("failed to marshal labels: %w", err) } + // TODO: Retry loop, RetryStreamingClientStreamish + var identityStore *identity.Store + if config.ControllerPublicKey != nil { + identityStore, err = newIdentityStore(ctx, config, key, controllerClient) + if err != nil { + observability.Runner.StartupFailed(ctx) + return fmt.Errorf("failed to create identity store: %w", err) + } + } + svc := &Service{ key: key, + identity: identityStore, config: config, controllerClient: controllerClient, labels: labels, @@ -127,6 +140,42 @@ func Start(ctx context.Context, config Config) error { ) } +func newIdentityStore(ctx context.Context, config Config, key model.RunnerKey, controllerClient ftlv1connect.ControllerServiceClient) (*identity.Store, error) { + controllerVerifier, err := identity.NewVerifier(*config.ControllerPublicKey) + if err != nil { + return nil, fmt.Errorf("failed to create controller verifier: %w", err) + } + + identityStore, err := identity.NewStoreNewKeys(identity.NewRunner(key, config.Deployment)) + if err != nil { + return nil, fmt.Errorf("failed to create identity store: %w", err) + } + + certRequest, err := identityStore.NewGetCertificateRequest() + if err != nil { + return nil, fmt.Errorf("failed to create certificate request: %w", err) + } + + certResp, err := controllerClient.GetCertification(ctx, connect.NewRequest(&certRequest)) + if err != nil { + observability.Runner.StartupFailed(ctx) + return nil, fmt.Errorf("failed to get certificate: %w", err) + } + + certificate, err := identity.NewCertificate(certResp.Msg.Certificate) + if err != nil { + observability.Runner.StartupFailed(ctx) + return nil, fmt.Errorf("failed to create certificate: %w", err) + } + + if err = identityStore.SetCertificate(certificate, controllerVerifier); err != nil { + observability.Runner.StartupFailed(ctx) + return nil, fmt.Errorf("failed to set certificate: %w", err) + } + + return identityStore, nil +} + // manageDeploymentDirectory ensures the deployment directory exists and removes old deployments. func manageDeploymentDirectory(logger *log.Logger, config Config) error { logger.Debugf("Deployment directory: %s", config.DeploymentDir) @@ -193,6 +242,7 @@ type deployment struct { type Service struct { key model.RunnerKey + identity *identity.Store lock sync.Mutex deployment atomic.Value[optional.Option[*deployment]] diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/ftl_connect.ts b/frontend/console/src/protos/xyz/block/ftl/v1/ftl_connect.ts index dd2235c2c9..9d06b8b34b 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/ftl_connect.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/ftl_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { AcquireLeaseRequest, AcquireLeaseResponse, CallRequest, CallResponse, CreateDeploymentRequest, CreateDeploymentResponse, GetArtefactDiffsRequest, GetArtefactDiffsResponse, GetConfigRequest, GetConfigResponse, GetDeploymentArtefactsRequest, GetDeploymentArtefactsResponse, GetDeploymentRequest, GetDeploymentResponse, GetSchemaRequest, GetSchemaResponse, GetSecretRequest, GetSecretResponse, ListConfigRequest, ListConfigResponse, ListSecretsRequest, ListSecretsResponse, ModuleContextRequest, ModuleContextResponse, PingRequest, PingResponse, ProcessListRequest, ProcessListResponse, PublishEventRequest, PublishEventResponse, PullSchemaRequest, PullSchemaResponse, RegisterRunnerRequest, RegisterRunnerResponse, ReplaceDeployRequest, ReplaceDeployResponse, ResetSubscriptionRequest, ResetSubscriptionResponse, SendFSMEventRequest, SendFSMEventResponse, SetConfigRequest, SetConfigResponse, SetSecretRequest, SetSecretResponse, StatusRequest, StatusResponse, StreamDeploymentLogsRequest, StreamDeploymentLogsResponse, UnsetConfigRequest, UnsetConfigResponse, UnsetSecretRequest, UnsetSecretResponse, UpdateDeployRequest, UpdateDeployResponse, UploadArtefactRequest, UploadArtefactResponse } from "./ftl_pb.js"; +import { AcquireLeaseRequest, AcquireLeaseResponse, CallRequest, CallResponse, CreateDeploymentRequest, CreateDeploymentResponse, GetArtefactDiffsRequest, GetArtefactDiffsResponse, GetCertificationRequest, GetCertificationResponse, GetConfigRequest, GetConfigResponse, GetDeploymentArtefactsRequest, GetDeploymentArtefactsResponse, GetDeploymentRequest, GetDeploymentResponse, GetSchemaRequest, GetSchemaResponse, GetSecretRequest, GetSecretResponse, ListConfigRequest, ListConfigResponse, ListSecretsRequest, ListSecretsResponse, ModuleContextRequest, ModuleContextResponse, PingRequest, PingResponse, ProcessListRequest, ProcessListResponse, PublishEventRequest, PublishEventResponse, PullSchemaRequest, PullSchemaResponse, RegisterRunnerRequest, RegisterRunnerResponse, ReplaceDeployRequest, ReplaceDeployResponse, ResetSubscriptionRequest, ResetSubscriptionResponse, SendFSMEventRequest, SendFSMEventResponse, SetConfigRequest, SetConfigResponse, SetSecretRequest, SetSecretResponse, StatusRequest, StatusResponse, StreamDeploymentLogsRequest, StreamDeploymentLogsResponse, UnsetConfigRequest, UnsetConfigResponse, UnsetSecretRequest, UnsetSecretResponse, UpdateDeployRequest, UpdateDeployResponse, UploadArtefactRequest, UploadArtefactResponse } from "./ftl_pb.js"; import { MethodIdempotency, MethodKind } from "@bufbuild/protobuf"; /** @@ -158,6 +158,17 @@ export const ControllerService = { O: StatusResponse, kind: MethodKind.Unary, }, + /** + * Runner will initially call this to have the controller sign its public key. + * + * @generated from rpc xyz.block.ftl.v1.ControllerService.GetCertification + */ + getCertification: { + name: "GetCertification", + I: GetCertificationRequest, + O: GetCertificationResponse, + kind: MethodKind.Unary, + }, /** * Get list of artefacts that differ between the server and client. * diff --git a/frontend/console/src/protos/xyz/block/ftl/v1/ftl_pb.ts b/frontend/console/src/protos/xyz/block/ftl/v1/ftl_pb.ts index 65fb1a3876..288008a6a7 100644 --- a/frontend/console/src/protos/xyz/block/ftl/v1/ftl_pb.ts +++ b/frontend/console/src/protos/xyz/block/ftl/v1/ftl_pb.ts @@ -854,6 +854,174 @@ export class PublishEventResponse extends Message { } } +/** + * @generated from message xyz.block.ftl.v1.GetCertificationRequest + */ +export class GetCertificationRequest extends Message { + /** + * @generated from field: xyz.block.ftl.v1.CertificateContent request = 1; + */ + request?: CertificateContent; + + /** + * @generated from field: bytes signature = 2; + */ + signature = new Uint8Array(0); + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.GetCertificationRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "request", kind: "message", T: CertificateContent }, + { no: 2, name: "signature", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetCertificationRequest { + return new GetCertificationRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetCertificationRequest { + return new GetCertificationRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetCertificationRequest { + return new GetCertificationRequest().fromJsonString(jsonString, options); + } + + static equals(a: GetCertificationRequest | PlainMessage | undefined, b: GetCertificationRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(GetCertificationRequest, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.GetCertificationResponse + */ +export class GetCertificationResponse extends Message { + /** + * @generated from field: xyz.block.ftl.v1.Certificate certificate = 1; + */ + certificate?: Certificate; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.GetCertificationResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "certificate", kind: "message", T: Certificate }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): GetCertificationResponse { + return new GetCertificationResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): GetCertificationResponse { + return new GetCertificationResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): GetCertificationResponse { + return new GetCertificationResponse().fromJsonString(jsonString, options); + } + + static equals(a: GetCertificationResponse | PlainMessage | undefined, b: GetCertificationResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(GetCertificationResponse, a, b); + } +} + +/** + * CertificateContent is separated from Certificate to allow for easier signing. + * + * @generated from message xyz.block.ftl.v1.CertificateContent + */ +export class CertificateContent extends Message { + /** + * @generated from field: string identity = 1; + */ + identity = ""; + + /** + * @generated from field: bytes public_key = 2; + */ + publicKey = new Uint8Array(0); + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.CertificateContent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "identity", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + { no: 2, name: "public_key", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): CertificateContent { + return new CertificateContent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): CertificateContent { + return new CertificateContent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): CertificateContent { + return new CertificateContent().fromJsonString(jsonString, options); + } + + static equals(a: CertificateContent | PlainMessage | undefined, b: CertificateContent | PlainMessage | undefined): boolean { + return proto3.util.equals(CertificateContent, a, b); + } +} + +/** + * @generated from message xyz.block.ftl.v1.Certificate + */ +export class Certificate extends Message { + /** + * @generated from field: xyz.block.ftl.v1.CertificateContent content = 1; + */ + content?: CertificateContent; + + /** + * @generated from field: bytes controller_signature = 3; + */ + controllerSignature = new Uint8Array(0); + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "xyz.block.ftl.v1.Certificate"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "content", kind: "message", T: CertificateContent }, + { no: 3, name: "controller_signature", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): Certificate { + return new Certificate().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): Certificate { + return new Certificate().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): Certificate { + return new Certificate().fromJsonString(jsonString, options); + } + + static equals(a: Certificate | PlainMessage | undefined, b: Certificate | PlainMessage | undefined): boolean { + return proto3.util.equals(Certificate, a, b); + } +} + /** * @generated from message xyz.block.ftl.v1.GetSchemaRequest */ diff --git a/internal/identity/api.go b/internal/identity/api.go index 5ae2405965..13cb5d2c74 100644 --- a/internal/identity/api.go +++ b/internal/identity/api.go @@ -1,21 +1,51 @@ package identity -type KeyPair interface { - Signer() (Signer, error) - Verifier() (Verifier, error) - Public() ([]byte, error) -} +import ( + "encoding/base64" + "fmt" + "reflect" -type Signer interface { - Sign(data []byte) (*SignedData, error) - Public() ([]byte, error) -} + "github.com/alecthomas/kong" +) type SignedData struct { - Data []byte + // data is hidden here so that the only way to access it is to verify the signature. + data []byte Signature []byte } -type Verifier interface { - Verify(signedData SignedData) error +// NewSignedData ensures that the data is signed correctly. +func NewSignedData(verifier Verifier, data, signature []byte) (SignedData, error) { + signedData := SignedData{data: data, Signature: signature} + + _, err := verifier.Verify(signedData) + if err != nil { + return SignedData{}, fmt.Errorf("failed to verify data: %w", err) + } + + return signedData, nil +} + +type PublicKey struct { + Bytes []byte +} + +func NewPublicKey(b []byte) PublicKey { + return PublicKey{Bytes: b} +} + +func (pk PublicKey) Decode(ctx *kong.DecodeContext) error { + var b64 string + err := ctx.Scan.PopValueInto("string", &b64) + if err != nil { + return fmt.Errorf("failed to pop public key: %w", err) + } + + pk.Bytes, err = base64.StdEncoding.DecodeString(b64) + if err != nil { + return fmt.Errorf("failed to decode base64 public key: %w", err) + } + + ctx.Value.Target.Set(reflect.ValueOf(pk)) + return nil } diff --git a/internal/identity/certificate.go b/internal/identity/certificate.go new file mode 100644 index 0000000000..45379aa4cb --- /dev/null +++ b/internal/identity/certificate.go @@ -0,0 +1,76 @@ +package identity + +import ( + "fmt" + + "google.golang.org/protobuf/proto" + + ftlv1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" +) + +type CertificateData struct { + ID Identity + NodePublicKey PublicKey +} + +func (c CertificateData) String() string { + return fmt.Sprintf("CertData(%s %x)", c.ID, c.NodePublicKey) +} + +type Certificate struct { + SignedData +} + +func NewCertificate(cert *ftlv1.Certificate) (Certificate, error) { + data, err := proto.Marshal(cert.Content) + if err != nil { + return Certificate{}, fmt.Errorf("failed to marshal certificate: %w", err) + } + + return Certificate{SignedData: SignedData{data: data, Signature: cert.ControllerSignature}}, nil +} + +func (c Certificate) String() string { + return fmt.Sprintf("Certificate(%x %x)", c.data, c.Signature) +} + +// CertifiedSignedData is sent by a node and proves identity based on a certificate. +type CertifiedSignedData struct { + Certificate Certificate + SignedData SignedData +} + +func (c CertifiedSignedData) String() string { + return fmt.Sprintf("CertifiedSignedData data:%x signature:%x (%s)", c.SignedData.data, c.SignedData.Signature, c.Certificate) +} + +// Verify against the CA and then the node certificate. Only return the data if both are valid. +func (c CertifiedSignedData) Verify(caVerifier Verifier) (Identity, []byte, error) { + // Verify against the CA certificate. + data, err := caVerifier.Verify(c.Certificate.SignedData) + if err != nil { + return nil, nil, fmt.Errorf("failed to verify certificate: %w", err) + } + + var certificateContent ftlv1.CertificateContent + if err = proto.Unmarshal(data, &certificateContent); err != nil { + return nil, nil, fmt.Errorf("failed to unmarshal certificate content: %w", err) + } + + identity, err := Parse(certificateContent.Identity) + if err != nil { + return nil, nil, fmt.Errorf("failed to parse identity: %w", err) + } + + nodePublicKey := PublicKey{Bytes: certificateContent.PublicKey} + nodeVerifier, err := NewVerifier(nodePublicKey) + if err != nil { + return nil, nil, fmt.Errorf("failed to create verifier: %w", err) + } + payload, err := nodeVerifier.Verify(c.SignedData) + if err != nil { + return nil, nil, fmt.Errorf("failed to verify signed data: %w", err) + } + + return identity, payload, nil +} diff --git a/internal/identity/identity.go b/internal/identity/identity.go new file mode 100644 index 0000000000..7ef72391eb --- /dev/null +++ b/internal/identity/identity.go @@ -0,0 +1,199 @@ +package identity + +import ( + "bytes" + "fmt" + "strings" + + "github.com/alecthomas/types/optional" + "google.golang.org/protobuf/proto" + + v1 "github.com/TBD54566975/ftl/backend/protos/xyz/block/ftl/v1" + "github.com/TBD54566975/ftl/internal/model" +) + +type Identity interface { + String() string +} + +var _ Identity = Controller{} + +type Controller struct{} + +func NewController() Controller { + return Controller{} +} + +func (c Controller) String() string { + return "ca" +} + +var _ Identity = Runner{} + +// Runner identity +// TODO: Maybe use KeyType[T any, TP keyPayloadConstraint[T]]? +type Runner struct { + Key model.RunnerKey + Module string +} + +func NewRunner(key model.RunnerKey, module string) Runner { + return Runner{ + Key: key, + Module: module, + } +} + +func (r Runner) String() string { + return fmt.Sprintf("%s:%s", r.Key, r.Module) +} + +func Parse(s string) (Identity, error) { + if s == "" { + return nil, fmt.Errorf("empty identity") + } + parts := strings.Split(s, ":") + + if parts[0] == "ca" && len(parts) == 1 { + return Controller{}, nil + } + + key, err := model.ParseRunnerKey(parts[0]) + if err != nil { + return nil, fmt.Errorf("failed to parse key: %w", err) + } + + return NewRunner(key, parts[1]), nil +} + +// Store is held by a node and contains the node's identity, key pair, signer, and certificate. +type Store struct { + Identity Identity + KeyPair KeyPair + Signer Signer + Certificate optional.Option[Certificate] + ControllerVerifier optional.Option[Verifier] +} + +func NewStoreNewKeys(identity Identity) (*Store, error) { + pair, err := GenerateKeyPair() + if err != nil { + return nil, fmt.Errorf("failed to generate key pair: %w", err) + } + + signer, err := pair.Signer() + if err != nil { + return nil, fmt.Errorf("failed to get signer: %w", err) + } + + return &Store{ + Identity: identity, + KeyPair: pair, + Signer: signer, + }, nil +} + +func (s *Store) NewGetCertificateRequest() (v1.GetCertificationRequest, error) { + publicKey, err := s.KeyPair.Public() + if err != nil { + return v1.GetCertificationRequest{}, fmt.Errorf("failed to get public key: %w", err) + } + + req := &v1.CertificateContent{ + Identity: s.Identity.String(), + PublicKey: publicKey.Bytes, + } + data, err := proto.Marshal(req) + if err != nil { + return v1.GetCertificationRequest{}, fmt.Errorf("failed to marshal cert request: %w", err) + } + + signed, err := s.Signer.Sign(data) + if err != nil { + return v1.GetCertificationRequest{}, fmt.Errorf("failed to sign cert request: %w", err) + } + + return v1.GetCertificationRequest{ + Request: req, + Signature: signed.Signature, + }, nil +} + +func (s *Store) SignCertificateRequest(req *v1.GetCertificationRequest) (Certificate, error) { + // Ensure the pubkey matches the signature. + verifier, err := NewVerifier(NewPublicKey(req.Request.PublicKey)) + if err != nil { + return Certificate{}, fmt.Errorf("failed to create verifier: %w", err) + } + data, err := proto.Marshal(req.Request) + if err != nil { + return Certificate{}, fmt.Errorf("failed to marshal request: %w", err) + } + signedData, err := NewSignedData(verifier, data, req.Signature) + if err != nil { + return Certificate{}, fmt.Errorf("failed to create signed data: %w", err) + } + _, err = verifier.Verify(signedData) + if err != nil { + return Certificate{}, fmt.Errorf("failed to verify signature: %w", err) + } + + // Discard the node signature as we have verified it. + // This contains the node's identity and public key. + certificateData, err := proto.Marshal(req.Request) + if err != nil { + return Certificate{}, fmt.Errorf("failed to marshal certificate data: %w", err) + } + signedData, err = s.Signer.Sign(certificateData) + if err != nil { + return Certificate{}, fmt.Errorf("failed to create ca signed data for cert: %w", err) + } + + return Certificate{ + SignedData: signedData, + }, nil +} + +func (s *Store) SetCertificate(cert Certificate, controllerVerifier Verifier) error { + data, err := controllerVerifier.Verify(cert.SignedData) + if err != nil { + return fmt.Errorf("failed to verify controller certificate: %w", err) + } + + // Verify the certificate is for us, checking identity and public key. + req := &v1.CertificateContent{} + if err := proto.Unmarshal(data, req); err != nil { + return fmt.Errorf("failed to unmarshal cert request: %w", err) + } + if req.Identity != s.Identity.String() { + return fmt.Errorf("certificate identity does not match: %s != %s", req.Identity, s.Identity.String()) + } + myPub, err := s.KeyPair.Public() + if err != nil { + return fmt.Errorf("failed to get public key: %w", err) + } + if !bytes.Equal(myPub.Bytes, req.PublicKey) { + return fmt.Errorf("certificate public key does not match") + } + + s.Certificate = optional.Some(cert) + s.ControllerVerifier = optional.Some(controllerVerifier) + return nil +} + +func (s *Store) CertifiedSign(data []byte) (CertifiedSignedData, error) { + certificate, ok := s.Certificate.Get() + if !ok { + return CertifiedSignedData{}, fmt.Errorf("certificate not set") + } + + signedData, err := s.Signer.Sign(data) + if err != nil { + return CertifiedSignedData{}, fmt.Errorf("failed to sign data: %w", err) + } + + return CertifiedSignedData{ + Certificate: certificate, + SignedData: signedData, + }, nil +} diff --git a/internal/identity/identity_test.go b/internal/identity/identity_test.go index 93b663d80e..33ca07f760 100644 --- a/internal/identity/identity_test.go +++ b/internal/identity/identity_test.go @@ -4,10 +4,12 @@ import ( "testing" "github.com/alecthomas/assert/v2" + + "github.com/TBD54566975/ftl/internal/model" ) func TestBasics(t *testing.T) { - keyPair, err := GenerateTinkKeyPair() + keyPair, err := GenerateKeyPair() assert.NoError(t, err) signer, err := keyPair.Signer() @@ -20,11 +22,51 @@ func TestBasics(t *testing.T) { verifier, err := keyPair.Verifier() assert.NoError(t, err) - err = verifier.Verify(*signedData) + data, err = verifier.Verify(signedData) assert.NoError(t, err) + assert.Equal(t, "hunter2", string(data)) // Now fail it just for sanity signedData.Signature[0] = ^signedData.Signature[0] - err = verifier.Verify(*signedData) + _, err = verifier.Verify(signedData) assert.EqualError(t, err, "failed to verify signature: verifier_factory: invalid signature") } + +func TestCertificate(t *testing.T) { + // Set up CA + caIdent := NewController() + caStore, err := NewStoreNewKeys(caIdent) + assert.NoError(t, err) + caVerifier, err := caStore.KeyPair.Verifier() + assert.NoError(t, err) + + // Runner generates a key pair and identity for signing + runnerKey := model.NewRunnerKey("hostname", "1234") + runnerIdent := NewRunner(runnerKey, "echo") + assert.NoError(t, err) + runnerStore, err := NewStoreNewKeys(runnerIdent) + assert.NoError(t, err) + request, err := runnerStore.NewGetCertificateRequest() + assert.NoError(t, err) + + // Hand wave "send the request to the CA" + // Hand wave "check the ID and module" + + certificate, err := caStore.SignCertificateRequest(&request) + assert.NoError(t, err) + + // Hand wave "send the certificate to the runner" + + err = runnerStore.SetCertificate(certificate, caVerifier) + assert.NoError(t, err) + + // Runner constructs a certified message + message := []byte("hello") + certified, err := runnerStore.CertifiedSign(message) + assert.NoError(t, err) + + id, data, err := certified.Verify(caVerifier) + assert.NoError(t, err) + assert.Equal(t, "hello", string(data)) + assert.Equal(t, runnerIdent.String(), id.String()) +} diff --git a/internal/identity/sign.go b/internal/identity/sign.go new file mode 100644 index 0000000000..2fea3711cd --- /dev/null +++ b/internal/identity/sign.go @@ -0,0 +1,132 @@ +package identity + +import ( + "bytes" + "fmt" + + "github.com/tink-crypto/tink-go/v2/keyset" + "github.com/tink-crypto/tink-go/v2/signature" + "github.com/tink-crypto/tink-go/v2/tink" +) + +type Signer struct { + signer tink.Signer +} + +func (k Signer) Sign(data []byte) (SignedData, error) { + bytes, err := k.signer.Sign(data) + if err != nil { + return SignedData{}, fmt.Errorf("failed to sign data: %w", err) + } + + return SignedData{ + data: data, + Signature: bytes, + }, nil +} + +func (k Signer) Public() (PublicKey, error) { + panic("implement me") +} + +type Verifier struct { + verifier tink.Verifier +} + +func NewVerifier(publicKey PublicKey) (Verifier, error) { + reader := keyset.NewBinaryReader(bytes.NewReader(publicKey.Bytes)) + public, err := keyset.ReadWithNoSecrets(reader) + if err != nil { + return Verifier{}, fmt.Errorf("failed to read public keyset: %w", err) + } + + verifier, err := signature.NewVerifier(public) + if err != nil { + return Verifier{}, fmt.Errorf("failed to create verifier: %w", err) + } + + return Verifier{ + verifier: verifier, + }, nil +} + +func (k Verifier) Verify(signedData SignedData) ([]byte, error) { + err := k.verifier.Verify(signedData.Signature, signedData.data) + if err != nil { + return nil, fmt.Errorf("failed to verify signature: %w", err) + } + + return signedData.data, nil +} + +type KeyPair struct { + keysetHandle keyset.Handle +} + +func (t KeyPair) Signer() (Signer, error) { + signer, err := signature.NewSigner(&t.keysetHandle) + if err != nil { + return Signer{}, fmt.Errorf("failed to create signer: %w", err) + } + + return Signer{ + signer: signer, + }, nil +} + +func (t KeyPair) Verifier() (Verifier, error) { + public, err := t.keysetHandle.Public() + if err != nil { + return Verifier{}, fmt.Errorf("failed to get public keyset from keyset handle: %w", err) + } + + verifier, err := signature.NewVerifier(public) + if err != nil { + return Verifier{}, fmt.Errorf("failed to create verifier: %w", err) + } + + return Verifier{ + verifier: verifier, + }, nil +} + +func (t KeyPair) Public() (PublicKey, error) { + // TODO: Maybe slow. Cache it. + publicHandle, err := t.keysetHandle.Public() + if err != nil { + return PublicKey{}, fmt.Errorf("failed to get public keyset from keyset handle: %w", err) + } + + buf := new(bytes.Buffer) + writer := keyset.NewBinaryWriter(buf) + if err := publicHandle.WriteWithNoSecrets(writer); err != nil { + return PublicKey{}, fmt.Errorf("failed to write public keyset to buffer: %w", err) + } + + publicKey := PublicKey{ + Bytes: buf.Bytes(), + } + return publicKey, nil +} + +func (t KeyPair) Handle() keyset.Handle { + return t.keysetHandle +} + +// GenerateKeyPair creates a new key pair using Tink's ED25519 key template +func GenerateKeyPair() (KeyPair, error) { + keysetHandle, err := keyset.NewHandle(signature.ED25519KeyTemplate()) + if err != nil { + return KeyPair{}, fmt.Errorf("failed to create keyset handle: %w", err) + } + + return KeyPair{ + keysetHandle: *keysetHandle, + }, nil +} + +func NewKeyPair(handle keyset.Handle) KeyPair { + return KeyPair{ + keysetHandle: handle, + } +} diff --git a/internal/identity/tinksign.go b/internal/identity/tinksign.go deleted file mode 100644 index 5263e53918..0000000000 --- a/internal/identity/tinksign.go +++ /dev/null @@ -1,119 +0,0 @@ -package identity - -import ( - "bytes" - "fmt" - - "github.com/tink-crypto/tink-go/v2/keyset" - "github.com/tink-crypto/tink-go/v2/signature" - "github.com/tink-crypto/tink-go/v2/tink" -) - -var _ Signer = &TinkSigner{} - -type TinkSigner struct { - signer tink.Signer -} - -func (k TinkSigner) Sign(data []byte) (*SignedData, error) { - bytes, err := k.signer.Sign(data) - if err != nil { - return nil, fmt.Errorf("failed to sign data: %w", err) - } - - return &SignedData{ - Data: data, - Signature: bytes, - }, nil -} - -func (k TinkSigner) Public() ([]byte, error) { - panic("implement me") -} - -var _ Verifier = &TinkVerifier{} - -type TinkVerifier struct { - verifier tink.Verifier -} - -func (k TinkVerifier) Verify(signedData SignedData) error { - err := k.verifier.Verify(signedData.Signature, signedData.Data) - if err != nil { - return fmt.Errorf("failed to verify signature: %w", err) - } - - return nil -} - -var _ KeyPair = &TinkKeyPair{} - -type TinkKeyPair struct { - keysetHandle keyset.Handle -} - -func (t TinkKeyPair) Signer() (Signer, error) { - signer, err := signature.NewSigner(&t.keysetHandle) - if err != nil { - return nil, fmt.Errorf("failed to create signer: %w", err) - } - - return TinkSigner{ - signer: signer, - }, nil -} - -func (t TinkKeyPair) Verifier() (Verifier, error) { - public, err := t.keysetHandle.Public() - if err != nil { - return nil, fmt.Errorf("failed to get public keyset from keyset handle: %w", err) - } - - verifier, err := signature.NewVerifier(public) - if err != nil { - return nil, fmt.Errorf("failed to create verifier: %w", err) - } - - return &TinkVerifier{ - verifier: verifier, - }, nil -} - -func (t TinkKeyPair) Public() ([]byte, error) { - publicHandle, err := t.keysetHandle.Public() - if err != nil { - return nil, fmt.Errorf("failed to get public keyset from keyset handle: %w", err) - } - - buf := new(bytes.Buffer) - writer := keyset.NewBinaryWriter(buf) - if err := publicHandle.WriteWithNoSecrets(writer); err != nil { - return nil, fmt.Errorf("failed to write public keyset to buffer: %w", err) - } - - return buf.Bytes(), nil -} - -// Handle returns the keyset handle. -// TODO: Remove this. We don't want to expose the private key. -func (t TinkKeyPair) Handle() keyset.Handle { - return t.keysetHandle -} - -// GenerateTinkKeyPair creates a new key pair using Tink's ED25519 key template -func GenerateTinkKeyPair() (*TinkKeyPair, error) { - keysetHandle, err := keyset.NewHandle(signature.ED25519KeyTemplate()) - if err != nil { - return nil, fmt.Errorf("failed to create keyset handle: %w", err) - } - - return &TinkKeyPair{ - keysetHandle: *keysetHandle, - }, nil -} - -func NewTinkKeyPair(handle keyset.Handle) *TinkKeyPair { - return &TinkKeyPair{ - keysetHandle: handle, - } -} diff --git a/sqlc.yaml b/sqlc.yaml index 5753242230..3ac3d13605 100644 --- a/sqlc.yaml +++ b/sqlc.yaml @@ -177,11 +177,11 @@ sql: out: "backend/controller/leases/dbleaser/internal/sql" - <<: *daldir queries: - - backend/controller/identity/dal/internal/sql/queries.sql + - backend/controller/identity/internal/sql/queries.sql gen: go: <<: *gengo - out: "backend/controller/identity/dal/internal/sql" + out: "backend/controller/identity/internal/sql" - <<: *daldir queries: - backend/controller/encryption/internal/sql/queries.sql