chirpstack/api/go/gw/gw.pb.go
2022-04-06 21:18:32 +01:00

3710 lines
132 KiB
Go

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
// protoc v3.18.1
// 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"
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 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[0].Descriptor()
}
func (DownlinkTiming) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[0]
}
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{0}
}
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[1].Descriptor()
}
func (FineTimestampType) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[1]
}
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{1}
}
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[2].Descriptor()
}
func (CRCStatus) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[2]
}
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{2}
}
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[3].Descriptor()
}
func (TxAckStatus) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[3]
}
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{3}
}
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[4].Descriptor()
}
func (ConnState_State) Type() protoreflect.EnumType {
return &file_gw_gw_proto_enumTypes[4]
}
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{28, 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,json=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 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 common.Modulation `protobuf:"varint,2,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,omitempty"`
// Types that are assignable to ModulationInfo:
// *UplinkTXInfo_LoraModulationInfo
// *UplinkTXInfo_FskModulationInfo
// *UplinkTXInfo_LrFhssModulationInfo
ModulationInfo isUplinkTXInfo_ModulationInfo `protobuf_oneof:"modulation_info"`
}
func (x *UplinkTXInfo) Reset() {
*x = UplinkTXInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[1]
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[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 UplinkTXInfo.ProtoReflect.Descriptor instead.
func (*UplinkTXInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{1}
}
func (x *UplinkTXInfo) GetFrequency() uint32 {
if x != nil {
return x.Frequency
}
return 0
}
func (x *UplinkTXInfo) GetModulation() common.Modulation {
if x != nil {
return x.Modulation
}
return common.Modulation(0)
}
func (m *UplinkTXInfo) GetModulationInfo() isUplinkTXInfo_ModulationInfo {
if m != nil {
return m.ModulationInfo
}
return nil
}
func (x *UplinkTXInfo) GetLoraModulationInfo() *LoRaModulationInfo {
if x, ok := x.GetModulationInfo().(*UplinkTXInfo_LoraModulationInfo); ok {
return x.LoraModulationInfo
}
return nil
}
func (x *UplinkTXInfo) GetFskModulationInfo() *FSKModulationInfo {
if x, ok := x.GetModulationInfo().(*UplinkTXInfo_FskModulationInfo); ok {
return x.FskModulationInfo
}
return nil
}
func (x *UplinkTXInfo) GetLrFhssModulationInfo() *LRFHSSModulationInfo {
if x, ok := x.GetModulationInfo().(*UplinkTXInfo_LrFhssModulationInfo); ok {
return x.LrFhssModulationInfo
}
return nil
}
type isUplinkTXInfo_ModulationInfo interface {
isUplinkTXInfo_ModulationInfo()
}
type UplinkTXInfo_LoraModulationInfo struct {
// LoRa modulation information.
LoraModulationInfo *LoRaModulationInfo `protobuf:"bytes,3,opt,name=lora_modulation_info,json=loRaModulationInfo,proto3,oneof"`
}
type UplinkTXInfo_FskModulationInfo struct {
// FSK modulation information.
FskModulationInfo *FSKModulationInfo `protobuf:"bytes,4,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"`
}
type UplinkTXInfo_LrFhssModulationInfo struct {
// LR-FHSS modulation information.
LrFhssModulationInfo *LRFHSSModulationInfo `protobuf:"bytes,5,opt,name=lr_fhss_modulation_info,json=lrFHSSModulationInfo,proto3,oneof"`
}
func (*UplinkTXInfo_LoraModulationInfo) isUplinkTXInfo_ModulationInfo() {}
func (*UplinkTXInfo_FskModulationInfo) isUplinkTXInfo_ModulationInfo() {}
func (*UplinkTXInfo_LrFhssModulationInfo) isUplinkTXInfo_ModulationInfo() {}
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.
CodeRate string `protobuf:"bytes,3,opt,name=code_rate,json=codeRate,proto3" 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[2]
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[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 LoRaModulationInfo.ProtoReflect.Descriptor instead.
func (*LoRaModulationInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{2}
}
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) GetCodeRate() string {
if x != nil {
return x.CodeRate
}
return ""
}
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[3]
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[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 FSKModulationInfo.ProtoReflect.Descriptor instead.
func (*FSKModulationInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{3}
}
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.
CodeRate string `protobuf:"bytes,2,opt,name=code_rate,json=codeRate,proto3" 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[4]
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[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 LRFHSSModulationInfo.ProtoReflect.Descriptor instead.
func (*LRFHSSModulationInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{4}
}
func (x *LRFHSSModulationInfo) GetOperatingChannelWidth() uint32 {
if x != nil {
return x.OperatingChannelWidth
}
return 0
}
func (x *LRFHSSModulationInfo) GetCodeRate() string {
if x != nil {
return x.CodeRate
}
return ""
}
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[5]
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[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 EncryptedFineTimestamp.ProtoReflect.Descriptor instead.
func (*EncryptedFineTimestamp) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{5}
}
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[6]
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[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 PlainFineTimestamp.ProtoReflect.Descriptor instead.
func (*PlainFineTimestamp) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{6}
}
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.
GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
// Gateway IP.
Ip string `protobuf:"bytes,9,opt,name=ip,proto3" json:"ip,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 LoRa Server 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=meta_data,json=metaData,proto3" json:"meta_data,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
// Stats ID (UUID).
// Unique identifier for the gateway stats.
StatsId []byte `protobuf:"bytes,11,opt,name=stats_id,json=statsID,proto3" json:"stats_id,omitempty"`
// 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[7]
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[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 GatewayStats.ProtoReflect.Descriptor instead.
func (*GatewayStats) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{7}
}
func (x *GatewayStats) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
func (x *GatewayStats) GetIp() string {
if x != nil {
return x.Ip
}
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) GetStatsId() []byte {
if x != nil {
return x.StatsId
}
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[8]
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[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 PerModulationCount.ProtoReflect.Descriptor instead.
func (*PerModulationCount) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{8}
}
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 UplinkRXInfo 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:
// *UplinkRXInfo_EncryptedFineTimestamp
// *UplinkRXInfo_PlainFineTimestamp
FineTimestamp isUplinkRXInfo_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 *UplinkRXInfo) Reset() {
*x = UplinkRXInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[9]
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[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 UplinkRXInfo.ProtoReflect.Descriptor instead.
func (*UplinkRXInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{9}
}
func (x *UplinkRXInfo) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
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) GetRssi() int32 {
if x != nil {
return x.Rssi
}
return 0
}
func (x *UplinkRXInfo) GetLoraSnr() float64 {
if x != nil {
return x.LoraSnr
}
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) GetFineTimestampType() FineTimestampType {
if x != nil {
return x.FineTimestampType
}
return FineTimestampType_NONE
}
func (m *UplinkRXInfo) GetFineTimestamp() isUplinkRXInfo_FineTimestamp {
if m != nil {
return m.FineTimestamp
}
return nil
}
func (x *UplinkRXInfo) GetEncryptedFineTimestamp() *EncryptedFineTimestamp {
if x, ok := x.GetFineTimestamp().(*UplinkRXInfo_EncryptedFineTimestamp); ok {
return x.EncryptedFineTimestamp
}
return nil
}
func (x *UplinkRXInfo) GetPlainFineTimestamp() *PlainFineTimestamp {
if x, ok := x.GetFineTimestamp().(*UplinkRXInfo_PlainFineTimestamp); ok {
return x.PlainFineTimestamp
}
return nil
}
func (x *UplinkRXInfo) GetContext() []byte {
if x != nil {
return x.Context
}
return nil
}
func (x *UplinkRXInfo) GetUplinkId() []byte {
if x != nil {
return x.UplinkId
}
return nil
}
func (x *UplinkRXInfo) GetCrcStatus() CRCStatus {
if x != nil {
return x.CrcStatus
}
return CRCStatus_NO_CRC
}
func (x *UplinkRXInfo) GetMetadata() map[string]string {
if x != nil {
return x.Metadata
}
return nil
}
type isUplinkRXInfo_FineTimestamp interface {
isUplinkRXInfo_FineTimestamp()
}
type UplinkRXInfo_EncryptedFineTimestamp struct {
// Encrypted fine-timestamp data.
EncryptedFineTimestamp *EncryptedFineTimestamp `protobuf:"bytes,13,opt,name=encrypted_fine_timestamp,json=encryptedFineTimestamp,proto3,oneof"`
}
type UplinkRXInfo_PlainFineTimestamp struct {
// Plain fine-timestamp data.
PlainFineTimestamp *PlainFineTimestamp `protobuf:"bytes,14,opt,name=plain_fine_timestamp,json=plainFineTimestamp,proto3,oneof"`
}
func (*UplinkRXInfo_EncryptedFineTimestamp) isUplinkRXInfo_FineTimestamp() {}
func (*UplinkRXInfo_PlainFineTimestamp) isUplinkRXInfo_FineTimestamp() {}
type DownlinkTXInfo 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:
// *DownlinkTXInfo_LoraModulationInfo
// *DownlinkTXInfo_FskModulationInfo
ModulationInfo isDownlinkTXInfo_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:
// *DownlinkTXInfo_ImmediatelyTimingInfo
// *DownlinkTXInfo_DelayTimingInfo
// *DownlinkTXInfo_GpsEpochTimingInfo
TimingInfo isDownlinkTXInfo_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 *DownlinkTXInfo) Reset() {
*x = DownlinkTXInfo{}
if protoimpl.UnsafeEnabled {
mi := &file_gw_gw_proto_msgTypes[10]
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[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 DownlinkTXInfo.ProtoReflect.Descriptor instead.
func (*DownlinkTXInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{10}
}
func (x *DownlinkTXInfo) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
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() common.Modulation {
if x != nil {
return x.Modulation
}
return common.Modulation(0)
}
func (m *DownlinkTXInfo) GetModulationInfo() isDownlinkTXInfo_ModulationInfo {
if m != nil {
return m.ModulationInfo
}
return nil
}
func (x *DownlinkTXInfo) GetLoraModulationInfo() *LoRaModulationInfo {
if x, ok := x.GetModulationInfo().(*DownlinkTXInfo_LoraModulationInfo); ok {
return x.LoraModulationInfo
}
return nil
}
func (x *DownlinkTXInfo) GetFskModulationInfo() *FSKModulationInfo {
if x, ok := x.GetModulationInfo().(*DownlinkTXInfo_FskModulationInfo); ok {
return x.FskModulationInfo
}
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() DownlinkTiming {
if x != nil {
return x.Timing
}
return DownlinkTiming_IMMEDIATELY
}
func (m *DownlinkTXInfo) GetTimingInfo() isDownlinkTXInfo_TimingInfo {
if m != nil {
return m.TimingInfo
}
return nil
}
func (x *DownlinkTXInfo) GetImmediatelyTimingInfo() *ImmediatelyTimingInfo {
if x, ok := x.GetTimingInfo().(*DownlinkTXInfo_ImmediatelyTimingInfo); ok {
return x.ImmediatelyTimingInfo
}
return nil
}
func (x *DownlinkTXInfo) GetDelayTimingInfo() *DelayTimingInfo {
if x, ok := x.GetTimingInfo().(*DownlinkTXInfo_DelayTimingInfo); ok {
return x.DelayTimingInfo
}
return nil
}
func (x *DownlinkTXInfo) GetGpsEpochTimingInfo() *GPSEpochTimingInfo {
if x, ok := x.GetTimingInfo().(*DownlinkTXInfo_GpsEpochTimingInfo); ok {
return x.GpsEpochTimingInfo
}
return nil
}
func (x *DownlinkTXInfo) GetContext() []byte {
if x != nil {
return x.Context
}
return nil
}
type isDownlinkTXInfo_ModulationInfo interface {
isDownlinkTXInfo_ModulationInfo()
}
type DownlinkTXInfo_LoraModulationInfo struct {
// LoRa modulation information.
LoraModulationInfo *LoRaModulationInfo `protobuf:"bytes,8,opt,name=lora_modulation_info,json=loRaModulationInfo,proto3,oneof"`
}
type DownlinkTXInfo_FskModulationInfo struct {
// FSK modulation information.
FskModulationInfo *FSKModulationInfo `protobuf:"bytes,9,opt,name=fsk_modulation_info,json=fskModulationInfo,proto3,oneof"`
}
func (*DownlinkTXInfo_LoraModulationInfo) isDownlinkTXInfo_ModulationInfo() {}
func (*DownlinkTXInfo_FskModulationInfo) isDownlinkTXInfo_ModulationInfo() {}
type isDownlinkTXInfo_TimingInfo interface {
isDownlinkTXInfo_TimingInfo()
}
type DownlinkTXInfo_ImmediatelyTimingInfo struct {
// Immediately timing information.
ImmediatelyTimingInfo *ImmediatelyTimingInfo `protobuf:"bytes,13,opt,name=immediately_timing_info,json=immediatelyTimingInfo,proto3,oneof"`
}
type DownlinkTXInfo_DelayTimingInfo struct {
// Context based delay timing information.
DelayTimingInfo *DelayTimingInfo `protobuf:"bytes,14,opt,name=delay_timing_info,json=delayTimingInfo,proto3,oneof"`
}
type DownlinkTXInfo_GpsEpochTimingInfo struct {
// GPS Epoch timing information.
GpsEpochTimingInfo *GPSEpochTimingInfo `protobuf:"bytes,15,opt,name=gps_epoch_timing_info,json=gpsEpochTimingInfo,proto3,oneof"`
}
func (*DownlinkTXInfo_ImmediatelyTimingInfo) isDownlinkTXInfo_TimingInfo() {}
func (*DownlinkTXInfo_DelayTimingInfo) isDownlinkTXInfo_TimingInfo() {}
func (*DownlinkTXInfo_GpsEpochTimingInfo) isDownlinkTXInfo_TimingInfo() {}
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[11]
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[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 ImmediatelyTimingInfo.ProtoReflect.Descriptor instead.
func (*ImmediatelyTimingInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{11}
}
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[12]
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[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 DelayTimingInfo.ProtoReflect.Descriptor instead.
func (*DelayTimingInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{12}
}
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[13]
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[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 GPSEpochTimingInfo.ProtoReflect.Descriptor instead.
func (*GPSEpochTimingInfo) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{13}
}
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.
TxInfo *UplinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
// RX meta-data.
RxInfo *UplinkRXInfo `protobuf:"bytes,3,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[14]
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[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 UplinkFrame.ProtoReflect.Descriptor instead.
func (*UplinkFrame) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{14}
}
func (x *UplinkFrame) GetPhyPayload() []byte {
if x != nil {
return x.PhyPayload
}
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[15]
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[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 UplinkFrameSet.ProtoReflect.Descriptor instead.
func (*UplinkFrameSet) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{15}
}
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
// PHYPayload.
// Deprecated: replaced by items.
PhyPayload []byte `protobuf:"bytes,1,opt,name=phy_payload,json=phyPayload,proto3" json:"phy_payload,omitempty"`
// TX meta-data.
// Deprecated: replaced by items.
TxInfo *DownlinkTXInfo `protobuf:"bytes,2,opt,name=tx_info,json=txInfo,proto3" json:"tx_info,omitempty"`
// Token (uint16 value).
// Deprecated: replaced by downlink_id.
Token uint32 `protobuf:"varint,3,opt,name=token,proto3" json:"token,omitempty"`
// Downlink ID (UUID).
DownlinkId []byte `protobuf:"bytes,4,opt,name=downlink_id,json=downlinkID,proto3" json:"downlink_id,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.
GatewayId []byte `protobuf:"bytes,6,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[16]
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[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 DownlinkFrame.ProtoReflect.Descriptor instead.
func (*DownlinkFrame) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{16}
}
func (x *DownlinkFrame) GetPhyPayload() []byte {
if x != nil {
return x.PhyPayload
}
return nil
}
func (x *DownlinkFrame) GetTxInfo() *DownlinkTXInfo {
if x != nil {
return x.TxInfo
}
return nil
}
func (x *DownlinkFrame) GetToken() uint32 {
if x != nil {
return x.Token
}
return 0
}
func (x *DownlinkFrame) GetDownlinkId() []byte {
if x != nil {
return x.DownlinkId
}
return nil
}
func (x *DownlinkFrame) GetItems() []*DownlinkFrameItem {
if x != nil {
return x.Items
}
return nil
}
func (x *DownlinkFrame) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
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.
TxInfo *DownlinkTXInfo `protobuf:"bytes,2,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[17]
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[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 DownlinkFrameItem.ProtoReflect.Descriptor instead.
func (*DownlinkFrameItem) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{17}
}
func (x *DownlinkFrameItem) GetPhyPayload() []byte {
if x != nil {
return x.PhyPayload
}
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.
GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
// Token (uint16 value).
// Deprecated: replaced by downlink_id.
Token uint32 `protobuf:"varint,2,opt,name=token,proto3" json:"token,omitempty"`
// Error.
// Deprecated: replaced by items.
Error string `protobuf:"bytes,3,opt,name=error,proto3" json:"error,omitempty"`
// Downlink ID (UUID).
DownlinkId []byte `protobuf:"bytes,4,opt,name=downlink_id,json=downlinkID,proto3" json:"downlink_id,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[18]
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[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 DownlinkTXAck.ProtoReflect.Descriptor instead.
func (*DownlinkTXAck) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{18}
}
func (x *DownlinkTXAck) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
func (x *DownlinkTXAck) GetToken() uint32 {
if x != nil {
return x.Token
}
return 0
}
func (x *DownlinkTXAck) GetError() string {
if x != nil {
return x.Error
}
return ""
}
func (x *DownlinkTXAck) GetDownlinkId() []byte {
if x != nil {
return x.DownlinkId
}
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[19]
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[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 DownlinkTXAckItem.ProtoReflect.Descriptor instead.
func (*DownlinkTXAckItem) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{19}
}
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.
GatewayId []byte `protobuf:"bytes,1,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[20]
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[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 GatewayConfiguration.ProtoReflect.Descriptor instead.
func (*GatewayConfiguration) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{20}
}
func (x *GatewayConfiguration) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
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"`
// Channel modulation.
Modulation common.Modulation `protobuf:"varint,2,opt,name=modulation,proto3,enum=common.Modulation" json:"modulation,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[21]
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[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 ChannelConfiguration.ProtoReflect.Descriptor instead.
func (*ChannelConfiguration) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{21}
}
func (x *ChannelConfiguration) GetFrequency() uint32 {
if x != nil {
return x.Frequency
}
return 0
}
func (x *ChannelConfiguration) GetModulation() common.Modulation {
if x != nil {
return x.Modulation
}
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.
Bandwidth uint32 `protobuf:"varint,1,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[22]
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[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 LoRaModulationConfig.ProtoReflect.Descriptor instead.
func (*LoRaModulationConfig) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{22}
}
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.
Bandwidth uint32 `protobuf:"varint,1,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[23]
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[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 FSKModulationConfig.ProtoReflect.Descriptor instead.
func (*FSKModulationConfig) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{23}
}
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.
GatewayId []byte `protobuf:"bytes,1,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 (UUID).
// The same token will be returned when the execution of the command has
// completed.
ExecId []byte `protobuf:"bytes,3,opt,name=ExecId,json=execID,proto3" json:"ExecId,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[24]
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[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 GatewayCommandExecRequest.ProtoReflect.Descriptor instead.
func (*GatewayCommandExecRequest) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{24}
}
func (x *GatewayCommandExecRequest) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
func (x *GatewayCommandExecRequest) GetCommand() string {
if x != nil {
return x.Command
}
return ""
}
func (x *GatewayCommandExecRequest) GetExecId() []byte {
if x != nil {
return x.ExecId
}
return nil
}
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.
GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
// Execution request ID (UUID).
ExecId []byte `protobuf:"bytes,2,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[25]
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[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 GatewayCommandExecResponse.ProtoReflect.Descriptor instead.
func (*GatewayCommandExecResponse) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{25}
}
func (x *GatewayCommandExecResponse) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
func (x *GatewayCommandExecResponse) GetExecId() []byte {
if x != nil {
return x.ExecId
}
return nil
}
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.
GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
// Raw ID (UUID).
RawId []byte `protobuf:"bytes,2,opt,name=raw_id,json=rawID,proto3" json:"raw_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[26]
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[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 RawPacketForwarderEvent.ProtoReflect.Descriptor instead.
func (*RawPacketForwarderEvent) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{26}
}
func (x *RawPacketForwarderEvent) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
func (x *RawPacketForwarderEvent) GetRawId() []byte {
if x != nil {
return x.RawId
}
return nil
}
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.
GatewayId []byte `protobuf:"bytes,1,opt,name=gateway_id,json=gatewayID,proto3" json:"gateway_id,omitempty"`
// Raw ID (UUID).
RawId []byte `protobuf:"bytes,2,opt,name=raw_id,json=rawID,proto3" json:"raw_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[27]
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[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 RawPacketForwarderCommand.ProtoReflect.Descriptor instead.
func (*RawPacketForwarderCommand) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{27}
}
func (x *RawPacketForwarderCommand) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
func (x *RawPacketForwarderCommand) GetRawId() []byte {
if x != nil {
return x.RawId
}
return nil
}
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.
GatewayId []byte `protobuf:"bytes,1,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[28]
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[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 ConnState.ProtoReflect.Descriptor instead.
func (*ConnState) Descriptor() ([]byte, []int) {
return file_gw_gw_proto_rawDescGZIP(), []int{28}
}
func (x *ConnState) GetGatewayId() []byte {
if x != nil {
return x.GatewayId
}
return nil
}
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, 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, 0x52, 0x61, 0x4d, 0x6f,
0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x04,
0x6c, 0x6f, 0x52, 0x61, 0x12, 0x29, 0x0a, 0x03, 0x66, 0x73, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x15, 0x2e, 0x67, 0x77, 0x2e, 0x46, 0x53, 0x4b, 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, 0x52, 0x46, 0x48, 0x53, 0x53, 0x4d, 0x6f, 0x64, 0x75,
0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x06, 0x6c, 0x72,
0x46, 0x48, 0x53, 0x53, 0x42, 0x0c, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
0x72, 0x73, 0x22, 0xdb, 0x02, 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x58, 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, 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, 0x52, 0x61, 0x4d, 0x6f, 0x64,
0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x12, 0x6c,
0x6f, 0x52, 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, 0x53, 0x4b, 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, 0x52, 0x46, 0x48, 0x53, 0x53, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48, 0x00, 0x52, 0x14, 0x6c, 0x72, 0x46, 0x48, 0x53, 0x53, 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, 0xb1, 0x01, 0x0a, 0x12, 0x4c, 0x6f, 0x52, 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, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 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, 0x53, 0x4b, 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, 0x8a, 0x01, 0x0a, 0x14, 0x4c, 0x52, 0x46, 0x48, 0x53,
0x53, 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, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x5f,
0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 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, 0x53, 0x12, 0x17, 0x0a, 0x07, 0x66, 0x70, 0x67, 0x61, 0x5f, 0x69, 0x64, 0x18,
0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x66, 0x70, 0x67, 0x61, 0x49, 0x44, 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, 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, 0x44, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52,
0x02, 0x69, 0x70, 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, 0x4b, 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, 0x3b, 0x0a, 0x09, 0x6d,
0x65, 0x74, 0x61, 0x5f, 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, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08,
0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x74,
0x73, 0x5f, 0x69, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x74, 0x61, 0x74,
0x73, 0x49, 0x44, 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, 0x44, 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, 0xc6, 0x06, 0x0a, 0x0c, 0x55, 0x70, 0x6c, 0x69, 0x6e,
0x6b, 0x52, 0x58, 0x49, 0x6e, 0x66, 0x6f, 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, 0x44, 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, 0x50, 0x53, 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, 0x52, 0x61, 0x53, 0x4e,
0x52, 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, 0x44, 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, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
0x18, 0x12, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c, 0x69,
0x6e, 0x6b, 0x52, 0x58, 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,
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,
0xa9, 0x05, 0x0a, 0x0e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x58, 0x49, 0x6e,
0x66, 0x6f, 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,
0x44, 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, 0x52,
0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x48,
0x00, 0x52, 0x12, 0x6c, 0x6f, 0x52, 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, 0x53, 0x4b, 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, 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, 0x50, 0x53, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x22, 0x84, 0x01, 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, 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, 0x58, 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, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x77, 0x2e, 0x55, 0x70, 0x6c,
0x69, 0x6e, 0x6b, 0x52, 0x58, 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, 0x58, 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, 0x58, 0x49,
0x6e, 0x66, 0x6f, 0x52, 0x06, 0x72, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xe0, 0x01, 0x0a, 0x0d,
0x44, 0x6f, 0x77, 0x6e, 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, 0x2b,
0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x58, 0x49,
0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x14, 0x0a, 0x05, 0x74,
0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65,
0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64,
0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b,
0x49, 0x44, 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,
0x1d, 0x0a, 0x0a, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x09, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x49, 0x44, 0x22, 0x61,
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, 0x2b, 0x0a, 0x07, 0x74, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x77, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c,
0x69, 0x6e, 0x6b, 0x54, 0x58, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x06, 0x74, 0x78, 0x49, 0x6e, 0x66,
0x6f, 0x22, 0xa8, 0x01, 0x0a, 0x0d, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x54, 0x58,
0x41, 0x63, 0x6b, 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, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0d, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f,
0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x1f,
0x0a, 0x0b, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x0a, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x49, 0x44, 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, 0x58, 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, 0x58, 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, 0xc7, 0x01, 0x0a, 0x14, 0x47,
0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
0x69, 0x6f, 0x6e, 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, 0x44, 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, 0xd6, 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, 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,
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, 0x52, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74,
0x69, 0x6f, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x48, 0x00, 0x52, 0x14, 0x6c, 0x6f, 0x52,
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, 0x53, 0x4b, 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, 0x61, 0x0a,
0x14, 0x4c, 0x6f, 0x52, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43,
0x6f, 0x6e, 0x66, 0x69, 0x67, 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, 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, 0x4d, 0x0a, 0x13, 0x46, 0x53, 0x4b, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f,
0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 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, 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,
0x94, 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, 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, 0x44, 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, 0x16, 0x0a, 0x06, 0x45, 0x78, 0x65, 0x63, 0x49, 0x64,
0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x44, 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, 0x9a, 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, 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, 0x44, 0x12, 0x17, 0x0a, 0x07, 0x65, 0x78, 0x65, 0x63, 0x5f, 0x69, 0x64, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x65, 0x78, 0x65, 0x63, 0x49, 0x44, 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, 0x69, 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, 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, 0x44, 0x12, 0x15, 0x0a,
0x06, 0x72, 0x61, 0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72,
0x61, 0x77, 0x49, 0x44, 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, 0x6b,
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, 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, 0x44, 0x12, 0x15, 0x0a, 0x06, 0x72, 0x61,
0x77, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x72, 0x61, 0x77, 0x49,
0x44, 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, 0x77, 0x0a, 0x09, 0x43,
0x6f, 0x6e, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 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, 0x44, 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, 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, 0x55, 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, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x34, 0x2f,
0x67, 0x77, 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, 5)
var file_gw_gw_proto_msgTypes = make([]protoimpl.MessageInfo, 35)
var file_gw_gw_proto_goTypes = []interface{}{
(DownlinkTiming)(0), // 0: gw.DownlinkTiming
(FineTimestampType)(0), // 1: gw.FineTimestampType
(CRCStatus)(0), // 2: gw.CRCStatus
(TxAckStatus)(0), // 3: gw.TxAckStatus
(ConnState_State)(0), // 4: gw.ConnState.State
(*Modulation)(nil), // 5: gw.Modulation
(*UplinkTXInfo)(nil), // 6: gw.UplinkTXInfo
(*LoRaModulationInfo)(nil), // 7: gw.LoRaModulationInfo
(*FSKModulationInfo)(nil), // 8: gw.FSKModulationInfo
(*LRFHSSModulationInfo)(nil), // 9: gw.LRFHSSModulationInfo
(*EncryptedFineTimestamp)(nil), // 10: gw.EncryptedFineTimestamp
(*PlainFineTimestamp)(nil), // 11: gw.PlainFineTimestamp
(*GatewayStats)(nil), // 12: gw.GatewayStats
(*PerModulationCount)(nil), // 13: gw.PerModulationCount
(*UplinkRXInfo)(nil), // 14: gw.UplinkRXInfo
(*DownlinkTXInfo)(nil), // 15: gw.DownlinkTXInfo
(*ImmediatelyTimingInfo)(nil), // 16: gw.ImmediatelyTimingInfo
(*DelayTimingInfo)(nil), // 17: gw.DelayTimingInfo
(*GPSEpochTimingInfo)(nil), // 18: gw.GPSEpochTimingInfo
(*UplinkFrame)(nil), // 19: gw.UplinkFrame
(*UplinkFrameSet)(nil), // 20: gw.UplinkFrameSet
(*DownlinkFrame)(nil), // 21: gw.DownlinkFrame
(*DownlinkFrameItem)(nil), // 22: gw.DownlinkFrameItem
(*DownlinkTXAck)(nil), // 23: gw.DownlinkTXAck
(*DownlinkTXAckItem)(nil), // 24: gw.DownlinkTXAckItem
(*GatewayConfiguration)(nil), // 25: gw.GatewayConfiguration
(*ChannelConfiguration)(nil), // 26: gw.ChannelConfiguration
(*LoRaModulationConfig)(nil), // 27: gw.LoRaModulationConfig
(*FSKModulationConfig)(nil), // 28: gw.FSKModulationConfig
(*GatewayCommandExecRequest)(nil), // 29: gw.GatewayCommandExecRequest
(*GatewayCommandExecResponse)(nil), // 30: gw.GatewayCommandExecResponse
(*RawPacketForwarderEvent)(nil), // 31: gw.RawPacketForwarderEvent
(*RawPacketForwarderCommand)(nil), // 32: gw.RawPacketForwarderCommand
(*ConnState)(nil), // 33: gw.ConnState
nil, // 34: gw.GatewayStats.MetaDataEntry
nil, // 35: gw.GatewayStats.TxPacketsPerFrequencyEntry
nil, // 36: gw.GatewayStats.RxPacketsPerFrequencyEntry
nil, // 37: gw.GatewayStats.TxPacketsPerStatusEntry
nil, // 38: gw.UplinkRXInfo.MetadataEntry
nil, // 39: gw.GatewayCommandExecRequest.EnvironmentEntry
(common.Modulation)(0), // 40: common.Modulation
(*timestamppb.Timestamp)(nil), // 41: google.protobuf.Timestamp
(*common.Location)(nil), // 42: common.Location
(*durationpb.Duration)(nil), // 43: google.protobuf.Duration
}
var file_gw_gw_proto_depIdxs = []int32{
7, // 0: gw.Modulation.lora:type_name -> gw.LoRaModulationInfo
8, // 1: gw.Modulation.fsk:type_name -> gw.FSKModulationInfo
9, // 2: gw.Modulation.lr_fhss:type_name -> gw.LRFHSSModulationInfo
40, // 3: gw.UplinkTXInfo.modulation:type_name -> common.Modulation
7, // 4: gw.UplinkTXInfo.lora_modulation_info:type_name -> gw.LoRaModulationInfo
8, // 5: gw.UplinkTXInfo.fsk_modulation_info:type_name -> gw.FSKModulationInfo
9, // 6: gw.UplinkTXInfo.lr_fhss_modulation_info:type_name -> gw.LRFHSSModulationInfo
41, // 7: gw.PlainFineTimestamp.time:type_name -> google.protobuf.Timestamp
41, // 8: gw.GatewayStats.time:type_name -> google.protobuf.Timestamp
42, // 9: gw.GatewayStats.location:type_name -> common.Location
34, // 10: gw.GatewayStats.meta_data:type_name -> gw.GatewayStats.MetaDataEntry
35, // 11: gw.GatewayStats.tx_packets_per_frequency:type_name -> gw.GatewayStats.TxPacketsPerFrequencyEntry
36, // 12: gw.GatewayStats.rx_packets_per_frequency:type_name -> gw.GatewayStats.RxPacketsPerFrequencyEntry
13, // 13: gw.GatewayStats.tx_packets_per_modulation:type_name -> gw.PerModulationCount
13, // 14: gw.GatewayStats.rx_packets_per_modulation:type_name -> gw.PerModulationCount
37, // 15: gw.GatewayStats.tx_packets_per_status:type_name -> gw.GatewayStats.TxPacketsPerStatusEntry
5, // 16: gw.PerModulationCount.modulation:type_name -> gw.Modulation
41, // 17: gw.UplinkRXInfo.time:type_name -> google.protobuf.Timestamp
43, // 18: gw.UplinkRXInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration
42, // 19: gw.UplinkRXInfo.location:type_name -> common.Location
1, // 20: gw.UplinkRXInfo.fine_timestamp_type:type_name -> gw.FineTimestampType
10, // 21: gw.UplinkRXInfo.encrypted_fine_timestamp:type_name -> gw.EncryptedFineTimestamp
11, // 22: gw.UplinkRXInfo.plain_fine_timestamp:type_name -> gw.PlainFineTimestamp
2, // 23: gw.UplinkRXInfo.crc_status:type_name -> gw.CRCStatus
38, // 24: gw.UplinkRXInfo.metadata:type_name -> gw.UplinkRXInfo.MetadataEntry
40, // 25: gw.DownlinkTXInfo.modulation:type_name -> common.Modulation
7, // 26: gw.DownlinkTXInfo.lora_modulation_info:type_name -> gw.LoRaModulationInfo
8, // 27: gw.DownlinkTXInfo.fsk_modulation_info:type_name -> gw.FSKModulationInfo
0, // 28: gw.DownlinkTXInfo.timing:type_name -> gw.DownlinkTiming
16, // 29: gw.DownlinkTXInfo.immediately_timing_info:type_name -> gw.ImmediatelyTimingInfo
17, // 30: gw.DownlinkTXInfo.delay_timing_info:type_name -> gw.DelayTimingInfo
18, // 31: gw.DownlinkTXInfo.gps_epoch_timing_info:type_name -> gw.GPSEpochTimingInfo
43, // 32: gw.DelayTimingInfo.delay:type_name -> google.protobuf.Duration
43, // 33: gw.GPSEpochTimingInfo.time_since_gps_epoch:type_name -> google.protobuf.Duration
6, // 34: gw.UplinkFrame.tx_info:type_name -> gw.UplinkTXInfo
14, // 35: gw.UplinkFrame.rx_info:type_name -> gw.UplinkRXInfo
6, // 36: gw.UplinkFrameSet.tx_info:type_name -> gw.UplinkTXInfo
14, // 37: gw.UplinkFrameSet.rx_info:type_name -> gw.UplinkRXInfo
15, // 38: gw.DownlinkFrame.tx_info:type_name -> gw.DownlinkTXInfo
22, // 39: gw.DownlinkFrame.items:type_name -> gw.DownlinkFrameItem
15, // 40: gw.DownlinkFrameItem.tx_info:type_name -> gw.DownlinkTXInfo
24, // 41: gw.DownlinkTXAck.items:type_name -> gw.DownlinkTXAckItem
3, // 42: gw.DownlinkTXAckItem.status:type_name -> gw.TxAckStatus
26, // 43: gw.GatewayConfiguration.channels:type_name -> gw.ChannelConfiguration
43, // 44: gw.GatewayConfiguration.stats_interval:type_name -> google.protobuf.Duration
40, // 45: gw.ChannelConfiguration.modulation:type_name -> common.Modulation
27, // 46: gw.ChannelConfiguration.lora_modulation_config:type_name -> gw.LoRaModulationConfig
28, // 47: gw.ChannelConfiguration.fsk_modulation_config:type_name -> gw.FSKModulationConfig
39, // 48: gw.GatewayCommandExecRequest.environment:type_name -> gw.GatewayCommandExecRequest.EnvironmentEntry
4, // 49: gw.ConnState.state:type_name -> gw.ConnState.State
50, // [50:50] is the sub-list for method output_type
50, // [50:50] is the sub-list for method input_type
50, // [50:50] is the sub-list for extension type_name
50, // [50:50] is the sub-list for extension extendee
0, // [0:50] 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.(*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[2].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[3].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[4].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[5].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[6].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[7].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[8].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[9].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[10].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[11].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[12].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[13].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[14].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[15].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[16].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[17].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[18].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[19].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[20].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[21].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[22].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[23].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[24].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[25].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[26].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[27].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[28].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{}{
(*UplinkTXInfo_LoraModulationInfo)(nil),
(*UplinkTXInfo_FskModulationInfo)(nil),
(*UplinkTXInfo_LrFhssModulationInfo)(nil),
}
file_gw_gw_proto_msgTypes[9].OneofWrappers = []interface{}{
(*UplinkRXInfo_EncryptedFineTimestamp)(nil),
(*UplinkRXInfo_PlainFineTimestamp)(nil),
}
file_gw_gw_proto_msgTypes[10].OneofWrappers = []interface{}{
(*DownlinkTXInfo_LoraModulationInfo)(nil),
(*DownlinkTXInfo_FskModulationInfo)(nil),
(*DownlinkTXInfo_ImmediatelyTimingInfo)(nil),
(*DownlinkTXInfo_DelayTimingInfo)(nil),
(*DownlinkTXInfo_GpsEpochTimingInfo)(nil),
}
file_gw_gw_proto_msgTypes[21].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: 5,
NumMessages: 35,
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
}