chirpstack/api/go/gw/gw.pb.go
2023-05-22 11:04:13 +01:00

4529 lines
164 KiB
Go
Vendored

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
// protoc v3.21.9
// source: gw/gw.proto
package gw
import (
common "github.com/chirpstack/chirpstack/api/go/v4/common"
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
durationpb "google.golang.org/protobuf/types/known/durationpb"
_ "google.golang.org/protobuf/types/known/structpb"
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type CodeRate int32
const (
CodeRate_CR_UNDEFINED CodeRate = 0
CodeRate_CR_4_5 CodeRate = 1 // LoRa
CodeRate_CR_4_6 CodeRate = 2
CodeRate_CR_4_7 CodeRate = 3
CodeRate_CR_4_8 CodeRate = 4
CodeRate_CR_3_8 CodeRate = 5 // LR-FHSS
CodeRate_CR_2_6 CodeRate = 6
CodeRate_CR_1_4 CodeRate = 7
CodeRate_CR_1_6 CodeRate = 8
CodeRate_CR_5_6 CodeRate = 9
CodeRate_CR_LI_4_5 CodeRate = 10 // LoRa 2.4 gHz
CodeRate_CR_LI_4_6 CodeRate = 11
CodeRate_CR_LI_4_8 CodeRate = 12
)
// Enum value maps for CodeRate.
var (
CodeRate_name = map[int32]string{
0: "CR_UNDEFINED",
1: "CR_4_5",
2: "CR_4_6",
3: "CR_4_7",
4: "CR_4_8",
5: "CR_3_8",
6: "CR_2_6",
7: "CR_1_4",
8: "CR_1_6",
9: "CR_5_6",
10: "CR_LI_4_5",
11: "CR_LI_4_6",
12: "CR_LI_4_8",
}
CodeRate_value = map[string]int32{
"CR_UNDEFINED": 0,
"CR_4_5": 1,
"CR_4_6": 2,
"CR_4_7": 3,
"CR_4_8": 4,
"CR_3_8": 5,
"CR_2_6": 6,
"CR_1_4": 7,
"CR_1_6": 8,
"CR_5_6": 9,
"CR_LI_4_5": 10,
"CR_LI_4_6": 11,
"CR_LI_4_8": 12,
}
)
func (x CodeRate) Enum() *CodeRate {
p := new(CodeRate)
*p = x
return p
}
func (x CodeRate) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (CodeRate) Descriptor() protoreflect.EnumDescriptor {
return file_gw_gw_proto_enumTypes[0].Descriptor()
}
func (CodeRate) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[0]
}
func (x CodeRate) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use CodeRate.Descriptor instead.
func (CodeRate) EnumDescriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{0}
}
type DownlinkTiming int32
const (
// Send the downlink immediately.
DownlinkTiming_IMMEDIATELY DownlinkTiming = 0
// Send downlink at the given delay (based on provided context).
DownlinkTiming_DELAY DownlinkTiming = 1
// Send at given GPS epoch value.
DownlinkTiming_GPS_EPOCH DownlinkTiming = 2
)
// Enum value maps for DownlinkTiming.
var (
DownlinkTiming_name = map[int32]string{
0: "IMMEDIATELY",
1: "DELAY",
2: "GPS_EPOCH",
}
DownlinkTiming_value = map[string]int32{
"IMMEDIATELY": 0,
"DELAY": 1,
"GPS_EPOCH": 2,
}
)
func (x DownlinkTiming) Enum() *DownlinkTiming {
p := new(DownlinkTiming)
*p = x
return p
}
func (x DownlinkTiming) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (DownlinkTiming) Descriptor() protoreflect.EnumDescriptor {
return file_gw_gw_proto_enumTypes[1].Descriptor()
}
func (DownlinkTiming) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[1]
}
func (x DownlinkTiming) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use DownlinkTiming.Descriptor instead.
func (DownlinkTiming) EnumDescriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{1}
}
type FineTimestampType int32
const (
// No fine-timestamp available.
FineTimestampType_NONE FineTimestampType = 0
// Encrypted fine-timestamp.
FineTimestampType_ENCRYPTED FineTimestampType = 1
// Plain fine-timestamp.
FineTimestampType_PLAIN FineTimestampType = 2
)
// Enum value maps for FineTimestampType.
var (
FineTimestampType_name = map[int32]string{
0: "NONE",
1: "ENCRYPTED",
2: "PLAIN",
}
FineTimestampType_value = map[string]int32{
"NONE": 0,
"ENCRYPTED": 1,
"PLAIN": 2,
}
)
func (x FineTimestampType) Enum() *FineTimestampType {
p := new(FineTimestampType)
*p = x
return p
}
func (x FineTimestampType) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (FineTimestampType) Descriptor() protoreflect.EnumDescriptor {
return file_gw_gw_proto_enumTypes[2].Descriptor()
}
func (FineTimestampType) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[2]
}
func (x FineTimestampType) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use FineTimestampType.Descriptor instead.
func (FineTimestampType) EnumDescriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{2}
}
type CRCStatus int32
const (
// No CRC.
CRCStatus_NO_CRC CRCStatus = 0
// Bad CRC.
CRCStatus_BAD_CRC CRCStatus = 1
// CRC OK.
CRCStatus_CRC_OK CRCStatus = 2
)
// Enum value maps for CRCStatus.
var (
CRCStatus_name = map[int32]string{
0: "NO_CRC",
1: "BAD_CRC",
2: "CRC_OK",
}
CRCStatus_value = map[string]int32{
"NO_CRC": 0,
"BAD_CRC": 1,
"CRC_OK": 2,
}
)
func (x CRCStatus) Enum() *CRCStatus {
p := new(CRCStatus)
*p = x
return p
}
func (x CRCStatus) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (CRCStatus) Descriptor() protoreflect.EnumDescriptor {
return file_gw_gw_proto_enumTypes[3].Descriptor()
}
func (CRCStatus) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[3]
}
func (x CRCStatus) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use CRCStatus.Descriptor instead.
func (CRCStatus) EnumDescriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{3}
}
type TxAckStatus int32
const (
// Ignored (when a previous item was already emitted).
TxAckStatus_IGNORED TxAckStatus = 0
// Packet has been programmed for downlink.
TxAckStatus_OK TxAckStatus = 1
// Rejected because it was already too late to program this packet for
// downlink.
TxAckStatus_TOO_LATE TxAckStatus = 2
// Rejected because downlink packet timestamp is too much in advance.
TxAckStatus_TOO_EARLY TxAckStatus = 3
// Rejected because there was already a packet programmed in requested
// timeframe.
TxAckStatus_COLLISION_PACKET TxAckStatus = 4
// Rejected because there was already a beacon planned in requested timeframe.
TxAckStatus_COLLISION_BEACON TxAckStatus = 5
// Rejected because requested frequency is not supported by TX RF chain.
TxAckStatus_TX_FREQ TxAckStatus = 6
// Rejected because requested power is not supported by gateway.
TxAckStatus_TX_POWER TxAckStatus = 7
// Rejected because GPS is unlocked, so GPS timestamp cannot be used.
TxAckStatus_GPS_UNLOCKED TxAckStatus = 8
// Downlink queue is full.
TxAckStatus_QUEUE_FULL TxAckStatus = 9
// Internal error.
TxAckStatus_INTERNAL_ERROR TxAckStatus = 10
)
// Enum value maps for TxAckStatus.
var (
TxAckStatus_name = map[int32]string{
0: "IGNORED",
1: "OK",
2: "TOO_LATE",
3: "TOO_EARLY",
4: "COLLISION_PACKET",
5: "COLLISION_BEACON",
6: "TX_FREQ",
7: "TX_POWER",
8: "GPS_UNLOCKED",
9: "QUEUE_FULL",
10: "INTERNAL_ERROR",
}
TxAckStatus_value = map[string]int32{
"IGNORED": 0,
"OK": 1,
"TOO_LATE": 2,
"TOO_EARLY": 3,
"COLLISION_PACKET": 4,
"COLLISION_BEACON": 5,
"TX_FREQ": 6,
"TX_POWER": 7,
"GPS_UNLOCKED": 8,
"QUEUE_FULL": 9,
"INTERNAL_ERROR": 10,
}
)
func (x TxAckStatus) Enum() *TxAckStatus {
p := new(TxAckStatus)
*p = x
return p
}
func (x TxAckStatus) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (TxAckStatus) Descriptor() protoreflect.EnumDescriptor {
return file_gw_gw_proto_enumTypes[4].Descriptor()
}
func (TxAckStatus) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[4]
}
func (x TxAckStatus) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use TxAckStatus.Descriptor instead.
func (TxAckStatus) EnumDescriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{4}
}
type ConnState_State int32
const (
ConnState_OFFLINE ConnState_State = 0
ConnState_ONLINE ConnState_State = 1
)
// Enum value maps for ConnState_State.
var (
ConnState_State_name = map[int32]string{
0: "OFFLINE",
1: "ONLINE",
}
ConnState_State_value = map[string]int32{
"OFFLINE": 0,
"ONLINE": 1,
}
)
func (x ConnState_State) Enum() *ConnState_State {
p := new(ConnState_State)
*p = x
return p
}
func (x ConnState_State) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (ConnState_State) Descriptor() protoreflect.EnumDescriptor {
return file_gw_gw_proto_enumTypes[5].Descriptor()
}
func (ConnState_State) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[5]
}
func (x ConnState_State) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use ConnState_State.Descriptor instead.
func (ConnState_State) EnumDescriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{32, 0}
}
type Modulation struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to Parameters:
//
// *Modulation_Lora
// *Modulation_Fsk
// *Modulation_LrFhss
Parameters isModulation_Parameters `protobuf_oneof:"parameters"`
}
func (x *Modulation) Reset() {
*x = Modulation{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Modulation) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Modulation) ProtoMessage() {}
func (x *Modulation) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Modulation.ProtoReflect.Descriptor instead.
func (*Modulation) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{0}
}
func (m *Modulation) GetParameters() isModulation_Parameters {
if m != nil {
return m.Parameters
}
return nil
}
func (x *Modulation) GetLora() *LoraModulationInfo {
if x, ok := x.GetParameters().(*Modulation_Lora); ok {
return x.Lora
}
return nil
}
func (x *Modulation) GetFsk() *FskModulationInfo {
if x, ok := x.GetParameters().(*Modulation_Fsk); ok {
return x.Fsk
}
return nil
}
func (x *Modulation) GetLrFhss() *LrFhssModulationInfo {
if x, ok := x.GetParameters().(*Modulation_LrFhss); ok {
return x.LrFhss
}
return nil
}
type isModulation_Parameters interface {
isModulation_Parameters()
}
type Modulation_Lora struct {
// LoRa modulation information.
Lora *LoraModulationInfo `protobuf:"bytes,3,opt,name=lora,proto3,oneof"`
}
type Modulation_Fsk struct {
// FSK modulation information.
Fsk *FskModulationInfo `protobuf:"bytes,4,opt,name=fsk,proto3,oneof"`
}
type Modulation_LrFhss struct {
// LR-FHSS modulation information.
LrFhss *LrFhssModulationInfo `protobuf:"bytes,5,opt,name=lr_fhss,json=lrFhss,proto3,oneof"`
}
func (*Modulation_Lora) isModulation_Parameters() {}
func (*Modulation_Fsk) isModulation_Parameters() {}
func (*Modulation_LrFhss) isModulation_Parameters() {}
type UplinkTxInfoLegacy struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Frequency (Hz).
Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
// Modulation.
Modulation common.Modulation `protobuf:"varint,2,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"`
// Types that are assignable to ModulationInfo:
//
// *UplinkTxInfoLegacy_LoraModulationInfo
// *UplinkTxInfoLegacy_FskModulationInfo
// *UplinkTxInfoLegacy_LrFhssModulationInfo
ModulationInfo isUplinkTxInfoLegacy_ModulationInfo `protobuf_oneof:"modulation_info"`
}
func (x *UplinkTxInfoLegacy) Reset() {
*x = UplinkTxInfoLegacy{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[1]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UplinkTxInfoLegacy) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UplinkTxInfoLegacy) ProtoMessage() {}
func (x *UplinkTxInfoLegacy) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[1]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UplinkTxInfoLegacy.ProtoReflect.Descriptor instead.
func (*UplinkTxInfoLegacy) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{1}
}
func (x *UplinkTxInfoLegacy) GetFrequency() uint32 {
if x != nil {
return x.Frequency
}
return 0
}
func (x *UplinkTxInfoLegacy) GetModulation() common.Modulation {
if x != nil {
return x.Modulation
}
return common.Modulation(0)
}
func (m *UplinkTxInfoLegacy) GetModulationInfo() isUplinkTxInfoLegacy_ModulationInfo {
if m != nil {
return m.ModulationInfo
}
return nil
}
func (x *UplinkTxInfoLegacy) GetLoraModulationInfo() *LoraModulationInfo {
if x, ok := x.GetModulationInfo().(*UplinkTxInfoLegacy_LoraModulationInfo); ok {
return x.LoraModulationInfo
}
return nil
}
func (x *UplinkTxInfoLegacy) GetFskModulationInfo() *FskModulationInfo {
if x, ok := x.GetModulationInfo().(*UplinkTxInfoLegacy_FskModulationInfo); ok {
return x.FskModulationInfo
}
return nil
}
func (x *UplinkTxInfoLegacy) GetLrFhssModulationInfo() *LrFhssModulationInfo {
if x, ok := x.GetModulationInfo().(*UplinkTxInfoLegacy_LrFhssModulationInfo); ok {
return x.LrFhssModulationInfo
}
return nil
}
type isUplinkTxInfoLegacy_ModulationInfo interface {
isUplinkTxInfoLegacy_ModulationInfo()
}
type UplinkTxInfoLegacy_LoraModulationInfo struct {
// LoRa modulation information.
LoraModulationInfo *LoraModulationInfo `protobuf:"bytes,3,opt,name=lora_modulation_info,json=loraModulationInfo,proto3,oneof"`
}
type UplinkTxInfoLegacy_FskModulationInfo struct {
// FSK modulation information.
FskModulationInfo *FskModulationInfo `protobuf:"bytes,4,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"`
}
type UplinkTxInfoLegacy_LrFhssModulationInfo struct {
// LR-FHSS modulation information.
LrFhssModulationInfo *LrFhssModulationInfo `protobuf:"bytes,5,opt,name=lr_fhss_modulation_info,json=lrFhssModulationInfo,proto3,oneof"`
}
func (*UplinkTxInfoLegacy_LoraModulationInfo) isUplinkTxInfoLegacy_ModulationInfo() {}
func (*UplinkTxInfoLegacy_FskModulationInfo) isUplinkTxInfoLegacy_ModulationInfo() {}
func (*UplinkTxInfoLegacy_LrFhssModulationInfo) isUplinkTxInfoLegacy_ModulationInfo() {}
type UplinkTxInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Frequency (Hz).
Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
// Modulation.
Modulation *Modulation `protobuf:"bytes,2,opt,name=modulation,proto3" json:"modulation,omitempty"`
}
func (x *UplinkTxInfo) Reset() {
*x = UplinkTxInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UplinkTxInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UplinkTxInfo) ProtoMessage() {}
func (x *UplinkTxInfo) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UplinkTxInfo.ProtoReflect.Descriptor instead.
func (*UplinkTxInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{2}
}
func (x *UplinkTxInfo) GetFrequency() uint32 {
if x != nil {
return x.Frequency
}
return 0
}
func (x *UplinkTxInfo) GetModulation() *Modulation {
if x != nil {
return x.Modulation
}
return nil
}
type LoraModulationInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Bandwidth.
Bandwidth uint32 `protobuf:"varint,1,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
// Speading-factor.
SpreadingFactor uint32 `protobuf:"varint,2,opt,name=spreading_factor,json=spreadingFactor,proto3" json:"spreading_factor,omitempty"`
// Code-rate.
CodeRateLegacy string `protobuf:"bytes,3,opt,name=code_rate_legacy,json=codeRateLegacy,proto3" json:"code_rate_legacy,omitempty"`
// Code-rate.
CodeRate CodeRate `protobuf:"varint,5,opt,name=code_rate,json=codeRate,proto3,enum=gw.CodeRate" json:"code_rate,omitempty"`
// Polarization inversion.
PolarizationInversion bool `protobuf:"varint,4,opt,name=polarization_inversion,json=polarizationInversion,proto3" json:"polarization_inversion,omitempty"`
}
func (x *LoraModulationInfo) Reset() {
*x = LoraModulationInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *LoraModulationInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LoraModulationInfo) ProtoMessage() {}
func (x *LoraModulationInfo) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LoraModulationInfo.ProtoReflect.Descriptor instead.
func (*LoraModulationInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{3}
}
func (x *LoraModulationInfo) GetBandwidth() uint32 {
if x != nil {
return x.Bandwidth
}
return 0
}
func (x *LoraModulationInfo) GetSpreadingFactor() uint32 {
if x != nil {
return x.SpreadingFactor
}
return 0
}
func (x *LoraModulationInfo) GetCodeRateLegacy() string {
if x != nil {
return x.CodeRateLegacy
}
return ""
}
func (x *LoraModulationInfo) GetCodeRate() CodeRate {
if x != nil {
return x.CodeRate
}
return CodeRate_CR_UNDEFINED
}
func (x *LoraModulationInfo) GetPolarizationInversion() bool {
if x != nil {
return x.PolarizationInversion
}
return false
}
type FskModulationInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Frequency deviation.
FrequencyDeviation uint32 `protobuf:"varint,1,opt,name=frequency_deviation,json=frequencyDeviation,proto3" json:"frequency_deviation,omitempty"`
// FSK datarate (bits / sec).
Datarate uint32 `protobuf:"varint,2,opt,name=datarate,proto3" json:"datarate,omitempty"`
}
func (x *FskModulationInfo) Reset() {
*x = FskModulationInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *FskModulationInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FskModulationInfo) ProtoMessage() {}
func (x *FskModulationInfo) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use FskModulationInfo.ProtoReflect.Descriptor instead.
func (*FskModulationInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{4}
}
func (x *FskModulationInfo) GetFrequencyDeviation() uint32 {
if x != nil {
return x.FrequencyDeviation
}
return 0
}
func (x *FskModulationInfo) GetDatarate() uint32 {
if x != nil {
return x.Datarate
}
return 0
}
type LrFhssModulationInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Operating channel width (OCW) in Hz.
OperatingChannelWidth uint32 `protobuf:"varint,1,opt,name=operating_channel_width,json=operatingChannelWidth,proto3" json:"operating_channel_width,omitempty"`
// Code-rate.
// Deprecated: use code_rate.
CodeRateLegacy string `protobuf:"bytes,2,opt,name=code_rate_legacy,json=codeRateLegacy,proto3" json:"code_rate_legacy,omitempty"`
// Code-rate.
CodeRate CodeRate `protobuf:"varint,4,opt,name=code_rate,json=codeRate,proto3,enum=gw.CodeRate" json:"code_rate,omitempty"`
// Hopping grid number of steps.
GridSteps uint32 `protobuf:"varint,3,opt,name=grid_steps,json=gridSteps,proto3" json:"grid_steps,omitempty"`
}
func (x *LrFhssModulationInfo) Reset() {
*x = LrFhssModulationInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *LrFhssModulationInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LrFhssModulationInfo) ProtoMessage() {}
func (x *LrFhssModulationInfo) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use LrFhssModulationInfo.ProtoReflect.Descriptor instead.
func (*LrFhssModulationInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{5}
}
func (x *LrFhssModulationInfo) GetOperatingChannelWidth() uint32 {
if x != nil {
return x.OperatingChannelWidth
}
return 0
}
func (x *LrFhssModulationInfo) GetCodeRateLegacy() string {
if x != nil {
return x.CodeRateLegacy
}
return ""
}
func (x *LrFhssModulationInfo) GetCodeRate() CodeRate {
if x != nil {
return x.CodeRate
}
return CodeRate_CR_UNDEFINED
}
func (x *LrFhssModulationInfo) GetGridSteps() uint32 {
if x != nil {
return x.GridSteps
}
return 0
}
type EncryptedFineTimestamp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// AES key index used for encrypting the fine timestamp.
AesKeyIndex uint32 `protobuf:"varint,1,opt,name=aes_key_index,json=aesKeyIndex,proto3" json:"aes_key_index,omitempty"`
// Encrypted 'main' fine-timestamp (ns precision part of the timestamp).
EncryptedNs []byte `protobuf:"bytes,2,opt,name=encrypted_ns,json=encryptedNs,proto3" json:"encrypted_ns,omitempty"`
// FPGA ID.
FpgaId []byte `protobuf:"bytes,3,opt,name=fpga_id,json=fpgaId,proto3" json:"fpga_id,omitempty"`
}
func (x *EncryptedFineTimestamp) Reset() {
*x = EncryptedFineTimestamp{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *EncryptedFineTimestamp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*EncryptedFineTimestamp) ProtoMessage() {}
func (x *EncryptedFineTimestamp) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use EncryptedFineTimestamp.ProtoReflect.Descriptor instead.
func (*EncryptedFineTimestamp) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{6}
}
func (x *EncryptedFineTimestamp) GetAesKeyIndex() uint32 {
if x != nil {
return x.AesKeyIndex
}
return 0
}
func (x *EncryptedFineTimestamp) GetEncryptedNs() []byte {
if x != nil {
return x.EncryptedNs
}
return nil
}
func (x *EncryptedFineTimestamp) GetFpgaId() []byte {
if x != nil {
return x.FpgaId
}
return nil
}
type PlainFineTimestamp struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Full timestamp.
Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"`
}
func (x *PlainFineTimestamp) Reset() {
*x = PlainFineTimestamp{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *PlainFineTimestamp) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PlainFineTimestamp) ProtoMessage() {}
func (x *PlainFineTimestamp) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PlainFineTimestamp.ProtoReflect.Descriptor instead.
func (*PlainFineTimestamp) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{7}
}
func (x *PlainFineTimestamp) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
type GatewayStats struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
// Deprecated: use gateway_id.
GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
// Gateway ID.
GatewayId string `protobuf:"bytes,17,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// Gateway time.
Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"`
// Gateway location.
Location *common.Location `protobuf:"bytes,3,opt,name=location,proto3" json:"location,omitempty"`
// Gateway configuration version (this maps to the config_version sent
// by ChirpStack to the gateway).
ConfigVersion string `protobuf:"bytes,4,opt,name=config_version,json=configVersion,proto3" json:"config_version,omitempty"`
// Number of radio packets received.
RxPacketsReceived uint32 `protobuf:"varint,5,opt,name=rx_packets_received,json=rxPacketsReceived,proto3" json:"rx_packets_received,omitempty"`
// Number of radio packets received with valid PHY CRC.
RxPacketsReceivedOk uint32 `protobuf:"varint,6,opt,name=rx_packets_received_ok,json=rxPacketsReceivedOk,proto3" json:"rx_packets_received_ok,omitempty"`
// Number of downlink packets received for transmission.
TxPacketsReceived uint32 `protobuf:"varint,7,opt,name=tx_packets_received,json=txPacketsReceived,proto3" json:"tx_packets_received,omitempty"`
// Number of downlink packets emitted.
TxPacketsEmitted uint32 `protobuf:"varint,8,opt,name=tx_packets_emitted,json=txPacketsEmitted,proto3" json:"tx_packets_emitted,omitempty"`
// Additional gateway meta-data.
Metadata map[string]string `protobuf:"bytes,10,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// Tx packets per frequency.
TxPacketsPerFrequency map[uint32]uint32 `protobuf:"bytes,12,rep,name=tx_packets_per_frequency,json=txPacketsPerFrequency,proto3" json:"tx_packets_per_frequency,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
// Rx packets per frequency.
RxPacketsPerFrequency map[uint32]uint32 `protobuf:"bytes,13,rep,name=rx_packets_per_frequency,json=rxPacketsPerFrequency,proto3" json:"rx_packets_per_frequency,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
// Tx packets per modulation parameters.
TxPacketsPerModulation []*PerModulationCount `protobuf:"bytes,14,rep,name=tx_packets_per_modulation,json=txPacketsPerModulation,proto3" json:"tx_packets_per_modulation,omitempty"`
// Rx packets per modulation parameters.
RxPacketsPerModulation []*PerModulationCount `protobuf:"bytes,15,rep,name=rx_packets_per_modulation,json=rxPacketsPerModulation,proto3" json:"rx_packets_per_modulation,omitempty"`
// Tx packets per status.
TxPacketsPerStatus map[string]uint32 `protobuf:"bytes,16,rep,name=tx_packets_per_status,json=txPacketsPerStatus,proto3" json:"tx_packets_per_status,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"`
}
func (x *GatewayStats) Reset() {
*x = GatewayStats{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GatewayStats) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GatewayStats) ProtoMessage() {}
func (x *GatewayStats) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GatewayStats.ProtoReflect.Descriptor instead.
func (*GatewayStats) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{8}
}
func (x *GatewayStats) GetGatewayIdLegacy() []byte {
if x != nil {
return x.GatewayIdLegacy
}
return nil
}
func (x *GatewayStats) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *GatewayStats) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
func (x *GatewayStats) GetLocation() *common.Location {
if x != nil {
return x.Location
}
return nil
}
func (x *GatewayStats) GetConfigVersion() string {
if x != nil {
return x.ConfigVersion
}
return ""
}
func (x *GatewayStats) GetRxPacketsReceived() uint32 {
if x != nil {
return x.RxPacketsReceived
}
return 0
}
func (x *GatewayStats) GetRxPacketsReceivedOk() uint32 {
if x != nil {
return x.RxPacketsReceivedOk
}
return 0
}
func (x *GatewayStats) GetTxPacketsReceived() uint32 {
if x != nil {
return x.TxPacketsReceived
}
return 0
}
func (x *GatewayStats) GetTxPacketsEmitted() uint32 {
if x != nil {
return x.TxPacketsEmitted
}
return 0
}
func (x *GatewayStats) GetMetadata() map[string]string {
if x != nil {
return x.Metadata
}
return nil
}
func (x *GatewayStats) GetTxPacketsPerFrequency() map[uint32]uint32 {
if x != nil {
return x.TxPacketsPerFrequency
}
return nil
}
func (x *GatewayStats) GetRxPacketsPerFrequency() map[uint32]uint32 {
if x != nil {
return x.RxPacketsPerFrequency
}
return nil
}
func (x *GatewayStats) GetTxPacketsPerModulation() []*PerModulationCount {
if x != nil {
return x.TxPacketsPerModulation
}
return nil
}
func (x *GatewayStats) GetRxPacketsPerModulation() []*PerModulationCount {
if x != nil {
return x.RxPacketsPerModulation
}
return nil
}
func (x *GatewayStats) GetTxPacketsPerStatus() map[string]uint32 {
if x != nil {
return x.TxPacketsPerStatus
}
return nil
}
type PerModulationCount struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Modulation.
Modulation *Modulation `protobuf:"bytes,1,opt,name=modulation,proto3" json:"modulation,omitempty"`
// Count.
Count uint32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"`
}
func (x *PerModulationCount) Reset() {
*x = PerModulationCount{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *PerModulationCount) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*PerModulationCount) ProtoMessage() {}
func (x *PerModulationCount) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use PerModulationCount.ProtoReflect.Descriptor instead.
func (*PerModulationCount) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{9}
}
func (x *PerModulationCount) GetModulation() *Modulation {
if x != nil {
return x.Modulation
}
return nil
}
func (x *PerModulationCount) GetCount() uint32 {
if x != nil {
return x.Count
}
return 0
}
type UplinkRxInfoLegacy struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// RX time (only set when the gateway has a GPS module).
Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"`
// RX time since GPS epoch (only set when the gateway has a GPS module).
TimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,3,opt,name=time_since_gps_epoch,json=timeSinceGpsEpoch,proto3" json:"time_since_gps_epoch,omitempty"`
// RSSI.
Rssi int32 `protobuf:"varint,5,opt,name=rssi,proto3" json:"rssi,omitempty"`
// LoRa SNR.
LoraSnr float64 `protobuf:"fixed64,6,opt,name=lora_snr,json=loraSnr,proto3" json:"lora_snr,omitempty"`
// Channel.
Channel uint32 `protobuf:"varint,7,opt,name=channel,proto3" json:"channel,omitempty"`
// RF Chain.
RfChain uint32 `protobuf:"varint,8,opt,name=rf_chain,json=rfChain,proto3" json:"rf_chain,omitempty"`
// Board.
Board uint32 `protobuf:"varint,9,opt,name=board,proto3" json:"board,omitempty"`
// Antenna.
Antenna uint32 `protobuf:"varint,10,opt,name=antenna,proto3" json:"antenna,omitempty"`
// Location.
Location *common.Location `protobuf:"bytes,11,opt,name=location,proto3" json:"location,omitempty"`
// Fine-timestamp type.
FineTimestampType FineTimestampType `protobuf:"varint,12,opt,name=fine_timestamp_type,json=fineTimestampType,proto3,enum=gw.FineTimestampType" json:"fine_timestamp_type,omitempty"`
// Fine-timestamp data.
//
// Types that are assignable to FineTimestamp:
//
// *UplinkRxInfoLegacy_EncryptedFineTimestamp
// *UplinkRxInfoLegacy_PlainFineTimestamp
FineTimestamp isUplinkRxInfoLegacy_FineTimestamp `protobuf_oneof:"fine_timestamp"`
// Gateway specific context.
Context []byte `protobuf:"bytes,15,opt,name=context,proto3" json:"context,omitempty"`
// Uplink ID (UUID bytes).
// Unique and random ID which can be used to correlate the uplink across
// multiple logs.
UplinkId []byte `protobuf:"bytes,16,opt,name=uplink_id,json=uplinkId,proto3" json:"uplink_id,omitempty"`
// CRC status.
CrcStatus CRCStatus `protobuf:"varint,17,opt,name=crc_status,json=crcStatus,proto3,enum=gw.CRCStatus" json:"crc_status,omitempty"`
// Optional meta-data map.
Metadata map[string]string `protobuf:"bytes,18,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
func (x *UplinkRxInfoLegacy) Reset() {
*x = UplinkRxInfoLegacy{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UplinkRxInfoLegacy) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UplinkRxInfoLegacy) ProtoMessage() {}
func (x *UplinkRxInfoLegacy) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UplinkRxInfoLegacy.ProtoReflect.Descriptor instead.
func (*UplinkRxInfoLegacy) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{10}
}
func (x *UplinkRxInfoLegacy) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
func (x *UplinkRxInfoLegacy) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
func (x *UplinkRxInfoLegacy) GetTimeSinceGpsEpoch() *durationpb.Duration {
if x != nil {
return x.TimeSinceGpsEpoch
}
return nil
}
func (x *UplinkRxInfoLegacy) GetRssi() int32 {
if x != nil {
return x.Rssi
}
return 0
}
func (x *UplinkRxInfoLegacy) GetLoraSnr() float64 {
if x != nil {
return x.LoraSnr
}
return 0
}
func (x *UplinkRxInfoLegacy) GetChannel() uint32 {
if x != nil {
return x.Channel
}
return 0
}
func (x *UplinkRxInfoLegacy) GetRfChain() uint32 {
if x != nil {
return x.RfChain
}
return 0
}
func (x *UplinkRxInfoLegacy) GetBoard() uint32 {
if x != nil {
return x.Board
}
return 0
}
func (x *UplinkRxInfoLegacy) GetAntenna() uint32 {
if x != nil {
return x.Antenna
}
return 0
}
func (x *UplinkRxInfoLegacy) GetLocation() *common.Location {
if x != nil {
return x.Location
}
return nil
}
func (x *UplinkRxInfoLegacy) GetFineTimestampType() FineTimestampType {
if x != nil {
return x.FineTimestampType
}
return FineTimestampType_NONE
}
func (m *UplinkRxInfoLegacy) GetFineTimestamp() isUplinkRxInfoLegacy_FineTimestamp {
if m != nil {
return m.FineTimestamp
}
return nil
}
func (x *UplinkRxInfoLegacy) GetEncryptedFineTimestamp() *EncryptedFineTimestamp {
if x, ok := x.GetFineTimestamp().(*UplinkRxInfoLegacy_EncryptedFineTimestamp); ok {
return x.EncryptedFineTimestamp
}
return nil
}
func (x *UplinkRxInfoLegacy) GetPlainFineTimestamp() *PlainFineTimestamp {
if x, ok := x.GetFineTimestamp().(*UplinkRxInfoLegacy_PlainFineTimestamp); ok {
return x.PlainFineTimestamp
}
return nil
}
func (x *UplinkRxInfoLegacy) GetContext() []byte {
if x != nil {
return x.Context
}
return nil
}
func (x *UplinkRxInfoLegacy) GetUplinkId() []byte {
if x != nil {
return x.UplinkId
}
return nil
}
func (x *UplinkRxInfoLegacy) GetCrcStatus() CRCStatus {
if x != nil {
return x.CrcStatus
}
return CRCStatus_NO_CRC
}
func (x *UplinkRxInfoLegacy) GetMetadata() map[string]string {
if x != nil {
return x.Metadata
}
return nil
}
type isUplinkRxInfoLegacy_FineTimestamp interface {
isUplinkRxInfoLegacy_FineTimestamp()
}
type UplinkRxInfoLegacy_EncryptedFineTimestamp struct {
// Encrypted fine-timestamp data.
EncryptedFineTimestamp *EncryptedFineTimestamp `protobuf:"bytes,13,opt,name=encrypted_fine_timestamp,json=encryptedFineTimestamp,proto3,oneof"`
}
type UplinkRxInfoLegacy_PlainFineTimestamp struct {
// Plain fine-timestamp data.
PlainFineTimestamp *PlainFineTimestamp `protobuf:"bytes,14,opt,name=plain_fine_timestamp,json=plainFineTimestamp,proto3,oneof"`
}
func (*UplinkRxInfoLegacy_EncryptedFineTimestamp) isUplinkRxInfoLegacy_FineTimestamp() {}
func (*UplinkRxInfoLegacy_PlainFineTimestamp) isUplinkRxInfoLegacy_FineTimestamp() {}
type UplinkRxInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
GatewayId string `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// Uplink ID.
UplinkId uint32 `protobuf:"varint,2,opt,name=uplink_id,json=uplinkId,proto3" json:"uplink_id,omitempty"`
// RX time (only set when the gateway has a GPS module).
Time *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=time,proto3" json:"time,omitempty"`
// RX time since GPS epoch (only set when the gateway has a GPS module).
TimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,4,opt,name=time_since_gps_epoch,json=timeSinceGpsEpoch,proto3" json:"time_since_gps_epoch,omitempty"`
// Fine-timestamp.
// This timestamp can be used for TDOA based geolocation.
FineTimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,5,opt,name=fine_time_since_gps_epoch,json=fineTimeSinceGpsEpoch,proto3" json:"fine_time_since_gps_epoch,omitempty"`
// RSSI.
Rssi int32 `protobuf:"varint,6,opt,name=rssi,proto3" json:"rssi,omitempty"`
// SNR.
// Note: only available for LoRa modulation.
Snr float32 `protobuf:"fixed32,7,opt,name=snr,proto3" json:"snr,omitempty"`
// Channel.
Channel uint32 `protobuf:"varint,8,opt,name=channel,proto3" json:"channel,omitempty"`
// RF chain.
RfChain uint32 `protobuf:"varint,9,opt,name=rf_chain,json=rfChain,proto3" json:"rf_chain,omitempty"`
// Board.
Board uint32 `protobuf:"varint,10,opt,name=board,proto3" json:"board,omitempty"`
// Antenna.
Antenna uint32 `protobuf:"varint,11,opt,name=antenna,proto3" json:"antenna,omitempty"`
// Location.
Location *common.Location `protobuf:"bytes,12,opt,name=location,proto3" json:"location,omitempty"`
// Gateway specific context.
// This value must be returned to the gateway on (Class-A) downlink.
Context []byte `protobuf:"bytes,13,opt,name=context,proto3" json:"context,omitempty"`
// Additional gateway meta-data.
Metadata map[string]string `protobuf:"bytes,15,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// CRC status.
CrcStatus CRCStatus `protobuf:"varint,16,opt,name=crc_status,json=crcStatus,proto3,enum=gw.CRCStatus" json:"crc_status,omitempty"`
}
func (x *UplinkRxInfo) Reset() {
*x = UplinkRxInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UplinkRxInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UplinkRxInfo) ProtoMessage() {}
func (x *UplinkRxInfo) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UplinkRxInfo.ProtoReflect.Descriptor instead.
func (*UplinkRxInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{11}
}
func (x *UplinkRxInfo) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *UplinkRxInfo) GetUplinkId() uint32 {
if x != nil {
return x.UplinkId
}
return 0
}
func (x *UplinkRxInfo) GetTime() *timestamppb.Timestamp {
if x != nil {
return x.Time
}
return nil
}
func (x *UplinkRxInfo) GetTimeSinceGpsEpoch() *durationpb.Duration {
if x != nil {
return x.TimeSinceGpsEpoch
}
return nil
}
func (x *UplinkRxInfo) GetFineTimeSinceGpsEpoch() *durationpb.Duration {
if x != nil {
return x.FineTimeSinceGpsEpoch
}
return nil
}
func (x *UplinkRxInfo) GetRssi() int32 {
if x != nil {
return x.Rssi
}
return 0
}
func (x *UplinkRxInfo) GetSnr() float32 {
if x != nil {
return x.Snr
}
return 0
}
func (x *UplinkRxInfo) GetChannel() uint32 {
if x != nil {
return x.Channel
}
return 0
}
func (x *UplinkRxInfo) GetRfChain() uint32 {
if x != nil {
return x.RfChain
}
return 0
}
func (x *UplinkRxInfo) GetBoard() uint32 {
if x != nil {
return x.Board
}
return 0
}
func (x *UplinkRxInfo) GetAntenna() uint32 {
if x != nil {
return x.Antenna
}
return 0
}
func (x *UplinkRxInfo) GetLocation() *common.Location {
if x != nil {
return x.Location
}
return nil
}
func (x *UplinkRxInfo) GetContext() []byte {
if x != nil {
return x.Context
}
return nil
}
func (x *UplinkRxInfo) GetMetadata() map[string]string {
if x != nil {
return x.Metadata
}
return nil
}
func (x *UplinkRxInfo) GetCrcStatus() CRCStatus {
if x != nil {
return x.CrcStatus
}
return CRCStatus_NO_CRC
}
type DownlinkTxInfoLegacy struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
// Deprecated: replaced by gateway_id in DownlinkFrame.
GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// TX frequency (in Hz).
Frequency uint32 `protobuf:"varint,5,opt,name=frequency,proto3" json:"frequency,omitempty"`
// TX power (in dBm).
Power int32 `protobuf:"varint,6,opt,name=power,proto3" json:"power,omitempty"`
// Modulation.
Modulation common.Modulation `protobuf:"varint,7,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"`
// Types that are assignable to ModulationInfo:
//
// *DownlinkTxInfoLegacy_LoraModulationInfo
// *DownlinkTxInfoLegacy_FskModulationInfo
ModulationInfo isDownlinkTxInfoLegacy_ModulationInfo `protobuf_oneof:"modulation_info"`
// The board identifier for emitting the frame.
Board uint32 `protobuf:"varint,10,opt,name=board,proto3" json:"board,omitempty"`
// The antenna identifier for emitting the frame.
Antenna uint32 `protobuf:"varint,11,opt,name=antenna,proto3" json:"antenna,omitempty"`
// Timing defines the downlink timing to use.
Timing DownlinkTiming `protobuf:"varint,12,opt,name=timing,proto3,enum=gw.DownlinkTiming" json:"timing,omitempty"`
// Types that are assignable to TimingInfo:
//
// *DownlinkTxInfoLegacy_ImmediatelyTimingInfo
// *DownlinkTxInfoLegacy_DelayTimingInfo
// *DownlinkTxInfoLegacy_GpsEpochTimingInfo
TimingInfo isDownlinkTxInfoLegacy_TimingInfo `protobuf_oneof:"timing_info"`
// Gateway specific context.
// In case of a Class-A downlink, this contains a copy of the uplink context.
Context []byte `protobuf:"bytes,16,opt,name=context,proto3" json:"context,omitempty"`
}
func (x *DownlinkTxInfoLegacy) Reset() {
*x = DownlinkTxInfoLegacy{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[12]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DownlinkTxInfoLegacy) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DownlinkTxInfoLegacy) ProtoMessage() {}
func (x *DownlinkTxInfoLegacy) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[12]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DownlinkTxInfoLegacy.ProtoReflect.Descriptor instead.
func (*DownlinkTxInfoLegacy) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{12}
}
func (x *DownlinkTxInfoLegacy) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
func (x *DownlinkTxInfoLegacy) GetFrequency() uint32 {
if x != nil {
return x.Frequency
}
return 0
}
func (x *DownlinkTxInfoLegacy) GetPower() int32 {
if x != nil {
return x.Power
}
return 0
}
func (x *DownlinkTxInfoLegacy) GetModulation() common.Modulation {
if x != nil {
return x.Modulation
}
return common.Modulation(0)
}
func (m *DownlinkTxInfoLegacy) GetModulationInfo() isDownlinkTxInfoLegacy_ModulationInfo {
if m != nil {
return m.ModulationInfo
}
return nil
}
func (x *DownlinkTxInfoLegacy) GetLoraModulationInfo() *LoraModulationInfo {
if x, ok := x.GetModulationInfo().(*DownlinkTxInfoLegacy_LoraModulationInfo); ok {
return x.LoraModulationInfo
}
return nil
}
func (x *DownlinkTxInfoLegacy) GetFskModulationInfo() *FskModulationInfo {
if x, ok := x.GetModulationInfo().(*DownlinkTxInfoLegacy_FskModulationInfo); ok {
return x.FskModulationInfo
}
return nil
}
func (x *DownlinkTxInfoLegacy) GetBoard() uint32 {
if x != nil {
return x.Board
}
return 0
}
func (x *DownlinkTxInfoLegacy) GetAntenna() uint32 {
if x != nil {
return x.Antenna
}
return 0
}
func (x *DownlinkTxInfoLegacy) GetTiming() DownlinkTiming {
if x != nil {
return x.Timing
}
return DownlinkTiming_IMMEDIATELY
}
func (m *DownlinkTxInfoLegacy) GetTimingInfo() isDownlinkTxInfoLegacy_TimingInfo {
if m != nil {
return m.TimingInfo
}
return nil
}
func (x *DownlinkTxInfoLegacy) GetImmediatelyTimingInfo() *ImmediatelyTimingInfo {
if x, ok := x.GetTimingInfo().(*DownlinkTxInfoLegacy_ImmediatelyTimingInfo); ok {
return x.ImmediatelyTimingInfo
}
return nil
}
func (x *DownlinkTxInfoLegacy) GetDelayTimingInfo() *DelayTimingInfo {
if x, ok := x.GetTimingInfo().(*DownlinkTxInfoLegacy_DelayTimingInfo); ok {
return x.DelayTimingInfo
}
return nil
}
func (x *DownlinkTxInfoLegacy) GetGpsEpochTimingInfo() *GPSEpochTimingInfo {
if x, ok := x.GetTimingInfo().(*DownlinkTxInfoLegacy_GpsEpochTimingInfo); ok {
return x.GpsEpochTimingInfo
}
return nil
}
func (x *DownlinkTxInfoLegacy) GetContext() []byte {
if x != nil {
return x.Context
}
return nil
}
type isDownlinkTxInfoLegacy_ModulationInfo interface {
isDownlinkTxInfoLegacy_ModulationInfo()
}
type DownlinkTxInfoLegacy_LoraModulationInfo struct {
// LoRa modulation information.
LoraModulationInfo *LoraModulationInfo `protobuf:"bytes,8,opt,name=lora_modulation_info,json=loraModulationInfo,proto3,oneof"`
}
type DownlinkTxInfoLegacy_FskModulationInfo struct {
// FSK modulation information.
FskModulationInfo *FskModulationInfo `protobuf:"bytes,9,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"`
}
func (*DownlinkTxInfoLegacy_LoraModulationInfo) isDownlinkTxInfoLegacy_ModulationInfo() {}
func (*DownlinkTxInfoLegacy_FskModulationInfo) isDownlinkTxInfoLegacy_ModulationInfo() {}
type isDownlinkTxInfoLegacy_TimingInfo interface {
isDownlinkTxInfoLegacy_TimingInfo()
}
type DownlinkTxInfoLegacy_ImmediatelyTimingInfo struct {
// Immediately timing information.
ImmediatelyTimingInfo *ImmediatelyTimingInfo `protobuf:"bytes,13,opt,name=immediately_timing_info,json=immediatelyTimingInfo,proto3,oneof"`
}
type DownlinkTxInfoLegacy_DelayTimingInfo struct {
// Context based delay timing information.
DelayTimingInfo *DelayTimingInfo `protobuf:"bytes,14,opt,name=delay_timing_info,json=delayTimingInfo,proto3,oneof"`
}
type DownlinkTxInfoLegacy_GpsEpochTimingInfo struct {
// GPS Epoch timing information.
GpsEpochTimingInfo *GPSEpochTimingInfo `protobuf:"bytes,15,opt,name=gps_epoch_timing_info,json=gpsEpochTimingInfo,proto3,oneof"`
}
func (*DownlinkTxInfoLegacy_ImmediatelyTimingInfo) isDownlinkTxInfoLegacy_TimingInfo() {}
func (*DownlinkTxInfoLegacy_DelayTimingInfo) isDownlinkTxInfoLegacy_TimingInfo() {}
func (*DownlinkTxInfoLegacy_GpsEpochTimingInfo) isDownlinkTxInfoLegacy_TimingInfo() {}
type DownlinkTxInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// TX frequency (in Hz).
Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
// TX power (in dBm).
Power int32 `protobuf:"varint,2,opt,name=power,proto3" json:"power,omitempty"`
// Modulation.
Modulation *Modulation `protobuf:"bytes,3,opt,name=modulation,proto3" json:"modulation,omitempty"`
// The board identifier for emitting the frame.
Board uint32 `protobuf:"varint,4,opt,name=board,proto3" json:"board,omitempty"`
// The antenna identifier for emitting the frame.
Antenna uint32 `protobuf:"varint,5,opt,name=antenna,proto3" json:"antenna,omitempty"`
// Timing.
Timing *Timing `protobuf:"bytes,6,opt,name=timing,proto3" json:"timing,omitempty"`
// Gateway specific context.
// In case of a Class-A downlink, this contains a copy of the uplink context.
Context []byte `protobuf:"bytes,7,opt,name=context,proto3" json:"context,omitempty"`
}
func (x *DownlinkTxInfo) Reset() {
*x = DownlinkTxInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[13]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DownlinkTxInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DownlinkTxInfo) ProtoMessage() {}
func (x *DownlinkTxInfo) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[13]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DownlinkTxInfo.ProtoReflect.Descriptor instead.
func (*DownlinkTxInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{13}
}
func (x *DownlinkTxInfo) GetFrequency() uint32 {
if x != nil {
return x.Frequency
}
return 0
}
func (x *DownlinkTxInfo) GetPower() int32 {
if x != nil {
return x.Power
}
return 0
}
func (x *DownlinkTxInfo) GetModulation() *Modulation {
if x != nil {
return x.Modulation
}
return nil
}
func (x *DownlinkTxInfo) GetBoard() uint32 {
if x != nil {
return x.Board
}
return 0
}
func (x *DownlinkTxInfo) GetAntenna() uint32 {
if x != nil {
return x.Antenna
}
return 0
}
func (x *DownlinkTxInfo) GetTiming() *Timing {
if x != nil {
return x.Timing
}
return nil
}
func (x *DownlinkTxInfo) GetContext() []byte {
if x != nil {
return x.Context
}
return nil
}
type Timing struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Types that are assignable to Parameters:
//
// *Timing_Immediately
// *Timing_Delay
// *Timing_GpsEpoch
Parameters isTiming_Parameters `protobuf_oneof:"parameters"`
}
func (x *Timing) Reset() {
*x = Timing{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[14]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *Timing) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*Timing) ProtoMessage() {}
func (x *Timing) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[14]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use Timing.ProtoReflect.Descriptor instead.
func (*Timing) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{14}
}
func (m *Timing) GetParameters() isTiming_Parameters {
if m != nil {
return m.Parameters
}
return nil
}
func (x *Timing) GetImmediately() *ImmediatelyTimingInfo {
if x, ok := x.GetParameters().(*Timing_Immediately); ok {
return x.Immediately
}
return nil
}
func (x *Timing) GetDelay() *DelayTimingInfo {
if x, ok := x.GetParameters().(*Timing_Delay); ok {
return x.Delay
}
return nil
}
func (x *Timing) GetGpsEpoch() *GPSEpochTimingInfo {
if x, ok := x.GetParameters().(*Timing_GpsEpoch); ok {
return x.GpsEpoch
}
return nil
}
type isTiming_Parameters interface {
isTiming_Parameters()
}
type Timing_Immediately struct {
// Immediately timing information.
Immediately *ImmediatelyTimingInfo `protobuf:"bytes,1,opt,name=immediately,proto3,oneof"`
}
type Timing_Delay struct {
// Context based delay timing information.
Delay *DelayTimingInfo `protobuf:"bytes,2,opt,name=delay,proto3,oneof"`
}
type Timing_GpsEpoch struct {
// GPS Epoch timing information.
GpsEpoch *GPSEpochTimingInfo `protobuf:"bytes,3,opt,name=gps_epoch,json=gpsEpoch,proto3,oneof"`
}
func (*Timing_Immediately) isTiming_Parameters() {}
func (*Timing_Delay) isTiming_Parameters() {}
func (*Timing_GpsEpoch) isTiming_Parameters() {}
type ImmediatelyTimingInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
}
func (x *ImmediatelyTimingInfo) Reset() {
*x = ImmediatelyTimingInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[15]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ImmediatelyTimingInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ImmediatelyTimingInfo) ProtoMessage() {}
func (x *ImmediatelyTimingInfo) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[15]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ImmediatelyTimingInfo.ProtoReflect.Descriptor instead.
func (*ImmediatelyTimingInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{15}
}
type DelayTimingInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Delay (duration).
// The delay will be added to the gateway internal timing, provided by the
// context object.
Delay *durationpb.Duration `protobuf:"bytes,1,opt,name=delay,proto3" json:"delay,omitempty"`
}
func (x *DelayTimingInfo) Reset() {
*x = DelayTimingInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[16]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DelayTimingInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DelayTimingInfo) ProtoMessage() {}
func (x *DelayTimingInfo) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[16]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DelayTimingInfo.ProtoReflect.Descriptor instead.
func (*DelayTimingInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{16}
}
func (x *DelayTimingInfo) GetDelay() *durationpb.Duration {
if x != nil {
return x.Delay
}
return nil
}
type GPSEpochTimingInfo struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Duration since GPS Epoch.
TimeSinceGpsEpoch *durationpb.Duration `protobuf:"bytes,1,opt,name=time_since_gps_epoch,json=timeSinceGpsEpoch,proto3" json:"time_since_gps_epoch,omitempty"`
}
func (x *GPSEpochTimingInfo) Reset() {
*x = GPSEpochTimingInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[17]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GPSEpochTimingInfo) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GPSEpochTimingInfo) ProtoMessage() {}
func (x *GPSEpochTimingInfo) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[17]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use GPSEpochTimingInfo.ProtoReflect.Descriptor instead.
func (*GPSEpochTimingInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{17}
}
func (x *GPSEpochTimingInfo) GetTimeSinceGpsEpoch() *durationpb.Duration {
if x != nil {
return x.TimeSinceGpsEpoch
}
return nil
}
type UplinkFrame struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// PHYPayload.
PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
// TX meta-data (deprecated).
TxInfoLegacy *UplinkTxInfoLegacy `protobuf:"bytes,2,opt,name=tx_info_legacy,json=txInfoLegacy,proto3" json:"tx_info_legacy,omitempty"`
// RX meta-data (deprecated).
RxInfoLegacy *UplinkRxInfoLegacy `protobuf:"bytes,3,opt,name=rx_info_legacy,json=rxInfoLegacy,proto3" json:"rx_info_legacy,omitempty"`
// Tx meta-data.
TxInfo *UplinkTxInfo `protobuf:"bytes,4,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
// Rx meta-data.
RxInfo *UplinkRxInfo `protobuf:"bytes,5,opt,name=rx_info,json=rxInfo,proto3" json:"rx_info,omitempty"`
}
func (x *UplinkFrame) Reset() {
*x = UplinkFrame{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[18]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UplinkFrame) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UplinkFrame) ProtoMessage() {}
func (x *UplinkFrame) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[18]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UplinkFrame.ProtoReflect.Descriptor instead.
func (*UplinkFrame) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{18}
}
func (x *UplinkFrame) GetPhyPayload() []byte {
if x != nil {
return x.PhyPayload
}
return nil
}
func (x *UplinkFrame) GetTxInfoLegacy() *UplinkTxInfoLegacy {
if x != nil {
return x.TxInfoLegacy
}
return nil
}
func (x *UplinkFrame) GetRxInfoLegacy() *UplinkRxInfoLegacy {
if x != nil {
return x.RxInfoLegacy
}
return nil
}
func (x *UplinkFrame) GetTxInfo() *UplinkTxInfo {
if x != nil {
return x.TxInfo
}
return nil
}
func (x *UplinkFrame) GetRxInfo() *UplinkRxInfo {
if x != nil {
return x.RxInfo
}
return nil
}
type UplinkFrameSet struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// PHYPayload.
PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
// TX meta-data.
TxInfo *UplinkTxInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
// RX meta-data set.
RxInfo []*UplinkRxInfo `protobuf:"bytes,3,rep,name=rx_info,json=rxInfo,proto3" json:"rx_info,omitempty"`
}
func (x *UplinkFrameSet) Reset() {
*x = UplinkFrameSet{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[19]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *UplinkFrameSet) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*UplinkFrameSet) ProtoMessage() {}
func (x *UplinkFrameSet) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[19]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use UplinkFrameSet.ProtoReflect.Descriptor instead.
func (*UplinkFrameSet) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{19}
}
func (x *UplinkFrameSet) GetPhyPayload() []byte {
if x != nil {
return x.PhyPayload
}
return nil
}
func (x *UplinkFrameSet) GetTxInfo() *UplinkTxInfo {
if x != nil {
return x.TxInfo
}
return nil
}
func (x *UplinkFrameSet) GetRxInfo() []*UplinkRxInfo {
if x != nil {
return x.RxInfo
}
return nil
}
type DownlinkFrame struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Downlink ID.
DownlinkId uint32 `protobuf:"varint,3,opt,name=downlink_id,json=downlinkId,proto3" json:"downlink_id,omitempty"`
// Downlink ID (UUID).
// Deprecated: use downlink_id.
DownlinkIdLegacy []byte `protobuf:"bytes,4,opt,name=downlink_id_legacy,json=downlinkIdLegacy,proto3" json:"downlink_id_legacy,omitempty"`
// Downlink frame items.
// This makes it possible to send multiple downlink opportunities to the
// gateway at once (e.g. RX1 and RX2 in LoRaWAN). The first item has the
// highest priority, the last the lowest. The gateway will emit at most
// one item.
Items []*DownlinkFrameItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"`
// Gateway ID.
// Deprecated: use gateway_id
GatewayIdLegacy []byte `protobuf:"bytes,6,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
// Gateway ID.
GatewayId string `protobuf:"bytes,7,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
}
func (x *DownlinkFrame) Reset() {
*x = DownlinkFrame{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[20]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DownlinkFrame) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DownlinkFrame) ProtoMessage() {}
func (x *DownlinkFrame) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[20]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DownlinkFrame.ProtoReflect.Descriptor instead.
func (*DownlinkFrame) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{20}
}
func (x *DownlinkFrame) GetDownlinkId() uint32 {
if x != nil {
return x.DownlinkId
}
return 0
}
func (x *DownlinkFrame) GetDownlinkIdLegacy() []byte {
if x != nil {
return x.DownlinkIdLegacy
}
return nil
}
func (x *DownlinkFrame) GetItems() []*DownlinkFrameItem {
if x != nil {
return x.Items
}
return nil
}
func (x *DownlinkFrame) GetGatewayIdLegacy() []byte {
if x != nil {
return x.GatewayIdLegacy
}
return nil
}
func (x *DownlinkFrame) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
type DownlinkFrameItem struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// PHYPayload.
PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
// TX meta-data (deprecated).
TxInfoLegacy *DownlinkTxInfoLegacy `protobuf:"bytes,2,opt,name=tx_info_legacy,json=txInfoLegacy,proto3" json:"tx_info_legacy,omitempty"`
// Tx meta-data.
TxInfo *DownlinkTxInfo `protobuf:"bytes,3,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
}
func (x *DownlinkFrameItem) Reset() {
*x = DownlinkFrameItem{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[21]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DownlinkFrameItem) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DownlinkFrameItem) ProtoMessage() {}
func (x *DownlinkFrameItem) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 DownlinkFrameItem.ProtoReflect.Descriptor instead.
func (*DownlinkFrameItem) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{21}
}
func (x *DownlinkFrameItem) GetPhyPayload() []byte {
if x != nil {
return x.PhyPayload
}
return nil
}
func (x *DownlinkFrameItem) GetTxInfoLegacy() *DownlinkTxInfoLegacy {
if x != nil {
return x.TxInfoLegacy
}
return nil
}
func (x *DownlinkFrameItem) GetTxInfo() *DownlinkTxInfo {
if x != nil {
return x.TxInfo
}
return nil
}
type DownlinkTxAck struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID (deprecated).
GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
// Gateway ID.
GatewayId string `protobuf:"bytes,6,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// Downlink ID.
DownlinkId uint32 `protobuf:"varint,2,opt,name=downlink_id,json=downlinkId,proto3" json:"downlink_id,omitempty"`
// Downlink ID (deprecated).
DownlinkIdLegacy []byte `protobuf:"bytes,4,opt,name=downlink_id_legacy,json=downlinkIdLegacy,proto3" json:"downlink_id_legacy,omitempty"`
// Downlink frame items.
// This list has the same length as the request and indicates which
// downlink frame has been emitted of the requested list (or why it failed).
// Note that at most one item has a positive acknowledgement.
Items []*DownlinkTxAckItem `protobuf:"bytes,5,rep,name=items,proto3" json:"items,omitempty"`
}
func (x *DownlinkTxAck) Reset() {
*x = DownlinkTxAck{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[22]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DownlinkTxAck) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DownlinkTxAck) ProtoMessage() {}
func (x *DownlinkTxAck) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_proto_msgTypes[22]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use DownlinkTxAck.ProtoReflect.Descriptor instead.
func (*DownlinkTxAck) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{22}
}
func (x *DownlinkTxAck) GetGatewayIdLegacy() []byte {
if x != nil {
return x.GatewayIdLegacy
}
return nil
}
func (x *DownlinkTxAck) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *DownlinkTxAck) GetDownlinkId() uint32 {
if x != nil {
return x.DownlinkId
}
return 0
}
func (x *DownlinkTxAck) GetDownlinkIdLegacy() []byte {
if x != nil {
return x.DownlinkIdLegacy
}
return nil
}
func (x *DownlinkTxAck) GetItems() []*DownlinkTxAckItem {
if x != nil {
return x.Items
}
return nil
}
type DownlinkTxAckItem struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// The Ack status of this item.
Status TxAckStatus `protobuf:"varint,1,opt,name=status,proto3,enum=gw.TxAckStatus" json:"status,omitempty"`
}
func (x *DownlinkTxAckItem) Reset() {
*x = DownlinkTxAckItem{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[23]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *DownlinkTxAckItem) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*DownlinkTxAckItem) ProtoMessage() {}
func (x *DownlinkTxAckItem) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 DownlinkTxAckItem.ProtoReflect.Descriptor instead.
func (*DownlinkTxAckItem) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{23}
}
func (x *DownlinkTxAckItem) GetStatus() TxAckStatus {
if x != nil {
return x.Status
}
return TxAckStatus_IGNORED
}
type GatewayConfiguration struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
// Deprecated: use gateway_id.
GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
// Gateway ID.
GatewayId string `protobuf:"bytes,5,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// Configuration version.
Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"`
// Channels.
Channels []*ChannelConfiguration `protobuf:"bytes,3,rep,name=channels,proto3" json:"channels,omitempty"`
// Stats interval.
StatsInterval *durationpb.Duration `protobuf:"bytes,4,opt,name=stats_interval,json=statsInterval,proto3" json:"stats_interval,omitempty"`
}
func (x *GatewayConfiguration) Reset() {
*x = GatewayConfiguration{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[24]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GatewayConfiguration) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GatewayConfiguration) ProtoMessage() {}
func (x *GatewayConfiguration) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 GatewayConfiguration.ProtoReflect.Descriptor instead.
func (*GatewayConfiguration) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{24}
}
func (x *GatewayConfiguration) GetGatewayIdLegacy() []byte {
if x != nil {
return x.GatewayIdLegacy
}
return nil
}
func (x *GatewayConfiguration) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *GatewayConfiguration) GetVersion() string {
if x != nil {
return x.Version
}
return ""
}
func (x *GatewayConfiguration) GetChannels() []*ChannelConfiguration {
if x != nil {
return x.Channels
}
return nil
}
func (x *GatewayConfiguration) GetStatsInterval() *durationpb.Duration {
if x != nil {
return x.StatsInterval
}
return nil
}
type ChannelConfiguration struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Frequency (Hz).
Frequency uint32 `protobuf:"varint,1,opt,name=frequency,proto3" json:"frequency,omitempty"`
// Modulation (deprecated).
ModulationLegacy common.Modulation `protobuf:"varint,2,opt,name=modulation_legacy,json=modulationLegacy,proto3,enum=common.Modulation" json:"modulation_legacy,omitempty"`
// Types that are assignable to ModulationConfig:
//
// *ChannelConfiguration_LoraModulationConfig
// *ChannelConfiguration_FskModulationConfig
ModulationConfig isChannelConfiguration_ModulationConfig `protobuf_oneof:"modulation_config"`
// Board index.
Board uint32 `protobuf:"varint,5,opt,name=board,proto3" json:"board,omitempty"`
// Demodulator index (of the given board).
Demodulator uint32 `protobuf:"varint,6,opt,name=demodulator,proto3" json:"demodulator,omitempty"`
}
func (x *ChannelConfiguration) Reset() {
*x = ChannelConfiguration{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[25]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ChannelConfiguration) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ChannelConfiguration) ProtoMessage() {}
func (x *ChannelConfiguration) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 ChannelConfiguration.ProtoReflect.Descriptor instead.
func (*ChannelConfiguration) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{25}
}
func (x *ChannelConfiguration) GetFrequency() uint32 {
if x != nil {
return x.Frequency
}
return 0
}
func (x *ChannelConfiguration) GetModulationLegacy() common.Modulation {
if x != nil {
return x.ModulationLegacy
}
return common.Modulation(0)
}
func (m *ChannelConfiguration) GetModulationConfig() isChannelConfiguration_ModulationConfig {
if m != nil {
return m.ModulationConfig
}
return nil
}
func (x *ChannelConfiguration) GetLoraModulationConfig() *LoraModulationConfig {
if x, ok := x.GetModulationConfig().(*ChannelConfiguration_LoraModulationConfig); ok {
return x.LoraModulationConfig
}
return nil
}
func (x *ChannelConfiguration) GetFskModulationConfig() *FskModulationConfig {
if x, ok := x.GetModulationConfig().(*ChannelConfiguration_FskModulationConfig); ok {
return x.FskModulationConfig
}
return nil
}
func (x *ChannelConfiguration) GetBoard() uint32 {
if x != nil {
return x.Board
}
return 0
}
func (x *ChannelConfiguration) GetDemodulator() uint32 {
if x != nil {
return x.Demodulator
}
return 0
}
type isChannelConfiguration_ModulationConfig interface {
isChannelConfiguration_ModulationConfig()
}
type ChannelConfiguration_LoraModulationConfig struct {
// LoRa modulation config.
LoraModulationConfig *LoraModulationConfig `protobuf:"bytes,3,opt,name=lora_modulation_config,json=loraModulationConfig,proto3,oneof"`
}
type ChannelConfiguration_FskModulationConfig struct {
// FSK modulation config.
FskModulationConfig *FskModulationConfig `protobuf:"bytes,4,opt,name=fsk_modulation_config,json=fskModulationConfig,proto3,oneof"`
}
func (*ChannelConfiguration_LoraModulationConfig) isChannelConfiguration_ModulationConfig() {}
func (*ChannelConfiguration_FskModulationConfig) isChannelConfiguration_ModulationConfig() {}
type LoraModulationConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Bandwidth (kHz).
// Deprecated: use bandwidth.
BandwidthLegacy uint32 `protobuf:"varint,1,opt,name=bandwidth_legacy,json=bandwidthLegacy,proto3" json:"bandwidth_legacy,omitempty"`
// Bandwidth (Hz).
Bandwidth uint32 `protobuf:"varint,3,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
// Spreading-factors.
SpreadingFactors []uint32 `protobuf:"varint,2,rep,packed,name=spreading_factors,json=spreadingFactors,proto3" json:"spreading_factors,omitempty"`
}
func (x *LoraModulationConfig) Reset() {
*x = LoraModulationConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[26]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *LoraModulationConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*LoraModulationConfig) ProtoMessage() {}
func (x *LoraModulationConfig) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 LoraModulationConfig.ProtoReflect.Descriptor instead.
func (*LoraModulationConfig) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{26}
}
func (x *LoraModulationConfig) GetBandwidthLegacy() uint32 {
if x != nil {
return x.BandwidthLegacy
}
return 0
}
func (x *LoraModulationConfig) GetBandwidth() uint32 {
if x != nil {
return x.Bandwidth
}
return 0
}
func (x *LoraModulationConfig) GetSpreadingFactors() []uint32 {
if x != nil {
return x.SpreadingFactors
}
return nil
}
type FskModulationConfig struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Bandwidth (kHz).
// Deprecated: use bandwidth.
BandwidthLegacy uint32 `protobuf:"varint,1,opt,name=bandwidth_legacy,json=bandwidthLegacy,proto3" json:"bandwidth_legacy,omitempty"`
// Bandwidth (Hz).
Bandwidth uint32 `protobuf:"varint,3,opt,name=bandwidth,proto3" json:"bandwidth,omitempty"`
// Bitrate.
Bitrate uint32 `protobuf:"varint,2,opt,name=bitrate,proto3" json:"bitrate,omitempty"`
}
func (x *FskModulationConfig) Reset() {
*x = FskModulationConfig{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[27]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *FskModulationConfig) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*FskModulationConfig) ProtoMessage() {}
func (x *FskModulationConfig) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 FskModulationConfig.ProtoReflect.Descriptor instead.
func (*FskModulationConfig) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{27}
}
func (x *FskModulationConfig) GetBandwidthLegacy() uint32 {
if x != nil {
return x.BandwidthLegacy
}
return 0
}
func (x *FskModulationConfig) GetBandwidth() uint32 {
if x != nil {
return x.Bandwidth
}
return 0
}
func (x *FskModulationConfig) GetBitrate() uint32 {
if x != nil {
return x.Bitrate
}
return 0
}
type GatewayCommandExecRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
// Deprecated: use gateway_id.
GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
// Gateway ID.
GatewayId string `protobuf:"bytes,6,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// Command to execute.
// This command must be pre-configured in the LoRa Gateway Bridge
// configuration.
Command string `protobuf:"bytes,2,opt,name=command,proto3" json:"command,omitempty"`
// Execution request ID.
// The same will be returned when the execution of the command has
// completed.
ExecId uint32 `protobuf:"varint,7,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
// Standard input.
Stdin []byte `protobuf:"bytes,4,opt,name=stdin,proto3" json:"stdin,omitempty"`
// Environment variables.
Environment map[string]string `protobuf:"bytes,5,rep,name=environment,proto3" json:"environment,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
}
func (x *GatewayCommandExecRequest) Reset() {
*x = GatewayCommandExecRequest{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[28]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GatewayCommandExecRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GatewayCommandExecRequest) ProtoMessage() {}
func (x *GatewayCommandExecRequest) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 GatewayCommandExecRequest.ProtoReflect.Descriptor instead.
func (*GatewayCommandExecRequest) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{28}
}
func (x *GatewayCommandExecRequest) GetGatewayIdLegacy() []byte {
if x != nil {
return x.GatewayIdLegacy
}
return nil
}
func (x *GatewayCommandExecRequest) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *GatewayCommandExecRequest) GetCommand() string {
if x != nil {
return x.Command
}
return ""
}
func (x *GatewayCommandExecRequest) GetExecId() uint32 {
if x != nil {
return x.ExecId
}
return 0
}
func (x *GatewayCommandExecRequest) GetStdin() []byte {
if x != nil {
return x.Stdin
}
return nil
}
func (x *GatewayCommandExecRequest) GetEnvironment() map[string]string {
if x != nil {
return x.Environment
}
return nil
}
type GatewayCommandExecResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
// Deprecated: use gateway_id.
GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
// Gateway ID.
GatewayId string `protobuf:"bytes,6,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// Execution request ID.
ExecId uint32 `protobuf:"varint,7,opt,name=exec_id,json=execId,proto3" json:"exec_id,omitempty"`
// Standard output.
Stdout []byte `protobuf:"bytes,3,opt,name=stdout,proto3" json:"stdout,omitempty"`
// Standard error.
Stderr []byte `protobuf:"bytes,4,opt,name=stderr,proto3" json:"stderr,omitempty"`
// Error message.
Error string `protobuf:"bytes,5,opt,name=error,proto3" json:"error,omitempty"`
}
func (x *GatewayCommandExecResponse) Reset() {
*x = GatewayCommandExecResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[29]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *GatewayCommandExecResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*GatewayCommandExecResponse) ProtoMessage() {}
func (x *GatewayCommandExecResponse) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 GatewayCommandExecResponse.ProtoReflect.Descriptor instead.
func (*GatewayCommandExecResponse) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{29}
}
func (x *GatewayCommandExecResponse) GetGatewayIdLegacy() []byte {
if x != nil {
return x.GatewayIdLegacy
}
return nil
}
func (x *GatewayCommandExecResponse) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *GatewayCommandExecResponse) GetExecId() uint32 {
if x != nil {
return x.ExecId
}
return 0
}
func (x *GatewayCommandExecResponse) GetStdout() []byte {
if x != nil {
return x.Stdout
}
return nil
}
func (x *GatewayCommandExecResponse) GetStderr() []byte {
if x != nil {
return x.Stderr
}
return nil
}
func (x *GatewayCommandExecResponse) GetError() string {
if x != nil {
return x.Error
}
return ""
}
// RawPacketForwarderEvent contains a raw packet-forwarder event.
// It can be used to access packet-forwarder features that are not (fully)
// integrated with the ChirpStack Gateway Bridge.
type RawPacketForwarderEvent struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
// Deprecated: use gateway_id.
GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
// Gateway ID.
GatewayId string `protobuf:"bytes,4,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// Payload contains the raw payload.
Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
}
func (x *RawPacketForwarderEvent) Reset() {
*x = RawPacketForwarderEvent{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[30]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RawPacketForwarderEvent) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RawPacketForwarderEvent) ProtoMessage() {}
func (x *RawPacketForwarderEvent) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 RawPacketForwarderEvent.ProtoReflect.Descriptor instead.
func (*RawPacketForwarderEvent) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{30}
}
func (x *RawPacketForwarderEvent) GetGatewayIdLegacy() []byte {
if x != nil {
return x.GatewayIdLegacy
}
return nil
}
func (x *RawPacketForwarderEvent) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *RawPacketForwarderEvent) GetPayload() []byte {
if x != nil {
return x.Payload
}
return nil
}
// RawPacketForwarderEvent contains a raw packet-forwarder command.
// It can be used to access packet-forwarder features that are not (fully)
// integrated with the ChirpStack Gateway Bridge.
type RawPacketForwarderCommand struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
// Deprecated: use gateway_id.
GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
// Gateway ID.
GatewayId string `protobuf:"bytes,4,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
// Payload contains the raw payload.
Payload []byte `protobuf:"bytes,3,opt,name=payload,proto3" json:"payload,omitempty"`
}
func (x *RawPacketForwarderCommand) Reset() {
*x = RawPacketForwarderCommand{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[31]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *RawPacketForwarderCommand) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RawPacketForwarderCommand) ProtoMessage() {}
func (x *RawPacketForwarderCommand) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 RawPacketForwarderCommand.ProtoReflect.Descriptor instead.
func (*RawPacketForwarderCommand) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{31}
}
func (x *RawPacketForwarderCommand) GetGatewayIdLegacy() []byte {
if x != nil {
return x.GatewayIdLegacy
}
return nil
}
func (x *RawPacketForwarderCommand) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *RawPacketForwarderCommand) GetPayload() []byte {
if x != nil {
return x.Payload
}
return nil
}
// ConnState contains the connection state of a gateway.
type ConnState struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
// Gateway ID.
// Deprecated: use gateway_id.
GatewayIdLegacy []byte `protobuf:"bytes,1,opt,name=gateway_id_legacy,json=gatewayIdLegacy,proto3" json:"gateway_id_legacy,omitempty"`
// Gateway ID.
GatewayId string `protobuf:"bytes,3,opt,name=gateway_id,json=gatewayId,proto3" json:"gateway_id,omitempty"`
State ConnState_State `protobuf:"varint,2,opt,name=state,proto3,enum=gw.ConnState_State" json:"state,omitempty"`
}
func (x *ConnState) Reset() {
*x = ConnState{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[32]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ConnState) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ConnState) ProtoMessage() {}
func (x *ConnState) ProtoReflect() protoreflect.Message {
mi := &file_gw_gw_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 ConnState.ProtoReflect.Descriptor instead.
func (*ConnState) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{32}
}
func (x *ConnState) GetGatewayIdLegacy() []byte {
if x != nil {
return x.GatewayIdLegacy
}
return nil
}
func (x *ConnState) GetGatewayId() string {
if x != nil {
return x.GatewayId
}
return ""
}
func (x *ConnState) GetState() ConnState_State {
if x != nil {
return x.State
}
return ConnState_OFFLINE
}
var File_gw_gw_proto protoreflect.FileDescriptor
var file_gw_gw_proto_rawDesc = []byte{
0x0a, 0x0b, 0x67, 0x77, 0x2f, 0x67, 0x77, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x67,
0x77, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa8, 0x01, 0x0a, 0x0a, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x04, 0x6c, 0x6f, 0x72, 0x61, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75,
0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x04, 0x6c, 0x6f,
0x72, 0x61, 0x12, 0x29, 0x0a, 0x03, 0x66, 0x73, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x03, 0x66, 0x73, 0x6b, 0x12, 0x33, 0x0a,
0x07, 0x6c, 0x72, 0x5f, 0x66, 0x68, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18,
0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x72, 0x46, 0x68,
0x73, 0x73, 0x42, 0x0c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73,
0x22, 0xe1, 0x02, 0x0a, 0x12, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66,
0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75,
0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71,
0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x32, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
0x6f, 0x6e, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d,
0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x14, 0x6c, 0x6f, 0x72,
0x61, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66,
0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72,
0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48,
0x00, 0x52, 0x12, 0x6c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x47, 0x0a, 0x13, 0x66, 0x73, 0x6b, 0x5f, 0x6d, 0x6f, 0x64,
0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x04, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x11, 0x66, 0x73, 0x6b,
0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x51,
0x0a, 0x17, 0x6c, 0x72, 0x5f, 0x66, 0x68, 0x73, 0x73, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x18, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x14, 0x6c, 0x72, 0x46,
0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66,
0x6f, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
0x69, 0x6e, 0x66, 0x6f, 0x22, 0x5c, 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78,
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63,
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e,
0x63, 0x79, 0x12, 0x2e, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x6f, 0x64, 0x75,
0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x22, 0xe9, 0x01, 0x0a, 0x12, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e,
0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x61,
0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x70, 0x72, 0x65, 0x61,
0x64, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x0f, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x74,
0x6f, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f,
0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f,
0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x29, 0x0a, 0x09,
0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x0c, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x52, 0x08, 0x63,
0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x16, 0x70, 0x6f, 0x6c, 0x61, 0x72,
0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x15, 0x70, 0x6f, 0x6c, 0x61, 0x72, 0x69, 0x7a,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x60,
0x0a, 0x11, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49,
0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x13, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79,
0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x12, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x44, 0x65, 0x76, 0x69, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x72, 0x61, 0x74, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x72, 0x61, 0x74, 0x65,
0x22, 0xc2, 0x01, 0x0a, 0x14, 0x4c, 0x72, 0x46, 0x68, 0x73, 0x73, 0x4d, 0x6f, 0x64, 0x75, 0x6c,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x36, 0x0a, 0x17, 0x6f, 0x70, 0x65,
0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x77,
0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x15, 0x6f, 0x70, 0x65, 0x72,
0x61, 0x74, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x57, 0x69, 0x64, 0x74,
0x68, 0x12, 0x28, 0x0a, 0x10, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x5f, 0x6c,
0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x64,
0x65, 0x52, 0x61, 0x74, 0x65, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x29, 0x0a, 0x09, 0x63,
0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0c,
0x2e, 0x67, 0x77, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x52, 0x08, 0x63, 0x6f,
0x64, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x72, 0x69, 0x64, 0x5f, 0x73,
0x74, 0x65, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x67, 0x72, 0x69, 0x64,
0x53, 0x74, 0x65, 0x70, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74,
0x65, 0x64, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12,
0x22, 0x0a, 0x0d, 0x61, 0x65, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, 0x65, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x6e,
0x64, 0x65, 0x78, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64,
0x5f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x65, 0x6e, 0x63, 0x72, 0x79,
0x70, 0x74, 0x65, 0x64, 0x4e, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x70, 0x67, 0x61, 0x5f, 0x69,
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x70, 0x67, 0x61, 0x49, 0x64, 0x22,
0x44, 0x0a, 0x12, 0x50, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65,
0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2e, 0x0a, 0x04, 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,
0x04, 0x74, 0x69, 0x6d, 0x65, 0x22, 0xc4, 0x09, 0x0a, 0x0c, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61,
0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64,
0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49,
0x64, 0x12, 0x2e, 0x0a, 0x04, 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, 0x04, 0x74, 0x69, 0x6d,
0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56,
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63,
0x6b, 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x05, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x11, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x52, 0x65,
0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x16, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63,
0x6b, 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x5f, 0x6f, 0x6b,
0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x13, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74,
0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x4f, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x74,
0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76,
0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b,
0x65, 0x74, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x74,
0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x65, 0x6d, 0x69, 0x74, 0x74, 0x65,
0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65,
0x74, 0x73, 0x45, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x77,
0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x4d, 0x65,
0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74,
0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x64, 0x0a, 0x18, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b,
0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63,
0x79, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74,
0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b,
0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50,
0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x64, 0x0a, 0x18, 0x72,
0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x66, 0x72,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e,
0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e,
0x52, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71,
0x75, 0x65, 0x6e, 0x63, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x72, 0x78, 0x50, 0x61,
0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63,
0x79, 0x12, 0x51, 0x0a, 0x19, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f,
0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64,
0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x16, 0x74, 0x78,
0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x51, 0x0a, 0x19, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65,
0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x50, 0x65, 0x72,
0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x52,
0x16, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64,
0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x15, 0x74, 0x78, 0x5f, 0x70, 0x61,
0x63, 0x6b, 0x65, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
0x18, 0x10, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65,
0x77, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x2e, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65,
0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x52, 0x12, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74,
0x61, 0x74, 0x75, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
0x01, 0x1a, 0x48, 0x0a, 0x1a, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65,
0x72, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 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, 0x48, 0x0a, 0x1a, 0x52,
0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x50, 0x65, 0x72, 0x46, 0x72, 0x65, 0x71, 0x75,
0x65, 0x6e, 0x63, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 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, 0x45, 0x0a, 0x17, 0x54, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65,
0x74, 0x73, 0x50, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 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, 0x22, 0x5a, 0x0a, 0x12,
0x50, 0x65, 0x72, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x75,
0x6e, 0x74, 0x12, 0x2e, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x6f, 0x64, 0x75,
0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xd2, 0x06, 0x0a, 0x12, 0x55, 0x70, 0x6c,
0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12,
0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x2e,
0x0a, 0x04, 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, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x4a,
0x0a, 0x14, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73,
0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e,
0x63, 0x65, 0x47, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x72, 0x73,
0x73, 0x69, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x73, 0x73, 0x69, 0x12, 0x19,
0x0a, 0x08, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x73, 0x6e, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01,
0x52, 0x07, 0x6c, 0x6f, 0x72, 0x61, 0x53, 0x6e, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61,
0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e,
0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x66, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18,
0x08, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x66, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x14,
0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62,
0x6f, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x2c,
0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x13,
0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x74,
0x79, 0x70, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46,
0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65,
0x52, 0x11, 0x66, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54,
0x79, 0x70, 0x65, 0x12, 0x56, 0x0a, 0x18, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64,
0x5f, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x77, 0x2e, 0x45, 0x6e, 0x63, 0x72, 0x79,
0x70, 0x74, 0x65, 0x64, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
0x70, 0x48, 0x00, 0x52, 0x16, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x46, 0x69,
0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x4a, 0x0a, 0x14, 0x70,
0x6c, 0x61, 0x69, 0x6e, 0x5f, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
0x61, 0x6d, 0x70, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x50,
0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
0x70, 0x48, 0x00, 0x52, 0x12, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x46, 0x69, 0x6e, 0x65, 0x54, 0x69,
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65,
0x78, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78,
0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x10,
0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2c,
0x0a, 0x0a, 0x63, 0x72, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x11, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75,
0x73, 0x52, 0x09, 0x63, 0x72, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x40, 0x0a, 0x08,
0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24,
0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f,
0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x3b,
0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x66,
0x69, 0x6e, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x95, 0x05,
0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d,
0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x0a,
0x09, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x08, 0x75, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69,
0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x4a, 0x0a, 0x14, 0x74, 0x69,
0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f,
0x63, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x52, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x47, 0x70,
0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x53, 0x0a, 0x19, 0x66, 0x69, 0x6e, 0x65, 0x5f, 0x74,
0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70,
0x6f, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x66, 0x69, 0x6e, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x69,
0x6e, 0x63, 0x65, 0x47, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x72,
0x73, 0x73, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x72, 0x73, 0x73, 0x69, 0x12,
0x10, 0x0a, 0x03, 0x73, 0x6e, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, 0x03, 0x73, 0x6e,
0x72, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x72,
0x66, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72,
0x66, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18,
0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07,
0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61,
0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x2c, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
0x6e, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18,
0x0d, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3a,
0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b,
0x32, 0x1e, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e,
0x66, 0x6f, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2c, 0x0a, 0x0a, 0x63, 0x72,
0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d,
0x2e, 0x67, 0x77, 0x2e, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x63,
0x72, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x3b, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x61,
0x64, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaf, 0x05, 0x0a, 0x14, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69,
0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d,
0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0c, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x1c, 0x0a,
0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d,
0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70,
0x6f, 0x77, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65,
0x72, 0x12, 0x32, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x14, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x6d, 0x6f,
0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x08, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64,
0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x12, 0x6c,
0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66,
0x6f, 0x12, 0x47, 0x0a, 0x13, 0x66, 0x73, 0x6b, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15,
0x2e, 0x67, 0x77, 0x2e, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x11, 0x66, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75,
0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f,
0x61, 0x72, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64,
0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18, 0x0b, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x2a, 0x0a, 0x06, 0x74, 0x69,
0x6d, 0x69, 0x6e, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e,
0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x06,
0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x53, 0x0a, 0x17, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69,
0x61, 0x74, 0x65, 0x6c, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66,
0x6f, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x77, 0x2e, 0x49, 0x6d, 0x6d,
0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e,
0x66, 0x6f, 0x48, 0x01, 0x52, 0x15, 0x69, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c,
0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x41, 0x0a, 0x11, 0x64,
0x65, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x61,
0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x0f, 0x64,
0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4b,
0x0a, 0x15, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x69,
0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e,
0x67, 0x77, 0x2e, 0x47, 0x50, 0x53, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x69, 0x6e,
0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x01, 0x52, 0x12, 0x67, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63,
0x68, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63,
0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f,
0x6e, 0x74, 0x65, 0x78, 0x74, 0x42, 0x11, 0x0a, 0x0f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0x0d, 0x0a, 0x0b, 0x74, 0x69, 0x6d, 0x69,
0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0xe2, 0x01, 0x0a, 0x0e, 0x44, 0x6f, 0x77, 0x6e,
0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72,
0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66,
0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x6f, 0x77, 0x65,
0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x12, 0x2e,
0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x77, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x52, 0x0a, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14,
0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62,
0x6f, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x18,
0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x61, 0x6e, 0x74, 0x65, 0x6e, 0x6e, 0x61, 0x12, 0x22,
0x0a, 0x06, 0x74, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a,
0x2e, 0x67, 0x77, 0x2e, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x52, 0x06, 0x74, 0x69, 0x6d, 0x69,
0x6e, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x07, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0xb9, 0x01, 0x0a,
0x06, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x3d, 0x0a, 0x0b, 0x69, 0x6d, 0x6d, 0x65, 0x64,
0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
0x77, 0x2e, 0x49, 0x6d, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, 0x69, 0x6d,
0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x0b, 0x69, 0x6d, 0x6d, 0x65, 0x64,
0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79,
0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x05, 0x64, 0x65,
0x6c, 0x61, 0x79, 0x12, 0x35, 0x0a, 0x09, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70, 0x6f, 0x63, 0x68,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x50, 0x53, 0x45,
0x70, 0x6f, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00,
0x52, 0x08, 0x67, 0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x70, 0x61,
0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x17, 0x0a, 0x15, 0x49, 0x6d, 0x6d, 0x65,
0x64, 0x69, 0x61, 0x74, 0x65, 0x6c, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66,
0x6f, 0x22, 0x42, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67,
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05,
0x64, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x60, 0x0a, 0x12, 0x47, 0x50, 0x53, 0x45, 0x70, 0x6f, 0x63,
0x68, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4a, 0x0a, 0x14, 0x74,
0x69, 0x6d, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x67, 0x70, 0x73, 0x5f, 0x65, 0x70,
0x6f, 0x63, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x53, 0x69, 0x6e, 0x63, 0x65, 0x47,
0x70, 0x73, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x80, 0x02, 0x0a, 0x0b, 0x55, 0x70, 0x6c, 0x69,
0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x5f, 0x70,
0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x68,
0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x3c, 0x0a, 0x0e, 0x74, 0x78, 0x5f, 0x69,
0x6e, 0x66, 0x6f, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x16, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e,
0x66, 0x6f, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x0c, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f,
0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x72, 0x78, 0x5f, 0x69, 0x6e, 0x66,
0x6f, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f,
0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x0c, 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65,
0x67, 0x61, 0x63, 0x79, 0x12, 0x29, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e,
0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12,
0x29, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e,
0x66, 0x6f, 0x52, 0x06, 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x87, 0x01, 0x0a, 0x0e, 0x55,
0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x74, 0x12, 0x1f, 0x0a,
0x0b, 0x70, 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0c, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x29,
0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66,
0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x0a, 0x07, 0x72, 0x78, 0x5f,
0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e,
0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x52, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x72, 0x78,
0x49, 0x6e, 0x66, 0x6f, 0x22, 0xd6, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e,
0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69,
0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x6f, 0x77,
0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12, 0x2c, 0x0a, 0x12, 0x64, 0x6f, 0x77, 0x6e, 0x6c,
0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x04, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x10, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x4c,
0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x05,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69,
0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65,
0x6d, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64,
0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d,
0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01,
0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x22, 0xa1, 0x01,
0x0a, 0x11, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x49,
0x74, 0x65, 0x6d, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f,
0x61, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x50, 0x61, 0x79,
0x6c, 0x6f, 0x61, 0x64, 0x12, 0x3e, 0x0a, 0x0e, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x5f,
0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67,
0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f,
0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x52, 0x0c, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x4c, 0x65,
0x67, 0x61, 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c,
0x69, 0x6e, 0x6b, 0x54, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66,
0x6f, 0x22, 0xd6, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78,
0x41, 0x63, 0x6b, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69,
0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f,
0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12,
0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x1f,
0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x12,
0x2c, 0x0a, 0x12, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x5f, 0x6c,
0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x64, 0x6f, 0x77,
0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x2b, 0x0a,
0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67,
0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x49,
0x74, 0x65, 0x6d, 0x52, 0x05, 0x69, 0x74, 0x65, 0x6d, 0x73, 0x22, 0x3c, 0x0a, 0x11, 0x44, 0x6f,
0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x49, 0x74, 0x65, 0x6d, 0x12,
0x27, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
0x0f, 0x2e, 0x67, 0x77, 0x2e, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf3, 0x01, 0x0a, 0x14, 0x47, 0x61, 0x74,
0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f,
0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61,
0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a,
0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 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, 0x34, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x68,
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x40, 0x0a, 0x0e,
0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x04,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
0x0d, 0x73, 0x74, 0x61, 0x74, 0x73, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x22, 0xe3,
0x02, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75,
0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71,
0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x3f, 0x0a, 0x11, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
0x32, 0x12, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x50, 0x0a, 0x16, 0x6c, 0x6f, 0x72, 0x61, 0x5f, 0x6d,
0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x77, 0x2e, 0x4c, 0x6f, 0x72, 0x61,
0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x48, 0x00, 0x52, 0x14, 0x6c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69,
0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x4d, 0x0a, 0x15, 0x66, 0x73, 0x6b, 0x5f,
0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x73, 0x6b,
0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x48, 0x00, 0x52, 0x13, 0x66, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64,
0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x12, 0x20, 0x0a,
0x0b, 0x64, 0x65, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01,
0x28, 0x0d, 0x52, 0x0b, 0x64, 0x65, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x42,
0x13, 0x0a, 0x11, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x22, 0x8c, 0x01, 0x0a, 0x14, 0x4c, 0x6f, 0x72, 0x61, 0x4d, 0x6f, 0x64,
0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x0a,
0x10, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63,
0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64,
0x74, 0x68, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64,
0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x61, 0x6e,
0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64,
0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
0x0d, 0x52, 0x10, 0x73, 0x70, 0x72, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x46, 0x61, 0x63, 0x74,
0x6f, 0x72, 0x73, 0x22, 0x78, 0x0a, 0x13, 0x46, 0x73, 0x6b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x29, 0x0a, 0x10, 0x62, 0x61,
0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x0f, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64, 0x74, 0x68, 0x4c,
0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69, 0x64,
0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x61, 0x6e, 0x64, 0x77, 0x69,
0x64, 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x62, 0x69, 0x74, 0x72, 0x61, 0x74, 0x65, 0x22, 0xc1, 0x02,
0x0a, 0x19, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x67,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49,
0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77,
0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74,
0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x64,
0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x73, 0x74, 0x64, 0x69, 0x6e, 0x12,
0x50, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x05,
0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x67, 0x77, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
0x79, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e,
0x74, 0x1a, 0x3e, 0x0a, 0x10, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74,
0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
0x01, 0x22, 0xc6, 0x01, 0x0a, 0x1a, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6d,
0x6d, 0x61, 0x6e, 0x64, 0x45, 0x78, 0x65, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c,
0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74,
0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a,
0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09,
0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x65,
0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x65, 0x78,
0x65, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x0a, 0x06,
0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x73, 0x74,
0x64, 0x65, 0x72, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x05, 0x20,
0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x7e, 0x0a, 0x17, 0x52, 0x61,
0x77, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x72,
0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79,
0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c,
0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63,
0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18,
0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64,
0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x80, 0x01, 0x0a, 0x19, 0x52,
0x61, 0x77, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65,
0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x67, 0x61, 0x74, 0x65,
0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x4c, 0x65,
0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f,
0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61,
0x79, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0xa3, 0x01,
0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x67,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49,
0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77,
0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x61, 0x74,
0x65, 0x77, 0x61, 0x79, 0x49, 0x64, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x67, 0x77, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x53,
0x74, 0x61, 0x74, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74,
0x65, 0x22, 0x20, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x4f, 0x46,
0x46, 0x4c, 0x49, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x4e, 0x4c, 0x49, 0x4e,
0x45, 0x10, 0x01, 0x2a, 0xb5, 0x01, 0x0a, 0x08, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x61, 0x74, 0x65,
0x12, 0x10, 0x0a, 0x0c, 0x43, 0x52, 0x5f, 0x55, 0x4e, 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44,
0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x35, 0x10, 0x01, 0x12, 0x0a,
0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52,
0x5f, 0x34, 0x5f, 0x37, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x34, 0x5f, 0x38,
0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x33, 0x5f, 0x38, 0x10, 0x05, 0x12, 0x0a,
0x0a, 0x06, 0x43, 0x52, 0x5f, 0x32, 0x5f, 0x36, 0x10, 0x06, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52,
0x5f, 0x31, 0x5f, 0x34, 0x10, 0x07, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x31, 0x5f, 0x36,
0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x5f, 0x35, 0x5f, 0x36, 0x10, 0x09, 0x12, 0x0d,
0x0a, 0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x35, 0x10, 0x0a, 0x12, 0x0d, 0x0a,
0x09, 0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x36, 0x10, 0x0b, 0x12, 0x0d, 0x0a, 0x09,
0x43, 0x52, 0x5f, 0x4c, 0x49, 0x5f, 0x34, 0x5f, 0x38, 0x10, 0x0c, 0x2a, 0x3b, 0x0a, 0x0e, 0x44,
0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x69, 0x6d, 0x69, 0x6e, 0x67, 0x12, 0x0f, 0x0a,
0x0b, 0x49, 0x4d, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x45, 0x4c, 0x59, 0x10, 0x00, 0x12, 0x09,
0x0a, 0x05, 0x44, 0x45, 0x4c, 0x41, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x47, 0x50, 0x53,
0x5f, 0x45, 0x50, 0x4f, 0x43, 0x48, 0x10, 0x02, 0x2a, 0x37, 0x0a, 0x11, 0x46, 0x69, 0x6e, 0x65,
0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x08, 0x0a,
0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x45, 0x4e, 0x43, 0x52, 0x59,
0x50, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x4c, 0x41, 0x49, 0x4e, 0x10,
0x02, 0x2a, 0x30, 0x0a, 0x09, 0x43, 0x52, 0x43, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0a,
0x0a, 0x06, 0x4e, 0x4f, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x41,
0x44, 0x5f, 0x43, 0x52, 0x43, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x52, 0x43, 0x5f, 0x4f,
0x4b, 0x10, 0x02, 0x2a, 0xbc, 0x01, 0x0a, 0x0b, 0x54, 0x78, 0x41, 0x63, 0x6b, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x47, 0x4e, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x00,
0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x54, 0x4f, 0x4f, 0x5f,
0x4c, 0x41, 0x54, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x4f, 0x4f, 0x5f, 0x45, 0x41,
0x52, 0x4c, 0x59, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49,
0x4f, 0x4e, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x54, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x43,
0x4f, 0x4c, 0x4c, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x45, 0x41, 0x43, 0x4f, 0x4e, 0x10,
0x05, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x58, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x10, 0x06, 0x12, 0x0c,
0x0a, 0x08, 0x54, 0x58, 0x5f, 0x50, 0x4f, 0x57, 0x45, 0x52, 0x10, 0x07, 0x12, 0x10, 0x0a, 0x0c,
0x47, 0x50, 0x53, 0x5f, 0x55, 0x4e, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x08, 0x12, 0x0e,
0x0a, 0x0a, 0x51, 0x55, 0x45, 0x55, 0x45, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x10, 0x09, 0x12, 0x12,
0x0a, 0x0e, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x45, 0x52, 0x52, 0x4f, 0x52,
0x10, 0x0a, 0x42, 0x6a, 0x0a, 0x14, 0x69, 0x6f, 0x2e, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74,
0x61, 0x63, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x67, 0x77, 0x42, 0x0c, 0x47, 0x61, 0x74, 0x65,
0x77, 0x61, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2d, 0x67, 0x69, 0x74, 0x68,
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63,
0x6b, 0x2f, 0x63, 0x68, 0x69, 0x72, 0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2f, 0x61, 0x70, 0x69,
0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f, 0x67, 0x77, 0xaa, 0x02, 0x12, 0x43, 0x68, 0x69, 0x72,
0x70, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x2e, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x62, 0x06,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_gw_gw_proto_rawDescOnce sync.Once
file_gw_gw_proto_rawDescData = file_gw_gw_proto_rawDesc
)
func file_gw_gw_proto_rawDescGZIP() []byte {
file_gw_gw_proto_rawDescOnce.Do(func() {
file_gw_gw_proto_rawDescData = protoimpl.X.CompressGZIP(file_gw_gw_proto_rawDescData)
})
return file_gw_gw_proto_rawDescData
}
var file_gw_gw_proto_enumTypes = make([]protoimpl.EnumInfo, 6)
var file_gw_gw_proto_msgTypes = make([]protoimpl.MessageInfo, 40)
var file_gw_gw_proto_goTypes = []interface{}{
(CodeRate)(0), // 0: gw.CodeRate
(DownlinkTiming)(0), // 1: gw.DownlinkTiming
(FineTimestampType)(0), // 2: gw.FineTimestampType
(CRCStatus)(0), // 3: gw.CRCStatus
(TxAckStatus)(0), // 4: gw.TxAckStatus
(ConnState_State)(0), // 5: gw.ConnState.State
(*Modulation)(nil), // 6: gw.Modulation
(*UplinkTxInfoLegacy)(nil), // 7: gw.UplinkTxInfoLegacy
(*UplinkTxInfo)(nil), // 8: gw.UplinkTxInfo
(*LoraModulationInfo)(nil), // 9: gw.LoraModulationInfo
(*FskModulationInfo)(nil), // 10: gw.FskModulationInfo
(*LrFhssModulationInfo)(nil), // 11: gw.LrFhssModulationInfo
(*EncryptedFineTimestamp)(nil), // 12: gw.EncryptedFineTimestamp
(*PlainFineTimestamp)(nil), // 13: gw.PlainFineTimestamp
(*GatewayStats)(nil), // 14: gw.GatewayStats
(*PerModulationCount)(nil), // 15: gw.PerModulationCount
(*UplinkRxInfoLegacy)(nil), // 16: gw.UplinkRxInfoLegacy
(*UplinkRxInfo)(nil), // 17: gw.UplinkRxInfo
(*DownlinkTxInfoLegacy)(nil), // 18: gw.DownlinkTxInfoLegacy
(*DownlinkTxInfo)(nil), // 19: gw.DownlinkTxInfo
(*Timing)(nil), // 20: gw.Timing
(*ImmediatelyTimingInfo)(nil), // 21: gw.ImmediatelyTimingInfo
(*DelayTimingInfo)(nil), // 22: gw.DelayTimingInfo
(*GPSEpochTimingInfo)(nil), // 23: gw.GPSEpochTimingInfo
(*UplinkFrame)(nil), // 24: gw.UplinkFrame
(*UplinkFrameSet)(nil), // 25: gw.UplinkFrameSet
(*DownlinkFrame)(nil), // 26: gw.DownlinkFrame
(*DownlinkFrameItem)(nil), // 27: gw.DownlinkFrameItem
(*DownlinkTxAck)(nil), // 28: gw.DownlinkTxAck
(*DownlinkTxAckItem)(nil), // 29: gw.DownlinkTxAckItem
(*GatewayConfiguration)(nil), // 30: gw.GatewayConfiguration
(*ChannelConfiguration)(nil), // 31: gw.ChannelConfiguration
(*LoraModulationConfig)(nil), // 32: gw.LoraModulationConfig
(*FskModulationConfig)(nil), // 33: gw.FskModulationConfig
(*GatewayCommandExecRequest)(nil), // 34: gw.GatewayCommandExecRequest
(*GatewayCommandExecResponse)(nil), // 35: gw.GatewayCommandExecResponse
(*RawPacketForwarderEvent)(nil), // 36: gw.RawPacketForwarderEvent
(*RawPacketForwarderCommand)(nil), // 37: gw.RawPacketForwarderCommand
(*ConnState)(nil), // 38: gw.ConnState
nil, // 39: gw.GatewayStats.MetadataEntry
nil, // 40: gw.GatewayStats.TxPacketsPerFrequencyEntry
nil, // 41: gw.GatewayStats.RxPacketsPerFrequencyEntry
nil, // 42: gw.GatewayStats.TxPacketsPerStatusEntry
nil, // 43: gw.UplinkRxInfoLegacy.MetadataEntry
nil, // 44: gw.UplinkRxInfo.MetadataEntry
nil, // 45: gw.GatewayCommandExecRequest.EnvironmentEntry
(common.Modulation)(0), // 46: common.Modulation
(*timestamppb.Timestamp)(nil), // 47: google.protobuf.Timestamp
(*common.Location)(nil), // 48: common.Location
(*durationpb.Duration)(nil), // 49: google.protobuf.Duration
}
var file_gw_gw_proto_depIdxs = []int32{
9, // 0: gw.Modulation.lora:type_name -> gw.LoraModulationInfo
10, // 1: gw.Modulation.fsk:type_name -> gw.FskModulationInfo
11, // 2: gw.Modulation.lr_fhss:type_name -> gw.LrFhssModulationInfo
46, // 3: gw.UplinkTxInfoLegacy.modulation:type_name -> common.Modulation
9, // 4: gw.UplinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo
10, // 5: gw.UplinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo
11, // 6: gw.UplinkTxInfoLegacy.lr_fhss_modulation_info:type_name -> gw.LrFhssModulationInfo
6, // 7: gw.UplinkTxInfo.modulation:type_name -> gw.Modulation
0, // 8: gw.LoraModulationInfo.code_rate:type_name -> gw.CodeRate
0, // 9: gw.LrFhssModulationInfo.code_rate:type_name -> gw.CodeRate
47, // 10: gw.PlainFineTimestamp.time:type_name -> google.protobuf.Timestamp
47, // 11: gw.GatewayStats.time:type_name -> google.protobuf.Timestamp
48, // 12: gw.GatewayStats.location:type_name -> common.Location
39, // 13: gw.GatewayStats.metadata:type_name -> gw.GatewayStats.MetadataEntry
40, // 14: gw.GatewayStats.tx_packets_per_frequency:type_name -> gw.GatewayStats.TxPacketsPerFrequencyEntry
41, // 15: gw.GatewayStats.rx_packets_per_frequency:type_name -> gw.GatewayStats.RxPacketsPerFrequencyEntry
15, // 16: gw.GatewayStats.tx_packets_per_modulation:type_name -> gw.PerModulationCount
15, // 17: gw.GatewayStats.rx_packets_per_modulation:type_name -> gw.PerModulationCount
42, // 18: gw.GatewayStats.tx_packets_per_status:type_name -> gw.GatewayStats.TxPacketsPerStatusEntry
6, // 19: gw.PerModulationCount.modulation:type_name -> gw.Modulation
47, // 20: gw.UplinkRxInfoLegacy.time:type_name -> google.protobuf.Timestamp
49, // 21: gw.UplinkRxInfoLegacy.time_since_gps_epoch:type_name -> google.protobuf.Duration
48, // 22: gw.UplinkRxInfoLegacy.location:type_name -> common.Location
2, // 23: gw.UplinkRxInfoLegacy.fine_timestamp_type:type_name -> gw.FineTimestampType
12, // 24: gw.UplinkRxInfoLegacy.encrypted_fine_timestamp:type_name -> gw.EncryptedFineTimestamp
13, // 25: gw.UplinkRxInfoLegacy.plain_fine_timestamp:type_name -> gw.PlainFineTimestamp
3, // 26: gw.UplinkRxInfoLegacy.crc_status:type_name -> gw.CRCStatus
43, // 27: gw.UplinkRxInfoLegacy.metadata:type_name -> gw.UplinkRxInfoLegacy.MetadataEntry
47, // 28: gw.UplinkRxInfo.time:type_name -> google.protobuf.Timestamp
49, // 29: gw.UplinkRxInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration
49, // 30: gw.UplinkRxInfo.fine_time_since_gps_epoch:type_name -> google.protobuf.Duration
48, // 31: gw.UplinkRxInfo.location:type_name -> common.Location
44, // 32: gw.UplinkRxInfo.metadata:type_name -> gw.UplinkRxInfo.MetadataEntry
3, // 33: gw.UplinkRxInfo.crc_status:type_name -> gw.CRCStatus
46, // 34: gw.DownlinkTxInfoLegacy.modulation:type_name -> common.Modulation
9, // 35: gw.DownlinkTxInfoLegacy.lora_modulation_info:type_name -> gw.LoraModulationInfo
10, // 36: gw.DownlinkTxInfoLegacy.fsk_modulation_info:type_name -> gw.FskModulationInfo
1, // 37: gw.DownlinkTxInfoLegacy.timing:type_name -> gw.DownlinkTiming
21, // 38: gw.DownlinkTxInfoLegacy.immediately_timing_info:type_name -> gw.ImmediatelyTimingInfo
22, // 39: gw.DownlinkTxInfoLegacy.delay_timing_info:type_name -> gw.DelayTimingInfo
23, // 40: gw.DownlinkTxInfoLegacy.gps_epoch_timing_info:type_name -> gw.GPSEpochTimingInfo
6, // 41: gw.DownlinkTxInfo.modulation:type_name -> gw.Modulation
20, // 42: gw.DownlinkTxInfo.timing:type_name -> gw.Timing
21, // 43: gw.Timing.immediately:type_name -> gw.ImmediatelyTimingInfo
22, // 44: gw.Timing.delay:type_name -> gw.DelayTimingInfo
23, // 45: gw.Timing.gps_epoch:type_name -> gw.GPSEpochTimingInfo
49, // 46: gw.DelayTimingInfo.delay:type_name -> google.protobuf.Duration
49, // 47: gw.GPSEpochTimingInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration
7, // 48: gw.UplinkFrame.tx_info_legacy:type_name -> gw.UplinkTxInfoLegacy
16, // 49: gw.UplinkFrame.rx_info_legacy:type_name -> gw.UplinkRxInfoLegacy
8, // 50: gw.UplinkFrame.tx_info:type_name -> gw.UplinkTxInfo
17, // 51: gw.UplinkFrame.rx_info:type_name -> gw.UplinkRxInfo
8, // 52: gw.UplinkFrameSet.tx_info:type_name -> gw.UplinkTxInfo
17, // 53: gw.UplinkFrameSet.rx_info:type_name -> gw.UplinkRxInfo
27, // 54: gw.DownlinkFrame.items:type_name -> gw.DownlinkFrameItem
18, // 55: gw.DownlinkFrameItem.tx_info_legacy:type_name -> gw.DownlinkTxInfoLegacy
19, // 56: gw.DownlinkFrameItem.tx_info:type_name -> gw.DownlinkTxInfo
29, // 57: gw.DownlinkTxAck.items:type_name -> gw.DownlinkTxAckItem
4, // 58: gw.DownlinkTxAckItem.status:type_name -> gw.TxAckStatus
31, // 59: gw.GatewayConfiguration.channels:type_name -> gw.ChannelConfiguration
49, // 60: gw.GatewayConfiguration.stats_interval:type_name -> google.protobuf.Duration
46, // 61: gw.ChannelConfiguration.modulation_legacy:type_name -> common.Modulation
32, // 62: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoraModulationConfig
33, // 63: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FskModulationConfig
45, // 64: gw.GatewayCommandExecRequest.environment:type_name -> gw.GatewayCommandExecRequest.EnvironmentEntry
5, // 65: gw.ConnState.state:type_name -> gw.ConnState.State
66, // [66:66] is the sub-list for method output_type
66, // [66:66] is the sub-list for method input_type
66, // [66:66] is the sub-list for extension type_name
66, // [66:66] is the sub-list for extension extendee
0, // [0:66] is the sub-list for field type_name
}
func init() { file_gw_gw_proto_init() }
func file_gw_gw_proto_init() {
if File_gw_gw_proto != nil {
return
}
if !protoimpl.UnsafeEnabled {
file_gw_gw_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Modulation); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UplinkTxInfoLegacy); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UplinkTxInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LoraModulationInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FskModulationInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LrFhssModulationInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*EncryptedFineTimestamp); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*PlainFineTimestamp); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GatewayStats); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*PerModulationCount); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UplinkRxInfoLegacy); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UplinkRxInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DownlinkTxInfoLegacy); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DownlinkTxInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*Timing); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ImmediatelyTimingInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DelayTimingInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GPSEpochTimingInfo); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UplinkFrame); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UplinkFrameSet); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DownlinkFrame); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DownlinkFrameItem); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DownlinkTxAck); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*DownlinkTxAckItem); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GatewayConfiguration); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ChannelConfiguration); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*LoraModulationConfig); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*FskModulationConfig); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GatewayCommandExecRequest); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*GatewayCommandExecResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RawPacketForwarderEvent); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*RawPacketForwarderCommand); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_gw_gw_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ConnState); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
file_gw_gw_proto_msgTypes[0].OneofWrappers = []interface{}{
(*Modulation_Lora)(nil),
(*Modulation_Fsk)(nil),
(*Modulation_LrFhss)(nil),
}
file_gw_gw_proto_msgTypes[1].OneofWrappers = []interface{}{
(*UplinkTxInfoLegacy_LoraModulationInfo)(nil),
(*UplinkTxInfoLegacy_FskModulationInfo)(nil),
(*UplinkTxInfoLegacy_LrFhssModulationInfo)(nil),
}
file_gw_gw_proto_msgTypes[10].OneofWrappers = []interface{}{
(*UplinkRxInfoLegacy_EncryptedFineTimestamp)(nil),
(*UplinkRxInfoLegacy_PlainFineTimestamp)(nil),
}
file_gw_gw_proto_msgTypes[12].OneofWrappers = []interface{}{
(*DownlinkTxInfoLegacy_LoraModulationInfo)(nil),
(*DownlinkTxInfoLegacy_FskModulationInfo)(nil),
(*DownlinkTxInfoLegacy_ImmediatelyTimingInfo)(nil),
(*DownlinkTxInfoLegacy_DelayTimingInfo)(nil),
(*DownlinkTxInfoLegacy_GpsEpochTimingInfo)(nil),
}
file_gw_gw_proto_msgTypes[14].OneofWrappers = []interface{}{
(*Timing_Immediately)(nil),
(*Timing_Delay)(nil),
(*Timing_GpsEpoch)(nil),
}
file_gw_gw_proto_msgTypes[25].OneofWrappers = []interface{}{
(*ChannelConfiguration_LoraModulationConfig)(nil),
(*ChannelConfiguration_FskModulationConfig)(nil),
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_gw_gw_proto_rawDesc,
NumEnums: 6,
NumMessages: 40,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_gw_gw_proto_goTypes,
DependencyIndexes: file_gw_gw_proto_depIdxs,
EnumInfos: file_gw_gw_proto_enumTypes,
MessageInfos: file_gw_gw_proto_msgTypes,
}.Build()
File_gw_gw_proto = out.File
file_gw_gw_proto_rawDesc = nil
file_gw_gw_proto_goTypes = nil
file_gw_gw_proto_depIdxs = nil
}