diff --git a/livekit/livekit_analytics.pb.go b/livekit/livekit_analytics.pb.go index e68ddbae..ad43a21e 100644 --- a/livekit/livekit_analytics.pb.go +++ b/livekit/livekit_analytics.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.21.12 // source: livekit_analytics.proto package livekit diff --git a/livekit/livekit_analytics_grpc.pb.go b/livekit/livekit_analytics_grpc.pb.go index 5ae97665..bfc0b8f4 100644 --- a/livekit/livekit_analytics_grpc.pb.go +++ b/livekit/livekit_analytics_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 v3.20.3 +// - protoc v3.21.12 // source: livekit_analytics.proto package livekit diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index fd4f2604..ecf92266 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.21.12 // source: livekit_egress.proto package livekit diff --git a/livekit/livekit_ingress.pb.go b/livekit/livekit_ingress.pb.go index 36d36dd7..5aea0018 100644 --- a/livekit/livekit_ingress.pb.go +++ b/livekit/livekit_ingress.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.21.12 // source: livekit_ingress.proto package livekit diff --git a/livekit/livekit_internal.pb.go b/livekit/livekit_internal.pb.go index 9c6a4104..7db98d9e 100644 --- a/livekit/livekit_internal.pb.go +++ b/livekit/livekit_internal.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.21.12 // source: livekit_internal.proto package livekit diff --git a/livekit/livekit_models.pb.go b/livekit/livekit_models.pb.go index 6ce6afed..2c035444 100644 --- a/livekit/livekit_models.pb.go +++ b/livekit/livekit_models.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.21.12 // source: livekit_models.proto package livekit @@ -512,6 +512,55 @@ func (ReconnectReason) EnumDescriptor() ([]byte, []int) { return file_livekit_models_proto_rawDescGZIP(), []int{8} } +type SubscriptionStatus int32 + +const ( + SubscriptionStatus_Unsubscribed SubscriptionStatus = 0 + SubscriptionStatus_Desired SubscriptionStatus = 1 + SubscriptionStatus_Subscribed SubscriptionStatus = 2 +) + +// Enum value maps for SubscriptionStatus. +var ( + SubscriptionStatus_name = map[int32]string{ + 0: "Unsubscribed", + 1: "Desired", + 2: "Subscribed", + } + SubscriptionStatus_value = map[string]int32{ + "Unsubscribed": 0, + "Desired": 1, + "Subscribed": 2, + } +) + +func (x SubscriptionStatus) Enum() *SubscriptionStatus { + p := new(SubscriptionStatus) + *p = x + return p +} + +func (x SubscriptionStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SubscriptionStatus) Descriptor() protoreflect.EnumDescriptor { + return file_livekit_models_proto_enumTypes[9].Descriptor() +} + +func (SubscriptionStatus) Type() protoreflect.EnumType { + return &file_livekit_models_proto_enumTypes[9] +} + +func (x SubscriptionStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SubscriptionStatus.Descriptor instead. +func (SubscriptionStatus) EnumDescriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{9} +} + type SubscriptionError int32 const ( @@ -545,11 +594,11 @@ func (x SubscriptionError) String() string { } func (SubscriptionError) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_models_proto_enumTypes[9].Descriptor() + return file_livekit_models_proto_enumTypes[10].Descriptor() } func (SubscriptionError) Type() protoreflect.EnumType { - return &file_livekit_models_proto_enumTypes[9] + return &file_livekit_models_proto_enumTypes[10] } func (x SubscriptionError) Number() protoreflect.EnumNumber { @@ -558,7 +607,7 @@ func (x SubscriptionError) Number() protoreflect.EnumNumber { // Deprecated: Use SubscriptionError.Descriptor instead. func (SubscriptionError) EnumDescriptor() ([]byte, []int) { - return file_livekit_models_proto_rawDescGZIP(), []int{9} + return file_livekit_models_proto_rawDescGZIP(), []int{10} } type ParticipantInfo_State int32 @@ -601,11 +650,11 @@ func (x ParticipantInfo_State) String() string { } func (ParticipantInfo_State) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_models_proto_enumTypes[10].Descriptor() + return file_livekit_models_proto_enumTypes[11].Descriptor() } func (ParticipantInfo_State) Type() protoreflect.EnumType { - return &file_livekit_models_proto_enumTypes[10] + return &file_livekit_models_proto_enumTypes[11] } func (x ParticipantInfo_State) Number() protoreflect.EnumNumber { @@ -650,11 +699,11 @@ func (x Encryption_Type) String() string { } func (Encryption_Type) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_models_proto_enumTypes[11].Descriptor() + return file_livekit_models_proto_enumTypes[12].Descriptor() } func (Encryption_Type) Type() protoreflect.EnumType { - return &file_livekit_models_proto_enumTypes[11] + return &file_livekit_models_proto_enumTypes[12] } func (x Encryption_Type) Number() protoreflect.EnumNumber { @@ -696,11 +745,11 @@ func (x DataPacket_Kind) String() string { } func (DataPacket_Kind) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_models_proto_enumTypes[12].Descriptor() + return file_livekit_models_proto_enumTypes[13].Descriptor() } func (DataPacket_Kind) Type() protoreflect.EnumType { - return &file_livekit_models_proto_enumTypes[12] + return &file_livekit_models_proto_enumTypes[13] } func (x DataPacket_Kind) Number() protoreflect.EnumNumber { @@ -742,11 +791,11 @@ func (x ServerInfo_Edition) String() string { } func (ServerInfo_Edition) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_models_proto_enumTypes[13].Descriptor() + return file_livekit_models_proto_enumTypes[14].Descriptor() } func (ServerInfo_Edition) Type() protoreflect.EnumType { - return &file_livekit_models_proto_enumTypes[13] + return &file_livekit_models_proto_enumTypes[14] } func (x ServerInfo_Edition) Number() protoreflect.EnumNumber { @@ -815,11 +864,11 @@ func (x ClientInfo_SDK) String() string { } func (ClientInfo_SDK) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_models_proto_enumTypes[14].Descriptor() + return file_livekit_models_proto_enumTypes[15].Descriptor() } func (ClientInfo_SDK) Type() protoreflect.EnumType { - return &file_livekit_models_proto_enumTypes[14] + return &file_livekit_models_proto_enumTypes[15] } func (x ClientInfo_SDK) Number() protoreflect.EnumNumber { @@ -2120,7 +2169,8 @@ type ClientInfo struct { BrowserVersion string `protobuf:"bytes,8,opt,name=browser_version,json=browserVersion,proto3" json:"browser_version,omitempty"` Address string `protobuf:"bytes,9,opt,name=address,proto3" json:"address,omitempty"` // wifi, wired, cellular, vpn, empty if not known - Network string `protobuf:"bytes,10,opt,name=network,proto3" json:"network,omitempty"` + Network string `protobuf:"bytes,10,opt,name=network,proto3" json:"network,omitempty"` + Concurrency int32 `protobuf:"varint,11,opt,name=concurrency,proto3" json:"concurrency,omitempty"` } func (x *ClientInfo) Reset() { @@ -2225,6 +2275,13 @@ func (x *ClientInfo) GetNetwork() string { return "" } +func (x *ClientInfo) GetConcurrency() int32 { + if x != nil { + return x.Concurrency + } + return 0 +} + // server provided client configuration type ClientConfiguration struct { state protoimpl.MessageState @@ -2847,207 +2904,1131 @@ func (x *TimedVersion) GetTicks() int32 { return 0 } -var File_livekit_models_proto protoreflect.FileDescriptor +type ClientReport struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields -var file_livekit_models_proto_rawDesc = []byte{ - 0x0a, 0x14, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x1a, - 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xd2, 0x03, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x69, 0x6d, - 0x65, 0x6f, 0x75, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, - 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, - 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x70, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x75, 0x72, - 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x35, 0x0a, 0x0e, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x64, 0x65, - 0x63, 0x52, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x10, - 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0d, 0x6e, 0x75, 0x6d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x12, 0x29, - 0x0a, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, - 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x6c, 0x61, - 0x79, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x6f, - 0x75, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, - 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x38, 0x0a, 0x05, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x12, 0x12, - 0x0a, 0x04, 0x6d, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x69, - 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x6d, 0x74, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x6d, 0x74, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x22, - 0x3a, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, - 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x22, 0xb1, 0x02, 0x0a, 0x15, - 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x63, 0x61, - 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, - 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0a, 0x63, 0x61, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x63, - 0x61, 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x13, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, - 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x54, 0x72, 0x61, - 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x11, 0x63, 0x61, 0x6e, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x73, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, - 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x69, 0x64, - 0x64, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, - 0x2e, 0x0a, 0x13, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x61, - 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, - 0xc3, 0x03, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, - 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x34, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x1e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x63, 0x6b, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, - 0x74, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x72, 0x61, - 0x63, 0x6b, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, - 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0a, 0x70, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, - 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, - 0x70, 0x61, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, - 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, - 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, - 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, - 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x73, 0x68, 0x65, 0x72, 0x22, 0x3e, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, - 0x0a, 0x07, 0x4a, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4a, - 0x4f, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, - 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, - 0x54, 0x45, 0x44, 0x10, 0x03, 0x22, 0x33, 0x0a, 0x0a, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0x25, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, - 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x43, 0x4d, 0x10, 0x01, 0x12, 0x0a, - 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x02, 0x22, 0x82, 0x01, 0x0a, 0x12, 0x53, - 0x69, 0x6d, 0x75, 0x6c, 0x63, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x6d, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x69, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, - 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, - 0x65, 0x6f, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x06, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, - 0xa6, 0x04, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, - 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, - 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, - 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, - 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, - 0x75, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, 0x75, 0x74, 0x65, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x63, 0x61, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x09, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x63, 0x61, 0x73, 0x74, 0x12, 0x1f, 0x0a, - 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x74, 0x78, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x74, 0x78, 0x12, 0x2c, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, - 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x06, - 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, - 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x4c, 0x61, 0x79, 0x65, - 0x72, 0x52, 0x06, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, - 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x64, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x63, 0x6f, 0x64, 0x65, - 0x63, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, - 0x69, 0x74, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x63, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x64, 0x65, - 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x73, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x74, 0x65, 0x72, 0x65, 0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x72, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x76, - 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x99, 0x01, 0x0a, 0x0a, 0x56, 0x69, 0x64, - 0x65, 0x6f, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, - 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, - 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, - 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, - 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, - 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x73, 0x73, 0x72, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, - 0x73, 0x73, 0x72, 0x63, 0x22, 0xc9, 0x01, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x12, 0x29, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x07, - 0x73, 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70, - 0x65, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x73, - 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x22, 0x1f, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0c, - 0x0a, 0x08, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, - 0x4c, 0x4f, 0x53, 0x53, 0x59, 0x10, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x47, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x65, - 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x70, 0x65, 0x61, 0x6b, - 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x69, 0x76, 0x65, - 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x08, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x22, 0x4d, 0x0a, 0x0b, 0x53, 0x70, 0x65, - 0x61, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x0a, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x53, 0x69, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x69, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x88, 0x01, 0x01, - 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x5b, 0x0a, 0x11, 0x50, 0x61, - 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x12, - 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x73, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, - 0x69, 0x70, 0x61, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x63, - 0x6b, 0x5f, 0x73, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, - 0x61, 0x63, 0x6b, 0x53, 0x69, 0x64, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x35, 0x0a, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, - 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6e, - 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, - 0x64, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x69, 0x6e, + AudioPublications []*ClientReport_AudioPublicationReport `protobuf:"bytes,1,rep,name=audioPublications,proto3" json:"audioPublications,omitempty"` + VideoPublications []*ClientReport_VideoPublicationReport `protobuf:"bytes,2,rep,name=videoPublications,proto3" json:"videoPublications,omitempty"` + AudioSubscriptions []*ClientReport_AudioSubscriptionReport `protobuf:"bytes,3,rep,name=audioSubscriptions,proto3" json:"audioSubscriptions,omitempty"` + VideoSubscriptions []*ClientReport_VideoSubscriptionReport `protobuf:"bytes,4,rep,name=videoSubscriptions,proto3" json:"videoSubscriptions,omitempty"` +} + +func (x *ClientReport) Reset() { + *x = ClientReport{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport) ProtoMessage() {} + +func (x *ClientReport) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport.ProtoReflect.Descriptor instead. +func (*ClientReport) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21} +} + +func (x *ClientReport) GetAudioPublications() []*ClientReport_AudioPublicationReport { + if x != nil { + return x.AudioPublications + } + return nil +} + +func (x *ClientReport) GetVideoPublications() []*ClientReport_VideoPublicationReport { + if x != nil { + return x.VideoPublications + } + return nil +} + +func (x *ClientReport) GetAudioSubscriptions() []*ClientReport_AudioSubscriptionReport { + if x != nil { + return x.AudioSubscriptions + } + return nil +} + +func (x *ClientReport) GetVideoSubscriptions() []*ClientReport_VideoSubscriptionReport { + if x != nil { + return x.VideoSubscriptions + } + return nil +} + +type ClientReport_RTCSenderStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ice-candidate-pair + AvailableOutgoingBitrate uint32 `protobuf:"varint,1,opt,name=available_outgoing_bitrate,json=availableOutgoingBitrate,proto3" json:"available_outgoing_bitrate,omitempty"` + // local-candidate + NetworkType string `protobuf:"bytes,2,opt,name=network_type,json=networkType,proto3" json:"network_type,omitempty"` + // outbound-rtp + NackCount uint32 `protobuf:"varint,3,opt,name=nack_count,json=nackCount,proto3" json:"nack_count,omitempty"` + Timestamp uint64 `protobuf:"varint,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + StreamId string `protobuf:"bytes,5,opt,name=stream_id,json=streamId,proto3" json:"stream_id,omitempty"` +} + +func (x *ClientReport_RTCSenderStats) Reset() { + *x = ClientReport_RTCSenderStats{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_RTCSenderStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_RTCSenderStats) ProtoMessage() {} + +func (x *ClientReport_RTCSenderStats) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_RTCSenderStats.ProtoReflect.Descriptor instead. +func (*ClientReport_RTCSenderStats) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 0} +} + +func (x *ClientReport_RTCSenderStats) GetAvailableOutgoingBitrate() uint32 { + if x != nil { + return x.AvailableOutgoingBitrate + } + return 0 +} + +func (x *ClientReport_RTCSenderStats) GetNetworkType() string { + if x != nil { + return x.NetworkType + } + return "" +} + +func (x *ClientReport_RTCSenderStats) GetNackCount() uint32 { + if x != nil { + return x.NackCount + } + return 0 +} + +func (x *ClientReport_RTCSenderStats) GetTimestamp() uint64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *ClientReport_RTCSenderStats) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + +type ClientReport_RTCAudioSenderStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CommonStats *ClientReport_RTCSenderStats `protobuf:"bytes,1,opt,name=common_stats,json=commonStats,proto3" json:"common_stats,omitempty"` + // media-source + TotalAudioEnergy float64 `protobuf:"fixed64,2,opt,name=total_audio_energy,json=totalAudioEnergy,proto3" json:"total_audio_energy,omitempty"` + TotalSamplesDuration float64 `protobuf:"fixed64,3,opt,name=total_samples_duration,json=totalSamplesDuration,proto3" json:"total_samples_duration,omitempty"` +} + +func (x *ClientReport_RTCAudioSenderStats) Reset() { + *x = ClientReport_RTCAudioSenderStats{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_RTCAudioSenderStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_RTCAudioSenderStats) ProtoMessage() {} + +func (x *ClientReport_RTCAudioSenderStats) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_RTCAudioSenderStats.ProtoReflect.Descriptor instead. +func (*ClientReport_RTCAudioSenderStats) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 1} +} + +func (x *ClientReport_RTCAudioSenderStats) GetCommonStats() *ClientReport_RTCSenderStats { + if x != nil { + return x.CommonStats + } + return nil +} + +func (x *ClientReport_RTCAudioSenderStats) GetTotalAudioEnergy() float64 { + if x != nil { + return x.TotalAudioEnergy + } + return 0 +} + +func (x *ClientReport_RTCAudioSenderStats) GetTotalSamplesDuration() float64 { + if x != nil { + return x.TotalSamplesDuration + } + return 0 +} + +type ClientReport_RTCVideoSenderStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CommonStats *ClientReport_RTCSenderStats `protobuf:"bytes,1,opt,name=common_stats,json=commonStats,proto3" json:"common_stats,omitempty"` + // outbound-rtp + QualityLimitationDurations map[string]uint32 `protobuf:"bytes,2,rep,name=quality_limitation_durations,json=qualityLimitationDurations,proto3" json:"quality_limitation_durations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` + QualityLimitationReason string `protobuf:"bytes,3,opt,name=quality_limitation_reason,json=qualityLimitationReason,proto3" json:"quality_limitation_reason,omitempty"` + QualityLimitationResolutionChanges uint32 `protobuf:"varint,4,opt,name=quality_limitation_resolution_changes,json=qualityLimitationResolutionChanges,proto3" json:"quality_limitation_resolution_changes,omitempty"` + ScalabilityMode string `protobuf:"bytes,5,opt,name=scalability_mode,json=scalabilityMode,proto3" json:"scalability_mode,omitempty"` + FramesPerSecond uint32 `protobuf:"varint,6,opt,name=frames_per_second,json=framesPerSecond,proto3" json:"frames_per_second,omitempty"` + FramesSent uint64 `protobuf:"varint,7,opt,name=frames_sent,json=framesSent,proto3" json:"frames_sent,omitempty"` + HugeFramesSent uint32 `protobuf:"varint,8,opt,name=huge_frames_sent,json=hugeFramesSent,proto3" json:"huge_frames_sent,omitempty"` + EncoderImplementation string `protobuf:"bytes,9,opt,name=encoder_implementation,json=encoderImplementation,proto3" json:"encoder_implementation,omitempty"` + PowerEfficientEncoder bool `protobuf:"varint,10,opt,name=power_efficient_encoder,json=powerEfficientEncoder,proto3" json:"power_efficient_encoder,omitempty"` +} + +func (x *ClientReport_RTCVideoSenderStats) Reset() { + *x = ClientReport_RTCVideoSenderStats{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_RTCVideoSenderStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_RTCVideoSenderStats) ProtoMessage() {} + +func (x *ClientReport_RTCVideoSenderStats) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[25] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_RTCVideoSenderStats.ProtoReflect.Descriptor instead. +func (*ClientReport_RTCVideoSenderStats) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 2} +} + +func (x *ClientReport_RTCVideoSenderStats) GetCommonStats() *ClientReport_RTCSenderStats { + if x != nil { + return x.CommonStats + } + return nil +} + +func (x *ClientReport_RTCVideoSenderStats) GetQualityLimitationDurations() map[string]uint32 { + if x != nil { + return x.QualityLimitationDurations + } + return nil +} + +func (x *ClientReport_RTCVideoSenderStats) GetQualityLimitationReason() string { + if x != nil { + return x.QualityLimitationReason + } + return "" +} + +func (x *ClientReport_RTCVideoSenderStats) GetQualityLimitationResolutionChanges() uint32 { + if x != nil { + return x.QualityLimitationResolutionChanges + } + return 0 +} + +func (x *ClientReport_RTCVideoSenderStats) GetScalabilityMode() string { + if x != nil { + return x.ScalabilityMode + } + return "" +} + +func (x *ClientReport_RTCVideoSenderStats) GetFramesPerSecond() uint32 { + if x != nil { + return x.FramesPerSecond + } + return 0 +} + +func (x *ClientReport_RTCVideoSenderStats) GetFramesSent() uint64 { + if x != nil { + return x.FramesSent + } + return 0 +} + +func (x *ClientReport_RTCVideoSenderStats) GetHugeFramesSent() uint32 { + if x != nil { + return x.HugeFramesSent + } + return 0 +} + +func (x *ClientReport_RTCVideoSenderStats) GetEncoderImplementation() string { + if x != nil { + return x.EncoderImplementation + } + return "" +} + +func (x *ClientReport_RTCVideoSenderStats) GetPowerEfficientEncoder() bool { + if x != nil { + return x.PowerEfficientEncoder + } + return false +} + +type ClientReport_RTCReceiverStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // inbound-rtp + LastPacketReceivedTimestamp float64 `protobuf:"fixed64,1,opt,name=last_packet_received_timestamp,json=lastPacketReceivedTimestamp,proto3" json:"last_packet_received_timestamp,omitempty"` + Jitter float64 `protobuf:"fixed64,2,opt,name=jitter,proto3" json:"jitter,omitempty"` + PacketsLost int64 `protobuf:"varint,3,opt,name=packets_lost,json=packetsLost,proto3" json:"packets_lost,omitempty"` + Timestamp uint64 `protobuf:"varint,4,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + StreamId string `protobuf:"bytes,5,opt,name=stream_id,json=streamId,proto3" json:"stream_id,omitempty"` +} + +func (x *ClientReport_RTCReceiverStats) Reset() { + *x = ClientReport_RTCReceiverStats{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_RTCReceiverStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_RTCReceiverStats) ProtoMessage() {} + +func (x *ClientReport_RTCReceiverStats) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[26] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_RTCReceiverStats.ProtoReflect.Descriptor instead. +func (*ClientReport_RTCReceiverStats) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 3} +} + +func (x *ClientReport_RTCReceiverStats) GetLastPacketReceivedTimestamp() float64 { + if x != nil { + return x.LastPacketReceivedTimestamp + } + return 0 +} + +func (x *ClientReport_RTCReceiverStats) GetJitter() float64 { + if x != nil { + return x.Jitter + } + return 0 +} + +func (x *ClientReport_RTCReceiverStats) GetPacketsLost() int64 { + if x != nil { + return x.PacketsLost + } + return 0 +} + +func (x *ClientReport_RTCReceiverStats) GetTimestamp() uint64 { + if x != nil { + return x.Timestamp + } + return 0 +} + +func (x *ClientReport_RTCReceiverStats) GetStreamId() string { + if x != nil { + return x.StreamId + } + return "" +} + +type ClientReport_RTCVideoReceiverStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CommonStats *ClientReport_RTCReceiverStats `protobuf:"bytes,1,opt,name=common_stats,json=commonStats,proto3" json:"common_stats,omitempty"` + // inbound-rtp + PliCount uint32 `protobuf:"varint,2,opt,name=pli_count,json=pliCount,proto3" json:"pli_count,omitempty"` + SliCount uint32 `protobuf:"varint,3,opt,name=sli_count,json=sliCount,proto3" json:"sli_count,omitempty"` + FramesDecoded uint32 `protobuf:"varint,4,opt,name=frames_decoded,json=framesDecoded,proto3" json:"frames_decoded,omitempty"` + FramesDropped uint32 `protobuf:"varint,5,opt,name=frames_dropped,json=framesDropped,proto3" json:"frames_dropped,omitempty"` + TotalDecodeTime float64 `protobuf:"fixed64,6,opt,name=total_decode_time,json=totalDecodeTime,proto3" json:"total_decode_time,omitempty"` + PauseCount uint32 `protobuf:"varint,7,opt,name=pause_count,json=pauseCount,proto3" json:"pause_count,omitempty"` + TotalPausesDuration float64 `protobuf:"fixed64,8,opt,name=total_pauses_duration,json=totalPausesDuration,proto3" json:"total_pauses_duration,omitempty"` + FreezeCount uint32 `protobuf:"varint,9,opt,name=freeze_count,json=freezeCount,proto3" json:"freeze_count,omitempty"` + TotalFreezesDuration float64 `protobuf:"fixed64,10,opt,name=total_freezes_duration,json=totalFreezesDuration,proto3" json:"total_freezes_duration,omitempty"` + FirCount uint32 `protobuf:"varint,11,opt,name=fir_count,json=firCount,proto3" json:"fir_count,omitempty"` + DecoderImplementation string `protobuf:"bytes,12,opt,name=decoder_implementation,json=decoderImplementation,proto3" json:"decoder_implementation,omitempty"` + PowerEfficientDecoder bool `protobuf:"varint,13,opt,name=power_efficient_decoder,json=powerEfficientDecoder,proto3" json:"power_efficient_decoder,omitempty"` +} + +func (x *ClientReport_RTCVideoReceiverStats) Reset() { + *x = ClientReport_RTCVideoReceiverStats{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_RTCVideoReceiverStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_RTCVideoReceiverStats) ProtoMessage() {} + +func (x *ClientReport_RTCVideoReceiverStats) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[27] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_RTCVideoReceiverStats.ProtoReflect.Descriptor instead. +func (*ClientReport_RTCVideoReceiverStats) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 4} +} + +func (x *ClientReport_RTCVideoReceiverStats) GetCommonStats() *ClientReport_RTCReceiverStats { + if x != nil { + return x.CommonStats + } + return nil +} + +func (x *ClientReport_RTCVideoReceiverStats) GetPliCount() uint32 { + if x != nil { + return x.PliCount + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetSliCount() uint32 { + if x != nil { + return x.SliCount + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetFramesDecoded() uint32 { + if x != nil { + return x.FramesDecoded + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetFramesDropped() uint32 { + if x != nil { + return x.FramesDropped + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetTotalDecodeTime() float64 { + if x != nil { + return x.TotalDecodeTime + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetPauseCount() uint32 { + if x != nil { + return x.PauseCount + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetTotalPausesDuration() float64 { + if x != nil { + return x.TotalPausesDuration + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetFreezeCount() uint32 { + if x != nil { + return x.FreezeCount + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetTotalFreezesDuration() float64 { + if x != nil { + return x.TotalFreezesDuration + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetFirCount() uint32 { + if x != nil { + return x.FirCount + } + return 0 +} + +func (x *ClientReport_RTCVideoReceiverStats) GetDecoderImplementation() string { + if x != nil { + return x.DecoderImplementation + } + return "" +} + +func (x *ClientReport_RTCVideoReceiverStats) GetPowerEfficientDecoder() bool { + if x != nil { + return x.PowerEfficientDecoder + } + return false +} + +type ClientReport_RTCAudioReceiverStats struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + CommonStats *ClientReport_RTCReceiverStats `protobuf:"bytes,1,opt,name=common_stats,json=commonStats,proto3" json:"common_stats,omitempty"` + TotalSamplesReceived uint64 `protobuf:"varint,2,opt,name=total_samples_received,json=totalSamplesReceived,proto3" json:"total_samples_received,omitempty"` + ConcealedSamples uint64 `protobuf:"varint,3,opt,name=concealed_samples,json=concealedSamples,proto3" json:"concealed_samples,omitempty"` +} + +func (x *ClientReport_RTCAudioReceiverStats) Reset() { + *x = ClientReport_RTCAudioReceiverStats{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_RTCAudioReceiverStats) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_RTCAudioReceiverStats) ProtoMessage() {} + +func (x *ClientReport_RTCAudioReceiverStats) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[28] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_RTCAudioReceiverStats.ProtoReflect.Descriptor instead. +func (*ClientReport_RTCAudioReceiverStats) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 5} +} + +func (x *ClientReport_RTCAudioReceiverStats) GetCommonStats() *ClientReport_RTCReceiverStats { + if x != nil { + return x.CommonStats + } + return nil +} + +func (x *ClientReport_RTCAudioReceiverStats) GetTotalSamplesReceived() uint64 { + if x != nil { + return x.TotalSamplesReceived + } + return 0 +} + +func (x *ClientReport_RTCAudioReceiverStats) GetConcealedSamples() uint64 { + if x != nil { + return x.ConcealedSamples + } + return 0 +} + +type ClientReport_AudioPublicationReport struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sid string `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` + RtcStats *ClientReport_RTCAudioSenderStats `protobuf:"bytes,2,opt,name=rtc_stats,json=rtcStats,proto3" json:"rtc_stats,omitempty"` + ReadyState int32 `protobuf:"varint,3,opt,name=ready_state,json=readyState,proto3" json:"ready_state,omitempty"` + Muted bool `protobuf:"varint,4,opt,name=muted,proto3" json:"muted,omitempty"` +} + +func (x *ClientReport_AudioPublicationReport) Reset() { + *x = ClientReport_AudioPublicationReport{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_AudioPublicationReport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_AudioPublicationReport) ProtoMessage() {} + +func (x *ClientReport_AudioPublicationReport) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[29] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_AudioPublicationReport.ProtoReflect.Descriptor instead. +func (*ClientReport_AudioPublicationReport) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 6} +} + +func (x *ClientReport_AudioPublicationReport) GetSid() string { + if x != nil { + return x.Sid + } + return "" +} + +func (x *ClientReport_AudioPublicationReport) GetRtcStats() *ClientReport_RTCAudioSenderStats { + if x != nil { + return x.RtcStats + } + return nil +} + +func (x *ClientReport_AudioPublicationReport) GetReadyState() int32 { + if x != nil { + return x.ReadyState + } + return 0 +} + +func (x *ClientReport_AudioPublicationReport) GetMuted() bool { + if x != nil { + return x.Muted + } + return false +} + +type ClientReport_VideoPublicationReport struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sid string `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` + RtcStats *ClientReport_RTCVideoSenderStats `protobuf:"bytes,2,opt,name=rtc_stats,json=rtcStats,proto3" json:"rtc_stats,omitempty"` + ReadyState int32 `protobuf:"varint,3,opt,name=ready_state,json=readyState,proto3" json:"ready_state,omitempty"` + Muted bool `protobuf:"varint,4,opt,name=muted,proto3" json:"muted,omitempty"` +} + +func (x *ClientReport_VideoPublicationReport) Reset() { + *x = ClientReport_VideoPublicationReport{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_VideoPublicationReport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_VideoPublicationReport) ProtoMessage() {} + +func (x *ClientReport_VideoPublicationReport) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[30] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_VideoPublicationReport.ProtoReflect.Descriptor instead. +func (*ClientReport_VideoPublicationReport) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 7} +} + +func (x *ClientReport_VideoPublicationReport) GetSid() string { + if x != nil { + return x.Sid + } + return "" +} + +func (x *ClientReport_VideoPublicationReport) GetRtcStats() *ClientReport_RTCVideoSenderStats { + if x != nil { + return x.RtcStats + } + return nil +} + +func (x *ClientReport_VideoPublicationReport) GetReadyState() int32 { + if x != nil { + return x.ReadyState + } + return 0 +} + +func (x *ClientReport_VideoPublicationReport) GetMuted() bool { + if x != nil { + return x.Muted + } + return false +} + +type ClientReport_AudioSubscriptionReport struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sid string `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` + RtcStats *ClientReport_RTCAudioReceiverStats `protobuf:"bytes,2,opt,name=rtc_stats,json=rtcStats,proto3" json:"rtc_stats,omitempty"` + ReadyState int32 `protobuf:"varint,3,opt,name=ready_state,json=readyState,proto3" json:"ready_state,omitempty"` + SubscriptionStatus SubscriptionStatus `protobuf:"varint,4,opt,name=subscription_status,json=subscriptionStatus,proto3,enum=livekit.SubscriptionStatus" json:"subscription_status,omitempty"` + Allowed bool `protobuf:"varint,5,opt,name=allowed,proto3" json:"allowed,omitempty"` +} + +func (x *ClientReport_AudioSubscriptionReport) Reset() { + *x = ClientReport_AudioSubscriptionReport{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_AudioSubscriptionReport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_AudioSubscriptionReport) ProtoMessage() {} + +func (x *ClientReport_AudioSubscriptionReport) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[31] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_AudioSubscriptionReport.ProtoReflect.Descriptor instead. +func (*ClientReport_AudioSubscriptionReport) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 8} +} + +func (x *ClientReport_AudioSubscriptionReport) GetSid() string { + if x != nil { + return x.Sid + } + return "" +} + +func (x *ClientReport_AudioSubscriptionReport) GetRtcStats() *ClientReport_RTCAudioReceiverStats { + if x != nil { + return x.RtcStats + } + return nil +} + +func (x *ClientReport_AudioSubscriptionReport) GetReadyState() int32 { + if x != nil { + return x.ReadyState + } + return 0 +} + +func (x *ClientReport_AudioSubscriptionReport) GetSubscriptionStatus() SubscriptionStatus { + if x != nil { + return x.SubscriptionStatus + } + return SubscriptionStatus_Unsubscribed +} + +func (x *ClientReport_AudioSubscriptionReport) GetAllowed() bool { + if x != nil { + return x.Allowed + } + return false +} + +type ClientReport_VideoSubscriptionReport struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Sid string `protobuf:"bytes,1,opt,name=sid,proto3" json:"sid,omitempty"` + RtcStats *ClientReport_RTCVideoReceiverStats `protobuf:"bytes,2,opt,name=rtc_stats,json=rtcStats,proto3" json:"rtc_stats,omitempty"` + ReadyState int32 `protobuf:"varint,3,opt,name=ready_state,json=readyState,proto3" json:"ready_state,omitempty"` + SubscriptionStatus SubscriptionStatus `protobuf:"varint,4,opt,name=subscription_status,json=subscriptionStatus,proto3,enum=livekit.SubscriptionStatus" json:"subscription_status,omitempty"` + Allowed bool `protobuf:"varint,5,opt,name=allowed,proto3" json:"allowed,omitempty"` +} + +func (x *ClientReport_VideoSubscriptionReport) Reset() { + *x = ClientReport_VideoSubscriptionReport{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientReport_VideoSubscriptionReport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientReport_VideoSubscriptionReport) ProtoMessage() {} + +func (x *ClientReport_VideoSubscriptionReport) ProtoReflect() protoreflect.Message { + mi := &file_livekit_models_proto_msgTypes[32] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientReport_VideoSubscriptionReport.ProtoReflect.Descriptor instead. +func (*ClientReport_VideoSubscriptionReport) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{21, 9} +} + +func (x *ClientReport_VideoSubscriptionReport) GetSid() string { + if x != nil { + return x.Sid + } + return "" +} + +func (x *ClientReport_VideoSubscriptionReport) GetRtcStats() *ClientReport_RTCVideoReceiverStats { + if x != nil { + return x.RtcStats + } + return nil +} + +func (x *ClientReport_VideoSubscriptionReport) GetReadyState() int32 { + if x != nil { + return x.ReadyState + } + return 0 +} + +func (x *ClientReport_VideoSubscriptionReport) GetSubscriptionStatus() SubscriptionStatus { + if x != nil { + return x.SubscriptionStatus + } + return SubscriptionStatus_Unsubscribed +} + +func (x *ClientReport_VideoSubscriptionReport) GetAllowed() bool { + if x != nil { + return x.Allowed + } + return false +} + +var File_livekit_models_proto protoreflect.FileDescriptor + +var file_livekit_models_proto_rawDesc = []byte{ + 0x0a, 0x14, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x1a, + 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0xd2, 0x03, 0x0a, 0x04, 0x52, 0x6f, 0x6f, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x23, 0x0a, 0x0d, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x74, + 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x6d, 0x61, 0x78, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, + 0x23, 0x0a, 0x0d, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x75, 0x72, 0x6e, 0x5f, 0x70, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x75, 0x72, + 0x6e, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x35, 0x0a, 0x0e, 0x65, 0x6e, 0x61, + 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x64, 0x65, + 0x63, 0x52, 0x0d, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x73, + 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x29, 0x0a, 0x10, + 0x6e, 0x75, 0x6d, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x6e, 0x75, 0x6d, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x6e, 0x75, 0x6d, 0x5f, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x6e, 0x75, 0x6d, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x73, 0x12, 0x29, + 0x0a, 0x10, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x0d, 0x70, 0x6c, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x6c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x38, 0x0a, 0x05, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x12, 0x12, + 0x0a, 0x04, 0x6d, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6d, 0x69, + 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x6d, 0x74, 0x70, 0x5f, 0x6c, 0x69, 0x6e, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x6d, 0x74, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x22, + 0x3a, 0x0a, 0x0c, 0x50, 0x6c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, + 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x22, 0xb1, 0x02, 0x0a, 0x15, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x63, 0x61, + 0x6e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x61, + 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x63, 0x61, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x63, + 0x61, 0x6e, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x13, 0x63, 0x61, 0x6e, 0x5f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x09, 0x20, 0x03, + 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x54, 0x72, 0x61, + 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x11, 0x63, 0x61, 0x6e, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x68, + 0x69, 0x64, 0x64, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x68, 0x69, 0x64, + 0x64, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x12, + 0x2e, 0x0a, 0x13, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x63, 0x61, + 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0xc3, 0x03, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x34, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x63, 0x6b, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, + 0x74, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x72, 0x61, + 0x63, 0x6b, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x1b, 0x0a, 0x09, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x08, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x41, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x0a, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, + 0x70, 0x61, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, + 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, + 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, + 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, + 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x73, 0x68, 0x65, 0x72, 0x22, 0x3e, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, + 0x0a, 0x07, 0x4a, 0x4f, 0x49, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4a, + 0x4f, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x41, 0x43, 0x54, 0x49, 0x56, + 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, + 0x54, 0x45, 0x44, 0x10, 0x03, 0x22, 0x33, 0x0a, 0x0a, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x25, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, + 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x43, 0x4d, 0x10, 0x01, 0x12, 0x0a, + 0x0a, 0x06, 0x43, 0x55, 0x53, 0x54, 0x4f, 0x4d, 0x10, 0x02, 0x22, 0x82, 0x01, 0x0a, 0x12, 0x53, + 0x69, 0x6d, 0x75, 0x6c, 0x63, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x69, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, + 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x06, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, + 0x65, 0x6f, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x06, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x22, + 0xa6, 0x04, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, + 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, + 0x26, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, + 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, + 0x75, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, 0x75, 0x74, 0x65, + 0x64, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x63, 0x61, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x73, 0x69, 0x6d, 0x75, 0x6c, 0x63, 0x61, 0x73, 0x74, 0x12, 0x1f, 0x0a, + 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x64, 0x74, 0x78, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x44, 0x74, 0x78, 0x12, 0x2c, + 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, + 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x06, + 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, + 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x4c, 0x61, 0x79, 0x65, + 0x72, 0x52, 0x06, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x69, 0x6d, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, + 0x6d, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x64, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x06, 0x63, 0x6f, 0x64, 0x65, + 0x63, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, + 0x69, 0x74, 0x2e, 0x53, 0x69, 0x6d, 0x75, 0x6c, 0x63, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x64, 0x65, + 0x63, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x73, 0x74, 0x65, 0x72, 0x65, 0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, + 0x74, 0x65, 0x72, 0x65, 0x6f, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, + 0x5f, 0x72, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x61, + 0x62, 0x6c, 0x65, 0x52, 0x65, 0x64, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x76, + 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x22, 0x99, 0x01, 0x0a, 0x0a, 0x56, 0x69, 0x64, + 0x65, 0x6f, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x2f, 0x0a, 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, + 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x52, + 0x07, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, + 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, + 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x73, 0x73, 0x72, 0x63, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, + 0x73, 0x73, 0x72, 0x63, 0x22, 0xc9, 0x01, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x50, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x18, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x61, 0x74, 0x61, + 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x12, 0x29, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x13, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x50, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x48, 0x00, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x07, + 0x73, 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70, + 0x65, 0x61, 0x6b, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x73, + 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x22, 0x1f, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0c, + 0x0a, 0x08, 0x52, 0x45, 0x4c, 0x49, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, + 0x4c, 0x4f, 0x53, 0x53, 0x59, 0x10, 0x01, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x47, 0x0a, 0x13, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x65, + 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x70, 0x65, 0x61, 0x6b, + 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x69, 0x76, 0x65, + 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x08, 0x73, 0x70, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x73, 0x22, 0x4d, 0x0a, 0x0b, 0x53, 0x70, 0x65, + 0x61, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x65, + 0x76, 0x65, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x9f, 0x01, 0x0a, 0x0a, 0x55, 0x73, 0x65, + 0x72, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x53, 0x69, 0x64, + 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x29, 0x0a, 0x10, 0x64, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x69, 0x64, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x69, 0x64, 0x73, 0x12, 0x19, 0x0a, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x88, 0x01, 0x01, + 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x22, 0x5b, 0x0a, 0x11, 0x50, 0x61, + 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x73, 0x12, + 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x5f, 0x73, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, + 0x69, 0x70, 0x61, 0x6e, 0x74, 0x53, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x61, 0x63, + 0x6b, 0x5f, 0x73, 0x69, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, + 0x61, 0x63, 0x6b, 0x53, 0x69, 0x64, 0x73, 0x22, 0xed, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x35, 0x0a, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, + 0x74, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x6f, + 0x64, 0x65, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x62, 0x75, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x22, 0x0a, 0x07, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, - 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x10, 0x01, 0x22, 0xbc, 0x03, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, + 0x43, 0x6c, 0x6f, 0x75, 0x64, 0x10, 0x01, 0x22, 0xde, 0x03, 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x0a, 0x03, 0x73, 0x64, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x53, 0x44, 0x4b, 0x52, 0x03, 0x73, 0x64, @@ -3067,224 +4048,442 @@ var file_livekit_models_proto_rawDesc = []byte{ 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x22, 0x83, 0x01, 0x0a, 0x03, 0x53, 0x44, 0x4b, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4a, 0x53, 0x10, 0x01, 0x12, 0x09, 0x0a, - 0x05, 0x53, 0x57, 0x49, 0x46, 0x54, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x4e, 0x44, 0x52, - 0x4f, 0x49, 0x44, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x4c, 0x55, 0x54, 0x54, 0x45, 0x52, - 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x4f, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x4e, - 0x49, 0x54, 0x59, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x41, 0x43, 0x54, 0x5f, 0x4e, - 0x41, 0x54, 0x49, 0x56, 0x45, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x55, 0x53, 0x54, 0x10, - 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x09, 0x12, 0x07, 0x0a, - 0x03, 0x43, 0x50, 0x50, 0x10, 0x0a, 0x22, 0xc9, 0x02, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, - 0x0a, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x69, 0x64, 0x65, - 0x6f, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, - 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, - 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x12, 0x49, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, - 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, - 0x10, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x63, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, - 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x64, - 0x65, 0x63, 0x73, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x64, - 0x65, 0x63, 0x73, 0x12, 0x3d, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x6c, - 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, - 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x52, 0x65, 0x6c, - 0x61, 0x79, 0x22, 0x5d, 0x0a, 0x12, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x10, 0x68, 0x61, 0x72, 0x64, - 0x77, 0x61, 0x72, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x0f, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, - 0x72, 0x22, 0x62, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x64, - 0x65, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6f, - 0x64, 0x65, 0x63, 0x52, 0x06, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, - 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x52, 0x07, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x73, 0x68, 0x22, 0x81, 0x0e, 0x0a, 0x08, 0x52, 0x54, 0x50, 0x53, 0x74, 0x61, - 0x74, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, - 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x6e, 0x64, - 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, - 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x27, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, - 0x79, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x73, 0x74, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x4c, 0x6f, 0x73, - 0x74, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x73, 0x73, - 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, - 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x70, 0x61, 0x63, - 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, - 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x64, 0x75, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x70, 0x61, - 0x63, 0x6b, 0x65, 0x74, 0x73, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x32, - 0x0a, 0x15, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x13, 0x70, - 0x61, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x61, - 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x64, 0x75, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x62, 0x79, 0x74, - 0x65, 0x73, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x64, 0x75, 0x70, 0x6c, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x75, 0x70, - 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, 0x62, 0x69, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x27, - 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, - 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x5f, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, 0x64, 0x64, - 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x5f, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x14, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, 0x61, 0x64, - 0x64, 0x69, 0x6e, 0x67, 0x18, 0x29, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x27, - 0x0a, 0x0f, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, - 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x14, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x18, - 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x4f, 0x75, - 0x74, 0x4f, 0x66, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x72, 0x61, 0x6d, - 0x65, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x15, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, - 0x25, 0x0a, 0x0e, 0x6a, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x6a, 0x69, 0x74, 0x74, 0x65, 0x72, 0x43, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6a, 0x69, 0x74, 0x74, 0x65, 0x72, - 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x17, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6a, 0x69, 0x74, 0x74, - 0x65, 0x72, 0x4d, 0x61, 0x78, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x61, 0x70, 0x5f, 0x68, 0x69, 0x73, - 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6c, - 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x54, 0x50, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, - 0x47, 0x61, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x52, 0x0c, 0x67, 0x61, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, - 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x6e, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, 0x63, 0x6b, 0x5f, 0x61, 0x63, - 0x6b, 0x73, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6e, 0x61, 0x63, 0x6b, 0x41, 0x63, - 0x6b, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x61, 0x63, 0x6b, 0x5f, 0x6d, 0x69, 0x73, 0x73, 0x65, - 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6e, 0x61, 0x63, 0x6b, 0x4d, 0x69, 0x73, - 0x73, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x61, 0x63, 0x6b, 0x5f, 0x72, 0x65, 0x70, 0x65, - 0x61, 0x74, 0x65, 0x64, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6e, 0x61, 0x63, 0x6b, - 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6c, 0x69, 0x73, - 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6c, 0x69, 0x73, 0x12, 0x35, 0x0a, 0x08, - 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x69, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x6c, 0x61, 0x73, 0x74, - 0x50, 0x6c, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x72, 0x73, 0x18, 0x1d, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x04, 0x66, 0x69, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x66, 0x69, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x72, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x74, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x1f, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x74, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, - 0x17, 0x0a, 0x07, 0x72, 0x74, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x72, 0x74, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, - 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6b, 0x65, - 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x6c, 0x61, 0x73, - 0x74, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, 0x61, 0x79, - 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x6c, 0x69, 0x73, 0x18, 0x23, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0d, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x6c, 0x69, - 0x73, 0x12, 0x49, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x6c, 0x69, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x6c, 0x61, 0x73, 0x74, - 0x4c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x6c, 0x69, 0x12, 0x1f, 0x0a, 0x0b, - 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x64, 0x72, 0x69, 0x66, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x07, 0x64, 0x72, 0x69, 0x66, 0x74, 0x4d, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x47, 0x61, 0x70, 0x48, - 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x43, 0x0a, 0x0c, 0x54, 0x69, 0x6d, - 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x6e, 0x69, - 0x78, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x75, - 0x6e, 0x69, 0x78, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x63, 0x6b, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x69, 0x63, 0x6b, 0x73, 0x2a, 0x2f, - 0x0a, 0x0a, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x0a, - 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x41, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x4f, 0x50, 0x55, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x41, 0x43, 0x10, 0x02, 0x2a, - 0x56, 0x0a, 0x0a, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x12, 0x0e, 0x0a, - 0x0a, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x43, 0x10, 0x00, 0x12, 0x11, 0x0a, - 0x0d, 0x48, 0x32, 0x36, 0x34, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, - 0x12, 0x0d, 0x0a, 0x09, 0x48, 0x32, 0x36, 0x34, 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x12, - 0x0d, 0x0a, 0x09, 0x48, 0x32, 0x36, 0x34, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x03, 0x12, 0x07, - 0x0a, 0x03, 0x56, 0x50, 0x38, 0x10, 0x04, 0x2a, 0x2b, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x63, 0x6b, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x10, 0x00, 0x12, - 0x09, 0x0a, 0x05, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, - 0x54, 0x41, 0x10, 0x02, 0x2a, 0x60, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, - 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, - 0x53, 0x43, 0x52, 0x45, 0x45, 0x4e, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, 0x16, - 0x0a, 0x12, 0x53, 0x43, 0x52, 0x45, 0x45, 0x4e, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x5f, 0x41, - 0x55, 0x44, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0x36, 0x0a, 0x0c, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, - 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, - 0x49, 0x47, 0x48, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x46, 0x46, 0x10, 0x03, 0x2a, 0x36, - 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x4f, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, - 0x04, 0x47, 0x4f, 0x4f, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x58, 0x43, 0x45, 0x4c, - 0x4c, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x2a, 0x3b, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x09, 0x0a, - 0x05, 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, - 0x42, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, - 0x44, 0x10, 0x02, 0x2a, 0xba, 0x01, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, - 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x54, 0x45, 0x44, - 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, - 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, - 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x48, 0x55, 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x12, - 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x52, - 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x4f, 0x4f, 0x4d, - 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, - 0x41, 0x54, 0x45, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x06, 0x12, 0x10, - 0x0a, 0x0c, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x07, - 0x2a, 0x89, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x52, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, - 0x4c, 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x17, 0x0a, 0x13, 0x52, 0x52, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x52, - 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x52, 0x5f, - 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x52, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, - 0x5f, 0x43, 0x41, 0x4e, 0x44, 0x49, 0x44, 0x41, 0x54, 0x45, 0x10, 0x04, 0x2a, 0x54, 0x0a, 0x11, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x43, 0x5f, 0x55, 0x4e, - 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x53, - 0x45, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x4e, 0x4f, 0x54, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x02, 0x42, 0x46, 0x5a, 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0xaa, 0x02, 0x0d, 0x4c, 0x69, 0x76, 0x65, - 0x4b, 0x69, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0xea, 0x02, 0x0e, 0x4c, 0x69, 0x76, 0x65, - 0x4b, 0x69, 0x74, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x22, 0x83, 0x01, 0x0a, 0x03, 0x53, 0x44, 0x4b, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x06, 0x0a, 0x02, 0x4a, 0x53, 0x10, 0x01, 0x12, + 0x09, 0x0a, 0x05, 0x53, 0x57, 0x49, 0x46, 0x54, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x4e, + 0x44, 0x52, 0x4f, 0x49, 0x44, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x4c, 0x55, 0x54, 0x54, + 0x45, 0x52, 0x10, 0x04, 0x12, 0x06, 0x0a, 0x02, 0x47, 0x4f, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, + 0x55, 0x4e, 0x49, 0x54, 0x59, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x41, 0x43, 0x54, + 0x5f, 0x4e, 0x41, 0x54, 0x49, 0x56, 0x45, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x55, 0x53, + 0x54, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x59, 0x54, 0x48, 0x4f, 0x4e, 0x10, 0x09, 0x12, + 0x07, 0x0a, 0x03, 0x43, 0x50, 0x50, 0x10, 0x0a, 0x22, 0xc9, 0x02, 0x0a, 0x13, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x31, 0x0a, 0x05, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x69, + 0x64, 0x65, 0x6f, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x56, 0x69, + 0x64, 0x65, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x06, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x12, 0x49, 0x0a, 0x11, 0x72, 0x65, 0x73, 0x75, + 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x52, 0x10, 0x72, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x5f, + 0x63, 0x6f, 0x64, 0x65, 0x63, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, + 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x43, + 0x6f, 0x64, 0x65, 0x63, 0x73, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x43, + 0x6f, 0x64, 0x65, 0x63, 0x73, 0x12, 0x3d, 0x0a, 0x0b, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x72, + 0x65, 0x6c, 0x61, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x76, + 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x22, 0x5d, 0x0a, 0x12, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x10, 0x68, 0x61, + 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x52, 0x0f, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x45, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x72, 0x22, 0x62, 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x43, + 0x6f, 0x64, 0x65, 0x63, 0x73, 0x12, 0x26, 0x0a, 0x06, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, + 0x43, 0x6f, 0x64, 0x65, 0x63, 0x52, 0x06, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x73, 0x12, 0x28, 0x0a, + 0x07, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x52, 0x07, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x22, 0x81, 0x0e, 0x0a, 0x08, 0x52, 0x54, 0x50, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x35, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, + 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x0a, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x18, 0x27, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, + 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x73, 0x74, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x4c, + 0x6f, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x6f, + 0x73, 0x73, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x73, 0x73, 0x52, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, + 0x16, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x6c, 0x6f, 0x73, 0x73, 0x5f, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x4c, 0x6f, 0x73, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x61, 0x67, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x64, + 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, + 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x12, 0x32, 0x0a, 0x15, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x64, 0x75, 0x70, 0x6c, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x13, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x52, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x64, 0x75, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x34, 0x0a, + 0x16, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x64, 0x75, + 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x04, 0x52, 0x14, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x11, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x64, + 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x10, + 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x44, 0x75, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x65, + 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x61, 0x64, 0x64, + 0x69, 0x6e, 0x67, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x70, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x73, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2e, 0x0a, 0x13, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x61, 0x74, 0x65, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x50, 0x61, + 0x64, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x62, 0x79, 0x74, + 0x65, 0x73, 0x5f, 0x70, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0c, 0x62, 0x79, 0x74, 0x65, 0x73, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x30, + 0x0a, 0x14, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x70, + 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x29, 0x20, 0x01, 0x28, 0x04, 0x52, 0x12, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, + 0x12, 0x27, 0x0a, 0x0f, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x61, 0x64, 0x64, + 0x69, 0x6e, 0x67, 0x18, 0x12, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0e, 0x62, 0x69, 0x74, 0x72, 0x61, + 0x74, 0x65, 0x50, 0x61, 0x64, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x14, 0x70, 0x61, 0x63, + 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x6f, 0x66, 0x5f, 0x6f, 0x72, 0x64, 0x65, + 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, + 0x4f, 0x75, 0x74, 0x4f, 0x66, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x72, + 0x61, 0x6d, 0x65, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x66, 0x72, 0x61, 0x6d, + 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, + 0x18, 0x15, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x52, 0x61, 0x74, + 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6a, 0x69, 0x74, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0d, 0x6a, 0x69, 0x74, 0x74, 0x65, + 0x72, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x6a, 0x69, 0x74, 0x74, + 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x17, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x6a, 0x69, + 0x74, 0x74, 0x65, 0x72, 0x4d, 0x61, 0x78, 0x12, 0x48, 0x0a, 0x0d, 0x67, 0x61, 0x70, 0x5f, 0x68, + 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x18, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x54, 0x50, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x2e, 0x47, 0x61, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0c, 0x67, 0x61, 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, + 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x6e, 0x61, 0x63, 0x6b, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, 0x63, 0x6b, 0x5f, + 0x61, 0x63, 0x6b, 0x73, 0x18, 0x25, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x6e, 0x61, 0x63, 0x6b, + 0x41, 0x63, 0x6b, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x61, 0x63, 0x6b, 0x5f, 0x6d, 0x69, 0x73, + 0x73, 0x65, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6e, 0x61, 0x63, 0x6b, 0x4d, + 0x69, 0x73, 0x73, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x61, 0x63, 0x6b, 0x5f, 0x72, 0x65, + 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x26, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x6e, 0x61, + 0x63, 0x6b, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6c, + 0x69, 0x73, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6c, 0x69, 0x73, 0x12, 0x35, + 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x69, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x6c, 0x61, + 0x73, 0x74, 0x50, 0x6c, 0x69, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x72, 0x73, 0x18, 0x1d, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x04, 0x66, 0x69, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x08, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x66, 0x69, 0x72, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x6c, 0x61, 0x73, 0x74, 0x46, 0x69, 0x72, + 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x74, 0x74, 0x5f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x18, + 0x1f, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x72, 0x74, 0x74, 0x43, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x74, 0x74, 0x5f, 0x6d, 0x61, 0x78, 0x18, 0x20, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x06, 0x72, 0x74, 0x74, 0x4d, 0x61, 0x78, 0x12, 0x1d, 0x0a, 0x0a, 0x6b, 0x65, + 0x79, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x6b, 0x65, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x40, 0x0a, 0x0e, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x22, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x6c, + 0x61, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x6c, + 0x61, 0x79, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x6c, 0x69, 0x73, 0x18, 0x23, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x50, + 0x6c, 0x69, 0x73, 0x12, 0x49, 0x0a, 0x13, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x6c, 0x69, 0x18, 0x24, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x10, 0x6c, 0x61, + 0x73, 0x74, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x6c, 0x69, 0x12, 0x1f, + 0x0a, 0x0b, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x2a, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x0a, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, + 0x19, 0x0a, 0x08, 0x64, 0x72, 0x69, 0x66, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x2b, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x07, 0x64, 0x72, 0x69, 0x66, 0x74, 0x4d, 0x73, 0x1a, 0x3f, 0x0a, 0x11, 0x47, 0x61, + 0x70, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x43, 0x0a, 0x0c, 0x54, + 0x69, 0x6d, 0x65, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x75, + 0x6e, 0x69, 0x78, 0x5f, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x09, 0x75, 0x6e, 0x69, 0x78, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, + 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x69, 0x63, 0x6b, 0x73, + 0x22, 0xba, 0x1a, 0x0a, 0x0c, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x12, 0x5a, 0x0a, 0x11, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, + 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x11, 0x61, 0x75, 0x64, 0x69, + 0x6f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5a, 0x0a, + 0x11, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, + 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x56, 0x69, 0x64, 0x65, 0x6f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x11, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, 0x12, 0x61, 0x75, 0x64, + 0x69, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x41, 0x75, 0x64, + 0x69, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x12, 0x61, 0x75, 0x64, 0x69, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, 0x12, 0x76, 0x69, 0x64, 0x65, + 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x56, 0x69, 0x64, 0x65, + 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x52, 0x12, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xcb, 0x01, 0x0a, 0x0e, 0x52, 0x54, 0x43, 0x53, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x3c, 0x0a, 0x1a, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, 0x67, + 0x5f, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x18, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4f, 0x75, 0x74, 0x67, 0x6f, 0x69, 0x6e, + 0x67, 0x42, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, + 0x61, 0x63, 0x6b, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x09, 0x6e, 0x61, 0x63, 0x6b, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x49, 0x64, 0x1a, 0xc2, 0x01, 0x0a, 0x13, 0x52, 0x54, 0x43, 0x41, 0x75, 0x64, + 0x69, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x47, 0x0a, + 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x52, 0x54, 0x43, 0x53, 0x65, + 0x6e, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, + 0x61, 0x75, 0x64, 0x69, 0x6f, 0x5f, 0x65, 0x6e, 0x65, 0x72, 0x67, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x45, 0x6e, + 0x65, 0x72, 0x67, 0x79, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x70, 0x6c, + 0x65, 0x73, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xdb, 0x05, 0x0a, 0x13, 0x52, + 0x54, 0x43, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x12, 0x47, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, + 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x52, 0x54, 0x43, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0b, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x8b, 0x01, 0x0a, 0x1c, + 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x52, 0x54, 0x43, 0x56, 0x69, 0x64, + 0x65, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x51, 0x75, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1a, 0x71, + 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x71, 0x75, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x71, 0x75, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x25, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, + 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x22, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x6d, + 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x63, 0x61, 0x6c, + 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x4d, + 0x6f, 0x64, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x70, 0x65, + 0x72, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, + 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x50, 0x65, 0x72, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x73, 0x65, 0x6e, 0x74, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, + 0x12, 0x28, 0x0a, 0x10, 0x68, 0x75, 0x67, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, + 0x73, 0x65, 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x68, 0x75, 0x67, 0x65, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x16, 0x65, 0x6e, + 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x65, 0x6e, 0x63, 0x6f, + 0x64, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x65, 0x66, 0x66, 0x69, 0x63, + 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x15, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x45, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, + 0x6e, 0x74, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x1a, 0x4d, 0x0a, 0x1f, 0x51, 0x75, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xcd, 0x01, 0x0a, 0x10, 0x52, 0x54, 0x43, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x43, 0x0a, + 0x1e, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x1b, 0x6c, 0x61, 0x73, 0x74, 0x50, 0x61, 0x63, 0x6b, 0x65, + 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x69, 0x74, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x01, 0x52, 0x06, 0x6a, 0x69, 0x74, 0x74, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x73, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x4c, 0x6f, 0x73, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x49, 0x64, 0x1a, 0xd0, 0x04, 0x0a, 0x15, 0x52, 0x54, 0x43, + 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, + 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x52, 0x54, 0x43, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x70, 0x6c, 0x69, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x08, 0x70, 0x6c, 0x69, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x6c, + 0x69, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, + 0x6c, 0x69, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x66, 0x72, 0x61, 0x6d, 0x65, + 0x73, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x0d, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x12, 0x25, + 0x0a, 0x0e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x44, 0x72, + 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x64, + 0x65, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, + 0x52, 0x0f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x61, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x75, 0x73, + 0x65, 0x73, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x13, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x61, 0x75, 0x73, 0x65, 0x73, 0x44, 0x75, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, + 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x66, 0x72, + 0x65, 0x65, 0x7a, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x73, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x46, 0x72, 0x65, 0x65, 0x7a, 0x65, 0x73, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x66, 0x69, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x16, + 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x64, 0x65, + 0x63, 0x6f, 0x64, 0x65, 0x72, 0x49, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x65, 0x66, 0x66, + 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x18, 0x0d, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x45, 0x66, 0x66, 0x69, 0x63, + 0x69, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x1a, 0xc5, 0x01, 0x0a, 0x15, + 0x52, 0x54, 0x43, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, + 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x49, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6c, 0x69, + 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x52, 0x54, 0x43, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x12, 0x34, 0x0a, 0x16, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, + 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x61, + 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x63, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x73, 0x1a, 0xa9, 0x01, 0x0a, 0x16, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x10, + 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, + 0x12, 0x46, 0x0a, 0x09, 0x72, 0x74, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, + 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x52, 0x54, 0x43, 0x41, 0x75, + 0x64, 0x69, 0x6f, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, + 0x72, 0x74, 0x63, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, + 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, + 0x65, 0x61, 0x64, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x75, 0x74, + 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x1a, + 0xa9, 0x01, 0x0a, 0x16, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x46, 0x0a, 0x09, + 0x72, 0x74, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x52, 0x54, 0x43, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x53, + 0x65, 0x6e, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x72, 0x74, 0x63, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x1a, 0xfe, 0x01, 0x0a, 0x17, + 0x41, 0x75, 0x64, 0x69, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x09, 0x72, 0x74, 0x63, + 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, + 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x2e, 0x52, 0x54, 0x43, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x72, 0x74, 0x63, 0x53, 0x74, + 0x61, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x79, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x12, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x1a, 0xfe, 0x01, 0x0a, + 0x17, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x69, 0x64, 0x12, 0x48, 0x0a, 0x09, 0x72, 0x74, + 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x52, 0x54, 0x43, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x72, 0x74, 0x63, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x4c, 0x0a, 0x13, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x12, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x2a, 0x2f, 0x0a, + 0x0a, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x0a, 0x44, + 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x41, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4f, + 0x50, 0x55, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x41, 0x43, 0x10, 0x02, 0x2a, 0x56, + 0x0a, 0x0a, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x12, 0x0e, 0x0a, 0x0a, + 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x5f, 0x56, 0x43, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, + 0x48, 0x32, 0x36, 0x34, 0x5f, 0x42, 0x41, 0x53, 0x45, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x01, 0x12, + 0x0d, 0x0a, 0x09, 0x48, 0x32, 0x36, 0x34, 0x5f, 0x4d, 0x41, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x0d, + 0x0a, 0x09, 0x48, 0x32, 0x36, 0x34, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x10, 0x03, 0x12, 0x07, 0x0a, + 0x03, 0x56, 0x50, 0x38, 0x10, 0x04, 0x2a, 0x2b, 0x0a, 0x09, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x10, 0x00, 0x12, 0x09, + 0x0a, 0x05, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, + 0x41, 0x10, 0x02, 0x2a, 0x60, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x53, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x43, 0x41, 0x4d, 0x45, 0x52, 0x41, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x4d, + 0x49, 0x43, 0x52, 0x4f, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, + 0x43, 0x52, 0x45, 0x45, 0x4e, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x10, 0x03, 0x12, 0x16, 0x0a, + 0x12, 0x53, 0x43, 0x52, 0x45, 0x45, 0x4e, 0x5f, 0x53, 0x48, 0x41, 0x52, 0x45, 0x5f, 0x41, 0x55, + 0x44, 0x49, 0x4f, 0x10, 0x04, 0x2a, 0x36, 0x0a, 0x0c, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x51, 0x75, + 0x61, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x07, 0x0a, 0x03, 0x4c, 0x4f, 0x57, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x4d, 0x45, 0x44, 0x49, 0x55, 0x4d, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x49, + 0x47, 0x48, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x46, 0x46, 0x10, 0x03, 0x2a, 0x36, 0x0a, + 0x11, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x51, 0x75, 0x61, 0x6c, 0x69, + 0x74, 0x79, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x4f, 0x4f, 0x52, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x47, 0x4f, 0x4f, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x58, 0x43, 0x45, 0x4c, 0x4c, + 0x45, 0x4e, 0x54, 0x10, 0x02, 0x2a, 0x3b, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x09, 0x0a, 0x05, + 0x55, 0x4e, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x41, 0x42, + 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x45, 0x4e, 0x41, 0x42, 0x4c, 0x45, 0x44, + 0x10, 0x02, 0x2a, 0xba, 0x01, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, + 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x49, 0x41, 0x54, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x55, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x45, 0x5f, 0x49, + 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x52, 0x5f, 0x53, 0x48, 0x55, 0x54, 0x44, 0x4f, 0x57, 0x4e, 0x10, 0x03, 0x12, 0x17, + 0x0a, 0x13, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, + 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x4f, 0x4f, 0x4d, 0x5f, + 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, + 0x54, 0x45, 0x5f, 0x4d, 0x49, 0x53, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x06, 0x12, 0x10, 0x0a, + 0x0c, 0x4a, 0x4f, 0x49, 0x4e, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x07, 0x2a, + 0x89, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x52, 0x65, 0x61, + 0x73, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x0a, 0x52, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x52, 0x52, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x4c, + 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x4e, 0x4e, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x17, 0x0a, 0x13, 0x52, 0x52, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x53, 0x48, 0x45, 0x52, 0x5f, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x52, 0x52, 0x5f, 0x53, + 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x52, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x52, 0x52, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, + 0x43, 0x41, 0x4e, 0x44, 0x49, 0x44, 0x41, 0x54, 0x45, 0x10, 0x04, 0x2a, 0x43, 0x0a, 0x12, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x64, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x10, 0x01, + 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x10, 0x02, + 0x2a, 0x54, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, + 0x43, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x15, 0x0a, 0x11, 0x53, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x43, 0x4b, 0x5f, 0x4e, 0x4f, 0x54, 0x46, + 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x42, 0x46, 0x5a, 0x23, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0xaa, 0x02, 0x0d, + 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0xea, 0x02, 0x0e, + 0x4c, 0x69, 0x76, 0x65, 0x4b, 0x69, 0x74, 0x3a, 0x3a, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3299,88 +4498,116 @@ func file_livekit_models_proto_rawDescGZIP() []byte { return file_livekit_models_proto_rawDescData } -var file_livekit_models_proto_enumTypes = make([]protoimpl.EnumInfo, 15) -var file_livekit_models_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_livekit_models_proto_enumTypes = make([]protoimpl.EnumInfo, 16) +var file_livekit_models_proto_msgTypes = make([]protoimpl.MessageInfo, 34) var file_livekit_models_proto_goTypes = []interface{}{ - (AudioCodec)(0), // 0: livekit.AudioCodec - (VideoCodec)(0), // 1: livekit.VideoCodec - (TrackType)(0), // 2: livekit.TrackType - (TrackSource)(0), // 3: livekit.TrackSource - (VideoQuality)(0), // 4: livekit.VideoQuality - (ConnectionQuality)(0), // 5: livekit.ConnectionQuality - (ClientConfigSetting)(0), // 6: livekit.ClientConfigSetting - (DisconnectReason)(0), // 7: livekit.DisconnectReason - (ReconnectReason)(0), // 8: livekit.ReconnectReason - (SubscriptionError)(0), // 9: livekit.SubscriptionError - (ParticipantInfo_State)(0), // 10: livekit.ParticipantInfo.State - (Encryption_Type)(0), // 11: livekit.Encryption.Type - (DataPacket_Kind)(0), // 12: livekit.DataPacket.Kind - (ServerInfo_Edition)(0), // 13: livekit.ServerInfo.Edition - (ClientInfo_SDK)(0), // 14: livekit.ClientInfo.SDK - (*Room)(nil), // 15: livekit.Room - (*Codec)(nil), // 16: livekit.Codec - (*PlayoutDelay)(nil), // 17: livekit.PlayoutDelay - (*ParticipantPermission)(nil), // 18: livekit.ParticipantPermission - (*ParticipantInfo)(nil), // 19: livekit.ParticipantInfo - (*Encryption)(nil), // 20: livekit.Encryption - (*SimulcastCodecInfo)(nil), // 21: livekit.SimulcastCodecInfo - (*TrackInfo)(nil), // 22: livekit.TrackInfo - (*VideoLayer)(nil), // 23: livekit.VideoLayer - (*DataPacket)(nil), // 24: livekit.DataPacket - (*ActiveSpeakerUpdate)(nil), // 25: livekit.ActiveSpeakerUpdate - (*SpeakerInfo)(nil), // 26: livekit.SpeakerInfo - (*UserPacket)(nil), // 27: livekit.UserPacket - (*ParticipantTracks)(nil), // 28: livekit.ParticipantTracks - (*ServerInfo)(nil), // 29: livekit.ServerInfo - (*ClientInfo)(nil), // 30: livekit.ClientInfo - (*ClientConfiguration)(nil), // 31: livekit.ClientConfiguration - (*VideoConfiguration)(nil), // 32: livekit.VideoConfiguration - (*DisabledCodecs)(nil), // 33: livekit.DisabledCodecs - (*RTPStats)(nil), // 34: livekit.RTPStats - (*TimedVersion)(nil), // 35: livekit.TimedVersion - nil, // 36: livekit.RTPStats.GapHistogramEntry - (*timestamppb.Timestamp)(nil), // 37: google.protobuf.Timestamp + (AudioCodec)(0), // 0: livekit.AudioCodec + (VideoCodec)(0), // 1: livekit.VideoCodec + (TrackType)(0), // 2: livekit.TrackType + (TrackSource)(0), // 3: livekit.TrackSource + (VideoQuality)(0), // 4: livekit.VideoQuality + (ConnectionQuality)(0), // 5: livekit.ConnectionQuality + (ClientConfigSetting)(0), // 6: livekit.ClientConfigSetting + (DisconnectReason)(0), // 7: livekit.DisconnectReason + (ReconnectReason)(0), // 8: livekit.ReconnectReason + (SubscriptionStatus)(0), // 9: livekit.SubscriptionStatus + (SubscriptionError)(0), // 10: livekit.SubscriptionError + (ParticipantInfo_State)(0), // 11: livekit.ParticipantInfo.State + (Encryption_Type)(0), // 12: livekit.Encryption.Type + (DataPacket_Kind)(0), // 13: livekit.DataPacket.Kind + (ServerInfo_Edition)(0), // 14: livekit.ServerInfo.Edition + (ClientInfo_SDK)(0), // 15: livekit.ClientInfo.SDK + (*Room)(nil), // 16: livekit.Room + (*Codec)(nil), // 17: livekit.Codec + (*PlayoutDelay)(nil), // 18: livekit.PlayoutDelay + (*ParticipantPermission)(nil), // 19: livekit.ParticipantPermission + (*ParticipantInfo)(nil), // 20: livekit.ParticipantInfo + (*Encryption)(nil), // 21: livekit.Encryption + (*SimulcastCodecInfo)(nil), // 22: livekit.SimulcastCodecInfo + (*TrackInfo)(nil), // 23: livekit.TrackInfo + (*VideoLayer)(nil), // 24: livekit.VideoLayer + (*DataPacket)(nil), // 25: livekit.DataPacket + (*ActiveSpeakerUpdate)(nil), // 26: livekit.ActiveSpeakerUpdate + (*SpeakerInfo)(nil), // 27: livekit.SpeakerInfo + (*UserPacket)(nil), // 28: livekit.UserPacket + (*ParticipantTracks)(nil), // 29: livekit.ParticipantTracks + (*ServerInfo)(nil), // 30: livekit.ServerInfo + (*ClientInfo)(nil), // 31: livekit.ClientInfo + (*ClientConfiguration)(nil), // 32: livekit.ClientConfiguration + (*VideoConfiguration)(nil), // 33: livekit.VideoConfiguration + (*DisabledCodecs)(nil), // 34: livekit.DisabledCodecs + (*RTPStats)(nil), // 35: livekit.RTPStats + (*TimedVersion)(nil), // 36: livekit.TimedVersion + (*ClientReport)(nil), // 37: livekit.ClientReport + nil, // 38: livekit.RTPStats.GapHistogramEntry + (*ClientReport_RTCSenderStats)(nil), // 39: livekit.ClientReport.RTCSenderStats + (*ClientReport_RTCAudioSenderStats)(nil), // 40: livekit.ClientReport.RTCAudioSenderStats + (*ClientReport_RTCVideoSenderStats)(nil), // 41: livekit.ClientReport.RTCVideoSenderStats + (*ClientReport_RTCReceiverStats)(nil), // 42: livekit.ClientReport.RTCReceiverStats + (*ClientReport_RTCVideoReceiverStats)(nil), // 43: livekit.ClientReport.RTCVideoReceiverStats + (*ClientReport_RTCAudioReceiverStats)(nil), // 44: livekit.ClientReport.RTCAudioReceiverStats + (*ClientReport_AudioPublicationReport)(nil), // 45: livekit.ClientReport.AudioPublicationReport + (*ClientReport_VideoPublicationReport)(nil), // 46: livekit.ClientReport.VideoPublicationReport + (*ClientReport_AudioSubscriptionReport)(nil), // 47: livekit.ClientReport.AudioSubscriptionReport + (*ClientReport_VideoSubscriptionReport)(nil), // 48: livekit.ClientReport.VideoSubscriptionReport + nil, // 49: livekit.ClientReport.RTCVideoSenderStats.QualityLimitationDurationsEntry + (*timestamppb.Timestamp)(nil), // 50: google.protobuf.Timestamp } var file_livekit_models_proto_depIdxs = []int32{ - 16, // 0: livekit.Room.enabled_codecs:type_name -> livekit.Codec - 17, // 1: livekit.Room.playout_delay:type_name -> livekit.PlayoutDelay + 17, // 0: livekit.Room.enabled_codecs:type_name -> livekit.Codec + 18, // 1: livekit.Room.playout_delay:type_name -> livekit.PlayoutDelay 3, // 2: livekit.ParticipantPermission.can_publish_sources:type_name -> livekit.TrackSource - 10, // 3: livekit.ParticipantInfo.state:type_name -> livekit.ParticipantInfo.State - 22, // 4: livekit.ParticipantInfo.tracks:type_name -> livekit.TrackInfo - 18, // 5: livekit.ParticipantInfo.permission:type_name -> livekit.ParticipantPermission - 23, // 6: livekit.SimulcastCodecInfo.layers:type_name -> livekit.VideoLayer + 11, // 3: livekit.ParticipantInfo.state:type_name -> livekit.ParticipantInfo.State + 23, // 4: livekit.ParticipantInfo.tracks:type_name -> livekit.TrackInfo + 19, // 5: livekit.ParticipantInfo.permission:type_name -> livekit.ParticipantPermission + 24, // 6: livekit.SimulcastCodecInfo.layers:type_name -> livekit.VideoLayer 2, // 7: livekit.TrackInfo.type:type_name -> livekit.TrackType 3, // 8: livekit.TrackInfo.source:type_name -> livekit.TrackSource - 23, // 9: livekit.TrackInfo.layers:type_name -> livekit.VideoLayer - 21, // 10: livekit.TrackInfo.codecs:type_name -> livekit.SimulcastCodecInfo - 11, // 11: livekit.TrackInfo.encryption:type_name -> livekit.Encryption.Type + 24, // 9: livekit.TrackInfo.layers:type_name -> livekit.VideoLayer + 22, // 10: livekit.TrackInfo.codecs:type_name -> livekit.SimulcastCodecInfo + 12, // 11: livekit.TrackInfo.encryption:type_name -> livekit.Encryption.Type 4, // 12: livekit.VideoLayer.quality:type_name -> livekit.VideoQuality - 12, // 13: livekit.DataPacket.kind:type_name -> livekit.DataPacket.Kind - 27, // 14: livekit.DataPacket.user:type_name -> livekit.UserPacket - 25, // 15: livekit.DataPacket.speaker:type_name -> livekit.ActiveSpeakerUpdate - 26, // 16: livekit.ActiveSpeakerUpdate.speakers:type_name -> livekit.SpeakerInfo - 13, // 17: livekit.ServerInfo.edition:type_name -> livekit.ServerInfo.Edition - 14, // 18: livekit.ClientInfo.sdk:type_name -> livekit.ClientInfo.SDK - 32, // 19: livekit.ClientConfiguration.video:type_name -> livekit.VideoConfiguration - 32, // 20: livekit.ClientConfiguration.screen:type_name -> livekit.VideoConfiguration + 13, // 13: livekit.DataPacket.kind:type_name -> livekit.DataPacket.Kind + 28, // 14: livekit.DataPacket.user:type_name -> livekit.UserPacket + 26, // 15: livekit.DataPacket.speaker:type_name -> livekit.ActiveSpeakerUpdate + 27, // 16: livekit.ActiveSpeakerUpdate.speakers:type_name -> livekit.SpeakerInfo + 14, // 17: livekit.ServerInfo.edition:type_name -> livekit.ServerInfo.Edition + 15, // 18: livekit.ClientInfo.sdk:type_name -> livekit.ClientInfo.SDK + 33, // 19: livekit.ClientConfiguration.video:type_name -> livekit.VideoConfiguration + 33, // 20: livekit.ClientConfiguration.screen:type_name -> livekit.VideoConfiguration 6, // 21: livekit.ClientConfiguration.resume_connection:type_name -> livekit.ClientConfigSetting - 33, // 22: livekit.ClientConfiguration.disabled_codecs:type_name -> livekit.DisabledCodecs + 34, // 22: livekit.ClientConfiguration.disabled_codecs:type_name -> livekit.DisabledCodecs 6, // 23: livekit.ClientConfiguration.force_relay:type_name -> livekit.ClientConfigSetting 6, // 24: livekit.VideoConfiguration.hardware_encoder:type_name -> livekit.ClientConfigSetting - 16, // 25: livekit.DisabledCodecs.codecs:type_name -> livekit.Codec - 16, // 26: livekit.DisabledCodecs.publish:type_name -> livekit.Codec - 37, // 27: livekit.RTPStats.start_time:type_name -> google.protobuf.Timestamp - 37, // 28: livekit.RTPStats.end_time:type_name -> google.protobuf.Timestamp - 36, // 29: livekit.RTPStats.gap_histogram:type_name -> livekit.RTPStats.GapHistogramEntry - 37, // 30: livekit.RTPStats.last_pli:type_name -> google.protobuf.Timestamp - 37, // 31: livekit.RTPStats.last_fir:type_name -> google.protobuf.Timestamp - 37, // 32: livekit.RTPStats.last_key_frame:type_name -> google.protobuf.Timestamp - 37, // 33: livekit.RTPStats.last_layer_lock_pli:type_name -> google.protobuf.Timestamp - 34, // [34:34] is the sub-list for method output_type - 34, // [34:34] is the sub-list for method input_type - 34, // [34:34] is the sub-list for extension type_name - 34, // [34:34] is the sub-list for extension extendee - 0, // [0:34] is the sub-list for field type_name + 17, // 25: livekit.DisabledCodecs.codecs:type_name -> livekit.Codec + 17, // 26: livekit.DisabledCodecs.publish:type_name -> livekit.Codec + 50, // 27: livekit.RTPStats.start_time:type_name -> google.protobuf.Timestamp + 50, // 28: livekit.RTPStats.end_time:type_name -> google.protobuf.Timestamp + 38, // 29: livekit.RTPStats.gap_histogram:type_name -> livekit.RTPStats.GapHistogramEntry + 50, // 30: livekit.RTPStats.last_pli:type_name -> google.protobuf.Timestamp + 50, // 31: livekit.RTPStats.last_fir:type_name -> google.protobuf.Timestamp + 50, // 32: livekit.RTPStats.last_key_frame:type_name -> google.protobuf.Timestamp + 50, // 33: livekit.RTPStats.last_layer_lock_pli:type_name -> google.protobuf.Timestamp + 45, // 34: livekit.ClientReport.audioPublications:type_name -> livekit.ClientReport.AudioPublicationReport + 46, // 35: livekit.ClientReport.videoPublications:type_name -> livekit.ClientReport.VideoPublicationReport + 47, // 36: livekit.ClientReport.audioSubscriptions:type_name -> livekit.ClientReport.AudioSubscriptionReport + 48, // 37: livekit.ClientReport.videoSubscriptions:type_name -> livekit.ClientReport.VideoSubscriptionReport + 39, // 38: livekit.ClientReport.RTCAudioSenderStats.common_stats:type_name -> livekit.ClientReport.RTCSenderStats + 39, // 39: livekit.ClientReport.RTCVideoSenderStats.common_stats:type_name -> livekit.ClientReport.RTCSenderStats + 49, // 40: livekit.ClientReport.RTCVideoSenderStats.quality_limitation_durations:type_name -> livekit.ClientReport.RTCVideoSenderStats.QualityLimitationDurationsEntry + 42, // 41: livekit.ClientReport.RTCVideoReceiverStats.common_stats:type_name -> livekit.ClientReport.RTCReceiverStats + 42, // 42: livekit.ClientReport.RTCAudioReceiverStats.common_stats:type_name -> livekit.ClientReport.RTCReceiverStats + 40, // 43: livekit.ClientReport.AudioPublicationReport.rtc_stats:type_name -> livekit.ClientReport.RTCAudioSenderStats + 41, // 44: livekit.ClientReport.VideoPublicationReport.rtc_stats:type_name -> livekit.ClientReport.RTCVideoSenderStats + 44, // 45: livekit.ClientReport.AudioSubscriptionReport.rtc_stats:type_name -> livekit.ClientReport.RTCAudioReceiverStats + 9, // 46: livekit.ClientReport.AudioSubscriptionReport.subscription_status:type_name -> livekit.SubscriptionStatus + 43, // 47: livekit.ClientReport.VideoSubscriptionReport.rtc_stats:type_name -> livekit.ClientReport.RTCVideoReceiverStats + 9, // 48: livekit.ClientReport.VideoSubscriptionReport.subscription_status:type_name -> livekit.SubscriptionStatus + 49, // [49:49] is the sub-list for method output_type + 49, // [49:49] is the sub-list for method input_type + 49, // [49:49] is the sub-list for extension type_name + 49, // [49:49] is the sub-list for extension extendee + 0, // [0:49] is the sub-list for field type_name } func init() { file_livekit_models_proto_init() } @@ -3641,6 +4868,138 @@ func file_livekit_models_proto_init() { return nil } } + file_livekit_models_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_RTCSenderStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_RTCAudioSenderStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_RTCVideoSenderStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_RTCReceiverStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_RTCVideoReceiverStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_RTCAudioReceiverStats); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_AudioPublicationReport); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_VideoPublicationReport); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_AudioSubscriptionReport); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_livekit_models_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientReport_VideoSubscriptionReport); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_livekit_models_proto_msgTypes[9].OneofWrappers = []interface{}{ (*DataPacket_User)(nil), @@ -3652,8 +5011,8 @@ func file_livekit_models_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_livekit_models_proto_rawDesc, - NumEnums: 15, - NumMessages: 22, + NumEnums: 16, + NumMessages: 34, NumExtensions: 0, NumServices: 0, }, diff --git a/livekit/livekit_room.pb.go b/livekit/livekit_room.pb.go index 418bba00..9b0f2edb 100644 --- a/livekit/livekit_room.pb.go +++ b/livekit/livekit_room.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.21.12 // source: livekit_room.proto package livekit diff --git a/livekit/livekit_rtc.pb.go b/livekit/livekit_rtc.pb.go index 41442736..b64dfec2 100644 --- a/livekit/livekit_rtc.pb.go +++ b/livekit/livekit_rtc.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.21.12 // source: livekit_rtc.proto package livekit diff --git a/livekit/livekit_webhook.pb.go b/livekit/livekit_webhook.pb.go index 96207375..290888f3 100644 --- a/livekit/livekit_webhook.pb.go +++ b/livekit/livekit_webhook.pb.go @@ -14,8 +14,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.21.12 // source: livekit_webhook.proto package livekit diff --git a/livekit_models.proto b/livekit_models.proto index b3840a15..f39f2415 100644 --- a/livekit_models.proto +++ b/livekit_models.proto @@ -273,6 +273,7 @@ message ClientInfo { string address = 9; // wifi, wired, cellular, vpn, empty if not known string network = 10; + int32 concurrency = 11; } // server provided client configuration @@ -391,8 +392,118 @@ enum ReconnectReason { RR_SWITCH_CANDIDATE = 4; } +enum SubscriptionStatus { + Unsubscribed = 0; + Desired = 1; + Subscribed = 2; +} + enum SubscriptionError { SE_UNKNOWN = 0; SE_CODEC_UNSUPPORTED = 1; SE_TRACK_NOTFOUND = 2; } + +message ClientReport { + + message RTCSenderStats { + // ice-candidate-pair + uint32 available_outgoing_bitrate = 1; + // local-candidate + string network_type = 2; + // outbound-rtp + uint32 nack_count = 3; + uint64 timestamp = 4; + string stream_id = 5; + } + + message RTCAudioSenderStats { + RTCSenderStats common_stats = 1; + // media-source + double total_audio_energy = 2; + double total_samples_duration = 3; + } + + message RTCVideoSenderStats { + RTCSenderStats common_stats = 1; + // outbound-rtp + map quality_limitation_durations = 2; + string quality_limitation_reason = 3; + uint32 quality_limitation_resolution_changes = 4; + string scalability_mode = 5; + uint32 frames_per_second = 6; + uint64 frames_sent = 7; + uint32 huge_frames_sent = 8; + string encoder_implementation = 9; + bool power_efficient_encoder = 10; + } + + message RTCReceiverStats { + // inbound-rtp + double last_packet_received_timestamp = 1; + double jitter = 2; + int64 packets_lost = 3; + uint64 timestamp = 4; + string stream_id = 5; + } + + message RTCVideoReceiverStats { + RTCReceiverStats common_stats = 1; + + // inbound-rtp + uint32 pli_count = 2; + uint32 sli_count = 3; + uint32 frames_decoded = 4; + uint32 frames_dropped = 5; + double total_decode_time = 6; + uint32 pause_count = 7; + double total_pauses_duration = 8; + uint32 freeze_count = 9; + double total_freezes_duration = 10; + uint32 fir_count = 11; + string decoder_implementation = 12; + bool power_efficient_decoder = 13; + } + + message RTCAudioReceiverStats { + RTCReceiverStats common_stats = 1; + uint64 total_samples_received = 2; + uint64 concealed_samples = 3; + } + + message AudioPublicationReport { + string sid = 1; + RTCAudioSenderStats rtc_stats = 2; + int32 ready_state = 3; + bool muted = 4; + } + + message VideoPublicationReport { + string sid = 1; + RTCVideoSenderStats rtc_stats = 2; + int32 ready_state = 3; + bool muted = 4; + } + + message AudioSubscriptionReport { + string sid = 1; + RTCAudioReceiverStats rtc_stats = 2; + int32 ready_state = 3; + SubscriptionStatus subscription_status = 4; + bool allowed = 5; + } + + message VideoSubscriptionReport { + string sid = 1; + RTCVideoReceiverStats rtc_stats = 2; + int32 ready_state = 3; + SubscriptionStatus subscription_status = 4; + bool allowed = 5; + } + + repeated AudioPublicationReport audioPublications = 1; + repeated VideoPublicationReport videoPublications = 2; + repeated AudioSubscriptionReport audioSubscriptions = 3; + repeated VideoSubscriptionReport videoSubscriptions = 4; + +} diff --git a/rpc/egress.pb.go b/rpc/egress.pb.go index 1d4282a2..0ae95a62 100644 --- a/rpc/egress.pb.go +++ b/rpc/egress.pb.go @@ -1,6 +1,20 @@ +// Copyright 2023 LiveKit, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.30.0 // protoc v3.21.12 // source: rpc/egress.proto diff --git a/rpc/egress.psrpc.go b/rpc/egress.psrpc.go index f5a7cfa1..91fe4723 100644 --- a/rpc/egress.psrpc.go +++ b/rpc/egress.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.3.2, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.3.0, DO NOT EDIT. // source: rpc/egress.proto package rpc @@ -14,16 +14,16 @@ import ( ) import livekit1 "github.com/livekit/protocol/livekit" -var _ = version.PsrpcVersion_0_3_2 +var _ = version.PsrpcVersion_0_3_0 // =============================== // EgressInternal Client Interface // =============================== type EgressInternalClient interface { - StartEgress(ctx context.Context, topic string, req *StartEgressRequest, opts ...psrpc.RequestOption) (*livekit1.EgressInfo, error) + SubscribeStartEgress(ctx context.Context) (psrpc.Subscription[*livekit1.EgressInfo], error) - ListActiveEgress(ctx context.Context, req *ListActiveEgressRequest, opts ...psrpc.RequestOption) (<-chan *psrpc.Response[*ListActiveEgressResponse], error) + ListActiveEgress(ctx context.Context, req *ListActiveEgressRequest, opts ...psrpc.RequestOption) (*ListActiveEgressResponse, error) } // =================================== @@ -31,10 +31,8 @@ type EgressInternalClient interface { // =================================== type EgressInternalServerImpl interface { - StartEgress(context.Context, *StartEgressRequest) (*livekit1.EgressInfo, error) - StartEgressAffinity(*StartEgressRequest) float32 - ListActiveEgress(context.Context, *ListActiveEgressRequest) (*ListActiveEgressResponse, error) + ListActiveEgressAffinity(*ListActiveEgressRequest) float32 } // =============================== @@ -42,8 +40,7 @@ type EgressInternalServerImpl interface { // =============================== type EgressInternalServer interface { - RegisterStartEgressTopic(topic string) error - DeregisterStartEgressTopic(topic string) + PublishStartEgress(ctx context.Context, msg *livekit1.EgressInfo) error // Close and wait for pending RPCs to complete Shutdown() @@ -67,10 +64,10 @@ func NewEgressInternalClient(clientID string, bus psrpc.MessageBus, opts ...psrp ID: clientID, } - sd.RegisterMethod("StartEgress", true, false, true, false) - sd.RegisterMethod("ListActiveEgress", false, true, false, false) + sd.RegisterMethod("StartEgress", false, false, true) + sd.RegisterMethod("ListActiveEgress", true, false, true) - rpcClient, err := client.NewRPCClient(sd, bus, opts...) + rpcClient, err := client.NewRPCClientWithStreams(sd, bus, opts...) if err != nil { return nil, err } @@ -80,12 +77,12 @@ func NewEgressInternalClient(clientID string, bus psrpc.MessageBus, opts ...psrp }, nil } -func (c *egressInternalClient) StartEgress(ctx context.Context, topic string, req *StartEgressRequest, opts ...psrpc.RequestOption) (*livekit1.EgressInfo, error) { - return client.RequestSingle[*livekit1.EgressInfo](ctx, c.client, "StartEgress", []string{topic}, req, opts...) +func (c *egressInternalClient) SubscribeStartEgress(ctx context.Context) (psrpc.Subscription[*livekit1.EgressInfo], error) { + return client.JoinQueue[*livekit1.EgressInfo](ctx, c.client, "StartEgress", nil) } -func (c *egressInternalClient) ListActiveEgress(ctx context.Context, req *ListActiveEgressRequest, opts ...psrpc.RequestOption) (<-chan *psrpc.Response[*ListActiveEgressResponse], error) { - return client.RequestMulti[*ListActiveEgressResponse](ctx, c.client, "ListActiveEgress", nil, req, opts...) +func (c *egressInternalClient) ListActiveEgress(ctx context.Context, req *ListActiveEgressRequest, opts ...psrpc.RequestOption) (*ListActiveEgressResponse, error) { + return client.RequestSingle[*ListActiveEgressResponse](ctx, c.client, "ListActiveEgress", nil, req, opts...) } // ===================== @@ -107,10 +104,10 @@ func NewEgressInternalServer(serverID string, svc EgressInternalServerImpl, bus s := server.NewRPCServer(sd, bus, opts...) - sd.RegisterMethod("StartEgress", true, false, true, false) - sd.RegisterMethod("ListActiveEgress", false, true, false, false) + sd.RegisterMethod("StartEgress", false, false, true) + sd.RegisterMethod("ListActiveEgress", true, false, true) var err error - err = server.RegisterHandler(s, "ListActiveEgress", nil, svc.ListActiveEgress, nil) + err = server.RegisterHandler(s, "ListActiveEgress", nil, svc.ListActiveEgress, svc.ListActiveEgressAffinity) if err != nil { s.Close(false) return nil, err @@ -122,12 +119,8 @@ func NewEgressInternalServer(serverID string, svc EgressInternalServerImpl, bus }, nil } -func (s *egressInternalServer) RegisterStartEgressTopic(topic string) error { - return server.RegisterHandler(s.rpc, "StartEgress", []string{topic}, s.svc.StartEgress, s.svc.StartEgressAffinity) -} - -func (s *egressInternalServer) DeregisterStartEgressTopic(topic string) { - s.rpc.DeregisterHandler("StartEgress", []string{topic}) +func (s *egressInternalServer) PublishStartEgress(ctx context.Context, msg *livekit1.EgressInfo) error { + return s.rpc.Publish(ctx, "StartEgress", nil, msg) } func (s *egressInternalServer) Shutdown() { @@ -143,9 +136,9 @@ func (s *egressInternalServer) Kill() { // ============================== type EgressHandlerClient interface { - UpdateStream(ctx context.Context, topic string, req *livekit1.UpdateStreamRequest, opts ...psrpc.RequestOption) (*livekit1.EgressInfo, error) + SubscribeUpdateStream(ctx context.Context) (psrpc.Subscription[*livekit1.EgressInfo], error) - StopEgress(ctx context.Context, topic string, req *livekit1.StopEgressRequest, opts ...psrpc.RequestOption) (*livekit1.EgressInfo, error) + SubscribeStopEgress(ctx context.Context) (psrpc.Subscription[*livekit1.EgressInfo], error) } // ================================== @@ -153,9 +146,6 @@ type EgressHandlerClient interface { // ================================== type EgressHandlerServerImpl interface { - UpdateStream(context.Context, *livekit1.UpdateStreamRequest) (*livekit1.EgressInfo, error) - - StopEgress(context.Context, *livekit1.StopEgressRequest) (*livekit1.EgressInfo, error) } // ============================== @@ -163,10 +153,9 @@ type EgressHandlerServerImpl interface { // ============================== type EgressHandlerServer interface { - RegisterUpdateStreamTopic(topic string) error - DeregisterUpdateStreamTopic(topic string) - RegisterStopEgressTopic(topic string) error - DeregisterStopEgressTopic(topic string) + PublishUpdateStream(ctx context.Context, msg *livekit1.EgressInfo) error + + PublishStopEgress(ctx context.Context, msg *livekit1.EgressInfo) error // Close and wait for pending RPCs to complete Shutdown() @@ -190,8 +179,8 @@ func NewEgressHandlerClient(clientID string, bus psrpc.MessageBus, opts ...psrpc ID: clientID, } - sd.RegisterMethod("UpdateStream", false, false, true, false) - sd.RegisterMethod("StopEgress", false, false, true, false) + sd.RegisterMethod("UpdateStream", false, false, true) + sd.RegisterMethod("StopEgress", false, false, true) rpcClient, err := client.NewRPCClient(sd, bus, opts...) if err != nil { @@ -203,12 +192,12 @@ func NewEgressHandlerClient(clientID string, bus psrpc.MessageBus, opts ...psrpc }, nil } -func (c *egressHandlerClient) UpdateStream(ctx context.Context, topic string, req *livekit1.UpdateStreamRequest, opts ...psrpc.RequestOption) (*livekit1.EgressInfo, error) { - return client.RequestSingle[*livekit1.EgressInfo](ctx, c.client, "UpdateStream", []string{topic}, req, opts...) +func (c *egressHandlerClient) SubscribeUpdateStream(ctx context.Context) (psrpc.Subscription[*livekit1.EgressInfo], error) { + return client.JoinQueue[*livekit1.EgressInfo](ctx, c.client, "UpdateStream", nil) } -func (c *egressHandlerClient) StopEgress(ctx context.Context, topic string, req *livekit1.StopEgressRequest, opts ...psrpc.RequestOption) (*livekit1.EgressInfo, error) { - return client.RequestSingle[*livekit1.EgressInfo](ctx, c.client, "StopEgress", []string{topic}, req, opts...) +func (c *egressHandlerClient) SubscribeStopEgress(ctx context.Context) (psrpc.Subscription[*livekit1.EgressInfo], error) { + return client.JoinQueue[*livekit1.EgressInfo](ctx, c.client, "StopEgress", nil) } // ==================== @@ -230,28 +219,20 @@ func NewEgressHandlerServer(serverID string, svc EgressHandlerServerImpl, bus ps s := server.NewRPCServer(sd, bus, opts...) - sd.RegisterMethod("UpdateStream", false, false, true, false) - sd.RegisterMethod("StopEgress", false, false, true, false) + sd.RegisterMethod("UpdateStream", false, false, true) + sd.RegisterMethod("StopEgress", false, false, true) return &egressHandlerServer{ svc: svc, rpc: s, }, nil } -func (s *egressHandlerServer) RegisterUpdateStreamTopic(topic string) error { - return server.RegisterHandler(s.rpc, "UpdateStream", []string{topic}, s.svc.UpdateStream, nil) -} - -func (s *egressHandlerServer) DeregisterUpdateStreamTopic(topic string) { - s.rpc.DeregisterHandler("UpdateStream", []string{topic}) -} - -func (s *egressHandlerServer) RegisterStopEgressTopic(topic string) error { - return server.RegisterHandler(s.rpc, "StopEgress", []string{topic}, s.svc.StopEgress, nil) +func (s *egressHandlerServer) PublishUpdateStream(ctx context.Context, msg *livekit1.EgressInfo) error { + return s.rpc.Publish(ctx, "UpdateStream", nil, msg) } -func (s *egressHandlerServer) DeregisterStopEgressTopic(topic string) { - s.rpc.DeregisterHandler("StopEgress", []string{topic}) +func (s *egressHandlerServer) PublishStopEgress(ctx context.Context, msg *livekit1.EgressInfo) error { + return s.rpc.Publish(ctx, "StopEgress", nil, msg) } func (s *egressHandlerServer) Shutdown() { diff --git a/rpc/ingress.pb.go b/rpc/ingress.pb.go index a2b496b5..51c2794a 100644 --- a/rpc/ingress.pb.go +++ b/rpc/ingress.pb.go @@ -1,6 +1,20 @@ +// Copyright 2023 LiveKit, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.30.0 // protoc v3.21.12 // source: rpc/ingress.proto diff --git a/rpc/ingress.psrpc.go b/rpc/ingress.psrpc.go index 9ddd995d..2815b65f 100644 --- a/rpc/ingress.psrpc.go +++ b/rpc/ingress.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.3.2, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.3.0, DO NOT EDIT. // source: rpc/ingress.proto package rpc @@ -15,16 +15,16 @@ import ( import google_protobuf3 "google.golang.org/protobuf/types/known/emptypb" import livekit2 "github.com/livekit/protocol/livekit" -var _ = version.PsrpcVersion_0_3_2 +var _ = version.PsrpcVersion_0_3_0 // ================================ // IngressInternal Client Interface // ================================ type IngressInternalClient interface { - StartIngress(ctx context.Context, req *StartIngressRequest, opts ...psrpc.RequestOption) (*livekit2.IngressInfo, error) + StartIngress(ctx context.Context, opts ...psrpc.RequestOption) (psrpc.ClientStream[*StartIngressRequest, *livekit2.IngressInfo], error) - ListActiveIngress(ctx context.Context, req *ListActiveIngressRequest, opts ...psrpc.RequestOption) (<-chan *psrpc.Response[*ListActiveIngressResponse], error) + ListActiveIngress(ctx context.Context, req *ListActiveIngressRequest, opts ...psrpc.RequestOption) (*ListActiveIngressResponse, error) } // ==================================== @@ -32,10 +32,10 @@ type IngressInternalClient interface { // ==================================== type IngressInternalServerImpl interface { - StartIngress(context.Context, *StartIngressRequest) (*livekit2.IngressInfo, error) - StartIngressAffinity(*StartIngressRequest) float32 + StartIngress(psrpc.ServerStream[*livekit2.IngressInfo, *StartIngressRequest]) error ListActiveIngress(context.Context, *ListActiveIngressRequest) (*ListActiveIngressResponse, error) + ListActiveIngressAffinity(*ListActiveIngressRequest) float32 } // ================================ @@ -66,10 +66,10 @@ func NewIngressInternalClient(clientID string, bus psrpc.MessageBus, opts ...psr ID: clientID, } - sd.RegisterMethod("StartIngress", true, false, true, false) - sd.RegisterMethod("ListActiveIngress", false, true, false, false) + sd.RegisterMethod("StartIngress", false, false, true) + sd.RegisterMethod("ListActiveIngress", true, false, true) - rpcClient, err := client.NewRPCClient(sd, bus, opts...) + rpcClient, err := client.NewRPCClientWithStreams(sd, bus, opts...) if err != nil { return nil, err } @@ -79,12 +79,12 @@ func NewIngressInternalClient(clientID string, bus psrpc.MessageBus, opts ...psr }, nil } -func (c *ingressInternalClient) StartIngress(ctx context.Context, req *StartIngressRequest, opts ...psrpc.RequestOption) (*livekit2.IngressInfo, error) { - return client.RequestSingle[*livekit2.IngressInfo](ctx, c.client, "StartIngress", nil, req, opts...) +func (c *ingressInternalClient) StartIngress(ctx context.Context, opts ...psrpc.RequestOption) (psrpc.ClientStream[*StartIngressRequest, *livekit2.IngressInfo], error) { + return client.OpenStream[*StartIngressRequest, *livekit2.IngressInfo](ctx, c.client, "StartIngress", nil, opts...) } -func (c *ingressInternalClient) ListActiveIngress(ctx context.Context, req *ListActiveIngressRequest, opts ...psrpc.RequestOption) (<-chan *psrpc.Response[*ListActiveIngressResponse], error) { - return client.RequestMulti[*ListActiveIngressResponse](ctx, c.client, "ListActiveIngress", nil, req, opts...) +func (c *ingressInternalClient) ListActiveIngress(ctx context.Context, req *ListActiveIngressRequest, opts ...psrpc.RequestOption) (*ListActiveIngressResponse, error) { + return client.RequestSingle[*ListActiveIngressResponse](ctx, c.client, "ListActiveIngress", nil, req, opts...) } // ====================== @@ -106,16 +106,16 @@ func NewIngressInternalServer(serverID string, svc IngressInternalServerImpl, bu s := server.NewRPCServer(sd, bus, opts...) - sd.RegisterMethod("StartIngress", true, false, true, false) + sd.RegisterMethod("StartIngress", false, false, true) var err error - err = server.RegisterHandler(s, "StartIngress", nil, svc.StartIngress, svc.StartIngressAffinity) + err = server.RegisterStreamHandler(s, "StartIngress", nil, svc.StartIngress, nil) if err != nil { s.Close(false) return nil, err } - sd.RegisterMethod("ListActiveIngress", false, true, false, false) - err = server.RegisterHandler(s, "ListActiveIngress", nil, svc.ListActiveIngress, nil) + sd.RegisterMethod("ListActiveIngress", true, false, true) + err = server.RegisterHandler(s, "ListActiveIngress", nil, svc.ListActiveIngress, svc.ListActiveIngressAffinity) if err != nil { s.Close(false) return nil, err @@ -140,11 +140,11 @@ func (s *ingressInternalServer) Kill() { // =============================== type IngressHandlerClient interface { - UpdateIngress(ctx context.Context, topic string, req *livekit2.UpdateIngressRequest, opts ...psrpc.RequestOption) (*livekit2.IngressState, error) + SubscribeUpdateIngress(ctx context.Context) (psrpc.Subscription[*livekit2.IngressState], error) - DeleteIngress(ctx context.Context, topic string, req *livekit2.DeleteIngressRequest, opts ...psrpc.RequestOption) (*livekit2.IngressState, error) + SubscribeDeleteIngress(ctx context.Context) (psrpc.Subscription[*livekit2.IngressState], error) - DeleteWHIPResource(ctx context.Context, topic string, req *DeleteWHIPResourceRequest, opts ...psrpc.RequestOption) (*google_protobuf3.Empty, error) + SubscribeDeleteWHIPResource(ctx context.Context) (psrpc.Subscription[*google_protobuf3.Empty], error) } // =================================== @@ -152,11 +152,6 @@ type IngressHandlerClient interface { // =================================== type IngressHandlerServerImpl interface { - UpdateIngress(context.Context, *livekit2.UpdateIngressRequest) (*livekit2.IngressState, error) - - DeleteIngress(context.Context, *livekit2.DeleteIngressRequest) (*livekit2.IngressState, error) - - DeleteWHIPResource(context.Context, *DeleteWHIPResourceRequest) (*google_protobuf3.Empty, error) } // =============================== @@ -164,12 +159,11 @@ type IngressHandlerServerImpl interface { // =============================== type IngressHandlerServer interface { - RegisterUpdateIngressTopic(topic string) error - DeregisterUpdateIngressTopic(topic string) - RegisterDeleteIngressTopic(topic string) error - DeregisterDeleteIngressTopic(topic string) - RegisterDeleteWHIPResourceTopic(topic string) error - DeregisterDeleteWHIPResourceTopic(topic string) + PublishUpdateIngress(ctx context.Context, msg *livekit2.IngressState) error + + PublishDeleteIngress(ctx context.Context, msg *livekit2.IngressState) error + + PublishDeleteWHIPResource(ctx context.Context, msg *google_protobuf3.Empty) error // Close and wait for pending RPCs to complete Shutdown() @@ -193,9 +187,9 @@ func NewIngressHandlerClient(clientID string, bus psrpc.MessageBus, opts ...psrp ID: clientID, } - sd.RegisterMethod("UpdateIngress", false, false, true, false) - sd.RegisterMethod("DeleteIngress", false, false, true, false) - sd.RegisterMethod("DeleteWHIPResource", false, false, true, false) + sd.RegisterMethod("UpdateIngress", false, false, true) + sd.RegisterMethod("DeleteIngress", false, false, true) + sd.RegisterMethod("DeleteWHIPResource", false, false, true) rpcClient, err := client.NewRPCClient(sd, bus, opts...) if err != nil { @@ -207,16 +201,16 @@ func NewIngressHandlerClient(clientID string, bus psrpc.MessageBus, opts ...psrp }, nil } -func (c *ingressHandlerClient) UpdateIngress(ctx context.Context, topic string, req *livekit2.UpdateIngressRequest, opts ...psrpc.RequestOption) (*livekit2.IngressState, error) { - return client.RequestSingle[*livekit2.IngressState](ctx, c.client, "UpdateIngress", []string{topic}, req, opts...) +func (c *ingressHandlerClient) SubscribeUpdateIngress(ctx context.Context) (psrpc.Subscription[*livekit2.IngressState], error) { + return client.JoinQueue[*livekit2.IngressState](ctx, c.client, "UpdateIngress", nil) } -func (c *ingressHandlerClient) DeleteIngress(ctx context.Context, topic string, req *livekit2.DeleteIngressRequest, opts ...psrpc.RequestOption) (*livekit2.IngressState, error) { - return client.RequestSingle[*livekit2.IngressState](ctx, c.client, "DeleteIngress", []string{topic}, req, opts...) +func (c *ingressHandlerClient) SubscribeDeleteIngress(ctx context.Context) (psrpc.Subscription[*livekit2.IngressState], error) { + return client.JoinQueue[*livekit2.IngressState](ctx, c.client, "DeleteIngress", nil) } -func (c *ingressHandlerClient) DeleteWHIPResource(ctx context.Context, topic string, req *DeleteWHIPResourceRequest, opts ...psrpc.RequestOption) (*google_protobuf3.Empty, error) { - return client.RequestSingle[*google_protobuf3.Empty](ctx, c.client, "DeleteWHIPResource", []string{topic}, req, opts...) +func (c *ingressHandlerClient) SubscribeDeleteWHIPResource(ctx context.Context) (psrpc.Subscription[*google_protobuf3.Empty], error) { + return client.JoinQueue[*google_protobuf3.Empty](ctx, c.client, "DeleteWHIPResource", nil) } // ===================== @@ -238,37 +232,25 @@ func NewIngressHandlerServer(serverID string, svc IngressHandlerServerImpl, bus s := server.NewRPCServer(sd, bus, opts...) - sd.RegisterMethod("UpdateIngress", false, false, true, false) - sd.RegisterMethod("DeleteIngress", false, false, true, false) - sd.RegisterMethod("DeleteWHIPResource", false, false, true, false) + sd.RegisterMethod("UpdateIngress", false, false, true) + sd.RegisterMethod("DeleteIngress", false, false, true) + sd.RegisterMethod("DeleteWHIPResource", false, false, true) return &ingressHandlerServer{ svc: svc, rpc: s, }, nil } -func (s *ingressHandlerServer) RegisterUpdateIngressTopic(topic string) error { - return server.RegisterHandler(s.rpc, "UpdateIngress", []string{topic}, s.svc.UpdateIngress, nil) -} - -func (s *ingressHandlerServer) DeregisterUpdateIngressTopic(topic string) { - s.rpc.DeregisterHandler("UpdateIngress", []string{topic}) -} - -func (s *ingressHandlerServer) RegisterDeleteIngressTopic(topic string) error { - return server.RegisterHandler(s.rpc, "DeleteIngress", []string{topic}, s.svc.DeleteIngress, nil) -} - -func (s *ingressHandlerServer) DeregisterDeleteIngressTopic(topic string) { - s.rpc.DeregisterHandler("DeleteIngress", []string{topic}) +func (s *ingressHandlerServer) PublishUpdateIngress(ctx context.Context, msg *livekit2.IngressState) error { + return s.rpc.Publish(ctx, "UpdateIngress", nil, msg) } -func (s *ingressHandlerServer) RegisterDeleteWHIPResourceTopic(topic string) error { - return server.RegisterHandler(s.rpc, "DeleteWHIPResource", []string{topic}, s.svc.DeleteWHIPResource, nil) +func (s *ingressHandlerServer) PublishDeleteIngress(ctx context.Context, msg *livekit2.IngressState) error { + return s.rpc.Publish(ctx, "DeleteIngress", nil, msg) } -func (s *ingressHandlerServer) DeregisterDeleteWHIPResourceTopic(topic string) { - s.rpc.DeregisterHandler("DeleteWHIPResource", []string{topic}) +func (s *ingressHandlerServer) PublishDeleteWHIPResource(ctx context.Context, msg *google_protobuf3.Empty) error { + return s.rpc.Publish(ctx, "DeleteWHIPResource", nil, msg) } func (s *ingressHandlerServer) Shutdown() { diff --git a/rpc/io.pb.go b/rpc/io.pb.go index 1d04db9c..3d88cf73 100644 --- a/rpc/io.pb.go +++ b/rpc/io.pb.go @@ -1,6 +1,20 @@ +// Copyright 2023 LiveKit, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.30.0 // protoc v3.21.12 // source: rpc/io.proto diff --git a/rpc/io.psrpc.go b/rpc/io.psrpc.go index 5bab549f..2a781558 100644 --- a/rpc/io.psrpc.go +++ b/rpc/io.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.3.2, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.3.0, DO NOT EDIT. // source: rpc/io.proto package rpc @@ -15,7 +15,7 @@ import ( import google_protobuf3 "google.golang.org/protobuf/types/known/emptypb" import livekit1 "github.com/livekit/protocol/livekit" -var _ = version.PsrpcVersion_0_3_2 +var _ = version.PsrpcVersion_0_3_0 // ======================= // IOInfo Client Interface @@ -69,9 +69,9 @@ func NewIOInfoClient(clientID string, bus psrpc.MessageBus, opts ...psrpc.Client ID: clientID, } - sd.RegisterMethod("UpdateEgressInfo", false, false, true, false) - sd.RegisterMethod("GetIngressInfo", false, false, true, false) - sd.RegisterMethod("UpdateIngressState", false, false, true, false) + sd.RegisterMethod("UpdateEgressInfo", false, false, true) + sd.RegisterMethod("GetIngressInfo", false, false, true) + sd.RegisterMethod("UpdateIngressState", false, false, true) rpcClient, err := client.NewRPCClient(sd, bus, opts...) if err != nil { @@ -114,7 +114,7 @@ func NewIOInfoServer(serverID string, svc IOInfoServerImpl, bus psrpc.MessageBus s := server.NewRPCServer(sd, bus, opts...) - sd.RegisterMethod("UpdateEgressInfo", false, false, true, false) + sd.RegisterMethod("UpdateEgressInfo", false, false, true) var err error err = server.RegisterHandler(s, "UpdateEgressInfo", nil, svc.UpdateEgressInfo, nil) if err != nil { @@ -122,14 +122,14 @@ func NewIOInfoServer(serverID string, svc IOInfoServerImpl, bus psrpc.MessageBus return nil, err } - sd.RegisterMethod("GetIngressInfo", false, false, true, false) + sd.RegisterMethod("GetIngressInfo", false, false, true) err = server.RegisterHandler(s, "GetIngressInfo", nil, svc.GetIngressInfo, nil) if err != nil { s.Close(false) return nil, err } - sd.RegisterMethod("UpdateIngressState", false, false, true, false) + sd.RegisterMethod("UpdateIngressState", false, false, true) err = server.RegisterHandler(s, "UpdateIngressState", nil, svc.UpdateIngressState, nil) if err != nil { s.Close(false) diff --git a/rpc/signal.pb.go b/rpc/signal.pb.go index 03f9bc8e..ef7b190e 100644 --- a/rpc/signal.pb.go +++ b/rpc/signal.pb.go @@ -1,6 +1,20 @@ +// Copyright 2023 LiveKit, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.31.0 +// protoc-gen-go v1.30.0 // protoc v3.21.12 // source: rpc/signal.proto diff --git a/rpc/signal.psrpc.go b/rpc/signal.psrpc.go index 36fba917..f06535f9 100644 --- a/rpc/signal.psrpc.go +++ b/rpc/signal.psrpc.go @@ -1,4 +1,4 @@ -// Code generated by protoc-gen-psrpc v0.3.2, DO NOT EDIT. +// Code generated by protoc-gen-psrpc v0.3.0, DO NOT EDIT. // source: rpc/signal.proto package rpc @@ -13,14 +13,14 @@ import ( "github.com/livekit/psrpc/version" ) -var _ = version.PsrpcVersion_0_3_2 +var _ = version.PsrpcVersion_0_3_0 // ======================= // Signal Client Interface // ======================= -type SignalClient[NodeIdTopicType ~string] interface { - RelaySignal(ctx context.Context, nodeId NodeIdTopicType, opts ...psrpc.RequestOption) (psrpc.ClientStream[*RelaySignalRequest, *RelaySignalResponse], error) +type SignalClient interface { + SubscribeRelaySignal(ctx context.Context) (psrpc.Subscription[*RelaySignalResponse], error) } // =========================== @@ -28,16 +28,14 @@ type SignalClient[NodeIdTopicType ~string] interface { // =========================== type SignalServerImpl interface { - RelaySignal(psrpc.ServerStream[*RelaySignalResponse, *RelaySignalRequest]) error } // ======================= // Signal Server Interface // ======================= -type SignalServer[NodeIdTopicType ~string] interface { - RegisterRelaySignalTopic(nodeId NodeIdTopicType) error - DeregisterRelaySignalTopic(nodeId NodeIdTopicType) +type SignalServer interface { + PublishRelaySignal(ctx context.Context, msg *RelaySignalResponse) error // Close and wait for pending RPCs to complete Shutdown() @@ -50,45 +48,45 @@ type SignalServer[NodeIdTopicType ~string] interface { // Signal Client // ============= -type signalClient[NodeIdTopicType ~string] struct { +type signalClient struct { client *client.RPCClient } // NewSignalClient creates a psrpc client that implements the SignalClient interface. -func NewSignalClient[NodeIdTopicType ~string](clientID string, bus psrpc.MessageBus, opts ...psrpc.ClientOption) (SignalClient[NodeIdTopicType], error) { +func NewSignalClient(clientID string, bus psrpc.MessageBus, opts ...psrpc.ClientOption) (SignalClient, error) { sd := &info.ServiceDefinition{ Name: "Signal", ID: clientID, } - sd.RegisterMethod("RelaySignal", false, false, false, false) + sd.RegisterMethod("RelaySignal", false, false, true) - rpcClient, err := client.NewRPCClientWithStreams(sd, bus, opts...) + rpcClient, err := client.NewRPCClient(sd, bus, opts...) if err != nil { return nil, err } - return &signalClient[NodeIdTopicType]{ + return &signalClient{ client: rpcClient, }, nil } -func (c *signalClient[NodeIdTopicType]) RelaySignal(ctx context.Context, nodeId NodeIdTopicType, opts ...psrpc.RequestOption) (psrpc.ClientStream[*RelaySignalRequest, *RelaySignalResponse], error) { - return client.OpenStream[*RelaySignalRequest, *RelaySignalResponse](ctx, c.client, "RelaySignal", []string{string(nodeId)}, opts...) +func (c *signalClient) SubscribeRelaySignal(ctx context.Context) (psrpc.Subscription[*RelaySignalResponse], error) { + return client.JoinQueue[*RelaySignalResponse](ctx, c.client, "RelaySignal", nil) } // ============= // Signal Server // ============= -type signalServer[NodeIdTopicType ~string] struct { +type signalServer struct { svc SignalServerImpl rpc *server.RPCServer } // NewSignalServer builds a RPCServer that will route requests // to the corresponding method in the provided svc implementation. -func NewSignalServer[NodeIdTopicType ~string](serverID string, svc SignalServerImpl, bus psrpc.MessageBus, opts ...psrpc.ServerOption) (SignalServer[NodeIdTopicType], error) { +func NewSignalServer(serverID string, svc SignalServerImpl, bus psrpc.MessageBus, opts ...psrpc.ServerOption) (SignalServer, error) { sd := &info.ServiceDefinition{ Name: "Signal", ID: serverID, @@ -96,26 +94,22 @@ func NewSignalServer[NodeIdTopicType ~string](serverID string, svc SignalServerI s := server.NewRPCServer(sd, bus, opts...) - sd.RegisterMethod("RelaySignal", false, false, false, false) - return &signalServer[NodeIdTopicType]{ + sd.RegisterMethod("RelaySignal", false, false, true) + return &signalServer{ svc: svc, rpc: s, }, nil } -func (s *signalServer[NodeIdTopicType]) RegisterRelaySignalTopic(nodeId NodeIdTopicType) error { - return server.RegisterStreamHandler(s.rpc, "RelaySignal", []string{string(nodeId)}, s.svc.RelaySignal, nil) +func (s *signalServer) PublishRelaySignal(ctx context.Context, msg *RelaySignalResponse) error { + return s.rpc.Publish(ctx, "RelaySignal", nil, msg) } -func (s *signalServer[NodeIdTopicType]) DeregisterRelaySignalTopic(nodeId NodeIdTopicType) { - s.rpc.DeregisterHandler("RelaySignal", []string{string(nodeId)}) -} - -func (s *signalServer[NodeIdTopicType]) Shutdown() { +func (s *signalServer) Shutdown() { s.rpc.Close(false) } -func (s *signalServer[NodeIdTopicType]) Kill() { +func (s *signalServer) Kill() { s.rpc.Close(true) }