From 45ad1bc85b05e0c63fbc7c6342c7a5ca06564a92 Mon Sep 17 00:00:00 2001 From: Bastian Krol Date: Mon, 29 Jan 2024 08:51:41 +0100 Subject: [PATCH] [featureflag] expose feature flag API via frontend Also, propagate the change from bool to float introduced in https://github.com/open-telemetry/opentelemetry-demo/pull/1237 more consistently via proto definitions by differentiating between the GetFlag operation (which evaluates the probabilty and therefore returns a bool) and all other operations, which need to operate with a float value/probability directly. --- docker-compose.yml | 1 + pb/demo.proto | 18 +- restart-service.sh | 3 + .../genproto/oteldemo/demo.pb.go | 541 ++++++++++-------- .../genproto/oteldemo/demo_grpc.pb.go | 2 +- .../genproto/oteldemo/demo.pb.go | 541 ++++++++++-------- .../genproto/oteldemo/demo_grpc.pb.go | 2 +- src/featureflagservice/src/ffs_service.erl | 35 +- .../gateways/rpc/FeatureFlag.gateway.ts | 33 ++ .../pages/api/featureflags/[name]/index.ts | 22 + src/frontend/pages/api/featureflags/index.ts | 23 + .../genproto/oteldemo/demo.pb.go | 541 ++++++++++-------- .../genproto/oteldemo/demo_grpc.pb.go | 2 +- 13 files changed, 1067 insertions(+), 697 deletions(-) create mode 100644 src/frontend/gateways/rpc/FeatureFlag.gateway.ts create mode 100644 src/frontend/pages/api/featureflags/[name]/index.ts create mode 100644 src/frontend/pages/api/featureflags/index.ts diff --git a/docker-compose.yml b/docker-compose.yml index 79fcfb69b0..2368377b86 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -286,6 +286,7 @@ services: - CART_SERVICE_ADDR - CHECKOUT_SERVICE_ADDR - CURRENCY_SERVICE_ADDR + - FEATURE_FLAG_GRPC_SERVICE_ADDR - PRODUCT_CATALOG_SERVICE_ADDR - RECOMMENDATION_SERVICE_ADDR - SHIPPING_SERVICE_ADDR diff --git a/pb/demo.proto b/pb/demo.proto index aed0c2ce8b..d81cd0403a 100644 --- a/pb/demo.proto +++ b/pb/demo.proto @@ -271,33 +271,39 @@ service FeatureFlagService { rpc DeleteFlag(DeleteFlagRequest) returns (DeleteFlagResponse) {} } -message Flag { +message FlagEvaluationResult { string name = 1; string description = 2; bool enabled = 3; } +message FlagProbability { + string name = 1; + string description = 2; + float enabled = 3; +} + message GetFlagRequest { string name = 1; } message GetFlagResponse { - Flag flag = 1; + FlagEvaluationResult flag = 1; } message CreateFlagRequest { string name = 1; string description = 2; - bool enabled = 3; + float enabled = 3; } message CreateFlagResponse { - Flag flag = 1; + FlagProbability flag = 1; } message UpdateFlagRequest { string name = 1; - bool enabled = 2; + float enabled = 2; } message UpdateFlagResponse {} @@ -305,7 +311,7 @@ message UpdateFlagResponse {} message ListFlagsRequest {} message ListFlagsResponse { - repeated Flag flag = 1; + repeated FlagProbability flag = 1; } message DeleteFlagRequest { diff --git a/restart-service.sh b/restart-service.sh index 5f80919dbe..365edad3a8 100755 --- a/restart-service.sh +++ b/restart-service.sh @@ -1,4 +1,7 @@ #!/bin/sh + +set -euo pipefail + # Copyright The OpenTelemetry Authors # SPDX-License-Identifier: Apache-2.0 diff --git a/src/accountingservice/genproto/oteldemo/demo.pb.go b/src/accountingservice/genproto/oteldemo/demo.pb.go index a788255384..dfe9f9d571 100644 --- a/src/accountingservice/genproto/oteldemo/demo.pb.go +++ b/src/accountingservice/genproto/oteldemo/demo.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.32.0 -// protoc v4.25.1 +// protoc v4.25.2 // source: demo.proto package oteldemo @@ -1810,7 +1810,7 @@ func (x *Ad) GetText() string { return "" } -type Flag struct { +type FlagEvaluationResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1820,8 +1820,8 @@ type Flag struct { Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *Flag) Reset() { - *x = Flag{} +func (x *FlagEvaluationResult) Reset() { + *x = FlagEvaluationResult{} if protoimpl.UnsafeEnabled { mi := &file_demo_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1829,13 +1829,13 @@ func (x *Flag) Reset() { } } -func (x *Flag) String() string { +func (x *FlagEvaluationResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Flag) ProtoMessage() {} +func (*FlagEvaluationResult) ProtoMessage() {} -func (x *Flag) ProtoReflect() protoreflect.Message { +func (x *FlagEvaluationResult) ProtoReflect() protoreflect.Message { mi := &file_demo_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1847,32 +1847,95 @@ func (x *Flag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Flag.ProtoReflect.Descriptor instead. -func (*Flag) Descriptor() ([]byte, []int) { +// Deprecated: Use FlagEvaluationResult.ProtoReflect.Descriptor instead. +func (*FlagEvaluationResult) Descriptor() ([]byte, []int) { return file_demo_proto_rawDescGZIP(), []int{32} } -func (x *Flag) GetName() string { +func (x *FlagEvaluationResult) GetName() string { if x != nil { return x.Name } return "" } -func (x *Flag) GetDescription() string { +func (x *FlagEvaluationResult) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *Flag) GetEnabled() bool { +func (x *FlagEvaluationResult) GetEnabled() bool { if x != nil { return x.Enabled } return false } +type FlagProbability struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FlagProbability) Reset() { + *x = FlagProbability{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlagProbability) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagProbability) ProtoMessage() {} + +func (x *FlagProbability) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagProbability.ProtoReflect.Descriptor instead. +func (*FlagProbability) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{33} +} + +func (x *FlagProbability) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlagProbability) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FlagProbability) GetEnabled() float32 { + if x != nil { + return x.Enabled + } + return 0 +} + type GetFlagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1884,7 +1947,7 @@ type GetFlagRequest struct { func (x *GetFlagRequest) Reset() { *x = GetFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +1960,7 @@ func (x *GetFlagRequest) String() string { func (*GetFlagRequest) ProtoMessage() {} func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1973,7 @@ func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagRequest.ProtoReflect.Descriptor instead. func (*GetFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{33} + return file_demo_proto_rawDescGZIP(), []int{34} } func (x *GetFlagRequest) GetName() string { @@ -1925,13 +1988,13 @@ type GetFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagEvaluationResult `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *GetFlagResponse) Reset() { *x = GetFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2007,7 @@ func (x *GetFlagResponse) String() string { func (*GetFlagResponse) ProtoMessage() {} func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,10 +2020,10 @@ func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagResponse.ProtoReflect.Descriptor instead. func (*GetFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{34} + return file_demo_proto_rawDescGZIP(), []int{35} } -func (x *GetFlagResponse) GetFlag() *Flag { +func (x *GetFlagResponse) GetFlag() *FlagEvaluationResult { if x != nil { return x.Flag } @@ -1972,15 +2035,15 @@ type CreateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *CreateFlagRequest) Reset() { *x = CreateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1993,7 +2056,7 @@ func (x *CreateFlagRequest) String() string { func (*CreateFlagRequest) ProtoMessage() {} func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2006,7 +2069,7 @@ func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagRequest.ProtoReflect.Descriptor instead. func (*CreateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{35} + return file_demo_proto_rawDescGZIP(), []int{36} } func (x *CreateFlagRequest) GetName() string { @@ -2023,11 +2086,11 @@ func (x *CreateFlagRequest) GetDescription() string { return "" } -func (x *CreateFlagRequest) GetEnabled() bool { +func (x *CreateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type CreateFlagResponse struct { @@ -2035,13 +2098,13 @@ type CreateFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagProbability `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *CreateFlagResponse) Reset() { *x = CreateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2117,7 @@ func (x *CreateFlagResponse) String() string { func (*CreateFlagResponse) ProtoMessage() {} func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,10 +2130,10 @@ func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagResponse.ProtoReflect.Descriptor instead. func (*CreateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{36} + return file_demo_proto_rawDescGZIP(), []int{37} } -func (x *CreateFlagResponse) GetFlag() *Flag { +func (x *CreateFlagResponse) GetFlag() *FlagProbability { if x != nil { return x.Flag } @@ -2082,14 +2145,14 @@ type UpdateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled float32 `protobuf:"fixed32,2,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *UpdateFlagRequest) Reset() { *x = UpdateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2102,7 +2165,7 @@ func (x *UpdateFlagRequest) String() string { func (*UpdateFlagRequest) ProtoMessage() {} func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2115,7 +2178,7 @@ func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateFlagRequest.ProtoReflect.Descriptor instead. func (*UpdateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{37} + return file_demo_proto_rawDescGZIP(), []int{38} } func (x *UpdateFlagRequest) GetName() string { @@ -2125,11 +2188,11 @@ func (x *UpdateFlagRequest) GetName() string { return "" } -func (x *UpdateFlagRequest) GetEnabled() bool { +func (x *UpdateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type UpdateFlagResponse struct { @@ -2141,7 +2204,7 @@ type UpdateFlagResponse struct { func (x *UpdateFlagResponse) Reset() { *x = UpdateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2154,7 +2217,7 @@ func (x *UpdateFlagResponse) String() string { func (*UpdateFlagResponse) ProtoMessage() {} func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2167,7 +2230,7 @@ func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateFlagResponse.ProtoReflect.Descriptor instead. func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{38} + return file_demo_proto_rawDescGZIP(), []int{39} } type ListFlagsRequest struct { @@ -2179,7 +2242,7 @@ type ListFlagsRequest struct { func (x *ListFlagsRequest) Reset() { *x = ListFlagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2192,7 +2255,7 @@ func (x *ListFlagsRequest) String() string { func (*ListFlagsRequest) ProtoMessage() {} func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2205,7 +2268,7 @@ func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFlagsRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{39} + return file_demo_proto_rawDescGZIP(), []int{40} } type ListFlagsResponse struct { @@ -2213,13 +2276,13 @@ type ListFlagsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + Flag []*FlagProbability `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` } func (x *ListFlagsResponse) Reset() { *x = ListFlagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2295,7 @@ func (x *ListFlagsResponse) String() string { func (*ListFlagsResponse) ProtoMessage() {} func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,10 +2308,10 @@ func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFlagsResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{40} + return file_demo_proto_rawDescGZIP(), []int{41} } -func (x *ListFlagsResponse) GetFlag() []*Flag { +func (x *ListFlagsResponse) GetFlag() []*FlagProbability { if x != nil { return x.Flag } @@ -2266,7 +2329,7 @@ type DeleteFlagRequest struct { func (x *DeleteFlagRequest) Reset() { *x = DeleteFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2342,7 @@ func (x *DeleteFlagRequest) String() string { func (*DeleteFlagRequest) ProtoMessage() {} func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2355,7 @@ func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagRequest.ProtoReflect.Descriptor instead. func (*DeleteFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{41} + return file_demo_proto_rawDescGZIP(), []int{42} } func (x *DeleteFlagRequest) GetName() string { @@ -2311,7 +2374,7 @@ type DeleteFlagResponse struct { func (x *DeleteFlagResponse) Reset() { *x = DeleteFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2324,7 +2387,7 @@ func (x *DeleteFlagResponse) String() string { func (*DeleteFlagResponse) ProtoMessage() {} func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2337,7 +2400,7 @@ func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagResponse.ProtoReflect.Descriptor instead. func (*DeleteFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{42} + return file_demo_proto_rawDescGZIP(), []int{43} } var File_demo_proto protoreflect.FileDescriptor @@ -2525,146 +2588,155 @@ var file_demo_proto_rawDesc = []byte{ 0x0a, 0x02, 0x41, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x46, + 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, - 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, - 0x41, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, - 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, - 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, - 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, - 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, - 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, - 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x6c, 0x65, 0x64, 0x22, 0x61, 0x0a, 0x0f, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x32, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, + 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, + 0x6c, 0x61, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, + 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x43, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, + 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x41, 0x0a, + 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, + 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x42, 0x0a, 0x11, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2d, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, + 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, + 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, + 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, + 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, + 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, - 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, - 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, + 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, + 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, + 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, + 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, + 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, + 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, + 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, + 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2679,7 +2751,7 @@ func file_demo_proto_rawDescGZIP() []byte { return file_demo_proto_rawDescData } -var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_demo_proto_goTypes = []interface{}{ (*CartItem)(nil), // 0: oteldemo.CartItem (*AddItemRequest)(nil), // 1: oteldemo.AddItemRequest @@ -2713,17 +2785,18 @@ var file_demo_proto_goTypes = []interface{}{ (*AdRequest)(nil), // 29: oteldemo.AdRequest (*AdResponse)(nil), // 30: oteldemo.AdResponse (*Ad)(nil), // 31: oteldemo.Ad - (*Flag)(nil), // 32: oteldemo.Flag - (*GetFlagRequest)(nil), // 33: oteldemo.GetFlagRequest - (*GetFlagResponse)(nil), // 34: oteldemo.GetFlagResponse - (*CreateFlagRequest)(nil), // 35: oteldemo.CreateFlagRequest - (*CreateFlagResponse)(nil), // 36: oteldemo.CreateFlagResponse - (*UpdateFlagRequest)(nil), // 37: oteldemo.UpdateFlagRequest - (*UpdateFlagResponse)(nil), // 38: oteldemo.UpdateFlagResponse - (*ListFlagsRequest)(nil), // 39: oteldemo.ListFlagsRequest - (*ListFlagsResponse)(nil), // 40: oteldemo.ListFlagsResponse - (*DeleteFlagRequest)(nil), // 41: oteldemo.DeleteFlagRequest - (*DeleteFlagResponse)(nil), // 42: oteldemo.DeleteFlagResponse + (*FlagEvaluationResult)(nil), // 32: oteldemo.FlagEvaluationResult + (*FlagProbability)(nil), // 33: oteldemo.FlagProbability + (*GetFlagRequest)(nil), // 34: oteldemo.GetFlagRequest + (*GetFlagResponse)(nil), // 35: oteldemo.GetFlagResponse + (*CreateFlagRequest)(nil), // 36: oteldemo.CreateFlagRequest + (*CreateFlagResponse)(nil), // 37: oteldemo.CreateFlagResponse + (*UpdateFlagRequest)(nil), // 38: oteldemo.UpdateFlagRequest + (*UpdateFlagResponse)(nil), // 39: oteldemo.UpdateFlagResponse + (*ListFlagsRequest)(nil), // 40: oteldemo.ListFlagsRequest + (*ListFlagsResponse)(nil), // 41: oteldemo.ListFlagsResponse + (*DeleteFlagRequest)(nil), // 42: oteldemo.DeleteFlagRequest + (*DeleteFlagResponse)(nil), // 43: oteldemo.DeleteFlagResponse } var file_demo_proto_depIdxs = []int32{ 0, // 0: oteldemo.AddItemRequest.item:type_name -> oteldemo.CartItem @@ -2749,9 +2822,9 @@ var file_demo_proto_depIdxs = []int32{ 21, // 20: oteldemo.PlaceOrderRequest.credit_card:type_name -> oteldemo.CreditCardInfo 25, // 21: oteldemo.PlaceOrderResponse.order:type_name -> oteldemo.OrderResult 31, // 22: oteldemo.AdResponse.ads:type_name -> oteldemo.Ad - 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.Flag + 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.FlagEvaluationResult + 33, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.FlagProbability + 33, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.FlagProbability 1, // 26: oteldemo.CartService.AddItem:input_type -> oteldemo.AddItemRequest 3, // 27: oteldemo.CartService.GetCart:input_type -> oteldemo.GetCartRequest 2, // 28: oteldemo.CartService.EmptyCart:input_type -> oteldemo.EmptyCartRequest @@ -2767,11 +2840,11 @@ var file_demo_proto_depIdxs = []int32{ 26, // 38: oteldemo.EmailService.SendOrderConfirmation:input_type -> oteldemo.SendOrderConfirmationRequest 27, // 39: oteldemo.CheckoutService.PlaceOrder:input_type -> oteldemo.PlaceOrderRequest 29, // 40: oteldemo.AdService.GetAds:input_type -> oteldemo.AdRequest - 33, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest - 35, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest - 37, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest - 39, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest - 41, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest + 34, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest + 36, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest + 38, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest + 40, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest + 42, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest 5, // 46: oteldemo.CartService.AddItem:output_type -> oteldemo.Empty 4, // 47: oteldemo.CartService.GetCart:output_type -> oteldemo.Cart 5, // 48: oteldemo.CartService.EmptyCart:output_type -> oteldemo.Empty @@ -2787,11 +2860,11 @@ var file_demo_proto_depIdxs = []int32{ 5, // 58: oteldemo.EmailService.SendOrderConfirmation:output_type -> oteldemo.Empty 28, // 59: oteldemo.CheckoutService.PlaceOrder:output_type -> oteldemo.PlaceOrderResponse 30, // 60: oteldemo.AdService.GetAds:output_type -> oteldemo.AdResponse - 34, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse - 36, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse - 38, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse - 40, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse - 42, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse + 35, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse + 37, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse + 39, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse + 41, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse + 43, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse 46, // [46:66] is the sub-list for method output_type 26, // [26:46] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name @@ -3190,7 +3263,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Flag); i { + switch v := v.(*FlagEvaluationResult); i { case 0: return &v.state case 1: @@ -3202,7 +3275,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagRequest); i { + switch v := v.(*FlagProbability); i { case 0: return &v.state case 1: @@ -3214,7 +3287,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagResponse); i { + switch v := v.(*GetFlagRequest); i { case 0: return &v.state case 1: @@ -3226,7 +3299,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagRequest); i { + switch v := v.(*GetFlagResponse); i { case 0: return &v.state case 1: @@ -3238,7 +3311,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagResponse); i { + switch v := v.(*CreateFlagRequest); i { case 0: return &v.state case 1: @@ -3250,7 +3323,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagRequest); i { + switch v := v.(*CreateFlagResponse); i { case 0: return &v.state case 1: @@ -3262,7 +3335,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagResponse); i { + switch v := v.(*UpdateFlagRequest); i { case 0: return &v.state case 1: @@ -3274,7 +3347,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsRequest); i { + switch v := v.(*UpdateFlagResponse); i { case 0: return &v.state case 1: @@ -3286,7 +3359,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsResponse); i { + switch v := v.(*ListFlagsRequest); i { case 0: return &v.state case 1: @@ -3298,7 +3371,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteFlagRequest); i { + switch v := v.(*ListFlagsResponse); i { case 0: return &v.state case 1: @@ -3310,6 +3383,18 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFlagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteFlagResponse); i { case 0: return &v.state @@ -3328,7 +3413,7 @@ func file_demo_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_demo_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 10, }, diff --git a/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go b/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go index 2002dfbcdc..2eee2e9830 100644 --- a/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go +++ b/src/accountingservice/genproto/oteldemo/demo_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.25.2 // source: demo.proto package oteldemo diff --git a/src/checkoutservice/genproto/oteldemo/demo.pb.go b/src/checkoutservice/genproto/oteldemo/demo.pb.go index 5d61c9f147..930e78ade8 100644 --- a/src/checkoutservice/genproto/oteldemo/demo.pb.go +++ b/src/checkoutservice/genproto/oteldemo/demo.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v4.25.1 +// protoc v4.25.2 // source: demo.proto package oteldemo @@ -1810,7 +1810,7 @@ func (x *Ad) GetText() string { return "" } -type Flag struct { +type FlagEvaluationResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1820,8 +1820,8 @@ type Flag struct { Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *Flag) Reset() { - *x = Flag{} +func (x *FlagEvaluationResult) Reset() { + *x = FlagEvaluationResult{} if protoimpl.UnsafeEnabled { mi := &file_demo_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1829,13 +1829,13 @@ func (x *Flag) Reset() { } } -func (x *Flag) String() string { +func (x *FlagEvaluationResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Flag) ProtoMessage() {} +func (*FlagEvaluationResult) ProtoMessage() {} -func (x *Flag) ProtoReflect() protoreflect.Message { +func (x *FlagEvaluationResult) ProtoReflect() protoreflect.Message { mi := &file_demo_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1847,32 +1847,95 @@ func (x *Flag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Flag.ProtoReflect.Descriptor instead. -func (*Flag) Descriptor() ([]byte, []int) { +// Deprecated: Use FlagEvaluationResult.ProtoReflect.Descriptor instead. +func (*FlagEvaluationResult) Descriptor() ([]byte, []int) { return file_demo_proto_rawDescGZIP(), []int{32} } -func (x *Flag) GetName() string { +func (x *FlagEvaluationResult) GetName() string { if x != nil { return x.Name } return "" } -func (x *Flag) GetDescription() string { +func (x *FlagEvaluationResult) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *Flag) GetEnabled() bool { +func (x *FlagEvaluationResult) GetEnabled() bool { if x != nil { return x.Enabled } return false } +type FlagProbability struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FlagProbability) Reset() { + *x = FlagProbability{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlagProbability) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagProbability) ProtoMessage() {} + +func (x *FlagProbability) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagProbability.ProtoReflect.Descriptor instead. +func (*FlagProbability) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{33} +} + +func (x *FlagProbability) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlagProbability) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FlagProbability) GetEnabled() float32 { + if x != nil { + return x.Enabled + } + return 0 +} + type GetFlagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1884,7 +1947,7 @@ type GetFlagRequest struct { func (x *GetFlagRequest) Reset() { *x = GetFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +1960,7 @@ func (x *GetFlagRequest) String() string { func (*GetFlagRequest) ProtoMessage() {} func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1973,7 @@ func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagRequest.ProtoReflect.Descriptor instead. func (*GetFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{33} + return file_demo_proto_rawDescGZIP(), []int{34} } func (x *GetFlagRequest) GetName() string { @@ -1925,13 +1988,13 @@ type GetFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagEvaluationResult `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *GetFlagResponse) Reset() { *x = GetFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2007,7 @@ func (x *GetFlagResponse) String() string { func (*GetFlagResponse) ProtoMessage() {} func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,10 +2020,10 @@ func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagResponse.ProtoReflect.Descriptor instead. func (*GetFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{34} + return file_demo_proto_rawDescGZIP(), []int{35} } -func (x *GetFlagResponse) GetFlag() *Flag { +func (x *GetFlagResponse) GetFlag() *FlagEvaluationResult { if x != nil { return x.Flag } @@ -1972,15 +2035,15 @@ type CreateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *CreateFlagRequest) Reset() { *x = CreateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1993,7 +2056,7 @@ func (x *CreateFlagRequest) String() string { func (*CreateFlagRequest) ProtoMessage() {} func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2006,7 +2069,7 @@ func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagRequest.ProtoReflect.Descriptor instead. func (*CreateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{35} + return file_demo_proto_rawDescGZIP(), []int{36} } func (x *CreateFlagRequest) GetName() string { @@ -2023,11 +2086,11 @@ func (x *CreateFlagRequest) GetDescription() string { return "" } -func (x *CreateFlagRequest) GetEnabled() bool { +func (x *CreateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type CreateFlagResponse struct { @@ -2035,13 +2098,13 @@ type CreateFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagProbability `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *CreateFlagResponse) Reset() { *x = CreateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2117,7 @@ func (x *CreateFlagResponse) String() string { func (*CreateFlagResponse) ProtoMessage() {} func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,10 +2130,10 @@ func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagResponse.ProtoReflect.Descriptor instead. func (*CreateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{36} + return file_demo_proto_rawDescGZIP(), []int{37} } -func (x *CreateFlagResponse) GetFlag() *Flag { +func (x *CreateFlagResponse) GetFlag() *FlagProbability { if x != nil { return x.Flag } @@ -2082,14 +2145,14 @@ type UpdateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled float32 `protobuf:"fixed32,2,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *UpdateFlagRequest) Reset() { *x = UpdateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2102,7 +2165,7 @@ func (x *UpdateFlagRequest) String() string { func (*UpdateFlagRequest) ProtoMessage() {} func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2115,7 +2178,7 @@ func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateFlagRequest.ProtoReflect.Descriptor instead. func (*UpdateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{37} + return file_demo_proto_rawDescGZIP(), []int{38} } func (x *UpdateFlagRequest) GetName() string { @@ -2125,11 +2188,11 @@ func (x *UpdateFlagRequest) GetName() string { return "" } -func (x *UpdateFlagRequest) GetEnabled() bool { +func (x *UpdateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type UpdateFlagResponse struct { @@ -2141,7 +2204,7 @@ type UpdateFlagResponse struct { func (x *UpdateFlagResponse) Reset() { *x = UpdateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2154,7 +2217,7 @@ func (x *UpdateFlagResponse) String() string { func (*UpdateFlagResponse) ProtoMessage() {} func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2167,7 +2230,7 @@ func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateFlagResponse.ProtoReflect.Descriptor instead. func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{38} + return file_demo_proto_rawDescGZIP(), []int{39} } type ListFlagsRequest struct { @@ -2179,7 +2242,7 @@ type ListFlagsRequest struct { func (x *ListFlagsRequest) Reset() { *x = ListFlagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2192,7 +2255,7 @@ func (x *ListFlagsRequest) String() string { func (*ListFlagsRequest) ProtoMessage() {} func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2205,7 +2268,7 @@ func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFlagsRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{39} + return file_demo_proto_rawDescGZIP(), []int{40} } type ListFlagsResponse struct { @@ -2213,13 +2276,13 @@ type ListFlagsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + Flag []*FlagProbability `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` } func (x *ListFlagsResponse) Reset() { *x = ListFlagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2295,7 @@ func (x *ListFlagsResponse) String() string { func (*ListFlagsResponse) ProtoMessage() {} func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,10 +2308,10 @@ func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFlagsResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{40} + return file_demo_proto_rawDescGZIP(), []int{41} } -func (x *ListFlagsResponse) GetFlag() []*Flag { +func (x *ListFlagsResponse) GetFlag() []*FlagProbability { if x != nil { return x.Flag } @@ -2266,7 +2329,7 @@ type DeleteFlagRequest struct { func (x *DeleteFlagRequest) Reset() { *x = DeleteFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2342,7 @@ func (x *DeleteFlagRequest) String() string { func (*DeleteFlagRequest) ProtoMessage() {} func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2355,7 @@ func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagRequest.ProtoReflect.Descriptor instead. func (*DeleteFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{41} + return file_demo_proto_rawDescGZIP(), []int{42} } func (x *DeleteFlagRequest) GetName() string { @@ -2311,7 +2374,7 @@ type DeleteFlagResponse struct { func (x *DeleteFlagResponse) Reset() { *x = DeleteFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2324,7 +2387,7 @@ func (x *DeleteFlagResponse) String() string { func (*DeleteFlagResponse) ProtoMessage() {} func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2337,7 +2400,7 @@ func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagResponse.ProtoReflect.Descriptor instead. func (*DeleteFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{42} + return file_demo_proto_rawDescGZIP(), []int{43} } var File_demo_proto protoreflect.FileDescriptor @@ -2525,146 +2588,155 @@ var file_demo_proto_rawDesc = []byte{ 0x0a, 0x02, 0x41, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x46, + 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, - 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, - 0x41, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, - 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, - 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, - 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, - 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, - 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, - 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x6c, 0x65, 0x64, 0x22, 0x61, 0x0a, 0x0f, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x32, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, + 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, + 0x6c, 0x61, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, + 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x43, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, + 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x41, 0x0a, + 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, + 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x42, 0x0a, 0x11, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2d, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, + 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, + 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, + 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, + 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, + 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, - 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, - 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, + 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, + 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, + 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, + 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, + 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, + 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, + 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, + 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2679,7 +2751,7 @@ func file_demo_proto_rawDescGZIP() []byte { return file_demo_proto_rawDescData } -var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_demo_proto_goTypes = []interface{}{ (*CartItem)(nil), // 0: oteldemo.CartItem (*AddItemRequest)(nil), // 1: oteldemo.AddItemRequest @@ -2713,17 +2785,18 @@ var file_demo_proto_goTypes = []interface{}{ (*AdRequest)(nil), // 29: oteldemo.AdRequest (*AdResponse)(nil), // 30: oteldemo.AdResponse (*Ad)(nil), // 31: oteldemo.Ad - (*Flag)(nil), // 32: oteldemo.Flag - (*GetFlagRequest)(nil), // 33: oteldemo.GetFlagRequest - (*GetFlagResponse)(nil), // 34: oteldemo.GetFlagResponse - (*CreateFlagRequest)(nil), // 35: oteldemo.CreateFlagRequest - (*CreateFlagResponse)(nil), // 36: oteldemo.CreateFlagResponse - (*UpdateFlagRequest)(nil), // 37: oteldemo.UpdateFlagRequest - (*UpdateFlagResponse)(nil), // 38: oteldemo.UpdateFlagResponse - (*ListFlagsRequest)(nil), // 39: oteldemo.ListFlagsRequest - (*ListFlagsResponse)(nil), // 40: oteldemo.ListFlagsResponse - (*DeleteFlagRequest)(nil), // 41: oteldemo.DeleteFlagRequest - (*DeleteFlagResponse)(nil), // 42: oteldemo.DeleteFlagResponse + (*FlagEvaluationResult)(nil), // 32: oteldemo.FlagEvaluationResult + (*FlagProbability)(nil), // 33: oteldemo.FlagProbability + (*GetFlagRequest)(nil), // 34: oteldemo.GetFlagRequest + (*GetFlagResponse)(nil), // 35: oteldemo.GetFlagResponse + (*CreateFlagRequest)(nil), // 36: oteldemo.CreateFlagRequest + (*CreateFlagResponse)(nil), // 37: oteldemo.CreateFlagResponse + (*UpdateFlagRequest)(nil), // 38: oteldemo.UpdateFlagRequest + (*UpdateFlagResponse)(nil), // 39: oteldemo.UpdateFlagResponse + (*ListFlagsRequest)(nil), // 40: oteldemo.ListFlagsRequest + (*ListFlagsResponse)(nil), // 41: oteldemo.ListFlagsResponse + (*DeleteFlagRequest)(nil), // 42: oteldemo.DeleteFlagRequest + (*DeleteFlagResponse)(nil), // 43: oteldemo.DeleteFlagResponse } var file_demo_proto_depIdxs = []int32{ 0, // 0: oteldemo.AddItemRequest.item:type_name -> oteldemo.CartItem @@ -2749,9 +2822,9 @@ var file_demo_proto_depIdxs = []int32{ 21, // 20: oteldemo.PlaceOrderRequest.credit_card:type_name -> oteldemo.CreditCardInfo 25, // 21: oteldemo.PlaceOrderResponse.order:type_name -> oteldemo.OrderResult 31, // 22: oteldemo.AdResponse.ads:type_name -> oteldemo.Ad - 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.Flag + 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.FlagEvaluationResult + 33, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.FlagProbability + 33, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.FlagProbability 1, // 26: oteldemo.CartService.AddItem:input_type -> oteldemo.AddItemRequest 3, // 27: oteldemo.CartService.GetCart:input_type -> oteldemo.GetCartRequest 2, // 28: oteldemo.CartService.EmptyCart:input_type -> oteldemo.EmptyCartRequest @@ -2767,11 +2840,11 @@ var file_demo_proto_depIdxs = []int32{ 26, // 38: oteldemo.EmailService.SendOrderConfirmation:input_type -> oteldemo.SendOrderConfirmationRequest 27, // 39: oteldemo.CheckoutService.PlaceOrder:input_type -> oteldemo.PlaceOrderRequest 29, // 40: oteldemo.AdService.GetAds:input_type -> oteldemo.AdRequest - 33, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest - 35, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest - 37, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest - 39, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest - 41, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest + 34, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest + 36, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest + 38, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest + 40, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest + 42, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest 5, // 46: oteldemo.CartService.AddItem:output_type -> oteldemo.Empty 4, // 47: oteldemo.CartService.GetCart:output_type -> oteldemo.Cart 5, // 48: oteldemo.CartService.EmptyCart:output_type -> oteldemo.Empty @@ -2787,11 +2860,11 @@ var file_demo_proto_depIdxs = []int32{ 5, // 58: oteldemo.EmailService.SendOrderConfirmation:output_type -> oteldemo.Empty 28, // 59: oteldemo.CheckoutService.PlaceOrder:output_type -> oteldemo.PlaceOrderResponse 30, // 60: oteldemo.AdService.GetAds:output_type -> oteldemo.AdResponse - 34, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse - 36, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse - 38, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse - 40, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse - 42, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse + 35, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse + 37, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse + 39, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse + 41, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse + 43, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse 46, // [46:66] is the sub-list for method output_type 26, // [26:46] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name @@ -3190,7 +3263,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Flag); i { + switch v := v.(*FlagEvaluationResult); i { case 0: return &v.state case 1: @@ -3202,7 +3275,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagRequest); i { + switch v := v.(*FlagProbability); i { case 0: return &v.state case 1: @@ -3214,7 +3287,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagResponse); i { + switch v := v.(*GetFlagRequest); i { case 0: return &v.state case 1: @@ -3226,7 +3299,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagRequest); i { + switch v := v.(*GetFlagResponse); i { case 0: return &v.state case 1: @@ -3238,7 +3311,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagResponse); i { + switch v := v.(*CreateFlagRequest); i { case 0: return &v.state case 1: @@ -3250,7 +3323,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagRequest); i { + switch v := v.(*CreateFlagResponse); i { case 0: return &v.state case 1: @@ -3262,7 +3335,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagResponse); i { + switch v := v.(*UpdateFlagRequest); i { case 0: return &v.state case 1: @@ -3274,7 +3347,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsRequest); i { + switch v := v.(*UpdateFlagResponse); i { case 0: return &v.state case 1: @@ -3286,7 +3359,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsResponse); i { + switch v := v.(*ListFlagsRequest); i { case 0: return &v.state case 1: @@ -3298,7 +3371,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteFlagRequest); i { + switch v := v.(*ListFlagsResponse); i { case 0: return &v.state case 1: @@ -3310,6 +3383,18 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFlagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteFlagResponse); i { case 0: return &v.state @@ -3328,7 +3413,7 @@ func file_demo_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_demo_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 10, }, diff --git a/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go b/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go index 2002dfbcdc..2eee2e9830 100644 --- a/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go +++ b/src/checkoutservice/genproto/oteldemo/demo_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.25.2 // source: demo.proto package oteldemo diff --git a/src/featureflagservice/src/ffs_service.erl b/src/featureflagservice/src/ffs_service.erl index 421ce7ce23..8c98c57915 100644 --- a/src/featureflagservice/src/ffs_service.erl +++ b/src/featureflagservice/src/ffs_service.erl @@ -58,13 +58,40 @@ create_flag(_Ctx, _) -> -spec update_flag(ctx:t(), ffs_demo_pb:update_flag_request()) -> {ok, ffs_demo_pb:update_flag_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -update_flag(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to update flags.">>}}. +update_flag(Ctx, #{name := Name, enabled := Probability}) -> + Flag = 'Elixir.Featureflagservice.FeatureFlags':get_feature_flag_by_name(Name), + case Flag of + nil -> + {grpc_error, {?GRPC_STATUS_NOT_FOUND, <<"the requested feature flag does not exist">>}}; + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', + name := Name, + description := Description, + enabled := _ + } -> + 'Elixir.Featureflagservice.FeatureFlags':update_feature_flag( + Flag, + #{name => Name, description => Description, enabled => Probability} + ), + {ok, #{}, Ctx} + end. -spec list_flags(ctx:t(), ffs_demo_pb:list_flags_request()) -> {ok, ffs_demo_pb:list_flags_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). -list_flags(_Ctx, _) -> - {grpc_error, {?GRPC_STATUS_UNIMPLEMENTED, <<"use the web interface to view all flags.">>}}. +list_flags(Ctx, _) -> + Flags = lists:map(fun unpack_flag/1, 'Elixir.Featureflagservice.FeatureFlags':list_feature_flags()), + {ok, #{flag => Flags}, Ctx}. + +unpack_flag(Flag) -> + case Flag of + #{'__struct__' := 'Elixir.Featureflagservice.FeatureFlags.FeatureFlag', + name := Name, + description := Description, + enabled := Probability + } -> + #{name => Name, + description => Description, + enabled => Probability} + end. -spec delete_flag(ctx:t(), ffs_demo_pb:delete_flag_request()) -> {ok, ffs_demo_pb:delete_flag_response(), ctx:t()} | grpcbox_stream:grpc_error_response(). diff --git a/src/frontend/gateways/rpc/FeatureFlag.gateway.ts b/src/frontend/gateways/rpc/FeatureFlag.gateway.ts new file mode 100644 index 0000000000..057492bc57 --- /dev/null +++ b/src/frontend/gateways/rpc/FeatureFlag.gateway.ts @@ -0,0 +1,33 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import {ChannelCredentials} from '@grpc/grpc-js'; +import { + ListFlagsResponse, + FeatureFlagServiceClient, + PlaceOrderRequest, + PlaceOrderResponse, + UpdateFlagRequest, UpdateFlagResponse +} from '../../protos/demo'; + +const {FEATURE_FLAG_GRPC_SERVICE_ADDR = ''} = process.env; + +const client = new FeatureFlagServiceClient(FEATURE_FLAG_GRPC_SERVICE_ADDR, ChannelCredentials.createInsecure()); + +const FeatureFlagGateway = () => ({ + listFeatureFlags() { + return new Promise((resolve, reject) => + client.listFlags({}, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, + + updateFeatureFlag(name: string, enabled: number) { + return new Promise((resolve, reject) => client.updateFlag({ + name: name, + enabled + }, (error, response) => (error ? reject(error) : resolve(response))) + ); + }, +}); + +export default FeatureFlagGateway(); diff --git a/src/frontend/pages/api/featureflags/[name]/index.ts b/src/frontend/pages/api/featureflags/[name]/index.ts new file mode 100644 index 0000000000..963ea85d07 --- /dev/null +++ b/src/frontend/pages/api/featureflags/[name]/index.ts @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import type { NextApiRequest, NextApiResponse } from 'next'; +import FeatureFlagGateway from '../../../../gateways/rpc/FeatureFlag.gateway'; +import { UpdateFlagResponse, UpdateFlagRequest} from '../../../../protos/demo'; + +const handler = async ({ method, query, body }: NextApiRequest, res: NextApiResponse) => { + switch (method) { + case 'PUT': { + const {name=''} = query + await FeatureFlagGateway.updateFeatureFlag(name as string, (body as UpdateFlagRequest).enabled); + return res.status(204).send(''); + } + + default: { + return res.status(405).send(''); + } + } +}; + +export default handler; diff --git a/src/frontend/pages/api/featureflags/index.ts b/src/frontend/pages/api/featureflags/index.ts new file mode 100644 index 0000000000..f91d7d5ce9 --- /dev/null +++ b/src/frontend/pages/api/featureflags/index.ts @@ -0,0 +1,23 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +import type { NextApiRequest, NextApiResponse } from 'next'; +import FeatureFlagGateway from '../../../gateways/rpc/FeatureFlag.gateway'; +import { FlagProbability, Empty } from '../../../protos/demo'; + +type TResponse = FlagProbability[] | Empty; + +const handler = async ({ method }: NextApiRequest, res: NextApiResponse) => { + switch (method) { + case 'GET': { + const { flag } = await FeatureFlagGateway.listFeatureFlags(); + return res.status(200).json(flag); + } + + default: { + return res.status(405).send(''); + } + } +}; + +export default handler; diff --git a/src/productcatalogservice/genproto/oteldemo/demo.pb.go b/src/productcatalogservice/genproto/oteldemo/demo.pb.go index 5d61c9f147..930e78ade8 100644 --- a/src/productcatalogservice/genproto/oteldemo/demo.pb.go +++ b/src/productcatalogservice/genproto/oteldemo/demo.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.31.0 -// protoc v4.25.1 +// protoc v4.25.2 // source: demo.proto package oteldemo @@ -1810,7 +1810,7 @@ func (x *Ad) GetText() string { return "" } -type Flag struct { +type FlagEvaluationResult struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1820,8 +1820,8 @@ type Flag struct { Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } -func (x *Flag) Reset() { - *x = Flag{} +func (x *FlagEvaluationResult) Reset() { + *x = FlagEvaluationResult{} if protoimpl.UnsafeEnabled { mi := &file_demo_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1829,13 +1829,13 @@ func (x *Flag) Reset() { } } -func (x *Flag) String() string { +func (x *FlagEvaluationResult) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Flag) ProtoMessage() {} +func (*FlagEvaluationResult) ProtoMessage() {} -func (x *Flag) ProtoReflect() protoreflect.Message { +func (x *FlagEvaluationResult) ProtoReflect() protoreflect.Message { mi := &file_demo_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1847,32 +1847,95 @@ func (x *Flag) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Flag.ProtoReflect.Descriptor instead. -func (*Flag) Descriptor() ([]byte, []int) { +// Deprecated: Use FlagEvaluationResult.ProtoReflect.Descriptor instead. +func (*FlagEvaluationResult) Descriptor() ([]byte, []int) { return file_demo_proto_rawDescGZIP(), []int{32} } -func (x *Flag) GetName() string { +func (x *FlagEvaluationResult) GetName() string { if x != nil { return x.Name } return "" } -func (x *Flag) GetDescription() string { +func (x *FlagEvaluationResult) GetDescription() string { if x != nil { return x.Description } return "" } -func (x *Flag) GetEnabled() bool { +func (x *FlagEvaluationResult) GetEnabled() bool { if x != nil { return x.Enabled } return false } +type FlagProbability struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` +} + +func (x *FlagProbability) Reset() { + *x = FlagProbability{} + if protoimpl.UnsafeEnabled { + mi := &file_demo_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FlagProbability) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FlagProbability) ProtoMessage() {} + +func (x *FlagProbability) ProtoReflect() protoreflect.Message { + mi := &file_demo_proto_msgTypes[33] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FlagProbability.ProtoReflect.Descriptor instead. +func (*FlagProbability) Descriptor() ([]byte, []int) { + return file_demo_proto_rawDescGZIP(), []int{33} +} + +func (x *FlagProbability) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *FlagProbability) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +func (x *FlagProbability) GetEnabled() float32 { + if x != nil { + return x.Enabled + } + return 0 +} + type GetFlagRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1884,7 +1947,7 @@ type GetFlagRequest struct { func (x *GetFlagRequest) Reset() { *x = GetFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1897,7 +1960,7 @@ func (x *GetFlagRequest) String() string { func (*GetFlagRequest) ProtoMessage() {} func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[33] + mi := &file_demo_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1910,7 +1973,7 @@ func (x *GetFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagRequest.ProtoReflect.Descriptor instead. func (*GetFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{33} + return file_demo_proto_rawDescGZIP(), []int{34} } func (x *GetFlagRequest) GetName() string { @@ -1925,13 +1988,13 @@ type GetFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagEvaluationResult `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *GetFlagResponse) Reset() { *x = GetFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1944,7 +2007,7 @@ func (x *GetFlagResponse) String() string { func (*GetFlagResponse) ProtoMessage() {} func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[34] + mi := &file_demo_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1957,10 +2020,10 @@ func (x *GetFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetFlagResponse.ProtoReflect.Descriptor instead. func (*GetFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{34} + return file_demo_proto_rawDescGZIP(), []int{35} } -func (x *GetFlagResponse) GetFlag() *Flag { +func (x *GetFlagResponse) GetFlag() *FlagEvaluationResult { if x != nil { return x.Flag } @@ -1972,15 +2035,15 @@ type CreateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` - Enabled bool `protobuf:"varint,3,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + Enabled float32 `protobuf:"fixed32,3,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *CreateFlagRequest) Reset() { *x = CreateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1993,7 +2056,7 @@ func (x *CreateFlagRequest) String() string { func (*CreateFlagRequest) ProtoMessage() {} func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[35] + mi := &file_demo_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2006,7 +2069,7 @@ func (x *CreateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagRequest.ProtoReflect.Descriptor instead. func (*CreateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{35} + return file_demo_proto_rawDescGZIP(), []int{36} } func (x *CreateFlagRequest) GetName() string { @@ -2023,11 +2086,11 @@ func (x *CreateFlagRequest) GetDescription() string { return "" } -func (x *CreateFlagRequest) GetEnabled() bool { +func (x *CreateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type CreateFlagResponse struct { @@ -2035,13 +2098,13 @@ type CreateFlagResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag *Flag `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` + Flag *FlagProbability `protobuf:"bytes,1,opt,name=flag,proto3" json:"flag,omitempty"` } func (x *CreateFlagResponse) Reset() { *x = CreateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2054,7 +2117,7 @@ func (x *CreateFlagResponse) String() string { func (*CreateFlagResponse) ProtoMessage() {} func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[36] + mi := &file_demo_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2067,10 +2130,10 @@ func (x *CreateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateFlagResponse.ProtoReflect.Descriptor instead. func (*CreateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{36} + return file_demo_proto_rawDescGZIP(), []int{37} } -func (x *CreateFlagResponse) GetFlag() *Flag { +func (x *CreateFlagResponse) GetFlag() *FlagProbability { if x != nil { return x.Flag } @@ -2082,14 +2145,14 @@ type UpdateFlagRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Enabled float32 `protobuf:"fixed32,2,opt,name=enabled,proto3" json:"enabled,omitempty"` } func (x *UpdateFlagRequest) Reset() { *x = UpdateFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2102,7 +2165,7 @@ func (x *UpdateFlagRequest) String() string { func (*UpdateFlagRequest) ProtoMessage() {} func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[37] + mi := &file_demo_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2115,7 +2178,7 @@ func (x *UpdateFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateFlagRequest.ProtoReflect.Descriptor instead. func (*UpdateFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{37} + return file_demo_proto_rawDescGZIP(), []int{38} } func (x *UpdateFlagRequest) GetName() string { @@ -2125,11 +2188,11 @@ func (x *UpdateFlagRequest) GetName() string { return "" } -func (x *UpdateFlagRequest) GetEnabled() bool { +func (x *UpdateFlagRequest) GetEnabled() float32 { if x != nil { return x.Enabled } - return false + return 0 } type UpdateFlagResponse struct { @@ -2141,7 +2204,7 @@ type UpdateFlagResponse struct { func (x *UpdateFlagResponse) Reset() { *x = UpdateFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2154,7 +2217,7 @@ func (x *UpdateFlagResponse) String() string { func (*UpdateFlagResponse) ProtoMessage() {} func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[38] + mi := &file_demo_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2167,7 +2230,7 @@ func (x *UpdateFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateFlagResponse.ProtoReflect.Descriptor instead. func (*UpdateFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{38} + return file_demo_proto_rawDescGZIP(), []int{39} } type ListFlagsRequest struct { @@ -2179,7 +2242,7 @@ type ListFlagsRequest struct { func (x *ListFlagsRequest) Reset() { *x = ListFlagsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2192,7 +2255,7 @@ func (x *ListFlagsRequest) String() string { func (*ListFlagsRequest) ProtoMessage() {} func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[39] + mi := &file_demo_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2205,7 +2268,7 @@ func (x *ListFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFlagsRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{39} + return file_demo_proto_rawDescGZIP(), []int{40} } type ListFlagsResponse struct { @@ -2213,13 +2276,13 @@ type ListFlagsResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Flag []*Flag `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` + Flag []*FlagProbability `protobuf:"bytes,1,rep,name=flag,proto3" json:"flag,omitempty"` } func (x *ListFlagsResponse) Reset() { *x = ListFlagsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2232,7 +2295,7 @@ func (x *ListFlagsResponse) String() string { func (*ListFlagsResponse) ProtoMessage() {} func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[40] + mi := &file_demo_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2245,10 +2308,10 @@ func (x *ListFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFlagsResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{40} + return file_demo_proto_rawDescGZIP(), []int{41} } -func (x *ListFlagsResponse) GetFlag() []*Flag { +func (x *ListFlagsResponse) GetFlag() []*FlagProbability { if x != nil { return x.Flag } @@ -2266,7 +2329,7 @@ type DeleteFlagRequest struct { func (x *DeleteFlagRequest) Reset() { *x = DeleteFlagRequest{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2279,7 +2342,7 @@ func (x *DeleteFlagRequest) String() string { func (*DeleteFlagRequest) ProtoMessage() {} func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[41] + mi := &file_demo_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2292,7 +2355,7 @@ func (x *DeleteFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagRequest.ProtoReflect.Descriptor instead. func (*DeleteFlagRequest) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{41} + return file_demo_proto_rawDescGZIP(), []int{42} } func (x *DeleteFlagRequest) GetName() string { @@ -2311,7 +2374,7 @@ type DeleteFlagResponse struct { func (x *DeleteFlagResponse) Reset() { *x = DeleteFlagResponse{} if protoimpl.UnsafeEnabled { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2324,7 +2387,7 @@ func (x *DeleteFlagResponse) String() string { func (*DeleteFlagResponse) ProtoMessage() {} func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_demo_proto_msgTypes[42] + mi := &file_demo_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2337,7 +2400,7 @@ func (x *DeleteFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteFlagResponse.ProtoReflect.Descriptor instead. func (*DeleteFlagResponse) Descriptor() ([]byte, []int) { - return file_demo_proto_rawDescGZIP(), []int{42} + return file_demo_proto_rawDescGZIP(), []int{43} } var File_demo_proto protoreflect.FileDescriptor @@ -2525,146 +2588,155 @@ var file_demo_proto_rawDesc = []byte{ 0x0a, 0x02, 0x41, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x55, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x56, 0x0a, 0x04, 0x46, - 0x6c, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x66, 0x0a, 0x14, 0x46, + 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x35, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, - 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, - 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x65, - 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, - 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, - 0x41, 0x0a, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, - 0x65, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x37, 0x0a, 0x11, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x22, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x52, - 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, - 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, - 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, - 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, - 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, - 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, - 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, - 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, - 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, - 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, - 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, - 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, - 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, - 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x6c, 0x65, 0x64, 0x22, 0x61, 0x0a, 0x0f, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x24, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x45, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x32, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x45, 0x76, 0x61, + 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x04, 0x66, + 0x6c, 0x61, 0x67, 0x22, 0x63, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, + 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, + 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x43, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, + 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, 0x62, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x41, 0x0a, + 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x22, 0x14, 0x0a, 0x12, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, + 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x42, 0x0a, 0x11, 0x4c, 0x69, + 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x2d, 0x0a, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x46, 0x6c, 0x61, 0x67, 0x50, 0x72, 0x6f, + 0x62, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x04, 0x66, 0x6c, 0x61, 0x67, 0x22, 0x27, + 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0xb8, 0x01, + 0x0a, 0x0b, 0x43, 0x61, 0x72, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x36, 0x0a, + 0x07, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x64, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x43, 0x61, 0x72, 0x74, + 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x43, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x61, 0x72, 0x74, 0x22, 0x00, 0x12, 0x3a, 0x0a, 0x09, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x43, 0x61, 0x72, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x7d, 0x0a, 0x15, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x64, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, + 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xf1, 0x01, 0x0a, 0x15, 0x50, 0x72, 0x6f, 0x64, + 0x75, 0x63, 0x74, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x41, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, - 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, - 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, - 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, - 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, - 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, - 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, - 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, - 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, - 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, - 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, - 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, - 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, - 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, - 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, - 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, - 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x79, 0x1a, 0x1e, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x11, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, + 0x63, 0x74, 0x22, 0x00, 0x12, 0x55, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, 0x12, 0x1f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x9e, 0x01, 0x0a, 0x0f, + 0x53, 0x68, 0x69, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x43, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x12, 0x19, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x46, 0x0a, 0x09, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, 0x65, + 0x72, 0x12, 0x1a, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, + 0x70, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x53, 0x68, 0x69, 0x70, 0x4f, 0x72, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xab, 0x01, 0x0a, + 0x0f, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x55, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x12, 0x0f, 0x2e, 0x6f, 0x74, 0x65, + 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x28, 0x2e, 0x6f, 0x74, + 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x74, 0x12, 0x23, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, + 0x6d, 0x6f, 0x2e, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x22, 0x00, 0x32, 0x4f, 0x0a, 0x0e, 0x50, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x3d, 0x0a, 0x06, + 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x12, 0x17, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x68, 0x61, 0x72, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x62, 0x0a, 0x0c, 0x45, + 0x6d, 0x61, 0x69, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x15, 0x53, + 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6f, + 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x32, + 0x5c, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x6f, 0x75, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x49, 0x0a, 0x0a, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, + 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, + 0x65, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x4f, 0x72, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0x42, 0x0a, + 0x09, 0x41, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x06, 0x47, 0x65, + 0x74, 0x41, 0x64, 0x73, 0x12, 0x13, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x41, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x41, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x32, 0xff, 0x02, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x46, 0x6c, 0x61, + 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x18, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, + 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x47, 0x65, 0x74, 0x46, 0x6c, 0x61, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, + 0x65, 0x6d, 0x6f, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x46, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x1a, 0x2e, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, + 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, + 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x46, 0x6c, 0x61, 0x67, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x49, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x12, 0x1b, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, + 0x6f, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x46, 0x6c, 0x61, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0x13, 0x5a, 0x11, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, + 0x6f, 0x74, 0x65, 0x6c, 0x64, 0x65, 0x6d, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2679,7 +2751,7 @@ func file_demo_proto_rawDescGZIP() []byte { return file_demo_proto_rawDescData } -var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 43) +var file_demo_proto_msgTypes = make([]protoimpl.MessageInfo, 44) var file_demo_proto_goTypes = []interface{}{ (*CartItem)(nil), // 0: oteldemo.CartItem (*AddItemRequest)(nil), // 1: oteldemo.AddItemRequest @@ -2713,17 +2785,18 @@ var file_demo_proto_goTypes = []interface{}{ (*AdRequest)(nil), // 29: oteldemo.AdRequest (*AdResponse)(nil), // 30: oteldemo.AdResponse (*Ad)(nil), // 31: oteldemo.Ad - (*Flag)(nil), // 32: oteldemo.Flag - (*GetFlagRequest)(nil), // 33: oteldemo.GetFlagRequest - (*GetFlagResponse)(nil), // 34: oteldemo.GetFlagResponse - (*CreateFlagRequest)(nil), // 35: oteldemo.CreateFlagRequest - (*CreateFlagResponse)(nil), // 36: oteldemo.CreateFlagResponse - (*UpdateFlagRequest)(nil), // 37: oteldemo.UpdateFlagRequest - (*UpdateFlagResponse)(nil), // 38: oteldemo.UpdateFlagResponse - (*ListFlagsRequest)(nil), // 39: oteldemo.ListFlagsRequest - (*ListFlagsResponse)(nil), // 40: oteldemo.ListFlagsResponse - (*DeleteFlagRequest)(nil), // 41: oteldemo.DeleteFlagRequest - (*DeleteFlagResponse)(nil), // 42: oteldemo.DeleteFlagResponse + (*FlagEvaluationResult)(nil), // 32: oteldemo.FlagEvaluationResult + (*FlagProbability)(nil), // 33: oteldemo.FlagProbability + (*GetFlagRequest)(nil), // 34: oteldemo.GetFlagRequest + (*GetFlagResponse)(nil), // 35: oteldemo.GetFlagResponse + (*CreateFlagRequest)(nil), // 36: oteldemo.CreateFlagRequest + (*CreateFlagResponse)(nil), // 37: oteldemo.CreateFlagResponse + (*UpdateFlagRequest)(nil), // 38: oteldemo.UpdateFlagRequest + (*UpdateFlagResponse)(nil), // 39: oteldemo.UpdateFlagResponse + (*ListFlagsRequest)(nil), // 40: oteldemo.ListFlagsRequest + (*ListFlagsResponse)(nil), // 41: oteldemo.ListFlagsResponse + (*DeleteFlagRequest)(nil), // 42: oteldemo.DeleteFlagRequest + (*DeleteFlagResponse)(nil), // 43: oteldemo.DeleteFlagResponse } var file_demo_proto_depIdxs = []int32{ 0, // 0: oteldemo.AddItemRequest.item:type_name -> oteldemo.CartItem @@ -2749,9 +2822,9 @@ var file_demo_proto_depIdxs = []int32{ 21, // 20: oteldemo.PlaceOrderRequest.credit_card:type_name -> oteldemo.CreditCardInfo 25, // 21: oteldemo.PlaceOrderResponse.order:type_name -> oteldemo.OrderResult 31, // 22: oteldemo.AdResponse.ads:type_name -> oteldemo.Ad - 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.Flag - 32, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.Flag + 32, // 23: oteldemo.GetFlagResponse.flag:type_name -> oteldemo.FlagEvaluationResult + 33, // 24: oteldemo.CreateFlagResponse.flag:type_name -> oteldemo.FlagProbability + 33, // 25: oteldemo.ListFlagsResponse.flag:type_name -> oteldemo.FlagProbability 1, // 26: oteldemo.CartService.AddItem:input_type -> oteldemo.AddItemRequest 3, // 27: oteldemo.CartService.GetCart:input_type -> oteldemo.GetCartRequest 2, // 28: oteldemo.CartService.EmptyCart:input_type -> oteldemo.EmptyCartRequest @@ -2767,11 +2840,11 @@ var file_demo_proto_depIdxs = []int32{ 26, // 38: oteldemo.EmailService.SendOrderConfirmation:input_type -> oteldemo.SendOrderConfirmationRequest 27, // 39: oteldemo.CheckoutService.PlaceOrder:input_type -> oteldemo.PlaceOrderRequest 29, // 40: oteldemo.AdService.GetAds:input_type -> oteldemo.AdRequest - 33, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest - 35, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest - 37, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest - 39, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest - 41, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest + 34, // 41: oteldemo.FeatureFlagService.GetFlag:input_type -> oteldemo.GetFlagRequest + 36, // 42: oteldemo.FeatureFlagService.CreateFlag:input_type -> oteldemo.CreateFlagRequest + 38, // 43: oteldemo.FeatureFlagService.UpdateFlag:input_type -> oteldemo.UpdateFlagRequest + 40, // 44: oteldemo.FeatureFlagService.ListFlags:input_type -> oteldemo.ListFlagsRequest + 42, // 45: oteldemo.FeatureFlagService.DeleteFlag:input_type -> oteldemo.DeleteFlagRequest 5, // 46: oteldemo.CartService.AddItem:output_type -> oteldemo.Empty 4, // 47: oteldemo.CartService.GetCart:output_type -> oteldemo.Cart 5, // 48: oteldemo.CartService.EmptyCart:output_type -> oteldemo.Empty @@ -2787,11 +2860,11 @@ var file_demo_proto_depIdxs = []int32{ 5, // 58: oteldemo.EmailService.SendOrderConfirmation:output_type -> oteldemo.Empty 28, // 59: oteldemo.CheckoutService.PlaceOrder:output_type -> oteldemo.PlaceOrderResponse 30, // 60: oteldemo.AdService.GetAds:output_type -> oteldemo.AdResponse - 34, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse - 36, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse - 38, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse - 40, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse - 42, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse + 35, // 61: oteldemo.FeatureFlagService.GetFlag:output_type -> oteldemo.GetFlagResponse + 37, // 62: oteldemo.FeatureFlagService.CreateFlag:output_type -> oteldemo.CreateFlagResponse + 39, // 63: oteldemo.FeatureFlagService.UpdateFlag:output_type -> oteldemo.UpdateFlagResponse + 41, // 64: oteldemo.FeatureFlagService.ListFlags:output_type -> oteldemo.ListFlagsResponse + 43, // 65: oteldemo.FeatureFlagService.DeleteFlag:output_type -> oteldemo.DeleteFlagResponse 46, // [46:66] is the sub-list for method output_type 26, // [26:46] is the sub-list for method input_type 26, // [26:26] is the sub-list for extension type_name @@ -3190,7 +3263,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Flag); i { + switch v := v.(*FlagEvaluationResult); i { case 0: return &v.state case 1: @@ -3202,7 +3275,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagRequest); i { + switch v := v.(*FlagProbability); i { case 0: return &v.state case 1: @@ -3214,7 +3287,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetFlagResponse); i { + switch v := v.(*GetFlagRequest); i { case 0: return &v.state case 1: @@ -3226,7 +3299,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagRequest); i { + switch v := v.(*GetFlagResponse); i { case 0: return &v.state case 1: @@ -3238,7 +3311,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateFlagResponse); i { + switch v := v.(*CreateFlagRequest); i { case 0: return &v.state case 1: @@ -3250,7 +3323,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagRequest); i { + switch v := v.(*CreateFlagResponse); i { case 0: return &v.state case 1: @@ -3262,7 +3335,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateFlagResponse); i { + switch v := v.(*UpdateFlagRequest); i { case 0: return &v.state case 1: @@ -3274,7 +3347,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsRequest); i { + switch v := v.(*UpdateFlagResponse); i { case 0: return &v.state case 1: @@ -3286,7 +3359,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListFlagsResponse); i { + switch v := v.(*ListFlagsRequest); i { case 0: return &v.state case 1: @@ -3298,7 +3371,7 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteFlagRequest); i { + switch v := v.(*ListFlagsResponse); i { case 0: return &v.state case 1: @@ -3310,6 +3383,18 @@ func file_demo_proto_init() { } } file_demo_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DeleteFlagRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_demo_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DeleteFlagResponse); i { case 0: return &v.state @@ -3328,7 +3413,7 @@ func file_demo_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_demo_proto_rawDesc, NumEnums: 0, - NumMessages: 43, + NumMessages: 44, NumExtensions: 0, NumServices: 10, }, diff --git a/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go b/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go index 2002dfbcdc..2eee2e9830 100644 --- a/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go +++ b/src/productcatalogservice/genproto/oteldemo/demo_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.3.0 -// - protoc v4.25.1 +// - protoc v4.25.2 // source: demo.proto package oteldemo