diff --git a/livekit/livekit_models.pb.go b/livekit/livekit_models.pb.go index 085466f0..84f4de08 100644 --- a/livekit/livekit_models.pb.go +++ b/livekit/livekit_models.pb.go @@ -3266,8 +3266,9 @@ type RTPStats struct { LayerLockPlis uint32 `protobuf:"varint,35,opt,name=layer_lock_plis,json=layerLockPlis,proto3" json:"layer_lock_plis,omitempty"` LastLayerLockPli *timestamppb.Timestamp `protobuf:"bytes,36,opt,name=last_layer_lock_pli,json=lastLayerLockPli,proto3" json:"last_layer_lock_pli,omitempty"` PacketDrift *RTPDrift `protobuf:"bytes,44,opt,name=packet_drift,json=packetDrift,proto3" json:"packet_drift,omitempty"` - ReportDrift *RTPDrift `protobuf:"bytes,45,opt,name=report_drift,json=reportDrift,proto3" json:"report_drift,omitempty"` - RebasedReportDrift *RTPDrift `protobuf:"bytes,46,opt,name=rebased_report_drift,json=rebasedReportDrift,proto3" json:"rebased_report_drift,omitempty"` // NEXT_ID: 47 + NtpReportDrift *RTPDrift `protobuf:"bytes,45,opt,name=ntp_report_drift,json=ntpReportDrift,proto3" json:"ntp_report_drift,omitempty"` + RebasedReportDrift *RTPDrift `protobuf:"bytes,46,opt,name=rebased_report_drift,json=rebasedReportDrift,proto3" json:"rebased_report_drift,omitempty"` + ReceivedReportDrift *RTPDrift `protobuf:"bytes,47,opt,name=received_report_drift,json=receivedReportDrift,proto3" json:"received_report_drift,omitempty"` // NEXT_ID: 48 } func (x *RTPStats) Reset() { @@ -3596,9 +3597,9 @@ func (x *RTPStats) GetPacketDrift() *RTPDrift { return nil } -func (x *RTPStats) GetReportDrift() *RTPDrift { +func (x *RTPStats) GetNtpReportDrift() *RTPDrift { if x != nil { - return x.ReportDrift + return x.NtpReportDrift } return nil } @@ -3610,6 +3611,108 @@ func (x *RTPStats) GetRebasedReportDrift() *RTPDrift { return nil } +func (x *RTPStats) GetReceivedReportDrift() *RTPDrift { + if x != nil { + return x.ReceivedReportDrift + } + return nil +} + +type RTCPSenderReportState struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + RtpTimestamp uint32 `protobuf:"varint,1,opt,name=rtp_timestamp,json=rtpTimestamp,proto3" json:"rtp_timestamp,omitempty"` + RtpTimestampExt uint64 `protobuf:"varint,2,opt,name=rtp_timestamp_ext,json=rtpTimestampExt,proto3" json:"rtp_timestamp_ext,omitempty"` + NtpTimestamp uint64 `protobuf:"varint,3,opt,name=ntp_timestamp,json=ntpTimestamp,proto3" json:"ntp_timestamp,omitempty"` + At int64 `protobuf:"varint,4,opt,name=at,proto3" json:"at,omitempty"` // time at which this happened + AtAdjusted int64 `protobuf:"varint,5,opt,name=at_adjusted,json=atAdjusted,proto3" json:"at_adjusted,omitempty"` + Packets uint32 `protobuf:"varint,6,opt,name=packets,proto3" json:"packets,omitempty"` + Octets uint64 `protobuf:"varint,7,opt,name=octets,proto3" json:"octets,omitempty"` +} + +func (x *RTCPSenderReportState) Reset() { + *x = RTCPSenderReportState{} + if protoimpl.UnsafeEnabled { + mi := &file_livekit_models_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RTCPSenderReportState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RTCPSenderReportState) ProtoMessage() {} + +func (x *RTCPSenderReportState) 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 RTCPSenderReportState.ProtoReflect.Descriptor instead. +func (*RTCPSenderReportState) Descriptor() ([]byte, []int) { + return file_livekit_models_proto_rawDescGZIP(), []int{25} +} + +func (x *RTCPSenderReportState) GetRtpTimestamp() uint32 { + if x != nil { + return x.RtpTimestamp + } + return 0 +} + +func (x *RTCPSenderReportState) GetRtpTimestampExt() uint64 { + if x != nil { + return x.RtpTimestampExt + } + return 0 +} + +func (x *RTCPSenderReportState) GetNtpTimestamp() uint64 { + if x != nil { + return x.NtpTimestamp + } + return 0 +} + +func (x *RTCPSenderReportState) GetAt() int64 { + if x != nil { + return x.At + } + return 0 +} + +func (x *RTCPSenderReportState) GetAtAdjusted() int64 { + if x != nil { + return x.AtAdjusted + } + return 0 +} + +func (x *RTCPSenderReportState) GetPackets() uint32 { + if x != nil { + return x.Packets + } + return 0 +} + +func (x *RTCPSenderReportState) GetOctets() uint64 { + if x != nil { + return x.Octets + } + return 0 +} + type RTPForwarderState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3624,13 +3727,14 @@ type RTPForwarderState struct { // Types that are assignable to CodecMunger: // // *RTPForwarderState_Vp8Munger - CodecMunger isRTPForwarderState_CodecMunger `protobuf_oneof:"codec_munger"` + CodecMunger isRTPForwarderState_CodecMunger `protobuf_oneof:"codec_munger"` + SenderReportState []*RTCPSenderReportState `protobuf:"bytes,8,rep,name=sender_report_state,json=senderReportState,proto3" json:"sender_report_state,omitempty"` } func (x *RTPForwarderState) Reset() { *x = RTPForwarderState{} if protoimpl.UnsafeEnabled { - mi := &file_livekit_models_proto_msgTypes[25] + mi := &file_livekit_models_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3643,7 +3747,7 @@ func (x *RTPForwarderState) String() string { func (*RTPForwarderState) ProtoMessage() {} func (x *RTPForwarderState) ProtoReflect() protoreflect.Message { - mi := &file_livekit_models_proto_msgTypes[25] + mi := &file_livekit_models_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3656,7 +3760,7 @@ func (x *RTPForwarderState) ProtoReflect() protoreflect.Message { // Deprecated: Use RTPForwarderState.ProtoReflect.Descriptor instead. func (*RTPForwarderState) Descriptor() ([]byte, []int) { - return file_livekit_models_proto_rawDescGZIP(), []int{25} + return file_livekit_models_proto_rawDescGZIP(), []int{26} } func (x *RTPForwarderState) GetStarted() bool { @@ -3715,6 +3819,13 @@ func (x *RTPForwarderState) GetVp8Munger() *VP8MungerState { return nil } +func (x *RTPForwarderState) GetSenderReportState() []*RTCPSenderReportState { + if x != nil { + return x.SenderReportState + } + return nil +} + type isRTPForwarderState_CodecMunger interface { isRTPForwarderState_CodecMunger() } @@ -3741,7 +3852,7 @@ type RTPMungerState struct { func (x *RTPMungerState) Reset() { *x = RTPMungerState{} if protoimpl.UnsafeEnabled { - mi := &file_livekit_models_proto_msgTypes[26] + mi := &file_livekit_models_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3754,7 +3865,7 @@ func (x *RTPMungerState) String() string { func (*RTPMungerState) ProtoMessage() {} func (x *RTPMungerState) ProtoReflect() protoreflect.Message { - mi := &file_livekit_models_proto_msgTypes[26] + mi := &file_livekit_models_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3767,7 +3878,7 @@ func (x *RTPMungerState) ProtoReflect() protoreflect.Message { // Deprecated: Use RTPMungerState.ProtoReflect.Descriptor instead. func (*RTPMungerState) Descriptor() ([]byte, []int) { - return file_livekit_models_proto_rawDescGZIP(), []int{26} + return file_livekit_models_proto_rawDescGZIP(), []int{27} } func (x *RTPMungerState) GetExtLastSequenceNumber() uint64 { @@ -3829,7 +3940,7 @@ type VP8MungerState struct { func (x *VP8MungerState) Reset() { *x = VP8MungerState{} if protoimpl.UnsafeEnabled { - mi := &file_livekit_models_proto_msgTypes[27] + mi := &file_livekit_models_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3842,7 +3953,7 @@ func (x *VP8MungerState) String() string { func (*VP8MungerState) ProtoMessage() {} func (x *VP8MungerState) ProtoReflect() protoreflect.Message { - mi := &file_livekit_models_proto_msgTypes[27] + mi := &file_livekit_models_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3855,7 +3966,7 @@ func (x *VP8MungerState) ProtoReflect() protoreflect.Message { // Deprecated: Use VP8MungerState.ProtoReflect.Descriptor instead. func (*VP8MungerState) Descriptor() ([]byte, []int) { - return file_livekit_models_proto_rawDescGZIP(), []int{27} + return file_livekit_models_proto_rawDescGZIP(), []int{28} } func (x *VP8MungerState) GetExtLastPictureId() int32 { @@ -3919,7 +4030,7 @@ type TimedVersion struct { func (x *TimedVersion) Reset() { *x = TimedVersion{} if protoimpl.UnsafeEnabled { - mi := &file_livekit_models_proto_msgTypes[28] + mi := &file_livekit_models_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3932,7 +4043,7 @@ func (x *TimedVersion) String() string { func (*TimedVersion) ProtoMessage() {} func (x *TimedVersion) ProtoReflect() protoreflect.Message { - mi := &file_livekit_models_proto_msgTypes[28] + mi := &file_livekit_models_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3945,7 +4056,7 @@ func (x *TimedVersion) ProtoReflect() protoreflect.Message { // Deprecated: Use TimedVersion.ProtoReflect.Descriptor instead. func (*TimedVersion) Descriptor() ([]byte, []int) { - return file_livekit_models_proto_rawDescGZIP(), []int{28} + return file_livekit_models_proto_rawDescGZIP(), []int{29} } func (x *TimedVersion) GetUnixMicro() int64 { @@ -4360,7 +4471,7 @@ var file_livekit_models_proto_rawDesc = []byte{ 0x66, 0x74, 0x5f, 0x6d, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x07, 0x64, 0x72, 0x69, 0x66, 0x74, 0x4d, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x63, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x61, 0x74, 0x65, 0x22, 0xf6, 0x0e, 0x0a, 0x08, 0x52, 0x54, 0x50, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x61, 0x74, 0x65, 0x22, 0xc4, 0x0f, 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, @@ -4468,161 +4579,186 @@ var file_livekit_models_proto_rawDesc = []byte{ 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x54, 0x50, 0x44, 0x72, 0x69, 0x66, 0x74, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x44, 0x72, 0x69, 0x66, 0x74, - 0x12, 0x34, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, - 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, - 0x2e, 0x52, 0x54, 0x50, 0x44, 0x72, 0x69, 0x66, 0x74, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x44, 0x72, 0x69, 0x66, 0x74, 0x12, 0x43, 0x0a, 0x14, 0x72, 0x65, 0x62, 0x61, 0x73, 0x65, - 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x18, 0x2e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, - 0x54, 0x50, 0x44, 0x72, 0x69, 0x66, 0x74, 0x52, 0x12, 0x72, 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x72, 0x69, 0x66, 0x74, 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, 0xfe, 0x02, 0x0a, - 0x11, 0x52, 0x54, 0x50, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, 0x17, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x5f, - 0x73, 0x70, 0x61, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x70, 0x61, - 0x74, 0x69, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, - 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x72, - 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x78, - 0x74, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x65, 0x78, 0x74, 0x46, 0x69, 0x72, 0x73, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3f, 0x0a, 0x1c, 0x64, 0x75, - 0x6d, 0x6d, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x19, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x36, 0x0a, 0x0a, 0x72, - 0x74, 0x70, 0x5f, 0x6d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x54, 0x50, 0x4d, 0x75, 0x6e, - 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x72, 0x74, 0x70, 0x4d, 0x75, 0x6e, - 0x67, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0a, 0x76, 0x70, 0x38, 0x5f, 0x6d, 0x75, 0x6e, 0x67, 0x65, - 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, - 0x74, 0x2e, 0x56, 0x50, 0x38, 0x4d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x09, 0x76, 0x70, 0x38, 0x4d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x42, 0x0e, 0x0a, - 0x0c, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x5f, 0x6d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x22, 0xc7, 0x02, - 0x0a, 0x0e, 0x52, 0x54, 0x50, 0x4d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x37, 0x0a, 0x18, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x15, 0x65, 0x78, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x1f, 0x65, 0x78, 0x74, - 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, 0x71, - 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x1b, 0x65, 0x78, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x4c, 0x61, 0x73, - 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x2c, 0x0a, 0x12, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x65, 0x78, 0x74, - 0x4c, 0x61, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x39, 0x0a, - 0x19, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x5f, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x16, 0x65, 0x78, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x4c, 0x61, 0x73, 0x74, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6c, - 0x61, 0x73, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, 0x63, - 0x6f, 0x6e, 0x64, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x4c, 0x61, 0x73, - 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x98, 0x02, 0x0a, 0x0e, 0x56, 0x50, 0x38, 0x4d, - 0x75, 0x6e, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x13, 0x65, 0x78, - 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x65, 0x78, 0x74, 0x4c, 0x61, 0x73, 0x74, - 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x69, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0d, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x55, 0x73, 0x65, - 0x64, 0x12, 0x27, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x6c, 0x30, 0x5f, 0x70, 0x69, - 0x63, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6c, 0x61, 0x73, - 0x74, 0x54, 0x6c, 0x30, 0x50, 0x69, 0x63, 0x49, 0x64, 0x78, 0x12, 0x27, 0x0a, 0x10, 0x74, 0x6c, - 0x30, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x78, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x6c, 0x30, 0x50, 0x69, 0x63, 0x49, 0x64, 0x78, 0x55, - 0x73, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x69, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x74, 0x69, 0x64, 0x55, 0x73, 0x65, 0x64, 0x12, 0x20, - 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x78, - 0x12, 0x20, 0x0a, 0x0c, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x78, 0x5f, 0x75, 0x73, 0x65, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x78, 0x55, 0x73, - 0x65, 0x64, 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, + 0x12, 0x3b, 0x0a, 0x10, 0x6e, 0x74, 0x70, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, + 0x72, 0x69, 0x66, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x76, + 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x54, 0x50, 0x44, 0x72, 0x69, 0x66, 0x74, 0x52, 0x0e, 0x6e, + 0x74, 0x70, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x72, 0x69, 0x66, 0x74, 0x12, 0x43, 0x0a, + 0x14, 0x72, 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, + 0x64, 0x72, 0x69, 0x66, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, + 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x54, 0x50, 0x44, 0x72, 0x69, 0x66, 0x74, 0x52, 0x12, + 0x72, 0x65, 0x62, 0x61, 0x73, 0x65, 0x64, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x44, 0x72, 0x69, + 0x66, 0x74, 0x12, 0x45, 0x0a, 0x15, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x72, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x72, 0x69, 0x66, 0x74, 0x18, 0x2f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x54, 0x50, 0x44, + 0x72, 0x69, 0x66, 0x74, 0x52, 0x13, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x44, 0x72, 0x69, 0x66, 0x74, 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, 0xf0, 0x01, 0x0a, 0x15, 0x52, + 0x54, 0x43, 0x50, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x74, 0x70, 0x5f, 0x74, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x74, 0x70, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2a, 0x0a, 0x11, 0x72, 0x74, 0x70, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x65, 0x78, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x72, 0x74, 0x70, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x45, 0x78, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x74, 0x70, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6e, 0x74, + 0x70, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x61, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x61, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x74, + 0x5f, 0x61, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0a, 0x61, 0x74, 0x41, 0x64, 0x6a, 0x75, 0x73, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x70, 0x61, + 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x63, 0x74, 0x65, 0x74, 0x73, 0x22, 0xce, 0x03, + 0x0a, 0x11, 0x52, 0x54, 0x50, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x12, 0x36, 0x0a, + 0x17, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, + 0x5f, 0x73, 0x70, 0x61, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x15, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x53, 0x70, + 0x61, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x65, 0x5f, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x70, + 0x72, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x65, + 0x78, 0x74, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x65, 0x78, 0x74, 0x46, 0x69, 0x72, + 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3f, 0x0a, 0x1c, 0x64, + 0x75, 0x6d, 0x6d, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x19, 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x36, 0x0a, 0x0a, + 0x72, 0x74, 0x70, 0x5f, 0x6d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x54, 0x50, 0x4d, 0x75, + 0x6e, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x72, 0x74, 0x70, 0x4d, 0x75, + 0x6e, 0x67, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0a, 0x76, 0x70, 0x38, 0x5f, 0x6d, 0x75, 0x6e, 0x67, + 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6c, 0x69, 0x76, 0x65, 0x6b, + 0x69, 0x74, 0x2e, 0x56, 0x50, 0x38, 0x4d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x48, 0x00, 0x52, 0x09, 0x76, 0x70, 0x38, 0x4d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x12, 0x4e, + 0x0a, 0x13, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6c, 0x69, + 0x76, 0x65, 0x6b, 0x69, 0x74, 0x2e, 0x52, 0x54, 0x43, 0x50, 0x53, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x11, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x42, 0x0e, + 0x0a, 0x0c, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x5f, 0x6d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x22, 0xc7, + 0x02, 0x0a, 0x0e, 0x52, 0x54, 0x50, 0x4d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x37, 0x0a, 0x18, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x15, 0x65, 0x78, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x53, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x1f, 0x65, 0x78, + 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x1b, 0x65, 0x78, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x4c, 0x61, + 0x73, 0x74, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x12, 0x2c, 0x0a, 0x12, 0x65, 0x78, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x65, 0x78, + 0x74, 0x4c, 0x61, 0x73, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x39, + 0x0a, 0x19, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x5f, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x16, 0x65, 0x78, 0x74, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x4c, 0x61, 0x73, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x61, 0x73, + 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6d, 0x61, 0x72, 0x6b, 0x65, 0x72, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x4c, 0x61, + 0x73, 0x74, 0x4d, 0x61, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x98, 0x02, 0x0a, 0x0e, 0x56, 0x50, 0x38, + 0x4d, 0x75, 0x6e, 0x67, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x13, 0x65, + 0x78, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x65, 0x78, 0x74, 0x4c, 0x61, 0x73, + 0x74, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x69, + 0x63, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0d, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x49, 0x64, 0x55, 0x73, + 0x65, 0x64, 0x12, 0x27, 0x0a, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x74, 0x6c, 0x30, 0x5f, 0x70, + 0x69, 0x63, 0x5f, 0x69, 0x64, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x6c, 0x61, + 0x73, 0x74, 0x54, 0x6c, 0x30, 0x50, 0x69, 0x63, 0x49, 0x64, 0x78, 0x12, 0x27, 0x0a, 0x10, 0x74, + 0x6c, 0x30, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x78, 0x5f, 0x75, 0x73, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x74, 0x6c, 0x30, 0x50, 0x69, 0x63, 0x49, 0x64, 0x78, + 0x55, 0x73, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x69, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x74, 0x69, 0x64, 0x55, 0x73, 0x65, 0x64, 0x12, + 0x20, 0x0a, 0x0c, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x78, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x49, 0x64, + 0x78, 0x12, 0x20, 0x0a, 0x0c, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x78, 0x5f, 0x75, 0x73, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x78, 0x55, + 0x73, 0x65, 0x64, 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, 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, 0x29, 0x0a, 0x0a, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x12, 0x0e, - 0x0a, 0x0a, 0x49, 0x43, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0b, - 0x0a, 0x07, 0x49, 0x43, 0x5f, 0x4a, 0x50, 0x45, 0x47, 0x10, 0x01, 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, 0x40, 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, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x4f, - 0x53, 0x54, 0x10, 0x03, 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, 0xec, 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, 0x12, 0x0d, - 0x0a, 0x09, 0x4d, 0x49, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x08, 0x12, 0x10, 0x0a, - 0x0c, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x4c, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x09, 0x12, - 0x0f, 0x0a, 0x0b, 0x52, 0x4f, 0x4f, 0x4d, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, 0x0a, - 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, 0x2a, 0xa3, 0x01, 0x0a, 0x11, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x54, 0x72, 0x61, 0x63, - 0x6b, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46, 0x5f, 0x53, - 0x54, 0x45, 0x52, 0x45, 0x4f, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46, 0x5f, 0x4e, 0x4f, - 0x5f, 0x44, 0x54, 0x58, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x54, 0x46, 0x5f, 0x41, 0x55, 0x54, - 0x4f, 0x5f, 0x47, 0x41, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x10, 0x02, - 0x12, 0x18, 0x0a, 0x14, 0x54, 0x46, 0x5f, 0x45, 0x43, 0x48, 0x4f, 0x5f, 0x43, 0x41, 0x4e, 0x43, - 0x45, 0x4c, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x54, 0x46, - 0x5f, 0x4e, 0x4f, 0x49, 0x53, 0x45, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x52, 0x45, 0x53, 0x53, 0x49, - 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x22, 0x0a, 0x1e, 0x54, 0x46, 0x5f, 0x45, 0x4e, 0x48, 0x41, 0x4e, - 0x43, 0x45, 0x44, 0x5f, 0x4e, 0x4f, 0x49, 0x53, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, - 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, 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, + 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, 0x29, 0x0a, 0x0a, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x63, 0x12, + 0x0e, 0x0a, 0x0a, 0x49, 0x43, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, + 0x0b, 0x0a, 0x07, 0x49, 0x43, 0x5f, 0x4a, 0x50, 0x45, 0x47, 0x10, 0x01, 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, 0x40, 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, 0x12, 0x08, 0x0a, 0x04, 0x4c, + 0x4f, 0x53, 0x54, 0x10, 0x03, 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, 0xec, 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, 0x12, + 0x0d, 0x0a, 0x09, 0x4d, 0x49, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x08, 0x12, 0x10, + 0x0a, 0x0c, 0x53, 0x49, 0x47, 0x4e, 0x41, 0x4c, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x10, 0x09, + 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x4f, 0x4f, 0x4d, 0x5f, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, + 0x0a, 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, 0x2a, 0xa3, 0x01, 0x0a, 0x11, 0x41, 0x75, 0x64, 0x69, 0x6f, 0x54, 0x72, 0x61, + 0x63, 0x6b, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46, 0x5f, + 0x53, 0x54, 0x45, 0x52, 0x45, 0x4f, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x46, 0x5f, 0x4e, + 0x4f, 0x5f, 0x44, 0x54, 0x58, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x54, 0x46, 0x5f, 0x41, 0x55, + 0x54, 0x4f, 0x5f, 0x47, 0x41, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x10, + 0x02, 0x12, 0x18, 0x0a, 0x14, 0x54, 0x46, 0x5f, 0x45, 0x43, 0x48, 0x4f, 0x5f, 0x43, 0x41, 0x4e, + 0x43, 0x45, 0x4c, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x54, + 0x46, 0x5f, 0x4e, 0x4f, 0x49, 0x53, 0x45, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x52, 0x45, 0x53, 0x53, + 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x22, 0x0a, 0x1e, 0x54, 0x46, 0x5f, 0x45, 0x4e, 0x48, 0x41, + 0x4e, 0x43, 0x45, 0x44, 0x5f, 0x4e, 0x4f, 0x49, 0x53, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, + 0x4c, 0x4c, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, 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 ( @@ -4638,7 +4774,7 @@ func file_livekit_models_proto_rawDescGZIP() []byte { } var file_livekit_models_proto_enumTypes = make([]protoimpl.EnumInfo, 18) -var file_livekit_models_proto_msgTypes = make([]protoimpl.MessageInfo, 31) +var file_livekit_models_proto_msgTypes = make([]protoimpl.MessageInfo, 32) var file_livekit_models_proto_goTypes = []any{ (AudioCodec)(0), // 0: livekit.AudioCodec (VideoCodec)(0), // 1: livekit.VideoCodec @@ -4683,24 +4819,25 @@ var file_livekit_models_proto_goTypes = []any{ (*DisabledCodecs)(nil), // 40: livekit.DisabledCodecs (*RTPDrift)(nil), // 41: livekit.RTPDrift (*RTPStats)(nil), // 42: livekit.RTPStats - (*RTPForwarderState)(nil), // 43: livekit.RTPForwarderState - (*RTPMungerState)(nil), // 44: livekit.RTPMungerState - (*VP8MungerState)(nil), // 45: livekit.VP8MungerState - (*TimedVersion)(nil), // 46: livekit.TimedVersion - nil, // 47: livekit.ParticipantInfo.AttributesEntry - nil, // 48: livekit.RTPStats.GapHistogramEntry - (*MetricsBatch)(nil), // 49: livekit.MetricsBatch - (*timestamppb.Timestamp)(nil), // 50: google.protobuf.Timestamp + (*RTCPSenderReportState)(nil), // 43: livekit.RTCPSenderReportState + (*RTPForwarderState)(nil), // 44: livekit.RTPForwarderState + (*RTPMungerState)(nil), // 45: livekit.RTPMungerState + (*VP8MungerState)(nil), // 46: livekit.VP8MungerState + (*TimedVersion)(nil), // 47: livekit.TimedVersion + nil, // 48: livekit.ParticipantInfo.AttributesEntry + nil, // 49: livekit.RTPStats.GapHistogramEntry + (*MetricsBatch)(nil), // 50: livekit.MetricsBatch + (*timestamppb.Timestamp)(nil), // 51: google.protobuf.Timestamp } var file_livekit_models_proto_depIdxs = []int32{ 19, // 0: livekit.Room.enabled_codecs:type_name -> livekit.Codec - 46, // 1: livekit.Room.version:type_name -> livekit.TimedVersion + 47, // 1: livekit.Room.version:type_name -> livekit.TimedVersion 4, // 2: livekit.ParticipantPermission.can_publish_sources:type_name -> livekit.TrackSource 12, // 3: livekit.ParticipantInfo.state:type_name -> livekit.ParticipantInfo.State 25, // 4: livekit.ParticipantInfo.tracks:type_name -> livekit.TrackInfo 21, // 5: livekit.ParticipantInfo.permission:type_name -> livekit.ParticipantPermission 13, // 6: livekit.ParticipantInfo.kind:type_name -> livekit.ParticipantInfo.Kind - 47, // 7: livekit.ParticipantInfo.attributes:type_name -> livekit.ParticipantInfo.AttributesEntry + 48, // 7: livekit.ParticipantInfo.attributes:type_name -> livekit.ParticipantInfo.AttributesEntry 8, // 8: livekit.ParticipantInfo.disconnect_reason:type_name -> livekit.DisconnectReason 26, // 9: livekit.SimulcastCodecInfo.layers:type_name -> livekit.VideoLayer 3, // 10: livekit.TrackInfo.type:type_name -> livekit.TrackType @@ -4708,7 +4845,7 @@ var file_livekit_models_proto_depIdxs = []int32{ 26, // 12: livekit.TrackInfo.layers:type_name -> livekit.VideoLayer 24, // 13: livekit.TrackInfo.codecs:type_name -> livekit.SimulcastCodecInfo 14, // 14: livekit.TrackInfo.encryption:type_name -> livekit.Encryption.Type - 46, // 15: livekit.TrackInfo.version:type_name -> livekit.TimedVersion + 47, // 15: livekit.TrackInfo.version:type_name -> livekit.TimedVersion 11, // 16: livekit.TrackInfo.audio_features:type_name -> livekit.AudioTrackFeature 5, // 17: livekit.VideoLayer.quality:type_name -> livekit.VideoQuality 15, // 18: livekit.DataPacket.kind:type_name -> livekit.DataPacket.Kind @@ -4716,7 +4853,7 @@ var file_livekit_models_proto_depIdxs = []int32{ 28, // 20: livekit.DataPacket.speaker:type_name -> livekit.ActiveSpeakerUpdate 31, // 21: livekit.DataPacket.sip_dtmf:type_name -> livekit.SipDTMF 32, // 22: livekit.DataPacket.transcription:type_name -> livekit.Transcription - 49, // 23: livekit.DataPacket.metrics:type_name -> livekit.MetricsBatch + 50, // 23: livekit.DataPacket.metrics:type_name -> livekit.MetricsBatch 34, // 24: livekit.DataPacket.chat_message:type_name -> livekit.ChatMessage 29, // 25: livekit.ActiveSpeakerUpdate.speakers:type_name -> livekit.SpeakerInfo 33, // 26: livekit.Transcription.segments:type_name -> livekit.TranscriptionSegment @@ -4730,25 +4867,27 @@ var file_livekit_models_proto_depIdxs = []int32{ 7, // 34: livekit.VideoConfiguration.hardware_encoder:type_name -> livekit.ClientConfigSetting 19, // 35: livekit.DisabledCodecs.codecs:type_name -> livekit.Codec 19, // 36: livekit.DisabledCodecs.publish:type_name -> livekit.Codec - 50, // 37: livekit.RTPDrift.start_time:type_name -> google.protobuf.Timestamp - 50, // 38: livekit.RTPDrift.end_time:type_name -> google.protobuf.Timestamp - 50, // 39: livekit.RTPStats.start_time:type_name -> google.protobuf.Timestamp - 50, // 40: livekit.RTPStats.end_time:type_name -> google.protobuf.Timestamp - 48, // 41: livekit.RTPStats.gap_histogram:type_name -> livekit.RTPStats.GapHistogramEntry - 50, // 42: livekit.RTPStats.last_pli:type_name -> google.protobuf.Timestamp - 50, // 43: livekit.RTPStats.last_fir:type_name -> google.protobuf.Timestamp - 50, // 44: livekit.RTPStats.last_key_frame:type_name -> google.protobuf.Timestamp - 50, // 45: livekit.RTPStats.last_layer_lock_pli:type_name -> google.protobuf.Timestamp + 51, // 37: livekit.RTPDrift.start_time:type_name -> google.protobuf.Timestamp + 51, // 38: livekit.RTPDrift.end_time:type_name -> google.protobuf.Timestamp + 51, // 39: livekit.RTPStats.start_time:type_name -> google.protobuf.Timestamp + 51, // 40: livekit.RTPStats.end_time:type_name -> google.protobuf.Timestamp + 49, // 41: livekit.RTPStats.gap_histogram:type_name -> livekit.RTPStats.GapHistogramEntry + 51, // 42: livekit.RTPStats.last_pli:type_name -> google.protobuf.Timestamp + 51, // 43: livekit.RTPStats.last_fir:type_name -> google.protobuf.Timestamp + 51, // 44: livekit.RTPStats.last_key_frame:type_name -> google.protobuf.Timestamp + 51, // 45: livekit.RTPStats.last_layer_lock_pli:type_name -> google.protobuf.Timestamp 41, // 46: livekit.RTPStats.packet_drift:type_name -> livekit.RTPDrift - 41, // 47: livekit.RTPStats.report_drift:type_name -> livekit.RTPDrift + 41, // 47: livekit.RTPStats.ntp_report_drift:type_name -> livekit.RTPDrift 41, // 48: livekit.RTPStats.rebased_report_drift:type_name -> livekit.RTPDrift - 44, // 49: livekit.RTPForwarderState.rtp_munger:type_name -> livekit.RTPMungerState - 45, // 50: livekit.RTPForwarderState.vp8_munger:type_name -> livekit.VP8MungerState - 51, // [51:51] is the sub-list for method output_type - 51, // [51:51] is the sub-list for method input_type - 51, // [51:51] is the sub-list for extension type_name - 51, // [51:51] is the sub-list for extension extendee - 0, // [0:51] is the sub-list for field type_name + 41, // 49: livekit.RTPStats.received_report_drift:type_name -> livekit.RTPDrift + 45, // 50: livekit.RTPForwarderState.rtp_munger:type_name -> livekit.RTPMungerState + 46, // 51: livekit.RTPForwarderState.vp8_munger:type_name -> livekit.VP8MungerState + 43, // 52: livekit.RTPForwarderState.sender_report_state:type_name -> livekit.RTCPSenderReportState + 53, // [53:53] is the sub-list for method output_type + 53, // [53:53] is the sub-list for method input_type + 53, // [53:53] is the sub-list for extension type_name + 53, // [53:53] is the sub-list for extension extendee + 0, // [0:53] is the sub-list for field type_name } func init() { file_livekit_models_proto_init() } @@ -5059,7 +5198,7 @@ func file_livekit_models_proto_init() { } } file_livekit_models_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*RTPForwarderState); i { + switch v := v.(*RTCPSenderReportState); i { case 0: return &v.state case 1: @@ -5071,7 +5210,7 @@ func file_livekit_models_proto_init() { } } file_livekit_models_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*RTPMungerState); i { + switch v := v.(*RTPForwarderState); i { case 0: return &v.state case 1: @@ -5083,7 +5222,7 @@ func file_livekit_models_proto_init() { } } file_livekit_models_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*VP8MungerState); i { + switch v := v.(*RTPMungerState); i { case 0: return &v.state case 1: @@ -5095,6 +5234,18 @@ func file_livekit_models_proto_init() { } } file_livekit_models_proto_msgTypes[28].Exporter = func(v any, i int) any { + switch v := v.(*VP8MungerState); 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 any, i int) any { switch v := v.(*TimedVersion); i { case 0: return &v.state @@ -5117,7 +5268,7 @@ func file_livekit_models_proto_init() { } file_livekit_models_proto_msgTypes[12].OneofWrappers = []any{} file_livekit_models_proto_msgTypes[16].OneofWrappers = []any{} - file_livekit_models_proto_msgTypes[25].OneofWrappers = []any{ + file_livekit_models_proto_msgTypes[26].OneofWrappers = []any{ (*RTPForwarderState_Vp8Munger)(nil), } type x struct{} @@ -5126,7 +5277,7 @@ func file_livekit_models_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_livekit_models_proto_rawDesc, NumEnums: 18, - NumMessages: 31, + NumMessages: 32, NumExtensions: 0, NumServices: 0, }, diff --git a/protobufs/livekit_models.proto b/protobufs/livekit_models.proto index 04dbd293..3a90e6b2 100644 --- a/protobufs/livekit_models.proto +++ b/protobufs/livekit_models.proto @@ -486,9 +486,20 @@ message RTPStats { google.protobuf.Timestamp last_layer_lock_pli = 36; RTPDrift packet_drift = 44; - RTPDrift report_drift = 45; + RTPDrift ntp_report_drift = 45; RTPDrift rebased_report_drift = 46; - // NEXT_ID: 47 + RTPDrift received_report_drift = 47; + // NEXT_ID: 48 +} + +message RTCPSenderReportState { + uint32 rtp_timestamp = 1; + uint64 rtp_timestamp_ext = 2; + uint64 ntp_timestamp = 3; + int64 at = 4; // time at which this happened + int64 at_adjusted = 5; + uint32 packets = 6; + uint64 octets = 7; } message RTPForwarderState { @@ -501,6 +512,7 @@ message RTPForwarderState { oneof codec_munger { VP8MungerState vp8_munger = 7; } + repeated RTCPSenderReportState sender_report_state = 8; } message RTPMungerState {